pgkiln 0.83.0 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/db/migrations/154_notifications.sql +186 -0
  2. package/docs/apex-feature-parity.md +3 -2
  3. package/docs/guide/03-builder.md +16 -5
  4. package/docs/guide/04-pages-and-regions.md +42 -0
  5. package/docs/guide/06-processing.md +22 -1
  6. package/docs/guide/07-dynamic-actions.md +1 -0
  7. package/docs/guide/09-reference.md +15 -0
  8. package/docs/guide/11-from-apex.md +1 -0
  9. package/docs/guide/12-development.md +13 -1
  10. package/package.json +1 -1
  11. package/public/app.css +29 -0
  12. package/public/app.js +78 -0
  13. package/public/sw.js +5 -1
  14. package/src/app.ts +11 -0
  15. package/src/builder/ai-agents.ts +86 -85
  16. package/src/builder/ai-builder.ts +30 -30
  17. package/src/builder/ai.ts +93 -92
  18. package/src/builder/api.ts +47 -47
  19. package/src/builder/app-groups.ts +33 -32
  20. package/src/builder/appfromfile.ts +57 -58
  21. package/src/builder/appsheets.ts +33 -32
  22. package/src/builder/appwizard.ts +65 -65
  23. package/src/builder/arrange.ts +23 -22
  24. package/src/builder/assistant.ts +39 -38
  25. package/src/builder/automations.ts +32 -31
  26. package/src/builder/availability.ts +24 -24
  27. package/src/builder/backups.ts +30 -31
  28. package/src/builder/blueprints.ts +62 -61
  29. package/src/builder/code-editor.ts +1 -1
  30. package/src/builder/components.ts +10 -6
  31. package/src/builder/create-page.ts +52 -50
  32. package/src/builder/cross-app.ts +37 -35
  33. package/src/builder/dataload.ts +2 -2
  34. package/src/builder/datasets.ts +107 -106
  35. package/src/builder/dependencies.ts +20 -19
  36. package/src/builder/designer.ts +36 -36
  37. package/src/builder/diagnostics.ts +58 -57
  38. package/src/builder/features.ts +39 -35
  39. package/src/builder/feedback.ts +23 -20
  40. package/src/builder/find-workspace.ts +28 -24
  41. package/src/builder/form-designer.ts +36 -35
  42. package/src/builder/gallery.ts +25 -29
  43. package/src/builder/globalization.ts +50 -49
  44. package/src/builder/i18n/de.ts +3461 -0
  45. package/src/builder/i18n/en.ts +3461 -0
  46. package/src/builder/i18n/es.ts +3461 -0
  47. package/src/builder/i18n/fr.ts +3461 -0
  48. package/src/builder/i18n/it.ts +3461 -0
  49. package/src/builder/i18n/ja.ts +3461 -0
  50. package/src/builder/i18n/ko.ts +3461 -0
  51. package/src/builder/i18n/nl.ts +3461 -0
  52. package/src/builder/i18n/pt.ts +3461 -0
  53. package/src/builder/i18n/zh-cn.ts +3461 -0
  54. package/src/builder/i18n/zh-tw.ts +3461 -0
  55. package/src/builder/i18n.ts +17 -3
  56. package/src/builder/json-sources.ts +63 -62
  57. package/src/builder/layouts.ts +12 -11
  58. package/src/builder/locks.ts +29 -28
  59. package/src/builder/login-page.ts +26 -25
  60. package/src/builder/mail.ts +148 -147
  61. package/src/builder/newapp.ts +15 -12
  62. package/src/builder/notification-settings.ts +27 -0
  63. package/src/builder/plugins.ts +47 -44
  64. package/src/builder/process-jobs.ts +11 -10
  65. package/src/builder/pwa.ts +22 -21
  66. package/src/builder/remote-databases.ts +55 -56
  67. package/src/builder/report-settings.ts +1 -1
  68. package/src/builder/reporter.ts +43 -42
  69. package/src/builder/rest-catalogs.ts +87 -86
  70. package/src/builder/rest.ts +9 -8
  71. package/src/builder/routes.ts +30 -27
  72. package/src/builder/search.ts +14 -13
  73. package/src/builder/static-files.ts +31 -32
  74. package/src/builder/subscriptions.ts +47 -45
  75. package/src/builder/supporting.ts +23 -18
  76. package/src/builder/team.ts +179 -179
  77. package/src/builder/telemetry.ts +59 -62
  78. package/src/builder/templates.ts +66 -65
  79. package/src/builder/themeroller.ts +60 -63
  80. package/src/builder/ui-defaults.ts +21 -20
  81. package/src/builder/ui.ts +2 -1
  82. package/src/builder/upgrade.ts +25 -24
  83. package/src/builder/utilities.ts +48 -47
  84. package/src/builder/vector-providers.ts +67 -66
  85. package/src/builder/websources.ts +43 -42
  86. package/src/builder/wizards.ts +95 -89
  87. package/src/builder/workflow-migrate.ts +30 -31
  88. package/src/builder/workflows.ts +40 -39
  89. package/src/builder/workingcopies.ts +41 -49
  90. package/src/builder/workspace-backups.ts +21 -20
  91. package/src/builder/workspace-mail.ts +17 -16
  92. package/src/builder/workspace-resources.ts +104 -112
  93. package/src/builder/workspace-transfer.ts +34 -26
  94. package/src/cli/replace.ts +2 -0
  95. package/src/i18n/ar.ts +9 -0
  96. package/src/i18n/cs.ts +9 -0
  97. package/src/i18n/da.ts +9 -0
  98. package/src/i18n/de.ts +9 -0
  99. package/src/i18n/el.ts +9 -0
  100. package/src/i18n/es.ts +9 -0
  101. package/src/i18n/fi.ts +9 -0
  102. package/src/i18n/fr.ts +9 -0
  103. package/src/i18n/he.ts +9 -0
  104. package/src/i18n/it.ts +9 -0
  105. package/src/i18n/ja.ts +9 -0
  106. package/src/i18n/ko.ts +9 -0
  107. package/src/i18n/nb.ts +9 -0
  108. package/src/i18n/pl.ts +9 -0
  109. package/src/i18n/pt.ts +9 -0
  110. package/src/i18n/ru.ts +9 -0
  111. package/src/i18n/sv.ts +9 -0
  112. package/src/i18n/tr.ts +9 -0
  113. package/src/i18n/uk.ts +9 -0
  114. package/src/i18n/zh.ts +9 -0
  115. package/src/i18n.ts +18 -0
  116. package/src/metadata.ts +9 -3
  117. package/src/runtime/engine.ts +2 -1
  118. package/src/runtime/feedback.ts +1 -1
  119. package/src/runtime/lists.ts +43 -11
  120. package/src/runtime/notifications.ts +237 -0
  121. package/src/runtime/processes.ts +45 -1
  122. package/src/runtime/regions.ts +11 -15
  123. package/src/runtime/render.ts +12 -3
  124. package/src/runtime/routes.ts +12 -4
  125. package/src/runtime/signin.ts +2 -1
  126. package/src/session.ts +13 -4
@@ -4049,4 +4049,3465 @@ export const fr: BuilderMessages = {
4049
4049
  'docv.view': 'Vue',
4050
4050
  'docv.doc_column': 'Colonne document',
4051
4051
  'docv.intro': 'Une vue document montre chaque ligne de {table} avec ses lignes enfants comme un seul document JSON, comme une JSON Relational Duality View d\'Oracle. Les rapports, REST (AutoREST sur la vue) et MCP lisent des documents entiers ; un update de la colonne document réécrit la ligne et ses enfants en une instruction. La sécurité au niveau des lignes et les droits de la table s\'appliquent (la vue est security_invoker et reçoit les droits de la table).',
4052
+ // ------------------------------------------------------------ Team Development (sprint 164)
4053
+ 'tm.team_development': 'Développement d\'équipe',
4054
+ 'tm.you_are_not_a_developer': 'Vous n\'êtes développeur d\'aucun espace de travail : le Développement d\'équipe appartient à un espace de travail.',
4055
+ 'tm.search': 'Rechercher',
4056
+ 'tm.clear': 'Effacer',
4057
+ 'tm.title': 'Titre',
4058
+ 'tm.description': 'Description',
4059
+ 'tm.milestone': 'Jalon',
4060
+ 'tm.application': 'Application',
4061
+ 'tm.page_number': 'Numéro de page',
4062
+ 'tm.a_page_of_the_application': 'Une page de l\'application.',
4063
+ 'tm.labels': 'Étiquettes',
4064
+ 'tm.set_up_team_development': 'configurer le Développement d\'équipe',
4065
+ 'tm.add_labels': 'ajouter des étiquettes',
4066
+ 'tm.assignees': 'Responsables',
4067
+ 'tm.set_up_team_development_2': 'Configurer le Développement d\'équipe',
4068
+ 'tm.mentions_of_you': 'Mentions de vous',
4069
+ 'tm.nobody_mentioned_you_in_an': 'Personne ne vous a mentionné dans un commentaire non lu.',
4070
+ 'tm.saved_views': 'Vues enregistrées',
4071
+ 'tm.save_the_filters_you_use': 'Enregistrez les filtres que vous utilisez souvent.',
4072
+ 'tm.name_of_the_view': 'Nom de la vue',
4073
+ 'tm.quick_filters': 'Filtres rapides',
4074
+ 'tm.assigned_to_me': 'Assignées à moi',
4075
+ 'tm.not_assigned': 'Non assignées',
4076
+ 'tm.closed': 'Fermées',
4077
+ 'tm.board_by_label': 'Tableau par étiquette',
4078
+ 'tm.board_by_milestone': 'Tableau par jalon',
4079
+ 'tm.move': 'Déplacer',
4080
+ 'tm.no_issues': 'Aucun ticket.',
4081
+ 'tm.start_from_a_template': 'Partir d\'un modèle',
4082
+ 'tm.use_template': 'Utiliser le modèle',
4083
+ 'tm.create_issue': 'Créer le ticket',
4084
+ 'tm.cancel': 'Annuler',
4085
+ 'tm.no_description': 'Pas de description.',
4086
+ 'tm.activity': 'Activité',
4087
+ 'tm.canned_response': 'Réponse type',
4088
+ 'tm.insert': 'Insérer',
4089
+ 'tm.add_a_comment': 'Ajouter un commentaire',
4090
+ 'tm.markdown_name_mentions_a_developer': 'Markdown ; @nom mentionne un développeur de cet espace de travail.',
4091
+ 'tm.comment': 'Commenter',
4092
+ 'tm.status': 'Statut',
4093
+ 'tm.none': 'Aucune',
4094
+ 'tm.nobody': 'Personne',
4095
+ 'tm.from_feedback': 'Depuis un retour',
4096
+ 'tm.from_a_developer_comment': 'Depuis un commentaire de développeur',
4097
+ 'tm.delete': 'Supprimer',
4098
+ 'tm.save': 'Enregistrer',
4099
+ 'tm.name': 'Nom',
4100
+ 'tm.colour': 'Couleur',
4101
+ 'tm.group': 'Groupe',
4102
+ 'tm.edit': 'Modifier',
4103
+ 'tm.no_labels_in_this_group': 'Aucune étiquette dans ce groupe.',
4104
+ 'tm.delete_group': 'Supprimer le groupe',
4105
+ 'tm.add_group': 'Ajouter le groupe',
4106
+ 'tm.the_board_groups_issues_by': 'Le tableau regroupe les tickets par les étiquettes d\'un groupe. Seuls les administrateurs de l\'espace de travail suppriment étiquettes et groupes.',
4107
+ 'tm.due': 'Échéance',
4108
+ 'tm.no_milestones_yet': 'Aucun jalon pour l\'instant.',
4109
+ 'tm.kind': 'Type',
4110
+ 'tm.issue_title': 'Titre du ticket',
4111
+ 'tm.issue_templates_only': 'Modèles de ticket uniquement.',
4112
+ 'tm.issue_templates_label_names_separated': 'Modèles de ticket : noms d\'étiquettes séparés par des virgules.',
4113
+ 'tm.text': 'Texte',
4114
+ 'tm.markdown': 'Markdown.',
4115
+ 'tm.use': 'Utiliser',
4116
+ 'tm.none_yet': 'Aucun pour l\'instant.',
4117
+ 'tm.language': 'Langue',
4118
+ 'tm.install': 'Installer',
4119
+ 'tm.set_up': 'Configurer',
4120
+ 'tm.new_issue': 'Nouveau ticket',
4121
+ 'tm.make_an_issue': 'En faire un ticket',
4122
+ 'tm.show': 'Afficher',
4123
+ 'tm.mark_all_as_seen': 'Tout marquer comme vu',
4124
+ 'tm.save_view': 'Enregistrer la vue',
4125
+ 'tm.label': 'Étiquette',
4126
+ 'tm.delete_issue': 'Supprimer le ticket',
4127
+ 'tm.edit_the_issue': 'Modifier le ticket',
4128
+ 'tm.delete_label': 'Supprimer l\'étiquette',
4129
+ 'tm.delete_milestone': 'Supprimer le jalon',
4130
+ 'tm.delete_template': 'Supprimer le modèle',
4131
+ 'tm.filter_the_issues': 'Filtrer les tickets',
4132
+ 'tm.title_text_or_number': 'Titre, texte ou #numéro',
4133
+ 'tm.name_of_this_view': 'Nom de cette vue',
4134
+ 'tm.label_group': 'Groupe d\'étiquettes',
4135
+ 'tm.group_the_board_by': 'Regrouper le tableau par',
4136
+ 'tm.e_g_area': 'p. ex. Domaine',
4137
+ 'tm.open_issues_of_this_page': 'Tickets ouverts de cette page',
4138
+ 'tm.issue_saved': 'Ticket enregistré.',
4139
+ 'tm.a_comment_has_1_to': 'Un commentaire fait 1 à 20000 caractères.',
4140
+ 'tm.comment_added': 'Commentaire ajouté.',
4141
+ 'tm.a_view_has_a_name': 'Une vue a un nom de 1 à 40 caractères.',
4142
+ 'tm.view_deleted': 'Vue supprimée.',
4143
+ 'tm.mentions_marked_as_seen': 'Mentions marquées comme vues.',
4144
+ 'tm.a_label_has_a_name': 'Une étiquette a un nom de 1 à 40 caractères.',
4145
+ 'tm.a_group_has_a_name': 'Un groupe a un nom de 1 à 40 caractères.',
4146
+ 'tm.a_milestone_has_a_name': 'Un jalon a un nom de 1 à 40 caractères et une date facultative.',
4147
+ 'tm.a_template_has_a_name': 'Un modèle a un nom de 1 à 60 caractères et jusqu\'à 20000 caractères de texte.',
4148
+ 'tm.template_deleted': 'Le modèle est supprimé.',
4149
+ 'tm.an_issue_needs_a_title': 'Un ticket a besoin d\'un titre.',
4150
+ 'tm.the_title_is_at_most': 'Le titre fait au plus 200 caractères.',
4151
+ 'tm.the_text_is_at_most': 'Le texte fait au plus 20000 caractères.',
4152
+ 'tm.unknown_label': 'Étiquette inconnue.',
4153
+ 'tm.unknown_milestone': 'Jalon inconnu.',
4154
+ 'tm.assignees_are_developers_of_this': 'Les responsables sont des développeurs de cet espace de travail.',
4155
+ 'tm.the_application_is_not_one': 'L\'application n\'appartient pas à cet espace de travail.',
4156
+ 'tm.the_page_is_a_page': 'La page est un numéro de page.',
4157
+ 'tm.choose_the_application_of_the': 'Choisissez l\'application de la page.',
4158
+ 'tm.add_a_label': 'Ajouter une étiquette',
4159
+ 'tm.add_a_label_group': 'Ajouter un groupe d\'étiquettes',
4160
+ 'tm.milestones': 'Jalons',
4161
+ 'tm.add_a_milestone': 'Ajouter un jalon',
4162
+ 'tm.issue_templates': 'Modèles de ticket',
4163
+ 'tm.canned_responses': 'Réponses types',
4164
+ 'tm.add_a_template': 'Ajouter un modèle',
4165
+ 'tm.board': 'Tableau',
4166
+ 'tm.templates': 'Modèles',
4167
+ 'tm.counts_open': '{n} tickets ouverts',
4168
+ 'tm.counts_open_1': '1 ticket ouvert',
4169
+ 'tm.counts_mine': '{n} assignés à vous',
4170
+ 'tm.counts_mentions': '{n} mentions de vous',
4171
+ 'tm.counts_mentions_1': '1 mention de vous',
4172
+ 'tm.tab.issues': 'Tickets',
4173
+ 'tm.tab.board': 'Tableau',
4174
+ 'tm.tab.labels': 'Étiquettes',
4175
+ 'tm.tab.milestones': 'Jalons',
4176
+ 'tm.tab.templates': 'Modèles',
4177
+ 'tm.tab.setup': 'Configurer',
4178
+ 'tm.body_help': 'Markdown : titres, listes, `code`, liens. Mentionnez un développeur avec @nom : il le voit dans Développement d\'équipe.',
4179
+ 'tm.no_labels_or': 'Aucune étiquette pour l\'instant : {setup} ou {add}.',
4180
+ 'tm.no_labels': 'Aucune étiquette pour l\'instant : {setup}.',
4181
+ 'tm.new_here': 'Nouveau ici ? {setup} : étiquettes d\'exemple (Bug, Feature, Task ; priorités), modèles et jalons.',
4182
+ 'tm.blank_issue': 'Ticket vide',
4183
+ 'tm.status_closed': 'Fermé',
4184
+ 'tm.status_open': 'Ouvert',
4185
+ 'tm.comment_reopen': 'Commenter et rouvrir',
4186
+ 'tm.comment_close': 'Commenter et fermer',
4187
+ 'tm.reopen_issue': 'Rouvrir le ticket',
4188
+ 'tm.close_issue': 'Fermer le ticket',
4189
+ 'tm.add_label': 'Ajouter l\'étiquette',
4190
+ 'tm.labels_no_group': 'Étiquettes sans groupe',
4191
+ 'tm.delete_label_confirm': 'Supprimer l\'étiquette {name} ? Les tickets la perdent.',
4192
+ 'tm.delete_group_confirm': 'Supprimer le groupe {name} ? Ses étiquettes restent, sans groupe.',
4193
+ 'tm.add_milestone': 'Ajouter le jalon',
4194
+ 'tm.kind_issue': 'Modèle de ticket',
4195
+ 'tm.kind_response': 'Réponse type',
4196
+ 'tm.add_template': 'Ajouter le modèle',
4197
+ 'tm.page_issues': '{n} tickets ouverts :',
4198
+ 'tm.page_issues_1': '1 ticket ouvert :',
4199
+ 'tm.all_n': 'les {n}',
4200
+ 'tm.no_page': 'L\'application n\'a pas de page {page}.',
4201
+ 'tm.created': 'Ticket #{id} créé.',
4202
+ 'tm.reopened': 'Ticket #{id} rouvert.',
4203
+ 'tm.deleted': 'Ticket #{id} supprimé.',
4204
+ 'tm.view_saved': 'Vue {name} enregistrée.',
4205
+ 'tm.label_saved': 'Étiquette {name} enregistrée.',
4206
+ 'tm.group_added': 'Groupe {name} ajouté.',
4207
+ 'tm.group_exists': 'Un groupe {name} existe déjà.',
4208
+ 'tm.label_deleted': 'L\'étiquette est supprimée.',
4209
+ 'tm.group_deleted': 'Le groupe d\'étiquettes est supprimé.',
4210
+ 'tm.milestone_deleted': 'Le jalon est supprimé.',
4211
+ 'tm.milestone_saved': 'Jalon {name} enregistré.',
4212
+ 'tm.template_saved': 'Modèle {name} enregistré.',
4213
+ 'tm.setup_done': 'Configuré : {groups} groupe(s) d\'étiquettes, {labels} étiquette(s), {templates} modèle(s) et {milestones} jalon(s) ajoutés.',
4214
+ 'tm.created_feedback': 'Ticket #{id} créé à partir du retour.',
4215
+ 'tm.created_comment': 'Ticket #{id} créé à partir du commentaire.',
4216
+ 'tm.no_milestone': 'Aucun jalon',
4217
+ 'tm.none_of_these': 'Aucune de celles-ci',
4218
+ 'tm.other_labels': 'Autres étiquettes',
4219
+ 'tm.setup_intro': 'Installe des données d\'exemple pour {workspace} ; ce qui existe déjà (par nom) est conservé, vous pouvez donc le relancer.',
4220
+ 'tm.this_workspace': 'cet espace de travail',
4221
+ 'tm.setup_labels': 'Groupes d\'étiquettes et étiquettes : {list}',
4222
+ 'tm.setup_templates': 'Modèles : {list} ; réponses types ({n})',
4223
+ 'tm.setup_milestones': 'Jalons : {list}',
4224
+ 'tm.issue_closed': 'Ticket #{id} fermé.',
4225
+ // ------------------------------------------------------------ Mail services (sprint 164)
4226
+ 'ml.only_with_sign_in_oauth2': '(uniquement avec Connexion : OAuth2)',
4227
+ 'ml.advanced': 'Avancé',
4228
+ 'ml.choose_another_provider': 'Choisir un autre fournisseur',
4229
+ 'ml.queued_utc': 'Mis en file (UTC)',
4230
+ 'ml.application': 'Application',
4231
+ 'ml.to': 'À',
4232
+ 'ml.subject': 'Objet',
4233
+ 'ml.from': 'De',
4234
+ 'ml.attempts': 'Tentatives',
4235
+ 'ml.status': 'Statut',
4236
+ 'ml.actions': 'Actions',
4237
+ 'ml.no_mail_yet': 'Aucun e-mail pour l\'instant.',
4238
+ 'ml.only_administrators_configure_mail_services': 'Seuls les administrateurs configurent les services de messagerie.',
4239
+ 'ml.mail_services': 'Services de messagerie',
4240
+ 'ml.send_e_mail': 'Envoyer un e-mail',
4241
+ 'ml.service': 'Service',
4242
+ 'ml.provider': 'Fournisseur',
4243
+ 'ml.senders': 'Expéditeurs',
4244
+ 'ml.secret': 'Secret',
4245
+ 'ml.applications': 'Applications',
4246
+ 'ml.its_applications_without_a_service': 'ses applications sans service propre',
4247
+ 'ml.no_mail_services_yet': 'Aucun service de messagerie pour l\'instant.',
4248
+ 'ml.add_a_mail_service': 'Ajouter un service de messagerie',
4249
+ 'ml.step_1_of_2_how': 'Étape 1 sur 2 : comment les applications doivent-elles envoyer les e-mails ?',
4250
+ 'ml.change': 'Changer',
4251
+ 'ml.delete_service': 'Supprimer le service',
4252
+ 'ml.the_applications_that_send_through': 'Les applications qui envoient via ce service (chaque application en a un), leur adresse d\'expéditeur (vide : celle par défaut du service) et une limite par jour (UTC ; vide : aucune). Une application avec un autre service l\'affiche.',
4253
+ 'ml.sends_through_this_service': 'Envoie via ce service',
4254
+ 'ml.from_address': 'Adresse d\'expéditeur',
4255
+ 'ml.mails_per_day': 'E-mails par jour',
4256
+ 'ml.no_applications': 'Aucune application.',
4257
+ 'ml.save': 'Enregistrer',
4258
+ 'ml.send_again': 'Renvoyer',
4259
+ 'ml.cancel': 'Annuler',
4260
+ 'ml.no_from_address': 'aucune adresse d\'expéditeur',
4261
+ 'ml.it_may_not_send_mail': 'Elle ne peut pas encore envoyer d\'e-mails',
4262
+ 'ml.show': 'Afficher',
4263
+ 'ml.find_my_workspace': 'Trouver mon espace de travail',
4264
+ 'ml.test_connection': 'Tester la connexion',
4265
+ 'ml.send_test_mail': 'Envoyer un e-mail de test',
4266
+ 'ml.add_service': 'Ajouter le service',
4267
+ 'ml.tenant_id_microsoft_entra': 'ID du locataire (Microsoft Entra)',
4268
+ 'ml.client_application_id': 'ID client (application)',
4269
+ 'ml.token_url': 'URL du jeton',
4270
+ 'ml.scope': 'Portée',
4271
+ 'ml.host': 'Hôte',
4272
+ 'ml.port': 'Port',
4273
+ 'ml.security': 'Sécurité',
4274
+ 'ml.sign_in': 'Connexion',
4275
+ 'ml.user_name': 'Nom d\'utilisateur',
4276
+ 'ml.check_the_server_s_certificate': 'Vérifier le certificat du serveur',
4277
+ 'ml.keep_a_copy_in_the': 'Garder une copie dans les Éléments envoyés de la boîte',
4278
+ 'ml.aws_region': 'Région AWS',
4279
+ 'ml.access_key_id': 'ID de clé d\'accès',
4280
+ 'ml.sending_domain': 'Domaine d\'envoi',
4281
+ 'ml.region': 'Région',
4282
+ 'ml.message_stream': 'Flux de messages',
4283
+ 'ml.remove_the_stored_secret': 'Retirer le secret enregistré',
4284
+ 'ml.name': 'Nom',
4285
+ 'ml.description': 'Description',
4286
+ 'ml.enabled': 'Activé',
4287
+ 'ml.allowed_senders': 'Expéditeurs autorisés',
4288
+ 'ml.default_from_address': 'Adresse d\'expéditeur par défaut',
4289
+ 'ml.api_base_url': 'URL de base de l\'API',
4290
+ 'ml.send_a_test_mail_to': 'Envoyer un e-mail de test à',
4291
+ 'ml.smtp_server': 'Serveur SMTP',
4292
+ 'ml.microsoft_entra_application': 'Application Microsoft Entra',
4293
+ 'ml.amazon_ses': 'Amazon SES',
4294
+ 'ml.mailgun': 'Mailgun',
4295
+ 'ml.postmark': 'Postmark',
4296
+ 'ml.check_before_saving': 'Vérifier avant d\'enregistrer',
4297
+ 'ml.contoso_onmicrosoft_com_or_its': 'contoso.onmicrosoft.com ou son GUID',
4298
+ 'ml.empty_microsoft_entra_of_the': 'vide : Microsoft Entra du locataire',
4299
+ 'ml.another_identity_provider_s_token': 'Le point de terminaison de jeton d\'un autre fournisseur d\'identité (octroi client credentials), p. ex. celui de Google.',
4300
+ 'ml.empty_587_starttls_or_465': 'Vide : 587 (STARTTLS) ou 465 (TLS).',
4301
+ 'ml.the_mailbox_e_g_noreply': 'la boîte, p. ex. noreply@example.com',
4302
+ 'ml.eu_west_1': 'eu-west-1',
4303
+ 'ml.e_g_office365': 'p. ex. OFFICE365',
4304
+ 'ml.upper_case_letters_digits_and': 'Lettres majuscules, chiffres et _.',
4305
+ 'ml.noreply_example_com_example_com': 'noreply@example.com, @example.com',
4306
+ 'ml.the_from_addresses_this_service': 'Les adresses d\'expéditeur que ce service peut utiliser : une adresse, ou @domaine pour toutes les adresses d\'un domaine (le fournisseur doit aussi les accepter).',
4307
+ 'ml.noreply_example_com': 'noreply@example.com',
4308
+ 'ml.for_applications_that_set_none': 'Pour les applications qui n\'en définissent pas.',
4309
+ 'ml.empty_the_provider_s_own': 'vide : l\'API du fournisseur',
4310
+ 'ml.a_gateway_or_proxy_that': 'Une passerelle ou un proxy qui parle l\'API du fournisseur. Administrateurs uniquement.',
4311
+ 'ml.you_example_com': 'vous@example.com',
4312
+ 'ml.one_of_the_allowed_senders': 'L\'un des expéditeurs autorisés.',
4313
+ 'ml.pgkiln_example_com': 'pgkiln@example.com',
4314
+ 'ml.one_of_the_service_s': 'L\'un des expéditeurs du service.',
4315
+ 'ml.any_smtp_server_or_relay': 'Tout serveur ou relais SMTP. Connexion par mot de passe ou avec OAuth2 (Exchange Online, Google Workspace).',
4316
+ 'ml.microsoft_365_through_the_graph': 'Microsoft 365 via l\'API Graph, comme application Entra avec Mail.Send.',
4317
+ 'ml.amazon_simple_email_service_api': 'Amazon Simple Email Service (API v2), avec une clé d\'accès IAM.',
4318
+ 'ml.resend_s_http_api_with': 'L\'API HTTP de Resend, avec une clé d\'API.',
4319
+ 'ml.postmark_s_http_api_with': 'L\'API HTTP de Postmark, avec un jeton de serveur.',
4320
+ 'ml.sendgrid_s_http_api_with': 'L\'API HTTP de SendGrid, avec une clé d\'API.',
4321
+ 'ml.mailgun_s_http_api_with': 'L\'API HTTP de Mailgun, avec une clé d\'API et un domaine d\'envoi.',
4322
+ 'ml.for_development_and_demos_the': 'Pour le développement et les démos : le serveur écrit chaque e-mail dans son journal et n\'envoie rien.',
4323
+ 'ml.starttls_required': 'STARTTLS (obligatoire)',
4324
+ 'ml.tls_from_the_start_port': 'TLS dès le départ (port 465)',
4325
+ 'ml.none_a_local_relay_only': 'Aucune (un relais local uniquement)',
4326
+ 'ml.user_name_and_password': 'Nom d\'utilisateur et mot de passe',
4327
+ 'ml.oauth2_xoauth2_client_credentials': 'OAuth2 (XOAUTH2, client credentials)',
4328
+ 'ml.none': 'Aucun',
4329
+ 'ml.all': 'Tous',
4330
+ 'ml.queued': 'En file d\'attente',
4331
+ 'ml.sending': 'En cours d\'envoi',
4332
+ 'ml.sent': 'Envoyé',
4333
+ 'ml.error': 'Erreur',
4334
+ 'ml.cancelled': 'Annulé',
4335
+ 'ml.password_or_the_client_secret': 'Mot de passe ou secret client (OAuth2)',
4336
+ 'ml.client_secret': 'Secret client',
4337
+ 'ml.secret_access_key': 'Clé d\'accès secrète',
4338
+ 'ml.server_token': 'Jeton de serveur',
4339
+ 'ml.secret_not_used': 'Secret (non utilisé)',
4340
+ 'ml.stored_encrypted_never_shown_again': 'Stocké chiffré ; jamais réaffiché.',
4341
+ 'ml.the_check_failed': 'La vérification a échoué.',
4342
+ 'ml.builder_mail_saved_find_my': 'Messagerie du builder enregistrée : « Trouver mon espace de travail » envoie par elle.',
4343
+ 'ml.the_builder_sends_no_mail': 'Le builder n\'envoie plus d\'e-mails.',
4344
+ 'ml.not_saved_yet_fill_in': 'Pas encore enregistré : remplissez les paramètres ci-dessous et enregistrez pour changer.',
4345
+ 'ml.add': 'Ajouter',
4346
+ 'ml.the_mail_is_queued_again': 'L\'e-mail est remis en file d\'attente.',
4347
+ 'ml.the_mail_is_cancelled': 'L\'e-mail est annulé.',
4348
+ 'ml.the_mail_has_changed_meanwhile': 'L\'e-mail a changé entre-temps.',
4349
+ 'ml.switch_off_only_for_a': 'À désactiver uniquement pour un relais avec un certificat auto-signé sur votre propre réseau.',
4350
+ 'ml.mail_service_added_choose_the': 'Service de messagerie ajouté. Choisissez ci-dessous les applications qui envoient par lui, et testez-le.',
4351
+ 'ml.mail_service_saved': 'Service de messagerie enregistré.',
4352
+ 'ml.applications_saved': 'Applications enregistrées.',
4353
+ 'ml.mail_service_deleted': 'Service de messagerie supprimé.',
4354
+ 'ml.name_at_least_one_allowed': 'Indiquez au moins un expéditeur autorisé (une adresse ou @domaine).',
4355
+ 'ml.the_default_from_address_must': 'L\'adresse d\'expéditeur par défaut doit être une adresse que le service peut utiliser.',
4356
+ 'ml.choose_one_of_the_mail': 'Choisissez l\'un des services de messagerie.',
4357
+ 'ml.the_from_address_is_an': 'L\'adresse d\'expéditeur est une adresse e-mail, p. ex. pgkiln@example.com.',
4358
+ 'ml.the_name_is_upper_case': 'Le nom est en lettres majuscules, chiffres et _ (p. ex. OFFICE365).',
4359
+ 'ml.not_found': 'Introuvable.',
4360
+ 'ml.mails_per_day_a_whole': 'E-mails par jour : un nombre entier de 0 ou plus (vide : aucune limite).',
4361
+ 'ml.services': 'Services',
4362
+ 'ml.recent_mail': 'E-mails récents',
4363
+ 'ml.settings': 'Paramètres',
4364
+ 'ml.mail': 'E-mail',
4365
+ 'ml.builder_mail': 'Messagerie du builder',
4366
+ 'ml.mail_service': 'Service de messagerie',
4367
+ 'ml.app_builder': 'App Builder',
4368
+ 'ml.workspace_utilities': 'Utilitaires de l\'espace de travail',
4369
+ 'ml.activity': 'Activité',
4370
+ 'ml.api_key': 'Clé d\'API',
4371
+ 'ml.no_secret_key': 'Le serveur n\'a pas de `PGKILN_SECRET_KEY` : les secrets ne peuvent pas être stockés tant qu\'elle n\'est pas définie.',
4372
+ 'ml.check_help': 'Utilise les paramètres ci-dessus tels qu\'ils sont remplis, sans les enregistrer. Tester la connexion se connecte (SMTP) ou fait un appel en lecture seule avec la clé ; un e-mail de test est réellement envoyé.',
4373
+ 'ml.check_help_secret': 'Utilise les paramètres ci-dessus tels qu\'ils sont remplis, sans les enregistrer. Un champ secret vide utilise le secret enregistré. Tester la connexion se connecte (SMTP) ou fait un appel en lecture seule avec la clé ; un e-mail de test est réellement envoyé.',
4374
+ 'ml.secret_unreadable': 'Le secret enregistré ne peut pas être lu : {error}',
4375
+ 'ml.test_to_missing': 'Indiquez l\'adresse à laquelle envoyer l\'e-mail de test.',
4376
+ 'ml.from_not_allowed': 'L\'adresse d\'expéditeur doit être l\'un des expéditeurs autorisés.',
4377
+ 'ml.test_handed': 'L\'e-mail de test a été remis à {provider}. Vérifiez la boîte de {to}.',
4378
+ 'ml.test_handed_id': 'L\'e-mail de test a été remis à {provider} (son id : {id}). Vérifiez la boîte de {to}.',
4379
+ 'ml.intro': 'Comment les applications de cette installation envoient des e-mails (`meta.send_mail()` depuis SQL, le processus {process}, les modèles d\'e-mail). Les e-mails sont mis en file dans la transaction de l\'application et envoyés par le serveur après le commit. Choisissez le service de chaque application sur la page du service.',
4380
+ 'ml.may_not_send_as': 'Le service {name} ne peut pas envoyer en tant que {from} : ajoutez-la d\'abord à ses expéditeurs.',
4381
+ 'ml.delete_confirm': 'Supprimer le service de messagerie {name} ? Ses applications ne pourront plus envoyer d\'e-mails jusqu\'à en avoir un autre.',
4382
+ 'ml.aria_from': 'Adresse d\'expéditeur pour {app}',
4383
+ 'ml.aria_max': 'E-mails par jour pour {app}',
4384
+ 'ml.queue_intro': 'Les e-mails mis en file par cette application (`meta.send_mail()`, le processus Envoyer un e-mail), conservés 30 jours.',
4385
+ 'ml.sends_through': 'Elle envoie via {service} ({provider}) en tant que {from} ; aujourd\'hui : {today}.',
4386
+ 'ml.sends_through_max': 'Elle envoie via {service} ({provider}) en tant que {from} ; aujourd\'hui : {today} sur {max}.',
4387
+ 'ml.disabled_l': 'désactivé',
4388
+ 'ml.no_service_admin': '{none} : un administrateur choisit son service de messagerie dans {link}.',
4389
+ 'ml.no_service': '{none} : un administrateur choisit son service de messagerie.',
4390
+ 'ml.mail_of': 'E-mail · {app}',
4391
+ 'ml.builder_intro': 'Le service par lequel le builder envoie lui-même : {find} sur la page de connexion envoie aux développeurs leurs espaces de travail (à l\'adresse de leur compte). Aucun : le builder n\'envoie pas d\'e-mails.',
4392
+ // ------------------------------------------------------------ Workspace mail service (sprint 164)
4393
+ 'wml.workspace_mail_service': 'Service de messagerie de l\'espace de travail',
4394
+ 'wml.only_the_workspace_s_administrators': 'Seuls les administrateurs de l\'espace de travail gèrent son service de messagerie.',
4395
+ 'wml.network_access': 'accès réseau',
4396
+ 'wml.change': 'Changer',
4397
+ 'wml.delete_service': 'Supprimer le service',
4398
+ 'wml.application': 'Application',
4399
+ 'wml.sends_through': 'Envoie via',
4400
+ 'wml.chosen_by_an_administrator': '(choisi par un administrateur)',
4401
+ 'wml.nothing_yet': 'rien pour l\'instant',
4402
+ 'wml.no_applications': 'Aucune application.',
4403
+ 'wml.delete_this_workspace_s_mail': 'Supprimer le service de messagerie de cet espace de travail ? Ses applications sans service propre ne pourront plus envoyer d\'e-mails.',
4404
+ 'wml.provider': 'Fournisseur',
4405
+ 'wml.not_saved_yet_fill_in': 'Pas encore enregistré : remplissez les paramètres ci-dessous et enregistrez pour changer.',
4406
+ 'wml.mail_service_saved': 'Service de messagerie enregistré.',
4407
+ 'wml.mail_service_added_send_a': 'Service de messagerie ajouté : envoyez un e-mail de test pour le vérifier.',
4408
+ 'wml.mail_service_deleted': 'Service de messagerie supprimé.',
4409
+ 'wml.there_was_no_mail_service': 'Il n\'y avait pas de service de messagerie.',
4410
+ 'wml.settings': 'Paramètres',
4411
+ 'wml.applications': 'Applications',
4412
+ 'wml.administration': 'Administration',
4413
+ 'wml.mail_service': 'Service de messagerie',
4414
+ 'wml.title': 'Service de messagerie · {workspace}',
4415
+ 'wml.intro': 'Le service de messagerie propre à cet espace de travail : ses applications auxquelles un administrateur n\'a pas donné de service propre envoient par lui ({fn}, le processus Envoyer un e-mail). Le secret est stocké chiffré et jamais réaffiché. Il utilise l\'API du fournisseur ; un serveur SMTP doit figurer dans la liste autorisée de l\'installation et dans la liste {network} de cet espace de travail.',
4416
+ // ------------------------------------------------------------ Data Reporter datasets (sprint 164)
4417
+ 'dts.data_reporter': 'Data Reporter',
4418
+ 'dts.dataset': 'Jeu de données',
4419
+ 'dts.schema': 'Schéma',
4420
+ 'dts.tables_and_views': 'Tables et vues',
4421
+ 'dts.columns': 'Colonnes',
4422
+ 'dts.updated_utc': 'Modifié (UTC)',
4423
+ 'dts.actions': 'Actions',
4424
+ 'dts.no_datasets_yet_create_one': 'Aucun jeu de données pour l\'instant : créez-en un sur les tables et vues d\'un schéma, ou importez un fichier de jeu de données.',
4425
+ 'dts.application': 'Application',
4426
+ 'dts.datasets': 'Jeux de données',
4427
+ 'dts.users': 'Utilisateurs',
4428
+ 'dts.published_reports': 'Rapports publiés',
4429
+ 'dts.no_reporting_applications_yet_choose': 'Aucune application de rapports pour l\'instant : choisissez Créer une application de rapports sur un jeu de données.',
4430
+ 'dts.new_dataset': 'Nouveau jeu de données',
4431
+ 'dts.show_its_tables_and_views': 'Afficher ses tables et vues',
4432
+ 'dts.tables_and_views_the_first': 'Tables et vues (la première est la principale)',
4433
+ 'dts.the_schema_has_no_tables': 'Le schéma n\'a pas de tables ni de vues que vous pouvez utiliser.',
4434
+ 'dts.joins_are_proposed_from_foreign': 'Les jointures sont proposées à partir des clés étrangères ; au départ chaque colonne est proposée, libellée d\'après son nom. Vous changez tout cela à la page suivante.',
4435
+ 'dts.cancel': 'Annuler',
4436
+ 'dts.the_dataset_doesn_t_match': 'Le jeu de données ne correspond pas (plus) à la base de données :',
4437
+ 'dts.description_shown_to_users': 'Description (visible des utilisateurs)',
4438
+ 'dts.alias': 'Alias',
4439
+ 'dts.table_or_view': 'Table ou vue',
4440
+ 'dts.joins_to': 'Jointe à',
4441
+ 'dts.join': 'Jointure',
4442
+ 'dts.remove': 'Retirer',
4443
+ 'dts.the_main_table': 'la table principale',
4444
+ 'dts.add_a_table_or_view': 'Ajouter une table ou une vue',
4445
+ 'dts.joined_to': 'Jointe à',
4446
+ 'dts.on': 'Condition',
4447
+ 'dts.empty_proposed_from_a_foreign': 'Vide : proposé à partir d\'une clé étrangère.',
4448
+ 'dts.business_users_see_only_the': 'Les utilisateurs métier ne voient que les colonnes proposées, sous leurs libellés. Le nom est la façon dont les rapports désignent une colonne : le changer casse les rapports enregistrés qui l\'utilisent.',
4449
+ 'dts.offer': 'Proposer',
4450
+ 'dts.column': 'Colonne',
4451
+ 'dts.name': 'Nom',
4452
+ 'dts.label': 'Libellé',
4453
+ 'dts.format_mask': 'Masque de format',
4454
+ 'dts.description': 'Description',
4455
+ 'dts.only_rows_that_match_every': 'Seules les lignes qui remplissent toutes les conditions sont dans le jeu de données (en plus de la sécurité au niveau des lignes du rôle de l\'application).',
4456
+ 'dts.the_query_reports_run_on': 'La requête sur laquelle tournent les rapports (avec le rôle de l\'application). L\'aperçu l\'exécute en lecture seule via votre connexion SQL Workshop.',
4457
+ 'dts.no_rows': 'Aucune ligne.',
4458
+ 'dts.import_datasets': 'Importer des jeux de données',
4459
+ 'dts.file': 'Fichier',
4460
+ 'dts.or_paste_it': 'Ou collez-le',
4461
+ 'dts.replace_datasets_with_the_same': 'Remplacer les jeux de données de même nom',
4462
+ 'dts.create_a_reporting_application': 'Créer une application de rapports',
4463
+ 'dts.the_first_dataset_s_schema': 'Le schéma du premier jeu de données est le schéma d\'analyse de l\'application.',
4464
+ 'dts.import': 'Importer',
4465
+ 'dts.export_all': 'Tout exporter',
4466
+ 'dts.create_reporting_application': 'Créer une application de rapports',
4467
+ 'dts.run': 'Exécuter',
4468
+ 'dts.users_and_roles': 'Utilisateurs et rôles',
4469
+ 'dts.create_dataset': 'Créer le jeu de données',
4470
+ 'dts.download': 'Télécharger',
4471
+ 'dts.save_dataset': 'Enregistrer le jeu de données',
4472
+ 'dts.delete_dataset': 'Supprimer le jeu de données',
4473
+ 'dts.create': 'Créer',
4474
+ 'dts.from_a_foreign_key': 'à partir d\'une clé étrangère',
4475
+ 'dts.first_administrator': 'Premier administrateur',
4476
+ 'dts.password': 'Mot de passe',
4477
+ 'dts.e_g_sales': 'p. ex. sales',
4478
+ 'dts.lower_case_letters_digits_and': 'Lettres minuscules, chiffres et _ (40 au plus) : les rapports et fichiers l\'utilisent. Il ne peut pas être changé ensuite.',
4479
+ 'dts.e_g_sales_2': 'p. ex. Ventes',
4480
+ 'dts.what_business_users_see': 'Ce que voient les utilisateurs métier.',
4481
+ 'dts.its_address_a_alias_its': 'Son adresse : /a/<alias>. Son rôle de base de données est app_<alias>, qui ne peut que lire les tables et vues des jeux de données.',
4482
+ 'dts.an_account_of_the_user': 'Un compte de l\'annuaire des utilisateurs (les utilisateurs se connectent avec leurs comptes de l\'espace de travail).',
4483
+ 'dts.only_for_a_new_account': 'Uniquement pour un nouveau compte.',
4484
+ 'dts.the_dataset_offers_no_columns': 'Le jeu de données ne propose aucune colonne.',
4485
+ 'dts.no_reporting_application_uses_it': 'Aucune application de rapports ne l\'utilise.',
4486
+ 'dts.dataset_saved': 'Jeu de données enregistré.',
4487
+ 'dts.create_a_dataset_first': 'Créez d\'abord un jeu de données.',
4488
+ 'dts.reporting_applications': 'Applications de rapports',
4489
+ 'dts.1_schema': '1. Schéma',
4490
+ 'dts.2_tables_and_views': '2. Tables et vues',
4491
+ 'dts.row_filter': 'Filtre de lignes',
4492
+ 'dts.query_and_preview': 'Requête et aperçu',
4493
+ 'dts.delete': 'Supprimer',
4494
+ 'dts.a_dataset_file': 'Un fichier de jeu de données',
4495
+ 'dts.app_builder': 'App Builder',
4496
+ 'dts.choose_one_of_the_schemas': 'Choisissez l\'un des schémas de la liste.',
4497
+ 'dts.choose_at_least_one_table': 'Choisissez au moins une table ou une vue.',
4498
+ 'dts.roles_help': 'Rôles : {viewer} exécute les rapports publiés (tout utilisateur ayant accès), {editor} crée, enregistre, publie et dépublie aussi des rapports, {administrator} dépublie et supprime aussi ceux de n\'importe qui. Donnez accès et rôles aux comptes dans Utilisateurs et rôles.',
4499
+ 'dts.exists': 'Il existe déjà un jeu de données {name}.',
4500
+ 'dts.created': 'Jeu de données {name} créé : vérifiez ses colonnes et libellés.',
4501
+ 'dts.created_errors': 'Jeu de données {name} créé. {errors}',
4502
+ 'dts.on_header': 'Condition (colonne = sa colonne)',
4503
+ 'dts.join_left': 'Left (garder les lignes sans correspondance)',
4504
+ 'dts.join_inner': 'Inner (seulement les lignes correspondantes)',
4505
+ 'dts.aria_join_type': 'Type de jointure de {table}',
4506
+ 'dts.aria_join_cols': 'Colonnes de jointure de {table}',
4507
+ 'dts.aria_remove': 'Retirer {table}',
4508
+ 'dts.aria_offer': 'Proposer {column}',
4509
+ 'dts.aria_name': 'Nom de {column}',
4510
+ 'dts.aria_label': 'Libellé de {column}',
4511
+ 'dts.aria_format': 'Masque de format de {column}',
4512
+ 'dts.aria_desc': 'Description de {column}',
4513
+ 'dts.aria_filter_col': 'Filtre {n} : colonne',
4514
+ 'dts.aria_filter_op': 'Filtre {n} : opérateur',
4515
+ 'dts.aria_filter_value': 'Filtre {n} : valeur',
4516
+ 'dts.value': 'valeur',
4517
+ 'dts.none_opt': '- aucune -',
4518
+ 'dts.used_by': 'Les applications de rapports qui l\'utilisent ({apps}) perdent cette source de données : leurs rapports dessus cessent de fonctionner.',
4519
+ 'dts.delete_confirm': 'Supprimer le jeu de données {name} ?',
4520
+ 'dts.schema_refused': 'Votre connexion SQL Workshop ne peut pas utiliser le schéma {schema}.',
4521
+ 'dts.deleted': 'Jeu de données {name} supprimé.',
4522
+ 'dts.import_intro': 'Un fichier téléchargé depuis un Data Reporter (`*.dataset.json`, format pgkiln-dataset/1), avec un ou plusieurs jeux de données. Chacun est vérifié par rapport à la base de données de cette installation : son schéma, ses tables, vues et colonnes doivent exister ici.',
4523
+ 'dts.import_title': 'Importer des jeux de données',
4524
+ 'dts.too_large': 'Le fichier dépasse 2 Mo.',
4525
+ 'dts.no_file': 'Choisissez un fichier ou collez-en un.',
4526
+ 'dts.no_schema': 'Jeu de données {name} : le schéma « {schema} » n\'existe pas ici, ou votre connexion SQL Workshop ne peut pas l\'utiliser.',
4527
+ 'dts.import_errors': 'Jeu de données {name} : {errors}',
4528
+ 'dts.no_columns': 'il ne propose aucune colonne.',
4529
+ 'dts.nothing_imported': 'Rien n\'a été importé. {error}',
4530
+ 'dts.create_app_title': 'Créer une application de rapports',
4531
+ 'dts.choose_one': 'Choisissez au moins un jeu de données.',
4532
+ 'dts.choose_max': 'Choisissez au plus {n} jeux de données.',
4533
+ 'dts.app_created': 'Application de rapports {name} créée : exécutez-la à {path}, et donnez aux comptes l\'accès et les rôles viewer, editor ou administrator dans Utilisateurs et rôles.',
4534
+ 'dts.new_dataset_title': 'Nouveau jeu de données',
4535
+ // ------------------------------------------------------------ Team Development (2) (sprint 164)
4536
+ 'tm.changed_the_title': 'a modifié le titre',
4537
+ 'tm.problem': 'Problème',
4538
+ 'tm.idea': 'Idée',
4539
+ 'tm.feedback': 'Retour',
4540
+ 'tm.untitled': 'Sans titre',
4541
+ 'tm.ev.created': 'a créé le ticket',
4542
+ 'tm.ev.closed': 'a fermé le ticket',
4543
+ 'tm.ev.reopened': 'a rouvert le ticket',
4544
+ 'tm.ev.body': 'a modifié la description',
4545
+ 'tm.ev.labels': 'a modifié les étiquettes',
4546
+ 'tm.ev.assignees': 'a modifié les responsables',
4547
+ 'tm.ev.milestone': 'a défini le jalon',
4548
+ 'tm.ev.link': 'a lié',
4549
+ 'tm.ev.commented': 'a commenté',
4550
+ 'tm.someone': 'quelqu\'un',
4551
+ 'tm.f.status': 'Statut',
4552
+ 'tm.f.open': 'Ouverts',
4553
+ 'tm.f.all': 'Tous',
4554
+ 'tm.f.any': 'Indifférent',
4555
+ 'tm.f.assignee': 'Responsable',
4556
+ 'tm.f.anyone': 'N\'importe qui',
4557
+ 'tm.f.me': 'Moi',
4558
+ 'tm.delete_view_confirm': 'Supprimer la vue {name} ?',
4559
+ 'tm.delete_named': 'Supprimer {name}',
4560
+ 'tm.delete_issue_confirm': 'Supprimer le ticket #{id} avec ses commentaires et son historique ?',
4561
+ 'tm.delete_milestone_confirm': 'Supprimer le jalon {name} ? Ses tickets n\'ont plus de jalon.',
4562
+ 'tm.delete_template_confirm': 'Supprimer le modèle {name} ?',
4563
+ // ------------------------------------------------------------ REST data sources and web credentials (sprint 164)
4564
+ 'wsrc.secrets': 'Secrets',
4565
+ 'wsrc.a_secret_is_stored': 'Un secret est enregistré',
4566
+ 'wsrc.no_secret_yet': 'Pas encore de secret.',
4567
+ 'wsrc.a_password_is_stored': 'Un mot de passe est enregistré',
4568
+ 'wsrc.no_password_yet': 'Pas encore de mot de passe.',
4569
+ 'wsrc.a_refresh_token_is_stored': 'Un jeton d\'actualisation est enregistré',
4570
+ 'wsrc.no_refresh_token_yet': 'Pas encore de jeton d\'actualisation.',
4571
+ 'wsrc.synchronisation': 'Synchronisation',
4572
+ 'wsrc.set_a_local_table_above': 'Définissez une table locale ci-dessus pour copier les lignes de cette source dans une table (à la demande, depuis SQL ou selon une planification).',
4573
+ 'wsrc.the_scheduler_is_off_on': '(le planificateur est désactivé sur ce serveur : AUTOMATIONS=off)',
4574
+ 'wsrc.requested': 'Demandé',
4575
+ 'wsrc.took': 'Durée',
4576
+ 'wsrc.by': 'Par',
4577
+ 'wsrc.status': 'Statut',
4578
+ 'wsrc.rows': 'Lignes',
4579
+ 'wsrc.inserted': 'Insérées',
4580
+ 'wsrc.updated': 'Mises à jour',
4581
+ 'wsrc.deleted': 'Supprimées',
4582
+ 'wsrc.message': 'Message',
4583
+ 'wsrc.no_runs_yet': 'Aucune exécution pour l\'instant.',
4584
+ 'wsrc.test': 'Tester',
4585
+ 'wsrc.suggested_columns': 'Colonnes suggérées',
4586
+ 'wsrc.use_these_columns': 'Utiliser ces colonnes',
4587
+ 'wsrc.response': 'Réponse',
4588
+ 'wsrc.synchronise_now': 'Synchroniser maintenant',
4589
+ 'wsrc.the_secret': 'le secret',
4590
+ 'wsrc.the_password': 'le mot de passe',
4591
+ 'wsrc.the_refresh_token': 'le jeton d\'actualisation',
4592
+ 'wsrc.not_found': 'Introuvable.',
4593
+ 'wsrc.the_synchronisation_failed': 'La synchronisation a échoué.',
4594
+ 'wsrc.the_columns_are_not_valid': 'Les colonnes ne sont pas un JSON valide.',
4595
+ 'wsrc.columns_saved': 'Colonnes enregistrées.',
4596
+ 'wsrc.remove_confirm': 'Retirer {what} ?',
4597
+ 'wsrc.remove': 'Retirer {what}',
4598
+ 'wsrc.secret_stored': '{stored} (chiffré). Il n\'est jamais affiché ; saisissez-en un nouveau ci-dessus pour le remplacer.',
4599
+ 'wsrc.secret_missing': '{none} Les requêtes avec cet identifiant échouent tant qu\'aucun n\'est saisi.',
4600
+ 'wsrc.no_client_secret': 'Pas de secret client (un client public).',
4601
+ 'wsrc.password_stored': '{stored} (chiffré).',
4602
+ 'wsrc.password_missing': '{none} Le flux par mot de passe échoue tant qu\'aucun n\'est saisi.',
4603
+ 'wsrc.refresh_stored': '{stored} (chiffré). pgkiln l\'utilise pour renouveler le jeton d\'accès et garde le plus récent que le service envoie.',
4604
+ 'wsrc.refresh_stored_at': '{stored} (chiffré), reçu {at} UTC. pgkiln l\'utilise pour renouveler le jeton d\'accès et garde le plus récent que le service envoie.',
4605
+ 'wsrc.refresh_missing': '{none} Saisissez-en un ci-dessus.',
4606
+ 'wsrc.no_refresh': 'Pas encore de jeton d\'actualisation (conservé quand le point de terminaison de jeton en envoie un).',
4607
+ 'wsrc.no_secret_key': 'Le serveur n\'a pas de `PGKILN_SECRET_KEY` : les secrets ne peuvent être ni enregistrés ni utilisés tant qu\'elle n\'est pas définie (au moins 32 caractères).',
4608
+ 'wsrc.sync_into': 'Dans {table} ({mode}). Prochaine exécution : {next}',
4609
+ 'wsrc.deleting_missing': 'en supprimant les lignes manquantes',
4610
+ 'wsrc.sync_from_code': 'Depuis le code de l\'application : {call} met une exécution en file pour le prochain passage du planificateur.',
4611
+ 'wsrc.answered': 'Le service web a répondu {status}.',
4612
+ 'wsrc.the_source': 'La source',
4613
+ 'wsrc.synced': '{rows} ligne(s) synchronisée(s) : {inserted} insérée(s), {updated} mise(s) à jour, {deleted} supprimée(s).',
4614
+ // ------------------------------------------------------------ Workspace files, remote servers and web credentials (sprint 164)
4615
+ 'wres.you_are_not_a_developer': 'Vous n\'êtes encore développeur d\'aucun espace de travail.',
4616
+ 'wres.only_the_workspace_s_administrators': 'Seuls les administrateurs de l\'espace de travail les modifient.',
4617
+ 'wres.you_can_see_these_the': 'Vous pouvez les voir ; les administrateurs de l\'espace de travail les modifient.',
4618
+ 'wres.content': 'Contenu',
4619
+ 'wres.cancel': 'Annuler',
4620
+ 'wres.static_workspace_files': 'Fichiers statiques de l\'espace de travail',
4621
+ 'wres.name': 'Nom',
4622
+ 'wres.type': 'Type',
4623
+ 'wres.size': 'Taille',
4624
+ 'wres.loaded_by': 'Chargé par',
4625
+ 'wres.changed_utc': 'Modifié (UTC)',
4626
+ 'wres.actions': 'Actions',
4627
+ 'wres.edit': 'Modifier',
4628
+ 'wres.no_files_yet': 'Aucun fichier pour l\'instant.',
4629
+ 'wres.a_file_with_the_same': 'Un fichier de même nom est remplacé.',
4630
+ 'wres.not_a_valid_url': 'URL non valide',
4631
+ 'wres.may_be_called': 'peut être appelée',
4632
+ 'wres.description': 'Description',
4633
+ 'wres.delete_server': 'Supprimer le serveur',
4634
+ 'wres.remote_servers': 'Serveurs distants',
4635
+ 'wres.network_access': 'accès réseau',
4636
+ 'wres.server': 'Serveur',
4637
+ 'wres.url_now': 'URL actuelle',
4638
+ 'wres.network_access_2': 'Accès réseau',
4639
+ 'wres.default_credential': 'Identifiant par défaut',
4640
+ 'wres.used_by': 'Utilisé par',
4641
+ 'wres.nothing_yet': 'rien pour l\'instant',
4642
+ 'wres.no_remote_servers_yet': 'Aucun serveur distant pour l\'instant.',
4643
+ 'wres.delete_credential': 'Supprimer l\'identifiant',
4644
+ 'wres.workspace_web_credentials': 'Identifiants web de l\'espace de travail',
4645
+ 'wres.authentication': 'Authentification',
4646
+ 'wres.secret': 'Secret',
4647
+ 'wres.valid_for': 'Valable pour',
4648
+ 'wres.overridden_by': 'Remplacé par',
4649
+ 'wres.none_yet': 'aucun pour l\'instant',
4650
+ 'wres.any_url': 'toute URL',
4651
+ 'wres.no_workspace_web_credentials_yet': 'Aucun identifiant web d\'espace de travail pour l\'instant.',
4652
+ 'wres.save': 'Enregistrer',
4653
+ 'wres.new_file': 'Nouveau fichier',
4654
+ 'wres.upload': 'Téléverser',
4655
+ 'wres.new_server': 'Nouveau serveur',
4656
+ 'wres.new_credential': 'Nouvel identifiant',
4657
+ 'wres.changed': 'Modifié',
4658
+ 'wres.files_to_upload': 'Fichiers à téléverser',
4659
+ 'wres.file_name': 'Nom du fichier',
4660
+ 'wres.static_id': 'Id statique',
4661
+ 'wres.base_url_this_installation': 'URL de base (cette installation)',
4662
+ 'wres.or_from_the_environment_variable': 'Ou depuis la variable d\'environnement',
4663
+ 'wres.default_web_credential': 'Identifiant web par défaut',
4664
+ 'wres.user_name_client_id_access': 'Nom d\'utilisateur / id client / id de clé d\'accès',
4665
+ 'wres.grant_type_oauth2': 'Type d\'octroi (oauth2)',
4666
+ 'wres.oauth2_user_name_password_grant': 'Nom d\'utilisateur OAuth2 (octroi par mot de passe)',
4667
+ 'wres.header_name_header': 'Nom d\'en-tête (header)',
4668
+ 'wres.token_url_oauth2': 'URL du jeton (oauth2)',
4669
+ 'wres.scope_oauth2_region_aws_sigv4': 'Portée (oauth2) / région (aws_sigv4)',
4670
+ 'wres.valid_for_urls': 'Valable pour les URL',
4671
+ 'wres.letters_digits_and_e_g': 'Lettres, chiffres, _, - et . (p. ex. brand.css, common.js).',
4672
+ 'wres.upper_case_letters_digits_and': 'Lettres majuscules, chiffres et _ : les sources de données REST, catalogues et services IA désignent le serveur par ce nom. Le renommer déplace aussi les sources et catalogues de cet espace de travail.',
4673
+ 'wres.crm_system': 'Système CRM',
4674
+ 'wres.https_crm_example_com_api': 'https://crm.example.com/api',
4675
+ 'wres.no_trailing_slash_query_or': 'Pas de barre finale, de requête ni de fragment. Les sources ajoutent leur chemin après.',
4676
+ 'wres.e_g_crm_api': 'p. ex. CRM_API',
4677
+ 'wres.sources_on_this_server_that': 'Les sources de ce serveur qui ne désignent pas d\'identifiant propre utilisent celui-ci (l\'identifiant d\'une application portant ce nom, sinon celui de l\'espace de travail).',
4678
+ 'wres.the_applications_of_the_workspace': 'Les applications de l\'espace de travail l\'utilisent sous ce nom (l\'identifiant propre d\'une application de même nom l\'emporte).',
4679
+ 'wres.x_api_key': 'X-API-Key',
4680
+ 'wres.https_login_example_com_oauth': 'https://login.example.com/oauth/token',
4681
+ 'wres.https_crm_example_com_api_2': 'https://crm.example.com/api/',
4682
+ 'wres.comma_separated_url_prefixes_the': 'Préfixes d\'URL séparés par des virgules : l\'identifiant n\'est jamais envoyé qu\'à ceux-ci. Recommandé.',
4683
+ 'wres.new_remote_server': 'Nouveau serveur distant',
4684
+ 'wres.one_is_stored_encrypted_it': 'Un est enregistré (chiffré) : il n\'est jamais affiché ; saisissez-en un nouveau pour le remplacer.',
4685
+ 'wres.write_only_never_shown_again': 'Écriture seule : jamais réaffiché ni exporté.',
4686
+ 'wres.new_web_credential': 'Nouvel identifiant web',
4687
+ 'wres.no_such_file': 'Fichier introuvable.',
4688
+ 'wres.no_such_remote_server': 'Serveur distant introuvable.',
4689
+ 'wres.no_such_web_credential': 'Identifiant web introuvable.',
4690
+ 'wres.the_password_header_value_token': 'Le mot de passe, la valeur d\'en-tête, le jeton, le secret client ou la clé d\'accès secrète.',
4691
+ 'wres.the_password_grant_the_oauth2': 'L\'octroi par mot de passe : le mot de passe de l\'utilisateur OAuth2.',
4692
+ 'wres.the_refresh_token_grant_a': 'L\'octroi par jeton d\'actualisation : un jeton d\'actualisation pour commencer.',
4693
+ 'wres.choose_one_or_more_files': 'Choisissez un ou plusieurs fichiers.',
4694
+ 'wres.the_name_must_end_in': 'Le nom doit se terminer par un type texte (.js, .css, .json, .txt, .csv, .md, .map) et n\'utiliser que lettres, chiffres, _, - et ..',
4695
+ 'wres.files': 'Fichiers',
4696
+ 'wres.servers': 'Serveurs',
4697
+ 'wres.credentials': 'Identifiants',
4698
+ 'wres.app_builder': 'App Builder',
4699
+ 'wres.workspace_utilities': 'Utilitaires de l\'espace de travail',
4700
+ 'wres.the_name_is_upper_case': 'Le nom est en lettres majuscules, chiffres et _, commençant par une lettre, p. ex. CRM_API.',
4701
+ 'wres.server_title': 'Serveur distant {id}',
4702
+ 'wres.env_help': 'Quand l\'environnement du serveur la définit, elle l\'emporte sur l\'URL de base (une valeur par environnement : développement, test, production). Seulement des noms {prefix}….',
4703
+ 'wres.delete_server_confirm': 'Supprimer le serveur distant {id} ? Les sources qui l\'utilisent échouent tant qu\'un serveur ne reprend pas son id statique.',
4704
+ 'wres.servers_intro': 'URL de base nommées de {workspace} : une source de données REST, un catalogue de sources REST ou un service IA désigne un serveur et un chemin au lieu d\'une URL complète, donc passer du développement à la production change une valeur ici (ou une variable d\'environnement) et toutes les sources du serveur suivent aussitôt. L\'URL passe toujours toutes les vérifications d\'une URL complète : la liste autorisée de l\'installation, la liste {network} de cet espace de travail et les vérifications d\'adresse lors de l\'appel.',
4705
+ 'wres.credential_title': 'Identifiant web {name}',
4706
+ 'wres.no_secret_key': 'Le serveur n\'a pas de `PGKILN_SECRET_KEY` : les secrets ne peuvent pas être stockés tant qu\'elle n\'est pas définie.',
4707
+ 'wres.refresh_token': 'Jeton d\'actualisation',
4708
+ 'wres.delete_credential_confirm': 'Supprimer l\'identifiant web {name} ? Les applications qui l\'utilisent échouent tant qu\'il n\'en existe pas un de ce nom.',
4709
+ 'wres.files_title': 'Fichiers statiques de l\'espace de travail',
4710
+ 'wres.servers_title': 'Serveurs distants',
4711
+ 'wres.credentials_title': 'Identifiants web de l\'espace de travail',
4712
+ 'wres.too_large': 'Le fichier dépasse {size}.',
4713
+ 'wres.file_exists': 'Il existe déjà un fichier {name}.',
4714
+ 'wres.server_saved': 'Serveur distant {id} enregistré.',
4715
+ 'wres.server_exists': 'Cet espace de travail a déjà un serveur distant {id}.',
4716
+ 'wres.server_deleted': 'Serveur distant {id} supprimé.',
4717
+ 'wres.credential_saved': 'Identifiant web {name} enregistré.',
4718
+ 'wres.credential_exists': 'Cet espace de travail a déjà un identifiant web {name}.',
4719
+ 'wres.credential_deleted': 'Identifiant web {name} supprimé.',
4720
+ 'wres.files_intro': 'CSS, JavaScript, JSON, images et polices que toute application de {workspace} peut utiliser : une application en charge un sur chaque page avec {tag} dans Composants partagés → Fichiers statiques d\'application → Chaque page charge (une page : Page → Apparence), et les modèles, le HTML et les liens utilisent {sub} pour leur URL. Chaque application les sert depuis sa propre adresse ({path}), jamais ceux d\'un autre espace de travail. Jusqu\'à {size} par fichier ; pas de HTML. Ils voyagent avec l\'export de l\'espace de travail.',
4721
+ 'wres.type_help': 'basic : nom d\'utilisateur + mot de passe · header : un en-tête HTTP avec le secret (clé d\'API) · bearer : Authorization: Bearer <secret> · oauth2 : octroi client credentials, mot de passe ou jeton d\'actualisation · aws_sigv4 : un stockage d\'objets compatible S3.',
4722
+ 'wres.credentials_intro': 'Identifiants web de {workspace} que ses applications utilisent par leur nom dans les sources de données REST, le processus Appeler une API, les serveurs distants et le stockage d\'objets, si bien qu\'une clé est saisie une seule fois pour l\'espace de travail. L\'identifiant propre d\'une application (Composants partagés → Identifiants web) de même nom l\'emporte. Les secrets sont chiffrés avec la clé du serveur, jamais réaffichés ni exportés.',
4723
+ 'wres.edit_named': 'Modifier {name}',
4724
+ 'wres.delete_file_confirm': 'Supprimer {name} ? Les applications qui le chargent l\'omettent.',
4725
+ 'wres.delete_named': 'Supprimer {name}',
4726
+ // ------------------------------------------------------------ Template components (sprint 164)
4727
+ 'tpl.custom_attributes': 'Attributs personnalisés',
4728
+ 'tpl.name': 'Nom',
4729
+ 'tpl.label': 'Libellé',
4730
+ 'tpl.type': 'Type',
4731
+ 'tpl.default': 'Par défaut',
4732
+ 'tpl.none_the_template_uses_the': 'Aucun : le modèle n\'utilise que les colonnes de la ligne.',
4733
+ 'tpl.preview': 'Aperçu',
4734
+ 'tpl.sample_rows': 'Lignes d\'exemple',
4735
+ 'tpl.one_name_value_per_line': 'Un NAME=value par ligne ; une ligne vide commence la ligne suivante. Les attributs prennent leurs valeurs par défaut ; #LINK# vaut "#".',
4736
+ 'tpl.as_multiple_in_the_wrapper': 'En "multiple" (dans le conteneur)',
4737
+ 'tpl.plug_in': 'Plug-in',
4738
+ 'tpl.share_this_component_with_other': 'Partagez ce composant avec d\'autres applications et installations sous forme d\'un fichier JSON ; importez-le dans Composants partagés → Composants de modèle → Ajouter.',
4739
+ 'tpl.download_plug_in_file': 'Télécharger le fichier plug-in',
4740
+ 'tpl.built_in_components': 'Composants intégrés',
4741
+ 'tpl.every_application_can_use_these': 'Toute application peut les utiliser dans une région de composant de modèle ou comme modèle de colonne d\'un rapport. Pour en modifier un, copiez-le dans cette application : la copie (même id statique) prend sa place.',
4742
+ 'tpl.component': 'Composant',
4743
+ 'tpl.static_id': 'Id statique',
4744
+ 'tpl.actions': 'Actions',
4745
+ 'tpl.copy_into_this_application': 'Copier dans cette application',
4746
+ 'tpl.import_a_plug_in': 'Importer un plug-in',
4747
+ 'tpl.plug_in_file_json': 'Fichier plug-in (JSON)',
4748
+ 'tpl.paste_the_contents_of_a': 'Collez le contenu d\'un fichier .plugin.json, p. ex. un de examples/plugins/. Le modèle est vérifié avant d\'être enregistré.',
4749
+ 'tpl.replace_a_component_with_the': 'Remplacer un composant ayant le même id statique',
4750
+ 'tpl.import_plug_in': 'Importer le plug-in',
4751
+ 'tpl.choose_a_component_and_save': 'Choisissez un composant et enregistrez pour définir ses attributs.',
4752
+ 'tpl.template_component_settings': 'Paramètres du composant de modèle',
4753
+ 'tpl.these_fields_write_the_region': 'Ces champs écrivent le JSON de paramètres de la région ci-dessus (les autres clés sont conservées).',
4754
+ 'tpl.no_query_the_component_shows': 'Pas de requête : le composant s\'affiche une fois, à partir de ses attributs.',
4755
+ 'tpl.template_component': 'Composant de modèle',
4756
+ 'tpl.shared_components_template_components': 'Composants partagés → Composants de modèle',
4757
+ 'tpl.display': 'Affichage',
4758
+ 'tpl.at_most_rows': 'Lignes au plus',
4759
+ 'tpl.text_when_there_are_no': 'Texte quand il n\'y a pas de lignes',
4760
+ 'tpl.attributes': 'Attributs',
4761
+ 'tpl.link_link': 'Lien (#LINK#)',
4762
+ 'tpl.each_instance_links_to_page': 'Chaque instance renvoie à la page',
4763
+ 'tpl.the_template_puts_it_in': 'Le modèle le place dans href="#LINK#" ; les valeurs d\'éléments reçoivent une somme de contrôle. Vide pour les utilisateurs qui ne peuvent pas ouvrir la page.',
4764
+ 'tpl.set_items': 'Définir les éléments',
4765
+ 'tpl.item_column_comma_separated': 'ITEM=#column#, séparés par des virgules.',
4766
+ 'tpl.save_template_component_settings': 'Enregistrer les paramètres du composant de modèle',
4767
+ 'tpl.not_in_the_query': 'absente de la requête',
4768
+ 'tpl.column_templates': 'Modèles de colonne',
4769
+ 'tpl.render_a_column_s_cells': 'Afficher les cellules d\'une colonne via un composant de modèle. Son modèle voit chaque colonne de la ligne comme #NAME# (même les masquées), et #LINK# est le lien du rapport. Attributs : NAME=value par ligne, avec substitutions #column# et &ITEM..',
4770
+ 'tpl.column': 'Colonne',
4771
+ 'tpl.no_columns_yet': 'Aucune colonne pour l\'instant.',
4772
+ 'tpl.save_column_templates': 'Enregistrer les modèles de colonne',
4773
+ 'tpl.no_data_found': 'Aucune donnée trouvée',
4774
+ 'tpl.p3_id_id': 'P3_ID=#id#',
4775
+ 'tpl.template_component_settings_saved': 'Paramètres du composant de modèle enregistrés.',
4776
+ 'tpl.column_templates_saved': 'Modèles de colonne enregistrés.',
4777
+ 'tpl.import_failed_the_plug_in': 'Échec de l\'import : le fichier plug-in n\'est pas un JSON valide.',
4778
+ 'tpl.tc_list': 'tc-list',
4779
+ 'tpl.choose': '- choisir -',
4780
+ 'tpl.each_row_as_an_instance': 'Chaque ligne comme une instance',
4781
+ 'tpl.multiple_all_rows_in_the': 'Multiple : toutes les lignes dans le conteneur',
4782
+ 'tpl.no_link': '- pas de lien -',
4783
+ 'tpl.plain_value': '- valeur brute -',
4784
+ 'tpl.builtin_help': 'Les intégrés (avatar, badge, comments, media list, metric card, timeline), et ceux de l\'application dans {link}.',
4785
+ 'tpl.aria_component': 'Composant de modèle de {column}',
4786
+ 'tpl.aria_attrs': 'Attributs de {column}',
4787
+ 'tpl.missing': '{name} (manquant !)',
4788
+ 'tpl.import_failed': 'Échec de l\'import : {error}',
4789
+ 'tpl.imported': 'Composant de modèle {name} importé.',
4790
+ 'tpl.copy_failed': 'Échec de la copie : {error}',
4791
+ 'tpl.built_in': 'intégré',
4792
+ // ------------------------------------------------------------ Vector providers (sprint 164)
4793
+ 'vp.pgvector_is_not_installed_in': 'pgvector n\'est pas installé dans cette base de données.',
4794
+ 'vp.vector_provider': 'Fournisseur de vecteurs',
4795
+ 'vp.ai_service': 'Service IA',
4796
+ 'vp.workspace_utilities_ai_services': 'Utilitaires de l\'espace de travail → Services IA',
4797
+ 'vp.model_in_the_database': 'Modèle dans la base de données',
4798
+ 'vp.function': 'Fonction',
4799
+ 'vp.used_by': 'Utilisé par',
4800
+ 'vp.no_search_configuration_or_vector': 'Aucune configuration de recherche ni colonne vectorielle n\'utilise encore ce fournisseur.',
4801
+ 'vp.delete_vector_provider': 'Supprimer le fournisseur de vecteurs',
4802
+ 'vp.vector_providers': 'Fournisseurs de vecteurs',
4803
+ 'vp.a_vector_provider_turns_text': 'Un fournisseur de vecteurs transforme du texte en embedding : une liste de nombres dont la distance indique la proximité de sens entre deux textes. Les colonnes vectorielles conservent les embeddings des lignes d\'une table (SQL Workshop › Propriétés de la table › Ajouter une colonne vectorielle), et les configurations de recherche de type vector ou hybrid ainsi que les outils Retrieve des agents IA trouvent des lignes par le sens. Les textes vont au service IA du fournisseur.',
4804
+ 'vp.name': 'Nom',
4805
+ 'vp.type': 'Type',
4806
+ 'vp.model_or_function': 'Modèle ou fonction',
4807
+ 'vp.dimensions': 'Dimensions',
4808
+ 'vp.no_vector_providers_yet': 'Aucun fournisseur de vecteurs pour l\'instant.',
4809
+ 'vp.the_vector_providers_of_this': 'Les fournisseurs de vecteurs des applications de cet espace de travail (chaque application définit les siens dans Composants partagés → Fournisseurs de vecteurs) et les colonnes vectorielles qu\'ils tiennent à jour.',
4810
+ 'vp.application': 'Application',
4811
+ 'vp.column': 'Colonne',
4812
+ 'vp.provider': 'Fournisseur',
4813
+ 'vp.source_columns': 'Colonnes source',
4814
+ 'vp.kept_by': 'Tenue à jour par',
4815
+ 'vp.no_vector_columns_yet_sql': 'Aucune colonne vectorielle pour l\'instant (SQL Workshop › Propriétés de la table › Ajouter une colonne vectorielle).',
4816
+ 'vp.test_embed_a_sample_text': 'Tester : intégrer un texte d\'exemple',
4817
+ 'vp.add_vector_provider': 'Ajouter un fournisseur de vecteurs',
4818
+ 'vp.name_static_id': 'Nom (id statique)',
4819
+ 'vp.description': 'Description',
4820
+ 'vp.embedding_model': 'Modèle d\'embeddings',
4821
+ 'vp.texts_per_request': 'Textes par requête',
4822
+ 'vp.requests_per_minute': 'Requêtes par minute',
4823
+ 'vp.engine': 'Moteur',
4824
+ 'vp.model': 'Modèle',
4825
+ 'vp.e_g_doc_embeddings': 'p. ex. DOC_EMBEDDINGS',
4826
+ 'vp.upper_case_letters_digits_and': 'Lettres majuscules, chiffres et _. Les configurations de recherche le désignent ; en SQL : meta.embed(text, \'DOC_EMBEDDINGS\') (fournisseurs fonction et modèle en base).',
4827
+ 'vp.e_g_text_embedding_3': 'p. ex. text-embedding-3-small',
4828
+ 'vp.exactly_as_the_provider_names': 'Exactement comme le fournisseur le nomme : text-embedding-3-small, gemini-embedding-001, nomic-embed-text, mxbai-embed-large …',
4829
+ 'vp.when_the_server_embeds_queued': 'Quand le serveur intègre des lignes en file (colonnes vectorielles).',
4830
+ 'vp.at_most_this_many_background': 'Au plus ce nombre de requêtes d\'arrière-plan par minute (par serveur), sous la limite du fournisseur.',
4831
+ 'vp.e_g_intfloat_e5_small': 'p. ex. intfloat/e5-small-v2',
4832
+ 'vp.a_model_the_engine_loads': 'Un modèle que le moteur charge (le premier appel le télécharge) : intfloat/e5-small-v2 (384), Alibaba-NLP/gte-base-en-v1.5 (768), mixedbread-ai/mxbai-embed-large-v1 (1024) …',
4833
+ 'vp.e_g_sales_embed': 'p. ex. sales.embed',
4834
+ 'vp.schema_name_of_a_function': 'schema.nom d\'une fonction (text) qui renvoie vector, real[] ou float8[]. meta.embed l\'appelle avec le rôle qui exécute la requête (ses droits s\'appliquent) : accordez execute dessus au rôle de l\'application.',
4835
+ 'vp.ai_service_with_an_embedding': 'Service IA avec un modèle d\'embeddings',
4836
+ 'vp.model_in_the_database_postgresml': 'Modèle dans la base de données (PostgresML)',
4837
+ 'vp.sql_or_pl_pgsql_function': 'Fonction SQL ou PL/pgSQL',
4838
+ 'vp.postgresml_pgml_embed_model_text': 'PostgresML : pgml.embed(model, text)',
4839
+ 'vp.save': 'Enregistrer',
4840
+ 'vp.where_the_embeddings_come_from': 'D\'où viennent les embeddings.',
4841
+ 'vp.its_key_base_url_and': 'Sa clé, son URL de base et ses limites journalières s\'appliquent ; les textes à intégrer vont à son fournisseur.',
4842
+ 'vp.the_extension_that_runs_the': 'L\'extension qui exécute le modèle. Rien ne quitte la base de données ; accordez usage sur son schéma (pgml) au rôle de l\'application.',
4843
+ 'vp.vector_provider_saved': 'Fournisseur de vecteurs enregistré.',
4844
+ 'vp.the_pgvector_extension_is_installed': 'L\'extension pgvector est installée.',
4845
+ 'vp.providers': 'Fournisseurs',
4846
+ 'vp.vector_columns': 'Colonnes vectorielles',
4847
+ 'vp.app_builder': 'App Builder',
4848
+ 'vp.shared_components': 'Composants partagés',
4849
+ 'vp.the_quick_brown_fox_jumps': 'Portez ce vieux whisky au juge blond qui fume.',
4850
+ 'vp.workspace_utilities': 'Utilitaires de l\'espace de travail',
4851
+ 'vp.installed': 'pgvector {version} est installé (schéma {schema}).',
4852
+ 'vp.not_installed_detail': 'Des fournisseurs de vecteurs peuvent être définis, mais les colonnes vectorielles, la recherche vectorielle et les outils Retrieve ont besoin de l\'extension.',
4853
+ 'vp.create_extension': 'Créer l\'extension vector {version}',
4854
+ 'vp.has_pgvector': 'Le serveur de base de données a pgvector {version} : {who} exécute {sql} dans cette base de données.',
4855
+ 'vp.a_superuser': 'un superutilisateur',
4856
+ 'vp.an_administrator': 'un administrateur',
4857
+ 'vp.no_package': 'Le serveur de base de données n\'a pas le paquet pgvector : installez-le (par exemple {apt}, l\'image Docker {docker} ou l\'extension {vector} de votre fournisseur cloud), puis créez l\'extension.',
4858
+ 'vp.eg_1536': 'p. ex. 1536',
4859
+ 'vp.dimensions_help': 'La longueur de chaque vecteur : text-embedding-3-small 1536 (ou moins : OpenAI les raccourcit), text-embedding-3-large 3072, nomic-embed-text 768, gemini-embedding-001 3072. Une colonne vectorielle est vector(n) avec ce n ; un index HNSW accepte jusqu\'à {max}.',
4860
+ 'vp.no_service': 'Cette application ne peut pas encore utiliser de service IA OpenAI, Gemini ou compatible OpenAI : un administrateur en ajoute un dans {link} (Claude n\'a pas d\'embeddings) et autorise cette application à l\'utiliser.',
4861
+ 'vp.no_pgml': 'PostgresML ({pgml}) n\'est pas installé dans cette base de données : installez-le sur le serveur de base de données, puis {sql}. Il exécute des modèles Hugging Face (dont ONNX) dans PostgreSQL.',
4862
+ 'vp.used_config': 'Configuration de recherche {link} ({type})',
4863
+ 'vp.used_column': 'Colonne vectorielle {link} ({mode})',
4864
+ 'vp.set_by_trigger': 'définie par un déclencheur',
4865
+ 'vp.queued_server': 'en file pour le serveur',
4866
+ 'vp.delete_confirm': 'Supprimer le fournisseur de vecteurs {name} ? Les configurations de recherche et colonnes vectorielles qui l\'utilisent cessent de fonctionner.',
4867
+ 'vp.whole_number': '{what} est un nombre entier.',
4868
+ 'vp.f_dimensions': 'Dimensions',
4869
+ 'vp.f_batch': 'Textes par requête',
4870
+ 'vp.f_per_minute': 'Requêtes par minute',
4871
+ 'vp.gone': 'Le fournisseur de vecteurs {name} n\'existe plus.',
4872
+ 'vp.exists': 'Un fournisseur de vecteurs {name} existe déjà.',
4873
+ 'vp.deleted': 'Fournisseur de vecteurs {name} supprimé.',
4874
+ // ------------------------------------------------------------ AI assistant (sprint 164)
4875
+ 'asst.workspace_utilities_ai_services': 'Utilitaires de l\'espace de travail → Services IA',
4876
+ 'asst.ai_assistant_settings': 'Paramètres de l\'assistant IA',
4877
+ 'asst.a_chat_with_an_ai': 'Une discussion avec un service IA. Ce que tapent les utilisateurs, les lignes de contexte et les résultats des outils vont au fournisseur du service (Claude, OpenAI, Gemini, ou le point de terminaison compatible OpenAI de son URL de base). Les requêtes de contexte et outils SQL s\'exécutent avec le rôle de base de données de l\'application ; les outils SQL sont annulés sauf s\'ils peuvent modifier des données.',
4878
+ 'asst.assistant': 'Assistant',
4879
+ 'asst.ai_agent': 'Agent IA',
4880
+ 'asst.shared_components_ai_agents': 'Composants partagés → Agents IA',
4881
+ 'asst.ai_service': 'Service IA',
4882
+ 'asst.tool_rounds_per_question': 'Tours d\'outils par question',
4883
+ 'asst.questions_per_conversation': 'Questions par conversation',
4884
+ 'asst.system_prompt': 'Prompt système',
4885
+ 'asst.welcome_text': 'Texte d\'accueil',
4886
+ 'asst.placeholder': 'Texte indicatif',
4887
+ 'asst.error_message': 'Message d\'erreur',
4888
+ 'asst.also_for_users_who_are': 'Aussi pour les utilisateurs non connectés (chaque question coûte des jetons)',
4889
+ 'asst.context_and_tools': 'Contexte et outils',
4890
+ 'asst.context_queries_json': 'Requêtes de contexte (JSON)',
4891
+ 'asst.tools_json': 'Outils (JSON)',
4892
+ 'asst.save_ai_assistant_settings': 'Enregistrer les paramètres de l\'assistant IA',
4893
+ 'asst.ask_in_your_own_words': 'Demander avec vos propres mots (IA)',
4894
+ 'asst.built_in_phrases': 'expressions intégrées',
4895
+ 'asst.also_for_users_who_are_2': 'Aussi pour les utilisateurs non connectés',
4896
+ 'asst.save': 'Enregistrer',
4897
+ 'asst.the_service_s_message': 'le message du service',
4898
+ 'asst.none_the_service_prompt_and': '- aucun : le service, le prompt et les outils ci-dessous -',
4899
+ 'asst.choose': '- choisir -',
4900
+ 'asst.off': '- désactivé -',
4901
+ 'asst.built_in_phrases_no_ai': 'Expressions intégrées (sans IA)',
4902
+ 'asst.tools': 'Outils',
4903
+ 'asst.context_queries': 'Requêtes de contexte',
4904
+ 'asst.settings_saved': 'Paramètres enregistrés.',
4905
+ 'asst.no_service': 'Cette application ne peut encore utiliser aucun service IA : un administrateur en ajoute un dans {link} et autorise cette application à l\'utiliser.',
4906
+ 'asst.who_the_assistant_is_and': 'Qui est l\'assistant et ce qu\'il peut répondre. `&ITEM.` est remplacé par la valeur de l\'élément comme données délimitées (jamais l\'id de session ni des mots de passe).',
4907
+ 'asst.run_before_each_question_their': 'Exécutées avant chaque question ; leurs lignes vont au modèle comme données. `[{"name": "policy", "sql": "select title, body from hr.policy where body @@ plainto_tsquery(:AI_PROMPT)", "max_rows": 5}]` (`:AI_PROMPT` est la question, `:APP_USER` et les éléments comme d\'habitude).',
4908
+ 'asst.the_model_calls_them_when': 'Le modèle les appelle quand il en a besoin. SQL : `{"name": "my_leave", "description": "…", "sql": "select … where status = :STATUS", "parameters": {"STATUS": {"type": "string", "enum": ["PENDING", "APPROVED"]}}}` ; ajoutez `"writes": true` pour un outil qui modifie des données et `"authz": "SCHEME"` pour ne le proposer qu\'à certains utilisateurs. REST : `{"name": "department", "type": "rest", "source": "DEPARTMENT", "description": "…", "parameters": {"dname": {"type": "string"}}}`. Types de paramètres : string, integer, number, boolean, date ; `"optional": true` permet de n\'en donner aucun.',
4909
+ 'asst.agent_help': 'Un agent de {link} définit le service, le prompt système, l\'effort de raisonnement, les outils et les étapes ; enregistrer avec un agent retire le service, le prompt système, les outils et les tours d\'outils propres à la région.',
4910
+ 'asst.no_rest_source': 'Outil « {tool} » : il n\'y a pas de source de données REST {source}.',
4911
+ 'asst.no_authz': 'Outil « {tool} » : il n\'y a pas de schéma d\'autorisation {scheme}.',
4912
+ 'asst.no_agent': 'Il n\'y a pas d\'agent IA {agent}.',
4913
+ 'asst.filter_intro': 'Les utilisateurs tapent une question ; elle devient les paramètres propres du rapport (filtres, mises en évidence, tri, ruptures, totaux, regroupement, pivot, graphique, colonnes calculées ; seulement les colonnes que le rapport affiche, seulement ses opérateurs), affichés comme puces qu\'ils peuvent modifier, retirer ou annuler. Avec un service IA, la question et les noms de colonnes vont au fournisseur du service ; sans ({builtin}), pgkiln lit lui-même les expressions courantes, en anglais, néerlandais et allemand.',
4914
+ // ------------------------------------------------------------ AI services (sprint 164)
4915
+ 'aisv.service': 'Service',
4916
+ 'aisv.api_key': 'Clé d\'API',
4917
+ 'aisv.when_utc': 'Quand (UTC)',
4918
+ 'aisv.application': 'Application',
4919
+ 'aisv.page': 'Page',
4920
+ 'aisv.user': 'Utilisateur',
4921
+ 'aisv.model': 'Modèle',
4922
+ 'aisv.source': 'Source',
4923
+ 'aisv.input': 'Entrée',
4924
+ 'aisv.output': 'Sortie',
4925
+ 'aisv.status': 'Statut',
4926
+ 'aisv.no_ai_requests_yet': 'Aucune requête IA pour l\'instant.',
4927
+ 'aisv.only_administrators_configure_ai_services': 'Seuls les administrateurs configurent les services IA.',
4928
+ 'aisv.ai_services': 'Services IA',
4929
+ 'aisv.generate_text_with_ai': 'Générer du texte avec l\'IA',
4930
+ 'aisv.provider': 'Fournisseur',
4931
+ 'aisv.applications': 'Applications',
4932
+ 'aisv.no_ai_services_yet': 'Aucun service IA pour l\'instant.',
4933
+ 'aisv.requests': 'Requêtes',
4934
+ 'aisv.input_tokens': 'Jetons en entrée',
4935
+ 'aisv.output_tokens': 'Jetons en sortie',
4936
+ 'aisv.not_ok': 'Pas ok',
4937
+ 'aisv.builder_tests': 'tests du builder',
4938
+ 'aisv.no_ai_requests_in_the': 'Aucune requête IA au cours des 30 derniers jours.',
4939
+ 'aisv.tokens_model_duration_and_status': 'Jetons, modèle, durée et statut de chaque appel. Les prompts et réponses ne sont jamais journalisés (les messages de débogage d\'une application au niveau 9 les montrent).',
4940
+ 'aisv.delete_service': 'Supprimer le service',
4941
+ 'aisv.instead_of_the_base_url': 'Au lieu de l\'URL de base : l\'URL d\'un serveur distant (Utilitaires de l\'espace de travail → Serveurs distants) plus un chemin, ainsi déplacer le point de terminaison change une seule valeur. La clé d\'API y est envoyée : choisissez un serveur dont vous faites confiance aux administrateurs de l\'espace de travail.',
4942
+ 'aisv.save': 'Enregistrer',
4943
+ 'aisv.sends_a_prompt_to_the': 'Envoie un prompt au service (compté dans le journal d\'utilisation comme test du builder).',
4944
+ 'aisv.prompt': 'Prompt',
4945
+ 'aisv.may_use': 'Peut utiliser',
4946
+ 'aisv.requests_per_day': 'Requêtes par jour',
4947
+ 'aisv.tokens_per_day': 'Jetons par jour',
4948
+ 'aisv.no_applications': 'Aucune application.',
4949
+ 'aisv.save_access': 'Enregistrer l\'accès',
4950
+ 'aisv.requests_today': 'Requêtes aujourd\'hui',
4951
+ 'aisv.tokens_today': 'Jetons aujourd\'hui',
4952
+ 'aisv.this_application_may_not_use': 'Cette application ne peut encore utiliser aucun service IA.',
4953
+ 'aisv.test': 'Tester',
4954
+ 'aisv.when': 'Quand',
4955
+ 'aisv.name': 'Nom',
4956
+ 'aisv.description': 'Description',
4957
+ 'aisv.effort_claude': 'Effort (Claude)',
4958
+ 'aisv.maximum_output_tokens': 'Jetons de sortie maximum',
4959
+ 'aisv.time_limit_seconds': 'Limite de temps (secondes)',
4960
+ 'aisv.base_url': 'URL de base',
4961
+ 'aisv.refusal_fallbacks_claude': 'Modèles de repli en cas de refus (Claude)',
4962
+ 'aisv.enabled': 'Activé',
4963
+ 'aisv.remove_the_stored_key_use': 'Retirer la clé enregistrée (utiliser celle du serveur par défaut)',
4964
+ 'aisv.remote_server': 'Serveur distant',
4965
+ 'aisv.path': 'Chemin',
4966
+ 'aisv.e_g_claude': 'p. ex. CLAUDE',
4967
+ 'aisv.upper_case_letters_digits_and': 'Lettres majuscules, chiffres et _. Les processus désignent le service par ce nom.',
4968
+ 'aisv.per_request_1_128000_a': 'Par requête (1 – 128000) ; un processus peut en demander moins.',
4969
+ 'aisv.5_600_pages_wait_for': '5 – 600. Les pages attendent la réponse.',
4970
+ 'aisv.empty_the_provider_s_own': 'vide : l\'API du fournisseur',
4971
+ 'aisv.after_the_server_s_base': 'Après l\'URL de base du serveur, p. ex. /v1 ; vide : l\'URL de base elle-même.',
4972
+ 'aisv.claude_anthropic': 'Claude (Anthropic)',
4973
+ 'aisv.openai': 'OpenAI',
4974
+ 'aisv.gemini_google_openai_compatible_endpoint': 'Gemini (Google, point de terminaison compatible OpenAI)',
4975
+ 'aisv.openai_compatible_ollama_vllm_azure': 'Compatible OpenAI (Ollama, vLLM, Azure OpenAI, une passerelle)',
4976
+ 'aisv.model_default': 'Valeur par défaut du modèle',
4977
+ 'aisv.none_the_base_url_above': 'aucun : l\'URL de base ci-dessus',
4978
+ 'aisv.add_service': 'Ajouter le service',
4979
+ 'aisv.not_found': 'Introuvable.',
4980
+ 'aisv.the_service_now_calls_its': 'Le service appelle maintenant son serveur distant : testez-le.',
4981
+ 'aisv.the_service_calls_its_base': 'Le service appelle de nouveau son URL de base.',
4982
+ 'aisv.an_openai_compatible_service_needs': 'Un service compatible OpenAI a besoin d\'une URL de base ou d\'un serveur distant.',
4983
+ 'aisv.the_test_failed': 'Le test a échoué.',
4984
+ 'aisv.prompts_and_the_item_values': 'Les prompts, et les valeurs d\'éléments qu\'ils contiennent, sont envoyés à ce fournisseur. Les points de terminaison Gemini et compatibles OpenAI parlent Chat Completions d\'OpenAI.',
4985
+ 'aisv.how_deeply_claude_thinks_thinking': 'À quel point Claude réfléchit (la réflexion est toujours active sur les modèles Claude actuels) : moins est plus rapide et moins cher ; high ou plus pour les tâches difficiles. Valeur par défaut du modèle : medium pour Claude Opus 5.5.',
4986
+ 'aisv.when_claude_declines_a_request': 'Quand Claude refuse une requête pour des raisons de sécurité, Anthropic la relance sur son modèle de repli recommandé. Le journal d\'utilisation montre le modèle qui a répondu.',
4987
+ 'aisv.access_saved': 'Accès enregistré.',
4988
+ 'aisv.ai_service_added_allow_applications': 'Service IA ajouté. Autorisez ci-dessous des applications à l\'utiliser, et testez-le.',
4989
+ 'aisv.ai_service_deleted': 'Service IA supprimé.',
4990
+ 'aisv.the_model_is_a_name': 'Le modèle est un nom comme claude-opus-5-5 (lettres, chiffres et . _ : / @ -).',
4991
+ 'aisv.maximum_output_tokens_1_to': 'Jetons de sortie maximum : de 1 à 128000.',
4992
+ 'aisv.time_limit_5_to_600': 'Limite de temps : de 5 à 600 secondes.',
4993
+ 'aisv.the_base_url_starts_with': 'L\'URL de base commence par http:// ou https://.',
4994
+ 'aisv.an_openai_compatible_service_needs_2': 'Un service compatible OpenAI a besoin d\'une URL de base (p. ex. http://localhost:11434/v1 pour Ollama).',
4995
+ 'aisv.the_name_is_upper_case': 'Le nom est en lettres majuscules, chiffres et _ (p. ex. CLAUDE).',
4996
+ 'aisv.the_path_starts_with_without': 'Le chemin commence par /, sans espaces, p. ex. /v1.',
4997
+ 'aisv.no_such_remote_server': 'Serveur distant introuvable.',
4998
+ 'aisv.limits_are_whole_numbers_of': 'Les limites sont des nombres entiers de 0 ou plus (vide : aucune limite).',
4999
+ 'aisv.services': 'Services',
5000
+ 'aisv.usage_30_days': 'Utilisation (30 jours)',
5001
+ 'aisv.recent_requests': 'Requêtes récentes',
5002
+ 'aisv.settings': 'Paramètres',
5003
+ 'aisv.app_builder': 'App Builder',
5004
+ 'aisv.workspace_utilities': 'Utilitaires de l\'espace de travail',
5005
+ 'aisv.activity': 'Activité',
5006
+ 'aisv.ai_usage': 'Utilisation de l\'IA',
5007
+ 'aisv.the_server_has_no_pgkiln': 'Le serveur n\'a pas de `PGKILN_SECRET_KEY` : les clés d\'API ne peuvent pas être stockées tant qu\'elle n\'est pas définie (les variables d\'environnement du serveur fonctionnent toujours).',
5008
+ 'aisv.model_help': 'Exactement comme le fournisseur le nomme, p. ex. {model} (Claude) ou le modèle OpenAI de votre compte. pgkiln ne le change jamais.',
5009
+ 'aisv.intro': 'Grands modèles de langage que les applications de cette installation peuvent utiliser (processus et actions dynamiques {process}, et {fn} depuis SQL). Les prompts, y compris les valeurs d\'éléments qu\'ils contiennent, sont envoyés au fournisseur choisi. Autorisez chaque application sur la page du service.',
5010
+ 'aisv.delete_confirm': 'Supprimer le service IA {name} ? Les processus qui l\'utilisent échouent tant qu\'un autre service ne prend pas son nom.',
5011
+ 'aisv.test_prompt': 'Réponds par une courte phrase pour confirmer que tu peux lire ceci.',
5012
+ 'aisv.apps_intro': 'Quelles applications peuvent utiliser ce service, avec des limites quotidiennes facultatives (UTC). Limites vides : aucune limite. Les requêtes au-delà d\'une limite échouent avec un message et sont journalisées comme {limited}.',
5013
+ 'aisv.limited': 'limitée',
5014
+ 'aisv.aria_req': 'Requêtes par jour pour {app}',
5015
+ 'aisv.aria_tok': 'Jetons par jour pour {app}',
5016
+ 'aisv.answered_by': 'Répondu par {model} : {input} jetons en entrée et {output} en sortie.',
5017
+ // ------------------------------------------------------------ REST source catalogs (sprint 164)
5018
+ 'rcat.what_the_document_had_that': 'Ce que le document contenait et que le catalogue n\'utilise pas :',
5019
+ 'rcat.openapi_3': 'OpenAPI 3',
5020
+ 'rcat.swagger_2_0': 'Swagger 2.0',
5021
+ 'rcat.file': 'Fichier',
5022
+ 'rcat.or_paste_it': 'Ou collez-le',
5023
+ 'rcat.method': 'Méthode',
5024
+ 'rcat.description': 'Description',
5025
+ 'rcat.rest_source_catalogs': 'Catalogues de sources REST',
5026
+ 'rcat.catalog': 'Catalogue',
5027
+ 'rcat.base_url': 'URL de base',
5028
+ 'rcat.services': 'Services',
5029
+ 'rcat.from': 'Depuis',
5030
+ 'rcat.updated_utc': 'Modifié (UTC)',
5031
+ 'rcat.no_catalogs_yet_import_an': 'Aucun catalogue pour l\'instant : importez un document OpenAPI ou créez-en un ci-dessous.',
5032
+ 'rcat.service': 'Service',
5033
+ 'rcat.path': 'Chemin',
5034
+ 'rcat.parameters': 'Paramètres',
5035
+ 'rcat.columns': 'Colonnes',
5036
+ 'rcat.write_back': 'Écriture',
5037
+ 'rcat.no_services_yet': 'Aucun service pour l\'instant.',
5038
+ 'rcat.delete_service': 'Supprimer le service',
5039
+ 'rcat.delete_catalog': 'Supprimer le catalogue',
5040
+ 'rcat.web_credential': 'Identifiant web',
5041
+ 'rcat.create': 'Créer',
5042
+ 'rcat.download': 'Télécharger',
5043
+ 'rcat.add_a_service': 'Ajouter un service',
5044
+ 'rcat.save': 'Enregistrer',
5045
+ 'rcat.create_from_the_catalog': 'Créer depuis le catalogue',
5046
+ 'rcat.updated': 'Modifié',
5047
+ 'rcat.or_read_it_from_a': 'Ou le lire depuis une URL',
5048
+ 'rcat.name': 'Nom',
5049
+ 'rcat.row_selector': 'Sélecteur de lignes',
5050
+ 'rcat.parameters_json': 'Paramètres (JSON)',
5051
+ 'rcat.columns_json': 'Colonnes (JSON)',
5052
+ 'rcat.headers_json': 'En-têtes (JSON)',
5053
+ 'rcat.body_template': 'Modèle de corps',
5054
+ 'rcat.key_columns': 'Colonnes clés',
5055
+ 'rcat.operations_json': 'Opérations (JSON)',
5056
+ 'rcat.remote_server': 'Serveur distant',
5057
+ 'rcat.api_version': 'Version de l\'API',
5058
+ 'rcat.https_api_example_com_openapi': 'https://api.example.com/openapi.json',
5059
+ 'rcat.the_server_reads_it_the': 'Le serveur le lit ; l\'hôte doit figurer dans sa liste autorisée (PGKILN_REST_ALLOWED_HOSTS).',
5060
+ 'rcat.from_the_document': 'depuis le document',
5061
+ 'rcat.instead_of_the_document_s': 'Au lieu du serveur du document, p. ex. https://test.api.example.com/v1.',
5062
+ 'rcat.the_document_s_title': 'le titre du document',
5063
+ 'rcat.the_data_source_s_name': 'Le nom de la source de données quand une application en crée une depuis ce service.',
5064
+ 'rcat.pets_pet_id': '/pets/{pet_id}',
5065
+ 'rcat.after_the_catalog_s_base': 'Après l\'URL de base du catalogue ; {name} est un paramètre de chemin.',
5066
+ 'rcat.where_the_rows_are_in': 'Où se trouvent les lignes dans la réponse ; vide : la réponse.',
5067
+ 'rcat.e_g_weather_service': 'p. ex. Service météo',
5068
+ 'rcat.https_api_example_com_v1': 'https://api.example.com/v1',
5069
+ 'rcat.e_g_a_test_system': 'p. ex. l\'URL d\'un système de test (facultatif avec un serveur distant). Les sources de données créées auparavant gardent l\'URL avec laquelle elles ont été créées.',
5070
+ 'rcat.e_g_crm': 'p. ex. CRM',
5071
+ 'rcat.the_static_id_of_a': 'L\'id statique d\'un serveur distant de cet espace de travail (Utilitaires de l\'espace de travail → Serveurs distants) : les sources de données créées depuis le catalogue désignent alors le serveur et le chemin du service, et le suivent.',
5072
+ 'rcat.the_service_s_name': 'le nom du service',
5073
+ 'rcat.replace_the_services': 'Remplacer les services',
5074
+ 'rcat.import': 'Importer',
5075
+ 'rcat.this_application_has_a_rest': 'Cette application a déjà une source de données REST de ce nom : choisissez un autre nom.',
5076
+ 'rcat.catalog_created_add_its_services': 'Catalogue créé : ajoutez ses services.',
5077
+ 'rcat.catalog_saved': 'Catalogue enregistré.',
5078
+ 'rcat.service_deleted': 'Service supprimé.',
5079
+ 'rcat.the_file_is_larger_than': 'Le fichier dépasse 5 Mo.',
5080
+ 'rcat.choose_a_file_paste_a': 'Choisissez un fichier, collez un document ou indiquez son URL.',
5081
+ 'rcat.the_url_starts_with_http': 'L\'URL commence par http:// ou https://.',
5082
+ 'rcat.choose_a_service_of_one': 'Choisissez un service de l\'un des catalogues de cet espace de travail.',
5083
+ 'rcat.the_name_is_upper_case': 'Le nom est en lettres majuscules, chiffres et _, commençant par une lettre, p. ex. COUNTRIES.',
5084
+ 'rcat.catalogs': 'Catalogues',
5085
+ 'rcat.import_a_catalog': 'Importer un catalogue',
5086
+ 'rcat.create_a_catalog_by_hand': 'Créer un catalogue à la main',
5087
+ 'rcat.new_service': 'Nouveau service',
5088
+ 'rcat.replace_from_a_document': 'Remplacer depuis un document',
5089
+ 'rcat.from_a_rest_source_catalog': 'Depuis un catalogue de sources REST',
5090
+ 'rcat.app_builder': 'App Builder',
5091
+ 'rcat.workspace_utilities': 'Utilitaires de l\'espace de travail',
5092
+ 'rcat.doc_intro': 'Un document {openapi} ou {swagger} en JSON (p. ex. {file}), ou un fichier de catalogue téléchargé depuis pgkiln.',
5093
+ 'rcat.doc_replacing': 'Les services du catalogue sont remplacés par ceux du document ; les sources de données créées auparavant à partir de lui restent telles quelles.',
5094
+ 'rcat.url_answered': 'L\'URL a répondu HTTP {status}.',
5095
+ 'rcat.headers_help': 'En-têtes de requête supplémentaires, pas de secrets : c\'est l\'identifiant web d\'une application qui se connecte.',
5096
+ 'rcat.unusable': 'Le catalogue ne peut pas être utilisé tel quel : {problems}',
5097
+ 'rcat.and_more': '(et {n} de plus)',
5098
+ 'rcat.imported': 'Catalogue {name} importé avec {n} service(s).',
5099
+ 'rcat.import_failed': 'Échec de l\'import : {error}',
5100
+ 'rcat.on_server': 'Sur le serveur distant {server}',
5101
+ 'rcat.from_openapi': 'depuis un document OpenAPI',
5102
+ 'rcat.from_openapi_version': 'depuis un document OpenAPI (version {version})',
5103
+ 'rcat.updated_when': 'modifié {when} UTC',
5104
+ 'rcat.add': 'Ajouter',
5105
+ 'rcat.service_title': 'Service {name}',
5106
+ 'rcat.url': 'URL :',
5107
+ 'rcat.delete_service_confirm': 'Supprimer le service {name} ?',
5108
+ 'rcat.delete_catalog_confirm': 'Supprimer le catalogue {name} et ses services ? Les sources de données créées à partir de lui restent.',
5109
+ 'rcat.no_server': 'Catalogue enregistré. Cet espace de travail n\'a pas encore de serveur distant {server} : ajoutez-le dans Utilitaires de l\'espace de travail → Serveurs distants.',
5110
+ 'rcat.replaced': 'Les services de {name} ont été remplacés : {n} service(s).',
5111
+ 'rcat.deleted': 'Catalogue {name} supprimé.',
5112
+ 'rcat.service_saved': 'Service {name} enregistré.',
5113
+ 'rcat.no_credential': 'Cette application n\'a pas d\'identifiant web {name} (ni son espace de travail).',
5114
+ 'rcat.copy_of': 'Une copie d\'un service des {link} de cet espace de travail : son URL, ses paramètres, colonnes et opérations d\'écriture.',
5115
+ 'rcat.catalogs_link': 'catalogues',
5116
+ // ------------------------------------------------------------ Blueprints (sprint 164)
5117
+ 'bp.review': 'Vérifier',
5118
+ 'bp.describe_the_application': 'Décrivez l\'application',
5119
+ 'bp.draft_a_blueprint': 'Rédiger un blueprint',
5120
+ 'bp.sql_workshop_ai': 'SQL Workshop → IA',
5121
+ 'bp.name': 'Nom',
5122
+ 'bp.save': 'Enregistrer',
5123
+ 'bp.this_is_what_the_blueprint': 'Voici ce que le blueprint crée. Vérifiez-le ; revenez en arrière pour le modifier, ou créez l\'application.',
5124
+ 'bp.alias': 'Alias',
5125
+ 'bp.schema': 'Schéma',
5126
+ 'bp.sign_in': 'Connexion',
5127
+ 'bp.table': 'Table',
5128
+ 'bp.columns': 'Colonnes',
5129
+ 'bp.sample_rows': 'Lignes d\'exemple',
5130
+ 'bp.the_sql': 'Le SQL',
5131
+ 'bp.a_dashboard_with_charts_per': 'Un tableau de bord avec des graphiques par table',
5132
+ 'bp.menu_home_and_the_pages': 'Menu : Accueil et les entrées propres aux pages.',
5133
+ 'bp.first_user_admin_role': 'Premier utilisateur (rôle admin)',
5134
+ 'bp.password_for_a_new_account': 'Mot de passe (pour un nouveau compte)',
5135
+ 'bp.back_to_the_editor': 'Retour à l\'éditeur',
5136
+ 'bp.the_blueprint_can_t_be': 'Le blueprint ne peut pas encore être créé :',
5137
+ 'bp.blueprints': 'Blueprints',
5138
+ 'bp.blueprint': 'Blueprint',
5139
+ 'bp.application_created': 'Application créée',
5140
+ 'bp.changed': 'Modifié',
5141
+ 'bp.delete': 'Supprimer',
5142
+ 'bp.no_saved_blueprints_yet': 'Aucun blueprint enregistré pour l\'instant.',
5143
+ 'bp.a_blueprint_of_an_application': 'Un blueprint d\'une application de cet espace de travail : les tables qu\'utilisent ses pages, ses pages et son menu, à vérifier et modifier dans l\'éditeur (pour une copie, une nouvelle version ou un système de test). Rien n\'est créé tant que vous ne confirmez pas la vérification.',
5144
+ 'bp.application': 'Application',
5145
+ 'bp.sample_rows_up_to_20': 'Lignes d\'exemple : jusqu\'à 20 par table',
5146
+ 'bp.the_rows_are_copied_into': 'Les lignes sont copiées telles quelles dans le blueprint : laissez ceci désactivé pour des données personnelles ou confidentielles.',
5147
+ 'bp.drafted_by_ai_review_it': 'Rédigé par l\'IA : vérifiez-le avant de créer quoi que ce soit.',
5148
+ 'bp.create_the_application': 'Créer l\'application',
5149
+ 'bp.new_blueprint': 'Nouveau blueprint',
5150
+ 'bp.create_a_blueprint': 'Créer un blueprint',
5151
+ 'bp.e_g_track_projects_with': 'p. ex. Suivre des projets avec des tâches et des échéances, et les heures que les gens y passent',
5152
+ 'bp.projects': 'Projets',
5153
+ 'bp.blueprint_deleted_applications_created_from': 'Blueprint supprimé (les applications créées à partir de lui restent).',
5154
+ 'bp.there_is_no_such_blueprint': 'Ce blueprint n\'existe pas.',
5155
+ 'bp.the_app_builder_has_no': 'L\'App Builder n\'a pas encore de service IA.',
5156
+ 'bp.describe_the_application_2': 'Décrivez l\'application.',
5157
+ 'bp.draft_with_ai': 'Rédiger avec l\'IA',
5158
+ 'bp.tables': 'Tables',
5159
+ 'bp.pages': 'Pages',
5160
+ 'bp.from_an_application': 'Depuis une application',
5161
+ 'bp.app_builder': 'App Builder',
5162
+ 'bp.create': 'Créer',
5163
+ 'bp.too_long': 'Le blueprint est trop long ({n} caractères au plus).',
5164
+ 'bp.bad_json': 'JSON non valide : {error}',
5165
+ 'bp.title': 'Blueprint : {name}',
5166
+ 'bp.intro': 'Un blueprint décrit une application : ses tables (chaque table reçoit un {id} ; {references} crée une clé étrangère), pages ({pages}), menu et lignes d\'exemple. {review} montre ce qu\'il va créer ; rien n\'est créé avant que vous confirmiez là.',
5167
+ 'bp.no_service': 'L\'App Builder n\'a pas de service IA : un administrateur en choisit un dans {link}. Vous pouvez écrire le blueprint vous-même.',
5168
+ 'bp.db_role': '(rôle de base de données {role})',
5169
+ 'bp.alias_taken': 'Une application avec l\'alias {alias} existe déjà : modifiez "alias" et "schema" dans le blueprint.',
5170
+ 'bp.alias_taken_short': 'Une application avec l\'alias {alias} existe déjà.',
5171
+ 'bp.review_title': 'Vérifier',
5172
+ 'bp.list_intro': 'Décrivez une application comme blueprint (tables, pages, menu, lignes d\'exemple), vérifiez-la et créez-la.',
5173
+ 'bp.saved': 'Blueprint {name} enregistré.',
5174
+ 'bp.created': 'Application {alias} créée depuis le blueprint : {tables} table(s), {rows} ligne(s) d\'exemple.',
5175
+ 'bp.admin_role': 'Le compte existant {user} a reçu le rôle admin.',
5176
+ 'bp.not_created': 'Aucune application n\'a été créée : {error}',
5177
+ // ------------------------------------------------------------ JSON sources (sprint 164)
5178
+ 'jsrc.a_column_per_path_in': 'Une colonne par chemin dans le document (clés séparées par des points, p. ex. `address.city`). Une valeur qui ne se lit pas comme le type apparaît vide. Enregistrer une ligne n\'écrit que les chemins dont les valeurs ont changé : les clés que cette liste ne nomme pas restent dans le document. Videz un nom pour retirer une colonne.',
5179
+ 'jsrc.column': 'Colonne',
5180
+ 'jsrc.path': 'Chemin',
5181
+ 'jsrc.type': 'Type',
5182
+ 'jsrc.read_only': 'Lecture seule',
5183
+ 'jsrc.json_source': 'Source JSON',
5184
+ 'jsrc.table_and_jsonb_column': 'Table et colonne jsonb',
5185
+ 'jsrc.a_column_of_a_table': 'Une colonne d\'une table, ou la colonne document d\'une table de documents. La table a besoin d\'une clé primaire.',
5186
+ 'jsrc.the_view_also_adds_and': 'La vue ajoute et supprime aussi des lignes de la table',
5187
+ 'jsrc.for_a_table_of_documents': 'Pour une table de documents : un insert dans la vue ajoute une ligne, un delete la retire. Désactivé : la vue ne modifie que les documents des lignes existantes.',
5188
+ 'jsrc.columns': 'Colonnes',
5189
+ 'jsrc.remove_this_array': 'Retirer ce tableau',
5190
+ 'jsrc.add_an_array': 'Ajouter un tableau',
5191
+ 'jsrc.add_the_array_then_propose': 'Ajoutez le tableau, puis Proposer à partir des données remplit ses colonnes (ou saisissez-les après l\'enregistrement).',
5192
+ 'jsrc.json_sources': 'Sources JSON',
5193
+ 'jsrc.a_json_source_describes_a': 'Une source JSON décrit une colonne jsonb : une colonne par chemin dans ses documents, et les tableaux d\'objets comme lignes à part. pgkiln en fait des vues modifiables, si bien que formulaires, rapports, grilles interactives, REST et MCP lisent et écrivent les documents comme des tables. Enregistrer une ligne ne modifie que les chemins qu\'elle a changés : les clés que la source ne connaît pas restent. Pour une table avec ses tables enfants en un seul document, voir SQL Workshop › Propriétés de la table › Vue document.',
5194
+ 'jsrc.name': 'Nom',
5195
+ 'jsrc.views': 'Vues',
5196
+ 'jsrc.not_made': 'non créées',
5197
+ 'jsrc.no_json_sources_yet': 'Aucune source JSON pour l\'instant.',
5198
+ 'jsrc.delete_json_source': 'Supprimer la source JSON',
5199
+ 'jsrc.proposed_from_up_to_200': 'Proposé à partir de 200 documents au plus : vérifiez les noms et types, puis enregistrez.',
5200
+ 'jsrc.propose_from_the_data': 'Proposer à partir des données',
5201
+ 'jsrc.add_json_source': 'Ajouter une source JSON',
5202
+ 'jsrc.open_in_the_sql_worksheet': 'Ouvrir dans la feuille de calcul SQL',
5203
+ 'jsrc.create_page': 'Créer la page',
5204
+ 'jsrc.the_element_itself': '(l\'élément lui-même)',
5205
+ 'jsrc.name_static_id': 'Nom (id statique)',
5206
+ 'jsrc.description': 'Description',
5207
+ 'jsrc.view': 'Vue',
5208
+ 'jsrc.page_number': 'Numéro de page',
5209
+ 'jsrc.title': 'Titre',
5210
+ 'jsrc.e_g_emp_profile': 'p. ex. EMP_PROFILE',
5211
+ 'jsrc.upper_case_letters_digits_and': 'Lettres majuscules, chiffres et _.',
5212
+ 'jsrc.e_g_emp_profile_2': 'p. ex. emp_profile',
5213
+ 'jsrc.made_in_the_table_s': 'Créée dans le schéma de la table. Les régions, REST et MCP l\'utilisent comme une table.',
5214
+ 'jsrc.the_array_in_the_document': 'Le tableau dans le document, p. ex. skills.',
5215
+ 'jsrc.e_g_skills': 'p. ex. skills',
5216
+ 'jsrc.e_g_emp_profile_skills': 'p. ex. emp_profile_skills',
5217
+ 'jsrc.save': 'Enregistrer',
5218
+ 'jsrc.the_views_are_not_made': 'Les vues ne sont pas encore créées.',
5219
+ 'jsrc.make_the_views_again': 'Recréer les vues',
5220
+ 'jsrc.create_views': 'Créer les vues',
5221
+ 'jsrc.check_the_statements_then_run': 'Vérifiez les instructions, puis exécutez-les comme un script.',
5222
+ 'jsrc.json_source_saved': 'Source JSON enregistrée.',
5223
+ 'jsrc.the_page_number_is_a': 'Le numéro de page est un nombre entier à partir de 1.',
5224
+ 'jsrc.choose_a_table_and_its': 'Choisissez une table et sa colonne json ou jsonb.',
5225
+ 'jsrc.create_page_needs_a_table': 'Créer la page exige une table avec une clé d\'une seule colonne ; utilisez les vues dans vos propres régions.',
5226
+ 'jsrc.sources': 'Sources',
5227
+ 'jsrc.app_builder': 'App Builder',
5228
+ 'jsrc.shared_components': 'Composants partagés',
5229
+ 'jsrc.aria_name': 'Colonne {n} : nom',
5230
+ 'jsrc.aria_path': 'Colonne {n} : chemin',
5231
+ 'jsrc.aria_type': 'Colonne {n} : type',
5232
+ 'jsrc.aria_readonly': 'Colonne {n} : lecture seule',
5233
+ 'jsrc.no_json_table': '(aucune table avec une colonne json ou jsonb)',
5234
+ 'jsrc.array_view_help': 'Une ligne par élément : la clé de la table, {rowkey} (la clé de l\'élément) et {position} (1, 2 …), puis ces colonnes. Utilisez-la comme grille de détail.',
5235
+ 'jsrc.page_exists': 'La page {n} existe déjà.',
5236
+ 'jsrc.form_on': 'Un formulaire sur {view}. Ouvrez-le avec la clé dans l\'URL ({item}), p. ex. depuis le lien d\'un rapport.',
5237
+ 'jsrc.form_on_grid': 'Un formulaire sur {view} avec une grille de détail pour {arrays}. Ouvrez-le avec la clé dans l\'URL ({item}), p. ex. depuis le lien d\'un rapport.',
5238
+ 'jsrc.form_on_grids': 'Un formulaire sur {view} avec des grilles de détail pour {arrays}. Ouvrez-le avec la clé dans l\'URL ({item}), p. ex. depuis le lien d\'un rapport.',
5239
+ 'jsrc.delete_confirm': 'Supprimer la source JSON {name} ? Ses vues restent dans la base de données (supprimez-les dans le SQL Workshop).',
5240
+ 'jsrc.view_taken': 'La vue {view} appartient à la source JSON {source}.',
5241
+ 'jsrc.key_changed': 'La clé primaire de {table} a changé : enregistrez de nouveau la source.',
5242
+ 'jsrc.nothing_changed': 'Rien n\'a été modifié : {error}',
5243
+ 'jsrc.views_made': 'Les vues de {name} sont créées : {views}.',
5244
+ 'jsrc.page_made': 'Page {n} créée : un formulaire sur {view}.',
5245
+ 'jsrc.page_made_grids': 'Page {n} créée : un formulaire sur {view} avec des grilles de détail.',
5246
+ // ------------------------------------------------------------ REST API (PostgREST, OAuth clients) (sprint 164)
5247
+ 'apip.for_development_and_trusted_scripts': 'Pour le développement et les scripts de confiance : le jeton agit comme le compte jusqu\'à son expiration. Les rôles sont lus à chaque requête ; désactiver le compte ou révoquer son accès arrête le jeton aussitôt (`meta.api_check`). Pour invalider tous les jetons, changez `API_JWT_SECRET`.',
5248
+ 'apip.roles': 'Rôles',
5249
+ 'apip.create_client': 'Créer le client',
5250
+ 'apip.client_id': 'ID client',
5251
+ 'apip.client_secret': 'Secret client',
5252
+ 'apip.client': 'Client',
5253
+ 'apip.token': 'Jeton',
5254
+ 'apip.secret_changed': 'Secret modifié',
5255
+ 'apip.last_used': 'Dernière utilisation',
5256
+ 'apip.actions': 'Actions',
5257
+ 'apip.save': 'Enregistrer',
5258
+ 'apip.no_clients_yet': 'Aucun client pour l\'instant.',
5259
+ 'apip.not_reachable': 'injoignable',
5260
+ 'apip.users_create_their_own_tokens': 'Les utilisateurs créent leurs propres jetons',
5261
+ 'apip.my_account': 'Mon compte',
5262
+ 'apip.issue_token': 'Émettre un jeton',
5263
+ 'apip.path': 'Chemin',
5264
+ 'apip.kind': 'Type',
5265
+ 'apip.try_it': 'Essayer',
5266
+ 'apip.new_client': 'Nouveau client',
5267
+ 'apip.comma_separated_or_pick_below': 'séparés par des virgules, ou choisissez ci-dessous',
5268
+ 'apip.no_roles': 'aucun rôle',
5269
+ 'apip.keep_the_old_secret': 'Garder l\'ancien secret',
5270
+ 'apip.status': 'Statut',
5271
+ 'apip.methods': 'Méthodes',
5272
+ 'apip.name': 'Nom',
5273
+ 'apip.token_lifetime_minutes': 'Durée de vie du jeton (minutes)',
5274
+ 'apip.description': 'Description',
5275
+ 'apip.api_database_role': 'Rôle de base de données de l\'API',
5276
+ 'apip.account': 'Compte',
5277
+ 'apip.valid_for_hours': 'Valable pendant (heures)',
5278
+ 'apip.e_g_payroll_sync': 'p. ex. payroll-sync',
5279
+ 'apip.lower_case_letters_digits': 'Lettres minuscules, chiffres, . _ -',
5280
+ 'apip.5_to_1440': 'De 5 à 1440.',
5281
+ 'apip.who_uses_it': 'qui l\'utilise',
5282
+ 'apip.e_g_myapp_api': 'p. ex. myapp_api',
5283
+ 'apip.grant_it_only_the_api': 'Accordez-lui uniquement les vues et fonctions du schéma api, et accordez-le à pgkiln_authenticator. Vide : les jetons ne fonctionnent que pour les modules REST que pgkiln sert (Composants partagés → Modules REST).',
5284
+ 'apip.revoke': 'Révoquer',
5285
+ 'apip.reactivate': 'Réactiver',
5286
+ 'apip.problem': 'Problème :',
5287
+ 'apip.check_the_name_lower_case': 'Vérifiez le nom (lettres minuscules, chiffres, . _ -) et la durée de vie du jeton (5–1440 minutes).',
5288
+ 'apip.setup': 'Configuration',
5289
+ 'apip.issue_a_token': 'Émettre un jeton',
5290
+ 'apip.endpoints': 'Points de terminaison',
5291
+ 'apip.app_builder': 'App Builder',
5292
+ 'apip.rest_api': 'API REST',
5293
+ 'apip.oauth_intro': 'Pour les systèmes qui appellent l\'API (comme {ords} d\'ORDS) : un client échange son id et son secret contre un jeton d\'accès à {url} ({grant}) et agit en tant que {client} avec ses rôles, lus à chaque requête.',
5294
+ 'apip.new_secret_for': 'Nouveau secret pour {name}',
5295
+ 'apip.client_created': 'Client {name} créé',
5296
+ 'apip.copy_now': 'Copiez le secret maintenant : il n\'est affiché qu\'une fois.',
5297
+ 'apip.grace': 'L\'ancien secret reste valable pendant {n} heures.',
5298
+ 'apip.aria_roles': 'Rôles de {name}',
5299
+ 'apip.add': 'Ajouter',
5300
+ 'apip.minutes': '{n} min',
5301
+ 'apip.old_valid_until': 'ancien secret valable jusqu\'au {when}',
5302
+ 'apip.never': 'jamais',
5303
+ 'apip.new_secret': 'Nouveau secret',
5304
+ 'apip.old_24h': 'ancien valable 24 h',
5305
+ 'apip.old_7d': 'ancien valable 7 jours',
5306
+ 'apip.old_now': 'ancien invalide aussitôt',
5307
+ 'apip.delete': 'Supprimer',
5308
+ 'apip.ok': 'OK :',
5309
+ 'apip.intro': 'PostgREST tourne à côté de pgkiln et sert le schéma {schema} en HTTP. Les requêtes portent un JWT dont la claim {role} est le rôle d\'API de cette application ; la sécurité au niveau des lignes utilise les mêmes {user} et {has} que les pages web.',
5310
+ 'apip.at': 'PostgREST à {url} :',
5311
+ 'apip.dedicated': '{role} est un rôle dédié',
5312
+ 'apip.no_role': 'Pas de rôle d\'API : les jetons ne servent qu\'aux modules REST que pgkiln sert',
5313
+ 'apip.may_switch': 'pgkiln_authenticator peut basculer vers {role}',
5314
+ 'apip.run_grant': '{run} {sql}',
5315
+ 'apip.run': 'exécutez',
5316
+ 'apip.self_help': 'Dans {account}, les utilisateurs connectés créent un jeton qui agit en leur nom. Un utilisateur dont l\'application exige la connexion à deux facteurs passe d\'abord une seconde étape (si la dernière date de plus de 15 minutes).',
5317
+ 'apip.methods_for': 'Méthodes pour {role}',
5318
+ 'apip.none': 'aucune',
5319
+ 'apip.nothing_yet': 'Rien dans le schéma {schema} pour l\'instant. Créez-y des vues et fonctions et accordez-les au rôle d\'API.',
5320
+ 'apip.nothing_yet_no_role': 'Rien dans le schéma {schema} pour l\'instant, ou aucun rôle d\'API défini. Créez-y des vues et fonctions et accordez-les au rôle d\'API.',
5321
+ 'apip.reload': 'Après des changements de schéma, exécutez {sql} pour que PostgREST les prenne en compte. Description OpenAPI : {link}.',
5322
+ 'apip.roles_saved': 'Rôles de {name} enregistrés.',
5323
+ // ------------------------------------------------------------ AI agents and tools (sprint 164)
5324
+ 'agt.this_application_may_not_use': 'Cette application ne peut encore utiliser aucun service IA : un administrateur en ajoute un dans Utilitaires de l\'espace de travail → Services IA et autorise cette application à l\'utiliser.',
5325
+ 'agt.agent': 'Agent',
5326
+ 'agt.tools': 'Outils',
5327
+ 'agt.the_agent_acts_only_through': 'L\'agent n\'agit qu\'au moyen des outils que vous cochez.',
5328
+ 'agt.add_one': 'ajoutez-en un',
5329
+ 'agt.used_by': 'Utilisé par',
5330
+ 'agt.no_ai_assistant_region_uses': 'Aucune région d\'assistant IA n\'utilise encore cet agent (Page Designer → une région d\'assistant IA → Agent IA).',
5331
+ 'agt.delete_agent': 'Supprimer l\'agent',
5332
+ 'agt.tool': 'Outil',
5333
+ 'agt.no_agent_uses_this_tool': 'Aucun agent n\'utilise encore cet outil.',
5334
+ 'agt.delete_tool': 'Supprimer l\'outil',
5335
+ 'agt.every_tool_call_of_the': 'Chaque appel d\'outil des assistants et agents IA de l\'application, avec les arguments que le modèle a donnés (conservés 30 jours).',
5336
+ 'agt.when_utc': 'Quand (UTC)',
5337
+ 'agt.page': 'Page',
5338
+ 'agt.user': 'Utilisateur',
5339
+ 'agt.arguments': 'Arguments',
5340
+ 'agt.status': 'Statut',
5341
+ 'agt.no_tool_calls_yet': 'Aucun appel d\'outil pour l\'instant.',
5342
+ 'agt.ai_agents': 'Agents IA',
5343
+ 'agt.ai_usage': 'Utilisation de l\'IA',
5344
+ 'agt.ai_service': 'Service IA',
5345
+ 'agt.authorization': 'Autorisation',
5346
+ 'agt.no_ai_agents_yet': 'Aucun agent IA pour l\'instant.',
5347
+ 'agt.type': 'Type',
5348
+ 'agt.no_ai_tools_yet': 'Aucun outil IA pour l\'instant.',
5349
+ 'agt.add_agent': 'Ajouter un agent',
5350
+ 'agt.add_tool': 'Ajouter un outil',
5351
+ 'agt.when': 'Quand',
5352
+ 'agt.authorization_scheme': 'Schéma d\'autorisation',
5353
+ 'agt.name': 'Nom',
5354
+ 'agt.description': 'Description',
5355
+ 'agt.reasoning_effort': 'Effort de raisonnement',
5356
+ 'agt.maximum_steps': 'Étapes maximum',
5357
+ 'agt.maximum_output_tokens': 'Jetons de sortie maximum',
5358
+ 'agt.system_prompt': 'Prompt système',
5359
+ 'agt.sql_query_sql': 'Requête SQL (SQL)',
5360
+ 'agt.function_pl_pgsql': 'Fonction (PL/pgSQL)',
5361
+ 'agt.rest_data_source_rest': 'Source de données REST (REST)',
5362
+ 'agt.action_javascript': 'Action (JavaScript)',
5363
+ 'agt.pages_navigate': 'Pages (Navigate)',
5364
+ 'agt.search_configuration_retrieve': 'Configuration de recherche (Retrieve)',
5365
+ 'agt.parameters_json_not_for_navigate': 'Paramètres (JSON ; pas pour Navigate ni Retrieve)',
5366
+ 'agt.maximum_rows': 'Lignes maximum',
5367
+ 'agt.time_limit_seconds': 'Limite de temps (secondes)',
5368
+ 'agt.e_g_sales_agent': 'p. ex. SALES_AGENT',
5369
+ 'agt.upper_case_letters_digits_and': 'Lettres majuscules, chiffres et _. Les régions d\'assistant IA désignent l\'agent.',
5370
+ 'agt.rounds_of_tool_calls_per': 'Tours d\'appels d\'outils par question (1 – 20) ; ensuite le modèle doit répondre.',
5371
+ 'agt.the_service_s': 'celui du service',
5372
+ 'agt.per_call_to_the_model': 'Par appel au modèle (jamais au-dessus du maximum du service).',
5373
+ 'agt.e_g_top_earners': 'p. ex. top_earners',
5374
+ 'agt.letters_digits_and_the_model': 'Lettres, chiffres et _ : le modèle appelle l\'outil par ce nom.',
5375
+ 'agt.e_g_sales_give_discount': 'p. ex. sales.give_discount',
5376
+ 'agt.schema_name_called_as_the': 'schema.nom, appelée avec le rôle de l\'application et des arguments nommés : chaque nom de paramètre en minuscules est un nom d\'argument (P_ORDER → p_order). Elle peut modifier des données.',
5377
+ 'agt.e_g_highlightorder': 'p. ex. highlightOrder',
5378
+ 'agt.after_the_answer_the_browser': 'Après la réponse, le navigateur appelle la fonction enregistrée avec pgkiln.actions.register(name) avec {value: the arguments}, et les actions dynamiques de l\'événement personnalisé de ce nom.',
5379
+ 'agt.the_page_numbers_the_agent': 'Les numéros de page vers lesquels l\'agent peut créer des liens. pgkiln ne propose que ceux que l\'utilisateur peut ouvrir et construit l\'URL (valeurs d\'éléments avec leur somme de contrôle).',
5380
+ 'agt.rows_the_model_gets_back': 'Lignes que le modèle reçoit en retour (1 – 500).',
5381
+ 'agt.sql_and_function_tools_1': 'Outils SQL et fonction (1 – 60).',
5382
+ 'agt.none_everyone_who_may_use': '- aucun : tous ceux qui peuvent utiliser la page -',
5383
+ 'agt.must_not_be_the_public': 'Ne doit pas être l\'utilisateur public',
5384
+ 'agt.choose': '- choisir -',
5385
+ 'agt.the_service_s_2': 'Celui du service',
5386
+ 'agt.save': 'Enregistrer',
5387
+ 'agt.the_conversation_the_tools_results': 'La conversation, les résultats des outils et le prompt système vont au fournisseur de ce service.',
5388
+ 'agt.only_users_who_pass_it': 'Seuls les utilisateurs qui le satisfont peuvent utiliser l\'agent (les régions affichent un message aux autres).',
5389
+ 'agt.what_the_tool_does_each': 'Ce que fait l\'outil ; chaque type utilise les champs ci-dessous qui le nomment.',
5390
+ 'agt.tells_the_model_what_the': 'Dit au modèle ce que fait l\'outil et quand l\'utiliser.',
5391
+ 'agt.the_parameters_become_the_source': 'Les paramètres deviennent ceux de la source.',
5392
+ 'agt.only_users_who_pass_it_2': 'L\'outil n\'est proposé qu\'aux utilisateurs qui le satisfont.',
5393
+ 'agt.ai_agent_saved': 'Agent IA enregistré.',
5394
+ 'agt.ai_tool_saved': 'Outil IA enregistré.',
5395
+ 'agt.parameters_not_valid_json': 'Paramètres : JSON non valide.',
5396
+ 'agt.tool_calls': 'Appels d\'outils',
5397
+ 'agt.agents': 'Agents',
5398
+ 'agt.ai_agent': 'Agent IA',
5399
+ 'agt.ai_tool': 'Outil IA',
5400
+ 'agt.app_builder': 'App Builder',
5401
+ 'agt.shared_components': 'Composants partagés',
5402
+ 'agt.type.sql': 'Requête SQL (lecture seule, avec le rôle de l\'application)',
5403
+ 'agt.type.function': 'Fonction PL/pgSQL (peut modifier des données)',
5404
+ 'agt.type.rest': 'Source de données REST',
5405
+ 'agt.type.javascript': 'Action JavaScript dans le navigateur',
5406
+ 'agt.type.navigate': 'Navigate : un lien vers une page',
5407
+ 'agt.type.retrieve': 'Retrieve (RAG) : lignes d\'une configuration de recherche',
5408
+ 'agt.effort_help': 'Claude : l\'effort de sortie (profondeur de réflexion). OpenAI, Gemini et compatibles OpenAI : reasoning_effort (laissez vide pour les modèles sans raisonnement).',
5409
+ 'agt.system_help': 'Qui est l\'agent, ce qu\'il peut répondre et quand utiliser quel outil. &ITEM. est remplacé par la valeur de l\'élément comme données délimitées.',
5410
+ 'agt.no_tools': 'Aucun outil IA pour l\'instant : {link}.',
5411
+ 'agt.delete_agent_confirm': 'Supprimer l\'agent {name} ? Les régions qui l\'utilisent indiquent que l\'assistant n\'est pas configuré.',
5412
+ 'agt.sql_help': 'Un SELECT avec les paramètres comme valeurs liées :NAME (et :APP_USER, éléments). S\'exécute avec le rôle de base de données de l\'application (droits et sécurité au niveau des lignes s\'appliquent) dans une transaction en lecture seule.',
5413
+ 'agt.delete_tool_confirm': 'Supprimer l\'outil {name} ?',
5414
+ 'agt.whole_number': '{what} est un nombre entier.',
5415
+ 'agt.f_steps': 'Étapes maximum',
5416
+ 'agt.f_tokens': 'Jetons de sortie maximum',
5417
+ 'agt.f_rows': 'Lignes maximum',
5418
+ 'agt.f_timeout': 'Limite de temps',
5419
+ 'agt.intro': 'Un agent répond dans une région d\'assistant IA et n\'agit qu\'au moyen des outils que vous lui donnez : requêtes SQL (lecture seule, avec le rôle de base de données de l\'application, donc la sécurité au niveau des lignes s\'applique), fonctions PL/pgSQL, sources de données REST, actions JavaScript dans le navigateur et liens vers des pages (pgkiln construit l\'URL et sa somme de contrôle, seulement pour les pages que l\'utilisateur peut ouvrir). Un outil Retrieve donne à l\'agent les lignes d\'une configuration de recherche qui correspondent à un texte par le sens (RAG), toujours avec le rôle de l\'application. Ce que tapent les utilisateurs et les résultats des outils vont au service IA de l\'agent. {usage} liste chaque appel d\'outil.',
5420
+ 'agt.agent_gone': 'L\'agent {name} n\'existe plus.',
5421
+ 'agt.agent_exists': 'Un agent {name} existe déjà.',
5422
+ 'agt.no_rest_source': 'Il n\'y a pas de source de données REST {name}.',
5423
+ 'agt.no_search_config': 'Il n\'y a pas de configuration de recherche {name} avec une source table ou SQL.',
5424
+ 'agt.no_page': 'Il n\'y a pas de page {n}.',
5425
+ 'agt.tool_gone': 'L\'outil {name} n\'existe plus.',
5426
+ 'agt.tool_used': 'L\'outil {name} est utilisé par {agents} : retirez-le d\'abord de ces agents.',
5427
+ // ------------------------------------------------------------ Data Reporter settings (sprint 164)
5428
+ 'drep.static_id': 'Id statique',
5429
+ 'drep.label': 'Libellé',
5430
+ 'drep.description_shown_to_users': 'Description (visible des utilisateurs)',
5431
+ 'drep.app_builder_data_reporter': 'App Builder → Data Reporter',
5432
+ 'drep.remove_this_data_source_users': 'Retirer cette source de données (les rapports des utilisateurs dessus cessent de fonctionner)',
5433
+ 'drep.offer': 'Proposer',
5434
+ 'drep.column': 'Colonne',
5435
+ 'drep.format_mask': 'Masque de format',
5436
+ 'drep.not_in_the_table': 'absente de la table',
5437
+ 'drep.data_reporter_settings': 'Paramètres du Data Reporter',
5438
+ 'drep.signed_in_users_build_their': 'Les utilisateurs connectés construisent leurs propres rapports à partir des sources de données ci-dessous : ils choisissent des colonnes proposées, filtrent, regroupent avec des totaux, trient et tracent un graphique, et enregistrent des rapports privés ou partagés. Les rapports s\'exécutent avec le rôle de base de données de l\'application : droits et sécurité au niveau des lignes s\'appliquent.',
5439
+ 'drep.reports': 'Rapports',
5440
+ 'drep.who_may_share_reports': 'Qui peut partager des rapports',
5441
+ 'drep.rows_per_page': 'Lignes par page',
5442
+ 'drep.who_may_build_and_save': 'Qui peut créer et enregistrer des rapports',
5443
+ 'drep.others_only_run_shared_reports': 'Les autres n\'exécutent que des rapports partagés.',
5444
+ 'drep.who_may_unpublish_and_delete': 'Qui peut dépublier et supprimer les rapports de n\'importe qui',
5445
+ 'drep.shared_reports_are_published_a': 'Les rapports partagés sont publiés : une URL stable, des épingles',
5446
+ 'drep.text_when_there_are_no': 'Texte quand il n\'y a pas de lignes',
5447
+ 'drep.add_a_data_source': 'Ajouter une source de données',
5448
+ 'drep.table_or_view': 'Table ou vue',
5449
+ 'drep.all_columns_are_offered_at': 'Toutes les colonnes sont proposées au départ (sauf les binaires) ; décochez celles que les utilisateurs ne doivent pas voir. Préférez une vue qui montre exactement ce sur quoi les utilisateurs métier peuvent faire des rapports.',
5450
+ 'drep.or_a_dataset_of_the': 'Ou un jeu de données de l\'espace de travail',
5451
+ 'drep.save_data_reporter_settings': 'Enregistrer les paramètres du Data Reporter',
5452
+ 'drep.the_dataset_s': 'ceux du jeu de données',
5453
+ 'drep.no_data_found': 'Aucune donnée trouvée',
5454
+ 'drep.from_the_name': 'd\'après le nom',
5455
+ 'drep.every_signed_in_user': 'Tout utilisateur connecté',
5456
+ 'drep.nobody_private_reports_only': 'Personne (rapports privés uniquement)',
5457
+ 'drep.every_user': 'Tout utilisateur',
5458
+ 'drep.nobody': 'Personne',
5459
+ 'drep.settings_saved': 'Paramètres enregistrés.',
5460
+ 'drep.choose_a_table_or_view': 'Choisissez une table ou une vue pour la nouvelle source de données.',
5461
+ 'drep.choose_one_of_the_workspace': 'Choisissez l\'un des jeux de données de l\'espace de travail.',
5462
+ 'drep.no_columns': 'La source de données {id} ne propose aucune colonne.',
5463
+ 'drep.exists': 'Il existe déjà une source de données {id}.',
5464
+ 'drep.dataset_note': 'Ses tables, colonnes, libellés, masques et filtre de lignes sont ceux du jeu de données : {link}.',
5465
+ 'drep.aria_offer': 'Proposer {column}',
5466
+ 'drep.aria_label': 'Libellé de {column}',
5467
+ 'drep.aria_format': 'Masque de format de {column}',
5468
+ // ------------------------------------------------------------ Globalization (sprint 164)
5469
+ 'glob.for_texts_pgkiln_derives_itself': 'Pour les textes que pgkiln déduit lui-même, comme les en-têtes de colonne tirés des noms de colonne (`hiredate` → « Hiredate »).',
5470
+ 'glob.use_them_in_sql_with': 'Utilisez-les en SQL avec `meta.message(\'NAME\', param0, …)` (marqueurs `%0`…`%9`) et dans les textes comme `&APP_TEXT$NAME.`, comme APEX_LANG.MESSAGE. Un message nommé comme un texte de pgkiln (p. ex. `login.title`, `report.no_data`) le remplace. Les langues manquantes reviennent à la langue principale.',
5471
+ 'glob.automatic_time_zone': 'Fuseau horaire automatique',
5472
+ 'glob.each_user_sees_times_in': 'Chaque utilisateur voit les heures dans son propre fuseau : celui du navigateur (envoyé une fois par session), ou celui qu\'il choisit dans Mon compte. Sans JavaScript, le fuseau de l\'application s\'applique (APEX : Automatic Time Zone).',
5473
+ 'glob.shared_components': 'Composants partagés',
5474
+ 'glob.none_yet': 'aucune pour l\'instant',
5475
+ 'glob.change_languages_in_settings': 'Modifier les langues dans Paramètres',
5476
+ 'glob.give_translators_an_xliff_file': 'Donnez aux traducteurs un fichier XLIFF (comme dans APEX) ou un fichier CSV, puis importez-le ici. Les cibles vides sont ignorées à l\'import.',
5477
+ 'glob.file': 'Fichier',
5478
+ 'glob.or_paste_xliff_csv': '…ou collez XLIFF / CSV',
5479
+ 'glob.used_in': 'Utilisé dans',
5480
+ 'glob.save_translations': 'Enregistrer les traductions',
5481
+ 'glob.add_a_text': 'Ajouter un texte',
5482
+ 'glob.add': 'Ajouter',
5483
+ 'glob.settings_globalization': 'Paramètres → Mondialisation',
5484
+ 'glob.name': 'Nom',
5485
+ 'glob.language': 'Langue',
5486
+ 'glob.text': 'Texte',
5487
+ 'glob.save': 'Enregistrer',
5488
+ 'glob.delete': 'Supprimer',
5489
+ 'glob.no_text_messages': 'Aucun message texte.',
5490
+ 'glob.add_a_text_message': 'Ajouter un message texte',
5491
+ 'glob.add_message': 'Ajouter le message',
5492
+ 'glob.currency': 'Devise',
5493
+ 'glob.time_zone': 'Fuseau horaire',
5494
+ 'glob.e_g_eur_empty_per': 'p. ex. EUR (vide : par langue)',
5495
+ 'glob.iso_4217_code_for_l': 'Code ISO 4217 pour L (symbole) et C (code) dans les masques de format numérique comme FML999G990D00. Un message texte FORMAT.CURRENCY le remplace par langue.',
5496
+ 'glob.e_g_greeting_or_login': 'p. ex. GREETING ou login.title',
5497
+ 'glob.hello_0': 'Bonjour %0 !',
5498
+ 'glob.names_start_with_a_letter': 'Les noms commencent par une lettre et contiennent des lettres, chiffres, _ . $ ou -.',
5499
+ 'glob.queries_run_in_this_time': 'Les requêtes s\'exécutent dans ce fuseau (SET LOCAL timezone), si bien que les valeurs timestamp with time zone s\'y affichent.',
5500
+ 'glob.text_message_saved': 'Message texte enregistré.',
5501
+ 'glob.text_message_deleted': 'Message texte supprimé.',
5502
+ 'glob.currency_a_three_letter_iso': 'Devise : un code ISO 4217 de trois lettres comme EUR ou USD.',
5503
+ 'glob.languages': 'Langues',
5504
+ 'glob.export_and_import': 'Export et import',
5505
+ 'glob.translate': 'Traduire',
5506
+ 'glob.text_messages': 'Messages texte',
5507
+ 'glob.app_builder': 'App Builder',
5508
+ 'glob.globalization': 'Mondialisation',
5509
+ 'glob.unknown_zone': 'Fuseau horaire inconnu « {zone} ».',
5510
+ 'glob.primary': 'Langue principale : {lang}',
5511
+ 'glob.derived': 'Langue déduite de : {from}',
5512
+ 'glob.from.browser': 'le navigateur',
5513
+ 'glob.from.user': 'la préférence de l\'utilisateur, puis le navigateur',
5514
+ 'glob.from.primary': 'toujours la langue principale',
5515
+ 'glob.translated_into': 'Traduit en : {langs}',
5516
+ 'glob.builtin': 'Les textes propres à pgkiln (connexion, rapports, messages) existent en {list} et {last} ; remplacez n\'importe lequel par un message texte du même nom.',
5517
+ 'glob.translate_into': 'Traduire en {lang}',
5518
+ 'glob.aria_translation': 'Traduction de : {text}',
5519
+ 'glob.text_lang': 'Texte ({lang})',
5520
+ 'glob.translation_lang': 'Traduction ({lang})',
5521
+ 'glob.add_lang_first': 'Ajoutez d\'abord une langue traduite dans {link} (par exemple {example}).',
5522
+ 'glob.aria_text_of': 'Texte de {name} ({lang})',
5523
+ 'glob.delete_confirm': 'Supprimer {name} ({lang}) ?',
5524
+ 'glob.import_failed': 'Échec de l\'import : {error}',
5525
+ // ------------------------------------------------------------ Remote databases (sprint 164)
5526
+ 'rdb.grant_to_the_applications_database': 'Accorder aux rôles de base de données des applications',
5527
+ 'rdb.no_application_has_a_database': 'Aucune application n\'a encore de rôle de base de données (Paramètres de l\'application → Rôle de base de données).',
5528
+ 'rdb.also_insert_update_and_delete': 'Aussi INSERT, UPDATE et DELETE (sinon SELECT seulement)',
5529
+ 'rdb.test_the_connection': 'Tester la connexion',
5530
+ 'rdb.cancel': 'Annuler',
5531
+ 'rdb.another_postgresql_database_s_tables': 'Les tables d\'une autre base PostgreSQL comme tables étrangères (postgres_fdw) dans un schéma local : régions, rapports, formulaires et listes de valeurs les utilisent comme les tables propres de l\'application, avec son rôle de base de données et les droits accordés ici.',
5532
+ 'rdb.postgres_fdw_is_not_installed': 'postgres_fdw n\'est pas installé dans cette base de données.',
5533
+ 'rdb.create_extension_postgres_fdw': 'Créer l\'extension postgres_fdw',
5534
+ 'rdb.name': 'Nom',
5535
+ 'rdb.connection': 'Connexion',
5536
+ 'rdb.local_schema': 'Schéma local',
5537
+ 'rdb.tables': 'Tables',
5538
+ 'rdb.granted_to': 'Accordé à',
5539
+ 'rdb.imported': 'Importé',
5540
+ 'rdb.actions': 'Actions',
5541
+ 'rdb.edit': 'Modifier',
5542
+ 'rdb.import_again': 'Réimporter',
5543
+ 'rdb.delete': 'Supprimer',
5544
+ 'rdb.no_remote_databases_yet': 'Aucune base de données distante pour l\'instant.',
5545
+ 'rdb.description': 'Description',
5546
+ 'rdb.host': 'Hôte',
5547
+ 'rdb.port': 'Port',
5548
+ 'rdb.database': 'Base de données',
5549
+ 'rdb.user': 'Utilisateur',
5550
+ 'rdb.password': 'Mot de passe',
5551
+ 'rdb.remote_schema': 'Schéma distant',
5552
+ 'rdb.a_static_id_e_g': 'Un id statique, p. ex. CRM. Le serveur est pgkiln_rdb_<name>.',
5553
+ 'rdb.as_the_database_server_reaches': 'Telle que le serveur de base de données la joint (c\'est lui qui se connecte, pas pgkiln).',
5554
+ 'rdb.a_user_of_the_remote': 'Un utilisateur de la base distante : ce qu\'il peut y lire ou modifier, les applications le peuvent.',
5555
+ 'rdb.a_new_schema_here_for': 'Un nouveau schéma ici pour les tables étrangères, p. ex. crm : les régions interrogent crm.<table>.',
5556
+ 'rdb.add_a_remote_database': 'Ajouter une base de données distante',
5557
+ 'rdb.kept_by_postgresql_in_the': 'Conservé par PostgreSQL dans le user mapping et jamais affiché ; saisissez-en un nouveau pour le remplacer.',
5558
+ 'rdb.kept_by_postgresql_in_the_2': 'Conservé par PostgreSQL dans le user mapping (pgkiln ne le stocke jamais).',
5559
+ 'rdb.save_and_import_again': 'Enregistrer et réimporter',
5560
+ 'rdb.add_and_import': 'Ajouter et importer',
5561
+ 'rdb.the_test_failed': 'Le test a échoué',
5562
+ 'rdb.nothing_was_changed': 'Rien n\'a été modifié',
5563
+ 'rdb.the_postgres_fdw_extension_is': 'L\'extension postgres_fdw est installée.',
5564
+ 'rdb.no_such_remote_database': 'Base de données distante introuvable.',
5565
+ 'rdb.the_password_has_at_most': 'Le mot de passe fait au plus 1000 caractères.',
5566
+ 'rdb.renaming_it_or_moving_it': 'La renommer, ou la déplacer vers un autre schéma local, demande de nouveau le mot de passe.',
5567
+ 'rdb.rolled_back': 'annulé',
5568
+ 'rdb.remote_databases': 'Bases de données distantes',
5569
+ 'rdb.app_builder': 'App Builder',
5570
+ 'rdb.workspace_utilities': 'Utilitaires de l\'espace de travail',
5571
+ 'rdb.title': 'Bases de données distantes',
5572
+ 'rdb.edit_named': 'Modifier {name}',
5573
+ 'rdb.tables_help': 'Tables et vues distantes à importer, séparées par des virgules ({n} au plus) ; vide : toutes celles du schéma distant.',
5574
+ 'rdb.fdw_superuser': 'Un superutilisateur exécute {create} et {grant} le rôle propriétaire de pgkiln.',
5575
+ 'rdb.fdw_missing': 'Le serveur a besoin du paquet contrib de PostgreSQL, puis un superutilisateur exécute {create} et {grant} le rôle propriétaire de pgkiln.',
5576
+ 'rdb.delete_confirm': 'Supprimer {name} ? Son schéma {schema} et ses tables étrangères sont supprimés.',
5577
+ 'rdb.test_ok': 'La connexion fonctionne : {n} table(s) seraient importées dans {schema}. Rien n\'a été enregistré.',
5578
+ 'rdb.name_taken': 'Il existe déjà une base de données distante {name}.',
5579
+ 'rdb.schema_taken': 'Une autre base de données distante utilise le schéma {schema}.',
5580
+ // ------------------------------------------------------------ Debug messages and installation log (sprint 164)
5581
+ 'diag.no_runs_recorded_yet_runs': 'Aucune exécution enregistrée pour l\'instant : elles sont journalisées depuis la version 0.25 (chaque `db:migrate` ou `pgkiln migrate` qui applique ou échoue un fichier). Les migrations appliquées ci-dessous montrent quand chaque fichier a été appliqué.',
5582
+ 'diag.save': 'Enregistrer',
5583
+ 'diag.page': 'Page',
5584
+ 'diag.user': 'Utilisateur',
5585
+ 'diag.only_with_errors_or_warnings': 'Seulement avec erreurs ou avertissements',
5586
+ 'diag.when': 'Quand',
5587
+ 'diag.request': 'Requête',
5588
+ 'diag.status': 'Statut',
5589
+ 'diag.entries': 'Entrées',
5590
+ 'diag.view': 'Voir',
5591
+ 'diag.older_page_views': 'Affichages de page plus anciens',
5592
+ 'diag.back_to_activity': 'Retour à l\'activité',
5593
+ 'diag.total_time': 'temps total',
5594
+ 'diag.http_status': 'Statut HTTP',
5595
+ 'diag.previous': '◂ Précédent',
5596
+ 'diag.all_page_views': 'Tous les affichages de page',
5597
+ 'diag.next': 'Suivant ▸',
5598
+ 'diag.elapsed_ms': 'Écoulé ms',
5599
+ 'diag.duration_ms': 'Durée ms',
5600
+ 'diag.until_next': 'Jusqu\'au suivant',
5601
+ 'diag.level': 'Niveau',
5602
+ 'diag.component': 'Composant',
5603
+ 'diag.message': 'Message',
5604
+ 'diag.installation': 'Installation',
5605
+ 'diag.only_administrators_see_the_installation': 'Seuls les administrateurs voient le journal d\'installation.',
5606
+ 'diag.pgkiln_version_of_this_server': 'version de pgkiln de ce serveur',
5607
+ 'diag.migrations_not_applied': 'migrations non appliquées',
5608
+ 'diag.started': 'Démarré',
5609
+ 'diag.kind': 'Type',
5610
+ 'diag.version': 'Version',
5611
+ 'diag.files': 'Fichiers',
5612
+ 'diag.applied': 'Appliqué',
5613
+ 'diag.by': 'Par',
5614
+ 'diag.file': 'Fichier',
5615
+ 'diag.filter': 'Filtrer',
5616
+ 'diag.delete_all_debug_messages': 'Supprimer tous les messages de débogage',
5617
+ 'diag.debug_level': 'Niveau de débogage',
5618
+ 'diag.keep_messages_for': 'Conserver les messages pendant',
5619
+ 'diag.debug_messages_off': 'Messages de débogage désactivés.',
5620
+ 'diag.level_9_records_posted_item': 'Le niveau 9 enregistre les valeurs d\'éléments envoyées (jamais celles des éléments mot de passe).',
5621
+ 'diag.choose_a_debug_level_and': 'Choisissez un niveau de débogage et une conservation de 1 à 90 jours.',
5622
+ 'diag.page_views': 'Affichages de page',
5623
+ 'diag.install_and_upgrade_runs': 'Exécutions d\'installation et de mise à niveau',
5624
+ 'diag.applied_migrations': 'Migrations appliquées',
5625
+ 'diag.example_and_seed_scripts': 'Scripts d\'exemple et d\'amorçage',
5626
+ 'diag.app_builder': 'App Builder',
5627
+ 'diag.activity': 'Activité',
5628
+ 'diag.debug_messages': 'Messages de débogage',
5629
+ 'diag.workspace_utilities': 'Utilitaires de l\'espace de travail',
5630
+ 'diag.on': '{state} : chaque requête de cette application enregistre ses étapes avec leurs durées, et le SQL peut ajouter des messages avec {fn}. Cela coûte du temps et de l\'espace : désactivez-le quand vous avez fini.',
5631
+ 'diag.on_state': 'Les messages de débogage sont activés (niveau {level})',
5632
+ 'diag.off': 'Les messages de débogage sont désactivés : les requêtes n\'enregistrent rien et {fn} rend la main aussitôt. Choisissez un niveau pour enregistrer les requêtes de cette application.',
5633
+ 'diag.delete_confirm': 'Supprimer tous les messages de débogage de {app} ?',
5634
+ 'diag.title': 'Messages de débogage · {app}',
5635
+ 'diag.page_view': 'Affichage de page {id}',
5636
+ 'diag.view_title': 'Débogage {id} · {app}',
5637
+ 'diag.on_flash': 'Messages de débogage activés (niveau {level}).',
5638
+ 'diag.applied_n': 'migrations appliquées',
5639
+ 'diag.applied_latest': 'migrations appliquées, la dernière {name}',
5640
+ 'diag.missing': 'Il manque à cette base {n} migrations de ce serveur ({list}). Exécutez {npm} ou {cli}.',
5641
+ 'diag.missing_1': 'Il manque à cette base 1 migration de ce serveur ({list}). Exécutez {npm} ou {cli}.',
5642
+ // ------------------------------------------------------------ Login page and two-factor settings (sprint 164)
5643
+ 'lgp.not_offered_yet': 'Pas encore proposé :',
5644
+ 'lgp.login_page': 'Page de connexion',
5645
+ 'lgp.login': 'Connexion',
5646
+ 'lgp.minimal': 'Minimal',
5647
+ 'lgp.create_a_login_page': 'Créer une page de connexion',
5648
+ 'lgp.offer_forgot_password': 'Proposer « Mot de passe oublié ? »',
5649
+ 'lgp.second_step': 'Seconde étape',
5650
+ 'lgp.my_account': 'Mon compte',
5651
+ 'lgp.not_available_yet': 'Pas encore disponible :',
5652
+ 'lgp.required_for_roles': 'Obligatoire pour les rôles',
5653
+ 'lgp.required_for_some_roles': 'Obligatoire pour certains rôles',
5654
+ 'lgp.offer_a_code_by_e': 'Proposer un code par e-mail',
5655
+ 'lgp.multi_factor_sign_in': 'Connexion multifacteur',
5656
+ 'lgp.second_step_within_minutes': 'Seconde étape dans (minutes)',
5657
+ 'lgp.admin_manager': 'admin, manager',
5658
+ 'lgp.the_built_in_sign_in': '- la page de connexion intégrée -',
5659
+ 'lgp.off': 'Désactivé',
5660
+ 'lgp.optional_users_may_add_an': 'Facultatif (les utilisateurs peuvent ajouter une app)',
5661
+ 'lgp.required': 'Obligatoire',
5662
+ 'lgp.two_factor_sign_in_a': 'Connexion à deux facteurs : un nom de rôle est trop long.',
5663
+ 'lgp.two_factor_sign_in_name': 'Connexion à deux facteurs : nommez les rôles qui doivent l\'utiliser.',
5664
+ 'lgp.two_factor_sign_in_the': 'Connexion à deux facteurs : le serveur a besoin de PGKILN_SECRET_KEY avant de pouvoir l\'exiger.',
5665
+ 'lgp.requires_signin': '{page} (exige une connexion : inutilisable)',
5666
+ 'lgp.page_help': 'Une page publique avec une région {login} (APEX : la page de connexion) ; le modèle de page {minimal} masque l\'en-tête et la navigation.',
5667
+ 'lgp.reset_help': 'Les utilisateurs ayant un mot de passe et une adresse e-mail dans l\'annuaire reçoivent un lien à usage unique, valable 30 minutes, pour choisir un nouveau mot de passe. Uniquement pour les mots de passe propres à l\'annuaire.',
5668
+ 'lgp.sent_through': 'Envoyé via le service de messagerie {service} en tant que {from}.',
5669
+ 'lgp.mfa_help': 'Après le mot de passe ou un annuaire LDAP : un code d\'une app d\'authentification, une passkey ou un code de récupération, ajoutés dans {account} ou lors de la connexion.',
5670
+ 'lgp.needs_key': '{na} le serveur a besoin de {key} pour conserver les secrets des apps.',
5671
+ 'lgp.roles_help': 'Avec {some} : les utilisateurs ayant l\'un de ces rôles doivent l\'utiliser, les autres peuvent.',
5672
+ 'lgp.email_help': 'Les utilisateurs qui ont déjà une app ou une passkey peuvent recevoir un code à usage unique par e-mail (valable {minutes} minutes, {per_hour} par heure au plus) ; jamais comme seul facteur.',
5673
+ 'lgp.passkeys_note': 'Les passkeys exigent l\'application sur un nom d\'hôte, pas une adresse IP. Les fournisseurs d\'identité demandent leur propre second facteur (voir {mfa} du fournisseur). Pour redemander avant l\'ouverture d\'une page (step-up), donnez à son schéma d\'autorisation {within} dans Composants partagés.',
5674
+ 'lgp.no_page': 'Page de connexion : il n\'y a pas de page {n}.',
5675
+ 'lgp.created': 'Page {n} « Login » créée et définie comme page de connexion. Ajoutez des régions autour du formulaire de connexion dans le Page Designer.',
5676
+ // ------------------------------------------------------------ Create page wizards (sprint 164)
5677
+ 'wiz.kind.report_form': 'Rapport et formulaire',
5678
+ 'wiz.kind_help.report_form': 'Un rapport interactif et un formulaire modal pour créer, modifier et supprimer.',
5679
+ 'wiz.kind.grid': 'Grille interactive',
5680
+ 'wiz.kind_help.grid': 'Une page avec une grille modifiable.',
5681
+ 'wiz.kind.form': 'Formulaire',
5682
+ 'wiz.kind_help.form': 'Un formulaire pour une ligne : créer, modifier et supprimer, puis retour à la page de votre choix.',
5683
+ 'wiz.kind.cards': 'Cartes',
5684
+ 'wiz.kind_help.cards': 'Une carte par ligne avec titre, sous-titre, corps et badge, éventuellement liée à un formulaire.',
5685
+ 'wiz.kind.calendar': 'Calendrier',
5686
+ 'wiz.kind_help.calendar': 'Les lignes avec une date comme événements en vues mois, semaine, jour et liste.',
5687
+ 'wiz.kind.chart': 'Graphique',
5688
+ 'wiz.kind_help.chart': 'Le nombre de lignes, ou une somme, moyenne, minimum ou maximum, par libellé.',
5689
+ 'wiz.kind.map': 'Carte',
5690
+ 'wiz.kind_help.map': 'Les lignes avec une position comme marqueurs sur une carte, avec une liste filtrée par la zone de la carte.',
5691
+ 'wiz.kind.facets': 'Recherche à facettes',
5692
+ 'wiz.kind_help.facets': 'Un rapport avec un panneau de filtres : valeurs avec effectifs, plages et un champ de recherche.',
5693
+ 'wiz.kind.master_detail': 'Maître-détail',
5694
+ 'wiz.kind_help.master_detail': 'Une grille de la table et, en dessous, une grille modifiable des détails de la ligne sélectionnée.',
5695
+ 'wiz.kind.report': 'Rapport interactif',
5696
+ 'wiz.kind_help.report': 'Un rapport interactif de la table sur sa propre page, éventuellement avec une page de formulaire modal.',
5697
+ 'wiz.kind.smart_filters': 'Filtres intelligents',
5698
+ 'wiz.kind_help.smart_filters': 'Un rapport interactif avec, au-dessus, un champ de recherche qui suggère des filtres (puces) à partir des colonnes.',
5699
+ 'wiz.kind.search': 'Page de recherche',
5700
+ 'wiz.kind_help.search': 'Une région de recherche sur les configurations de recherche de l\'application, ou une nouvelle sur une table.',
5701
+ 'wiz.kind.data_load': 'Chargement de données',
5702
+ 'wiz.kind_help.data_load': 'Une définition de chargement pour la table et une page où les utilisateurs envoient un fichier CSV, Excel, JSON ou XML.',
5703
+ 'wiz.kind.tree': 'Arbre',
5704
+ 'wiz.kind_help.tree': 'Les lignes en arbre : un id, un parent (via une clé étrangère vers la table elle-même) et un libellé.',
5705
+ 'wiz.kind.timeline': 'Chronologie',
5706
+ 'wiz.kind_help.timeline': 'Les lignes comme événements sur une ligne verticale : quand, qui, un titre et un texte (composant de modèle Timeline).',
5707
+ 'wiz.kind.media_list': 'Liste média',
5708
+ 'wiz.kind_help.media_list': 'Les lignes avec initiales, titre, description et badge (composant de modèle Media list).',
5709
+ 'wiz.kind.content_row': 'Ligne de contenu',
5710
+ 'wiz.kind_help.content_row': 'Les lignes avec initiales, titre et description, et à droite un texte secondaire et un badge (composant de modèle Content row).',
5711
+ 'wiz.kind.comments': 'Commentaires',
5712
+ 'wiz.kind_help.comments': 'Les lignes comme conversation : qui a écrit quoi et quand (composant de modèle Comments).',
5713
+ 'wiz.kind.dashboard': 'Tableau de bord',
5714
+ 'wiz.kind_help.dashboard': 'Des graphiques des tables de l\'application, choisis d\'après les données comme le tableau de bord d\'une nouvelle application.',
5715
+ 'wiz.kind.wizard': 'Assistant',
5716
+ 'wiz.kind_help.wizard': 'Un formulaire en plusieurs étapes, une page par étape avec liste de progression, Précédent et Suivant ; Terminer ajoute la ligne.',
5717
+ 'wiz.kind.tasks': 'Liste unifiée des tâches',
5718
+ 'wiz.kind_help.tasks': 'Les tâches d\'approbation et d\'action de l\'utilisateur connecté (une région liste de tâches).',
5719
+ 'wiz.kind.workflows': 'Console des workflows',
5720
+ 'wiz.kind_help.workflows': 'Les workflows que l\'utilisateur a lancés ou administre, avec leur état et leur historique.',
5721
+ 'wiz.kind_on': '{kind} sur {table}',
5722
+ 'wiz.search_configurations': 'Configurations de recherche',
5723
+ 'wiz.shared_components_search_configurations': 'Composants partagés → Configurations de recherche',
5724
+ 'wiz.tasks_come_from_task_definitions': 'Les tâches viennent des définitions de tâches (Composants partagés → Définitions de tâches) et des approbations lancées dans des processus ou des workflows.',
5725
+ 'wiz.tables': 'Tables',
5726
+ 'wiz.a_chart_per_table_at': 'Un graphique par table (six au plus) des lignes par ligne parente ou par valeur répétée, lu dans les données ; les tables avec sécurité au niveau des lignes sont écartées.',
5727
+ 'wiz.the_application_s_database_role': 'Le rôle de base de données de l\'application ne peut lire aucune table.',
5728
+ 'wiz.cancel': 'Annuler',
5729
+ 'wiz.create_page': 'Créer la page',
5730
+ 'wiz.form_page': 'Page de formulaire',
5731
+ 'wiz.page_mode': 'Mode de page',
5732
+ 'wiz.after_saving_or_cancelling_go': 'Après enregistrement ou annulation, aller à la page',
5733
+ 'wiz.title': 'Titre',
5734
+ 'wiz.subtitle': 'Sous-titre',
5735
+ 'wiz.body': 'Corps',
5736
+ 'wiz.badge': 'Badge',
5737
+ 'wiz.start_date': 'Date de début',
5738
+ 'wiz.end_date': 'Date de fin',
5739
+ 'wiz.event_title': 'Titre de l\'événement',
5740
+ 'wiz.drag_and_drop': 'Glisser-déposer',
5741
+ 'wiz.chart_type': 'Type de graphique',
5742
+ 'wiz.label_one_bar_slice_or': 'Libellé (une barre, part ou point par valeur)',
5743
+ 'wiz.value': 'Valeur',
5744
+ 'wiz.of_column': 'De la colonne',
5745
+ 'wiz.position': 'Position',
5746
+ 'wiz.latitude': 'Latitude',
5747
+ 'wiz.longitude': 'Longitude',
5748
+ 'wiz.popup_title': 'Titre de la bulle',
5749
+ 'wiz.popup_text': 'Texte de la bulle',
5750
+ 'wiz.a_list_below_the_map': 'Une liste sous la carte',
5751
+ 'wiz.a_search_field_above_the': 'Un champ de recherche au-dessus des facettes',
5752
+ 'wiz.node_id': 'Id du nœud',
5753
+ 'wiz.parent': 'Parent',
5754
+ 'wiz.label': 'Libellé',
5755
+ 'wiz.levels_open_at_first': 'Niveaux ouverts au départ',
5756
+ 'wiz.when': 'Quand',
5757
+ 'wiz.who': 'Qui',
5758
+ 'wiz.text': 'Texte',
5759
+ 'wiz.description': 'Description',
5760
+ 'wiz.secondary_text_on_the_right': 'Texte secondaire (à droite)',
5761
+ 'wiz.who_wrote_it': 'Qui l\'a écrit',
5762
+ 'wiz.comment': 'Commentaire',
5763
+ 'wiz.data_load_definition': 'Définition de chargement',
5764
+ 'wiz.mode': 'Mode',
5765
+ 'wiz.skip_rows_with_errors': 'Ignorer les lignes en erreur',
5766
+ 'wiz.steps': 'Étapes',
5767
+ 'wiz.after_finish_or_cancel_go': 'Après Terminer ou Annuler, aller à la page',
5768
+ 'wiz.and_a_new_configuration_on': 'Et une nouvelle configuration sur',
5769
+ 'wiz.show': 'Afficher',
5770
+ 'wiz.also_completed_tasks': 'Aussi les tâches terminées',
5771
+ 'wiz.detail_table': 'Table de détail',
5772
+ 'wiz.page_number': 'Numéro de page',
5773
+ 'wiz.name': 'Nom',
5774
+ 'wiz.menu_icon': 'Icône de menu',
5775
+ 'wiz.add_a_navigation_entry': 'Ajouter une entrée de navigation',
5776
+ 'wiz.the_modal_form_page_opened': 'La page de formulaire modal ouverte depuis le rapport.',
5777
+ 'wiz.cancel_create_apply_changes_and': 'Annuler, Créer, Appliquer les modifications et Supprimer y reviennent.',
5778
+ 'wiz.one_page_per_step_numbered': 'Une page par étape, numérotée à partir du numéro de page ; les colonnes sont réparties dans l\'ordre.',
5779
+ 'wiz.the_page_title_and_the': 'Le titre de la page et l\'entrée de navigation.',
5780
+ 'wiz.my_tasks_to_act_on': 'Mes tâches (à traiter ou à prendre)',
5781
+ 'wiz.tasks_i_requested': 'Tâches que j\'ai demandées',
5782
+ 'wiz.tasks_i_administer': 'Tâches que j\'administre',
5783
+ 'wiz.count': 'Nombre',
5784
+ 'wiz.sum': 'Somme',
5785
+ 'wiz.average': 'Moyenne',
5786
+ 'wiz.minimum': 'Minimum',
5787
+ 'wiz.maximum': 'Maximum',
5788
+ 'wiz.none': '- aucune -',
5789
+ 'wiz.normal_page': 'Page normale',
5790
+ 'wiz.modal_dialog': 'Boîte de dialogue modale',
5791
+ 'wiz.append_add_the_rows': 'Ajouter : ajouter les lignes',
5792
+ 'wiz.merge_update_rows_with_the': 'Fusionner : mettre à jour les lignes de même clé, ajouter les autres',
5793
+ 'wiz.replace_delete_all_rows_first': 'Remplacer : supprimer d\'abord toutes les lignes',
5794
+ 'wiz.the_workflows_the_user_started': 'Les workflows lancés par l\'utilisateur',
5795
+ 'wiz.the_workflows_the_user_administers': 'Les workflows administrés par l\'utilisateur',
5796
+ 'wiz.choose_a_table_or_view': 'Choisissez une table ou une vue.',
5797
+ 'wiz.choose_a_page_type': 'Choisissez un type de page.',
5798
+ 'wiz.the_proposals_come_from_the': 'Les propositions viennent des colonnes, de la clé et des clés étrangères de la table ; modifiez-les ci-dessous.',
5799
+ 'wiz.users_who_see_the_calendar': 'Les utilisateurs qui voient le calendrier peuvent déplacer des événements vers un autre jour ou une autre heure (un UPDATE des colonnes de début et de fin avec le rôle de l\'app ; la sécurité au niveau des lignes s\'applique). Définissez une autorisation dans "move_authz" de la région pour le limiter.',
5800
+ 'wiz.count_empty_counts_the_rows': 'Nombre : vide compte les lignes. Somme, moyenne, minimum et maximum exigent une colonne numérique.',
5801
+ 'wiz.an_interactive_report_of_the': 'Un rapport interactif des mêmes lignes ; déplacer la carte propose « Afficher cette zone dans la liste ».',
5802
+ 'wiz.what_identifies_a_node_usually': 'Ce qui identifie un nœud : généralement la clé primaire.',
5803
+ 'wiz.the_column_with_the_parent': 'La colonne avec l\'id du nœud parent ; proposée d\'après une clé étrangère vers la table elle-même. Les lignes dont le parent n\'est pas dans la table forment le niveau supérieur.',
5804
+ 'wiz.the_events_come_newest_first': 'Les événements apparaissent du plus récent au plus ancien.',
5805
+ 'wiz.its_first_two_letters_are': 'Ses deux premières lettres sont les initiales.',
5806
+ 'wiz.the_newest_first': 'Les plus récents d\'abord.',
5807
+ 'wiz.load_the_good_rows_and': 'Charger les lignes correctes et lister les autres ; sinon rien n\'est chargé quand une ligne échoue.',
5808
+ 'wiz.searches_the_table_s_text': 'Cherche dans les colonnes texte de la table et affiche sa colonne nom (ou le premier texte) comme titre du résultat.',
5809
+ 'wiz.tables_with_a_foreign_key': 'Tables ayant une clé étrangère vers cette table. Sélectionner une ligne maître affiche ses détails ; les nouvelles lignes de détail reçoivent la clé du maître.',
5810
+ 'wiz.enter_a_page_number': 'Saisissez un numéro de page.',
5811
+ 'wiz.this_application_does_not_exist': 'Cette application n\'existe pas.',
5812
+ 'wiz.enter_the_form_page_number': 'Saisissez le numéro de la page de formulaire.',
5813
+ 'wiz.choose_at_least_one_table': 'Choisissez au moins une table que l\'application peut lire.',
5814
+ 'wiz.none_of_these_tables_has': 'Aucune de ces tables n\'a de colonne qui mérite un graphique (une clé étrangère ou des valeurs répétées).',
5815
+ 'wiz.app_builder': 'App Builder',
5816
+ 'wiz.col_columns': 'Colonnes',
5817
+ 'wiz.col_report_columns': 'Colonnes du rapport',
5818
+ 'wiz.col_facets': 'Facettes',
5819
+ 'wiz.col_filters': 'Filtres (suggérés dans le champ de recherche)',
5820
+ 'wiz.note_required': ', obligatoire : toujours incluse',
5821
+ 'wiz.note_select_list': ', une liste de sélection de {table}',
5822
+ 'wiz.note_key': ', clé : toujours incluse',
5823
+ 'wiz.note_with': ', avec {col}',
5824
+ 'wiz.note_values_of': ': valeurs de {col}',
5825
+ 'wiz.note_range': ': une plage (de / à)',
5826
+ 'wiz.note_counts': ': valeurs avec effectifs',
5827
+ 'wiz.note_ranges': ': plages',
5828
+ 'wiz.note_values': ': valeurs',
5829
+ 'wiz.form_page_ph': 'p. ex. {n} (vide : pas de formulaire)',
5830
+ 'wiz.return_home': 'vide : la page d\'accueil ({n})',
5831
+ 'wiz.return_this': 'vide : cette page',
5832
+ 'wiz.form_map': 'Une page de formulaire modal, liée depuis les bulles et la liste.',
5833
+ 'wiz.form_rows': 'Une page de formulaire modal, liée depuis chaque ligne, et un bouton Créer.',
5834
+ 'wiz.form_search': 'Avec une table : une page de formulaire modal vers laquelle pointe chaque résultat.',
5835
+ 'wiz.def_help': 'En majuscules, p. ex. ORDERS_LOAD. Une nouvelle définition pour {table} ; une définition existante de ce nom est utilisée telle quelle.',
5836
+ 'wiz.def_help_has': 'En majuscules, p. ex. ORDERS_LOAD. Une nouvelle définition pour {table} ; une définition existante de ce nom est utilisée telle quelle (cette application a {list}).',
5837
+ 'wiz.the_table': 'la table',
5838
+ 'wiz.no_search_configs': 'Cette application n\'a pas encore de configuration de recherche ({link}) : choisissez ci-dessous une table où chercher.',
5839
+ 'wiz.no_fk': 'Aucune table n\'a de clé étrangère vers {table} : une page maître-détail en a besoin.',
5840
+ 'wiz.back_choose': 'Retour pour choisir un autre type',
5841
+ 'wiz.back_choose_table': 'Retour pour choisir un autre type ou une autre table',
5842
+ 'wiz.no_pk': '{table} n\'a pas de clé primaire sur une seule colonne, dont ce type de page a besoin.',
5843
+ 'wiz.role_read_only': 'Le rôle de base de données {role} de l\'application peut lire {table} mais pas la modifier : accordez-lui les privilèges dont la page a besoin ({privs}).',
5844
+ 'wiz.role_no_access': 'Le rôle de base de données {role} de l\'application n\'a pas accès à {table} : accordez-lui les privilèges dont la page a besoin ({privs}).',
5845
+ 'wiz.privs_merge': 'select, insert, update, delete pour fusionner ou remplacer',
5846
+ 'wiz.page_title': 'Créer une page · {app}',
5847
+ 'wiz.created_pages': 'Pages {list} créées.',
5848
+ 'wiz.created_page': 'Page {n} créée.',
5849
+ 'wiz.created_pages_for': 'Pages {list} créées pour {table}. Vérifiez que le rôle de base de données de l\'app a des privilèges dessus.',
5850
+ 'wiz.created_page_for': 'Page {n} créée pour {table}. Vérifiez que le rôle de base de données de l\'app a des privilèges dessus.',
5851
+ // ------------------------------------------------------------ Create page and copy page (sprint 164)
5852
+ 'cpg.blank_page': 'Page vierge',
5853
+ 'cpg.an_empty_page_to_build': 'Une page vide à construire dans le Page Designer.',
5854
+ 'cpg.back': 'Retour',
5855
+ 'cpg.create_page': 'Créer une page',
5856
+ 'cpg.next': 'Suivant',
5857
+ 'cpg.choose_a_page_type_types': 'Choisissez un type de page. Les types sur une table la demandent ensuite ; chaque type propose ses réglages et ouvre la nouvelle page dans le Page Designer.',
5858
+ 'cpg.create_pages_with_ai': 'Créer des pages avec l\'IA',
5859
+ 'cpg.describe_the_pages_in_your': 'Décrivez les pages avec vos propres mots ; vérifiez les propositions avant leur création.',
5860
+ 'cpg.features_add_pages_and_settings': 'Les fonctionnalités ajoutent des pages et des réglages à l\'application. Chacune liste ce qu\'elle ajoute avant de créer quoi que ce soit ; une fonctionnalité installée est grisée.',
5861
+ 'cpg.installed': 'Installée',
5862
+ 'cpg.not_available': 'Non disponible',
5863
+ 'cpg.shared_components': 'Composants partagés',
5864
+ 'cpg.kind': 'Type',
5865
+ 'cpg.name': 'Nom',
5866
+ 'cpg.in_this_application': 'Dans cette application',
5867
+ 'cpg.the_page_uses_no_shared': 'La page n\'utilise aucun composant partagé.',
5868
+ 'cpg.copy_page': 'Copier la page',
5869
+ 'cpg.copy_a_page_of_this': 'Copiez une page de cette application ou d\'une autre application de l\'espace de travail, sous un nouveau numéro et un nouveau nom. Les composants partagés qu\'elle utilise (listes de valeurs, schémas d\'autorisation, listes…) sont associés à ceux de cette application ou copiés.',
5870
+ 'cpg.page_number': 'Numéro de page',
5871
+ 'cpg.page_mode': 'Mode de page',
5872
+ 'cpg.breadcrumb_parent': 'Parent du fil d\'Ariane',
5873
+ 'cpg.table_or_view': 'Table ou vue',
5874
+ 'cpg.new_page_number': 'Nouveau numéro de page',
5875
+ 'cpg.copy_from_application': 'Copier depuis l\'application',
5876
+ 'cpg.component': 'Composant',
5877
+ 'cpg.feature': 'Fonctionnalité',
5878
+ 'cpg.copy': 'Copie',
5879
+ 'cpg.normal_page': 'Page normale',
5880
+ 'cpg.modal_dialog': 'Boîte de dialogue modale',
5881
+ 'cpg.copy_it_into_this_application': 'La copier dans cette application',
5882
+ 'cpg.in_the_same_application_they': 'Dans la même application, ils restent tels quels ou pointent vers un autre du même type.',
5883
+ 'cpg.use_one_of_this_application': 'Utilisez l\'un de ceux de cette application, ou copiez-le depuis l\'autre application.',
5884
+ 'cpg.choose_an_application_of_this': 'Choisissez une application de cet espace de travail.',
5885
+ 'cpg.enter_a_page_number': 'Saisissez un numéro de page.',
5886
+ 'cpg.enter_a_name': 'Saisissez un nom.',
5887
+ 'cpg.create_page_as_copy': 'Créer une page par copie',
5888
+ 'cpg.app_builder': 'App Builder',
5889
+ 'cpg.page_title': 'Créer une page · {app}',
5890
+ 'cpg.copy_title': 'Copier une page · {app}',
5891
+ 'cpg.page_of': 'Page de {app}',
5892
+ 'cpg.use_name': 'Utiliser {name}',
5893
+ 'cpg.copy_intro': 'Page {n} {name} de {app} : ses régions, éléments, boutons, actions dynamiques, validations, processus, calculs et branchements. Les éléments nommés {prefix}… sont renommés avec le nouveau numéro, y compris là où le code de la page y fait référence.',
5894
+ 'cpg.refers_by_name': 'La page y fait référence par leur nom.',
5895
+ 'cpg.sql_runs_as': 'Son SQL s\'exécute avec le rôle de base de données {role} de cette application : accordez-lui ce que le rôle de {app} peut lire et modifier.',
5896
+ 'cpg.none': '(aucun)',
5897
+ 'cpg.copied': 'Page {n} « {name} » créée comme copie de la page {page}.',
5898
+ 'cpg.copied_from': 'Page {n} « {name} » créée comme copie de la page {page} de {app}.',
5899
+ 'cpg.k.authz_scheme': 'Schéma d\'autorisation',
5900
+ 'cpg.k.build_option': 'Option de build',
5901
+ 'cpg.k.lov': 'Liste de valeurs',
5902
+ 'cpg.k.list': 'Liste',
5903
+ 'cpg.k.template_component': 'Composant de modèle',
5904
+ 'cpg.k.search_config': 'Configuration de recherche',
5905
+ 'cpg.k.data_load_def': 'Définition de chargement',
5906
+ // ------------------------------------------------------------ Create pages with AI (sprint 164)
5907
+ 'aib.sql_workshop_ai': 'SQL Workshop → IA',
5908
+ 'aib.description': 'Description',
5909
+ 'aib.propose_pages': 'Proposer des pages',
5910
+ 'aib.create': 'Créer',
5911
+ 'aib.page_type': 'Type de page',
5912
+ 'aib.table_or_view': 'Table ou vue',
5913
+ 'aib.page': 'Page',
5914
+ 'aib.form_page': 'Page de formulaire',
5915
+ 'aib.label': 'Libellé',
5916
+ 'aib.why': 'Pourquoi',
5917
+ 'aib.create_the_ticked_pages': 'Créer les pages cochées',
5918
+ 'aib.no_pages_were_proposed_describe': 'Aucune page n\'a été proposée : décrivez-les autrement, ou vérifiez que le rôle de l\'application peut lire les tables.',
5919
+ 'aib.e_g_a_page_to': 'p. ex. Une page pour gérer les employés, un calendrier des congés et un graphique des salaires par service',
5920
+ 'aib.the_ai_request_failed': 'La requête à l\'IA a échoué.',
5921
+ 'aib.tick_the_pages_to_create': 'Cochez les pages à créer.',
5922
+ 'aib.the_app_builder_has_no': 'L\'App Builder n\'a pas encore de service d\'IA (un administrateur le choisit dans SQL Workshop → IA).',
5923
+ 'aib.describe_the_pages_you_want': 'Décrivez les pages souhaitées.',
5924
+ 'aib.create_pages_with_ai': 'Créer des pages avec l\'IA',
5925
+ 'aib.proposed_pages': 'Pages proposées',
5926
+ 'aib.app_builder': 'App Builder',
5927
+ 'aib.intro': 'Décrivez les pages souhaitées. Le service d\'IA de l\'App Builder propose des pages des assistants de création de page pour les tables et vues que le rôle de l\'application ({role}) peut lire ; vous vérifiez les propositions et créez celles que vous cochez. Les noms de tables et de colonnes, les types et les {descriptions} sont envoyés au service, jamais les lignes.',
5928
+ 'aib.the_owner': 'le propriétaire',
5929
+ 'aib.descriptions': 'descriptions',
5930
+ 'aib.no_service': 'L\'App Builder n\'a pas encore de service d\'IA : un administrateur le choisit dans {link}.',
5931
+ 'aib.thinking': 'Réflexion…',
5932
+ 'aib.p_create': 'Créer la proposition {n}',
5933
+ 'aib.p_kind': 'Type de page de la proposition {n}',
5934
+ 'aib.p_table': 'Table de la proposition {n}',
5935
+ 'aib.p_page': 'Numéro de page de la proposition {n}',
5936
+ 'aib.p_form': 'Page de formulaire de la proposition {n} (rapport et formulaire)',
5937
+ 'aib.p_label': 'Libellé de la proposition {n}',
5938
+ 'aib.admins_only': 'Seuls les administrateurs choisissent le service d\'IA de l\'App Builder.',
5939
+ 'aib.no_tables': 'Le rôle {role} de l\'application ne peut encore lire aucune table ni vue.',
5940
+ 'aib.p_invalid': 'Proposition {n} : choisissez un type de page, une table que l\'application peut lire et des numéros de page libres.',
5941
+ 'aib.created': 'Pages {list} créées. Vérifiez que le rôle de base de données de l\'application a les privilèges nécessaires.',
5942
+ 'aib.not_created': 'Aucune page n\'a été créée : {error}',
5943
+ // ------------------------------------------------------------ New applications (sprint 164)
5944
+ 'nwa.push_off': 'Les notifications push sont désactivées : elles exigent PGKILN_SECRET_KEY dans l\'environnement du serveur.',
5945
+ 'nwa.no_workspace': 'Vous n\'êtes encore développeur d\'aucun espace de travail : demandez à un administrateur de vous y ajouter.',
5946
+ 'nwa.bad_alias': 'L\'alias doit commencer par une lettre et ne contenir que a-z, 0-9, _ et - (50 caractères au plus).',
5947
+ 'nwa.enter_name': 'Saisissez un nom pour l\'application.',
5948
+ 'nwa.bad_schema': 'Le schéma {schema} ne peut pas être le schéma d\'analyse d\'une application.',
5949
+ 'nwa.first_user': 'Les apps avec page de connexion ont besoin d\'un premier utilisateur.',
5950
+ 'nwa.choose_icon': 'Choisissez l\'une des icônes de la liste.',
5951
+ 'nwa.choose_language': 'Choisissez l\'une des langues de la liste.',
5952
+ 'nwa.role_exists': 'Le rôle de base de données {role} existe déjà : choisissez un autre alias.',
5953
+ 'nwa.schema_foreign': 'Le schéma {schema} existe déjà et n\'appartient pas à cet espace de travail : choisissez un autre schéma.',
5954
+ 'nwa.choose_boilerplate': 'Choisissez une application modèle (une application de type Boilerplate).',
5955
+ 'nwa.alias_taken': 'Une application avec l\'alias {alias} existe déjà.',
5956
+ 'nwa.f.about': 'Page À propos',
5957
+ 'nwa.fh.about': 'Une page À propos dans un menu Aide de l\'en-tête.',
5958
+ 'nwa.f.access': 'Contrôle d\'accès',
5959
+ 'nwa.fh.access': 'Des schémas d\'autorisation pour les rôles admin, contributor et reader, à poser sur les pages, régions et boutons.',
5960
+ 'nwa.f.activity': 'Rapports d\'activité',
5961
+ 'nwa.fh.activity': 'Une page pour les administrateurs avec les affichages de page par jour et l\'activité récente.',
5962
+ 'nwa.f.feedback': 'Retours',
5963
+ 'nwa.fh.feedback': 'Les utilisateurs envoient leurs retours depuis l\'en-tête ; vous les lisez dans Activité → Retours.',
5964
+ 'nwa.f.theme': 'Choix du style de thème',
5965
+ 'nwa.fh.theme': 'Les utilisateurs peuvent choisir le thème clair ou sombre.',
5966
+ 'nwa.f.pwa': 'Installer comme app (PWA)',
5967
+ 'nwa.fh.pwa': 'Installable sur téléphones et ordinateurs, avec des pages hors ligne.',
5968
+ 'nwa.f.push': 'Notifications push',
5969
+ 'nwa.fh.push': 'Des notifications sur les appareils des utilisateurs (avec Installer comme app).',
5970
+ // ------------------------------------------------------------ Create Application wizard (sprint 164)
5971
+ 'aw.k.report_form': 'Rapport interactif avec formulaire',
5972
+ 'aw.k.facets': 'Recherche à facettes',
5973
+ 'aw.k.cards': 'Cartes',
5974
+ 'aw.k.calendar': 'Calendrier',
5975
+ 'aw.k.master_detail': 'Maître-détail',
5976
+ 'aw.k.grid': 'Grille interactive',
5977
+ 'aw.k.report': 'Rapport',
5978
+ 'aw.k.none': 'Pas de page',
5979
+ 'aw.at_most_tables': 'Choisissez au plus {n} tables et vues.',
5980
+ 'aw.no_dashboard': 'Pas de tableau de bord : aucune table n\'a de clé étrangère, ni de colonne texte, oui/non ou date dont les statistiques montrent quelques valeurs répétées (lancez d\'abord ANALYZE sur les tables).',
5981
+ 'aw.not_on_dashboard': 'Pas dans le tableau de bord : {tables} (sécurité au niveau des lignes : le rôle de l\'application peut ne voir aucune ligne).',
5982
+ 'aw.paste_title': 'Créer une application à partir de données collées',
5983
+ 'aw.pasted_data': 'Données collées',
5984
+ 'aw.paste_the_data': 'Collez les données.',
5985
+ 'aw.paste_max': 'On peut coller au plus {mb} Mo de texte ; envoyez plutôt un fichier.',
5986
+ 'aw.created': 'Application {alias} créée.',
5987
+ 'aw.created_pages': 'Application {alias} créée avec {n} page(s) en plus de Home.',
5988
+ 'aw.existing_account': 'Le compte existant {user} a reçu le rôle admin (son mot de passe n\'a pas été modifié).',
5989
+ 'aw.src.file': 'À partir d\'un fichier',
5990
+ 'aw.srch.file': 'CSV, Excel, JSON ou XML : une table par feuille avec ses lignes',
5991
+ 'aw.src.paste': 'À partir de données collées',
5992
+ 'aw.srch.paste': 'Des lignes copiées d\'un tableur, ou du texte CSV',
5993
+ 'aw.src.blueprints': 'À partir d\'un blueprint',
5994
+ 'aw.srch.blueprints': 'Tables, pages, menu et lignes d\'exemple décrits une fois (ou rédigés par l\'IA)',
5995
+ 'aw.src.gallery': 'Depuis l\'App Gallery',
5996
+ 'aw.srch.gallery': 'Une application de départ',
5997
+ 'aw.rls_on': 'La sécurité au niveau des lignes est activée ({n} politiques) : chaque utilisateur ne voit que les lignes autorisées par les politiques',
5998
+ 'aw.rls_on_1': 'La sécurité au niveau des lignes est activée (1 politique) : chaque utilisateur ne voit que les lignes autorisées par les politiques',
5999
+ 'aw.icon': 'Icône',
6000
+ 'aw.not_analyzed': 'non analysée',
6001
+ 'aw.about_rows': 'environ {n} ligne(s)',
6002
+ 'aw.view': 'vue',
6003
+ 'aw.no_key': ', pas de clé sur une seule colonne : pas de formulaire',
6004
+ 'aw.paged_grid': ': une grille paginée',
6005
+ 'aw.no_relations': '{schema} n\'a ni table ni vue.',
6006
+ 'aw.paste_intro': 'Collez des lignes copiées d\'un tableur, ou du texte CSV ou TSV : le délimiteur (tabulation, virgule, point-virgule ou |) est détecté. Ensuite vous vérifiez la table proposée et ses colonnes, comme pour un fichier. Ou bien {link}.',
6007
+ 'aw.upload_a_file': 'envoyez un fichier',
6008
+ 'aw.bp_option': '{name} (modèle)',
6009
+ 'aw.create_an_application_from_pasted': 'Créer une application à partir de données collées',
6010
+ 'aw.data': 'Données',
6011
+ 'aw.first_row_contains_column_names': 'La première ligne contient les noms de colonnes',
6012
+ 'aw.cancel': 'Annuler',
6013
+ 'aw.create_an_application': 'Créer une application',
6014
+ 'aw.choose_one_of_the_schemas': 'Choisissez l\'un des schémas de la liste.',
6015
+ 'aw.name': 'Nom',
6016
+ 'aw.a_hero_with_the_name': 'un bandeau avec le nom et l\'icône, et une carte par page',
6017
+ 'aw.choose_a_schema_under_data': 'Choisissez un schéma sous Données pour une page par table, ou ajoutez des pages plus tard avec les assistants de page.',
6018
+ 'aw.alias_url': 'Alias (URL)',
6019
+ 'aw.lowercase_e_g_inventory_a': 'en minuscules, p. ex. inventory → /a/inventory ; suit le nom jusqu\'à ce que vous le changiez',
6020
+ 'aw.advanced': 'Avancé',
6021
+ 'aw.create_application': 'Créer l\'application',
6022
+ 'aw.next': 'Suivant',
6023
+ 'aw.rls_no_policies': 'RLS, aucune politique',
6024
+ 'aw.show_its_tables': 'Afficher ses tables',
6025
+ 'aw.home': 'Accueil',
6026
+ 'aw.row_level_security_is_on': 'La sécurité au niveau des lignes est activée sans politique : le rôle de l\'application ne voit aucune ligne (sauf s\'il possède la table ou contourne la sécurité au niveau des lignes)',
6027
+ 'aw.other_ways_to_start': 'Autres façons de commencer',
6028
+ 'aw.pages_on_the_tables_of': 'Pages sur les tables de',
6029
+ 'aw.description': 'Description',
6030
+ 'aw.theme_style': 'Style de thème',
6031
+ 'aw.navigation': 'Navigation',
6032
+ 'aw.accent_colour': 'Couleur d\'accent',
6033
+ 'aw.dashboard_a_chart_per_table': 'Tableau de bord : un graphique par table avec le nombre de lignes par ligne parente (une clé étrangère) ou par valeur d\'une colonne aux valeurs répétées',
6034
+ 'aw.authentication': 'Authentification',
6035
+ 'aw.first_user': 'Premier utilisateur',
6036
+ 'aw.password': 'Mot de passe',
6037
+ 'aw.language': 'Langue',
6038
+ 'aw.start_from': 'Partir de',
6039
+ 'aw.names_the_application_and_the': 'Nomme l\'application et la table (vous pourrez changer les deux à l\'étape suivante).',
6040
+ 'aw.one_line_for_the_home': 'Une ligne pour les pages d\'accueil et À propos',
6041
+ 'aw.of_the_theme_style_the': 'Du style de thème ; la valeur par défaut n\'enregistre rien.',
6042
+ 'aw.e_g_your_name': 'p. ex. votre nom',
6043
+ 'aw.gets_the_admin_role_an': 'Reçoit le rôle admin. Un compte existant dans Utilisateurs est réutilisé.',
6044
+ 'aw.for_a_new_account_at': 'Pour un nouveau compte ; au moins 8 caractères.',
6045
+ 'aw.a_new_empty_schema_home': '- un nouveau schéma vide (Accueil seulement) -',
6046
+ 'aw.iris_light_body_dark_header': 'Iris (corps clair, en-tête et menu sombres)',
6047
+ 'aw.lavender_rounded_indigo': 'Lavender (arrondi, indigo)',
6048
+ 'aw.standard_blue_navy_header': 'Standard (bleu, en-tête bleu marine)',
6049
+ 'aw.side_menu': 'Menu latéral',
6050
+ 'aw.top_menu': 'Menu supérieur',
6051
+ 'aw.app_users_login_page': 'Utilisateurs de l\'app (page de connexion)',
6052
+ 'aw.none_public': 'Aucune (publique)',
6053
+ 'aw.a_blank_application': '- une application vierge -',
6054
+ 'aw.paste_delimited_text_csv_or': 'Collez du texte délimité (CSV ou TSV) ; envoyez les fichiers JSON, XML ou Excel avec À partir d\'un fichier.',
6055
+ 'aw.the_data_has_column_names': 'Les données ont des noms de colonnes mais aucune ligne.',
6056
+ 'aw.choose_a_boilerplate_application_an': 'Choisissez une application modèle (une application de type Boilerplate).',
6057
+ 'aw.choose_at_least_one_table': 'Choisissez au moins une table ou une vue.',
6058
+ 'aw.a_boilerplate_application_brings_its': 'Une application modèle apporte ses propres pages : ne choisissez pas de tables, ou pas de modèle.',
6059
+ 'aw.application': 'Application',
6060
+ 'aw.appearance': 'Apparence',
6061
+ 'aw.pages': 'Pages',
6062
+ 'aw.features': 'Fonctionnalités',
6063
+ 'aw.settings': 'Réglages',
6064
+ 'aw.app_builder': 'App Builder',
6065
+ 'aw.create': 'Créer',
6066
+ // ------------------------------------------------------------ Create application from a file (sprint 164)
6067
+ 'aff.table_exists': 'La table {table} existe déjà : choisissez un autre nom.',
6068
+ 'aff.no_dashboard': 'Pas de tableau de bord : aucune colonne texte, oui/non ou date n\'a quelques valeurs répétées pour compter les lignes.',
6069
+ 'aff.no_facets': 'Pas de recherche à facettes : aucune colonne ne convient comme filtre.',
6070
+ 'aff.choose_file': 'Choisissez un fichier.',
6071
+ 'aff.too_large': 'Le fichier dépasse {mb} Mo.',
6072
+ 'aff.col_name_head': 'Nom de colonne (vide = ignorer)',
6073
+ 'aff.col_name_for': 'Nom de colonne pour {col}',
6074
+ 'aff.type_of': 'Type de {col}',
6075
+ 'aff.bad_schema': 'Le schéma {schema} ne peut pas être le schéma d\'analyse d\'une application.',
6076
+ 'aff.loaded': '{table} : {n} ligne(s) chargée(s).',
6077
+ 'aff.loaded_skipped': '{table} : {n} ligne(s) chargée(s), {skipped} ignorée(s).',
6078
+ 'aff.created': 'Application {alias} créée.',
6079
+ 'aff.existing_account': 'Le compte existant {user} a reçu le rôle admin (son mot de passe n\'a pas été modifié).',
6080
+ 'aff.page_item': 'Page {n} : {label}',
6081
+ 'aff.intro': 'Envoyez un tableur : CSV ou TSV (UTF-8 ou Windows-1252 ; le délimiteur est détecté), Excel .xlsx (chaque feuille devient une table, jusqu\'à {sheets}), JSON (un tableau d\'objets ; un objet avec plusieurs tableaux donne plusieurs tables) ou XML, jusqu\'à {mb} Mo. Ensuite vous vérifiez les tables proposées et leurs colonnes. L\'application reçoit son propre schéma et son propre rôle de base de données, une table avec les lignes, un rapport et formulaire, et en option un tableau de bord et une recherche à facettes. Sinon : {paste} ou {tables}.',
6082
+ 'aff.schema_help_1': 'Un rôle de base de données app_<alias> est créé avec accès à ce seul schéma ; l\'app s\'exécute avec ce rôle. La table est créée dans ce schéma.',
6083
+ 'aff.schema_help_n': 'Un rôle de base de données app_<alias> est créé avec accès à ce seul schéma ; l\'app s\'exécute avec ce rôle. Les tables sont créées dans ce schéma.',
6084
+ 'aff.sheets_info': '{file} : {n} feuilles ({list}).',
6085
+ 'aff.arrays_info': '{file} : {n} tableaux ({list}).',
6086
+ 'aff.sheet_rows': '{name} : {n} ligne(s)',
6087
+ 'aff.info': '{file} : {rows} ligne(s), {cols} colonne(s)',
6088
+ 'aff.delimiter': ', délimiteur {d}',
6089
+ 'aff.tab': 'tabulation',
6090
+ 'aff.xml_rows': ', lignes XML {path}',
6091
+ 'aff.first_10': '(les 10 premières affichées)',
6092
+ 'aff.application_created': 'Application créée',
6093
+ 'aff.table': 'Table',
6094
+ 'aff.row': 'Ligne',
6095
+ 'aff.error': 'Erreur',
6096
+ 'aff.the_first_errors_are_shown': 'Les premières erreurs sont affichées.',
6097
+ 'aff.create_an_application_from_a': 'Créer une application à partir d\'un fichier',
6098
+ 'aff.paste_data': 'Coller des données',
6099
+ 'aff.start_from_existing_tables': 'partir de tables existantes',
6100
+ 'aff.file': 'Fichier',
6101
+ 'aff.first_row_contains_column_names': 'La première ligne contient les noms de colonnes',
6102
+ 'aff.cancel': 'Annuler',
6103
+ 'aff.paste_other_data': 'Coller d\'autres données',
6104
+ 'aff.choose_another_file': 'Choisir un autre fichier',
6105
+ 'aff.page_1_is_the_home': 'La page 1 est l\'accueil ; chaque table reçoit un rapport interactif avec un formulaire modal pour créer, modifier et supprimer des lignes, et une entrée de navigation. D\'autres pages peuvent être ajoutées plus tard avec les assistants de page.',
6106
+ 'aff.create_application': 'Créer l\'application',
6107
+ 'aff.file_column': 'Colonne du fichier',
6108
+ 'aff.values': 'Valeurs',
6109
+ 'aff.type': 'Type',
6110
+ 'aff.page_1_is_the_home_2': 'La page 1 est l\'accueil ; la page 2 un rapport interactif de la table avec un formulaire modal (page 3) pour créer, modifier et supprimer des lignes. Chaque page reçoit une entrée de navigation. D\'autres pages peuvent être ajoutées plus tard avec les assistants de page.',
6111
+ 'aff.edit_the_application': 'Modifier l\'application',
6112
+ 'aff.run': 'Exécuter',
6113
+ 'aff.create_another': 'En créer une autre',
6114
+ 'aff.next': 'Suivant',
6115
+ 'aff.name': 'Nom',
6116
+ 'aff.alias_url': 'Alias (URL)',
6117
+ 'aff.parsing_schema': 'Schéma d\'analyse',
6118
+ 'aff.authentication': 'Authentification',
6119
+ 'aff.first_user': 'Premier utilisateur',
6120
+ 'aff.password': 'Mot de passe',
6121
+ 'aff.dashboard_a_chart_per_table': 'Tableau de bord : un graphique par table avec le nombre de lignes par ligne parente (une clé étrangère) ou par valeur d\'une colonne texte, oui/non ou date',
6122
+ 'aff.skip_rows_with_errors_otherwise': 'Ignorer les lignes en erreur (sinon rien n\'est créé quand une ligne échoue)',
6123
+ 'aff.table_name': 'Nom de la table',
6124
+ 'aff.dashboard_a_chart_with_the': 'Tableau de bord : un graphique avec le nombre de lignes par valeur d\'une colonne texte, oui/non ou date',
6125
+ 'aff.faceted_search_a_report_with': 'Recherche à facettes : un rapport avec un panneau de filtres (valeurs avec effectifs, plages et un champ de recherche)',
6126
+ 'aff.lowercase_e_g_inventory_a': 'en minuscules, p. ex. inventory → /a/inventory',
6127
+ 'aff.e_g_your_name': 'p. ex. votre nom',
6128
+ 'aff.gets_the_admin_role_an': 'Reçoit le rôle admin. Un compte existant dans Utilisateurs est réutilisé.',
6129
+ 'aff.for_a_new_account_at': 'Pour un nouveau compte ; au moins 8 caractères.',
6130
+ 'aff.in_the_application_s_schema': 'Dans le schéma de l\'application ; la table reçoit une clé primaire identity id.',
6131
+ 'aff.new_schema_named_after_the': '- nouveau schéma nommé d\'après l\'alias -',
6132
+ 'aff.app_users_login_page': 'Utilisateurs de l\'app (page de connexion)',
6133
+ 'aff.none_public': 'Aucune (publique)',
6134
+ 'aff.give_at_least_one_column': 'Donnez un nom à au moins une colonne.',
6135
+ 'aff.table_name_a_lower_case': 'Nom de la table : un nom en minuscules (lettres, chiffres et _) sans schéma ; la table va dans le schéma de l\'application.',
6136
+ 'aff.the_file_has_column_names': 'Le fichier a des noms de colonnes mais aucune ligne.',
6137
+ 'aff.skipped_rows': 'Lignes ignorées',
6138
+ 'aff.foreign_keys': 'Clés étrangères',
6139
+ 'aff.pages': 'Pages',
6140
+ 'aff.application': 'Application',
6141
+ 'aff.preview': 'Aperçu',
6142
+ 'aff.create_application_from_a_file': 'Créer une application à partir d\'un fichier',
6143
+ 'aff.app_builder': 'App Builder',
6144
+ 'aff.create': 'Créer',
6145
+ 'aff.from_a_file': 'À partir d\'un fichier',
6146
+ // ------------------------------------------------------------ Workbooks with several sheets (sprint 164)
6147
+ 'ash.bad_xlsx': 'Ce n\'est pas un fichier Excel (.xlsx) lisible : {error}',
6148
+ 'ash.sheet_error': 'Feuille {sheet} : {error}',
6149
+ 'ash.too_many_sheets': 'Le classeur a {n} feuilles avec des lignes ; au plus {max} deviennent des tables à la fois.',
6150
+ 'ash.too_many_rows_wb': 'Le classeur a {n} lignes ; au plus {max} peuvent être chargées à la fois.',
6151
+ 'ash.too_many_arrays': 'Le JSON a {n} tableaux ; au plus {max} deviennent des tables à la fois.',
6152
+ 'ash.too_many_rows': 'Le fichier a {n} lignes ; au plus {max} peuvent être chargées à la fois.',
6153
+ 'ash.sheet': 'Feuille {name}',
6154
+ 'ash.bad_table_name': '{where} : le nom de la table doit être en minuscules (lettres, chiffres et _) sans schéma ; la table va dans le schéma de l\'application.',
6155
+ 'ash.no_columns': '{where} : donnez un nom à au moins une colonne.',
6156
+ 'ash.bad_column': '{where} : « {col} » n\'est pas un nom de colonne valide.',
6157
+ 'ash.bad_type': '{where} : type de colonne inconnu {type}.',
6158
+ 'ash.dup_columns': '{where} : les noms de colonnes doivent être uniques.',
6159
+ 'ash.id_taken': '{where} : « id » est le nom de la nouvelle colonne clé ; renommez la colonne du fichier ou choisissez-la comme clé primaire.',
6160
+ 'ash.table_exists': 'La table {table} existe déjà : choisissez un autre nom.',
6161
+ 'ash.fk_failed': 'Clé étrangère {fk} : {error} Décochez-la ou corrigez les données.',
6162
+ 'ash.no_dashboard': 'Pas de tableau de bord : aucune table n\'a de clé étrangère ni de colonne texte, oui/non ou date avec quelques valeurs répétées pour compter les lignes.',
6163
+ 'ash.create_from_sheet': 'Créer une table à partir de cette feuille ({rows} ligne(s), {cols} colonne(s))',
6164
+ 'ash.col_name_head': 'Nom de colonne (vide = ignorer)',
6165
+ 'ash.col_name_for': 'Nom de colonne pour {col} ({sheet})',
6166
+ 'ash.type_of': 'Type de {col} ({sheet})',
6167
+ 'ash.missing': '{n} ligne(s) ont une valeur absente de {key}.',
6168
+ 'ash.fk_intro': 'Proposées là où une colonne correspond à la clé primaire d\'une autre table ; cochées quand chaque valeur est trouvée. Les formulaires reçoivent une liste de sélection pour chaque clé étrangère.',
6169
+ 'ash.table_name': 'Nom de la table',
6170
+ 'ash.primary_key': 'Clé primaire',
6171
+ 'ash.a_whole_number_key_column': 'Une colonne clé de nombres entiers devient une clé identity ; une autre colonne clé est unique, à côté d\'un nouvel id.',
6172
+ 'ash.file_column': 'Colonne du fichier',
6173
+ 'ash.values': 'Valeurs',
6174
+ 'ash.type': 'Type',
6175
+ 'ash.no_column_matches_another_table': 'Aucune colonne ne correspond à la clé d\'une autre table. Une colonne correspond quand elle porte le nom de la colonne clé (dept_id), ou celui de l\'autre table et de sa clé (department_id, department_code), avec le même type.',
6176
+ 'ash.update_the_proposals': 'Mettre à jour les propositions',
6177
+ 'ash.a_new_column_id_identity': '- une nouvelle colonne id (identity) -',
6178
+ 'ash.the_file_has_column_names': 'Le fichier a des noms de colonnes mais aucune ligne.',
6179
+ 'ash.choose_at_least_one_sheet': 'Choisissez au moins une feuille.',
6180
+ 'ash.each_sheet_needs_a_table': 'Chaque feuille a besoin de son propre nom de table.',
6181
+ 'ash.foreign_keys': 'Clés étrangères',
6182
+ // ------------------------------------------------------------ Theme Roller (sprint 164)
6183
+ 'thr.as_base': '- comme la base -',
6184
+ 'thr.as_app': '- comme l\'application -',
6185
+ 'thr.default_base_style': 'Par défaut (en-tête et menu du style de base)',
6186
+ 'thr.preview_text': 'Texte avec un {link} et un {badge}.',
6187
+ 'thr.link': 'lien',
6188
+ 'thr.badge': 'badge',
6189
+ 'thr.value': 'Valeur',
6190
+ 'thr.c_accent': 'Couleur d\'accent',
6191
+ 'thr.c_header': 'Couleur de l\'en-tête',
6192
+ 'thr.c_accent_dark': 'Couleur d\'accent en mode sombre',
6193
+ 'thr.c_header_dark': 'Couleur de l\'en-tête en mode sombre',
6194
+ 'thr.c_strip': 'Couleur du bandeau d\'en-tête',
6195
+ 'thr.c_strip_dark': 'Couleur du bandeau d\'en-tête en mode sombre',
6196
+ 'thr.delete_confirm': 'Supprimer le style {name} ?',
6197
+ 'thr.edit_style': 'Modifier le style {name}',
6198
+ 'thr.max_styles': 'Au plus {n} styles par application.',
6199
+ 'thr.options_intro': 'Les régions et les boutons ont des {options} dans le Page Designer (groupe Apparence) : des classes CSS d\'une liste fixe, que ces styles affectent aussi.',
6200
+ 'thr.regions_list': 'Régions : {list}',
6201
+ 'thr.buttons_list': 'Boutons : {list}',
6202
+ 'thr.title': 'Theme Roller de {app}',
6203
+ 'thr.gone': 'Le style {name} n\'existe plus.',
6204
+ 'thr.exists': 'Un style nommé {name} existe déjà.',
6205
+ 'thr.saved': 'Style {name} enregistré.',
6206
+ 'thr.deleted': 'Style {name} supprimé.',
6207
+ 'thr.variants_intro': 'Plusieurs styles enregistrés pour cette application (APEX : styles de thème). Le style de base ({base}) et les couleurs sous {settings} sont ce que voient les utilisateurs sans style ; chaque style ci-dessous change les couleurs et peut définir une police, une taille de police et des coins. Les couleurs s\'appliquent au thème clair, les couleurs du mode sombre au thème sombre (choisissez-y des couleurs claires) ; polices, tailles et coins aux deux.',
6208
+ 'thr.use_this_colour_else_the': 'Utiliser cette couleur (sinon la couleur de base)',
6209
+ 'thr.or_the_value_of_an': '…ou la valeur d\'un élément',
6210
+ 'thr.a_dynamic_colour_the_item': 'Une couleur dynamique : la valeur de l\'élément quand elle est #rrggbb (sinon la couleur de base).',
6211
+ 'thr.preview': 'Aperçu',
6212
+ 'thr.employees': 'Employés',
6213
+ 'thr.employee_list': 'Liste des employés',
6214
+ 'thr.directory': 'Annuaire',
6215
+ 'thr.reports': 'Rapports',
6216
+ 'thr.a_region': 'Une région',
6217
+ 'thr.a_field': 'Un champ',
6218
+ 'thr.cancel': 'Annuler',
6219
+ 'thr.save': 'Enregistrer',
6220
+ 'thr.condition_sql': 'Condition (SQL)',
6221
+ 'thr.optional_a_boolean_expression_with': 'Facultatif. Une expression booléenne avec variables de liaison, exécutée avec le rôle de l\'application sur chaque page : les utilisateurs qui n\'ont pas choisi de style reçoivent le premier style dont la condition est vraie, sinon le style par défaut (APEX : styles de thème conditionnels).',
6222
+ 'thr.use_this_colour_else_the_2': 'Utiliser cette couleur (sinon la couleur d\'accent)',
6223
+ 'thr.settings_theme': 'Réglages → Thème',
6224
+ 'thr.name': 'Nom',
6225
+ 'thr.accent': 'Accent',
6226
+ 'thr.header': 'En-tête',
6227
+ 'thr.dark_accent': 'Accent sombre',
6228
+ 'thr.dark_header': 'En-tête sombre',
6229
+ 'thr.navigation': 'Navigation',
6230
+ 'thr.strip': 'Bandeau',
6231
+ 'thr.font': 'Police',
6232
+ 'thr.font_size': 'Taille de police',
6233
+ 'thr.corners': 'Coins',
6234
+ 'thr.actions': 'Actions',
6235
+ 'thr.delete': 'Supprimer',
6236
+ 'thr.no_styles_yet_the_application': 'Pas encore de style : l\'application utilise ses couleurs de base.',
6237
+ 'thr.users_may_choose_a_style': 'Les utilisateurs peuvent choisir un style',
6238
+ 'thr.adds_the_styles_to_the': 'Ajoute les styles au menu utilisateur et à Mon compte (APEX : « Enable End Users to Choose Theme Style »). Le choix d\'un utilisateur est conservé par application sur le compte ; seuls les styles de cette application peuvent être choisis.',
6239
+ 'thr.template_options': 'Options de modèle',
6240
+ 'thr.edit': 'Modifier',
6241
+ 'thr.preview_of_the_style': 'Aperçu du style',
6242
+ 'thr.sample_menu': 'Menu d\'exemple',
6243
+ 'thr.navigation_appearance': 'Apparence de la navigation',
6244
+ 'thr.default_style': 'Style par défaut',
6245
+ 'thr.e_g_ocean': 'p. ex. Ocean',
6246
+ 'thr.shown_to_users_who_may': 'Affiché aux utilisateurs qui peuvent choisir un style. 1 à 30 lettres, chiffres, espaces, - ou _.',
6247
+ 'thr.as_the_application': '- comme l\'application -',
6248
+ 'thr.default_the_base_style_s': 'Par défaut (en-tête et menu du style de base)',
6249
+ 'thr.as_the_base': '- comme la base -',
6250
+ 'thr.none_the_base_style_and': 'Aucun (le style et les couleurs de base)',
6251
+ 'thr.default': 'Par défaut',
6252
+ 'thr.save_style': 'Enregistrer le style',
6253
+ 'thr.add_style': 'Ajouter le style',
6254
+ 'thr.add_a_style': 'Ajouter un style',
6255
+ 'thr.theme_roller_settings_saved': 'Réglages du Theme Roller enregistrés.',
6256
+ 'thr.what_everyone_sees_unless_they': 'Ce que voient tous ceux qui n\'ont pas choisi un autre style.',
6257
+ 'thr.theme_roller_style_variants': 'Theme Roller : variantes de style',
6258
+ 'thr.app_builder': 'App Builder',
6259
+ 'thr.settings': 'Réglages',
6260
+ 'thr.theme_roller': 'Theme Roller',
6261
+ // ------------------------------------------------------------ Features (sprint 164)
6262
+ 'feat.f.access': 'Contrôle d\'accès',
6263
+ 'feat.h.access': 'Des schémas d\'autorisation pour les rôles admin, contributor et reader, à poser sur les pages, régions et boutons.',
6264
+ 'feat.f.activity': 'Rapports d\'activité',
6265
+ 'feat.h.activity': 'Une page pour les administrateurs avec les affichages de page par jour et l\'activité récente.',
6266
+ 'feat.f.config': 'Options de configuration',
6267
+ 'feat.h.config': 'Une page où les administrateurs de l\'application activent et désactivent des options de build pendant son exécution.',
6268
+ 'feat.f.email': 'Rapports par e-mail',
6269
+ 'feat.h.email': 'Un e-mail hebdomadaire aux administrateurs avec l\'activité de l\'application, les lignes en fichier CSV.',
6270
+ 'feat.f.feedback': 'Retours',
6271
+ 'feat.h.feedback': 'Les utilisateurs envoient leurs retours depuis l\'en-tête ; vous les lisez dans Activité → Retours de l\'application.',
6272
+ 'feat.f.about': 'Page À propos',
6273
+ 'feat.h.about': 'Une page À propos dans un menu Aide de l\'en-tête.',
6274
+ 'feat.f.login': 'Page de connexion',
6275
+ 'feat.h.login': 'La page de connexion propre à l\'application au lieu de la page intégrée, modifiable dans le Page Designer.',
6276
+ 'feat.f.theme': 'Choix du style de thème',
6277
+ 'feat.h.theme': 'Les utilisateurs choisissent le thème clair ou sombre dans leur menu utilisateur (Apparence).',
6278
+ 'feat.f.push': 'Notifications push',
6279
+ 'feat.h.push': 'Des notifications sur les appareils des utilisateurs, depuis des processus et du SQL (meta.send_push) ; l\'application devient installable.',
6280
+ 'feat.a.access_1': 'Schémas d\'autorisation CONTRIBUTOR (rôle admin ou contributor) et READER (admin, contributor ou reader), et ADMIN quand l\'application n\'en a pas',
6281
+ 'feat.a.access_2': 'Donnez leurs rôles aux utilisateurs dans Composants partagés → Utilisateurs (accès à l\'application)',
6282
+ 'feat.a.activity_1': 'Page {page} « Activity » (autorisation ADMIN) : un graphique des affichages de page par jour et un rapport de l\'activité récente, depuis meta.app_activity()',
6283
+ 'feat.a.activity_2': 'Une entrée de navigation Activity pour les administrateurs',
6284
+ 'feat.a.activity_3': 'Schéma d\'autorisation ADMIN (rôle admin) quand l\'application n\'en a pas',
6285
+ 'feat.page_in_use': 'La page {page} est occupée par une autre page.',
6286
+ 'feat.a.config_1': 'Page {page} « Configuration » (autorisation ADMIN) : les options de build configurables en interrupteurs, et Enregistrer',
6287
+ 'feat.a.config_2': 'Les options de build cochées ci-dessous deviennent configurables (Composants partagés → Options de build → Configurable)',
6288
+ 'feat.a.config_3': 'Une entrée de navigation Configuration pour les administrateurs',
6289
+ 'feat.a.email_1': 'Paramètre d\'application EMAIL_REPORT_TO : les adresses destinataires du rapport (Composants partagés → Paramètres d\'application)',
6290
+ 'feat.a.email_2': 'Automatisation EMAIL_REPORTING, chaque lundi à 07:00 UTC : meta.send_activity_report() avec les 7 derniers jours (Composants partagés → Automatisations)',
6291
+ 'feat.a.email_3': 'Le courrier part par le service de messagerie de l\'application (Utilitaires de l\'espace de travail → Services de messagerie) ; sans adresses rien n\'est envoyé',
6292
+ 'feat.not_email': '« {address} » n\'est pas une adresse e-mail.',
6293
+ 'feat.too_many': 'Trop d\'adresses.',
6294
+ 'feat.a.feedback_1': 'Une entrée Retours dans l\'en-tête pour les utilisateurs connectés (Réglages → Retours)',
6295
+ 'feat.a.feedback_2': 'Leurs retours, avec la page, dans Activité → Retours du builder',
6296
+ 'feat.a.about_1': 'Page {page} « About » avec le nom de l\'application et les pages de son menu',
6297
+ 'feat.a.about_2': 'Un menu Aide avec About dans la barre de navigation (liste NAVBAR), sauf si l\'application a déjà une liste de barre de navigation',
6298
+ 'feat.a.login_1': 'Page 9999 (ou le prochain numéro libre) « Login » : publique, modèle de page Minimal, avec une région Login',
6299
+ 'feat.a.login_2': 'Elle devient la page de connexion (Réglages → Méthodes de connexion)',
6300
+ 'feat.no_signin': 'L\'application n\'a pas de connexion (authentification none).',
6301
+ 'feat.a.theme_1': 'Apparence dans le menu utilisateur : clair, sombre ou le réglage de l\'appareil (Réglages → Thème → Les utilisateurs peuvent choisir)',
6302
+ 'feat.a.push_1': 'Installer comme app (PWA) : un manifeste, un service worker et un bouton Installer',
6303
+ 'feat.a.push_2': 'Notifications push : les utilisateurs s\'abonnent dans Mon compte ; envoi avec le processus send_push ou meta.send_push',
6304
+ 'feat.a.push_3': 'La paire de clés push de l\'application (conservée chiffrée)',
6305
+ 'feat.push_needs_key': 'Les notifications push exigent PGKILN_SECRET_KEY dans l\'environnement du serveur.',
6306
+ 'feat.send_to': 'Envoyer à',
6307
+ 'feat.send_to_help': 'Séparées par des virgules ; peut rester vide et être défini plus tard dans Composants partagés → Paramètres d\'application (EMAIL_REPORT_TO).',
6308
+ 'feat.cbo': 'Options de build configurables',
6309
+ 'feat.no_build_options': 'L\'application n\'a pas encore d\'options de build : ajoutez-les dans Composants partagés → Options de build et cochez {configurable} ; la page les affiche au fur et à mesure.',
6310
+ 'feat.configurable': 'Configurable',
6311
+ 'feat.installed_already': '{feature} est déjà installé dans cette application.',
6312
+ 'feat.add': 'Ajouter {feature}',
6313
+ 'feat.title': '{feature} · {app}',
6314
+ 'feat.added': '{feature} ajouté.',
6315
+ 'feat.back_to_the_features': 'Retour aux fonctionnalités',
6316
+ 'feat.cancel': 'Annuler',
6317
+ 'feat.it_added': 'A ajouté',
6318
+ 'feat.it_adds': 'Ajoute',
6319
+ 'feat.app_builder': 'App Builder',
6320
+ 'feat.create_page': 'Créer une page',
6321
+ // ------------------------------------------------------------ OpenTelemetry (sprint 164)
6322
+ 'tel.o.builder': 'défini ici',
6323
+ 'tel.o.environment': 'variable d\'environnement',
6324
+ 'tel.o.default': 'par défaut',
6325
+ 'tel.intro': 'Traces et journaux des applications de cet espace de travail. {state} Un collecteur propre à l\'espace de travail est joint via la liste d\'autorisation de l\'installation et la liste {network} de cet espace de travail.',
6326
+ 'tel.endpoint_help': 'L\'adresse de base OTLP/HTTP ; /v1/traces, /v1/logs et /v1/metrics sont ajoutés. En vigueur : {value} {origin} ({env}).',
6327
+ 'tel.none': 'aucune',
6328
+ 'tel.service_help': 'service.name de tout ce qui est envoyé (OTEL_SERVICE_NAME). En vigueur : {value}.',
6329
+ 'tel.new_token': 'Le nouveau jeton (affiché une seule fois) : {token}',
6330
+ 'tel.test_failed': 'Le collecteur n\'a pas accepté le span de test : {problem}',
6331
+ 'tel.send_traces_logs_and_metrics': 'Envoyez les traces, journaux et métriques des applications vers votre propre supervision (Grafana, Jaeger, Datadog, Honeycomb, OCI APM, ou tout ce qui parle OTLP) via un OpenTelemetry Collector. Une trace par requête de page, avec un span pour chaque instruction SQL, appel de source de données REST, requête d\'IA et appel d\'outil ; les étapes de mail et de workflow comme traces à part. pgkiln envoie de l\'OTLP sur HTTP en JSON. Les variables d\'environnement standard `OTEL_*` fonctionnent aussi ; une valeur définie ici l\'emporte. Le chapitre 1 du guide (Supervision avec OpenTelemetry) explique chaque choix.',
6332
+ 'tel.headers': 'En-têtes',
6333
+ 'tel.remove_the_headers': 'Supprimer les en-têtes',
6334
+ 'tel.opentelemetry': 'OpenTelemetry',
6335
+ 'tel.only_administrators_set_up_opentelemetry': 'Seuls les administrateurs configurent OpenTelemetry pour l\'installation.',
6336
+ 'tel.send': 'Envoyer',
6337
+ 'tel.save': 'Enregistrer',
6338
+ 'tel.send_a_test_span': 'Envoyer un span de test',
6339
+ 'tel.since_this_server_started_each': 'Depuis le démarrage de ce serveur. Chaque serveur de l\'installation envoie les siens.',
6340
+ 'tel.collector': 'Collecteur',
6341
+ 'tel.sending': 'Envoi',
6342
+ 'tel.off': '(désactivé)',
6343
+ 'tel.remove_the_token': 'Supprimer le jeton',
6344
+ 'tel.a_workspace_s_administrators_may': 'Les administrateurs d\'un espace de travail peuvent couper ses applications, ou les envoyer aussi à un collecteur à eux.',
6345
+ 'tel.workspace': 'Espace de travail',
6346
+ 'tel.applications': 'Applications',
6347
+ 'tel.sends': 'Envoie',
6348
+ 'tel.no_workspaces': 'Aucun espace de travail.',
6349
+ 'tel.only_the_workspace_s_administrators': 'Seuls les administrateurs de l\'espace de travail modifient son réglage OpenTelemetry.',
6350
+ 'tel.network_access': 'accès réseau',
6351
+ 'tel.the_applications_send': 'Les applications envoient',
6352
+ 'tel.remove_the_metrics_token_scrapers': 'Supprimer le jeton de métriques ? Les scrapers qui l\'utilisent reçoivent 401.',
6353
+ 'tel.send_to_this_collector': 'Envoyer à ce collecteur',
6354
+ 'tel.collector_url': 'URL du collecteur',
6355
+ 'tel.service_name': 'Nom du service',
6356
+ 'tel.sample_ratio': 'Taux d\'échantillonnage',
6357
+ 'tel.user': 'Utilisateur',
6358
+ 'tel.traces': 'Traces',
6359
+ 'tel.logs_errors_refused_access_and': 'Journaux : erreurs, accès refusés et connexions échouées',
6360
+ 'tel.include_values': 'Inclure les valeurs',
6361
+ 'tel.trace_builder_requests_too': 'Tracer aussi les requêtes du builder',
6362
+ 'tel.browser_spans': 'Spans du navigateur',
6363
+ 'tel.prometheus_endpoint_metrics': 'Point de terminaison Prometheus /metrics',
6364
+ 'tel.as_the_instance_does': 'Comme l\'instance',
6365
+ 'tel.nothing': 'Rien',
6366
+ 'tel.also_to_our_own_collector': 'Aussi à notre propre collecteur',
6367
+ 'tel.own_collector_url': 'URL du collecteur propre',
6368
+ 'tel.include_values_for_the_own': 'Inclure les valeurs pour le collecteur propre',
6369
+ 'tel.share_of_traces_sent_0': 'Part des traces envoyées, de 0 à 1 (OTEL_TRACES_SAMPLER_ARG). Une trace avec une erreur est toujours envoyée. Le traceparent d\'un appelant décide pour sa trace.',
6370
+ 'tel.https_otlp_example_com': 'https://otlp.example.com',
6371
+ 'tel.the_otlp_http_base_address': 'L\'adresse de base OTLP/HTTP ; /v1/traces et /v1/logs sont ajoutés.',
6372
+ 'tel.hashed_the_same_user_gives': 'Haché (le même utilisateur donne la même valeur, le nom n\'est pas envoyé)',
6373
+ 'tel.user_name': 'Nom d\'utilisateur',
6374
+ 'tel.not_sent': 'Non envoyé',
6375
+ 'tel.off_switch_it_on_above': 'Désactivé : activez-le ci-dessus.',
6376
+ 'tel.the_token_is_pgkiln_metrics': 'Le jeton est PGKILN_METRICS_TOKEN.',
6377
+ 'tel.no_token_is_set': 'Aucun jeton n\'est défini.',
6378
+ 'tel.replace_the_token': 'Remplacer le jeton',
6379
+ 'tel.make_a_token': 'Créer un jeton',
6380
+ 'tel.opentelemetry_settings_saved': 'Réglages OpenTelemetry enregistrés.',
6381
+ 'tel.the_collector_took_the_test': 'Le collecteur a accepté le span de test (« pgkiln test span »).',
6382
+ 'tel.the_instance_sends_them_to': 'L\'instance les envoie à son collecteur.',
6383
+ 'tel.the_instance_sends_nothing_at': 'L\'instance n\'envoie rien pour le moment.',
6384
+ 'tel.saved': 'Enregistré.',
6385
+ 'tel.the_workspace_has_no_collector': 'L\'espace de travail n\'a pas de collecteur à lui.',
6386
+ 'tel.off_nothing_leaves_the_server': 'Désactivé : rien ne quitte le serveur (les espaces de travail avec leur propre collecteur continuent d\'y envoyer).',
6387
+ 'tel.sent_with_every_request_to': 'Envoyé avec chaque requête au collecteur, name=value, un par ligne ou séparés par des virgules (OTEL_EXPORTER_OTLP_HEADERS). Conservé chiffré.',
6388
+ 'tel.applications_only_by_default': 'Par défaut, les applications seulement.',
6389
+ 'tel.pages_report_their_load_time': 'Les pages signalent leur temps de chargement et leurs appels Ajax à pgkiln, qui les ajoute à la trace de la page. Le navigateur ne voit jamais le collecteur ni ses en-têtes.',
6390
+ 'tel.for_administrators_signed_in_to': 'Pour les administrateurs connectés au builder, ou un scraper avec le jeton de métriques ci-dessous (PGKILN_METRICS, PGKILN_METRICS_TOKEN).',
6391
+ 'tel.the_metrics_token_is_removed': 'Le jeton de métriques est supprimé.',
6392
+ 'tel.sent_with_every_request_to_2': 'Envoyé avec chaque requête au collecteur propre (une clé d\'API). Conservé chiffré.',
6393
+ 'tel.status': 'Statut',
6394
+ 'tel.prometheus': 'Prometheus',
6395
+ 'tel.workspaces': 'Espaces de travail',
6396
+ 'tel.setting': 'Réglage',
6397
+ 'tel.app_builder': 'App Builder',
6398
+ 'tel.workspace_utilities': 'Utilitaires de l\'espace de travail',
6399
+ 'tel.administration': 'Administration',
6400
+ 'tel.unreadable': '(illisible)',
6401
+ // ------------------------------------------------------------ Page Designer layout (sprint 164)
6402
+ 'arr.spans': 'La région s\'étend sur {n} colonnes sur 12.',
6403
+ 'arr.nothing_undo': 'Rien à annuler.',
6404
+ 'arr.nothing_redo': 'Rien à rétablir.',
6405
+ 'arr.undone': 'Annulé',
6406
+ 'arr.redone': 'Rétabli',
6407
+ 'arr.that_region_is_not_on': 'Cette région n\'est pas sur cette page.',
6408
+ 'arr.unknown_position': 'Position inconnue.',
6409
+ 'arr.unknown_button_position': 'Position de bouton inconnue.',
6410
+ 'arr.unknown_direction': 'Direction inconnue.',
6411
+ 'arr.the_place_to_move_to': 'L\'emplacement cible n\'est pas dans cette région.',
6412
+ 'arr.region_not_found_on_this': 'Région introuvable sur cette page.',
6413
+ 'arr.the_column_span_is_1': 'La largeur en colonnes va de 1 à 12.',
6414
+ 'arr.page_not_found': 'Page introuvable.',
6415
+ 'arr.unknown_region_type': 'Type de région inconnu.',
6416
+ 'arr.unknown_item_type': 'Type d\'élément inconnu.',
6417
+ 'arr.unknown_button_action': 'Action de bouton inconnue.',
6418
+ 'arr.that_page_is_not_in': 'Cette page n\'est pas dans cette application.',
6419
+ 'arr.unknown_component': 'Composant inconnu.',
6420
+ 'arr.unknown_region': 'Région inconnue.',
6421
+ 'arr.unknown_component_type': 'Type de composant inconnu.',
6422
+ 'arr.unknown_component_or_page': 'Composant ou page inconnu.',
6423
+ // ------------------------------------------------------------ Earlier pages, second pass (sprint 164)
6424
+ 'glob.progress': '{done} textes traduits sur {total}. Laissez une traduction vide pour afficher le texte en {language}.',
6425
+ 'rdb.fdw_installed': 'postgres_fdw est installé.',
6426
+ 'diag.unknown': 'La base a des migrations que ce serveur ne connaît pas ({list}) : le serveur est plus ancien que la base.',
6427
+ 'tm.issues_of_page': 'Tickets de la page {page} de {app}.',
6428
+ 'tm.the_application': 'l\'application',
6429
+ 'tm.n_issues': '{n} tickets.',
6430
+ 'tm.n_issues_1': '1 ticket.',
6431
+ 'tm.n_issues_500': '{n} tickets (les 500 premiers).',
6432
+ 'tm.move_to': 'Déplacer #{id} vers',
6433
+ 'tm.feedback_of': 'Retour de {user}',
6434
+ 'tm.comment_of': 'Commentaire de {author}',
6435
+ 'tm.page_n': ', page {n}',
6436
+ 'dts.intro': 'Les jeux de données sont des vues de confiance des données de {workspace} pour les utilisateurs métier : tables et vues d\'un schéma, jointes, avec les colonnes qu\'ils peuvent voir, libellés, masques de format et descriptions, et un filtre de lignes. Une application de reporting sur un ou plusieurs jeux de données permet à ses utilisateurs de créer, enregistrer, publier et partager des rapports ; chaque rapport s\'exécute avec le rôle de base de données de l\'application, donc les droits et la sécurité au niveau des lignes s\'appliquent.',
6437
+ 'dts.this_workspace': 'cet espace de travail',
6438
+ 'wres.remove_stored': 'Supprimer {what} enregistré',
6439
+ 'tpl.no_wrapper': '{name} n\'a pas d\'enveloppe, donc les lignes s\'affichent les unes après les autres.',
6440
+ 'rcat.params_help': '[{"name": "page_size", "in": "query", "key": "pageSize", "default": "20"}] · in : path, query, header, body ; "key" : le nom côté service quand il n\'est pas en minuscules avec _.',
6441
+ 'rcat.intro': 'Services web décrits une fois pour {workspace} : leur URL de base et leurs services. Une application crée une source de données REST à partir d\'un service dans Composants partagés → Sources de données REST → Nouvelle. La source de données est une copie ; les identifiants restent dans l\'application.',
6442
+ 'rcat.this_workspace': 'cet espace de travail',
6443
+ 'rcat.described_once': 'Services décrits une fois pour l\'espace de travail : {link}.',
6444
+ 'bp.ai_help': 'Le service d\'IA {service} écrit un blueprint dans l\'éditeur ci-dessous (en remplaçant ce qui s\'y trouve). Seule votre description est envoyée.',
6445
+ 'bp.thinking': 'Réflexion…',
6446
+ 'bp.spec_help': 'Types de colonne : {types} ; {required}, {unique}, {values} (textes autorisés). Types de page : {kinds} et vierge ({text}). Facultatif : {dashboard}, {navigation}, {sample}.',
6447
+ 'bp.of_app': 'Un blueprint de {app} : vérifiez-le, changez le nom, l\'alias et le schéma, puis {review}.',
6448
+ 'bp.notes': '{n} remarques sur ce qui n\'a pas été repris',
6449
+ 'bp.notes_1': '1 remarque sur ce qui n\'a pas été repris',
6450
+ 'drep.no_object': 'La table ou vue {object} n\'existe pas (plus).',
6451
+ 'drep.no_select': 'Le rôle de base de données de l\'application ne peut pas lire {object} : accordez-lui SELECT.',
6452
+ 'rs.json_columns_help': 'name=column:path[:type] ; séparez-les par ";". Un chemin est une suite de clés séparées par des points, un nombre choisit un élément d\'un tableau. Types : {types} (texte si omis) ; une valeur qui ne se lit pas comme le type s\'affiche vide. Ce sont des colonnes comme les autres : recherche, filtres, tri, en-têtes et téléchargements. Pour modifier des documents, utilisez une source JSON (Composants partagés).',
6453
+ 'dl.load_with_def': 'Charger un fichier avec cette définition',
6454
+ 'aw.schema_help': 'Le schéma d\'analyse de l\'application. Choisissez un schéma pour obtenir une page par table et vue ; un nouveau schéma porte le nom de l\'alias.',
6455
+ 'aw.bp_help': 'Les pages, composants partagés et réglages d\'une application modèle sont copiés ; la nouvelle application garde son propre nom, alias, rôle et authentification.',
6456
+ // ------------------------------------------------------------ Page Designer, Form Designer, utilities, subscriptions, working copies (sprint 164)
6457
+ 'rte.refused_pgkiln_auth_header_proxies': 'refusé : PGKILN_AUTH_HEADER_PROXIES n\'est pas défini',
6458
+ 'rte.no_roles_allowed': 'aucun rôle autorisé',
6459
+ 'rte.no_check_configured_nobody_can': 'aucune vérification configurée : personne ne peut se connecter',
6460
+ 'rte.no_method_enabled': 'aucune méthode activée',
6461
+ 'rte.page_views_24h': 'pages vues (24 h)',
6462
+ 'rte.distinct_users_24h': 'utilisateurs distincts (24 h)',
6463
+ 'rte.average_page_time': 'temps moyen par page',
6464
+ 'rte.failed_locked_sign_ins_24h': 'connexions échouées / verrouillées (24 h)',
6465
+ 'rte.errors_access_denied_24h': 'erreurs / accès refusé (24 h)',
6466
+ 'rte.the_slowest_statements_of_this': 'les instructions les plus lentes du rôle de base de données de cette application',
6467
+ 'rte.the_ai_services_this_application': 'les services d\'IA que cette application peut utiliser, et ses requêtes',
6468
+ 'rte.what_users_sent_from_the': 'ce que les utilisateurs ont envoyé via le lien Commentaires de l\'application, et vos réponses',
6469
+ 'rte.the_mail_this_application_queued': 'les e-mails que cette application a mis en file et envoyés, avec relance et annulation',
6470
+ 'rte.page': 'Page',
6471
+ 'rte.name': 'Nom',
6472
+ 'rte.views': 'Vues',
6473
+ 'rte.avg_ms': 'ms moy.',
6474
+ 'rte.max_ms': 'ms max.',
6475
+ 'rte.hide_page_views': 'Masquer les pages vues',
6476
+ 'rte.include_page_views': 'Inclure les pages vues',
6477
+ 'rte.when': 'Quand',
6478
+ 'rte.event': 'Événement',
6479
+ 'rte.user': 'Utilisateur',
6480
+ 'rte.detail': 'Détail',
6481
+ 'rte.top_sql': 'Top SQL',
6482
+ 'rte.ai_usage': 'Utilisation de l\'IA',
6483
+ 'rte.feedback': 'Commentaires',
6484
+ 'rte.mail': 'E-mail',
6485
+ 'rte.debug_messages': 'Messages de débogage',
6486
+ 'rte.definition': 'Définition',
6487
+ 'rte.security': 'Sécurité',
6488
+ 'rte.sign_in': 'Connexion',
6489
+ 'rte.user_interface': 'Interface utilisateur',
6490
+ 'rte.globalization': 'Globalisation',
6491
+ 'rte.errors_and_sessions': 'Erreurs et sessions',
6492
+ 'rte.progressive_web_app': 'Application web progressive',
6493
+ 'rte.you_are_not_a_developer': 'vous n\'êtes encore développeur d\'aucun espace de travail : demandez à un administrateur de vous en ajouter un.',
6494
+ 'rte.page_views_by_page_7': 'Pages vues par page (7 jours)',
6495
+ 'rte.recent_events': 'Événements récents',
6496
+ 'rte.activity': 'Activité',
6497
+ 'rte.app_builder': 'App Builder',
6498
+ 'rte.settings': 'Paramètres',
6499
+ 'rte.developers': 'Développeurs',
6500
+ 'wcp.lines_with_are_the_main': 'Les lignes avec `-` sont celles de l\'application principale, les lignes avec `+` celles de la copie de travail.',
6501
+ 'wcp.change_it_like_any_application': 'Modifiez-la comme n\'importe quelle application : elle s\'exécute sur le schéma et les données de l\'application principale, avec ses automatisations et synchronisations désactivées. Comparez-la ensuite avec l\'application principale et fusionnez-la.',
6502
+ 'wcp.delete_working_copy': 'Supprimer la copie de travail',
6503
+ 'wcp.a_working_copy_is_a': 'Une copie de travail est une seconde application créée à partir de celle-ci, pour des modifications isolées (APEX : working copies). Comparez-la avec cette application et fusionnez-la composant par composant ; les composants modifiés des deux côtés apparaissent comme des conflits à résoudre.',
6504
+ 'wcp.name': 'Nom',
6505
+ 'wcp.application': 'Application',
6506
+ 'wcp.made_by': 'Créée par',
6507
+ 'wcp.made': 'Créée',
6508
+ 'wcp.last_merged': 'Dernière fusion',
6509
+ 'wcp.actions': 'Actions',
6510
+ 'wcp.no_working_copies': 'Aucune copie de travail.',
6511
+ 'wcp.component': 'Composant',
6512
+ 'wcp.main_application': 'Application principale',
6513
+ 'wcp.working_copy': 'Copie de travail',
6514
+ 'wcp.result': 'Résultat',
6515
+ 'wcp.differences': 'Différences',
6516
+ 'wcp.main': 'Principale',
6517
+ 'wcp.copy': 'Copie',
6518
+ 'wcp.show': 'Afficher',
6519
+ 'wcp.merging_writes_the_result_into': 'La fusion écrit le résultat dans l\'application principale et dans la copie de travail. L\'actualisation l\'écrit seulement dans la copie de travail (en y apportant les modifications de l\'application principale). Les utilisateurs, sessions, rapports enregistrés, secrets et interrupteurs d\'automatisation de l\'application principale restent inchangés.',
6520
+ 'wcp.the_working_copy_and_the': 'La copie de travail et l\'application principale sont identiques : rien à fusionner.',
6521
+ 'wcp.compare_and_merge': 'Comparer et fusionner',
6522
+ 'wcp.create_working_copy': 'Créer une copie de travail',
6523
+ 'wcp.changed_components': 'Composants modifiés',
6524
+ 'wcp.e_g_new_dashboard': 'p. ex. nouveau-tableau-de-bord',
6525
+ 'wcp.changed_in_the_copy': 'Modifié dans la copie',
6526
+ 'wcp.changed_in_the_main_application': 'Modifié dans l\'application principale',
6527
+ 'wcp.conflict_changed_on_both_sides': 'Conflit : modifié des deux côtés',
6528
+ 'wcp.this_application_is_not_a': 'Cette application n\'est pas une copie de travail.',
6529
+ 'wcp.choose_main_or_copy_for': 'Choisissez principale ou copie pour chaque conflit.',
6530
+ 'wcp.working_copies': 'Copies de travail',
6531
+ 'wcp.create_a_working_copy': 'Créer une copie de travail',
6532
+ 'wcp.app_builder': 'App Builder',
6533
+ 'wcp.compare': 'Comparer',
6534
+ 'wcp.side.added': 'ajouté',
6535
+ 'wcp.side.deleted': 'supprimé',
6536
+ 'wcp.side.changed': 'modifié',
6537
+ 'wcp.unchanged': 'inchangé',
6538
+ 'wcp.is_copy': 'Cette application est la copie de travail {name} de {main} ({path}), créée par {by} le {at}.',
6539
+ 'wcp.last_refreshed': 'Dernière actualisation {at}.',
6540
+ 'wcp.last_merged_by': 'Dernière fusion {at} par {by}.',
6541
+ 'wcp.delete_confirm': 'Supprimer la copie de travail {name} et ses modifications non fusionnées ?',
6542
+ 'wcp.created': 'Copie de travail {name} créée : modifiez-la, puis comparez-la et fusionnez-la.',
6543
+ 'wcp.counts': '{copy} modifié(s) dans la copie, {main} modifié(s) dans l\'application principale, {conflicts} conflits.',
6544
+ 'wcp.counts_1': '{copy} modifié(s) dans la copie, {main} modifié(s) dans l\'application principale, 1 conflit.',
6545
+ 'wcp.keep_for': 'Conserver pour {label}',
6546
+ 'wcp.merge_confirm': 'Fusionner la copie de travail dans {main} ?',
6547
+ 'wcp.merge_into': 'Fusionner dans {main}',
6548
+ 'wcp.refresh_from': 'Actualiser la copie depuis {main}',
6549
+ 'wcp.compare_title': 'Comparer avec {main}',
6550
+ 'wcp.compare_intro': 'Copie de travail {copy} de {main}, comparée composant par composant avec l\'application principale telle qu\'elle était à la création de la copie.',
6551
+ 'wcp.compare_intro_since': 'Copie de travail {copy} de {main}, comparée composant par composant avec l\'application principale telle qu\'elle était à la création, l\'actualisation ou la fusion de la copie.',
6552
+ 'wcp.diff_title': 'Différences : {label}',
6553
+ 'wcp.merged': 'Copie de travail {name} fusionnée ({n} composants).',
6554
+ 'wcp.refreshed': 'Copie de travail {name} actualisée depuis l\'application principale.',
6555
+ 'wcp.deleted': 'Copie de travail {name} supprimée.',
6556
+ 'wcp.not_a_copy': 'Pas une copie de travail',
6557
+ 'sub.subscription': 'Abonnement',
6558
+ 'sub.publish_to_subscribers': 'Publier aux abonnés',
6559
+ 'sub.subscribers': 'Abonnés…',
6560
+ 'sub.in_sync': 'synchronisé',
6561
+ 'sub.settings': 'Paramètres',
6562
+ 'sub.components_of_this_application_that': 'Composants de cette application qui sont des copies d\'un composant d\'une application de thème ou de bibliothèque. L\'actualisation recopie la définition du maître et remplace les modifications faites ici.',
6563
+ 'sub.component': 'Composant',
6564
+ 'sub.from': 'De',
6565
+ 'sub.refreshed': 'Actualisé',
6566
+ 'sub.state': 'État',
6567
+ 'sub.actions': 'Actions',
6568
+ 'sub.refresh': 'Actualiser',
6569
+ 'sub.unsubscribe': 'Se désabonner',
6570
+ 'sub.refresh_all': 'Tout actualiser',
6571
+ 'sub.no_subscriptions': 'Aucun abonnement.',
6572
+ 'sub.subscribe': 'S\'abonner',
6573
+ 'sub.the_component_is_copied_now': 'Le composant est copié maintenant. Un composant de cette application portant le même nom est remplacé.',
6574
+ 'sub.no_theme_or_library_applications': 'Aucune application de thème ou de bibliothèque ne propose de composants. Définissez le type d\'une application dans ses Paramètres.',
6575
+ 'sub.subscribe_to_a_component_group': 'S\'abonner à un groupe de composants',
6576
+ 'sub.component_group': 'Groupe de composants',
6577
+ 'sub.every_component_of_the_group': 'Chaque composant du groupe est copié maintenant et abonné (Composants partagés → Groupes de composants d\'une application de thème ou de bibliothèque).',
6578
+ 'sub.subscribe_to_the_group': 'S\'abonner au groupe',
6579
+ 'sub.application': 'Application',
6580
+ 'sub.publish': 'Publier',
6581
+ 'sub.publishing_refreshes_every_subscriber_of': 'La publication actualise chaque abonné d\'un composant avec la version de cette application. Les applications verrouillées par un autre développeur sont ignorées.',
6582
+ 'sub.no_application_subscribes_to_this': 'Aucune application n\'est encore abonnée aux composants de cette application.',
6583
+ 'sub.unsubscribe_the_component_stays_as': 'Se désabonner ? Le composant reste tel quel.',
6584
+ 'sub.theme': 'Thème',
6585
+ 'sub.application_type': 'Type d\'application',
6586
+ 'sub.subscriptions': 'Abonnements',
6587
+ 'sub.subscribers_2': 'Abonnés',
6588
+ 'sub.app_builder': 'App Builder',
6589
+ 'sub.shared_components': 'Composants partagés',
6590
+ 'sub.th.standard': 'Une application ordinaire.',
6591
+ 'sub.th.theme': 'Son thème (couleurs, navigation, styles Theme Roller) et ses composants de modèle sont proposés aux autres applications.',
6592
+ 'sub.th.library': 'Ses listes de valeurs, schémas d\'autorisation, options de build, composants de modèle et listes sont proposés aux autres applications.',
6593
+ 'sub.th.boilerplate': 'Un point de départ : Créer une application peut la copier.',
6594
+ 'sub.th.reporting': 'Créée par App Builder → Data Reporter sur des jeux de données de l\'espace de travail : ses utilisateurs créent, publient et partagent des rapports.',
6595
+ 'sub.k.lov': 'Liste de valeurs',
6596
+ 'sub.k.authz_scheme': 'Schéma d\'autorisation',
6597
+ 'sub.k.build_option': 'Option de build',
6598
+ 'sub.k.template_component': 'Composant de modèle',
6599
+ 'sub.k.list': 'Liste',
6600
+ 'sub.what': '{kind} {name}',
6601
+ 'sub.subscribed_from': 'Abonné depuis {master}. Les modifications faites ici sont écrasées à la prochaine actualisation.',
6602
+ 'sub.subscribed_from_at': 'Abonné depuis {master}, actualisé {at}. Les modifications faites ici sont écrasées à la prochaine actualisation.',
6603
+ 'sub.refresh_from': 'Actualiser depuis {master}',
6604
+ 'sub.subscribers_1': '1 application est abonnée à ce {kind}.',
6605
+ 'sub.subscribers_n': '{n} applications sont abonnées à ce {kind}.',
6606
+ 'sub.type_line': '{type} : {help} Modifiez-le sous {settings}.',
6607
+ 'sub.choose_dash': '- choisir -',
6608
+ 'sub.choose_component': 'Choisissez un composant.',
6609
+ 'sub.choose_group': 'Choisissez un groupe de composants.',
6610
+ 'sub.subscribed': 'Abonné : {what} copié.',
6611
+ 'sub.subscribed_group': 'Abonné à {group} : {n} composants copiés.',
6612
+ 'sub.subscribed_group_1': 'Abonné à {group} : 1 composant copié.',
6613
+ 'sub.subscribed_group_skipped': 'Abonné à {group} : {n} composants copiés ; ignorés : {skipped}.',
6614
+ 'sub.subscribed_group_skipped_1': 'Abonné à {group} : 1 composant copié ; ignorés : {skipped}.',
6615
+ 'sub.not_subscribed': 'Non abonné.',
6616
+ 'sub.no_subscriber': 'Aucune application n\'y est abonnée.',
6617
+ 'sub.published': 'Publié vers {n} applications.',
6618
+ 'sub.published_1': 'Publié vers 1 application.',
6619
+ 'sub.published_skipped': 'Publié vers {n} applications ; {skipped} ignorée(s) (verrouillée(s) par un autre développeur).',
6620
+ 'sub.published_skipped_1': 'Publié vers 1 application ; {skipped} ignorée(s) (verrouillée(s) par un autre développeur).',
6621
+ 'sub.title': 'Abonnements de {app}',
6622
+ 'util.pages': 'Pages',
6623
+ 'util.regions': 'Régions',
6624
+ 'util.items': 'Éléments',
6625
+ 'util.processes': 'Processus',
6626
+ 'util.lists_of_values': 'Listes de valeurs',
6627
+ 'util.changes_in_7_days': 'Modifications sur 7 jours',
6628
+ 'util.page': 'Page',
6629
+ 'util.last_change': 'Dernière modification',
6630
+ 'util.by': 'Par',
6631
+ 'util.changes': 'Modifications',
6632
+ 'util.no_recorded_changes_yet_the': 'Aucune modification enregistrée pour l\'instant : l\'historique commence avec la première modification après la mise à niveau vers cette version.',
6633
+ 'util.the_checksum_of_the_application': 'La somme de contrôle de la définition de l\'application (son export sans l\'alias) : la même définition donne la même somme sur toute installation, si bien que deux installations, ou une application et sa copie de travail, se comparent d\'un coup d\'œil.',
6634
+ 'util.checksum': 'Somme de contrôle',
6635
+ 'util.every_change_made_in_the': 'Chaque modification faite dans le builder (et chaque import, restauration ou fusion) est comparée à l\'application d\'avant : chaque composant ajouté, modifié ou supprimé est listé ici avec qui et quand. Les modifications depuis la ligne de commande ou le serveur MCP n\'ont pas de développeur.',
6636
+ 'util.from': 'Du',
6637
+ 'util.to': 'Au',
6638
+ 'util.component': 'Composant',
6639
+ 'util.when': 'Quand',
6640
+ 'util.developer': 'Développeur',
6641
+ 'util.change': 'Modification',
6642
+ 'util.differences': 'Différences',
6643
+ 'util.show': 'Afficher',
6644
+ 'util.icons': 'Icônes',
6645
+ 'util.search': 'Rechercher',
6646
+ 'util.no_lucide_icon_matches': 'Aucune icône Lucide ne correspond.',
6647
+ 'util.search_to_see_the_matching': 'Recherchez pour voir les icônes Lucide correspondantes.',
6648
+ 'util.e_g_p3_id': 'p. ex. P3_ID',
6649
+ 'util.e_g_truck_money_arrow': 'p. ex. truck, money, arrow',
6650
+ 'util.all': 'Tous',
6651
+ 'util.plans_every_sql_statement_as': 'Planifie chaque instruction SQL avec le rôle de l\'application et vérifie chaque référence.',
6652
+ 'util.the_tables_views_sequences_and': 'Les tables, vues, séquences et fonctions utilisées par l\'application, celles qui manquent et les droits manquants.',
6653
+ 'util.who_changed_which_component_and': 'Qui a modifié quel composant et quand, avec les différences.',
6654
+ 'util.components_that_can_use_a': 'Composants qui peuvent utiliser une valeur par défaut plus récente de cette version de pgkiln.',
6655
+ 'util.labels_format_masks_help_and': 'Libellés, masques de format, aide et listes de valeurs par colonne de table, utilisés par les assistants de page.',
6656
+ 'util.names_sql_conditions_settings_and': 'Noms, SQL, conditions, paramètres et textes d\'aide de chaque composant.',
6657
+ 'util.timed_steps_of_each_request': 'Étapes chronométrées de chaque requête et messages de meta.debug().',
6658
+ 'util.page_views_errors_sign_ins': 'Pages vues, erreurs, connexions et journaux de l\'application.',
6659
+ 'util.back_up_now_download_and': 'Sauvegarder maintenant, télécharger et restaurer des versions antérieures.',
6660
+ 'util.change_a_copy_compare_it': 'Modifier une copie, la comparer et la fusionner.',
6661
+ 'util.browse_the_icons_the_icon': 'Parcourir les icônes proposées par le sélecteur d\'icônes.',
6662
+ 'util.application_dashboard': 'Tableau de bord de l\'application',
6663
+ 'util.recently_updated_pages': 'Pages modifiées récemment',
6664
+ 'util.application_checksum': 'Somme de contrôle de l\'application',
6665
+ 'util.change_history': 'Historique des modifications',
6666
+ 'util.icon_browser': 'Navigateur d\'icônes',
6667
+ 'util.app_builder': 'App Builder',
6668
+ 'util.utilities': 'Utilitaires',
6669
+ 'util.workspace_utilities': 'Utilitaires de l\'espace de travail',
6670
+ 'util.c_advisor': 'Conseiller',
6671
+ 'util.c_deps': 'Dépendances des objets de base de données',
6672
+ 'util.c_history': 'Historique des modifications',
6673
+ 'util.c_upgrade': 'Mettre à niveau l\'application',
6674
+ 'util.c_ui_defaults': 'Valeurs par défaut de l\'interface',
6675
+ 'util.c_search': 'Rechercher',
6676
+ 'util.c_debug': 'Messages de débogage',
6677
+ 'util.c_activity': 'Activité',
6678
+ 'util.c_backups': 'Sauvegardes',
6679
+ 'util.c_wc': 'Copies de travail',
6680
+ 'util.c_export': 'Exporter',
6681
+ 'util.c_icons': 'Icônes',
6682
+ 'util.export_text': 'L\'application sous forme de fichier (somme de contrôle {sum}).',
6683
+ 'util.title': 'Utilitaires · {app}',
6684
+ 'util.cmd_line': 'Ligne de commande / import',
6685
+ 'util.import': 'import',
6686
+ 'util.command_line': 'ligne de commande',
6687
+ 'util.the_command_line': 'la ligne de commande',
6688
+ 'util.no_changes': 'Aucune modification enregistrée pour l\'instant.',
6689
+ 'util.no_changes_filtered': 'Aucune modification avec ces filtres.',
6690
+ 'util.diff_title': 'Différences : {label}',
6691
+ 'util.diff_intro': '{op} par {who}, {when}. Les lignes avec {minus} sont d\'avant la modification, les lignes avec {plus} d\'après.',
6692
+ 'util.history_title': 'Historique des modifications · {app}',
6693
+ 'util.icons_intro': 'Les icônes du sélecteur d\'icônes : le jeu propre de pgkiln et {n} icônes Lucide ({version}, licence ISC). Utilisez le nom dans un champ d\'icône ; des modificateurs comme {lg}, {spin} ou {success} peuvent le suivre (p. ex. {example}), et les noms Font APEX fonctionnent quand Lucide a la même icône ({fa}).',
6694
+ 'util.op.added': 'ajouté',
6695
+ 'util.op.changed': 'modifié',
6696
+ 'util.op.deleted': 'supprimé',
6697
+ 'fdz.static_id': 'Id statique',
6698
+ 'fdz.label': 'Libellé',
6699
+ 'fdz.description_shown_to_designers': 'Description (affichée aux concepteurs)',
6700
+ 'fdz.key_column_identifies_a_row': 'Colonne clé (identifie une ligne)',
6701
+ 'fdz.forms_on_it_may': 'Les formulaires dessus peuvent',
6702
+ 'fdz.offer': 'Proposer',
6703
+ 'fdz.column': 'Colonne',
6704
+ 'fdz.list_of_values': 'Liste de valeurs',
6705
+ 'fdz.not_in_the_table': 'absente de la table',
6706
+ 'fdz.remove_this_data_source_forms': 'Retirer cette source de données (les formulaires dessus cessent de fonctionner)',
6707
+ 'fdz.form_designer_settings': 'Paramètres du concepteur de formulaires',
6708
+ 'fdz.users_that_pass_the_designers': 'Les utilisateurs qui satisfont le schéma d\'autorisation des concepteurs créent des formulaires de saisie sur les tables et vues ci-dessous : ils choisissent les colonnes proposées, les libellés, les textes d\'aide, les champs obligatoires et les valeurs par défaut, et publient des formulaires pour tous ceux qui voient cette région. Les formulaires lisent et écrivent les lignes avec le rôle de base de données de l\'application : les droits et la sécurité au niveau des lignes s\'appliquent.',
6709
+ 'fdz.forms': 'Formulaires',
6710
+ 'fdz.who_may_design_forms': 'Qui peut concevoir des formulaires',
6711
+ 'fdz.rows_per_page': 'Lignes par page',
6712
+ 'fdz.text_when_there_are_no': 'Texte quand il n\'y a aucune ligne',
6713
+ 'fdz.add_a_data_source': 'Ajouter une source de données',
6714
+ 'fdz.table_or_view': 'Table ou vue',
6715
+ 'fdz.all_columns_are_offered_at': 'Toutes les colonnes sont proposées au départ (sauf les colonnes binaires et JSON), la clé primaire est la colonne clé, et les formulaires peuvent ajouter et modifier des lignes, pas les supprimer. Décochez les colonnes que les concepteurs ne doivent pas mettre sur les formulaires, comme les clés générées et les colonnes d\'audit.',
6716
+ 'fdz.save_form_designer_settings': 'Enregistrer les paramètres du concepteur de formulaires',
6717
+ 'fdz.no_data_found': 'Aucune donnée trouvée',
6718
+ 'fdz.from_the_name': 'd\'après le nom',
6719
+ 'fdz.nobody_choose_an_authorization_scheme': 'Personne (choisissez un schéma d\'autorisation)',
6720
+ 'fdz.add_rows': 'ajouter des lignes',
6721
+ 'fdz.change_rows': 'modifier des lignes',
6722
+ 'fdz.delete_rows': 'supprimer des lignes',
6723
+ 'fdz.settings_saved': 'Paramètres enregistrés.',
6724
+ 'fdz.choose_a_table_or_view': 'Choisissez une table ou une vue pour la nouvelle source de données.',
6725
+ 'fdz.no_authz': 'Il n\'existe pas de schéma d\'autorisation {name}.',
6726
+ 'fdz.no_columns': 'La source de données {id} ne propose aucune colonne.',
6727
+ 'fdz.dup_source': 'Il existe déjà une source de données {id}.',
6728
+ 'fdz.needs_key': '(nécessite une colonne clé)',
6729
+ 'fdz.no_key': '- aucune : les formulaires ajoutent seulement des lignes -',
6730
+ 'fdz.offer_col': 'Proposer {col}',
6731
+ 'fdz.label_of': 'Libellé de {col}',
6732
+ 'fdz.lov_of': 'Liste de valeurs de {col}',
6733
+ 'fdz.no_object': 'La table ou vue {object} n\'existe pas (ou plus).',
6734
+ 'fdz.lacks': 'Il manque au rôle de base de données de l\'application {privs} sur {object} : accordez-le, sinon les formulaires ne peuvent pas le faire.',
6735
+ 'pdz.p1_item_binds_an_item': '`:P1_ITEM` lie la valeur d\'un élément dans tout SQL (toujours échappée). `:APP_USER`, `:APP_PAGE_ID`, `:REQUEST` sont intégrés.',
6736
+ 'pdz.p1_item_substitutes_into_titles': '`&P1_ITEM.` se substitue dans les titres, le HTML statique et les cibles de liens (échappé en HTML).',
6737
+ 'pdz.in_sql_pl_pgsql_and': 'En SQL, PL/pgSQL et politiques RLS : `meta.app_user()`, `meta.has_role(\'admin\')`, `meta.v(\'P1_ITEM\')`, `meta.page_url(3, \'{"P3_ID": 7}\')`.',
6738
+ 'pdz.a_pl_pgsql_raise_exception': 'Un `raise exception \'Message\' using column = \'sal\'` PL/pgSQL affiche le message sur l\'élément dont la colonne source est `sal`.',
6739
+ 'pdz.layout': 'Disposition',
6740
+ 'pdz.column_span': 'nombre de colonnes',
6741
+ 'pdz.drag_a_region_by_its': 'Faites glisser une région par son en-tête pour la déplacer, ou son bord droit pour l\'élargir ou la rétrécir.',
6742
+ 'pdz.drag_items_and_buttons_to': 'Faites glisser éléments et boutons vers un autre endroit ou une autre région.',
6743
+ 'pdz.drag_a_region_item_or': 'Faites glisser une région, un élément ou un bouton de la galerie sur la disposition pour le créer ; ou ouvrez une entrée de la galerie pour le créer avec un formulaire.',
6744
+ 'pdz.alt': 'Alt',
6745
+ 'pdz.shift': 'Maj',
6746
+ 'pdz.arrange': 'Organiser',
6747
+ 'pdz.undo': 'Annuler',
6748
+ 'pdz.redo': 'Rétablir',
6749
+ 'pdz.cheat_sheet': 'Aide-mémoire',
6750
+ 'pdz.identification': 'Identification',
6751
+ 'pdz.appearance': 'Apparence',
6752
+ 'pdz.warn_on_unsaved_changes': 'Avertir des modifications non enregistrées',
6753
+ 'pdz.ask_before_the_user_leaves': 'Demander avant que l\'utilisateur quitte la page (un lien, un bouton de redirection, la fermeture de l\'onglet) pendant qu\'un élément a une valeur modifiée. La soumission ne demande rien. Excluez un élément avec {"warn_unsaved": false} dans ses attributs.',
6754
+ 'pdz.security': 'Sécurité',
6755
+ 'pdz.requires_authentication': 'Requiert une authentification',
6756
+ 'pdz.help': 'Aide',
6757
+ 'pdz.help_text': 'Texte d\'aide',
6758
+ 'pdz.markdown_with_amp_item_substitutions': 'Markdown avec substitutions &amp;ITEM. Une région de type Texte d\'aide sur la page l\'affiche (APEX : Page → Help).',
6759
+ 'pdz.page_number': 'Numéro de page',
6760
+ 'pdz.name': 'Nom',
6761
+ 'pdz.title': 'Titre',
6762
+ 'pdz.page_mode': 'Mode de page',
6763
+ 'pdz.page_group': 'Groupe de pages',
6764
+ 'pdz.page_template': 'Modèle de page',
6765
+ 'pdz.dialog_position': 'Position de la boîte de dialogue',
6766
+ 'pdz.dialog_size': 'Taille de la boîte de dialogue',
6767
+ 'pdz.javascript_and_css_files': 'Fichiers JavaScript et CSS',
6768
+ 'pdz.breadcrumb_parent': 'Parent dans le fil d\'Ariane',
6769
+ 'pdz.authorization_scheme': 'Schéma d\'autorisation',
6770
+ 'pdz.page_access_protection': 'Protection d\'accès à la page',
6771
+ 'pdz.build_option': 'Option de build',
6772
+ 'pdz.e_g_page_3_js': 'p. ex. page-3.js, page-3.css',
6773
+ 'pdz.static_application_files_js_css': 'Fichiers statiques de l\'application (.js, .css) que cette page charge après ceux de l\'application, dans cet ordre ; #WORKSPACE_FILES#name pour un fichier statique de l\'espace de travail.',
6774
+ 'pdz.normal': 'Normal',
6775
+ 'pdz.modal_dialog': 'Boîte de dialogue modale',
6776
+ 'pdz.none': '- aucun -',
6777
+ 'pdz.standard': 'Standard',
6778
+ 'pdz.left_side_column': 'Colonne latérale gauche',
6779
+ 'pdz.right_side_column': 'Colonne latérale droite',
6780
+ 'pdz.minimal_no_navigation': 'Minimal (sans navigation)',
6781
+ 'pdz.centred_dialog': 'Boîte de dialogue centrée',
6782
+ 'pdz.drawer_from_the_right': 'Tiroir depuis la droite',
6783
+ 'pdz.drawer_from_the_left': 'Tiroir depuis la gauche',
6784
+ 'pdz.drawer_from_the_top': 'Tiroir depuis le haut',
6785
+ 'pdz.drawer_from_the_bottom': 'Tiroir depuis le bas',
6786
+ 'pdz.small': 'Petite',
6787
+ 'pdz.medium': 'Moyenne',
6788
+ 'pdz.large': 'Grande',
6789
+ 'pdz.arguments_must_have_checksum': 'Les arguments doivent avoir une somme de contrôle',
6790
+ 'pdz.unrestricted': 'Sans restriction',
6791
+ 'pdz.organises_the_pages_in_the': 'Organise les pages dans l\'App Builder (Composants partagés → Groupes de pages). Ne change rien à l\'exécution de l\'application.',
6792
+ 'pdz.side_column_regions_with_position': 'Colonne latérale : les régions en position gauche (ou droite) s\'affichent dans une colonne à côté du corps (en dessous sur les écrans étroits). Minimal : ni en-tête ni menu de navigation, p. ex. pour une page de connexion (Paramètres de l\'application → Page de connexion).',
6793
+ 'pdz.modal_pages_only_on_phones': 'Pages modales uniquement. Sur téléphone, les boîtes de dialogue et tiroirs latéraux occupent tout l\'écran.',
6794
+ 'pdz.the_width_the_height_of': 'La largeur (la hauteur pour les tiroirs du haut et du bas).',
6795
+ 'pdz.app_builder': 'App Builder',
6796
+ 'pdz.grid_help': 'Les régions se placent sur une grille de 12 colonnes dans l\'ordre de séquence ; le {span} d\'une région fixe sa largeur, et les régions passent à une nouvelle ligne quand la ligne est pleine.',
6797
+ 'pdz.keyboard_help': 'Clavier : placez le focus sur un composant de la disposition et appuyez sur {move} pour le déplacer, {resize} pour changer la largeur d\'une région. Les boutons {arrange} au-dessus des propriétés font de même.',
6798
+ 'pdz.undo_help': '{undo} et {redo} dans la barre d\'outils reviennent sur les modifications de disposition.',
6799
+ 'pdz.title_help': 'Prend en charge les substitutions &ITEM.',
6800
+ 'pdz.not_authz': 'Pas {name}',
6801
+ // ------------------------------------------------------------ Application groups, Find my workspace, static application files (sprint 164 part 11)
6802
+ 'agr.exists': 'Un groupe portant ce nom existe déjà.',
6803
+ 'agr.bad_name': 'Le nom compte de 1 à 60 caractères, sans espace au début ni à la fin.',
6804
+ 'agr.intro': 'Les groupes organisent les applications de cet espace de travail ({workspace}) sur l\'accueil d\'App Builder, qui peut afficher un groupe à la fois. Ils ne modifient rien dans les applications.',
6805
+ 'agr.groups': 'Groupes',
6806
+ 'agr.group': 'Groupe',
6807
+ 'agr.applications': 'Applications',
6808
+ 'agr.application': 'Application',
6809
+ 'agr.rename': 'Renommer',
6810
+ 'agr.new_name_for': 'Nouveau nom pour {name}',
6811
+ 'agr.delete_confirm': 'Supprimer le groupe {name} ? Ses applications restent, sans groupe.',
6812
+ 'agr.delete_name': 'Supprimer {name}',
6813
+ 'agr.no_groups': 'Aucun groupe pour l\'instant.',
6814
+ 'agr.add_title': 'Ajouter un groupe',
6815
+ 'agr.name': 'Nom',
6816
+ 'agr.name_ph': 'Finance',
6817
+ 'agr.description': 'Description',
6818
+ 'agr.add': 'Ajouter le groupe',
6819
+ 'agr.group_of': 'Groupe de {name}',
6820
+ 'agr.no_group': '(aucun groupe)',
6821
+ 'agr.save': 'Enregistrer les groupes',
6822
+ 'agr.no_apps': 'Aucune application dans cet espace de travail.',
6823
+ 'agr.added': 'Groupe {name} ajouté.',
6824
+ 'agr.renamed': 'Groupe renommé en {name}.',
6825
+ 'agr.deleted': 'Groupe {name} supprimé.',
6826
+ 'agr.saved': 'Groupes enregistrés.',
6827
+ 'fw.mail_admin': 'administrateur : tous les espaces de travail',
6828
+ 'fw.mail_no_ws': 'Aucun espace de travail pour l\'instant : demandez à un administrateur.',
6829
+ 'fw.mail_intro': 'Vous avez demandé à quels espaces de travail pgkiln vous pouvez vous connecter.',
6830
+ 'fw.mail_sign_in': 'Connectez-vous sur {url}',
6831
+ 'fw.mail_ignore': 'Si vous n\'avez rien demandé, ignorez ce message : rien n\'a été modifié.',
6832
+ 'fw.mail_subject': 'Vos espaces de travail pgkiln',
6833
+ 'fw.back': 'Retour à la connexion',
6834
+ 'fw.no_mail': 'Cette installation n\'envoie pas de courriel aux développeurs. Demandez à un administrateur à quels espaces de travail vous appartenez, ou connectez-vous avec votre nom d\'utilisateur et votre mot de passe seulement : l\'espace de travail est facultatif.',
6835
+ 'fw.check_mail': 'Consultez vos courriels',
6836
+ 'fw.intro': 'Saisissez l\'adresse électronique de votre compte développeur : nous vous envoyons votre nom d\'utilisateur et les espaces de travail auxquels vous pouvez vous connecter.',
6837
+ 'fw.send': 'Envoyer',
6838
+ 'fw.bad_email': 'Saisissez une adresse électronique, p. ex. ann@example.com.',
6839
+ 'fw.sent': 'Si un compte développeur a l\'adresse {email}, il reçoit dans quelques minutes un courriel avec son nom d\'utilisateur et ses espaces de travail. Pas de courriel ? Demandez à un administrateur.',
6840
+ 'sf.edit_title': 'Modifier {name}',
6841
+ 'sf.new_file': 'Nouveau fichier',
6842
+ 'sf.file_name': 'Nom du fichier',
6843
+ 'sf.file_name_help': 'Lettres, chiffres, _, - et . (p. ex. app.js, styles.css, data.json).',
6844
+ 'sf.content': 'Contenu',
6845
+ 'sf.content_help': 'Le JavaScript enregistre des fonctions pour l\'action dynamique « Execute JavaScript » avec `pgkiln.actions.register(\'name\', (da) => { … })` ; il peut aussi utiliser `pgkiln.getValue`, `setValue`, `showSuccess` et `showError`. Pas de scripts en ligne : tout s\'exécute depuis ces fichiers.',
6846
+ 'sf.title': 'Fichiers statiques de l\'application',
6847
+ 'sf.intro': 'JavaScript, CSS, JSON, images et polices de cette application, servis à {path} et exportés avec elle. Les pages chargent les scripts et feuilles de style choisis ci-dessous (et ceux qu\'une page ajoute dans ses propriétés) : le code s\'exécute depuis des fichiers, jamais en ligne. Jusqu\'à {max} par fichier ; pas de HTML.',
6848
+ 'sf.name': 'Nom',
6849
+ 'sf.type': 'Type',
6850
+ 'sf.size': 'Taille',
6851
+ 'sf.loaded_by': 'Chargé par',
6852
+ 'sf.changed': 'Modifié',
6853
+ 'sf.actions': 'Actions',
6854
+ 'sf.every_page': 'chaque page',
6855
+ 'sf.pages': 'page {pages}',
6856
+ 'sf.edit': 'Modifier',
6857
+ 'sf.delete_confirm': 'Supprimer {name} ?',
6858
+ 'sf.delete_name': 'Supprimer {name}',
6859
+ 'sf.no_files': 'Aucun fichier pour l\'instant.',
6860
+ 'sf.files_to_upload': 'Fichiers à téléverser',
6861
+ 'sf.upload': 'Téléverser',
6862
+ 'sf.replaced': 'Un fichier du même nom est remplacé.',
6863
+ 'sf.every_page_loads': 'Chaque page charge',
6864
+ 'sf.includes': 'Scripts et feuilles de style, dans l\'ordre',
6865
+ 'sf.includes_ph': 'p. ex. library.js, app.js, app-styles.css',
6866
+ 'sf.includes_help': 'Jusqu\'à {max} fichiers .js et .css, chargés dans cet ordre après ceux de pgkiln (scripts différés). #WORKSPACE_FILES#name est un fichier statique de l\'espace de travail (Utilitaires de l\'espace de travail). Une page ajoute ses propres fichiers sous Page → Apparence.',
6867
+ 'sf.choose_files': 'Choisissez un ou plusieurs fichiers.',
6868
+ 'sf.too_large_name': '{name} dépasse {max}.',
6869
+ 'sf.bad_type': '{name} : nom ou type non autorisé (lettres, chiffres, _, - et . ; {types}).',
6870
+ 'sf.uploaded': 'Téléversés : {names}.',
6871
+ 'sf.bad_text_name': 'Le nom doit se terminer par un type texte (.js, .css, .json, .txt, .csv, .md, .map) et n\'utiliser que des lettres, chiffres, _, - et .',
6872
+ 'sf.too_large': 'Le fichier dépasse {max}.',
6873
+ 'sf.saved_name': '{name} enregistré.',
6874
+ 'sf.deleted': '{name} supprimé.',
6875
+ 'sf.no_such_file': 'Ce fichier n\'existe pas.',
6876
+ 'sf.saved_missing': 'Enregistré. Pas encore téléversés (ignorés en attendant) : {names}.',
6877
+ 'sf.saved': 'Enregistré.',
6878
+ // ------------------------------------------------------------ Notifications and live badges (sprint 165)
6879
+ 'nfy.heading': 'Notifications',
6880
+ 'nfy.bell': 'Cloche de notifications dans l\'en-tête',
6881
+ 'nfy.bell_help': 'Les utilisateurs connectés voient leurs notifications non lues et les plus récentes ; en ouvrir une la marque comme lue et mène à sa page. Ajoutez-les en SQL avec `meta.notify(user, title, body, page, items)` ou avec un processus de type send_notification ; `meta.unread_notifications()` en donne le nombre, p. ex. pour un badge.',
6882
+ 'nfy.live': 'Badges en direct (secondes)',
6883
+ 'nfy.live_ph': 'p. ex. 60 (vide : désactivé)',
6884
+ 'nfy.live_help': 'Toutes les N secondes (10 à 3600), une page ouverte actualise ses badges sur place : menu et barre de navigation, boutons avec requête de badge et cloche. Pas tant que l\'onglet est masqué ; cela ne prolonge pas la session.',
6885
+ 'nfy.live_invalid': 'Badges en direct : un nombre entier de secondes de 10 à 3600, ou vide.',
6886
+ // ------------------------------------------------------------ Page and application locks, developer comments (sprint 164 part 12)
6887
+ 'lk.run_only': 'L\'application est en « Exécution seule » (Disponibilité → Statut de build).',
6888
+ 'lk.page_locked_by': 'La page {page} est verrouillée par {user} depuis {since}{note}.',
6889
+ 'lk.app_locked_by': 'L\'application est verrouillée par {user} depuis {since}{note}.',
6890
+ 'lk.run_only_refused': 'Remettez-la en « Exécuter et construire » pour la modifier.',
6891
+ 'lk.refused': 'Les modifications sont refusées tant qu\'elle n\'est pas déverrouillée.',
6892
+ 'lk.break_confirm_page': 'Briser le verrou de {user} sur la page {page} ?',
6893
+ 'lk.break_confirm_app': 'Briser le verrou de {user} sur l\'application ?',
6894
+ 'lk.unlock': 'Déverrouiller',
6895
+ 'lk.break': 'Briser le verrou (administrateur)',
6896
+ 'lk.only_owner': 'Seul {user} ou un administrateur peut le déverrouiller.',
6897
+ 'lk.not_locked_page': 'Non verrouillée : tout développeur peut modifier la page {page}.',
6898
+ 'lk.not_locked_app': 'Non verrouillée : tout développeur peut modifier l\'application.',
6899
+ 'lk.note': 'Note',
6900
+ 'lk.note_ph': 'Note (facultative), p. ex. refonte du formulaire',
6901
+ 'lk.lock_page': 'Verrouiller la page {page}',
6902
+ 'lk.lock_app': 'Verrouiller l\'application',
6903
+ 'lk.lock': 'Verrou',
6904
+ 'lk.comments': 'Commentaires',
6905
+ 'lk.comment_on_page': 'Ajouter un commentaire sur la page {page}',
6906
+ 'lk.comment_on_app': 'Ajouter un commentaire sur l\'application',
6907
+ 'lk.add_comment': 'Ajouter le commentaire',
6908
+ 'lk.delete_comment_confirm': 'Supprimer ce commentaire ?',
6909
+ 'lk.delete': 'Supprimer',
6910
+ 'lk.issue': 'Ticket n° {n}',
6911
+ 'lk.make_issue': 'En faire un ticket',
6912
+ 'lk.no_comments': 'Aucun commentaire pour l\'instant.',
6913
+ 'lk.locked_page': 'La page {page} est verrouillée : les autres développeurs ne peuvent pas la modifier tant que vous ne la déverrouillez pas.',
6914
+ 'lk.locked_app': 'L\'application est verrouillée : les autres développeurs ne peuvent pas la modifier tant que vous ne la déverrouillez pas.',
6915
+ 'lk.already': 'C\'est déjà verrouillé.',
6916
+ 'lk.not_locked': 'Ce n\'est pas verrouillé.',
6917
+ 'lk.only_unlocker': 'Seul le développeur qui l\'a verrouillé ou un administrateur peut le déverrouiller.',
6918
+ 'lk.unlocked': 'Déverrouillé.',
6919
+ 'lk.broken': 'Le verrou de {user} a été brisé.',
6920
+ 'lk.comment_length': 'Un commentaire compte de 1 à 4000 caractères.',
6921
+ 'lk.comment_added': 'Commentaire ajouté.',
6922
+ 'lk.only_author': 'Seul l\'auteur ou un administrateur peut supprimer un commentaire.',
6923
+ 'lk.comment_deleted': 'Commentaire supprimé.',
6924
+ // ------------------------------------------------------------ Automations: actions and runs (sprint 164 part 12)
6925
+ 'au.back_to': 'Retour à {name}',
6926
+ 'au.failed_rows': '{n} ligne(s) en échec',
6927
+ 'au.first': '({n} premières)',
6928
+ 'au.row_action': 'Ligne {row}, action {action}',
6929
+ 'au.not_scheduled': 'non planifiée (désactivée)',
6930
+ 'au.never': 'jamais : {message}',
6931
+ 'au.scheduler_off': '(le planificateur est désactivé sur ce serveur : AUTOMATIONS=off)',
6932
+ 'au.actions': 'Actions',
6933
+ 'au.order_once': 'Exécutées dans cet ordre, une fois, en une transaction.',
6934
+ 'au.order_rows': 'Exécutées dans cet ordre, pour chaque ligne de la requête, en une transaction.',
6935
+ 'au.order_rows_skip': 'Exécutées dans cet ordre, pour chaque ligne de la requête, en une transaction par exécution ; une ligne en échec est annulée et ignorée.',
6936
+ 'au.seq': 'Séq.',
6937
+ 'au.action': 'Action',
6938
+ 'au.condition': 'Condition',
6939
+ 'au.order': 'Ordre',
6940
+ 'au.always': 'toujours',
6941
+ 'au.move_up': 'Monter {name}',
6942
+ 'au.move_down': 'Descendre {name}',
6943
+ 'au.no_actions': 'Aucune action pour l\'instant : une exécution ne fait rien.',
6944
+ 'au.add_action': 'Ajouter une action',
6945
+ 'au.runs': 'Exécutions',
6946
+ 'au.next_run': 'Prochaine exécution : {when}',
6947
+ 'au.from_code': 'Depuis le code de l\'application : {call} l\'exécute maintenant, dans la transaction de l\'appelant.',
6948
+ 'au.run_now': 'Exécuter maintenant',
6949
+ 'au.started': 'Début',
6950
+ 'au.took': 'Durée',
6951
+ 'au.by': 'Par',
6952
+ 'au.status': 'Statut',
6953
+ 'au.rows': 'Lignes',
6954
+ 'au.failed': 'En échec',
6955
+ 'au.message': 'Message',
6956
+ 'au.no_runs': 'Aucune exécution pour l\'instant.',
6957
+ 'au.ran': 'Exécutée avec succès.',
6958
+ 'au.ran_rows': 'Exécutée avec succès pour {n} ligne(s).',
6959
+ 'au.ran_errors': 'Exécutée avec des erreurs : {message}. Voir l\'historique des exécutions.',
6960
+ 'au.failed_run': 'L\'automatisation a échoué.',
6961
+ // ------------------------------------------------------------ Workflow versions and instances (sprint 164 part 12)
6962
+ 'wfv.draft_new': 'Les étapes brouillon appartiennent à une version de développement : créez le workflow sans elles, puis une nouvelle version pour modéliser avec des brouillons.',
6963
+ 'wfv.draft_active': 'La version {version} est active : les étapes brouillon appartiennent à une version de développement.',
6964
+ 'wfv.active_fixed': 'La version {version} est active et ne peut pas être modifiée. Créez une nouvelle version pour modifier ses étapes.',
6965
+ 'wfv.running': '({n} en cours)',
6966
+ 'wfv.versions': 'Versions',
6967
+ 'wfv.intro': 'Les nouvelles instances démarrent la version {active} ; les instances en cours gardent leur version de départ. Modifiez une version {development}, puis activez-la.',
6968
+ 'wfv.state.active': 'active',
6969
+ 'wfv.state.development': 'développement',
6970
+ 'wfv.state.inactive': 'inactive',
6971
+ 'wfv.version': 'Version',
6972
+ 'wfv.state': 'État',
6973
+ 'wfv.activated': 'Activée',
6974
+ 'wfv.instances': 'Instances',
6975
+ 'wfv.activate_confirm': 'Activer la version {version} ? Les nouvelles instances la démarrent ; celles en cours gardent leur version.',
6976
+ 'wfv.activate': 'Activer',
6977
+ 'wfv.discard_confirm': 'Abandonner la version {version} et ses modifications ?',
6978
+ 'wfv.discard': 'Abandonner',
6979
+ 'wfv.diagram': 'Diagramme',
6980
+ 'wfv.new_label': 'Libellé de la nouvelle version',
6981
+ 'wfv.new': 'Créer une nouvelle version',
6982
+ 'wfv.new_help': 'Une copie de la version {version} à modifier ; le libellé est facultatif ({next}).',
6983
+ 'wfv.diagram_dev': 'Diagramme de la version {version} (développement)',
6984
+ 'wfv.diagram_of': 'Diagramme de la version {version}',
6985
+ 'wfv.drafts': 'Les étapes brouillon ({steps}) sont des espaces réservés : remplacez-les avant d\'activer la version {version}.',
6986
+ 'wfv.svg': 'Télécharger le SVG',
6987
+ 'wfv.png': 'Télécharger le PNG',
6988
+ 'wfv.counts': 'Instances : {counts}. Les instances en cours gardent les étapes de leur version de départ.',
6989
+ 'wfv.none_yet': 'aucune pour l\'instant',
6990
+ 'wfv.migrate_title': 'Migrer les instances en cours vers une version plus récente',
6991
+ 'wfv.migrate': 'Migrer les instances…',
6992
+ 'wfv.id': 'Id',
6993
+ 'wfv.title': 'Titre',
6994
+ 'wfv.at': 'À',
6995
+ 'wfv.started': 'Début',
6996
+ 'wfv.instance_at': 'Instance {id}, version {version} : à {steps}',
6997
+ 'wfv.instance': 'Instance {id}, version {version}',
6998
+ 'wfv.pick': 'Choisissez une instance pour voir où elle en est dans le diagramme de sa version.',
6999
+ 'wfv.bad_label': 'Un libellé de version contient des lettres, chiffres, points, tirets et soulignés (30 au plus).',
7000
+ 'wfv.created': 'Version {version} créée (développement) : modifiez ses étapes, puis activez-la.',
7001
+ 'wfv.no_dev': 'Il n\'y a pas de version en développement.',
7002
+ 'wfv.cant_activate': 'La version {version} ne peut pas être activée : {problems}',
7003
+ 'wfv.activated_flash': 'La version {version} est active : les nouvelles instances la démarrent.',
7004
+ 'wfv.discarded': 'Version {version} abandonnée.',
7005
+ 'wfv.was_no_dev': 'Il n\'y avait pas de version en développement.',
7006
+ // ------------------------------------------------------------ Workflow migration (sprint 164 part 12)
7007
+ 'wfm.no_steps': 'Cette version n\'a pas d\'étapes à dessiner.',
7008
+ 'wfm.choose_instances': 'Choisissez les instances à migrer.',
7009
+ 'wfm.title': 'Migrer les instances en cours',
7010
+ 'wfm.none_running': '{name} n\'a pas d\'instances en cours.',
7011
+ 'wfm.back_to': 'Retour à {name}',
7012
+ 'wfm.all_current': 'Toutes les instances en cours de {name} utilisent la version active {version} : il n\'y a pas de version plus récente vers laquelle les déplacer.',
7013
+ 'wfm.intro': 'Déplacez les instances en cours vers une version plus récente : chacune reprend à l\'étape de la nouvelle version vers laquelle son étape actuelle est associée, en gardant ses variables et la tâche qu\'elle attend. Une instance dans des branches parallèles se déplace en entier : son chemin principal à sa jonction et chaque branche ouverte à sa propre étape, chacune associée (une jonction reste une jonction). Chaque position doit être associée, sinon rien ne bouge.',
7014
+ 'wfm.to_version': 'Vers la version',
7015
+ 'wfm.to_help': 'Si vous la changez : prévisualisez à nouveau pour voir ses étapes.',
7016
+ 'wfm.older': 'Instances sur une version plus ancienne',
7017
+ 'wfm.migrate': 'Migrer',
7018
+ 'wfm.migrate_instance': 'Migrer l\'instance {id}',
7019
+ 'wfm.branches_at': 'branches à {steps}',
7020
+ 'wfm.none_older': 'Aucune instance en cours n\'est plus ancienne que la version {version}.',
7021
+ 'wfm.map': 'Associer les étapes actuelles aux étapes de la version {version}',
7022
+ 'wfm.no_mapping': '— aucune association —',
7023
+ 'wfm.preview': 'Aperçu',
7024
+ 'wfm.path': 'Chemin',
7025
+ 'wfm.from': 'De',
7026
+ 'wfm.to': 'Vers',
7027
+ 'wfm.result': 'Résultat',
7028
+ 'wfm.branch': 'branche {name}',
7029
+ 'wfm.main': 'principal',
7030
+ 'wfm.ready': 'prête',
7031
+ 'wfm.confirm': 'Migrer {n} instance(s) vers la version {version} ?',
7032
+ 'wfm.do': 'Migrer {n} instance(s)',
7033
+ 'wfm.not_ready': 'Associez une étape à chaque instance et branche (ou retirez les instances) et prévisualisez à nouveau : rien n\'est migré tant qu\'une ne peut pas bouger.',
7034
+ 'wfm.version': 'Version {version}',
7035
+ 'wfm.page_title': 'Migrer {name}',
7036
+ 'wfm.crumb': 'Migrer les instances',
7037
+ 'wfm.choose_version': 'Choisissez la version vers laquelle migrer.',
7038
+ 'wfm.done': '{n} instance(s) de {name} migrée(s) vers la version {version}.',
7039
+ // ------------------------------------------------------------ Upgrade application (sprint 164 part 13)
7040
+ 'upg.rule_nav_title': 'Apparence de la navigation',
7041
+ 'upg.rule_nav_since': 'Les apparences de navigation (Pillar Light, Pillar Dark) sont arrivées avec le sprint 117.',
7042
+ 'upg.rule_date_title': 'Sélecteur de date pour les colonnes de date',
7043
+ 'upg.rule_date_since': 'Les éléments date et date-heure ont le sélecteur de date de pgkiln depuis le sprint 84.',
7044
+ 'upg.rule_popup_title': 'Liste de valeurs paginée pour les grandes tables',
7045
+ 'upg.rule_popup_since': 'Les listes de valeurs contextuelles recherchent et paginent sur le serveur.',
7046
+ 'upg.label_theme': 'Paramètres de l\'application › Thème',
7047
+ 'upg.reason_nav': 'L\'application n\'a pas d\'apparence de navigation : Pillar Light lui donne le bandeau d\'en-tête et la page courante remplie des nouvelles applications.',
7048
+ 'upg.label_item': 'Page {page} › élément {name}',
7049
+ 'upg.reason_date': '{column} est une colonne {type} affichée comme champ de texte : un élément date a le sélecteur de date et lit la date au format de l\'application.',
7050
+ 'upg.reason_datetime': '{column} est une colonne {type} affichée comme champ de texte : un élément date-heure a le sélecteur de date et lit la date au format de l\'application.',
7051
+ 'upg.reason_popup': 'Sa liste de valeurs lit {table} (environ {n} lignes) : une liste de sélection envoie toutes les lignes avec la page ; une liste de valeurs contextuelle recherche et pagine sur le serveur.',
7052
+ 'upg.col_component': 'Composant',
7053
+ 'upg.col_why': 'Pourquoi',
7054
+ 'upg.col_actions': 'Actions',
7055
+ 'upg.preview': 'Aperçu',
7056
+ 'upg.upgrade': 'Mettre à niveau',
7057
+ 'upg.upgrade_all': 'Mettre à niveau les {n}',
7058
+ 'upg.nothing': 'Rien à mettre à niveau.',
7059
+ 'upg.intro': 'Composants créés avant une version de pgkiln qui a apporté une meilleure valeur par défaut. Prévisualisez un changement, puis mettez à niveau un composant ou tous ceux d\'un type ; chaque mise à niveau figure dans l\'historique des modifications (et les sauvegardes) si vous voulez revenir en arrière.',
7060
+ 'upg.preview_title': 'Aperçu : {label}',
7061
+ 'upg.title': 'Mettre à niveau l\'application · {name}',
7062
+ 'upg.gone': 'Rien à mettre à niveau : le composant a été modifié ou mis à niveau entre-temps.',
7063
+ 'upg.done_one': '{label} mis à niveau.',
7064
+ 'upg.done_n': '{n} composants mis à niveau.',
7065
+ // ------------------------------------------------------------ Report layouts: logo (sprint 164 part 13)
7066
+ 'lay.logo_image': 'Image du logo',
7067
+ 'lay.logo_alt': 'Logo de cette mise en page',
7068
+ 'lay.no_logo': 'Pas de logo. Il s\'imprime en haut à droite de la première page.',
7069
+ 'lay.logo_file': 'Logo (PNG ou JPEG)',
7070
+ 'lay.upload': 'Téléverser',
7071
+ 'lay.remove': 'Supprimer le logo',
7072
+ 'lay.preview_pdf': 'Aperçu du PDF',
7073
+ 'lay.removed': 'Logo supprimé.',
7074
+ 'lay.choose': 'Choisissez un fichier PNG ou JPEG.',
7075
+ 'lay.too_large': 'Le logo dépasse {mb} Mo.',
7076
+ 'lay.not_image': 'Le logo doit être une image PNG ou JPEG.',
7077
+ 'lay.saved': 'Logo enregistré.',
7078
+ // ------------------------------------------------------------ Object dependencies (sprint 164 part 13)
7079
+ 'dep.not_parsed': 'Non analysé (seuls SELECT, INSERT, UPDATE, DELETE et MERGE sont analysés) : {statements}',
7080
+ 'dep.page_tag': 'page {n}',
7081
+ 'dep.col_object': 'Objet',
7082
+ 'dep.col_type': 'Type',
7083
+ 'dep.col_status': 'Statut',
7084
+ 'dep.col_pages': 'Pages',
7085
+ 'dep.col_used_by': 'Utilisé par',
7086
+ 'dep.missing': 'Manquant',
7087
+ 'dep.no_grant': 'Pas de droit',
7088
+ 'dep.lacks': 'Il manque {privileges} à {role}',
7089
+ 'dep.ok': 'OK',
7090
+ 'dep.n_component': '{n} composant',
7091
+ 'dep.n_components': '{n} composants',
7092
+ 'dep.no_objects': 'Aucun objet.',
7093
+ 'dep.no_match': 'Aucun objet ne correspond.',
7094
+ 'dep.intro': 'Les tables, vues, séquences et fonctions qu\'utilise le SQL de l\'application ({n} instructions analysées en tant que rôle {role} ; rien n\'est exécuté), avec les composants qui les utilisent. Les objets manquants et les droits qui manquent au rôle sont signalés.',
7095
+ 'dep.runtime_connection': '(la connexion d\'exécution)',
7096
+ 'dep.n_objects': '{n} objets',
7097
+ 'dep.n_missing': '{n} manquants',
7098
+ 'dep.n_without_grants': '{n} sans les droits nécessaires',
7099
+ 'dep.filter': 'Filtrer',
7100
+ 'dep.filter_ph': 'p. ex. sales.orders',
7101
+ 'dep.all_objects': 'Tous les objets',
7102
+ 'dep.only_problems': 'Problèmes uniquement',
7103
+ 'dep.not_scanned': 'Non analysé',
7104
+ 'dep.note': 'Remarque',
7105
+ 'dep.title': 'Dépendances des objets · {name}',
7106
+ 'dep.crumb': 'Dépendances des objets',
7107
+ // ------------------------------------------------------------ UI defaults (sprint 164 part 13)
7108
+ 'uid.schema': 'Schéma',
7109
+ 'uid.choose_schema': 'Choisissez un schéma',
7110
+ 'uid.table_or_view': 'Table ou vue',
7111
+ 'uid.choose_table': 'Choisissez une table',
7112
+ 'uid.col_column': 'Colonne',
7113
+ 'uid.col_label': 'Libellé',
7114
+ 'uid.col_mask': 'Masque de format',
7115
+ 'uid.col_alignment': 'Alignement',
7116
+ 'uid.col_help': 'Aide',
7117
+ 'uid.col_lov': 'Liste de valeurs',
7118
+ 'uid.label_of': 'Libellé de {column}',
7119
+ 'uid.mask_of': 'Masque de format de {column}',
7120
+ 'uid.alignment_of': 'Alignement de {column}',
7121
+ 'uid.help_of': 'Aide de {column}',
7122
+ 'uid.lov_of': 'Liste de valeurs de {column}',
7123
+ 'uid.seed': 'Remplir à partir des commentaires',
7124
+ 'uid.help': 'Une ligne vide n\'a pas de valeur par défaut de l\'interface. L\'espace réservé d\'un libellé montre ce que les assistants utilisent sans elle. Listes de valeurs : `LOV:NAME` (une liste de valeurs partagée de l\'application), `STATIC:Yes;Y,No;N` ou une requête (`select name d, id r from sales.status`).',
7125
+ 'uid.per_column': 'Valeurs par défaut de l\'interface par colonne',
7126
+ 'uid.intro': 'Libellé, masque de format, texte d\'aide, alignement et liste de valeurs par colonne de table (APEX : Attribute Dictionary). Les assistants de page et l\'assistant Créer une application utilisent le libellé pour chaque en-tête de rapport et élément de formulaire générés, et un élément de formulaire généré reçoit aussi le masque de format, l\'aide et la liste de valeurs. Ils s\'appliquent aux pages générées après la modification, dans toutes les applications.',
7127
+ 'uid.seeded_one': 'Valeurs par défaut de l\'interface de {n} colonne créées à partir de son commentaire.',
7128
+ 'uid.seeded': 'Valeurs par défaut de l\'interface de {n} colonnes créées à partir de leurs commentaires.',
7129
+ 'uid.no_comments': 'Aucune colonne sans valeur par défaut de l\'interface n\'a de commentaire.',
7130
+ 'uid.bad_mask': 'Masque de format de {column} : lettres, chiffres et . , : / - uniquement (p. ex. 999G990D00 ou DD.MM.YYYY).',
7131
+ 'uid.bad_alignment': 'Alignement de {column} : start, center ou end.',
7132
+ 'uid.saved': 'Valeurs par défaut de l\'interface de {table} enregistrées.',
7133
+ // ------------------------------------------------------------ Supporting objects (sprint 164 part 13)
7134
+ 'sup.statement': 'Instruction',
7135
+ 'sup.rows': '{command}, {n} ligne(s)',
7136
+ 'sup.ran_install': 'Les scripts d\'installation ont été exécutés : {n} instruction(s), validées.',
7137
+ 'sup.ran_upgrade': 'Les scripts de mise à niveau ont été exécutés : {n} instruction(s), validées.',
7138
+ 'sup.ran_deinstall': 'Les scripts de désinstallation ont été exécutés : {n} instruction(s), validées.',
7139
+ 'sup.failed_install': 'Les scripts d\'installation ont échoué : tout ce qu\'ils ont fait a été annulé (rollback).',
7140
+ 'sup.failed_upgrade': 'Les scripts de mise à niveau ont échoué : tout ce qu\'ils ont fait a été annulé (rollback).',
7141
+ 'sup.failed_deinstall': 'Les scripts de désinstallation ont échoué : tout ce qu\'ils ont fait a été annulé (rollback).',
7142
+ 'sup.error': 'Erreur : {message}',
7143
+ 'sup.imported': 'Cette application est arrivée avec des objets de support. Ils n\'ont {b}pas{b_end} été exécutés : lisez-les ci-dessous et ne les exécutez que si vous leur faites confiance.',
7144
+ 'sup.result_install': 'Résultat : scripts d\'installation',
7145
+ 'sup.result_upgrade': 'Résultat : scripts de mise à niveau',
7146
+ 'sup.result_deinstall': 'Résultat : scripts de désinstallation',
7147
+ 'sup.intro': 'Scripts qui installent, mettent à niveau ou suppriment ce dont l\'application a besoin dans la base de données. Ils voyagent avec l\'export et ne s\'exécutent qu\'ici, quand vous le décidez : en tant que rôle de base de données de l\'application {role}, instruction par instruction dans une transaction (une erreur annule toute l\'exécution). {add} dans Composants partagés.',
7148
+ 'sup.no_role': '(aucun : la connexion d\'exécution)',
7149
+ 'sup.add_script': 'Ajouter un script',
7150
+ 'sup.h_install': 'Scripts d\'installation ({n})',
7151
+ 'sup.h_upgrade': 'Scripts de mise à niveau ({n})',
7152
+ 'sup.h_deinstall': 'Scripts de désinstallation ({n})',
7153
+ 'sup.edit': 'Modifier',
7154
+ 'sup.run_install': 'Exécuter les scripts d\'installation',
7155
+ 'sup.run_upgrade': 'Exécuter les scripts de mise à niveau',
7156
+ 'sup.run_deinstall': 'Exécuter les scripts de désinstallation',
7157
+ 'sup.confirm_install': 'Exécuter les scripts d\'installation de {app} en tant que {role} ?',
7158
+ 'sup.confirm_upgrade': 'Exécuter les scripts de mise à niveau de {app} en tant que {role} ?',
7159
+ 'sup.confirm_deinstall': 'Exécuter les scripts de désinstallation de {app} en tant que {role} ?',
7160
+ 'sup.runtime_connection': 'la connexion d\'exécution',
7161
+ 'sup.none': 'Aucun.',
7162
+ 'sup.unknown_kind': 'Type de script inconnu',
7163
+ // ------------------------------------------------------------ Cross-application reports (sprint 164 part 13)
7164
+ 'xap.attributes.title': 'Attributs de l\'application',
7165
+ 'xap.attributes.about': 'Les principaux paramètres de chaque application : type, connexion, disponibilité, statut de build, niveau de débogage, langue et rôle de base de données.',
7166
+ 'xap.build_options.title': 'Options de build',
7167
+ 'xap.build_options.about': 'Les options de build de chaque application et si leurs composants sont inclus.',
7168
+ 'xap.comments.title': 'Commentaires des développeurs',
7169
+ 'xap.comments.about': 'Les commentaires des développeurs sur les applications et les pages, les plus récents d\'abord.',
7170
+ 'xap.authentication.title': 'Authentification',
7171
+ 'xap.authentication.about': 'Comment les utilisateurs se connectent à chaque application : la méthode de connexion, la connexion par mot de passe, les fournisseurs d\'identité et annuaires LDAP, le contrôle d\'accès, la page de connexion et « Mot de passe oublié ».',
7172
+ 'xap.authorization.title': 'Schémas d\'autorisation',
7173
+ 'xap.authorization.about': 'Les schémas d\'autorisation de chaque application : leur type et ce qu\'ils vérifient.',
7174
+ 'xap.password_items.title': 'Éléments de mot de passe',
7175
+ 'xap.password_items.about': 'Chaque élément de mot de passe : pgkiln n\'affiche plus jamais leurs valeurs, ne les conserve jamais dans l\'état de session pour la page suivante et ne les écrit jamais dans le journal de débogage.',
7176
+ 'xap.theme.title': 'Résumé des thèmes',
7177
+ 'xap.theme.about': 'L\'apparence de chaque application : style de base, style Theme Roller, navigation et les couleurs qu\'elle définit.',
7178
+ 'xap.col.alias': 'Alias',
7179
+ 'xap.col.type': 'Type',
7180
+ 'xap.col.sign_in': 'Connexion',
7181
+ 'xap.col.availability': 'Disponibilité',
7182
+ 'xap.col.build_status': 'Statut de build',
7183
+ 'xap.col.debug': 'Débogage',
7184
+ 'xap.col.language': 'Langue',
7185
+ 'xap.col.database_role': 'Rôle de base de données',
7186
+ 'xap.col.updated': 'Mis à jour',
7187
+ 'xap.col.build_option': 'Option de build',
7188
+ 'xap.col.status': 'Statut',
7189
+ 'xap.col.description': 'Description',
7190
+ 'xap.col.page': 'Page',
7191
+ 'xap.col.author': 'Auteur',
7192
+ 'xap.col.written': 'Rédigé',
7193
+ 'xap.col.comment': 'Commentaire',
7194
+ 'xap.col.passwords': 'Mots de passe',
7195
+ 'xap.col.identity_providers': 'Fournisseurs d\'identité',
7196
+ 'xap.col.ldap_directories': 'Annuaires LDAP',
7197
+ 'xap.col.access': 'Accès',
7198
+ 'xap.col.keep_me_signed_in_days': 'Rester connecté (jours)',
7199
+ 'xap.col.login_page': 'Page de connexion',
7200
+ 'xap.col.forgot_password': 'Mot de passe oublié',
7201
+ 'xap.col.scheme': 'Schéma',
7202
+ 'xap.col.checks': 'Vérifie',
7203
+ 'xap.col.error_message': 'Message d\'erreur',
7204
+ 'xap.col.item': 'Élément',
7205
+ 'xap.col.label': 'Libellé',
7206
+ 'xap.col.show_button': 'Bouton Afficher',
7207
+ 'xap.col.required': 'Obligatoire',
7208
+ 'xap.col.base_style': 'Style de base',
7209
+ 'xap.col.style': 'Style',
7210
+ 'xap.col.navigation': 'Navigation',
7211
+ 'xap.col.colours_set': 'Couleurs définies',
7212
+ 'xap.col.installable_pwa': 'Installable (PWA)',
7213
+ 'xap.of_workspace': 'Applications de l\'espace de travail {name}.',
7214
+ 'xap.nav': 'Rapports inter-applications',
7215
+ 'xap.application': 'Application',
7216
+ 'xap.nothing': 'Rien à signaler dans cet espace de travail.',
7217
+ // ------------------------------------------------------------ Workspace export and import (sprint 164 part 13)
7218
+ 'wtr.admins_only': 'Seuls les administrateurs et les administrateurs de l\'espace de travail exportent ou importent les composants d\'un espace de travail.',
7219
+ 'wtr.components': 'Composants',
7220
+ 'wtr.in_file': 'dans le fichier',
7221
+ 'wtr.issues': '{n} ticket(s)',
7222
+ 'wtr.intro': 'Les composants de l\'espace de travail {name} dans un seul fichier : pour les copier vers un autre espace de travail ou une autre installation, ou pour les conserver avec les fichiers de vos applications. Les applications s\'exportent séparément (App Builder → une application → Exporter).',
7223
+ 'wtr.imported_into': 'Importé dans {name} :',
7224
+ 'wtr.export': 'Exporter',
7225
+ 'wtr.import': 'Importer',
7226
+ 'wtr.not_in_file': 'Absents du fichier : le nom de l\'espace de travail, son isolation et ses rôles de base de données, les mots de passe et secrets, les exécutions de scripts et tout autre historique.',
7227
+ 'wtr.import_intro': 'Un fichier exporté d\'un espace de travail, importé dans {name}. Rien n\'est supprimé ; les développeurs ne sont ajoutés que si cette installation a un développeur de ce nom.',
7228
+ 'wtr.file': 'Fichier de l\'espace de travail',
7229
+ 'wtr.replace': 'Remplacer les composants de même nom (sinon ceux de cet espace de travail sont conservés)',
7230
+ 'wtr.choose_part': 'Choisissez au moins un type de composant.',
7231
+ 'wtr.too_big': 'Le fichier dépasse {n} Mo.',
7232
+ 'wtr.choose_file': 'Choisissez un fichier d\'espace de travail.',
7233
+ 'wtr.not_json': 'Le fichier n\'est pas un JSON valide.',
7234
+ 'wtr.failed': 'Échec de l\'import, rien n\'a été modifié : {reason}',
7235
+ 'wtr.refused_value': 'le fichier contient une valeur que cette installation refuse ({detail}).',
7236
+ 'wtr.duplicate': 'le fichier contient deux composants de même nom ({detail}).',
7237
+ 'wtr.part.settings': 'Paramètres : description, message, bannière et préférences',
7238
+ 'wtr.part.developers': 'Développeurs et administrateurs de l\'espace de travail',
7239
+ 'wtr.part.app_groups': 'Groupes d\'applications',
7240
+ 'wtr.part.extension_links': 'Liens d\'extension',
7241
+ 'wtr.part.rest_catalogs': 'Catalogues de sources REST',
7242
+ 'wtr.part.sql_scripts': 'Scripts SQL',
7243
+ 'wtr.part.blueprints': 'Modèles',
7244
+ 'wtr.part.data_generators': 'Générateurs de données',
7245
+ 'wtr.part.datasets': 'Jeux de données de Data Reporter',
7246
+ 'wtr.part.team': 'Team Development : libellés, jalons, modèles et tickets',
7247
+ 'wtr.part.workspace_files': 'Fichiers statiques de l\'espace de travail',
7248
+ 'wtr.part.remote_servers': 'Serveurs distants (un serveur existant conserve son URL de base)',
7249
+ 'wtr.part.web_credentials': 'Identifiants web (sans leurs secrets)',
7250
+ // ------------------------------------------------------------ Application backups (sprint 164 part 13)
7251
+ 'bkp.reason.import': 'avant un import',
7252
+ 'bkp.reason.merge': 'avant la fusion d\'une copie de travail',
7253
+ 'bkp.reason.restore': 'avant une restauration',
7254
+ 'bkp.reason.daily': 'quotidienne',
7255
+ 'bkp.reason.manual': 'faite manuellement',
7256
+ 'bkp.intro': 'Exports de cette application conservés par cette installation : un avant chaque import qui la remplace (aussi depuis la ligne de commande et le serveur MCP), avant la fusion d\'une copie de travail et une restauration, un par jour lorsqu\'elle a changé, et ceux créés ici. Les {n} plus récents sont conservés. Les sauvegardes ne sont pas exportées.',
7257
+ 'bkp.made_utc': 'Créée (UTC)',
7258
+ 'bkp.made': 'Créée',
7259
+ 'bkp.why': 'Motif',
7260
+ 'bkp.by': 'Par',
7261
+ 'bkp.note': 'Note',
7262
+ 'bkp.size': 'Taille',
7263
+ 'bkp.actions': 'Actions',
7264
+ 'bkp.download': 'Télécharger',
7265
+ 'bkp.restore_confirm': 'Restaurer l\'application telle qu\'elle était le {when} ? Ses pages, composants partagés et paramètres deviennent ceux de la sauvegarde ; la version actuelle est d\'abord sauvegardée.',
7266
+ 'bkp.restore': 'Restaurer',
7267
+ 'bkp.delete_confirm': 'Supprimer cette sauvegarde ?',
7268
+ 'bkp.delete': 'Supprimer',
7269
+ 'bkp.none': 'Aucune sauvegarde pour l\'instant.',
7270
+ 'bkp.back_up_now': 'Sauvegarder maintenant',
7271
+ 'bkp.note_placeholder': 'p. ex. avant le nouveau tableau de bord',
7272
+ 'bkp.keep': 'Conservation',
7273
+ 'bkp.to_keep': 'Sauvegardes à conserver',
7274
+ 'bkp.to_keep_help': 'De 0 à 500 ; 0 ne crée aucune sauvegarde (pas même avant un import).',
7275
+ 'bkp.page_title': 'Sauvegardes de {name}',
7276
+ 'bkp.made_flash': 'Sauvegarde créée.',
7277
+ 'bkp.none_kept': 'Aucune sauvegarde créée : cette application n\'en conserve aucune (définissez « Sauvegardes à conserver »).',
7278
+ 'bkp.keep_invalid': 'Sauvegardes à conserver : un nombre entier de 0 à 500.',
7279
+ 'bkp.saved': 'Enregistré.',
7280
+ 'bkp.not_found': 'Sauvegarde introuvable.',
7281
+ 'bkp.restored': 'Application restaurée telle qu\'elle était le {when}. La version remplacée est la sauvegarde la plus récente.',
7282
+ 'bkp.restore_failed': 'Échec de la restauration : {message}',
7283
+ 'bkp.deleted': 'Sauvegarde supprimée.',
7284
+ 'bkp.not_found_short': 'Introuvable.',
7285
+ // ------------------------------------------------------------ Manage backups (sprint 164 part 13)
7286
+ 'wbk.intro': 'Les sauvegardes des applications de {name} : une avant chaque import qui remplace une application, une fusion ou une restauration, une par jour lorsqu\'elle a changé, et celles faites manuellement. Ouvrez les sauvegardes d\'une application pour en télécharger, restaurer ou supprimer une.',
7287
+ 'wbk.intro_this': 'Les sauvegardes des applications de cet espace de travail : une avant chaque import qui remplace une application, une fusion ou une restauration, une par jour lorsqu\'elle a changé, et celles faites manuellement. Ouvrez les sauvegardes d\'une application pour en télécharger, restaurer ou supprimer une.',
7288
+ 'wbk.applications': 'Applications',
7289
+ 'wbk.application': 'Application',
7290
+ 'wbk.backups': 'Sauvegardes',
7291
+ 'wbk.storage': 'Stockage',
7292
+ 'wbk.changed_since_newest': 'Modifiées depuis leur sauvegarde la plus récente',
7293
+ 'wbk.kept': 'Conservées',
7294
+ 'wbk.newest_utc': 'La plus récente (UTC)',
7295
+ 'wbk.newest': 'La plus récente',
7296
+ 'wbk.size': 'Taille',
7297
+ 'wbk.none': 'aucune',
7298
+ 'wbk.never': 'jamais',
7299
+ 'wbk.changed_since': 'modifiée depuis',
7300
+ 'wbk.no_apps': 'Aucune application.',
7301
+ 'wbk.back_up_all': 'Sauvegarder toutes les applications',
7302
+ 'wbk.back_up_all_text': 'Crée une sauvegarde de chaque application de cet espace de travail qui conserve des sauvegardes.',
7303
+ 'wbk.note': 'Note',
7304
+ 'wbk.note_placeholder': 'p. ex. avant la mise à niveau',
7305
+ 'wbk.only_changed': 'Uniquement les applications modifiées depuis leur sauvegarde la plus récente',
7306
+ 'wbk.back_up_now': 'Sauvegarder maintenant',
7307
+ 'wbk.failed_one': '{n} sauvegarde(s) créée(s) ; non sauvegardée : application {ids}.',
7308
+ 'wbk.failed_many': '{n} sauvegarde(s) créée(s) ; non sauvegardées : applications {ids}.',
7309
+ 'wbk.made_one': '{n} sauvegarde créée.',
7310
+ 'wbk.made_many': '{n} sauvegardes créées.',
7311
+ 'wbk.nothing': 'Rien à sauvegarder : chaque application est inchangée depuis sa sauvegarde la plus récente ou n\'en conserve aucune.',
7312
+ // ------------------------------------------------------------ Availability (sprint 164 part 13)
7313
+ 'avl.mode.available': 'Disponible',
7314
+ 'avl.mode.developers': 'Disponible pour les développeurs uniquement',
7315
+ 'avl.mode.restricted': 'Réservée aux utilisateurs ci-dessous (et aux développeurs)',
7316
+ 'avl.mode.unavailable': 'Indisponible',
7317
+ 'avl.intro': 'Qui peut utiliser l\'application en cours d\'exécution. Les développeurs sont ceux connectés au builder dans le même navigateur (ils voient la barre d\'outils développeur). Les pages, les téléchargements de fichiers, les modules REST et l\'API REST suivent ce paramètre ; les automatisations, les workflows, les tâches en arrière-plan et les e-mails en file d\'attente continuent de fonctionner. Il appartient à cette installation : les exports l\'omettent et un import par-dessus l\'application le conserve.',
7318
+ 'avl.status': 'Statut',
7319
+ 'avl.message': 'Message',
7320
+ 'avl.message_help': 'Affiché lorsque l\'application est indisponible ou réservée aux développeurs, p. ex. « Nous mettons l\'application à jour ; retour à 14 h 00. » Vide : un message standard dans la langue de l\'utilisateur.',
7321
+ 'avl.users': 'Utilisateurs (réservée)',
7322
+ 'avl.users_help': 'Noms d\'utilisateur séparés par des virgules ou des espaces. Ils se connectent comme d\'habitude ; les autres reçoivent « non disponible pour votre compte ».',
7323
+ 'avl.build_status': 'Statut de build',
7324
+ 'avl.run_and_build': 'Exécuter et créer',
7325
+ 'avl.run_only': 'Exécution seule',
7326
+ 'avl.build_status_help': 'Exécution seule : le builder refuse les modifications de l\'application (pages, composants partagés, paramètres, restaurations) jusqu\'à ce qu\'elle soit remise ici. pgkiln import --replace la déploie toujours.',
7327
+ 'avl.page_title': 'Disponibilité de {name}',
7328
+ 'avl.users_invalid': 'Les noms d\'utilisateur comptent au plus 100 caractères, sans espaces ni deux-points.',
7329
+ 'avl.saved': 'Disponibilité enregistrée.',
7330
+ 'avl.not_found': 'Introuvable.',
7331
+ // ------------------------------------------------------------ Feedback (sprint 164 part 13)
7332
+ 'fbk.title': 'Retours',
7333
+ 'fbk.status.open': 'Ouvert',
7334
+ 'fbk.status.in_progress': 'En cours',
7335
+ 'fbk.status.done': 'Terminé',
7336
+ 'fbk.status.declined': 'Refusé',
7337
+ 'fbk.kind.comment': 'Commentaire',
7338
+ 'fbk.kind.idea': 'Idée',
7339
+ 'fbk.kind.problem': 'Problème',
7340
+ 'fbk.enable': 'Les utilisateurs peuvent envoyer des retours',
7341
+ 'fbk.enable_help': 'Un lien {link} dans la barre de navigation de l\'application ouvre une page pour un commentaire, une idée ou un problème concernant la page d\'où vient l\'utilisateur, avec ses retours précédents et vos réponses.',
7342
+ 'fbk.counts': '{open} ouverts, {in_progress} en cours, {done} terminés, {declined} refusés.',
7343
+ 'fbk.status': 'Statut',
7344
+ 'fbk.kind': 'Type',
7345
+ 'fbk.all': 'Tous',
7346
+ 'fbk.page': 'page {n}',
7347
+ 'fbk.answer': 'Réponse (l\'utilisateur la voit)',
7348
+ 'fbk.answered_by': 'Par {user}, {when}',
7349
+ 'fbk.none': 'Aucun retour pour l\'instant.',
7350
+ 'fbk.none_filtered': 'Aucun retour avec ces filtres.',
7351
+ 'fbk.page_title': 'Retours de {name}',
7352
+ 'fbk.saved': 'Enregistré.',
7353
+ 'fbk.not_found': 'Introuvable.',
7354
+ // ------------------------------------------------------------ Plug-ins (plugins.ts) (sprint 164 part 13)
7355
+ 'plg.type.region': 'Région',
7356
+ 'plg.type.item': 'Elément',
7357
+ 'plg.type.dynamic_action': 'Action dynamique',
7358
+ 'plg.type.process': 'Processus',
7359
+ 'plg.heading.region': '{label} (plug-in de région)',
7360
+ 'plg.heading.item': '{label} (plug-in d’élément)',
7361
+ 'plg.heading.dynamic_action': '{label} (plug-in d’action dynamique)',
7362
+ 'plg.heading.process': '{label} (plug-in de processus)',
7363
+ 'plg.use.region': 'page {page} : région {name}',
7364
+ 'plg.use.item': 'page {page} : élément {name}',
7365
+ 'plg.use.process': 'page {page} : processus {name}',
7366
+ 'plg.use.dynamic_action': 'page {page} : action dynamique {name}',
7367
+ 'plg.how.dynamic_action': 'Utilisez-le comme action dynamique avec l’action `plugin`, le code `{name}` et les attributs de plug-in `{"attributes": {…}}`.',
7368
+ 'plg.how.region': 'Utilisez-le comme région de type `plugin` avec la configuration `{"plugin": "{name}", "attributes": {…}}`.',
7369
+ 'plg.how.item': 'Utilisez-le comme élément de type `plugin` avec la configuration `{"plugin": "{name}", "attributes": {…}}`.',
7370
+ 'plg.how.process': 'Utilisez-le comme processus de type `plugin` avec la configuration `{"plugin": "{name}", "attributes": {…}}`.',
7371
+ 'plg.name': 'Nom',
7372
+ 'plg.version_n': 'version {version}',
7373
+ 'plg.help': 'Aide',
7374
+ 'plg.used_by': 'Utilisé par',
7375
+ 'plg.nothing_yet': 'rien pour l’instant',
7376
+ 'plg.files': 'Fichiers',
7377
+ 'plg.missing': 'manquant',
7378
+ 'plg.none': 'aucun',
7379
+ 'plg.template': 'Modèle',
7380
+ 'plg.function': 'Fonction',
7381
+ 'plg.attributes': 'Attributs',
7382
+ 'plg.label': 'Libellé',
7383
+ 'plg.type': 'Type',
7384
+ 'plg.default': 'Par défaut',
7385
+ 'plg.install_sql': 'SQL d’installation',
7386
+ 'plg.install_help': 'Non exécuté à l’import. Lisez-le, puis exécutez-le avec le rôle de base de données de l’application {role}, en une transaction.',
7387
+ 'plg.role_none': '(aucun : la connexion d’exécution)',
7388
+ 'plg.confirm_install': 'Exécuter le SQL d’installation de {label} en tant que {role} ?',
7389
+ 'plg.confirm_install_runtime': 'Exécuter le SQL d’installation de {label} avec la connexion d’exécution ?',
7390
+ 'plg.run_install': 'Exécuter le SQL d’installation',
7391
+ 'plg.download': 'Télécharger le fichier de plug-in',
7392
+ 'plg.confirm_remove': 'Supprimer le plug-in {label} ? Ses fichiers et son composant de modèle sont conservés.',
7393
+ 'plg.remove': 'Supprimer',
7394
+ 'plg.result': 'Résultat : SQL d’installation de {name}',
7395
+ 'plg.title': 'Plug-ins',
7396
+ 'plg.intro': 'Types de région, d’élément, d’action dynamique et de processus qui apportent leur propre code : JavaScript et CSS sous forme de {files} (enregistrés avec {register}), un composant de modèle, une fonction PL/pgSQL.',
7397
+ 'plg.intro_trust': 'Le code d’un plug-in s’exécute avec les droits de cette application : n’importez que des plug-ins de confiance et lisez leurs fichiers.',
7398
+ 'plg.static_files': 'fichiers statiques de l’application',
7399
+ 'plg.plugin': 'Plug-in',
7400
+ 'plg.version': 'Version',
7401
+ 'plg.no_plugins': 'Aucun plug-in pour l’instant.',
7402
+ 'plg.import_title': 'Importer un plug-in',
7403
+ 'plg.file_label': 'Fichier de plug-in (JSON `pgkiln-plugin/2`)',
7404
+ 'plg.or_paste': '…ou collez-le',
7405
+ 'plg.replace': 'Remplacer un plug-in, des fichiers et un composant de modèle portant les mêmes noms',
7406
+ 'plg.import': 'Importer',
7407
+ 'plg.import_help': 'Les composants de modèle des anciens fichiers de plug-in (`pgkiln-plugin/1`) sont importés sous Composants de modèle. `examples/plugins/` contient des exemples.',
7408
+ 'plg.not_json': 'Échec de l’import : le fichier de plug-in n’est pas un JSON valide.',
7409
+ 'plg.choose_file': 'Choisissez un fichier de plug-in ou collez-en un.',
7410
+ 'plg.imported': 'Plug-in {label} importé.',
7411
+ 'plg.imported_install': 'Plug-in {label} importé. Lisez son SQL d’installation ci-dessous avant de l’exécuter.',
7412
+ 'plg.import_failed': 'Échec de l’import : {message}',
7413
+ 'plg.removed': 'Plug-in supprimé. Ses fichiers et son composant de modèle sont conservés (supprimez-les sur leurs propres pages).',
7414
+ 'plg.no_such': 'Ce plug-in n’existe pas.',
7415
+ // ------------------------------------------------------------ App Gallery (gallery.ts) (sprint 164 part 13)
7416
+ 'gal.tab.samples': 'Applications exemples',
7417
+ 'gal.tab.starters': 'Applications de démarrage',
7418
+ 'gal.tab.utilities': 'Applications utilitaires',
7419
+ 'gal.tab.custom': 'Applications personnalisées',
7420
+ 'gal.kinds': 'Types d’applications',
7421
+ 'gal.install': 'Installer',
7422
+ 'gal.installed': 'Installée',
7423
+ 'gal.edit': 'Modifier',
7424
+ 'gal.other_workspace': 'dans un autre espace de travail',
7425
+ 'gal.confirm_install': 'Installer {title} ? Cela ajoute son propre schéma, des données et des comptes de démonstration aux mots de passe connus : pas pour une instance de production.',
7426
+ 'gal.admin_installs': 'Un administrateur l’installe.',
7427
+ 'gal.this_workspace': 'Cet espace de travail',
7428
+ 'gal.boilerplate_desc': 'Une application modèle : une nouvelle application démarre avec ses pages, composants partagés et paramètres.',
7429
+ 'gal.create_from': 'Créer à partir de celle-ci',
7430
+ 'gal.no_match': 'Aucune application ne correspond à {q}.',
7431
+ 'gal.show_all': 'Tout afficher',
7432
+ 'gal.no_custom': 'Aucune application personnalisée pour l’instant : créez une application de type {type} (Paramètres de l’application → Type d’application) et elle apparaîtra ici.',
7433
+ 'gal.boilerplate': 'Modèle',
7434
+ 'gal.empty': 'La galerie est vide.',
7435
+ 'gal.intro.samples': 'Des applications qui montrent ce que pgkiln sait faire, chacune avec son propre schéma, ses données et son compte de démonstration : la vitrine, le tutoriel, une application par domaine fonctionnel et l’UX Pattern Catalog. Un administrateur les installe sur une instance de développement ou de démonstration.',
7436
+ 'gal.intro.starters': 'Petites applications prêtes à l’emploi. Installer montre ce qui sera créé (tables, pages, données d’exemple) avant toute action ; l’application obtient son propre rôle et son propre schéma dans cet espace de travail.',
7437
+ 'gal.intro.utilities': 'Des applications qu’un espace de travail utilise plutôt que d’en apprendre : listes de référence partagées, notes de version, annonces. Comme pour les applications de démarrage, Installer montre d’abord ce qui sera créé, et l’application obtient son propre rôle et son propre schéma dans cet espace de travail.',
7438
+ 'gal.intro.custom': 'Les applications modèles de cet espace de travail : démarrez une nouvelle application à partir de l’une d’elles.',
7439
+ 'gal.search': 'Rechercher des applications',
7440
+ 'gal.err_alias': 'une application avec l’alias {alias} existe déjà.',
7441
+ 'gal.err_no_app': 'les scripts ont été exécutés, mais il n’y a pas d’application {alias}.',
7442
+ 'gal.err_nothing': 'l’entrée de la galerie n’indique rien à installer.',
7443
+ 'gal.installed_flash': '{title} installée (/a/{alias}).',
7444
+ 'gal.not_installed': '{title} n’a pas été installée : {message}',
7445
+ // ------------------------------------------------------------ Progressive Web App settings (pwa.ts) (sprint 164 part 13)
7446
+ 'pwa.installable': 'Installable (Progressive Web App)',
7447
+ 'pwa.installable_help': 'Téléphones et ordinateurs peuvent installer l’application : sa propre icône, plein écran, et l’application continue de fonctionner avec une mauvaise connexion ou sans connexion.',
7448
+ 'pwa.short_name': 'Nom sous l’icône',
7449
+ 'pwa.short_name_ph': '12 caractères au maximum, c’est l’idéal',
7450
+ 'pwa.offline_pages': 'Conserver les pages visitées sur l’appareil pour une utilisation hors ligne',
7451
+ 'pwa.offline_pages_help': 'Les pages qu’un utilisateur a ouvertes sont affichées en l’absence de connexion. Elles contiennent des données personnelles : elles sont supprimées lorsque quelqu’un se connecte ou se déconnecte sur l’appareil.',
7452
+ 'pwa.offline_submit': 'Conserver les formulaires envoyés sans connexion et les envoyer plus tard',
7453
+ 'pwa.offline_submit_help': 'Pour le travail sur le terrain : les formulaires (avec photos) sont conservés sur l’appareil et envoyés au retour de la connexion, sous le même utilisateur, une seule fois au plus.',
7454
+ 'pwa.push': 'Notifications push',
7455
+ 'pwa.push_help': 'Les utilisateurs les activent par appareil sous Mon compte (ou avec l’action dynamique push_subscribe) ; le code de l’application les envoie avec meta.send_push(user, title, body, page, items) ou un processus send_push. Sur iPhone et iPad, uniquement après l’ajout de l’application à l’écran d’accueil. Nécessite PGKILN_SECRET_KEY : la clé qui les signe est stockée chiffrée.',
7456
+ 'pwa.icon': 'Icône (PNG, carrée, au moins 512 × 512)',
7457
+ 'pwa.icon_alt': 'L’icône de l’application',
7458
+ 'pwa.icon_stored': 'Une icône est enregistrée.',
7459
+ 'pwa.remove_icon': 'La supprimer',
7460
+ 'pwa.no_icon': 'Sans icône, l’application reçoit une tuile avec son initiale dans la couleur d’accent.',
7461
+ 'pwa.stats_devices': '{devices} appareil(s) de {users} utilisateur(s) reçoivent des notifications.',
7462
+ 'pwa.stats_week': '7 derniers jours : {sent} envoyées, {no_device} à des utilisateurs sans appareil, {failed} en échec.',
7463
+ 'pwa.stats_week_waiting': '7 derniers jours : {sent} envoyées, {no_device} à des utilisateurs sans appareil, {failed} en échec, {waiting} en attente.',
7464
+ 'pwa.test_to': 'Envoyer une notification de test à',
7465
+ 'pwa.user_name': 'nom d’utilisateur',
7466
+ 'pwa.send_test': 'Envoyer un test',
7467
+ 'pwa.new_keys': 'Nouvelles clés',
7468
+ 'pwa.new_keys_help': 'Crée une nouvelle paire de clés (par exemple si la clé privée a pu fuiter). Chaque appareil cesse de recevoir des notifications jusqu’à ce que son utilisateur les réactive.',
7469
+ 'pwa.icon_too_large': 'L’icône dépasse {mb} Mo.',
7470
+ 'pwa.icon_not_png': 'L’icône doit être une image PNG.',
7471
+ 'pwa.icon_size': 'L’icône doit être carrée et mesurer au moins 512 × 512 pixels (celle-ci mesure {width} × {height}).',
7472
+ 'pwa.push_needs_key': 'Les notifications push nécessitent PGKILN_SECRET_KEY dans l’environnement du serveur (la clé qui les signe est stockée chiffrée).',
7473
+ 'pwa.saved_not_installable': 'Enregistré. Les notifications push ne fonctionnent que si l’application est installable.',
7474
+ 'pwa.saved': 'Paramètres de la Progressive Web App enregistrés.',
7475
+ 'pwa.test_queued': 'Notification de test mise en file pour {n} appareil(s) de {user}.',
7476
+ 'pwa.test_no_device': '{user} n’a activé les notifications sur aucun appareil (Mon compte → Notifications).',
7477
+ 'pwa.keys_made': 'Nouvelles clés créées. Les utilisateurs doivent réactiver les notifications sur chaque appareil.',
7478
+ // ------------------------------------------------------------ Application search and Used in (search.ts) (sprint 164 part 13)
7479
+ 'srch.page_tag': 'page {n}',
7480
+ 'srch.used_in': 'Utilisé dans ({n})',
7481
+ 'srch.not_referenced': 'Référencé nulle part dans cette application.',
7482
+ 'srch.not_referenced_item': 'Référencé nulle part dans cette application (en dehors de sa propre définition).',
7483
+ 'srch.found_in': 'Recherché dans le SQL, les substitutions, les liens et les paramètres de cette application. Le code de la base de données (vues, fonctions, politiques) n’est pas parcouru.',
7484
+ 'srch.placeholder': 'Texte dans les noms, titres, SQL, paramètres…',
7485
+ 'srch.aria': 'Rechercher dans l\'application',
7486
+ 'srch.matches': '{n} résultats',
7487
+ 'srch.matches_more': '{n}+ résultats',
7488
+ 'srch.nothing': 'Rien trouvé pour « {q} ».',
7489
+ 'srch.intro': 'Recherche dans chaque page et composant de {name} : noms, titres, SQL, conditions, paramètres et textes d’aide.',
7490
+ 'srch.page_title': 'Recherche · {name}',
7491
+ // ------------------------------------------------------------ REST module endpoints (rest.ts) (sprint 164 part 13)
7492
+ 'rst.endpoints': 'Points de terminaison',
7493
+ 'rst.disabled': 'Le module est désactivé : ses points de terminaison répondent 404.',
7494
+ 'rst.method': 'Méthode',
7495
+ 'rst.url': 'URL',
7496
+ 'rst.type': 'Type',
7497
+ 'rst.access': 'Accès',
7498
+ 'rst.try_it': 'Essayez-le avec un jeton de {link} :',
7499
+ 'rst.rest_api': 'API REST',
7500
+ 'rst.edit_in': 'Modifiez et testez ses modèles et gestionnaires dans {link}.',
7501
+ 'rst.modules_path': 'SQL Workshop › Services RESTful › Modules',
7502
+ 'rst.openapi': 'Description OpenAPI :',
7503
+ // ------------------------------------------------------------ Background process jobs (process-jobs.ts) (sprint 164 part 13)
7504
+ 'pjb.off': 'Les processus en arrière-plan sont désactivés sur ce serveur (BACKGROUND_PROCESSES=off).',
7505
+ 'pjb.job': 'Tâche',
7506
+ 'pjb.state': 'État',
7507
+ 'pjb.by': 'Par',
7508
+ 'pjb.queued': 'En file',
7509
+ 'pjb.took': 'Durée',
7510
+ 'pjb.steps': 'Étapes',
7511
+ 'pjb.message': 'Message',
7512
+ 'pjb.no_runs': 'Aucune exécution pour l’instant.',
4052
7513
  };