@object-ui/i18n 17.7.0 → 18.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.
@@ -13,18 +13,19 @@ const fr = {
13
13
  notRestored: 'Le serveur a accepté la demande mais n’a pas restauré votre session administrateur — vous incarnez toujours {{user}}. Déconnectez-vous puis reconnectez-vous pour y mettre fin.',
14
14
  },
15
15
  },
16
- // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
16
+ // objectui#2600 B5 — capability picker scope group headers (labels come from the capability registry).
17
17
  capability: {
18
18
  label: {
19
19
  manage_users: "Gérer les utilisateurs",
20
20
  manage_org_users: "Gérer les utilisateurs de l'organisation",
21
21
  manage_metadata: "Gérer les métadonnées",
22
- manage_org_presentation: "Gérer la présentation de l'organisation",
22
+ manage_mailboxes: "Gérer les boîtes aux lettres",
23
23
  manage_platform_settings: "Gérer les paramètres de la plateforme",
24
24
  setup_access: "Accès à la configuration",
25
25
  setup_write: "Écriture des paramètres",
26
26
  studio_access: "Accès à Studio",
27
27
  manage_sharing: "Gérer le partage",
28
+ view_all_audit_log: "Voir tout le journal d'audit",
28
29
  },
29
30
  group: {
30
31
  platform: 'Plateforme',
@@ -32,34 +33,6 @@ const fr = {
32
33
  other: 'Autre',
33
34
  },
34
35
  },
35
- // objectui#3546 slice six — le résumé en lecture seule des facettes
36
- // d'autorisation de PermissionFacetLink. Apostrophe droite U+0027 comme dans
37
- // le reste du paquet, et espace avant les deux-points.
38
- perm: {
39
- facet: {
40
- none: "Aucun",
41
- more: "+{{count}} de plus",
42
- objects: "{{count}} objets",
43
- objects_one: "{{count}} objet",
44
- objects_many: "{{count}} d'objets",
45
- objects_other: "{{count}} objets",
46
- fields: "{{count}} règles de champ",
47
- fields_one: "{{count}} règle de champ",
48
- fields_many: "{{count}} de règles de champ",
49
- fields_other: "{{count}} règles de champ",
50
- rls: "{{count}} politiques RLS",
51
- rls_one: "{{count}} politique RLS",
52
- rls_many: "{{count}} de politiques RLS",
53
- rls_other: "{{count}} politiques RLS",
54
- tabs: "{{count}} règles d'onglet",
55
- tabs_one: "{{count}} règle d'onglet",
56
- tabs_many: "{{count}} de règles d'onglet",
57
- tabs_other: "{{count}} règles d'onglet",
58
- adminScope: "Administration déléguée configurée",
59
- designInStudio: "Concevoir dans Studio →",
60
- designInStudioHint: "Concevoir dans Studio",
61
- },
62
- },
63
36
  lookup: {
64
37
  recentlyUsed: 'Récemment utilisés',
65
38
  allResults: 'Tous les résultats',
@@ -132,6 +105,7 @@ const fr = {
132
105
  itemCount_many: "{{count}} d'éléments",
133
106
  itemCount_other: "{{count}} éléments",
134
107
  toggleSidebar: "Basculer la barre latérale",
108
+ breadcrumb: "Fil d'Ariane",
135
109
  package: "Package",
136
110
  done: "Terminé",
137
111
  editInStudio: "Modifier dans Studio",
@@ -160,6 +134,7 @@ const fr = {
160
134
  copyAll: 'Tout copier',
161
135
  },
162
136
  notAvailableHere: '« {{action}} » n\'est pas disponible sur la page actuelle.',
137
+ notAvailableForRecord: 'Non disponible pour cet enregistrement',
163
138
  completedSuccessfully: 'Action effectuée avec succès',
164
139
  failed: "Échec de l'action",
165
140
  parallelFailed: 'Une ou plusieurs actions parallèles ont échoué',
@@ -196,6 +171,8 @@ const fr = {
196
171
  // description, used when the form declares no `description` of its own.
197
172
  dialogDescriptionFallback: "Remplissez les champs du formulaire, puis envoyez ou annulez.",
198
173
  deniedDescription: "Vous n'avez pas l'autorisation de modifier ce champ.",
174
+ serverDefaultHint: "Défini automatiquement lors de l'enregistrement.",
175
+ maxFileSize: "Taille maximale : {{size}}",
199
176
  masterDetail: {
200
177
  loadingColumns: "Chargement des colonnes…",
201
178
  subtotal: "Sous-total",
@@ -264,10 +241,14 @@ const fr = {
264
241
  remove: "Supprimer l'image {{index}}",
265
242
  enlarge: "Agrandir {{name}}",
266
243
  preview: "Aperçu de l'image",
244
+ cropPreview: "Aperçu du recadrage de l'image",
267
245
  previous: "Image précédente",
268
246
  next: "Image suivante",
269
247
  counter: "{{current}} / {{total}}",
270
248
  },
249
+ percent: {
250
+ slider: "Pourcentage",
251
+ },
271
252
  relativeDate: {
272
253
  overdue: "En retard de {{count}} j",
273
254
  overdue_one: "En retard de {{count}} j",
@@ -290,6 +271,8 @@ const fr = {
290
271
  exceedsMaxSize: '« {{name}} » dépasse la taille maximale ({{max}} Mo)',
291
272
  uploadFailed: 'Échec du téléversement de « {{name}} » : {{error}}',
292
273
  uploadIncomplete: 'Le téléversement de « {{name}} » n’a pas abouti : aucun identifiant de fichier n’a été renvoyé, rien n’a été enregistré',
274
+ restricted: 'Fichier restreint',
275
+ restrictedHint: 'Vous n’avez pas accès aux détails de ce fichier',
293
276
  },
294
277
  richText: {
295
278
  format: "Format : {{format}}",
@@ -306,6 +289,10 @@ const fr = {
306
289
  search: "Rechercher des objets…",
307
290
  empty: "Aucun objet trouvé",
308
291
  },
292
+ registryRef: {
293
+ loadFailed: "La liste n'a pas pu être chargée. Vous pouvez toujours saisir le nom.",
294
+ notFound: "{{name}} (introuvable)",
295
+ },
309
296
  recipient: {
310
297
  selectTypeFirst: "Sélectionnez d'abord un type de destinataire.",
311
298
  loading: "Chargement…",
@@ -347,6 +334,13 @@ const fr = {
347
334
  dateTime: {
348
335
  impossibleDay: "La valeur enregistrée « {{value}} » n’est pas une date réelle. Choisissez une date et une heure pour la remplacer.",
349
336
  },
337
+ datePicker: {
338
+ today: "Aujourd’hui",
339
+ tomorrow: "Demain",
340
+ clear: "Effacer la date",
341
+ openCalendar: "Ouvrir le calendrier",
342
+ invalid: "Non enregistré : « {{value}} » n’est pas une date. Saisissez-la au format {{format}} ou choisissez-la dans le calendrier.",
343
+ },
350
344
  number: {
351
345
  badInput: "Non enregistré : le texte de ce champ n'est pas un nombre. Saisissez une décimale simple (exemple : {{example}}).",
352
346
  },
@@ -361,6 +355,11 @@ const fr = {
361
355
  postalCode: "Code postal",
362
356
  country: "Pays",
363
357
  },
358
+ boolean: {
359
+ offBadge: "{{label}} — Désactivé",
360
+ completed: "Terminé",
361
+ notCompleted: "Non terminé",
362
+ },
364
363
  textarea: {
365
364
  characterCount: "Nombre de caractères : {{count}} sur {{max}}",
366
365
  charactersRemaining: "Caractères restants : {{count}}",
@@ -390,10 +389,15 @@ const fr = {
390
389
  selectAllRows: "Sélectionner toutes les lignes",
391
390
  expandRow: "Développer la ligne",
392
391
  collapseRow: "Réduire la ligne",
392
+ rowActions: "Actions de la ligne",
393
393
  hideColumn: "Masquer la colonne",
394
394
  freezeColumn: "Figer la colonne",
395
395
  unfreezeColumn: "Libérer la colonne",
396
396
  pageInfo: "Page {{current}} sur {{total}}",
397
+ firstPage: "Première page",
398
+ previousPage: "Page précédente",
399
+ nextPage: "Page suivante",
400
+ lastPage: "Dernière page",
397
401
  totalRecords: "{{count}} au total",
398
402
  noResults: "Aucun résultat",
399
403
  noResultsHint: "Essayez d'ajuster vos filtres ou vos termes de recherche.",
@@ -406,6 +410,10 @@ const fr = {
406
410
  modified_one: "{{count}} ligne modifiée",
407
411
  modified_many: "{{count}} de lignes modifiées",
408
412
  modified_other: "{{count}} lignes modifiées",
413
+ saved: "{{count}} ligne(s) enregistrée(s)",
414
+ saved_one: "{{count}} ligne enregistrée",
415
+ saved_many: "{{count}} de lignes enregistrées",
416
+ saved_other: "{{count}} lignes enregistrées",
409
417
  saveFailed: 'Échec de l’enregistrement',
410
418
  selected: "{{count}} sélectionné(s)",
411
419
  selected_one: "{{count}} sélectionné",
@@ -427,6 +435,7 @@ const fr = {
427
435
  bulkAllOnPage_other: "Les {{count}} éléments de cette page sont sélectionnés.",
428
436
  bulkSelectAllMatching: "Sélectionner les {{count}} correspondances",
429
437
  bulkAllMatchingSelected: "Les {{count}} enregistrements correspondants sont tous sélectionnés.",
438
+ bulkActions: "Actions groupées",
430
439
  bulk: {
431
440
  confirmDefault: "Ceci s'appliquera à {{count}} enregistrement(s).",
432
441
  confirmDefault_one: "Ceci s'appliquera à {{count}} enregistrement.",
@@ -467,6 +476,7 @@ const fr = {
467
476
  pullToRefresh: "Tirer pour actualiser",
468
477
  refreshing: "Actualisation…",
469
478
  openRecord: "Ouvrir l'enregistrement",
479
+ recordUnavailable: "{{object}} · enregistrement indisponible",
470
480
  rowHeight: "Hauteur de ligne : {{mode}}",
471
481
  openMenu: "Ouvrir le menu",
472
482
  empty: "Vide",
@@ -486,6 +496,7 @@ const fr = {
486
496
  // pack controls its own separator and word order.
487
497
  summary: {
488
498
  pattern: "{{label}} : {{value}}",
499
+ pagePattern: "{{label}} (cette page) : {{value}}",
489
500
  count: "Nombre",
490
501
  countEmpty: "Vides",
491
502
  countFilled: "Remplis",
@@ -553,9 +564,6 @@ const fr = {
553
564
  needMatchFields: "Sélectionnez au moins un champ de correspondance.",
554
565
  matchOnlyField: "(correspondance seule)",
555
566
  optCreateOptions: "Conserver les valeurs d'option inconnues",
556
- optRunAutomations: "Exécuter les automatisations et déclencheurs",
557
- optTreatHistorical: "Importer comme données historiques",
558
- optTreatHistoricalHint: "(importer les enregistrements terminés tels quels — ignorer les contrôles de la machine à états et conserver leurs horodatages et auteurs d'origine au lieu d'horodater maintenant)",
559
567
  optSkipBlankKey: "Ignorer les lignes dont la valeur de correspondance est vide",
560
568
  optBackground: "Importer en arrière-plan",
561
569
  optBackgroundHint: "(s'exécute comme une tâche annulable)",
@@ -570,6 +578,7 @@ const fr = {
570
578
  invalidBoolean: "« {{value}} » n'est pas une valeur vrai/faux valide",
571
579
  invalidNumber: "« {{value}} » n'est pas un nombre valide",
572
580
  invalidDate: "« {{value}} » n'est pas une date valide",
581
+ invalidTime: "« {{value}} » n'est pas une heure valide",
573
582
  invalidOption: "« {{value}} » ne fait pas partie des options autorisées",
574
583
  requiredValue: "Ce champ est obligatoire",
575
584
  matchAmbiguous: "Correspond à plusieurs enregistrements existants — utilisez une valeur unique ou l'identifiant de l'enregistrement",
@@ -593,6 +602,10 @@ const fr = {
593
602
  undoing: "Annulation…",
594
603
  undoConfirm: "Annuler cet import ? Les enregistrements créés seront supprimés et les enregistrements mis à jour seront rétablis à leurs valeurs précédentes.",
595
604
  reverted: "Annulé",
605
+ undoPartial: "{{count}} lignes n'ont pas été annulées. Annuler à nouveau ne réessaie que ces lignes.",
606
+ undoPartial_one: "{{count}} ligne n'a pas été annulée. Annuler à nouveau ne réessaie que cette ligne.",
607
+ undoPartial_many: "{{count}} de lignes n'ont pas été annulées. Annuler à nouveau ne réessaie que ces lignes.",
608
+ undoPartial_other: "{{count}} lignes n'ont pas été annulées. Annuler à nouveau ne réessaie que ces lignes.",
596
609
  jobStatus: {
597
610
  pending: "En attente",
598
611
  running: "En cours",
@@ -660,6 +673,8 @@ const fr = {
660
673
  showingRows: "Affichage de {{shown}} sur {{total}} lignes",
661
674
  importing: "Importation… {{progress}}%",
662
675
  importComplete: "Importation terminée",
676
+ importPartial: "Importation terminée avec des erreurs",
677
+ importFailed: "Échec de l'importation",
663
678
  imported: "{{count}} importé(s)",
664
679
  skippedCount: "{{count}} ignoré(s)",
665
680
  moreErrors: "…et {{count}} erreur(s) de plus",
@@ -723,6 +738,7 @@ const fr = {
723
738
  firstRunMessage: "Créez votre premier enregistrement pour commencer.",
724
739
  noMatches: "Aucun enregistrement correspondant",
725
740
  noMatchesMessage: "Aucun enregistrement ne correspond à vos filtres ou à votre recherche. Essayez de les ajuster ou de les effacer.",
741
+ viewFilterNoMatchesMessage: "Aucun enregistrement ne correspond au filtre de cette vue.",
726
742
  loadErrorTitle: "Impossible de charger les enregistrements",
727
743
  loadErrorMessage: "Une erreur s'est produite lors du chargement de ces données. Vérifiez votre connexion et réessayez.",
728
744
  loadErrorForbiddenTitle: "Accès refusé",
@@ -763,15 +779,22 @@ const fr = {
763
779
  recordCount_many: "{{count}} d'enregistrements",
764
780
  recordCount_other: "{{count}} enregistrements",
765
781
  addRecord: "Ajouter un enregistrement",
782
+ // objectui#12703 — the compact list's footer link to the object's list or the block's view.
783
+ viewAll: "Tout afficher",
766
784
  tabs: "Onglets",
767
785
  allRecords: "Tous les enregistrements",
768
786
  search: "Rechercher",
769
787
  filter: "Filtrer",
770
788
  filterRecords: "Filtrer les enregistrements",
789
+ filterActive: "Filtrer, {{count}} actifs",
790
+ filterActive_one: "Filtrer, {{count}} actif",
791
+ filterActive_many: "Filtrer, {{count}} actifs",
792
+ filterActive_other: "Filtrer, {{count}} actifs",
771
793
  sort: "Trier",
772
794
  sortRecords: "Trier les enregistrements",
773
795
  sortByIdSuffix: "(par ID)",
774
796
  sortRelationalHint: "Les colonnes qui pointent vers un autre enregistrement ne sont pas listées : elles ne peuvent être triées que par l'ID stocké, et non par le nom affiché dans la cellule. Pour trier par ce nom, dénormalisez-le sur cet objet sous la forme d'un champ stocké, écrit à chaque modification de la source, puis triez sur ce champ. Pas un champ de formule : il est virtuel, aucune colonne n'est stockée pour lui et le serveur refuse de trier dessus.",
797
+ sortRelationalPicked: "Une colonne liée est triée par l'ID stocké, et non par le nom affiché.",
775
798
  resetSortToDefault: "Réinitialiser au tri par défaut de la vue",
776
799
  group: "Grouper",
777
800
  groupBy: "Grouper par",
@@ -792,14 +815,15 @@ const fr = {
792
815
  print: "Imprimer",
793
816
  hideFieldsTitle: "Masquer les champs",
794
817
  dataLimitReached: "Les {{limit}} premiers enregistrements sont affichés. Il peut y avoir plus de données disponibles.",
795
- viewSettings: "Paramètres de vue",
796
- viewSettingsHint: "Regroupement, couleur, densité et champs visibles. S’applique à tous les utilisateurs de cette vue.",
818
+ display: "Affichage",
819
+ layout: "Disposition",
820
+ rowNumbers: "Numéros de ligne",
821
+ resetToViewDefault: "Rétablir les valeurs par défaut de la vue",
797
822
  addGroup: "Ajouter un champ de groupe",
798
823
  collapsedByDefault: "Réduit par défaut",
799
824
  removeGroup: "Supprimer",
800
825
  inlineEditShort: "Édition en ligne",
801
826
  inlineEditLabel: "Modifier les enregistrements en ligne (cliquez sur une cellule pour modifier)",
802
- recordEditingTitle: "Modification des enregistrements",
803
827
  },
804
828
  managedByBadge: {
805
829
  systemWritable: {
@@ -830,6 +854,7 @@ const fr = {
830
854
  },
831
855
  kanban: {
832
856
  uncategorized: "Non catégorisé",
857
+ loadMore: "Charger plus",
833
858
  columns: "colonnes",
834
859
  addCard: "Ajouter une carte",
835
860
  addColumn: "Ajouter une colonne",
@@ -837,13 +862,28 @@ const fr = {
837
862
  deleteCard: "Supprimer la carte",
838
863
  deleteColumn: "Supprimer la colonne",
839
864
  noCards: "Aucune carte",
865
+ columnCards: "Cartes de la colonne {{column}}",
866
+ laneCards: "Cartes de {{column}} - {{lane}}",
840
867
  cardTitlePlaceholder: "Saisir le titre de la carte…",
841
868
  requiredFieldsTitle: "Compléter les champs obligatoires",
842
869
  requiredFieldsDescription: "Ce déplacement rend les champs ci-dessous obligatoires. Remplissez-les pour continuer.",
870
+ dnd: {
871
+ start: "Carte {{card}} saisie dans la colonne {{column}}.",
872
+ overCard: "Carte {{card}} au-dessus de la carte {{target}} dans la colonne {{column}}.",
873
+ overColumn: "Carte {{card}} au-dessus de la colonne {{column}}.",
874
+ overNone: "La carte {{card}} n'est au-dessus d'aucune colonne.",
875
+ moved: "Carte {{card}} déplacée dans la colonne {{column}}.",
876
+ dropped: "Carte {{card}} déposée. Elle reste dans la colonne {{column}}.",
877
+ cancelled: "Déplacement annulé. La carte {{card}} reste dans la colonne {{column}}.",
878
+ untitledCard: "sans titre",
879
+ unnamedColumn: "sans nom",
880
+ instructions: "Pour déplacer cette carte vers une autre colonne, faites-la glisser avec la souris ou au toucher.",
881
+ dragging: "Déplacement de la carte {{card}}",
882
+ },
843
883
  },
844
884
  timeline: {
845
885
  bucket: {
846
- overdue: "En retard",
886
+ earlier: "Plus tôt",
847
887
  today: "Aujourd'hui",
848
888
  tomorrow: "Demain",
849
889
  thisWeek: "Cette semaine",
@@ -1027,10 +1067,13 @@ const fr = {
1027
1067
  readonlyAriaLabel: "Vue en lecture seule",
1028
1068
  readonlyTooltip: "Vue système — définie dans le code, en lecture seule.",
1029
1069
  malformedFilter: "Le filtre de cette vue est incorrect, aucun enregistrement n’est donc affiché : la condition {{subject}} ne peut pas être appliquée.",
1070
+ noObject: "Aucun objet indiqué : définissez {{property}} ou dataSource.object.",
1030
1071
  },
1031
1072
  designer: {
1032
1073
  undo: "Annuler",
1033
1074
  redo: "Rétablir",
1075
+ canvasMinimap: "Mini-carte du canevas",
1076
+ versionHistory: "Historique des versions",
1034
1077
  },
1035
1078
  detail: {
1036
1079
  editInlineHint: "Double-cliquez pour modifier",
@@ -1117,6 +1160,7 @@ const fr = {
1117
1160
  noAttachments: "Aucune pièce jointe pour le moment. Téléversez un fichier pour commencer.",
1118
1161
  downloadAttachment: "Télécharger",
1119
1162
  deleteAttachment: "Supprimer la pièce jointe",
1163
+ deleteAttachmentConfirm: "Êtes-vous sûr de vouloir supprimer la pièce jointe \"{{name}}\" ?",
1120
1164
  attachmentDeleteDenied: "Seule la personne qui l'a téléversée ou une personne pouvant modifier cet enregistrement peut supprimer cette pièce jointe.",
1121
1165
  attachmentParentAccessDenied: "Vous n'avez pas accès pour joindre des fichiers à cet enregistrement.",
1122
1166
  attachmentDownloadDenied: "Vous n'avez pas accès pour télécharger cette pièce jointe.",
@@ -1181,10 +1225,12 @@ const fr = {
1181
1225
  lockedByApproval: "Verrouillé pour approbation",
1182
1226
  lockedTooltip: "Cet enregistrement a une demande d'approbation en attente ; la modification est verrouillée",
1183
1227
  writeStrippedTitle: "Enregistré — mais certains champs n'ont pas été appliqués",
1228
+ writeWarningsTitle: "Enregistré — avec des avertissements",
1184
1229
  writeStrippedReadonly: "En lecture seule, donc non appliqué : {{fields}}",
1185
1230
  writeStrippedByState: "Non modifiable dans l'état actuel de cet enregistrement, donc non appliqué : {{fields}}",
1186
1231
  writeStrippedPrimaryKey: "L'identifiant de l'enregistrement ne peut pas être modifié lors d'un enregistrement, donc non appliqué : {{fields}}",
1187
1232
  writeStrippedComputed: "Calculé par le serveur à partir d'une formule, donc la valeur envoyée n'a pas été appliquée : {{fields}}",
1233
+ writeStrippedStoredExpression: "Calculé à partir de l'enregistrement, donc la valeur calculée a été enregistrée à la place de celle envoyée : {{fields}}",
1188
1234
  writeStrippedUnknownReason: "Non appliqué par le serveur : {{fields}}",
1189
1235
  approvalPendingEditable: "En approbation · modifiable",
1190
1236
  approvalPendingTooltip: "Cet enregistrement a une demande d'approbation en attente ; cette étape autorise encore la modification",
@@ -1208,6 +1254,11 @@ const fr = {
1208
1254
  linkCopied: "Lien copié dans le presse-papiers",
1209
1255
  commentFailed: "Votre commentaire n'a pas été publié. Rien n'a été enregistré — veuillez réessayer.",
1210
1256
  reactionFailed: "Votre réaction n'a pas été enregistrée. Veuillez réessayer.",
1257
+ editComment: "Modifier le commentaire",
1258
+ deleteComment: "Supprimer le commentaire",
1259
+ deleteCommentConfirm: "Êtes-vous sûr de vouloir supprimer ce commentaire ?",
1260
+ commentEditFailed: "Votre modification n'a pas été enregistrée. Le commentaire conserve son texte précédent.",
1261
+ commentDeleteFailed: "Le commentaire n'a pas été supprimé. Veuillez réessayer.",
1211
1262
  linkCopyFailed: "Impossible de copier le lien",
1212
1263
  cancel: "Annuler",
1213
1264
  cancelEdit: "Abandonner les modifications",
@@ -1623,7 +1674,8 @@ const fr = {
1623
1674
  },
1624
1675
  console: {
1625
1676
  studio: {
1626
- backToHome: "Retour à l'accueil",
1677
+ title: "Studio",
1678
+ accessRequired: "Vous avez besoin de l'accès à Studio pour ouvrir Studio.",
1627
1679
  },
1628
1680
  saveAdvisoryTitle: "Enregistré — le contrôle de création a signalé {{count}} recommandation(s)",
1629
1681
  saveAdvisoryTitle_one: "Enregistré — le contrôle de création a signalé {{count}} recommandation",
@@ -1641,13 +1693,13 @@ const fr = {
1641
1693
  savedViewsUnreadable: "Cette liste est vide parce qu’elle n’a pas pu être lue, et non parce que cet objet n’aurait aucune vue enregistrée. Réessayez, et signalez le problème s’il persiste.",
1642
1694
  settingsHub: {
1643
1695
  title: "Paramètres",
1644
- subtitle: "Configurez votre espace de travail, vos intégrations et vos indicateurs de fonctionnalité.",
1696
+ subtitle: "Configurez votre système, vos intégrations et vos indicateurs de fonctionnalité.",
1645
1697
  loadError: "Échec du chargement des paramètres",
1646
1698
  empty: "Aucun paramètre enregistré. Les plugins peuvent enregistrer des manifestes de paramètres via le SettingsService.",
1647
1699
  settingsCount: "{{n}} paramètres",
1648
1700
  beta: "Bêta",
1649
1701
  categories: {
1650
- Workspace: "Espace de travail",
1702
+ Workspace: "Général",
1651
1703
  Communication: "Communication",
1652
1704
  Security: "Sécurité",
1653
1705
  Infrastructure: "Infrastructure",
@@ -1692,8 +1744,7 @@ const fr = {
1692
1744
  },
1693
1745
  usage: {
1694
1746
  title: "Utilisation de l'IA",
1695
- meterBuild: "Créer",
1696
- meterAsk: "Demander",
1747
+ poolUsed: "{{percent}} utilisé",
1697
1748
  statusOk: "Il en reste beaucoup",
1698
1749
  statusLow: "Bientôt épuisé",
1699
1750
  statusFull: "Limite atteinte",
@@ -1710,7 +1761,6 @@ const fr = {
1710
1761
  ctaUpgrade: "Passer à l'offre supérieure pour continuer",
1711
1762
  ctaTopUp: "Ajouter des crédits pour continuer",
1712
1763
  ariaLabel: "Utilisation de l'IA : {{status}}",
1713
- breakdownTitle: "Utilisé jusqu'à présent",
1714
1764
  },
1715
1765
  workspaceTitle: "Espace de travail IA",
1716
1766
  workspaceSubtitle: "Posez des questions, inspectez et reprenez vos conversations",
@@ -1767,6 +1817,8 @@ const fr = {
1767
1817
  liveCanvasUnlisted: "Application en direct — {{app}} (non répertoriée jusqu'à publication)",
1768
1818
  loadingAgents: "Chargement des agents…",
1769
1819
  askAnything: "Posez n'importe quelle question…",
1820
+ askOrChangeApp: "Posez une question sur vos données ou demandez-moi de modifier cette app…",
1821
+ describeAppToBuild: "Décrivez l’app que vous voulez créer, ou ce qu’il faut modifier…",
1770
1822
  emptyTitle: "Démarrer une conversation",
1771
1823
  emptyDescription: "Posez n'importe quelle question — l'assistant a accès au contexte de votre application actuelle.",
1772
1824
  switchAssistant: "Changer d'assistant",
@@ -1788,12 +1840,17 @@ const fr = {
1788
1840
  },
1789
1841
  clearConversation: "Effacer",
1790
1842
  sendHint: "pour envoyer",
1843
+ newlineHint: "pour un retour à la ligne",
1791
1844
  agentActivity: "Activité de l'agent",
1792
1845
  toolCompleted: "Terminé",
1793
1846
  toolRunning: "En cours",
1794
1847
  toolAwaitingApproval: "En attente d'approbation",
1795
1848
  toolFailed: "Échec",
1796
1849
  toolDetailsHidden: "Les entrées des outils et les résultats bruts sont masqués dans cette vue.",
1850
+ toolDenyReason: "Rejeté par l'opérateur depuis le chat",
1851
+ builderHandoffTitle: "Créer dans le constructeur",
1852
+ builderHandoffOpen: "Ouvrir dans le constructeur →",
1853
+ builderHandoffSuperseded: "Une demande plus récente est disponible",
1797
1854
  copy: "Copier",
1798
1855
  copied: "Copié",
1799
1856
  regenerate: "Régénérer",
@@ -1808,7 +1865,7 @@ const fr = {
1808
1865
  publishOk: "Publié — les objets sont maintenant actifs.",
1809
1866
  seedWarn: "Publié, mais certaines données d'exemple n'ont pas pu être chargées.",
1810
1867
  openBuiltApp: "Ouvrir l'application",
1811
- designBuiltApp: "Concevoir dans Studio",
1868
+ viewBuiltAppInStudio: "Voir dans Studio",
1812
1869
  previewDraft: "Aperçu",
1813
1870
  previewApp: "Aperçu de l'application",
1814
1871
  resizeSplit: "Redimensionner la discussion et l'aperçu",
@@ -1935,6 +1992,7 @@ const fr = {
1935
1992
  collapse: "Réduire la discussion",
1936
1993
  maximize: "Ouvrir en pleine page",
1937
1994
  open: "Ouvrir l'assistant",
1995
+ planAwaitingApproval: "Un plan proposé attend votre approbation",
1938
1996
  },
1939
1997
  group: {
1940
1998
  today: "Aujourd'hui",
@@ -1945,12 +2003,9 @@ const fr = {
1945
2003
  },
1946
2004
  },
1947
2005
  title: "Console ObjectStack",
1948
- initializing: "Initialisation de l'application…",
1949
- loadingHint: "La configuration d'un nouvel environnement peut prendre quelques instants.",
2006
+ initializing: "Ouverture de votre console…",
2007
+ skipToContent: "Aller au contenu",
1950
2008
  breadcrumb: {
1951
- dashboards: "Tableaux de bord",
1952
- pages: "Pages",
1953
- reports: "Rapports",
1954
2009
  system: "Système",
1955
2010
  marketplace: "Marketplace",
1956
2011
  settings: 'Paramètres',
@@ -1980,16 +2035,31 @@ const fr = {
1980
2035
  unsavedCount_one: "{{count}} modification non enregistrée",
1981
2036
  unsavedCount_many: "{{count}} de modifications non enregistrées",
1982
2037
  unsavedCount_other: "{{count}} modifications non enregistrées",
2038
+ fieldErrorsToast: "{{count}} paramètres nécessitent votre attention : {{settings}}",
2039
+ fieldErrorsToast_one: "{{count}} paramètre nécessite votre attention : {{settings}}",
2040
+ fieldErrorsToast_many: "{{count}} de paramètres nécessitent votre attention : {{settings}}",
2041
+ fieldErrorsToast_other: "{{count}} paramètres nécessitent votre attention : {{settings}}",
1983
2042
  cryptoRefusalTitle: "Ce déploiement ne peut pas chiffrer les secrets",
1984
2043
  cryptoRefusalSubjectSuffix: "est déclaré chiffré, aucune écriture n'a donc eu lieu.",
1985
2044
  cryptoRefusalNoSubject: "La valeur déclarée chiffrée a été refusée, aucune écriture n'a donc eu lieu.",
1986
2045
  cryptoRefusalToast: "Impossible de chiffrer les secrets : {{subject}}",
1987
2046
  cryptoRefusalToastNoSubject: "Impossible de chiffrer les secrets",
1988
- },
1989
- loadingSteps: {
1990
- connecting: "Connexion à la source de données",
1991
- loadingConfig: "Chargement de la configuration",
1992
- preparingWorkspace: "Préparation de l'espace de travail",
2047
+ sourceBadgeInherited: "Hérité de {{source}}",
2048
+ sourceBadgeOverrides: "Remplace {{source}}",
2049
+ resetToDefault: "Rétablir la valeur par défaut",
2050
+ envLockBadge: "Verrouillé par l'env.",
2051
+ envLockBadgeTitle: "Fixé par une variable d'environnement — modification impossible depuis l'interface.",
2052
+ deprecatedBadge: "Obsolète",
2053
+ deprecatedBadgeReplacedBy: "Obsolète → {{replacedBy}}",
2054
+ unsupportedSpecifierType: "Type de paramètre non pris en charge : {{type}}",
2055
+ },
2056
+ workspaceTimezonePrompt: {
2057
+ title: "Définir le fuseau horaire du système",
2058
+ description: "Ce système utilise encore le fuseau horaire par défaut de la plateforme, {{current}}. Le fuseau horaire du système détermine ce que signifie « aujourd’hui » dans les formules, la façon dont les rapports regroupent les dates et l’affichage des dates et des heures, pour tous les utilisateurs du système. Le fuseau horaire de votre navigateur est renseigné ci-dessous.",
2059
+ laterHint: "Vous pouvez le modifier à tout moment sur la page Paramètres.",
2060
+ decline: "Conserver la valeur par défaut",
2061
+ confirm: "Définir le fuseau horaire",
2062
+ saved: "Fuseau horaire du système défini sur {{zone}}",
1993
2063
  },
1994
2064
  error: {
1995
2065
  connectionFailed: "Impossible de se connecter au serveur",
@@ -2014,27 +2084,28 @@ const fr = {
2014
2084
  groups: {
2015
2085
  general: "Général",
2016
2086
  navigation: "Navigation",
2017
- dataViews: "Vues de données",
2018
2087
  aiChat: "Assistant IA",
2019
- preferences: "Préférences",
2020
2088
  },
2021
2089
  openCommandPalette: "Ouvrir la palette de commandes",
2022
2090
  showShortcuts: "Afficher les raccourcis clavier",
2023
2091
  closeDialog: "Fermer le dialogue / panneau",
2024
2092
  toggleSidebar: "Basculer la barre latérale",
2025
- focusSearch: "Focus sur la recherche",
2026
- createRecord: "Créer un nouvel enregistrement",
2027
- refreshData: "Actualiser les données",
2028
- editRecord: "Modifier l'enregistrement sélectionné",
2029
2093
  newChat: "Nouvelle discussion",
2030
2094
  toggleChatsList: "Basculer la liste des discussions",
2031
- toggleDarkMode: "Basculer le mode sombre",
2095
+ goHome: "Retour à l'accueil",
2096
+ },
2097
+ reportIndex: {
2098
+ title: "Rapports",
2099
+ emptyTitle: "Aucun rapport",
2100
+ emptyDescription: "Cette application n’a aucun rapport que vous pouvez ouvrir.",
2032
2101
  },
2033
2102
  commandPalette: {
2034
2103
  title: "Palette de commandes",
2035
2104
  placeholder: "Tapez une commande ou recherchez…",
2036
2105
  noResults: "Aucun résultat trouvé.",
2037
2106
  objects: "Objets",
2107
+ packages: "Packages",
2108
+ flows: "Flux",
2038
2109
  dashboards: "Tableaux de bord",
2039
2110
  pages: "Pages",
2040
2111
  reports: "Rapports",
@@ -2053,9 +2124,9 @@ const fr = {
2053
2124
  },
2054
2125
  // objectui#9954 — see the `en` pack for what raises each case.
2055
2126
  readRate: {
2056
- ratioTitle: 'Volume de lecture inhabituel dans cet environnement',
2127
+ ratioTitle: 'Volume de lecture inhabituel dans ce système',
2057
2128
  ratio: '{{ratio}} lignes sont lues pour chaque ligne écrite. La plateforme signale tout ce qui dépasse {{threshold}}. Rien n’est limité ni bloqué ; il s’agit d’un rapport permettant d’examiner le schéma de lecture.',
2058
- noWritesTitle: 'Lectures sans aucune écriture dans cet environnement',
2129
+ noWritesTitle: 'Lectures sans aucune écriture dans ce système',
2059
2130
  noWrites: 'Des lignes sont lues alors qu’aucune n’est écrite, de sorte que le taux de lecture n’a aucune limite supérieure. C’est la mesure la plus grave. La plateforme signale tout ce qui dépasse {{threshold}}. Rien n’est limité ni bloqué ; il s’agit d’un rapport permettant d’examiner le schéma de lecture.',
2060
2131
  },
2061
2132
  // objectui#10439 — see the `en` pack for what raises each case.
@@ -2096,12 +2167,14 @@ const fr = {
2096
2167
  viewNameInvalid: "Utilisez des minuscules, des chiffres et des tirets bas ; commencez par une lettre ou un tiret bas.",
2097
2168
  systemViewReadonly: "Vue système définie dans le code — en lecture seule.",
2098
2169
  cannotEditMetaView: "Cette vue est intégrée et définie dans le code — elle ne peut pas être modifiée.",
2099
- viewConfigPermissionDenied: "Les paramètres de vue s’appliquent à tous les utilisateurs de cette vue ; les modifier requiert donc l’autorisation « Gérer les métadonnées ». Demandez à un administrateur d’effectuer ce changement.",
2170
+ resetView: "Réinitialiser la vue",
2171
+ resetViewTitle: "Rétablir le tri, les filtres et les largeurs de colonnes propres à cette vue. Seuls vos réglages changent.",
2100
2172
  cannotDeleteMetaView: "Cette vue est intégrée et définie dans le code — elle ne peut pas être supprimée.",
2101
2173
  expandToPage: "Ouvrir en pleine page",
2102
2174
  objectNotFound: "Objet introuvable",
2103
2175
  objectNotFoundDescription: "L'objet « {{objectName}} » n'existe pas dans la configuration actuelle.",
2104
2176
  objectNotFoundHint: "Vérifiez les paramètres de navigation de votre application ou sélectionnez un autre objet dans la barre latérale.",
2177
+ objectPackageDisabled: "L'objet « {{objectName}} » appartient à un package désactivé et n'est donc pas servi.",
2105
2178
  filterOrNotSavable: "Ce filtre relie les conditions par OU, ce qu'une vue enregistrée ne peut pas encore stocker. Il s'applique toujours à cette liste — supprimez le groupement OU pour l'enregistrer dans la vue.",
2106
2179
  filterNestedNotSavable: "Ce filtre utilise des groupes de conditions imbriqués, qu'une vue enregistrée ne peut pas stocker. Aplatissez-le en une seule liste de conditions pour l'enregistrer dans la vue.",
2107
2180
  allRecords: "Tous les enregistrements",
@@ -2192,6 +2265,10 @@ const fr = {
2192
2265
  ufAddField: "+ Ajouter un champ de filtre…",
2193
2266
  ufShowAllRecords: "Afficher l'onglet \"Tous les enregistrements\"",
2194
2267
  },
2268
+ runtimeDraft: {
2269
+ publishFailed: "Échec de la publication",
2270
+ discardFailed: "Échec de l'abandon du brouillon",
2271
+ },
2195
2272
  localeSwitcher: {
2196
2273
  label: "Langue",
2197
2274
  },
@@ -2199,17 +2276,22 @@ const fr = {
2199
2276
  nav: {
2200
2277
  pinItem: "Épingler {{name}}",
2201
2278
  unpinItem: "Désépingler {{name}}",
2202
- dragToReorder: "Glisser pour réorganiser",
2203
2279
  favorites: "Favoris",
2204
2280
  launcherLabel: "Lanceur d'applications",
2205
2281
  menuLabel: "Navigation de l'application",
2206
2282
  menuEmpty: "Cette application n'a aucune entrée de navigation que vous pouvez ouvrir.",
2283
+ itemMenu: "Plus d'actions pour {{name}}",
2284
+ openInNewTab: "Ouvrir dans un nouvel onglet",
2285
+ copyLink: "Copier le lien",
2286
+ linkCopied: "Lien copié dans le presse-papiers",
2287
+ linkCopyFailed: "Impossible de copier le lien",
2288
+ design: "Concevoir",
2207
2289
  },
2208
2290
  },
2209
2291
  auth: {
2210
2292
  setPassword: {
2211
2293
  title: "Définir un mot de passe de secours",
2212
- description: "Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local afin de pouvoir toujours vous connecter directement à cet environnement si le SSO devenait indisponible.",
2294
+ description: "Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local afin de pouvoir toujours vous connecter directement si le SSO devenait indisponible.",
2213
2295
  email: "E-mail",
2214
2296
  newPassword: "Nouveau mot de passe",
2215
2297
  confirmPassword: "Confirmer le mot de passe",
@@ -2225,9 +2307,8 @@ const fr = {
2225
2307
  signingIn: "Connexion en cours…",
2226
2308
  ssoHandoff: "Continuer vers {{target}}",
2227
2309
  devAdminHint: {
2228
- title: "Instance de développement",
2229
- body: "Connectez-vous avec l'administrateur de développement prédéfini :",
2230
- dismiss: "Ignorer",
2310
+ title: "Instance de développement locale",
2311
+ signIn: "Se connecter en tant qu'administrateur de développement",
2231
2312
  },
2232
2313
  title: "Connectez-vous à votre compte",
2233
2314
  description: "Entrez votre e-mail et votre mot de passe pour continuer",
@@ -2259,6 +2340,20 @@ const fr = {
2259
2340
  usePasswordSignInText: "Se connecter avec un mot de passe à la place",
2260
2341
  socialButton: "Continuer avec {provider}",
2261
2342
  orText: "ou continuer avec l'e-mail",
2343
+ ssoButton: "Se connecter avec le SSO",
2344
+ ssoOnlyDescription: "Connectez-vous avec l'authentification unique de votre organisation",
2345
+ usePasswordText: "Utiliser un mot de passe à la place",
2346
+ backToSsoText: "Revenir à l'authentification unique",
2347
+ // objectui#12600 — the console login card's own header, the password
2348
+ // field's reveal toggle, and the footer's legal links.
2349
+ welcomeTitle: "Bon retour",
2350
+ welcomeDescription: "Connectez-vous pour reprendre votre travail",
2351
+ showPasswordText: "Afficher le mot de passe",
2352
+ hidePasswordText: "Masquer le mot de passe",
2353
+ footer: {
2354
+ privacy: "Confidentialité",
2355
+ terms: "Conditions",
2356
+ },
2262
2357
  },
2263
2358
  register: {
2264
2359
  title: "Créer un compte",
@@ -2281,7 +2376,7 @@ const fr = {
2281
2376
  orText: "ou continuer avec l'e-mail",
2282
2377
  errors: {
2283
2378
  userExists: "Un compte avec cet e-mail existe déjà. Essayez de vous connecter.",
2284
- selfRegistrationClosed: "L'inscription libre n'est pas ouverte dans cet environnement. Demandez une invitation à un administrateur.",
2379
+ selfRegistrationClosed: "L'inscription libre n'est pas ouverte sur ce système. Demandez une invitation à un administrateur.",
2285
2380
  emailDomainNotAllowed: "Le domaine de cet e-mail n'est pas autorisé à s'inscrire ici. Utilisez l'e-mail de votre organisation ou demandez une invitation à un administrateur.",
2286
2381
  },
2287
2382
  verifyInbox: {
@@ -2358,7 +2453,7 @@ const fr = {
2358
2453
  checkSpam: "E-mail non reçu ? Vérifiez votre dossier spam ou contactez le support.",
2359
2454
  or: "Ou",
2360
2455
  // objectui#3546 slice three.
2361
- resendUnavailable: "L'envoi d'e-mails n'est peut-être pas configuré pour cet environnement. Contactez le support si le problème persiste.",
2456
+ resendUnavailable: "L'envoi d'e-mails n'est peut-être pas configuré pour ce système. Contactez le support si le problème persiste.",
2362
2457
  },
2363
2458
  setup: {
2364
2459
  welcomeTitle: "Bienvenue sur ObjectStack",
@@ -2402,7 +2497,7 @@ const fr = {
2402
2497
  disabledDescription: "L'autorisation d'appareil n'est pas activée sur ce déploiement, cet appareil ne peut donc pas être approuvé ici.",
2403
2498
  },
2404
2499
  shell: {
2405
- tenantHostHint: "Vous vous connectez à cet espace de travail",
2500
+ tenantHostHint: "Vous vous connectez à ce système",
2406
2501
  },
2407
2502
  layout: {
2408
2503
  headline: "Créez des applications métier puissantes, plus vite.",
@@ -2412,6 +2507,7 @@ const fr = {
2412
2507
  signOut: "Se déconnecter à la place",
2413
2508
  password: {
2414
2509
  title: "Votre mot de passe a expiré",
2510
+ resetTitle: "Vous devez changer votre mot de passe",
2415
2511
  fallbackMessage: "Veuillez définir un nouveau mot de passe pour continuer.",
2416
2512
  current: "Mot de passe actuel",
2417
2513
  next: "Nouveau mot de passe",
@@ -2437,6 +2533,11 @@ const fr = {
2437
2533
  verifying: "Vérification…",
2438
2534
  invalidCode: "Code invalide. Veuillez réessayer.",
2439
2535
  },
2536
+ impersonation: {
2537
+ passwordTitle: "{{user}} doit changer son mot de passe",
2538
+ mfaTitle: "{{user}} doit configurer l'authentification à deux facteurs",
2539
+ body: "Vous incarnez {{user}}, et seule cette personne peut le faire elle-même. Arrêtez l'usurpation pour revenir à votre propre compte.",
2540
+ },
2440
2541
  },
2441
2542
  },
2442
2543
  // objectui#3546 slice three — the /oauth/consent screen.
@@ -2445,12 +2546,17 @@ const fr = {
2445
2546
  title: "{{appName}} souhaite accéder à votre compte",
2446
2547
  request: "{{appName}} demande une autorisation{{suffix}}.",
2447
2548
  unknownApp: "une application",
2549
+ unidentified: "Cette application n'a pas pu être identifiée.",
2550
+ clientId: "ID client",
2448
2551
  willAllow: "Cette application pourra :",
2449
2552
  scope: {
2450
2553
  openid: "Confirmer votre identité",
2451
2554
  profile: "Lire votre profil de base (nom, photo)",
2452
2555
  email: "Lire votre adresse e-mail",
2453
2556
  offlineAccess: "Rester connecté (renouveler l'accès)",
2557
+ dataRead: "Lire des enregistrements (dans la limite de vos propres autorisations)",
2558
+ dataWrite: "Créer, modifier et supprimer des enregistrements (dans la limite de vos propres autorisations)",
2559
+ actionsExecute: "Exécuter des actions en votre nom (dans la limite de vos propres autorisations)",
2454
2560
  },
2455
2561
  deny: "Refuser",
2456
2562
  authorize: "Autoriser",
@@ -2493,8 +2599,8 @@ const fr = {
2493
2599
  password: {
2494
2600
  changeTitle: "Changer le mot de passe",
2495
2601
  setTitle: "Définir un mot de passe local",
2496
- changeDescription: "Mettez à jour le mot de passe que vous utilisez pour vous connecter à cet environnement.",
2497
- setDescription: "Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local pour pouvoir également vous connecter avec votre e-mail et un mot de passe sur cet environnement.",
2602
+ changeDescription: "Mettez à jour le mot de passe que vous utilisez pour vous connecter.",
2603
+ setDescription: "Vous vous êtes connecté via l'authentification unique. Définissez un mot de passe local pour pouvoir également vous connecter avec votre e-mail et un mot de passe.",
2498
2604
  current: "Mot de passe actuel",
2499
2605
  new: "Nouveau mot de passe",
2500
2606
  password: "Mot de passe",
@@ -2503,7 +2609,7 @@ const fr = {
2503
2609
  mismatch: "Les mots de passe ne correspondent pas",
2504
2610
  enterCurrent: "Saisissez votre mot de passe actuel",
2505
2611
  changed: "Mot de passe modifié.",
2506
- localSet: "Mot de passe local défini. Vous pouvez désormais vous connecter avec votre e-mail et votre mot de passe sur cet environnement.",
2612
+ localSet: "Mot de passe local défini. Vous pouvez désormais vous connecter avec votre e-mail et votre mot de passe.",
2507
2613
  changeAction: "Changer le mot de passe",
2508
2614
  setAction: "Définir le mot de passe",
2509
2615
  },
@@ -2518,21 +2624,21 @@ const fr = {
2518
2624
  unknown: "Une erreur inattendue s'est produite.",
2519
2625
  },
2520
2626
  workspace: {
2521
- label: "Espaces de travail",
2522
- default: "Mon espace de travail",
2523
- switch: "Changer d'espace de travail",
2524
- createTitle: "Créer un espace de travail",
2525
- createDescription: "Un espace de travail est un lieu partagé pour la collaboration de votre équipe.",
2526
- createButton: "Créer un espace de travail",
2527
- nameLabel: "Nom de l'espace de travail",
2627
+ label: "Organisations",
2628
+ default: "Mon organisation",
2629
+ switch: "Changer d'organisation",
2630
+ createTitle: "Créer une organisation",
2631
+ createDescription: "Une organisation est un lieu partagé pour la collaboration de votre équipe.",
2632
+ createButton: "Créer une organisation",
2633
+ nameLabel: "Nom de l'organisation",
2528
2634
  namePlaceholder: "p.ex., Acme Inc",
2529
2635
  slugLabel: "Slug URL",
2530
2636
  slugHint: "Utilisé dans les URL. Uniquement lettres minuscules, chiffres et tirets.",
2531
2637
  invite: "Inviter un membre",
2532
2638
  members: "Membres",
2533
- settings: "Paramètres de l'espace de travail",
2639
+ settings: "Paramètres de l'organisation",
2534
2640
  multiOrgDisabled: "La création de nouvelles organisations est désactivée sur cette instance.",
2535
- createFailed: "Échec de la création de l'espace de travail",
2641
+ createFailed: "Échec de la création de l'organisation",
2536
2642
  },
2537
2643
  help: {
2538
2644
  onThisPage: "Sur cette page",
@@ -2540,6 +2646,12 @@ const fr = {
2540
2646
  appDocs: 'Documentation de cette app',
2541
2647
  allDocs: 'Toute la documentation',
2542
2648
  onlineDocs: 'Documentation en ligne',
2649
+ loadingDocumentation: 'Chargement de la documentation',
2650
+ about: 'À propos',
2651
+ aboutTitle: 'À propos de cette console',
2652
+ aboutDescription: 'Le build à partir duquel cette console a été compilée.',
2653
+ aboutBuild: 'Build de la console',
2654
+ aboutBuildUnknown: 'Build inconnu (aucune version n’a été définie lors de la compilation de cette console)',
2543
2655
  },
2544
2656
  sidebar: {
2545
2657
  packageManagement: "Gestion des packages",
@@ -2554,18 +2666,16 @@ const fr = {
2554
2666
  area: "Zone",
2555
2667
  scope: "Périmètre",
2556
2668
  recent: "Récent",
2557
- favorites: "Favoris",
2558
2669
  starred: "Étoilés",
2559
2670
  removeFromFavorites: "Retirer {{name}} des favoris",
2671
+ allReports: "Tous les rapports",
2560
2672
  },
2561
2673
  topbar: {
2562
2674
  openAssistant: "Ouvrir l'assistant {{name}}",
2563
2675
  offline: "Hors ligne",
2564
2676
  usersOnline: "Utilisateurs actuellement en ligne",
2565
2677
  switchView: "Changer de vue",
2566
- switchObject: "Changer d'objet",
2567
2678
  connection: {
2568
- connected: "Connecté",
2569
2679
  connecting: "Connexion…",
2570
2680
  reconnecting: "Reconnexion…",
2571
2681
  disconnected: "Déconnecté",
@@ -2578,23 +2688,22 @@ const fr = {
2578
2688
  },
2579
2689
  aiAssistant: "Assistant IA",
2580
2690
  designInStudio: "Concevoir dans Studio",
2691
+ editApp: "Modifier l'application",
2581
2692
  },
2582
2693
  home: {
2583
2694
  build: {
2584
2695
  title: "Créer une application",
2585
- subtitle: "Partir de zéro — concevez les objets, formulaires, automatisations et interfaces.",
2586
- noCapability: "La création d'applications n'est pas disponible dans cet espace de travail : elle requiert l'autorisation « Gérer les métadonnées », que votre compte ne possède pas.",
2696
+ noCapability: "La création d'applications n'est pas disponible dans ce système : elle requiert l'autorisation « Gérer les métadonnées », que votre compte ne possède pas.",
2587
2697
  },
2588
2698
  template: {
2589
2699
  title: "Partir d'un modèle",
2590
- subtitle: "Installez une application modèle depuis la place de marché et personnalisez-la.",
2591
2700
  marketplaceDisabled: "Aucune place de marché d'applications n'est configurée pour ce runtime : il n'y a donc aucun modèle à installer ici.",
2592
2701
  },
2593
2702
  welcomeAdminDescription: "Décrivez votre activité en une phrase — l'IA génère les objets, les écrans, les API et les outils d'agent. Ou configurez tout vous-même depuis le menu de gauche.",
2594
2703
  welcomeAdminDescriptionNoBuild: "Configurez votre première application depuis le menu Administration à gauche. Une fois les données en place, l'assistant IA pourra vous aider à les explorer.",
2595
2704
  welcomeAdminDescriptionNoAi: "Configurez votre première application depuis le menu Administration à gauche.",
2596
2705
  noAppsTitle: "Aucune application pour l'instant",
2597
- noAppsDescription: "Votre espace de travail est en cours de configuration — les applications partagées par votre administrateur apparaîtront ici.",
2706
+ noAppsDescription: "Le système est en cours de configuration — les applications partagées par votre administrateur apparaîtront ici.",
2598
2707
  buildWithAI: "Créer avec l'IA",
2599
2708
  askAI: "Demander à l'IA",
2600
2709
  recoveryReminder: {
@@ -2603,10 +2712,16 @@ const fr = {
2603
2712
  dismiss: "Ignorer",
2604
2713
  },
2605
2714
  pendingDrafts: {
2606
- message: "Vous avez {{count}} modification(s) non publiée(s) — publiez-les pour les activer.",
2607
- message_one: "Vous avez {{count}} modification non publiée — publiez-la pour l'activer.",
2608
- message_many: "Vous avez {{count}} de modifications non publiées — publiez-les pour les activer.",
2609
- message_other: "Vous avez {{count}} modifications non publiées — publiez-les pour les activer.",
2715
+ // objectui#12602 — the drafts row in Home's "My work" section: the
2716
+ // count, then the first draft names joined by `nameSeparator`, in
2717
+ // their package when they share one.
2718
+ title: "{{count}} modification(s) non publiée(s)",
2719
+ title_one: "{{count}} modification non publiée",
2720
+ title_many: "{{count}} modifications non publiées",
2721
+ title_other: "{{count}} modifications non publiées",
2722
+ inPackage: "{{names}} en attente de publication dans {{package}}",
2723
+ waiting: "{{names}} en attente de publication",
2724
+ nameSeparator: ", ",
2610
2725
  cta: "Publier",
2611
2726
  publishing: "Publication…",
2612
2727
  published: "Publié ! Vos modifications sont actives.",
@@ -2627,11 +2742,18 @@ const fr = {
2627
2742
  showMoreApps: "Plus",
2628
2743
  showLess: "Afficher moins",
2629
2744
  continueEmpty: "Les éléments que vous ouvrez apparaîtront ici.",
2630
- actionCenter: {
2631
- title: "Nécessite votre attention",
2632
- empty: "Vous êtes à jour",
2745
+ // objectui#12602 — Home's "My work" section: its heading, the link to the
2746
+ // full inbox, each column's title, "view all" link and empty line.
2747
+ myWork: {
2748
+ title: "Mon travail",
2749
+ openInbox: "Ouvrir la boîte de réception",
2750
+ viewAll: "Tout afficher",
2751
+ approvals: "À approuver",
2752
+ approvalsEmpty: "Rien n'attend votre approbation",
2753
+ notifications: "Notifications",
2754
+ notificationsEmpty: "Aucune notification non lue",
2633
2755
  },
2634
- loading: "Chargement de l'espace de travail…",
2756
+ loading: "Chargement…",
2635
2757
  welcome: "Bienvenue dans ObjectUI",
2636
2758
  welcomeDescription: "Commencez par créer votre première application ou configurer les paramètres système.",
2637
2759
  createFirstApp: "Créez votre première app",
@@ -2642,7 +2764,7 @@ const fr = {
2642
2764
  manageObjects: "Gérer les objets",
2643
2765
  manageObjectsDesc: "Configurer les modèles de données",
2644
2766
  systemSettings: "Paramètres système",
2645
- systemSettingsDesc: "Configurez votre espace de travail",
2767
+ systemSettingsDesc: "Configurez votre système",
2646
2768
  },
2647
2769
  appCard: {
2648
2770
  noDescription: "Aucune description",
@@ -2652,7 +2774,18 @@ const fr = {
2652
2774
  greetingAfternoon: "Bon après-midi",
2653
2775
  greetingEvening: "Bonsoir",
2654
2776
  greetingNight: "Travail de nuit",
2655
- heroTagline: "Reprenez là où vous vous êtes arrêté ou découvrez quelque chose de nouveau.",
2777
+ greetingSeparator: ", ",
2778
+ greetingEnd: ".",
2779
+ search: "Rechercher des applications, enregistrements, pages…",
2780
+ summary: {
2781
+ approvals: "{{count}} approbations vous attendent aujourd'hui",
2782
+ approvals_one: "{{count}} approbation vous attend aujourd'hui",
2783
+ approvals_many: "{{count}} approbations vous attendent aujourd'hui",
2784
+ approvals_other: "{{count}} approbations vous attendent aujourd'hui",
2785
+ none: "Rien ne vous attend aujourd'hui",
2786
+ },
2787
+ addApp: "Ajouter une application",
2788
+ appOpened: "{{time}}",
2656
2789
  open: "Ouvrir",
2657
2790
  recentApps: {
2658
2791
  title: "Récemment ouverts",
@@ -2661,6 +2794,8 @@ const fr = {
2661
2794
  dashboard: "Tableau de bord",
2662
2795
  page: "Page",
2663
2796
  report: "Rapport",
2797
+ package: "Package",
2798
+ view: "Vue de liste",
2664
2799
  record: "Enregistrement",
2665
2800
  metadata: "Métadonnées",
2666
2801
  },
@@ -2698,11 +2833,17 @@ const fr = {
2698
2833
  manageAllApps: "Gérer toutes les applications",
2699
2834
  systemConsole: "Console système",
2700
2835
  noAppsConfigured: "Aucune application configurée",
2836
+ allApps: "Toutes les applications",
2837
+ editAppInStudio: "Modifier {{app}} dans Studio",
2838
+ backToHome: "Retour à l'accueil",
2839
+ settings: "Paramètres",
2840
+ productHome: "Accueil {{product}}",
2701
2841
  },
2702
2842
  activityFeed: {
2703
2843
  title: "Activité récente",
2704
2844
  filter: "Filtrer",
2705
2845
  empty: "Aucune activité récente",
2846
+ accessDenied: "Vous n'avez pas l'autorisation de consulter l'activité.",
2706
2847
  ariaLabel: "Fil d'activité",
2707
2848
  typeCreate: "Créer",
2708
2849
  typeUpdate: "Mettre à jour",
@@ -2769,11 +2910,19 @@ const fr = {
2769
2910
  appAccessDenied: "Vous n'avez pas accès à cette application",
2770
2911
  appAccessDeniedDescription: "Cette application existe, mais votre compte n'est pas autorisé à l'ouvrir. Demandez l'accès à un administrateur.",
2771
2912
  appAccessDeniedHome: "Retour à l'accueil",
2913
+ appNothingAvailable: "Rien dans {{app}} ne vous est encore accessible",
2914
+ appNothingAvailableDescription: "Cette application ne contient aucune page que votre compte peut ouvrir. Demandez l'accès à un administrateur.",
2915
+ appNothingAvailableGrantDescription: "Cette application ne contient aucune page que votre compte peut ouvrir. Vous pouvez accorder l'accès dans la configuration.",
2916
+ openSetup: "Ouvrir la configuration",
2772
2917
  createFirstApp: "Créer la première application",
2773
2918
  systemSettings: "Paramètres système",
2774
2919
  back: "Retour",
2775
2920
  recordNotFound: "Enregistrement introuvable",
2776
2921
  recordNotFoundDescription: "L'enregistrement que vous recherchez n'existe pas ou a peut-être été supprimé.",
2922
+ recordAccessDenied: "Vous n'avez pas accès aux enregistrements {{object}}",
2923
+ recordAccessDeniedDescription: "Vous n'avez pas la permission de consulter les enregistrements de ce type. Contactez votre administrateur si vous pensez devoir y accéder.",
2924
+ recordLoadFailed: "Impossible de charger cet enregistrement",
2925
+ recordLoadFailedDescription: "Une erreur s'est produite lors du chargement. Vérifiez votre connexion et réessayez.",
2777
2926
  },
2778
2927
  actionDialog: {
2779
2928
  title: "Paramètres d'action",
@@ -2806,12 +2955,16 @@ const fr = {
2806
2955
  updateFailed: "Impossible de mettre à jour la navigation",
2807
2956
  },
2808
2957
  objectActions: {
2809
- resetPackageSetConfirm: "Ce jeu d'autorisations est fourni avec un package installé et ne peut pas être supprimé. La suppression le réinitialise à la version livrée et abandonne vos personnalisations dans cet environnement. Continuer ?",
2810
- resetPackageSetSuccess: "Jeu d'autorisations réinitialisé à la version livrée",
2811
2958
  deleteSuccess: "{{label}} supprimé avec succès",
2812
2959
  deleteFailed: "Impossible de supprimer {{label}}",
2813
2960
  noRecordId: "Aucun ID d'enregistrement fourni",
2814
2961
  deleteConfirm: "Supprimer cet enregistrement ?",
2962
+ deleteConfirmTitle: "Supprimer {{label}} \"{{name}}\" ?",
2963
+ bulkDeleteConfirmTitle: "Supprimer {{count}} enregistrement(s) {{label}} ?",
2964
+ bulkDeleteConfirmTitle_one: "Supprimer {{count}} enregistrement {{label}} ?",
2965
+ bulkDeleteConfirmTitle_many: "Supprimer {{count}} d'enregistrements {{label}} ?",
2966
+ bulkDeleteConfirmTitle_other: "Supprimer {{count}} enregistrements {{label}} ?",
2967
+ deleteConfirmButton: "Supprimer",
2815
2968
  bulkDeleteSuccess: "{{count}} enregistrement(s) {{label}} supprimé(s)",
2816
2969
  bulkDeleteSuccess_one: "{{count}} enregistrement {{label}} supprimé",
2817
2970
  bulkDeleteSuccess_many: "{{count}} d'enregistrements {{label}} supprimés",
@@ -2848,6 +3001,7 @@ const fr = {
2848
3001
  loading: "Chargement…",
2849
3002
  failedToLoad: "Échec du chargement de la matrice : {{message}}",
2850
3003
  needsAcross: "Le rapport matriciel nécessite au moins un champ `groupingsAcross`.",
3004
+ forbiddenMessage: "Vous n’avez pas l’autorisation de voir les données de ce rapport.",
2851
3005
  aggregate: {
2852
3006
  count: "Compter",
2853
3007
  countDistinct: "Compter distincts",
@@ -2862,18 +3016,18 @@ const fr = {
2862
3016
  },
2863
3017
  },
2864
3018
  organizations: {
2865
- create: "Créer un espace de travail",
2866
- mine: "Mes espaces de travail",
2867
- title: "Espaces de travail",
2868
- heading: "Vos espaces de travail",
2869
- subtitle: "Sélectionnez un espace de travail pour continuer ou créez-en un nouveau.",
2870
- searchPlaceholder: "Rechercher un espace de travail",
2871
- new: "Nouvel espace de travail",
2872
- current: "Espace de travail actuel",
3019
+ create: "Créer une organisation",
3020
+ mine: "Mes organisations",
3021
+ title: "Organisations",
3022
+ heading: "Vos organisations",
3023
+ subtitle: "Sélectionnez une organisation pour continuer ou créez-en une nouvelle.",
3024
+ searchPlaceholder: "Rechercher une organisation",
3025
+ new: "Nouvelle organisation",
3026
+ current: "Organisation actuelle",
2873
3027
  manage: "Gérer",
2874
- emptyTitle: "Aucun espace de travail pour le moment",
2875
- emptyDescription: "Créez votre premier espace de travail pour commencer.",
2876
- noMatches: "Aucun espace de travail ne correspond à votre recherche.",
3028
+ emptyTitle: "Aucune organisation pour le moment",
3029
+ emptyDescription: "Créez votre première organisation pour commencer.",
3030
+ noMatches: "Aucune organisation ne correspond à votre recherche.",
2877
3031
  },
2878
3032
  organization: {
2879
3033
  roles: {
@@ -2958,6 +3112,7 @@ const fr = {
2958
3112
  readOnlyNote: "Seuls les propriétaires peuvent modifier les paramètres.",
2959
3113
  nameLabel: "Nom de l'organisation",
2960
3114
  slugLabel: "Slug",
3115
+ slugLockedNote: "Cette organisation a des environnements actifs, son slug ne peut donc pas être modifié ici : le renommer déplace aussi leurs sous-domaines.",
2961
3116
  logoLabel: "Logo",
2962
3117
  logoUpload: "Téléverser",
2963
3118
  logoReplace: "Remplacer",
@@ -3032,8 +3187,14 @@ const fr = {
3032
3187
  noPendingApprovals: "Aucune approbation en attente",
3033
3188
  openApprovalsInbox: "Ouvrir la boîte d'approbations",
3034
3189
  badgeTotal: "{{total}} au total",
3035
- badgeNotifications: "{{unread}} notifications",
3036
- badgeApprovals: "{{approvals}} approbations en attente",
3190
+ badgeNotifications: "{{count}} notifications",
3191
+ badgeNotifications_one: "{{count}} notification",
3192
+ badgeNotifications_many: "{{count}} de notifications",
3193
+ badgeNotifications_other: "{{count}} notifications",
3194
+ badgeApprovals: "{{count}} approbations en attente",
3195
+ badgeApprovals_one: "{{count}} approbation en attente",
3196
+ badgeApprovals_many: "{{count}} d'approbations en attente",
3197
+ badgeApprovals_other: "{{count}} approbations en attente",
3037
3198
  arrivalMany: "{{count}} nouveaux messages",
3038
3199
  arrivalMany_one: "{{count}} nouveau message",
3039
3200
  arrivalMany_many: "{{count}} de nouveaux messages",
@@ -3080,10 +3241,10 @@ const fr = {
3080
3241
  body: 'La surface MCP est désactivée (OS_MCP_SERVER_ENABLED=false). Demandez à votre opérateur de la réactiver.',
3081
3242
  },
3082
3243
  url: {
3083
- title: 'Endpoint MCP de cet environnement',
3244
+ title: 'Endpoint MCP de ce système',
3084
3245
  body: 'Tout client IA compatible MCP se connecte avec cette URL. L’identité est en libre-service : le déploiement est son propre serveur d’autorisation OAuth 2.1 — vous vous connectez en votre nom, et chaque appel s’exécute sous vos permissions et la sécurité au niveau des lignes.',
3085
3246
  downloadSkill: 'Télécharger SKILL.md',
3086
- skillHint: 'La skill d’agent portable : apprend à tout agent compatible à travailler avec cet environnement.',
3247
+ skillHint: 'La skill d’agent portable : apprend à tout agent compatible à travailler avec ce système.',
3087
3248
  },
3088
3249
  claude: {
3089
3250
  body: 'Paramètres → Connecteurs → Ajouter un connecteur personnalisé, collez cette URL puis connectez-vous dans le navigateur.',
@@ -3127,15 +3288,8 @@ const fr = {
3127
3288
  importAction: "Importer",
3128
3289
  dismiss: "Ignorer",
3129
3290
  },
3130
- cloudOnboarding: {
3131
- hintCreate: "Créez votre premier environnement — un espace de travail privé avec sa propre URL, sa base de données et son offre. C'est là que se fait la création.",
3132
- hintReady: "Votre environnement de production est prêt. Ouvrez-le pour créer et exécuter vos applications — tout se passe à l'intérieur.",
3133
- createEnvironment: "Créer votre environnement",
3134
- openProduction: "Ouvrir la production",
3135
- manageEnvironments: "Gérer les environnements",
3136
- },
3137
- cloudPlanStatus: {
3138
- current: "Offre actuelle",
3291
+ cloudWorkspaceTimezoneNotice: {
3292
+ seeded: "Le fuseau horaire de l’environnement a été défini sur {{zone}} d’après votre navigateur lors de sa création. Vous pouvez le modifier dans Paramètres → Localisation.",
3139
3293
  },
3140
3294
  ai: {
3141
3295
  nlQuery: {
@@ -3214,8 +3368,8 @@ const fr = {
3214
3368
  rowConversational: "Modèle Build / Ask",
3215
3369
  rowStructured: "Structuré (blueprint / seed)",
3216
3370
  rowReasoning: "Effort de raisonnement",
3217
- readFailed: "Impossible de lire le modèle d'IA effectif. Cet environnement n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read.",
3218
- readFailedWithStatus: "Impossible de lire le modèle d'IA effectif (HTTP {{status}}). Cet environnement n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read.",
3371
+ readFailed: "Impossible de lire le modèle d'IA effectif. Ce système n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read.",
3372
+ readFailedWithStatus: "Impossible de lire le modèle d'IA effectif (HTTP {{status}}). Ce système n'exécute peut-être pas de service d'IA, ou vous n'avez pas la permission ai:read.",
3219
3373
  overridesInEffect: "Surcharges actives : ",
3220
3374
  noOverrides: "aucune — les valeurs par défaut du code déployé s'appliquent.",
3221
3375
  adapter: "Adaptateur : ",
@@ -3233,9 +3387,13 @@ const fr = {
3233
3387
  // against). `humanizeToolName` looks each up as
3234
3388
  // `chatbot.tool.<tool_name>` and falls back to its English
3235
3389
  // title-caser for a custom / third-party tool, so a name
3236
- // missing here is degraded, never broken. The `en` values
3237
- // are deliberately EQUAL to what that title-caser produces:
3238
- // adding the key must not silently reword the English UI.
3390
+ // missing here is degraded, never broken. Every value, `en`
3391
+ // included, is a short sentence in the pack's language
3392
+ // saying what the step does (cloud#2927 Target 3, ruled
3393
+ // 「同意」; objectui#12724): never the tool id, and never
3394
+ // the title-caser's output for it, which is how the step
3395
+ // reads for a tool the pack has no entry for.
3396
+ // `toolLabels-locale-parity-7481` holds both.
3239
3397
  // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3240
3398
  // set for both surfaces (they used to carry separate
3241
3399
  // tables and disagreed on casing).
@@ -3253,42 +3411,48 @@ const fr = {
3253
3411
  // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3254
3412
  // against the registry instead of against its own hand-held list.
3255
3413
  chatbot: {
3414
+ answer: {
3415
+ showFull: 'Afficher toute la réponse',
3416
+ collapse: 'Réduire',
3417
+ expandTable: 'Agrandir',
3418
+ exitExpandedTable: 'Fermer',
3419
+ },
3256
3420
  tool: {
3257
- aggregate_data: "Agréger les données",
3258
- get_record: "Lire un enregistrement",
3259
- query_data: "Interroger les données",
3260
- query_records: "Interroger les enregistrements",
3261
- search_knowledge: "Rechercher dans la base de connaissances",
3262
- visualize_data: "Créer un graphique",
3263
- add_field: "Ajouter un champ",
3264
- apply_blueprint: "Construire l’application",
3265
- apply_edit: "Appliquer les modifications",
3266
- create_metadata: "Créer des métadonnées",
3267
- create_object: "Créer un objet",
3268
- create_package: "Créer un paquet",
3269
- create_seed: "Générer des données d’exemple",
3270
- delete_field: "Supprimer un champ",
3271
- describe_metadata: "Consulter les métadonnées",
3272
- describe_object: "Consulter la structure de l’objet",
3273
- get_active_package: "Lire le paquet actif",
3274
- get_authoring_rules: "Lire les règles d'écriture",
3275
- get_metadata_schema: "Lire le schéma des métadonnées",
3276
- get_package: "Lire le paquet",
3277
- list_metadata: "Lister les métadonnées",
3278
- list_objects: "Lister les objets",
3279
- list_packages: "Lister les paquets",
3280
- load_tools: "Charger les outils",
3281
- modify_field: "Modifier un champ",
3282
- open_record: "Ouvrir la fiche",
3283
- propose_blueprint: "Concevoir le plan de l’application",
3284
- set_active_package: "Changer le paquet actif",
3285
- suggest_builder: "Proposer une méthode de construction",
3286
- test_flow: "Tester le flux",
3287
- todo_write: "Noter les tâches",
3288
- toggle_flow: "Activer ou désactiver le flux",
3289
- update_metadata: "Mettre à jour les métadonnées",
3290
- validate_expression: "Valider l’expression",
3291
- verify_build: "Vérifier la construction",
3421
+ aggregate_data: "Synthétiser les données",
3422
+ get_record: "Lire l’enregistrement",
3423
+ query_data: "Interroger les données nécessaires",
3424
+ query_records: "Rechercher les enregistrements",
3425
+ search_knowledge: "Consulter la base de connaissances",
3426
+ visualize_data: "Représenter les données en graphique",
3427
+ add_field: "Ajouter un champ à l’objet",
3428
+ apply_blueprint: "Construire l’application selon le plan",
3429
+ apply_edit: "Appliquer la modification",
3430
+ create_metadata: "Créer un élément de métadonnées",
3431
+ create_object: "Créer un nouvel objet",
3432
+ create_package: "Créer un nouveau paquet",
3433
+ create_seed: "Générer des données d’exemple pour les objets",
3434
+ delete_field: "Supprimer le champ",
3435
+ describe_metadata: "Examiner les métadonnées",
3436
+ describe_object: "Examiner la structure de l’objet",
3437
+ get_active_package: "Vérifier le paquet actif",
3438
+ get_authoring_rules: "Consulter les règles d’écriture",
3439
+ get_metadata_schema: "Consulter le format des métadonnées",
3440
+ get_package: "Examiner le paquet",
3441
+ list_metadata: "Lister les métadonnées existantes",
3442
+ list_objects: "Lister les objets existants",
3443
+ list_packages: "Lister les paquets existants",
3444
+ load_tools: "Charger d’autres outils",
3445
+ modify_field: "Modifier le champ",
3446
+ open_record: "Ouvrir cette fiche",
3447
+ propose_blueprint: "Rédiger le plan de l’application",
3448
+ set_active_package: "Passer au paquet cible",
3449
+ suggest_builder: "Proposer de construire avec l’IA",
3450
+ test_flow: "Faire un essai du flux",
3451
+ todo_write: "Noter les vérifications à faire",
3452
+ toggle_flow: "Activer ou désactiver ce flux",
3453
+ update_metadata: "Mettre à jour un élément de métadonnées",
3454
+ validate_expression: "Vérifier l’expression",
3455
+ verify_build: "Vérifier le résultat de la construction",
3292
3456
  },
3293
3457
  toolState: {
3294
3458
  agentActivity: "Activité de l’agent",
@@ -3301,6 +3465,16 @@ const fr = {
3301
3465
  denied: "Refusé",
3302
3466
  failed: "Échec",
3303
3467
  },
3468
+ phase: {
3469
+ build: "Création",
3470
+ design: "Conception du plan",
3471
+ stepCount: "{{count}} étapes",
3472
+ stepCount_one: "{{count}} étape",
3473
+ stepCount_many: "{{count}} d’étapes",
3474
+ stepCount_other: "{{count}} étapes",
3475
+ expand: "Afficher les étapes",
3476
+ collapse: "Masquer les étapes",
3477
+ },
3304
3478
  plan: {
3305
3479
  countObjects: "{{count}} objets",
3306
3480
  countObjects_one: "{{count}} objet",
@@ -3315,10 +3489,17 @@ const fr = {
3315
3489
  countDashboards_many: "{{count}} de tableaux de bord",
3316
3490
  countDashboards_other: "{{count}} tableaux de bord",
3317
3491
  countSeedData: "données d’exemple",
3492
+ extendTarget: "Ajout à l’app existante : {{app}}",
3493
+ awaitingConfirm: "En attente de confirmation",
3494
+ objectsAndFields: "Objets et champs",
3495
+ views: "Vues",
3496
+ suggestedField: "suggéré",
3497
+ nameField: "Nom : {{field}}",
3318
3498
  },
3319
3499
  build: {
3320
3500
  building: "Création de {{app}}…",
3321
3501
  built: "Création de {{app}} terminée",
3502
+ builtAndLive: "Créée et en ligne · {{app}}",
3322
3503
  appFallback: "votre application",
3323
3504
  addingSampleData: "ajout de données d’exemple",
3324
3505
  group: {
@@ -3329,6 +3510,46 @@ const fr = {
3329
3510
  seed: "Données d’exemple",
3330
3511
  },
3331
3512
  moreArtifacts: "+{{n}} autres",
3513
+ verifying: "Vérification de la modification…",
3514
+ verifyStep: "étape {{n}}",
3515
+ verified: "Modification vérifiée",
3516
+ unknownPhase: "Phase de création inconnue",
3517
+ nextStepsLead: "Ensuite, vous pouvez dire : {{steps}}",
3518
+ nextStepQuote: "« {{step}} »",
3519
+ draftPosture: "Les modifications suivantes sont enregistrées comme brouillons, et vous les publiez dans Studio.",
3520
+ checksPassed: "Vérifications réussies {{passed}}/{{total}}",
3521
+ },
3522
+ changes: {
3523
+ planTitle: "Plan de modifications · {{count}} modifications",
3524
+ planTitle_one: "Plan de modifications · {{count}} modification",
3525
+ planTitle_many: "Plan de modifications · {{count}} de modifications",
3526
+ planTitle_other: "Plan de modifications · {{count}} modifications",
3527
+ saveDraft: "Enregistrer comme brouillon",
3528
+ reviewAndPublish: "Vérifier les modifications et publier",
3529
+ undo: "Annuler",
3530
+ undoWithOthers: "Annuler (avec {{count}} autres brouillons)",
3531
+ undoWithOthers_one: "Annuler (avec {{count}} autre brouillon)",
3532
+ undoWithOthers_many: "Annuler (avec {{count}} d'autres brouillons)",
3533
+ undoWithOthers_other: "Annuler (avec {{count}} autres brouillons)",
3534
+ undoConfirm: "Annuler supprime les {{total}} brouillons non publiés de ce package, dont {{count}} qui ne font pas partie de cette modification.",
3535
+ undoConfirm_one: "Annuler supprime les {{total}} brouillons non publiés de ce package, dont {{count}} qui ne fait pas partie de cette modification.",
3536
+ undoConfirm_many: "Annuler supprime les {{total}} brouillons non publiés de ce package, dont {{count}} de brouillons qui ne font pas partie de cette modification.",
3537
+ undoConfirm_other: "Annuler supprime les {{total}} brouillons non publiés de ce package, dont {{count}} qui ne font pas partie de cette modification.",
3538
+ undoConfirmUnknown: "Annuler supprime tous les brouillons non publiés de ce package, pas seulement cette modification.",
3539
+ undoConfirmAction: "Tout annuler",
3540
+ undoCancel: "Conserver",
3541
+ undoing: "Annulation…",
3542
+ undone: "Annulé",
3543
+ undoFailed: "Échec de l'annulation",
3544
+ kind: {
3545
+ field: "Champ",
3546
+ object: "Objet",
3547
+ view: "Vue",
3548
+ dashboard: "Tableau de bord",
3549
+ app: "Application",
3550
+ seed: "Données d'exemple",
3551
+ package: "Package d'application",
3552
+ },
3332
3553
  },
3333
3554
  },
3334
3555
  chatbotError: {
@@ -3344,10 +3565,13 @@ const fr = {
3344
3565
  buyCredits: "Acheter un pack de crédits",
3345
3566
  upgradePlan: "Changer d'offre",
3346
3567
  },
3568
+ planTier: {
3569
+ teamAndUp: "À partir de l'offre Team",
3570
+ },
3347
3571
  environment: {
3348
- addEnvironment: "Ajouter un environnement",
3349
3572
  setUpProduction: "Configurer votre environnement de production",
3350
3573
  addDevelopment: "Ajouter un environnement de développement",
3574
+ developmentLocked: "Environnements de développement · {{tier}}",
3351
3575
  // Plan/capacity dialog (EnvironmentEntitlementDialog) — cloud#959.
3352
3576
  entitlement: {
3353
3577
  productionLimitTitle: "Vous avez déjà votre environnement de production",
@@ -3395,7 +3619,7 @@ const fr = {
3395
3619
  },
3396
3620
  unbound: {
3397
3621
  title: "Non connecté",
3398
- body: "Connectez ce runtime à un plan de contrôle ObjectStack pour parcourir les paquets privés de votre organisation et les installer ici. L'approbation se fait en un seul clic dans votre compte cloud — aucun identifiant ni justificatif n'est saisi sur cette page.",
3622
+ body: "Ce runtime n'est connecté à aucun plan de contrôle. « Connecter » ouvre votre compte cloud dans une nouvelle fenêtre, où un seul clic approuve la liaison — aucun identifiant ni justificatif n'est saisi sur cette page.",
3399
3623
  connect: "Connecter",
3400
3624
  },
3401
3625
  },
@@ -3408,6 +3632,13 @@ const fr = {
3408
3632
  dismiss: "Ignorer",
3409
3633
  confirmedToast: "« {{set}} » est désormais accordé à {{anchor}}.",
3410
3634
  dismissedToast: "Suggestion pour « {{set}} » ignorée.",
3635
+ guestUnsupported: "Impossible de l'accorder ici : les ensembles de la position Guest ne sont pas dérivés des suggestions acceptées.",
3636
+ acceptedState: "« {{set}} » a été accepté pour tous les utilisateurs connectés (position Everyone).",
3637
+ notInForceState: "« {{set}} » a été accepté, mais n'est pas encore en vigueur : la position Everyone n'a pas changé lors de cette requête. Le journal du serveur indique pourquoi.",
3638
+ dismissedState: "« {{set}} » n'est pas accordé : la suggestion a été ignorée ou révoquée.",
3639
+ revoke: "Révoquer",
3640
+ revoking: "Révocation…",
3641
+ revokedToast: "Acceptation de « {{set}} » révoquée.",
3411
3642
  },
3412
3643
  title: "Marketplace d'applications",
3413
3644
  subtitle: "Parcourez les applications approuvées publiées dans le catalogue ObjectStack. Cliquez sur une application pour voir les détails et l'installer dans l'un de vos environnements.",
@@ -3421,21 +3652,26 @@ const fr = {
3421
3652
  noMatchFilters: "Aucune application ne correspond à vos filtres.",
3422
3653
  noDescription: "Aucune description disponible.",
3423
3654
  back: "Retour au marketplace",
3424
- installedTitle: "Applications installées",
3425
- installedSubtitle: "Paquets du marketplace actuellement installés dans le noyau de ce runtime.",
3426
- installedEmpty: "Aucune application du marketplace installée dans ce runtime pour l'instant.",
3427
3655
  browseLink: "Parcourir le marketplace →",
3428
- installedAdditiveNote: "<strong>Remarque :</strong> L'API du noyau est uniquement additive — la désinstallation supprime le manifeste du disque pour que le paquet ne se charge pas au prochain démarrage, mais le noyau en cours d'exécution maintient l'application enregistrée jusqu'au redémarrage.",
3429
- installedAt: "Installé {{when}}",
3430
- installedBy: "par {{user}}",
3431
- installedPackageId: "Paquet",
3432
- cachedAs: "Mis en cache sous <code>{{path}}</code>",
3656
+ installedAdditiveNote: "La désinstallation retire immédiatement l'application du noyau en cours d'exécution, avec ses jeux d'autorisations et leurs attributions, et supprime le manifeste en cache pour que le paquet ne se charge pas au prochain démarrage. Les enregistrements stockés dans ses objets restent dans la base de données.",
3433
3657
  versionBadge: "v{{version}}",
3434
3658
  installedBadge: "Installé v{{version}}",
3659
+ // objectui#11645 — an install-local entry this runtime refused to load at
3660
+ // startup (the listing's `notLoaded` marker), read on Installed Apps.
3661
+ notLoaded: {
3662
+ badge: "Non chargé",
3663
+ protocolIncompatible: "Ce runtime n'a pas chargé ce paquet : il cible le protocole {{requiredRange}}, que ce runtime ne prend pas en charge.",
3664
+ otherReason: "Ce runtime n'a pas chargé ce paquet ({{code}}).",
3665
+ },
3435
3666
  load: {
3436
3667
  failed: "Impossible de charger le marketplace",
3437
3668
  failedHintConfigured: "Ce runtime accède à la place de marché via le plan de contrôle situé à {{url}}. Vérifiez qu'il est en ligne et joignable depuis ici.",
3438
- failedHintSameOrigin: "Ce runtime sert lui-même le catalogue de la place de marché. Vérifiez qu'il est en ligne.",
3669
+ failedHintSameOrigin: "Le catalogue de la place de marché est accessible via ce runtime. Vérifiez que le runtime est en ligne et qu'il peut joindre le catalogue.",
3670
+ loading: "Chargement du catalogue de la place de marché…",
3671
+ slow: "Chargement en cours — le catalogue de la place de marché tarde à répondre.",
3672
+ retry: "Réessayer",
3673
+ unreachable: "Le catalogue de la place de marché est injoignable.",
3674
+ answeredError: "Le catalogue de la place de marché a répondu par une erreur (HTTP {{status}}).",
3439
3675
  packageFailed: "Impossible de charger le paquet",
3440
3676
  notFound: "Introuvable.",
3441
3677
  },
@@ -3479,6 +3715,7 @@ const fr = {
3479
3715
  working: "Traitement…",
3480
3716
  installToCloud: "Installer dans le cloud…",
3481
3717
  installing: "Installation…",
3718
+ updating: "Mise à jour…",
3482
3719
  uninstall: "Désinstaller",
3483
3720
  uninstalling: "Désinstallation…",
3484
3721
  details: "Détails",
@@ -3496,15 +3733,45 @@ const fr = {
3496
3733
  environmentPlaceholder: "Sélectionner un environnement",
3497
3734
  includeSampleData: "Inclure des données d'exemple",
3498
3735
  noEnvs: "Aucun environnement trouvé dans votre organisation active.",
3499
- noPermission: "Vous n'avez pas la permission d'installer des applications dans un environnement. Seuls les propriétaires et administrateurs de l'organisation peuvent installer.",
3736
+ noPermission: "Vous n'avez pas la permission d'installer des applications dans un environnement. Seuls les propriétaires et administrateurs de l'organisation peuvent installer — contactez l'administrateur de votre organisation.",
3500
3737
  signInFirst: "Vous devez d'abord vous connecter à ObjectStack Cloud.",
3501
3738
  success: "Installé avec succès. Ouvrez l'environnement pour voir la nouvelle application.",
3502
3739
  localSuccess: "v{{version}} installé dans ce runtime. \"{{name}}\" devrait maintenant apparaître dans le sélecteur d'applications.",
3740
+ localLoadsAtRestart: "v{{version}} installé dans ce runtime. \"{{name}}\" sera chargé au prochain redémarrage du runtime et n'apparaîtra pas dans le sélecteur d'applications d'ici là.",
3503
3741
  localManifestConflict: "{{message}}\nRemarque : Une application locale possède déjà ce manifest_id. Supprimez-la d'abord de objectstack.config.ts.",
3504
3742
  localUnauthorized: "Connectez-vous d'abord à ce runtime.",
3505
3743
  localMarketplaceUnavailable: "Ce runtime n'a pas de OS_CLOUD_URL configuré.",
3506
3744
  updateTo: "Mettre à jour → v{{version}}",
3507
3745
  installedVersion: "Installé v{{version}}",
3746
+ deploying: "Déploiement de l'application…",
3747
+ deployed: "L'application est déployée et prête.",
3748
+ openApp: "Ouvrir {{name}}",
3749
+ deployTimeout: "L'installation a été enregistrée, mais cet environnement ne sert pas encore l'application. Le déploiement est peut-être encore en cours : vérifiez à nouveau dans un instant. Si elle n'apparaît jamais, le paquet n'a peut-être pas été chargé, ne contient aucune application, ou son application exige une autorisation que vous n'avez pas.",
3750
+ checkAgain: "Vérifier à nouveau",
3751
+ // ADR-0131 D6 — the install modes a package's manifest permits, and
3752
+ // what an unmanaged install answers (MarketplacePackagePage).
3753
+ mode: {
3754
+ label: "Mode d'installation",
3755
+ managed: "Géré",
3756
+ managedHint: "Le paquet reste l'autorité : il est enregistré comme code, reçoit ses mises à niveau, et ses éléments ne sont pas modifiés ici.",
3757
+ unmanaged: "Copie non gérée",
3758
+ unmanagedHint: "Copié une seule fois dans ce runtime comme ses propres métadonnées : chaque élément est modifiable ici, et la copie ne reçoit aucune mise à niveau.",
3759
+ required: "Choisissez un mode d'installation pour installer ce paquet.",
3760
+ },
3761
+ unmanagedSuccess: "v{{version}} de \"{{name}}\" copié dans ce runtime comme ses propres métadonnées, dans la base {{base}}. La copie est modifiable et ne reçoit aucune mise à niveau.",
3762
+ unmanagedStrippedLocks: "Le paquet verrouillait ces éléments. La copie est modifiable, leurs verrous n'ont donc pas été copiés :",
3763
+ unmanagedIgnored: "Ce runtime ne prend pas en charge les installations non gérées : \"{{name}}\" a donc été installé en mode géré (enregistré comme code) au lieu d'être copié. Mettez à niveau le runtime, puis désinstallez le paquet et réinstallez-le comme copie non gérée.",
3764
+ },
3765
+ // objectui#12146 — the install dialog opened as an UPDATE of the copy
3766
+ // this environment holds (MarketplacePackagePage).
3767
+ update: {
3768
+ dialogTitle: "Mettre à jour {{name}}",
3769
+ dialogDescCurrent: "Mettre à jour la copie installée dans cet environnement ({{host}}).",
3770
+ dialogDescPicker: "Choisissez l'environnement dont la copie installée doit être mise à jour. Vous devez être connecté à ObjectStack Cloud.",
3771
+ majorNotice: "Il s'agit d'une mise à jour de version majeure (v{{fromMajor}} → v{{toMajor}}), qui peut comporter des changements incompatibles.",
3772
+ releaseNotes: "Lire les notes de version de la v{{version}}",
3773
+ success: "Mis à jour vers la v{{version}}.",
3774
+ deployTimeout: "La mise à jour a été enregistrée, mais cet environnement ne sert pas encore la v{{version}}. Le déploiement est peut-être encore en cours : vérifiez à nouveau dans un instant.",
3508
3775
  },
3509
3776
  // objectui#3546 — the MarketplacePage "Your organization" strip.
3510
3777
  org: {
@@ -3537,9 +3804,11 @@ const fr = {
3537
3804
  },
3538
3805
  },
3539
3806
  uninstall: {
3540
- confirm: "Désinstaller {{manifestId}} v{{version}} de ce runtime ?\n\nLe manifeste en cache sera supprimé.",
3541
- successInList: "{{manifestId}} supprimé. Redémarrez le runtime pour le décharger complètement.",
3542
- successInDetail: "Manifeste en cache pour {{manifestId}} supprimé.",
3807
+ confirm: "Désinstaller {{manifestId}} v{{version}} de ce runtime ?\n\nL'application sera retirée immédiatement du noyau en cours d'exécution, avec ses jeux d'autorisations et leurs attributions, et le manifeste en cache sera supprimé. Les enregistrements stockés dans ses objets restent dans la base de données.",
3808
+ successInList: "{{manifestId}} supprimé : l'application a été retirée du noyau en cours d'exécution, avec ses jeux d'autorisations et leurs attributions. Les enregistrements stockés dans ses objets restent dans la base de données.",
3809
+ successInDetail: "{{manifestId}} et son manifeste en cache supprimés : l'application a été retirée du noyau en cours d'exécution, avec ses jeux d'autorisations et leurs attributions. Les enregistrements stockés dans ses objets restent dans la base de données.",
3810
+ confirmNotLoaded: "Désinstaller {{manifestId}} v{{version}} de ce runtime ?\n\nLe manifeste en cache sera supprimé. Ce runtime n'a pas chargé le paquet, donc aucune partie n'est en cours d'exécution.",
3811
+ successNotLoaded: "{{manifestId}} supprimé. Il n'était pas chargé, aucun redémarrage n'est nécessaire.",
3543
3812
  },
3544
3813
  accessDenied: {
3545
3814
  title: "Marketplace réservé aux administrateurs",
@@ -3619,6 +3888,7 @@ const fr = {
3619
3888
  progressEligible_other: '{{count}} approbateurs éligibles',
3620
3889
  progressBar: 'Avancement de la décision',
3621
3890
  declaredActions: 'Actions',
3891
+ decisionPanelOffRequestPage: 'Le panneau de décision d\'approbation ne fonctionne que sur les pages de demande d\'approbation.',
3622
3892
  attachmentChip: 'Pièce jointe',
3623
3893
  attachmentOpenFailed: "Impossible d'ouvrir la pièce jointe — veuillez réessayer",
3624
3894
  approveOneTitle: 'Approuver « {{title}} » ?',
@@ -3685,6 +3955,10 @@ const fr = {
3685
3955
  emptyPending: 'Tout est à jour — rien n\'attend votre approbation.',
3686
3956
  emptyOther: 'Rien ici pour l\'instant.',
3687
3957
  emptyViewAll: 'Voir toutes les demandes',
3958
+ waitingOnOthers: "{{count}} demandes attendent d'autres approbateurs",
3959
+ waitingOnOthers_one: "{{count}} demande attend d'autres approbateurs",
3960
+ waitingOnOthers_many: "{{count}} de demandes attendent d'autres approbateurs",
3961
+ waitingOnOthers_other: "{{count}} demandes attendent d'autres approbateurs",
3688
3962
  noMatches: 'Aucun résultat avec les filtres actuels.',
3689
3963
  keyboardHint: 'Clavier : j/k déplacer · Entrée ouvrir · x sélectionner · a approuver · r rejeter',
3690
3964
  drawerTitle: 'Demande d\'approbation',
@@ -3702,12 +3976,12 @@ const fr = {
3702
3976
  overrideActionLabel: '{{action}} (dérogation)',
3703
3977
  overrideNotice: "Vous n'occupez aucun poste d'approbateur à cette étape. En continuant, votre dérogation d'administrateur sera utilisée : l'étape est finalisée immédiatement et tout approbateur n'ayant pas encore statué est contourné. La décision est enregistrée comme une dérogation d'administrateur.",
3704
3978
  overrideNoticeWho: "Vous n'occupez aucun poste d'approbateur à cette étape. En continuant, votre dérogation d'administrateur sera utilisée : l'étape est finalisée immédiatement et les approbateurs n'ayant pas encore statué sont contournés — {{who}}. La décision est enregistrée comme une dérogation d'administrateur.",
3979
+ overrideReassignNotice: "Vous n'occupez aucun poste d'approbateur à cette étape. En continuant, votre dérogation d'administrateur sera utilisée : l'étape passe au nouvel approbateur que vous choisissez, qui remplace tout approbateur n'ayant pas encore statué. La demande reste en attente de la décision du nouvel approbateur. La réattribution est enregistrée comme une dérogation d'administrateur.",
3980
+ overrideReassignNoticeWho: "Vous n'occupez aucun poste d'approbateur à cette étape. En continuant, votre dérogation d'administrateur sera utilisée : l'étape passe au nouvel approbateur que vous choisissez, qui remplace les approbateurs n'ayant pas encore statué — {{who}}. La demande reste en attente de la décision du nouvel approbateur. La réattribution est enregistrée comme une dérogation d'administrateur.",
3981
+ overrideRecallNotice: "Vous n'avez pas soumis cette demande. En continuant, votre dérogation d'administrateur sera utilisée : la demande est retirée, aucun approbateur n'ayant pas encore statué ne pourra plus agir sur elle, et l'enregistrement est déverrouillé.",
3982
+ overrideRecallNoticeWho: "Vous n'avez pas soumis cette demande. En continuant, votre dérogation d'administrateur sera utilisée : la demande est retirée, l'enregistrement est déverrouillé, et les approbateurs n'ayant pas encore statué ne pourront plus agir sur elle — {{who}}.",
3705
3983
  viaOverrideChip: 'Dérogation administrateur',
3706
3984
  viaOverrideHint: "L'auteur n'occupait aucun poste d'approbateur à cette étape — admis par la voie de dérogation administrateur.",
3707
- rawData: 'Données brutes (JSON)',
3708
- copy: 'Copier',
3709
- copied: 'Copié',
3710
- copyFailed: 'Échec de la copie',
3711
3985
  overrideActor: 'Agir sous une autre identité (admin)',
3712
3986
  actor: 'Acteur',
3713
3987
  auto: 'Auto',
@@ -3796,6 +4070,10 @@ const fr = {
3796
4070
  publishing: 'Publication…',
3797
4071
  exit: "Quitter l'aperçu",
3798
4072
  changes: 'Modifications',
4073
+ pendingHere: 'Aperçu du brouillon · {{count}} modifications non publiées sur cette page',
4074
+ pendingHere_one: 'Aperçu du brouillon · {{count}} modification non publiée sur cette page',
4075
+ pendingHere_many: 'Aperçu du brouillon · {{count}} de modifications non publiées sur cette page',
4076
+ pendingHere_other: 'Aperçu du brouillon · {{count}} modifications non publiées sur cette page',
3799
4077
  },
3800
4078
  changes: {
3801
4079
  title: 'Modifications en attente',
@@ -3813,7 +4091,71 @@ const fr = {
3813
4091
  confirmNote_one: 'La publication libère atomiquement {{count}} brouillon en attente de ce paquet.',
3814
4092
  confirmNote_many: 'La publication libère atomiquement les {{count}} de brouillons en attente de ce paquet.',
3815
4093
  confirmNote_other: 'La publication libère atomiquement les {{count}} brouillons en attente de ce paquet.',
4094
+ // objectui#11591 — the package-less sheet: no package to batch, so each
4095
+ // draft publishes by itself and one that fails stays pending.
4096
+ confirmNoteSeparate: 'La publication libère les {{count}} brouillons en attente un par un : celui qui échoue reste en attente, les autres sont publiés quand même.',
4097
+ confirmNoteSeparate_one: 'La publication libère isolément {{count}} brouillon en attente : s’il échoue, il reste en attente.',
4098
+ confirmNoteSeparate_many: 'La publication libère les {{count}} de brouillons en attente un par un : celui qui échoue reste en attente, les autres sont publiés quand même.',
4099
+ confirmNoteSeparate_other: 'La publication libère les {{count}} brouillons en attente un par un : celui qui échoue reste en attente, les autres sont publiés quand même.',
3816
4100
  publishConfirm: 'Tout publier',
4101
+ summaryItems: '{{count}} éléments',
4102
+ summaryItems_one: '{{count}} élément',
4103
+ summaryItems_many: '{{count}} d’éléments',
4104
+ summaryItems_other: '{{count}} éléments',
4105
+ summaryType: '{{n}} {{type}}',
4106
+ typeCount: {
4107
+ object: '{{count}} objets',
4108
+ object_one: '{{count}} objet',
4109
+ object_many: '{{count}} d’objets',
4110
+ object_other: '{{count}} objets',
4111
+ view: '{{count}} vues',
4112
+ view_one: '{{count}} vue',
4113
+ view_many: '{{count}} de vues',
4114
+ view_other: '{{count}} vues',
4115
+ page: '{{count}} pages',
4116
+ page_one: '{{count}} page',
4117
+ page_many: '{{count}} de pages',
4118
+ page_other: '{{count}} pages',
4119
+ dashboard: '{{count}} tableaux de bord',
4120
+ dashboard_one: '{{count}} tableau de bord',
4121
+ dashboard_many: '{{count}} de tableaux de bord',
4122
+ dashboard_other: '{{count}} tableaux de bord',
4123
+ app: '{{count}} applications',
4124
+ app_one: '{{count}} application',
4125
+ app_many: '{{count}} d’applications',
4126
+ app_other: '{{count}} applications',
4127
+ action: '{{count}} actions',
4128
+ action_one: '{{count}} action',
4129
+ action_many: '{{count}} d’actions',
4130
+ action_other: '{{count}} actions',
4131
+ report: '{{count}} rapports',
4132
+ report_one: '{{count}} rapport',
4133
+ report_many: '{{count}} de rapports',
4134
+ report_other: '{{count}} rapports',
4135
+ flow: '{{count}} flux',
4136
+ flow_one: '{{count}} flux',
4137
+ flow_many: '{{count}} de flux',
4138
+ flow_other: '{{count}} flux',
4139
+ permission: '{{count}} ensembles d’autorisations',
4140
+ permission_one: '{{count}} ensemble d’autorisations',
4141
+ permission_many: '{{count}} d’ensembles d’autorisations',
4142
+ permission_other: '{{count}} ensembles d’autorisations',
4143
+ agent: '{{count}} agents',
4144
+ agent_one: '{{count}} agent',
4145
+ agent_many: '{{count}} d’agents',
4146
+ agent_other: '{{count}} agents',
4147
+ email_template: '{{count}} modèles d’e-mail',
4148
+ email_template_one: '{{count}} modèle d’e-mail',
4149
+ email_template_many: '{{count}} de modèles d’e-mail',
4150
+ email_template_other: '{{count}} modèles d’e-mail',
4151
+ },
4152
+ // objectui#12929 — the unchecked choice under an added object field whose
4153
+ // literal default the batch publish can write into the existing records.
4154
+ backfillOption: 'Renseigner la valeur par défaut ({{count}} enregistrements existants)',
4155
+ backfillOption_one: 'Renseigner la valeur par défaut ({{count}} enregistrement existant)',
4156
+ backfillOption_many: 'Renseigner la valeur par défaut ({{count}} d’enregistrements existants)',
4157
+ backfillOption_other: 'Renseigner la valeur par défaut ({{count}} enregistrements existants)',
4158
+ backfillOptionNoCount: 'Renseigner la valeur par défaut',
3817
4159
  // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
3818
4160
  // the confirm button so a refusal the door would issue is read BEFORE
3819
4161
  // the click rather than as a toast after the batch rolled back.
@@ -3896,6 +4238,10 @@ const fr = {
3896
4238
  exists: "Est défini",
3897
4239
  notExists: "N'est pas défini",
3898
4240
  },
4241
+ emptyCheckHint: {
4242
+ text: '« {{isEmpty}} » correspond aussi à un texte vide ; « {{isNull}} » uniquement à une valeur absente.',
4243
+ list: '« {{isEmpty}} » correspond aussi à une liste vide ; « {{isNull}} » uniquement à une valeur absente.',
4244
+ },
3899
4245
  },
3900
4246
  sortBuilder: {
3901
4247
  sortBy: "Trier par",
@@ -4013,6 +4359,8 @@ const fr = {
4013
4359
  setDefaultFailed: "Échec de la définition de l'application par défaut : {{reason}}",
4014
4360
  appDeleted: "{{name}} supprimée",
4015
4361
  deleteFailed: "Échec de la suppression de l'application : {{reason}}",
4362
+ nothingToDelete: "Rien à supprimer pour {{name}} : {{reason}}",
4363
+ alreadyAtDefault: "elle est déjà à la valeur par défaut de son package",
4016
4364
  bulkEnabled: "{{n}} applications activées",
4017
4365
  bulkDisabled: "{{n}} applications désactivées",
4018
4366
  bulkFailed: "Échec pour {{n}} : {{details}}",
@@ -4037,6 +4385,7 @@ const fr = {
4037
4385
  toggleLabel: "Activation de {{label}}",
4038
4386
  on: "Activé",
4039
4387
  off: "Désactivé",
4388
+ notRunning: "Ne s'exécute pas ici",
4040
4389
  clone: "Cloner",
4041
4390
  cloneTitle: "Cloner le flux du package",
4042
4391
  cloneBody: "La copie reprend toute la définition et exige un nouveau nom machine et un nouveau libellé. Modifiez la copie dans Studio.",
@@ -4045,6 +4394,9 @@ const fr = {
4045
4394
  cancel: "Annuler",
4046
4395
  cloneConfirm: "Créer le clone",
4047
4396
  cloneCreated: "Flux « {{name}} » créé.",
4397
+ cloneSwitchSourceOff: "Désactiver « {{label}} »",
4398
+ cloneSourceOff: "Le flux empaqueté « {{label}} » est désactivé.",
4399
+ cloneOpen: "Ouvrir la copie dans Studio",
4048
4400
  emptyTitle: "Aucun flux de package",
4049
4401
  emptyBody: "Aucun package installé ne fournit de flux d'automatisation sur ce déploiement. Les flux que vous créez vous-même se trouvent dans Studio.",
4050
4402
  loadFailed: "Impossible de charger l'automatisation des packages.",
@@ -4052,6 +4404,7 @@ const fr = {
4052
4404
  toggleFailed: "Impossible de modifier l'activation.",
4053
4405
  cloneFailedHttp: "Impossible de cloner ce flux (HTTP {{status}}).",
4054
4406
  cloneFailed: "Impossible de cloner ce flux.",
4407
+ reasonDetails: "Détails",
4055
4408
  actionsSubtitle: "Actions fournies par les packages installés. Désactivez-en une pour ce déploiement et elle cesse de s'exécuter partout où elle est proposée. Vous pouvez toujours créer votre propre action à côté, dans Studio.",
4056
4409
  colAction: "Action",
4057
4410
  colObject: "Objet",
@@ -4062,7 +4415,84 @@ const fr = {
4062
4415
  },
4063
4416
  element: {
4064
4417
  number: {
4065
- noObject: "Aucun objet indiqué : définissez object ou dataSource.object.",
4418
+ noObject: "Aucun objet indiqué : définissez dataSource.object.",
4419
+ sourceUnresolved: "La source de données de cet indicateur n’a pas pu être résolue",
4420
+ },
4421
+ image: {
4422
+ noSource: "Aucune source d’image",
4423
+ },
4424
+ recordPicker: {
4425
+ sourceUnresolved: "La source de données de ce sélecteur d’enregistrement n’a pas pu être résolue",
4426
+ },
4427
+ calendar: {
4428
+ sourceUnresolved: "La source de données de ce calendrier n’a pas pu être résolue",
4429
+ },
4430
+ chart: {
4431
+ sourceUnresolved: "La source de données de ce graphique n’a pas pu être résolue",
4432
+ },
4433
+ pivotTable: {
4434
+ sourceUnresolved: "La source de données de ce tableau croisé dynamique n’a pas pu être résolue",
4435
+ },
4436
+ detailView: {
4437
+ sourceUnresolved: "La source de données de cette vue détaillée n’a pas pu être résolue",
4438
+ },
4439
+ relatedList: {
4440
+ sourceUnresolved: "La source de données de cette liste associée n’a pas pu être résolue",
4441
+ parentUnreadable: "L’enregistrement parent de cette liste associée n’a pas pu être lu",
4442
+ },
4443
+ form: {
4444
+ sourceUnresolved: "La source de données de ce formulaire n’a pas pu être résolue",
4445
+ },
4446
+ lineItems: {
4447
+ sourceUnresolved: "La source de données de ce panneau de lignes n’a pas pu être résolue",
4448
+ },
4449
+ gantt: {
4450
+ sourceUnresolved: "La source de données de ce diagramme de Gantt n’a pas pu être résolue",
4451
+ },
4452
+ grid: {
4453
+ sourceUnresolved: "La source de données de cette grille n’a pas pu être résolue",
4454
+ },
4455
+ board: {
4456
+ sourceUnresolved: "La source de données de ce tableau n’a pas pu être résolue",
4457
+ },
4458
+ listView: {
4459
+ sourceUnresolved: "La source de données de cette vue en liste n’a pas pu être résolue",
4460
+ },
4461
+ map: {
4462
+ sourceUnresolved: "La source de données de cette carte n’a pas pu être résolue",
4463
+ },
4464
+ timeline: {
4465
+ sourceUnresolved: "La source de données de cette chronologie n’a pas pu être résolue",
4466
+ },
4467
+ component: {
4468
+ sourceUnresolved: "La source de données de ce composant n’a pas pu être résolue",
4469
+ noDataSource: "Aucune source de données résolue",
4470
+ apiRefused: "La source de données API de ce composant est refusée",
4471
+ apiUnreadable: "La source de données API de ce composant n’a pas pu être lue",
4472
+ },
4473
+ metadataViewer: {
4474
+ missingKey: "{{key}} manquant pour cette vue.",
4475
+ loading: "Chargement de {{name}}…",
4476
+ loadFailed: "Impossible de charger {{name}} : {{message}}",
4477
+ notFound: "{{name}} introuvable.",
4478
+ stateMachine: "Machine à états",
4479
+ flow: "Flux",
4480
+ permission: "Autorisation",
4481
+ noStateMachine: "Aucune machine à états sur {{object}}.",
4482
+ noStateMachineNamed: "Aucune machine à états nommée « {{name}} » sur {{object}}.",
4483
+ lifecycle: "Cycle de vie de {{object}}",
4484
+ field: "champ {{field}}",
4485
+ initial: "début",
4486
+ final: "fin",
4487
+ steps: "Étapes : {{count}}",
4488
+ noSteps: "Aucune étape à afficher.",
4489
+ untitledStep: "(étape)",
4490
+ hiddenSteps: "Étapes techniques masquées : {{count}} · définissez {{setting}} pour tout afficher",
4491
+ objectAccess: "Accès aux objets : {{count}}",
4492
+ noPermissions: "Aucune autorisation d’objet déclarée.",
4493
+ object: "Objet",
4494
+ unknownType: "Type de vue de métadonnées inconnu. Attendu : {{a}}, {{b}} ou {{c}}.",
4495
+ unknownTypeNamed: "Type de vue de métadonnées inconnu « {{type}} ». Attendu : {{a}}, {{b}} ou {{c}}.",
4066
4496
  },
4067
4497
  },
4068
4498
  };