@eifi1/ui-kit 0.45.0 → 0.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/README.md +26 -14
  2. package/dist/admin/admin-area-labels.d.ts +9 -0
  3. package/dist/admin/admin-area-labels.js +5 -1
  4. package/dist/admin/admin-area-labels.js.map +1 -1
  5. package/dist/admin/admin-overview.d.ts +16 -1
  6. package/dist/admin/admin-overview.js +12 -1
  7. package/dist/admin/admin-overview.js.map +1 -1
  8. package/dist/admin/mail-test-card.d.ts +3 -2
  9. package/dist/admin/mail-test-card.js +3 -1
  10. package/dist/admin/mail-test-card.js.map +1 -1
  11. package/dist/admin/user-roster.d.ts +6 -2
  12. package/dist/admin/user-roster.js +7 -3
  13. package/dist/admin/user-roster.js.map +1 -1
  14. package/dist/components/appearance-labels.d.ts +10 -0
  15. package/dist/components/appearance-labels.js +6 -1
  16. package/dist/components/appearance-labels.js.map +1 -1
  17. package/dist/components/data-table-column-settings.js +2 -2
  18. package/dist/components/data-table-column-settings.js.map +1 -1
  19. package/dist/components/data-table-head.js +2 -2
  20. package/dist/components/data-table-head.js.map +1 -1
  21. package/dist/components/data-table-row-actions.d.ts +35 -2
  22. package/dist/components/data-table-row-actions.js +98 -5
  23. package/dist/components/data-table-row-actions.js.map +1 -1
  24. package/dist/components/data-table-shared.js +9 -2
  25. package/dist/components/data-table-shared.js.map +1 -1
  26. package/dist/components/data-table.d.ts +58 -2
  27. package/dist/components/data-table.js +11 -4
  28. package/dist/components/data-table.js.map +1 -1
  29. package/dist/components/date-format-setting.d.ts +29 -0
  30. package/dist/components/date-format-setting.js +36 -0
  31. package/dist/components/date-format-setting.js.map +1 -0
  32. package/dist/components/row-actions.d.ts +12 -5
  33. package/dist/components/row-actions.js +11 -4
  34. package/dist/components/row-actions.js.map +1 -1
  35. package/dist/components/swipeable-row.d.ts +8 -0
  36. package/dist/components/swipeable-row.js.map +1 -1
  37. package/dist/components/tabs.d.ts +3 -2
  38. package/dist/components/tabs.js +1 -1
  39. package/dist/components/tabs.js.map +1 -1
  40. package/dist/components/translation-review-editor.js +1 -0
  41. package/dist/components/translation-review-editor.js.map +1 -1
  42. package/dist/components/translation-review-labels.d.ts +5 -0
  43. package/dist/components/translation-review-labels.js +2 -0
  44. package/dist/components/translation-review-labels.js.map +1 -1
  45. package/dist/components/translation-review.d.ts +18 -8
  46. package/dist/components/translation-review.js +67 -8
  47. package/dist/components/translation-review.js.map +1 -1
  48. package/dist/components/write-lock-labels.js +2 -1
  49. package/dist/components/write-lock-labels.js.map +1 -1
  50. package/dist/components/write-lock.d.ts +33 -3
  51. package/dist/components/write-lock.js +9 -0
  52. package/dist/components/write-lock.js.map +1 -1
  53. package/dist/data-table.d.ts +2 -1
  54. package/dist/data-table.js +2 -0
  55. package/dist/data-table.js.map +1 -1
  56. package/dist/eslint/index.js +1 -1
  57. package/dist/feedback/feedback-row-detail.d.ts +4 -2
  58. package/dist/feedback/feedback-row-detail.js +17 -26
  59. package/dist/feedback/feedback-row-detail.js.map +1 -1
  60. package/dist/feedback/feedback-swipe.d.ts +18 -0
  61. package/dist/feedback/feedback-swipe.js +10 -1
  62. package/dist/feedback/feedback-swipe.js.map +1 -1
  63. package/dist/i18n/german.js +41 -5
  64. package/dist/i18n/german.js.map +1 -1
  65. package/dist/i18n/kit-labels.d.ts +12 -1
  66. package/dist/i18n/kit-labels.js +8 -2
  67. package/dist/i18n/kit-labels.js.map +1 -1
  68. package/dist/i18n/locales/en.js +40 -6
  69. package/dist/i18n/locales/en.js.map +2 -2
  70. package/dist/i18n/locales/es.js +41 -5
  71. package/dist/i18n/locales/es.js.map +1 -1
  72. package/dist/i18n/locales/fr.js +41 -5
  73. package/dist/i18n/locales/fr.js.map +1 -1
  74. package/dist/i18n/locales/hu.js +41 -5
  75. package/dist/i18n/locales/hu.js.map +1 -1
  76. package/dist/i18n/locales/it.js +41 -5
  77. package/dist/i18n/locales/it.js.map +1 -1
  78. package/dist/i18n/locales/zh.js +41 -5
  79. package/dist/i18n/locales/zh.js.map +1 -1
  80. package/dist/i18n/review.js +3 -1
  81. package/dist/i18n/review.js.map +1 -1
  82. package/dist/index.d.ts +17 -4
  83. package/dist/index.js +38 -1
  84. package/dist/index.js.map +1 -1
  85. package/dist/lib/date-format.d.ts +81 -0
  86. package/dist/lib/date-format.js +56 -0
  87. package/dist/lib/date-format.js.map +1 -0
  88. package/dist/lib/format.d.ts +3 -0
  89. package/dist/lib/format.js +5 -4
  90. package/dist/lib/format.js.map +1 -1
  91. package/dist/notifications/device-zone-report.d.ts +34 -0
  92. package/dist/notifications/device-zone-report.js +31 -0
  93. package/dist/notifications/device-zone-report.js.map +1 -0
  94. package/dist/notifications/feedback-notification-types-labels.d.ts +7 -1
  95. package/dist/notifications/feedback-notification-types-labels.js +4 -1
  96. package/dist/notifications/feedback-notification-types-labels.js.map +1 -1
  97. package/dist/notifications/feedback-notification-types.d.ts +24 -5
  98. package/dist/notifications/feedback-notification-types.js +7 -2
  99. package/dist/notifications/feedback-notification-types.js.map +1 -1
  100. package/dist/notifications/notification-bell.d.ts +33 -0
  101. package/dist/notifications/notification-bell.js +74 -0
  102. package/dist/notifications/notification-bell.js.map +1 -0
  103. package/dist/notifications/notification-inbox.d.ts +86 -0
  104. package/dist/notifications/notification-inbox.js +206 -0
  105. package/dist/notifications/notification-inbox.js.map +1 -0
  106. package/dist/notifications/notification-types-setting.d.ts +6 -4
  107. package/dist/notifications/notification-types-setting.js +103 -45
  108. package/dist/notifications/notification-types-setting.js.map +1 -1
  109. package/dist/notifications/notification-types.d.ts +19 -7
  110. package/dist/notifications/notifications-labels.d.ts +44 -8
  111. package/dist/notifications/notifications-labels.js +18 -1
  112. package/dist/notifications/notifications-labels.js.map +1 -1
  113. package/dist/notifications/push-devices-setting.d.ts +20 -3
  114. package/dist/notifications/push-devices-setting.js +93 -33
  115. package/dist/notifications/push-devices-setting.js.map +1 -1
  116. package/dist/notifications/push-worker.d.ts +108 -0
  117. package/dist/notifications/push-worker.js +62 -0
  118. package/dist/notifications/push-worker.js.map +1 -0
  119. package/dist/notifications/quiet-hours-setting.d.ts +29 -17
  120. package/dist/notifications/quiet-hours-setting.js +9 -41
  121. package/dist/notifications/quiet-hours-setting.js.map +1 -1
  122. package/dist/notifications/time-zone-select.d.ts +8 -4
  123. package/dist/notifications/time-zone-select.js +2 -7
  124. package/dist/notifications/time-zone-select.js.map +1 -1
  125. package/dist/notifications/use-push-device.d.ts +4 -17
  126. package/dist/notifications/use-push-device.js +7 -15
  127. package/dist/notifications/use-push-device.js.map +1 -1
  128. package/dist/offline/local-first.d.ts +42 -0
  129. package/dist/offline/local-first.js +53 -0
  130. package/dist/offline/local-first.js.map +1 -0
  131. package/dist/offline/query-persistence.d.ts +26 -1
  132. package/dist/offline/query-persistence.js +27 -23
  133. package/dist/offline/query-persistence.js.map +1 -1
  134. package/dist/offline/service-worker-updates.d.ts +46 -0
  135. package/dist/offline/service-worker-updates.js +39 -0
  136. package/dist/offline/service-worker-updates.js.map +1 -0
  137. package/dist/offline.d.ts +5 -2
  138. package/dist/offline.js +12 -2
  139. package/dist/offline.js.map +1 -1
  140. package/dist/push-worker.d.ts +2 -0
  141. package/dist/push-worker.js +14 -0
  142. package/dist/push-worker.js.map +1 -0
  143. package/dist/shell/account-menu-text-size.d.ts +33 -0
  144. package/dist/shell/account-menu-text-size.js +51 -0
  145. package/dist/shell/account-menu-text-size.js.map +1 -0
  146. package/dist/shell/top-bar-actions.d.ts +6 -2
  147. package/dist/shell/top-bar-actions.js +1 -0
  148. package/dist/shell/top-bar-actions.js.map +1 -1
  149. package/dist/shell.d.ts +2 -0
  150. package/dist/shell.js +2 -0
  151. package/dist/shell.js.map +1 -1
  152. package/dist/sync/db.d.ts +93 -0
  153. package/dist/sync/db.js +33 -0
  154. package/dist/sync/db.js.map +1 -0
  155. package/dist/sync/engine.d.ts +126 -0
  156. package/dist/sync/engine.js +474 -0
  157. package/dist/sync/engine.js.map +1 -0
  158. package/dist/sync/hooks.d.ts +35 -0
  159. package/dist/sync/hooks.js +67 -0
  160. package/dist/sync/hooks.js.map +1 -0
  161. package/dist/sync/testing.d.ts +28 -0
  162. package/dist/sync/testing.js +41 -0
  163. package/dist/sync/testing.js.map +1 -0
  164. package/dist/sync/wire.d.ts +50 -0
  165. package/dist/sync/wire.js +2 -0
  166. package/dist/sync/wire.js.map +1 -0
  167. package/dist/sync.d.ts +7 -0
  168. package/dist/sync.js +25 -0
  169. package/dist/sync.js.map +1 -0
  170. package/dist/tour/tour-labels.js +1 -0
  171. package/dist/tour/tour-labels.js.map +1 -1
  172. package/dist/tour/tour.d.ts +30 -0
  173. package/dist/tour/tour.js +50 -6
  174. package/dist/tour/tour.js.map +1 -1
  175. package/package.json +19 -1
  176. package/src/admin/admin-area-labels.ts +13 -0
  177. package/src/admin/admin-overview.tsx +37 -2
  178. package/src/admin/mail-test-card.tsx +7 -3
  179. package/src/admin/user-roster.tsx +12 -3
  180. package/src/components/appearance-labels.ts +16 -0
  181. package/src/components/data-table-column-settings.tsx +2 -2
  182. package/src/components/data-table-head.tsx +2 -2
  183. package/src/components/data-table-row-actions.tsx +145 -5
  184. package/src/components/data-table-shared.tsx +21 -2
  185. package/src/components/data-table.tsx +68 -6
  186. package/src/components/date-format-setting.tsx +64 -0
  187. package/src/components/row-actions.tsx +33 -9
  188. package/src/components/swipeable-row.tsx +8 -0
  189. package/src/components/tabs.tsx +4 -3
  190. package/src/components/translation-review-editor.tsx +2 -0
  191. package/src/components/translation-review-labels.ts +7 -0
  192. package/src/components/translation-review.tsx +105 -15
  193. package/src/components/write-lock-labels.ts +1 -0
  194. package/src/components/write-lock.tsx +36 -3
  195. package/src/data-table.ts +4 -0
  196. package/src/feedback/feedback-row-detail.tsx +18 -23
  197. package/src/feedback/feedback-swipe.tsx +28 -1
  198. package/src/i18n/german.ts +44 -4
  199. package/src/i18n/kit-labels.tsx +18 -1
  200. package/src/i18n/locales/en.ts +1 -0
  201. package/src/i18n/locales/es.ts +44 -4
  202. package/src/i18n/locales/fr.ts +44 -4
  203. package/src/i18n/locales/hu.ts +44 -4
  204. package/src/i18n/locales/it.ts +44 -4
  205. package/src/i18n/locales/zh.ts +44 -2
  206. package/src/i18n/review.ts +3 -1
  207. package/src/index.ts +50 -1
  208. package/src/lib/date-format.ts +151 -0
  209. package/src/lib/format.ts +10 -4
  210. package/src/notifications/device-zone-report.ts +67 -0
  211. package/src/notifications/feedback-notification-types-labels.ts +10 -1
  212. package/src/notifications/feedback-notification-types.ts +30 -5
  213. package/src/notifications/notification-bell.tsx +116 -0
  214. package/src/notifications/notification-inbox.tsx +314 -0
  215. package/src/notifications/notification-types-setting.tsx +151 -55
  216. package/src/notifications/notification-types.ts +20 -8
  217. package/src/notifications/notifications-labels.ts +72 -12
  218. package/src/notifications/push-devices-setting.tsx +123 -34
  219. package/src/notifications/push-worker.ts +160 -0
  220. package/src/notifications/quiet-hours-setting.tsx +41 -58
  221. package/src/notifications/time-zone-select.tsx +9 -10
  222. package/src/notifications/use-push-device.ts +20 -33
  223. package/src/offline/local-first.ts +100 -0
  224. package/src/offline/query-persistence.ts +57 -24
  225. package/src/offline/service-worker-updates.ts +81 -0
  226. package/src/offline.ts +7 -1
  227. package/src/push-worker.ts +25 -0
  228. package/src/shell/account-menu-text-size.tsx +77 -0
  229. package/src/shell/top-bar-actions.tsx +6 -1
  230. package/src/shell.ts +3 -0
  231. package/src/sync/db.ts +125 -0
  232. package/src/sync/engine.ts +701 -0
  233. package/src/sync/hooks.ts +98 -0
  234. package/src/sync/testing.ts +73 -0
  235. package/src/sync/wire.ts +61 -0
  236. package/src/sync.ts +29 -0
  237. package/src/tour/tour-labels.ts +1 -0
  238. package/src/tour/tour.tsx +100 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/i18n/locales/fr.ts"],"sourcesContent":["import { formatFileSize } from \"../kit-labels\";\nimport type { UiKitLabels } from \"../kit-labels\";\n\n/**\n * The kit's words in French: every namespace of {@link UiKitLabels}, for\n * `<UiKitProvider labels={UI_KIT_LABELS_FR}>`.\n *\n * Self-contained on purpose — nothing but the kit's own `formatFileSize` — so it works\n * as a starting point to copy and adjust. Counts and sizes are formatted with\n * `fr-FR` digits; {@link uiKitLabelsFr} takes another number locale\n * (e.g. `\"de-CH\"` for 1’234) without touching the words.\n */\nexport function uiKitLabelsFr(numberLocale = \"fr-FR\"): UiKitLabels {\n const num = new Intl.NumberFormat(numberLocale);\n const n = (value: number) => num.format(value);\n const plural = (count: number, one: string, many: string) => (count < 2 ? one : many);\n // 0.30.0 — a throttled request (HTTP 429), as `englishRateLimited` in\n // src/auth/auth-errors.ts: no wait → \"un instant\", under a minute → seconds, else\n // minutes rounded up. kastlan's reviewed \"auth.throttled\" is the sentence without one.\n const wait = (seconds: number) =>\n seconds < 60 ? `${n(Math.ceil(seconds))}\\u00a0s` : `${n(Math.ceil(seconds / 60))}\\u00a0min`;\n const rateLimited = (seconds?: number) =>\n !seconds || seconds <= 0\n ? \"Trop de tentatives. Veuillez patienter un instant, puis réessayer.\"\n : `Trop de tentatives. Réessayez dans ${wait(seconds)}.`;\n // 0.32.0 — when a trial or a grant ends, as `inDays` in src/billing/billing-labels.ts:\n // 0 (or less) is today, 1 tomorrow.\n const inDays = (days: number) =>\n days <= 0 ? \"aujourd’hui\" : days === 1 ? \"demain\" : `dans ${n(days)} ${plural(days, \"jour\", \"jours\")}`;\n\n return {\n feedbackAttachment: {\n attachmentAdd: \"Ajouter une pièce jointe\",\n attachmentCapture: \"Capturer l’écran\",\n attachmentPaste:\n \"…ou collez une capture d’écran directement depuis le presse-papiers, pour ne montrer qu’un détail plutôt que toute la page.\",\n attachmentRemove: \"Retirer la pièce jointe\",\n attachmentList: \"Pièces jointes\",\n attachmentScreenshot: \"Capture d’écran\",\n attachmentRemoveFile: (name) => `Retirer ${name}`,\n attachmentLimit: (max) =>\n max === 1\n ? `${n(max)} pièce jointe au maximum — retirez-la pour en ajouter une autre.`\n : `${n(max)} pièces jointes au maximum — retirez-en une pour en ajouter une autre.`,\n attachmentUploading: \"Envoi en cours…\",\n attachmentUploadFailed: (name) => `«\\u202f${name}\\u202f» n’a pas pu être envoyé`,\n },\n feedbackDialog: {\n title: \"Envoyer un retour\",\n category: \"Catégorie\",\n subject: \"Objet\",\n body: \"Que s’est-il passé\\u202f?\",\n bodyOptional: \"Que s’est-il passé\\u202f? (facultatif)\",\n attachment: \"Pièce jointe\",\n submitHint: (apple) => (apple ? \"⌘ Entrée pour envoyer\" : \"Ctrl+Entrée pour envoyer\"),\n cancel: \"Annuler\",\n save: \"Envoyer\",\n publicNotice: \"Les autres personnes verront le titre et le texte (jamais vos captures d’écran ni vos fichiers).\",\n },\n feedbackThread: {\n thread: \"Commentaires\",\n empty: \"Aucun commentaire pour l’instant\",\n loading: \"Chargement des commentaires…\",\n you: \"Vous\",\n staff: \"Équipe\",\n attachments: \"Pièces jointes\",\n },\n feedbackComposer: {\n field: \"Écrire un commentaire\",\n placeholder: \"Écrire un commentaire…\",\n send: \"Envoyer\",\n sendHint: (modifier) => `${modifier} + Entrée pour envoyer`,\n sendHintEnter: \"Entrée pour envoyer, Maj + Entrée pour aller à la ligne\",\n },\n // 0.27.0. \"Retour\" for feedback, as `feedbackDialog`; \"reprise\" for rework.\n feedbackStatus: {\n OPEN: \"Ouvert\",\n READY: \"Prêt à implémenter\",\n REWORK: \"Reprise demandée\",\n IN_PROGRESS: \"En cours\",\n IN_EVALUATION: \"En évaluation\",\n NEEDS_LIVE_TEST: \"À tester en production\",\n POSTPONED: \"Reporté\",\n DONE: \"Terminé\",\n WONT_DO: \"Ne sera pas traité\",\n },\n feedbackCategory: {\n CRASH: \"Plantage\",\n BUG: \"Bug\",\n IDEA: \"Idée\",\n QUESTION: \"Question\",\n OTHER: \"Autre\",\n },\n feedbackToast: {\n submitted: \"Merci pour votre retour\\u202f!\",\n submitFailed: \"Impossible d’envoyer le retour\",\n attachmentUnsupported: \"Seuls les images, les PDF et les fichiers texte sont acceptés\",\n attachmentTooLarge: \"Le fichier dépasse 10\\u00a0Mo\",\n attachmentTooMany: (count) =>\n `Il n’y a de place que pour ${n(count)} ${plural(count, \"pièce jointe\", \"pièces jointes\")} — les autres ont été écartées.`,\n captureFailed: \"Impossible de capturer l’écran\",\n updateFailed: \"La modification n’a pas pu être enregistrée.\",\n statusChanged: (status, title) => `Passé à «\\u202f${status}\\u202f»\\u00a0: ${title}`,\n statusUndo: \"Annuler\",\n statusRestored: (status, title) => `Revenu à «\\u202f${status}\\u202f»\\u00a0: ${title}`,\n commentFailed: \"Le commentaire n’a pas pu être publié.\",\n voteFailed: \"Votre vote n’a pas pu être enregistré.\",\n replyFailed: \"La réponse n’a pas pu être envoyée.\",\n },\n feedbackMenu: {\n trigger: \"Envoyer un retour\",\n myFeedback: \"Mes retours\",\n discussion: \"Discussion des retours\",\n inbox: \"Retours reçus\",\n },\n // 0.38.0 — docs/feedback-harmonization.md §9: the public pages and the two feedback\n // notification types. \"Retour\" for a report, as `feedbackMenu`.\n feedbackPublic: {\n title: \"Discussion des retours\",\n sort: \"Trier\",\n sortNewest: \"Plus récents\",\n sortVotes: \"Plus demandés\",\n sortUpdated: \"Mis à jour récemment\",\n search: \"Rechercher dans les titres\",\n columnVotes: \"Votes\",\n total: (count) => (count === 1 ? \"1 retour\" : `${n(count)} retours`),\n comments: (count) => (count === 1 ? \"1 commentaire\" : `${n(count)} commentaires`),\n votes: (count) => (count === 1 ? \"1 vote\" : `${n(count)} votes`),\n anonymous: \"Une personne\",\n filedBy: (name) => `De ${name}`,\n body: \"Description\",\n conversation: \"Réponses et commentaires\",\n loading: \"Chargement…\",\n empty: \"Aucun retour pour l’instant\",\n visibleToOthers: \"Visible par les autres\",\n visibleHint: \"Les autres personnes voient le titre et le texte, jamais vos captures d’écran ni vos fichiers.\",\n visibleLocked: \"Seulement tant que le retour est encore ouvert.\",\n page: (page) => `Page ${n(page)}`,\n },\n feedbackNotificationTypes: {\n answered: \"Réponses à vos retours\",\n answeredDescription: \"Quand un retour que vous avez écrit ou commenté reçoit une réponse.\",\n comment: \"Commentaires sur les retours que vous suivez\",\n commentDescription: \"Quand quelqu’un commente un retour que vous avez écrit ou commenté.\",\n },\n feedbackContext: {\n user: \"Utilisateur\",\n attachUrl: \"Joindre l’URL de la page actuelle\",\n },\n feedbackPage: {\n title: \"Retours reçus\",\n myTitle: \"Mes retours\",\n columnId: \"#\",\n columnDate: \"Date\",\n columnCategory: \"Catégorie\",\n columnSubject: \"Objet\",\n columnUser: \"Utilisateur\",\n columnEmail: \"E-mail\",\n columnUrl: \"URL\",\n columnStatus: \"Statut\",\n columnResolved: \"Résolu le\",\n openPage: \"Ouvrir la page\",\n empty: \"Aucun\",\n deletedUser: \"<utilisateur supprimé>\",\n // An id, not a count: printed as it is, like the \"#\" column.\n userFallback: (id) => `utilisateur #${id}`,\n environment: (environment) => String(environment ?? \"\").toUpperCase(),\n reworkChip: (count) => (count === 1 ? \"Reprise\" : `Reprise ×${n(count)}`),\n awaitingFilter: \"Seulement ce qui vous attend\",\n phoneActions: \"Actions sur les retours\",\n },\n feedbackDetail: {\n subject: \"Objet\",\n body: \"Description\",\n edit: \"Modifier\",\n editDescription: \"Modifier la description\",\n save: \"Enregistrer\",\n cancel: \"Annuler\",\n url: \"URL\",\n copyUrl: \"Copier l’URL\",\n attachment: \"Pièce jointe\",\n download: (name) => `Télécharger ${name}`,\n downloadFailed: \"La pièce jointe n’a pas pu être téléchargée.\",\n outcome: \"Résultat\",\n replies: \"Réponses\",\n resolvedAt: (date) => `Résolu le ${date}`,\n outcomeAdd: \"Ajouter un résultat\",\n outcomeUpdate: \"Mettre à jour\",\n outcomePlaceholder: \"Ce qui a été fait ou décidé, ou pourquoi ce point ne sera pas traité.\",\n rework: \"Reprise\",\n openPage: \"Ouvrir la page\",\n reworkTitle: \"Renvoyer pour reprise\",\n reworkSend: \"Demander la reprise\",\n reworkPlaceholder:\n \"Que faut-il encore affiner\\u202f? Nouvelles contraintes ou changement de cap éventuels.\",\n reworkUploadFailed: \"Le fichier n’a pas pu être envoyé. La demande de reprise n’a pas été transmise.\",\n status: \"Statut\",\n note: \"Note\",\n },\n // 0.38.0 — docs/feedback-harmonization.md §9.15: the vote, the comment thread, the replies.\n feedbackVote: {\n vote: \"Moi aussi\",\n own: \"Votre retour\",\n },\n feedbackComments: {\n comments: \"Commentaires\",\n empty: \"Pas encore de commentaire\",\n hidden: \"Masqué par un administrateur\",\n hide: \"Masquer\",\n unhide: \"Afficher\",\n delete: \"Supprimer\",\n deleteTitle: \"Supprimer ce commentaire\\u202f?\",\n deleteBody: \"Il sera retiré pour tout le monde. Cette action est irréversible.\",\n field: \"Écrire un commentaire\",\n placeholder: \"Écrire un commentaire…\",\n send: \"Commenter\",\n },\n feedbackReplies: {\n replies: \"Réponses\",\n empty: \"Pas encore de réponse\",\n admin: \"Admin\",\n statusChanged: \"Statut changé en\",\n field: \"Écrire une réponse\",\n placeholder: \"Écrire une réponse…\",\n reply: \"Répondre\",\n status: \"Statut avec la réponse\",\n noChange: \"Aucun changement\",\n nudge: \"La personne qui l’a signalé n’a pas été prévenue. Ajoutez une réponse.\",\n },\n accountSettings: {\n profile: {\n title: \"Profil\",\n email: \"E-mail\",\n role: \"Rôle\",\n memberSince: \"Membre depuis\",\n displayName: \"Nom affiché\",\n save: \"Enregistrer\",\n firstName: \"Prénom\",\n lastName: \"Nom\",\n nameRequired: \"Saisissez un prénom et un nom.\",\n },\n password: {\n title: \"Changer le mot de passe\",\n current: \"Mot de passe actuel\",\n next: \"Nouveau mot de passe\",\n confirm: \"Confirmer le nouveau mot de passe\",\n submit: \"Changer le mot de passe\",\n tooShort: \"Le nouveau mot de passe est trop court.\",\n mismatch: \"Les mots de passe ne correspondent pas.\",\n wrongPassword: \"Le mot de passe est incorrect.\",\n },\n twoFactor: {\n status: \"Authentification à deux facteurs\",\n enabledText: \"Activée\",\n disabledText: \"Désactivée\",\n enable: \"Configurer l’authentification à deux facteurs\",\n scanHint:\n \"Scannez ce code avec votre application d’authentification, puis saisissez le code affiché.\",\n codeLabel: \"Code de vérification\",\n verify: \"Vérifier et activer\",\n disableSection: \"Désactiver l’authentification à deux facteurs\",\n password: \"Mot de passe actuel\",\n disable: \"Désactiver\",\n qrAlt: \"Code QR pour votre application d’authentification\",\n secretHint: \"Impossible de le scanner\\u202f? Saisissez plutôt cette clé dans l’application\\u00a0:\",\n copySecret: \"Copier la clé\",\n // 0.31.0: the card's title; the state (\"Activée\") stands beside it.\n title: \"Authentification à deux facteurs\",\n },\n passkeys: {\n title: \"Clés d’accès\",\n description:\n \"Connectez-vous avec votre empreinte, votre visage ou le code PIN de l’appareil plutôt qu’avec un mot de passe.\",\n descriptionAlongside:\n \"Connectez-vous avec votre empreinte, votre visage ou le code PIN de l’appareil. Votre mot de passe reste valable.\",\n empty: \"Aucune clé d’accès pour l’instant\",\n loading: \"Chargement des clés d’accès…\",\n list: \"Vos clés d’accès\",\n nameLabel: \"Nom (facultatif)\",\n namePlaceholder: \"p. ex. Portable, Téléphone\",\n add: \"Ajouter une clé d’accès\",\n adding: \"En attente de l’appareil…\",\n rename: \"Renommer\",\n renameItem: (name) => `Renommer ${name}`,\n renameField: (name) => `Nouveau nom pour ${name}`,\n save: \"Enregistrer\",\n cancel: \"Annuler\",\n delete: \"Supprimer\",\n deleteItem: (name) => `Supprimer ${name}`,\n deleteConfirm: (name) =>\n `Supprimer «\\u202f${name}\\u202f»\\u202f? Elle ne permettra plus de se connecter.`,\n confirmDelete: \"Supprimer la clé d’accès\",\n created: (date) => `Ajoutée le ${date}`,\n lastUsed: (date) => `Dernière utilisation le ${date}`,\n neverUsed: \"Jamais utilisée\",\n },\n },\n measuredGrid: {\n view: \"Vue du tableau\",\n cellsView: \"Cellules\",\n textView: \"Texte\",\n addRow: \"Ajouter une ligne\",\n removeRow: (row) => `Supprimer la ligne ${row}`,\n clear: \"Vider le tableau\",\n pasteHint: \"Collez un bloc copié d\\u2019un tableur dans n\\u2019importe quelle cellule\",\n cell: (column, row) => `${column}, ligne ${row}`,\n rowNumber: \"Ligne\",\n rowActions: \"Actions de ligne\",\n keyboardHint:\n \"Les flèches passent d\\u2019une cellule à l\\u2019autre. Tapez pour remplacer une cellule, F2 pour la modifier, Échap pour annuler la modification. Entrée descend et ajoute une ligne à la fin.\",\n lineError: (line) => `La ligne ${line} n\\u2019a pas pu être lue`,\n points: (count) => (count < 2 ? `${n(count)} point` : `${n(count)} points`),\n problems: (count) =>\n count < 2\n ? `${n(count)} cellule n\\u2019est pas un nombre`\n : `${n(count)} cellules ne sont pas des nombres`,\n },\n pageContents: { title: \"Sur cette page\" },\n common: {\n dismiss: \"Fermer\",\n close: \"Fermer\",\n clear: \"Effacer\",\n search: \"Rechercher\",\n done: \"Terminé\",\n cancel: \"Annuler\",\n save: \"Enregistrer\",\n back: \"Retour\",\n next: \"Suivant\",\n remove: \"Supprimer\",\n loading: \"Chargement…\",\n noResults: \"Aucun résultat\",\n // No-break space before the colon, per French typography.\n fieldValue: (field, value) => `${field}\\u00a0: ${value}`,\n opensInNewTab: \"s’ouvre dans un nouvel onglet\",\n aboutField: (field) => `À propos de «\\u202f${field}\\u202f»`,\n help: \"Aide\",\n },\n dataTable: {\n columns: \"Colonnes\",\n selectAllRows: \"Sélectionner toutes les lignes\",\n sortHint: \"Cliquer pour trier · Maj+clic pour ajouter un tri\",\n filter: \"Filtrer\",\n close: \"Fermer\",\n selectRow: \"Sélectionner la ligne\",\n selectRows: \"Sélectionner des lignes\",\n cancelSelection: \"Annuler\",\n rowDetails: \"Détails\",\n autoSize: \"Ajuster la largeur des colonnes\",\n loading: \"Chargement…\",\n filters: \"Filtres\",\n clearAll: \"Tout effacer\",\n done: \"Terminé\",\n pageSize: \"Lignes par page\",\n pageSizeAll: \"Toutes\",\n prevPage: \"Page précédente\",\n nextPage: \"Page suivante\",\n clearFilter: \"Effacer le filtre\",\n filterPlaceholder: \"Filtrer…\",\n selectFilter: \"Sélectionner\",\n selectAll: \"Tout\",\n selectNone: \"Aucun\",\n dateFrom: \"Du\",\n dateTo: \"Au\",\n numberMin: \"Min.\",\n numberMax: \"Max.\",\n numberAbs: \"Valeur absolue\",\n presets: {\n today: \"Aujourd’hui\",\n yesterday: \"Hier\",\n this_week: \"Cette semaine\",\n last_week: \"Semaine dernière\",\n last_7_days: \"7 derniers jours\",\n last_30_days: \"30 derniers jours\",\n this_month: \"Ce mois-ci\",\n last_month: \"Mois dernier\",\n last_3_months: \"3 derniers mois\",\n ytd: \"Depuis le début de l’année\",\n last_year: \"Année dernière\",\n },\n table: \"Tableau de données\",\n filterResults: (shown, total) =>\n `${n(shown)} ${plural(shown, \"ligne\", \"lignes\")} sur ${n(total)}`,\n sortedAscending: (column) => `Trié par ${column}, ordre croissant`,\n sortedDescending: (column) => `Trié par ${column}, ordre décroissant`,\n sortCleared: (column) => `Tri retiré sur ${column}`,\n pageChanged: (page, totalPages) => `Page ${n(page)} sur ${n(totalPages)}`,\n pageRange: (from, to, total) => `${n(from)}–${n(to)} / ${n(total)}`,\n rowCount: (total) => n(total),\n columnsCount: (visible, total) => `Colonnes (${n(visible)}/${n(total)})`,\n filterColumn: (column, active) => (active ? `Filtrer ${column} (actif)` : `Filtrer ${column}`),\n empty: \"Aucune entrée\",\n actions: \"Actions\",\n edit: \"Modifier\",\n delete: \"Supprimer\",\n booleanTrue: \"Oui\",\n booleanFalse: \"Non\",\n booleanUnset: \"Non défini\",\n sortBy: \"Trier par\",\n sortDefault: \"Ordre par défaut\",\n sortAscending: \"Croissant\",\n sortDescending: \"Décroissant\",\n },\n miniCalendar: {\n previousMonth: \"Mois précédent\",\n nextMonth: \"Mois suivant\",\n // Already formatted in the provider's locale (\"lundi 14 septembre 2026\").\n day: (date) => date,\n chooseStart: \"Choisissez une date de début\",\n chooseEnd: \"Choisissez une date de fin\",\n // \"Date\" is feminine and the formatted day is not a noun French can agree with,\n // so the date is set after a label rather than made the subject.\n startSelected: (date) => `Date de début\\u00a0: ${date}. Choisissez une date de fin.`,\n rangeSelected: (from, to) =>\n `Période du ${from} au ${to} sélectionnée. Choisissez une date de début pour recommencer.`,\n },\n calendarHeatmap: {\n grid: \"Valeurs quotidiennes\",\n day: (date, value) => `${date} : ${value}`,\n less: \"Moins\",\n more: \"Plus\",\n truncated: (count) =>\n `Affichage des jours les plus récents ; ${n(count)} ${count === 1 ? \"jour antérieur n’est pas affiché\" : \"jours antérieurs ne sont pas affichés\"}.`,\n },\n datePicker: {\n apply: \"Appliquer\",\n cancel: \"Annuler\",\n presets: \"Plages rapides\",\n panel: \"Choisir une date\",\n rangePanel: \"Choisir une période\",\n clear: \"Effacer\",\n previousDay: \"Jour précédent\",\n nextDay: \"Jour suivant\",\n today: \"Aujourd’hui\",\n },\n monthPicker: {\n previousYear: \"Année précédente\",\n nextYear: \"Année suivante\",\n panel: \"Choisir un mois\",\n month: (monthYear) => monthYear,\n previousMonth: \"Mois précédent\",\n nextMonth: \"Mois suivant\",\n today: \"Aujourd’hui\",\n yearPanel: \"Choisir une année\",\n earlierYears: \"Années précédentes\",\n laterYears: \"Années suivantes\",\n thisYear: \"Cette année\",\n },\n popover: {\n panel: \"Fenêtre contextuelle\",\n },\n combobox: {\n search: \"Rechercher\",\n noResults: \"Aucun résultat\",\n clear: \"Effacer\",\n loading: \"Chargement…\",\n create: (query) => `Créer «\\u202f${query}\\u202f»`,\n selectedCount: (count) => `${n(count)} ${plural(count, \"sélectionné\", \"sélectionnés\")}`,\n loadError: \"Impossible de charger les résultats\",\n resultCount: (count) => `${n(count)} ${plural(count, \"résultat\", \"résultats\")}`,\n minChars: (count) =>\n `Saisissez au moins ${n(count)} ${plural(count, \"caractère\", \"caractères\")}`,\n },\n multiSelect: {\n search: \"Rechercher\",\n selectAll: \"Tout sélectionner\",\n clear: \"Effacer\",\n all: \"Tous\",\n // The bare count, as in English: the trigger has always shown just the number.\n selectedCount: (count) => n(count),\n },\n calculator: {\n open: \"Ouvrir la calculatrice\",\n panel: \"Calculatrice\",\n calculation: \"Calcul\",\n backspace: \"Retour arrière\",\n clear: \"Effacer\",\n equals: \"Égal\",\n done: \"Terminé\",\n plus: \"Plus\",\n minus: \"Moins\",\n times: \"Multiplié par\",\n divide: \"Divisé par\",\n decimal: \"Séparateur décimal\",\n },\n currency: {\n currency: \"Devise\",\n search: \"Rechercher une devise\",\n },\n chipInput: {\n // The quoted value is a citation; the participle agrees with the implied\n // \"élément\" whatever the chip says.\n added: (value) => `«\\u202f${value}\\u202f» ajouté`,\n removed: (value) => `«\\u202f${value}\\u202f» supprimé`,\n remove: \"Supprimer\",\n atLimit: (max) => `Limite de ${n(max)} ${plural(max, \"élément\", \"éléments\")} atteinte`,\n duplicate: (value) => `«\\u202f${value}\\u202f» figure déjà dans la liste`,\n },\n swatchPicker: {\n none: \"Aucune couleur\",\n mixed: \"Mixte\\u00a0: les éléments sélectionnés ont des couleurs différentes\",\n },\n iconPicker: {\n none: \"Aucune icône\",\n mixed: \"Mixte\\u00a0: les éléments sélectionnés ont des icônes différentes\",\n search: \"Rechercher des icônes\",\n noResults: \"Aucune icône ne correspond\",\n resultCount: (count) => `${n(count)} ${plural(count, \"icône\", \"icônes\")}`,\n },\n fieldSync: {\n synced: \"Enregistré\",\n edited: \"Modifications non enregistrées\",\n pending: \"Enregistrement…\",\n error: \"Échec de l’enregistrement\",\n retry: \"Réessayer\",\n },\n passwordReveal: {\n show: \"Afficher le mot de passe\",\n hide: \"Masquer le mot de passe\",\n },\n dangerConfirm: {\n arm: \"Supprimer…\",\n confirm: \"Supprimer\",\n cancel: \"Annuler\",\n prompt: \"Cette action est irréversible.\",\n password: \"Mot de passe\",\n phrase: (phrase) => `Saisissez «\\u202f${phrase}\\u202f» pour confirmer`,\n acknowledge: \"J’ai lu ce que fait cette action et je souhaite continuer.\",\n needsPhrase: (phrase) => `Saisissez «\\u202f${phrase}\\u202f» pour confirmer`,\n needsAcknowledge: \"Cochez la case pour confirmer\",\n needsPassword: \"Saisissez votre mot de passe pour confirmer\",\n },\n tabs: {\n add: \"Ajouter un onglet\",\n remove: (tab) => `Supprimer ${tab}`,\n more: \"Autres onglets\",\n backToFirst: \"Retour au premier onglet\",\n },\n appShell: {\n collapse: \"Réduire la barre latérale\",\n expand: \"Développer la barre latérale\",\n toggleGroup: (groupLabel) => `${groupLabel}\\u00a0: pages`,\n },\n topBar: {\n theme: \"Changer de thème\",\n palette: \"Préréglage d’apparence\",\n language: \"Langue\",\n switchRole: \"Changer de rôle\",\n role: (value) => `Rôle\\u00a0: ${value}`,\n },\n pickerSheet: {\n close: \"Fermer\",\n done: \"Terminé\",\n },\n dialogFrame: {\n close: \"Fermer\",\n },\n bulkActionBar: {\n selected: (count) => `${n(count)} ${count === 1 ? \"sélectionné\" : \"sélectionnés\"}`,\n clear: \"Effacer la sélection\",\n cleared: \"Sélection effacée\",\n },\n swipeableRow: {\n actions: \"Actions de la ligne\",\n },\n file: {\n // The kit's own `Intl` unit formatting, pinned to this locale (\"3,4 Mo\").\n size: (bytes) => formatFileSize(bytes, numberLocale),\n },\n filePicker: {\n dropzone: \"Envoi de fichier\",\n browse: \"Parcourir\",\n empty: \"Déposez un fichier ici\",\n emptyMultiple: \"Déposez des fichiers ici\",\n hint: (accept) => (accept ? `Acceptés\\u00a0: ${accept}` : \"Tout type de fichier\"),\n busy: \"Envoi en cours…\",\n rejectedPick: (count) =>\n count < 2\n ? \"Le fichier n\\u2019a pas été ajouté\"\n : `Aucun des ${n(count)} fichiers n\\u2019a été ajouté`,\n rejectedType: (name) => `Le type du fichier «\\u202f${name}\\u202f» n’est pas pris en charge`,\n rejectedTypeOnly: (accept) => `Uniquement des fichiers ${accept}`,\n rejectedSize: (name, maxSize) => `«\\u202f${name}\\u202f» dépasse ${maxSize}`,\n rejectedCount: (name, maxFiles) =>\n `«\\u202f${name}\\u202f» n’a pas été ajouté\\u00a0: ${n(maxFiles)} ${plural(maxFiles, \"fichier\", \"fichiers\")} au maximum`,\n rejectedInvalid: (name) => `«\\u202f${name}\\u202f» ne peut pas être utilisé ici`,\n rejectedMany: (count) =>\n count < 2\n ? `${n(count)} fichier n’a pas été ajouté`\n : `${n(count)} fichiers n’ont pas été ajoutés`,\n // The name branch is for exactly one file, as in English; 0 falls to the count.\n selected: (count, firstName) =>\n count === 1\n ? `«\\u202f${firstName}\\u202f» sélectionné`\n : `${n(count)} ${plural(count, \"fichier sélectionné\", \"fichiers sélectionnés\")}`,\n remove: (name) => `Supprimer «\\u202f${name}\\u202f»`,\n clearAll: \"Supprimer tous les fichiers\",\n removed: (name) => `«\\u202f${name}\\u202f» supprimé`,\n cleared: \"Tous les fichiers ont été supprimés\",\n },\n wizard: {\n done: \"Terminé\",\n cancel: \"Annuler\",\n back: \"Retour\",\n next: \"Suivant\",\n skip: \"Passer\",\n finish: \"Terminer\",\n submitting: \"Création…\",\n steps: \"Étapes\",\n step: (current, total) => `Étape ${n(current)} sur ${n(total)}`,\n cancelTitle: \"Abandonner ce formulaire\\u202f?\",\n confirmCancel: \"Vos saisies seront perdues.\",\n cancelConfirmLabel: \"Abandonner\",\n cancelDismissLabel: \"Continuer la saisie\",\n reviewTitle: \"Vérification\",\n edit: \"Modifier\",\n missingRequired: \"Veuillez remplir tous les champs obligatoires.\",\n genericError: \"Une erreur est survenue\",\n },\n tour: {\n next: \"Suivant\",\n back: \"Retour\",\n skip: \"Passer\",\n done: \"Terminé\",\n awaitClickHint: \"Cliquez sur l’élément mis en évidence pour continuer\",\n step: (current, total) => `${n(current)} / ${n(total)}`,\n },\n // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page. keksdose's reviewed words.\n tourCatalogue: {\n searchLabel: \"Rechercher une visite\",\n searchPlaceholder: \"Rechercher une visite…\",\n groupLabel: \"Thème\",\n groupAll: (count) => `Tous les thèmes (${n(count)})`,\n groupOption: (group, count) => `${group} (${n(count)})`,\n stateLabel: \"Filtrer les visites\",\n stateAll: (count) => `Toutes (${n(count)})`,\n stateTodo: (count) => `Non suivies (${n(count)})`,\n stateDone: (count) => `Terminées (${n(count)})`,\n showing: (shown, total) => `${n(shown)} visites sur ${n(total)}`,\n noMatches: \"Aucune visite ne correspond\",\n noMatchesHint: \"Essayez un autre mot, ou effacez le filtre.\",\n clearFilters: \"Effacer les filtres\",\n badgeNew: \"Nouveau\",\n badgeUpdated: \"Mise à jour\",\n resetOn: (date, reason) => (reason ? `Réinitialisée le ${date}\\u202f: ${reason}` : `Réinitialisée le ${date}`),\n points: (count) => `+${n(count)} pts`,\n steps: (count) => (count === 1 ? `${n(count)} étape` : `${n(count)} étapes`),\n duration: (minutes) => `Environ ${n(minutes)} min`,\n completedOn: (date) => `Terminée le ${date}`,\n completed: \"Terminée\",\n notCompleted: \"Non terminée\",\n markUndone: \"Marquer comme non terminée\",\n start: \"Démarrer\",\n replay: \"Rejouer\",\n },\n commandPalette: {\n clear: \"Effacer la recherche\",\n submit: \"Rechercher\",\n close: \"Fermer\",\n placeholder: \"Rechercher…\",\n empty: \"Aucun résultat\",\n loading: \"Recherche…\",\n dialog: \"Recherche\",\n error: \"La recherche a échoué. Réessayez.\",\n },\n globalSearch: {\n trigger: \"Rechercher\",\n placeholder: \"Rechercher ou aller à…\",\n shortcut: (keys) => `Rechercher (${keys})`,\n suggestions: \"Essayez\",\n results: \"Résultats\",\n },\n sparkline: {\n // \"En hausse de 12 à 40\" would read as \"up BY 12\", hence the colon.\n rising: (first, last) => `En hausse\\u00a0: de ${first} à ${last}`,\n falling: (first, last) => `En baisse\\u00a0: de ${first} à ${last}`,\n flat: (value) => `Stable à ${value}`,\n single: (value) => `Une seule valeur\\u00a0: ${value}`,\n noData: \"Aucune donnée\",\n named: (name, summary) => `${name}\\u00a0: ${summary}`,\n },\n statTile: {\n increase: (amount) => `En hausse de ${amount}`,\n decrease: (amount) => `En baisse de ${amount}`,\n unchanged: \"Sans changement\",\n better: (change) => `${change} (favorable)`,\n worse: (change) => `${change} (défavorable)`,\n noValue: \"Aucune donnée\",\n loading: \"Chargement…\",\n },\n signaturePad: {\n label: \"Signature\",\n instructions: \"Signez dans le cadre avec une souris, votre doigt ou un stylet.\",\n typedFallbackHint: \"Si vous ne pouvez pas dessiner, saisissez plutôt votre nom.\",\n empty: \"Aucun tracé pour l’instant\",\n signed: \"Signature tracée\",\n undo: \"Annuler le dernier trait\",\n clear: \"Effacer\",\n save: \"Enregistrer la signature\",\n useTyped: \"Saisir le nom à la place\",\n useDrawn: \"Dessiner à la place\",\n typedName: \"Nom complet\",\n cleared: \"Signature effacée\",\n undone: \"Dernier trait supprimé\",\n viewEmpty: \"Non signé\",\n viewDrawn: \"Signature manuscrite\",\n viewTyped: (name) => `Signé avec le nom saisi ${name}`,\n },\n passwordStrength: {\n // Agrees with \"mot de passe\" (masculine).\n tooShort: \"Trop court\",\n weak: \"Faible\",\n fair: \"Moyen\",\n good: \"Bon\",\n strong: \"Fort\",\n announcement: (level) => `Robustesse du mot de passe\\u00a0: ${level}`,\n // Unformatted, as in the English default.\n ruleLength: (minLength) =>\n `Au moins ${n(minLength)} ${plural(minLength, \"caractère\", \"caractères\")}`,\n ruleCase: \"Majuscules et minuscules\",\n ruleDigit: \"Un chiffre\",\n ruleSymbol: \"Un caractère spécial\",\n optional: (rule) => `${rule} (facultatif)`,\n met: \"Respecté\\u00a0:\",\n notMet: \"Non respecté\\u00a0:\",\n tooLong: (maxBytes) =>\n `Au plus ${n(maxBytes)} ${plural(maxBytes, \"caractère\", \"caractères\")} (les lettres accentuées et les emoji comptent pour plus d’un).`,\n },\n seriesChart: {\n resetZoom: \"Réinitialiser le zoom\",\n zoomHint:\n \"Faites glisser pour zoomer\\u00a0: une sélection à peu près carrée zoome sur les deux axes, une sélection longue et étroite sur son seul axe. Double-cliquez pour réinitialiser.\",\n empty: \"Aucune donnée\",\n legend: \"Séries\",\n points: \"Valeurs du graphique\",\n },\n pieChart: {\n slices: \"Secteurs du graphique\",\n slice: (label, value, percent) => `${label}\\u00a0: ${value} (${percent})`,\n total: \"Total\",\n empty: \"Aucune donnée\",\n legend: \"Catégories\",\n },\n confirmDialog: {\n confirm: \"Confirmer\",\n cancel: \"Annuler\",\n typed: (text) => `Saisissez «\\u202f${text}\\u202f» pour confirmer`,\n },\n floatingPanel: {\n close: \"Fermer\",\n badge: (count) => `${n(count)} ${plural(count, \"nouveau\", \"nouveaux\")}`,\n },\n copyButton: {\n copy: \"Copier\",\n copied: \"Copié\",\n failed: \"Échec de la copie\",\n copiedAnnouncement: \"Copié dans le presse-papiers\",\n failedAnnouncement: \"Impossible de copier dans le presse-papiers\",\n },\n list: {\n unread: \"Non lu\",\n opensInNewTab: \"s’ouvre dans un nouvel onglet\",\n },\n breadcrumbs: {\n label: \"Fil d’Ariane\",\n showAll: \"Afficher le chemin complet\",\n },\n toast: {\n close: \"Fermer la notification\",\n notifications: \"Notifications\",\n undo: \"Annuler\",\n redo: \"Rétablir\",\n },\n form: {\n save: \"Enregistrer\",\n cancel: \"Annuler\",\n submitShortcut: (apple) => (apple ? \"⌘ Entrée\" : \"Ctrl+Entrée\"),\n },\n descriptionList: {\n empty: \"—\",\n },\n lineItems: {\n add: \"Ajouter une ligne\",\n remove: (row) => `Supprimer la ligne ${row}`,\n confirmRemove: (row) => `Supprimer la ligne ${row}\\u202f? Appuyez de nouveau pour confirmer`,\n row: (row) => `Ligne ${row}`,\n cell: (column, row) => `${column}, ligne ${row}`,\n totals: \"Total\",\n },\n progressBar: {\n unlimited: \"Illimité\",\n overLimit: (amount) => `${amount} au-delà de la limite`,\n },\n signedAmount: {\n positive: (amount) => `plus ${amount}`,\n negative: (amount) => `moins ${amount}`,\n },\n errorBoundary: {\n title: \"Une erreur s’est produite\",\n message: \"Cette partie de la page n’a pas pu s’afficher. Réessayez ou rechargez la page.\",\n retry: \"Réessayer\",\n details: \"Détails de l’erreur\",\n reload: \"Recharger\",\n updateTitle: \"Une nouvelle version est disponible\",\n updateMessage: \"Une partie de l’application a changé depuis le chargement de cette page. Rechargez-la pour obtenir la nouvelle version.\",\n offlineTitle: \"Vous êtes hors ligne\",\n offlineMessage: \"Cette page n’a pas pu être chargée sans connexion. Reconnectez-vous, puis rechargez la page.\",\n copyReport: \"Copier le rapport d’erreur\",\n reported: \"L’erreur a été signalée automatiquement.\",\n reportedAs: (reference) => `Signalée sous la référence ${reference}`,\n },\n authedImage: {\n loading: \"Chargement de l’image…\",\n loadError: \"Impossible de charger l’image\",\n failedImage: (alt) => `${alt} : impossible de charger l’image`,\n },\n imageGrid: {\n list: \"Images\",\n item: (index, count) => `Image ${n(index)} sur ${n(count)}`,\n actions: (name) => `Actions pour ${name}`,\n },\n lightbox: {\n dialog: \"Visionneuse d’images\",\n close: \"Fermer\",\n previous: \"Image précédente\",\n next: \"Image suivante\",\n counter: (index, count) => `${n(index)} / ${n(count)}`,\n position: (index, count) => `Image ${n(index)} sur ${n(count)}`,\n download: \"Télécharger\",\n zoom: \"Agrandir\",\n noPreview: \"Aucun aperçu disponible pour ce fichier\",\n openInNewTab: \"Ouvrir dans un nouvel onglet\",\n },\n writeLock: {\n reason: \"Vous pouvez consulter ceci, mais pas le modifier.\",\n },\n accountState: {\n // Agreeing with \"compte\" (masculine): the chip is the state of an account.\n active: \"Actif\",\n inactive: \"Inactif\",\n invited: \"Invité\",\n registered: \"Inscrit\",\n unverified: \"Non vérifié\",\n passwordChange: \"Doit changer de mot de passe\",\n deletion: \"Suppression demandée\",\n deletionOn: (date) => `Suppression le ${date}`,\n },\n shareCard: {\n dialogTitle: \"Partager\",\n close: \"Fermer\",\n email: \"Adresse e-mail\",\n emailOptional: \"Adresse e-mail (facultatif)\",\n // example.com is reserved for examples (RFC 2606); a localised domain is real.\n emailPlaceholder: \"nom@example.com\",\n invalidEmail: \"Saisissez une adresse e-mail complète.\",\n role: \"Rôle\",\n roleOf: (name) => `Rôle de ${name}`,\n add: \"Partager\",\n whoHasAccess: \"Qui a accès\",\n nobodyYet: \"Personne d’autre n’y a encore accès.\",\n pending: \"En attente\",\n openInvite: \"Lien d’invitation ouvert\",\n copyLink: \"Copier le lien\",\n team: \"Équipe\",\n teamHint: (name) => `Tous les membres de ${name} y auront accès.`,\n remove: \"Retirer l’accès\",\n removeConfirm: (name) => `Retirer l’accès de ${name}\\u202f?`,\n revokePending: \"Révoquer l’invitation\",\n revokePendingConfirm: (name) => `Révoquer l’invitation de ${name}\\u202f?`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n loading: \"Chargement…\",\n },\n reauthDialog: {\n title: \"Confirmez votre identité\",\n description: \"Saisissez votre mot de passe actuel pour continuer.\",\n password: \"Mot de passe actuel\",\n submit: \"Continuer\",\n cancel: \"Annuler\",\n },\n // 0.35: keksdose's reviewed French (its `boot.slow` / `boot.waking`), which is canon.\n serverWake: {\n slow: \"Chargement en cours — c’est plus long que d’habitude.\",\n waking: (appName) =>\n `Le serveur se met en veille quand personne n’utilise ${appName ?? \"l’application\"}\\u202f; la première requête après une pause doit donc le réveiller. Cela peut prendre un instant — rien n’est perdu, la page se remplit toute seule.`,\n },\n // 0.28.0 — docs/legal-harmonization.md §4.3/§4.4: keksdose's reviewed French, and\n // Kurvenschmiede's for the browser section and the beta notice; spaced as this\n // catalogue writes it (\\u00a0 before \":\", \\u202f before \";\" and inside « »).\n legal: {\n // Not keksdose's \"Mentions légales\": that is the Imprint link's label, and a screen\n // reader would read it twice (§4.4).\n navLabel: \"Informations légales\",\n links: {\n impressum: \"Mentions légales\",\n privacy: \"Confidentialité\",\n terms: \"Conditions d’utilisation\",\n },\n titles: {\n impressum: \"Mentions légales\",\n privacy: \"Politique de confidentialité\",\n terms: \"Conditions d’utilisation\",\n },\n backHome: \"Retour à l’accueil\",\n accept: \"J’accepte les {terms} et la {privacy}\",\n notice: {\n beta: \"Bêta fermée. Ces textes n’ont pas encore été relus par un avocat et le seront avant un lancement public.\",\n privacy:\n \"Bêta fermée. Les formulations juridiques ci-dessous n’ont pas encore été relues par un avocat\\u202f; cela sera fait avant un lancement public. Les descriptions techniques — ce qui est stocké, où, et qui peut le lire — décrivent ce que fait réellement le logiciel aujourd’hui et sont faites pour être vérifiées par rapport à lui.\",\n },\n translation: {\n note: (o) =>\n `Ceci est une traduction fournie pour votre commodité. Seule la version en ${o.bindingLanguage} fait foi.`,\n show: (o) => `Afficher la version en ${o.bindingLanguage}`,\n },\n sections: {\n impressum: {\n operator: {\n title: \"Exploitant\",\n body: (o) =>\n `${o.name}\\n${o.postalCode} ${o.city}\\n${o.country}\\n\\nL’adresse postale complète est communiquée sur demande à toute personne ayant un intérêt juridique légitime\\u202f; écrivez à l’adresse de contact ci-dessous.`,\n },\n contact: {\n title: \"Contact\",\n body: (o) => `E-mail\\u00a0: ${o.email}`,\n },\n disclaimer: {\n title: \"Responsabilité pour les contenus et les liens\",\n body: \"Il s’agit d’un projet privé et non commercial, proposé dans le cadre d’une bêta fermée, sans garantie. Les sites externes vers lesquels nous renvoyons relèvent de la responsabilité de leurs exploitants respectifs\\u202f; nous n’avons aucun contrôle sur leur contenu.\",\n // 0.32.0 — the commercial variant (docs/billing-harmonization.md §8).\n // \"Formule\" and \"abonnement\" as the `billing` namespace.\n commercial:\n \"Il s’agit d’un service commercial. Les formules payantes sont vendues par notre revendeur, qui agit en qualité de Merchant of Record\\u00a0: il vend l’abonnement en son nom propre, encaisse le paiement, émet la facture et se charge de la TVA, et ses conditions de vente s’appliquent à l’achat. Nous veillons à l’exactitude du contenu de ce service, mais ne pouvons pas garantir qu’il soit complet ou à jour. Les sites externes vers lesquels nous renvoyons relèvent de la responsabilité de leurs exploitants respectifs\\u202f; nous n’avons aucun contrôle sur leur contenu.\",\n },\n },\n privacy: {\n controller: {\n title: \"Responsable du traitement\",\n body: (o) =>\n `Le responsable du traitement des données personnelles dans ce service est\\u00a0:\\n${o.name}\\n${o.postalCode} ${o.city}, ${o.country}\\nE-mail\\u00a0: ${o.email}\\n\\nL’adresse postale complète est communiquée sur demande aux personnes concernées et aux autorités de surveillance.`,\n },\n legal_basis: {\n title: \"Base légale\",\n body: \"L’exploitant étant établi en Suisse, le traitement est régi par la loi fédérale suisse sur la protection des données (LPD). Lorsque le Règlement général sur la protection des données de l’UE (RGPD) vous est applicable, nous nous fondons sur l’exécution d’un contrat pour fournir le service (art. 6, par. 1, let. b RGPD) et sur notre intérêt légitime à l’exploiter et à le sécuriser (art. 6, par. 1, let. f RGPD).\",\n },\n browser: {\n title: \"Ce que votre navigateur enregistre\",\n lead: \"Aucun cookie. L’app conserve les éléments suivants dans le stockage de votre navigateur\\u00a0:\",\n tail: \"Rien de tout cela ne sert à vous suivre. Les éléments en attente d’envoi nous sont transmis dès que possible\\u202f; tout le reste demeure sur votre appareil. Tout cela disparaît lorsque vous effacez les données du site, et la déconnexion supprime les jetons de connexion.\",\n },\n rights: {\n title: \"Vos droits\",\n lead: \"Vous disposez d’un droit d’accès, de rectification, d’effacement, de limitation, de portabilité des données et d’opposition.\",\n tail: \"Si vous êtes en Suisse, vous pouvez vous adresser au Préposé fédéral à la protection des données et à la transparence (PFPDT)\\u202f; si vous êtes dans l’UE, vous pouvez déposer une plainte auprès de votre autorité de surveillance locale.\",\n },\n contact: {\n title: \"Contact pour la protection des données\",\n body: (o) => `Pour toute demande relative à la confidentialité, contactez\\u00a0: ${o.email}`,\n },\n },\n terms: {\n warranty: {\n title: \"Absence de garantie\",\n body: \"Le service est fourni «\\u202ftel quel\\u202f» et «\\u202fselon disponibilité\\u202f», sans garantie d’aucune sorte dans la mesure permise par la loi. En tant que bêta, il peut contenir des erreurs, changer ou être interrompu à tout moment — conservez vos propres sauvegardes des données importantes.\",\n },\n liability: {\n title: \"Limitation de responsabilité\",\n body: \"Dans la mesure permise par le droit applicable, l’exploitant n’est pas responsable des dommages indirects ou consécutifs résultant de l’utilisation ou de l’impossibilité d’utiliser le service. Rien ici ne limite une responsabilité qui ne peut pas être limitée par la loi.\",\n },\n changes: {\n title: \"Modifications des présentes conditions\",\n body: \"Ces conditions peuvent être mises à jour au fil de l’évolution du service. Les modifications importantes seront annoncées par e-mail ou dans l’app\\u202f; continuer à utiliser le service après une modification vaut acceptation.\",\n },\n language: {\n title: \"Langue\",\n body: (o) =>\n `Les présentes conditions sont rédigées en ${o.bindingLanguage}. Les traductions dans d’autres langues sont fournies à titre indicatif uniquement\\u202f; en cas de divergence, la version en ${o.bindingLanguage} prévaut.`,\n },\n law: {\n title: \"Droit applicable\",\n body: (o) =>\n `Les présentes conditions sont régies par le droit suisse, à l’exclusion de ses règles de conflit de lois. Dans la mesure où la loi le permet, le for est ${o.city} (${o.region}), ${o.country}.`,\n },\n },\n },\n },\n // 0.29.0 — docs/auth-harmonization.md: keksdose's reviewed French (auth.*,\n // verify_email, error.not_found_*, budget_share.join_*), kastlan's for the names and\n // the 2FA prompt; written fresh where neither app had the sentence. Spaced as this\n // catalogue writes it (\\u00a0 before \":\", \\u202f before \"?\" and \";\"), \"l’application\"\n // where keksdose writes \"l’app\".\n signIn: {\n email: \"E-mail\",\n password: \"Mot de passe\",\n submit: \"Se connecter\",\n passkey: \"Se connecter avec une clé d’accès\",\n forgotPassword: \"Mot de passe oublié\\u202f?\",\n noAccount: \"Pas encore de compte\\u202f?\",\n register: \"Créer un compte\",\n invalidCredentials: \"L’adresse e-mail ou le mot de passe est incorrect.\",\n failed: \"Échec de la connexion. Veuillez réessayer.\",\n passkeyFailed: \"Échec de la connexion par clé d’accès.\",\n deactivatedHint: \"Compte désactivé\\u202f? Écrivez à {contact}.\",\n // \"Compte créé avec…\" rather than \"Inscrit avec…\", which would need a gender.\n tagHint: (taggedAddress) =>\n `Compte créé avec ${taggedAddress}\\u202f? Utilisez cette adresse.`,\n twoFactorTitle: \"Authentification à deux facteurs\",\n twoFactorIntro: \"Saisissez le code affiché par votre application d’authentification.\",\n code: \"Code 2FA\",\n verify: \"Vérifier\",\n codeInvalid: \"Code 2FA invalide.\",\n setPasswordTitle: \"Choisir un nouveau mot de passe\",\n setPasswordIntro:\n \"Un nouveau mot de passe a été demandé pour ce compte. Choisissez-en un et vous êtes aussitôt de retour.\",\n newPassword: \"Nouveau mot de passe\",\n confirmPassword: \"Répéter le nouveau mot de passe\",\n passwordMismatch: \"Les mots de passe ne correspondent pas.\",\n setPasswordSubmit: \"Définir le mot de passe et se connecter\",\n setPasswordFailed: \"Le mot de passe n’a pas pu être défini.\",\n expired: \"Cette connexion a expiré. Veuillez vous reconnecter.\",\n backToSignIn: \"Retour à la connexion\",\n // kastlan's backup-code words (\"code de secours\" — not keksdose's \"code de\n // récupération\", which is the key of its end-to-end encryption).\n useRecoveryCode: \"Utiliser un code de secours\",\n useAuthenticatorCode: \"Utiliser votre application d’authentification\",\n recoveryCode: \"Code de secours\",\n recoveryIntro:\n \"Saisissez l’un des codes de secours que vous avez enregistrés en activant l’authentification à deux facteurs.\",\n recoveryCodeHint: (length) =>\n `${n(length)} lettres et chiffres. Les tirets et les espaces ne comptent pas.`,\n recoveryCodeInvalid: \"Ce code de secours n’est pas valable ou a déjà été utilisé.\",\n rateLimited,\n // 0.31.0: the same words as `landing.requestAccess`.\n requestAccess: \"Demander l’accès\",\n },\n register: {\n firstName: \"Prénom\",\n lastName: \"Nom\",\n email: \"E-mail\",\n emailTagUse: (address) => `Utiliser ${address}`,\n emailTagHint:\n \"Beaucoup de fournisseurs livrent nom+tag@… dans la même boîte, ce qui rend le courrier de cette application filtrable et traçable. Vérifiez que le vôtre le fait avant de vous y fier\\u00a0: vous vous connecteriez avec l’adresse marquée.\",\n invitedEmailHint: \"L’adresse à laquelle votre invitation a été envoyée.\",\n invitedTagNote: \"L’adresse marquée reçoit son propre e-mail de confirmation.\",\n password: \"Mot de passe\",\n confirmPassword: \"Répéter le mot de passe\",\n passwordMismatch: \"Les mots de passe ne correspondent pas.\",\n language: \"Langue\",\n submit: \"Créer un compte\",\n haveAccount: \"Déjà un compte\\u202f?\",\n signIn: \"Se connecter\",\n emailTaken: \"Un compte existe déjà avec cette adresse e-mail.\",\n registrationClosed:\n \"Les nouveaux comptes ne sont créés que sur invitation. Demandez à l’exploitant d’inviter votre adresse e-mail.\",\n invitationInvalid: \"Ce lien d’invitation n’est pas valide.\",\n invitationExpired: \"Cette invitation a expiré. Demandez-en une nouvelle.\",\n failed: \"Échec de l’inscription. Veuillez réessayer.\",\n rateLimited,\n },\n completeName: {\n title: \"Complétez votre nom\",\n description:\n \"Le prénom et le nom sont désormais demandés séparément. Vérifiez ce qui est déjà rempli et ajoutez ce qui manque.\",\n firstName: \"Prénom\",\n lastName: \"Nom\",\n save: \"Enregistrer\",\n later: \"Plus tard\",\n failed: \"Votre nom n’a pas pu être enregistré. Veuillez réessayer.\",\n },\n forgotPassword: {\n title: \"Mot de passe oublié\",\n intro:\n \"Saisissez l’adresse e-mail de votre compte. Nous vous enverrons un lien pour choisir un nouveau mot de passe.\",\n email: \"E-mail\",\n submit: \"Envoyer le lien\",\n sent: (email) => `S’il existe un compte pour ${email}, le lien est en route.`,\n sentHint:\n \"Le lien est valable une heure et ne fonctionne qu’une seule fois. Vérifiez aussi votre dossier de courrier indésirable.\",\n backToSignIn: \"Retour à la connexion\",\n error: \"La demande a échoué. Veuillez réessayer plus tard.\",\n rateLimited,\n },\n resetPassword: {\n title: \"Choisir un nouveau mot de passe\",\n checking: \"Vérification du lien…\",\n intro: (email) => `Vous définissez un nouveau mot de passe pour ${email}.`,\n newPassword: \"Nouveau mot de passe\",\n confirmPassword: \"Répéter le nouveau mot de passe\",\n mismatch: \"Les mots de passe ne correspondent pas.\",\n submit: \"Enregistrer le mot de passe\",\n failed: \"Le mot de passe n’a pas pu être changé.\",\n noToken: \"Ce lien est incomplet.\",\n invalid: \"Ce lien est invalide ou a expiré.\",\n invalidHint:\n \"Les liens sont valables une heure et ne fonctionnent qu’une fois. Demandez simplement un nouveau lien.\",\n requestNew: \"Demander un nouveau lien\",\n success: \"Votre mot de passe a été changé. Vous pouvez vous connecter avec dès maintenant.\",\n sessionsEnded: \"Les appareils connectés ont été déconnectés — vous devrez vous y reconnecter.\",\n signIn: \"Aller à la connexion\",\n rateLimited,\n },\n verifyEmail: {\n title: \"Confirmez votre adresse e-mail\",\n verifying: \"Confirmation…\",\n verified: \"Votre adresse e-mail est confirmée.\",\n continue: \"Continuer\",\n invalid: \"Ce lien de confirmation n’est pas valide\",\n expired: \"Ce lien de confirmation a expiré\",\n noToken: \"Ce lien n’a pas de jeton de confirmation.\",\n invalidHint: \"Le lien a peut-être expiré ou déjà été utilisé.\",\n requestInApp: \"Vous pouvez en demander un nouveau depuis l’application.\",\n requestHere: \"Vous pouvez en demander un nouveau ici.\",\n resend: \"Envoyer à nouveau\",\n resendIn: (seconds) => `Envoyer à nouveau dans ${n(seconds)}\\u00a0s`,\n resent: \"E-mail de confirmation envoyé\",\n resendError: \"Impossible d’envoyer l’e-mail de confirmation\",\n rateLimited,\n banner: \"Veuillez confirmer votre adresse e-mail.\",\n dismiss: \"Pas maintenant\",\n },\n notFound: {\n title: \"Page introuvable\",\n body: \"Cette adresse n’existe pas (ou plus). Peut-être une faute de frappe, ou la page a été déplacée.\",\n home: \"Aller à la page d’accueil\",\n app: \"Retour à l’application\",\n },\n acceptInvitation: {\n title: \"Accepter l’invitation\",\n accepting: \"Acceptation de l’invitation…\",\n accepted: \"Invitation acceptée.\",\n joined: (name) => `Vous avez rejoint ${name}.`,\n continue: \"Continuer\",\n invalid: \"Impossible de rejoindre avec ce lien\",\n expired: \"Cette invitation a expiré\",\n noToken: \"Ce lien n’a pas de jeton d’invitation.\",\n // Without \"qui vous a invité(e)\", which would need a gender.\n askAgain: \"Demandez une nouvelle invitation à la personne qui vous l’a envoyée.\",\n signInFirst: \"Connectez-vous pour accepter cette invitation\",\n signInHint: \"Utilisez le compte auquel l’invitation a été envoyée.\",\n signIn: \"Se connecter\",\n register: \"Créer un compte\",\n },\n companySwitcher: {\n switchCompany: \"Changer d’entreprise\",\n heading: \"Entreprises\",\n current: (name) => `Entreprise\\u00a0: ${name}`,\n // Agreeing with \"entreprise\" (feminine).\n currentMark: \"(actuelle)\",\n switching: \"Changement d’entreprise…\",\n },\n // 0.30.0 — docs/user-admin-harmonization.md: keksdose's reviewed French for the admin\n // words (admin.users.*), Kurvenschmiede's for transfer, invitations and sessions,\n // kastlan's for the company, the throttle and \"Se déconnecter partout\"; written fresh\n // where no app had the sentence. Phrased so that no sentence about the reader needs\n // a gender (\"déconnecté·e\").\n emailChange: {\n title: \"Adresse e-mail\",\n current: \"Adresse actuelle\",\n newEmail: \"Nouvelle adresse e-mail\",\n password: \"Mot de passe actuel\",\n passwordHint: \"Votre adresse sert à vous connecter, c’est pourquoi la changer demande votre mot de passe.\",\n emailTagUse: (address) => `Utiliser ${address}`,\n emailTagHint:\n \"Beaucoup de fournisseurs livrent nom+tag@… dans la même boîte, ce qui rend le courrier de cette application filtrable et traçable. Vérifiez que le vôtre le fait avant de vous y fier\\u00a0: vous vous connecteriez avec l’adresse marquée.\",\n submit: \"Changer d’adresse e-mail\",\n sameAsCurrent: \"C’est déjà votre adresse.\",\n emailTaken: \"Un compte existe déjà avec cette adresse e-mail.\",\n wrongPassword: \"Le mot de passe est incorrect.\",\n pending: (newEmail) => `Confirmez le lien que nous avons envoyé à ${newEmail}.`,\n pendingHint: (currentEmail) =>\n `D’ici là, vous continuez à vous connecter avec ${currentEmail}. Vérifiez aussi votre dossier de courrier indésirable.`,\n resend: \"Renvoyer le lien\",\n resent: \"Nous avons renvoyé le lien.\",\n cancel: \"Annuler le changement\",\n confirmed: (email) => `Votre adresse e-mail est désormais ${email}.`,\n passkeyNote:\n \"Vos clés d’accès continuent de fonctionner. Votre appareil peut encore les afficher sous votre ancienne adresse.\",\n rateLimited,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n // 0.36.0 — docs/notifications-harmonization.md §4.2: the notification cards. The push\n // and device words follow keksdose's reviewed French.\n notifications: {\n typesTitle: \"Me notifier pour\",\n typesDescription: \"Choisissez ce dont vous êtes averti, et comment.\",\n byEmail: \"Par e-mail\",\n emailUnverified: \"Confirmez votre adresse pour les recevoir.\",\n digestCadence: \"Fréquence\",\n digestWeekly: \"Hebdomadaire\",\n digestMonthly: \"Mensuelle\",\n typesLoading: \"Chargement des paramètres de notification…\",\n typesEmpty: \"Il n’y a aucune notification pour ce compte.\",\n quietTitle: \"Heures calmes\",\n quietDescription: (inbox) =>\n inbox\n ? \"Aucune notification push pendant cette plage. Elles arrivent quand même dans votre boîte de réception.\"\n : \"Aucune notification push pendant cette plage.\",\n quietFrom: \"De\",\n quietUntil: \"Jusqu’à\",\n quietIncomplete:\n \"Définissez une heure de début et une heure de fin. Les heures calmes s’appliquent une fois les deux renseignées.\",\n timeZone: \"Fuseau horaire\",\n deviceZone: (zone) => `Cet appareil est dans le fuseau ${zone}.`,\n useDeviceZone: \"L’utiliser\",\n regions: {\n Africa: \"Afrique\",\n America: \"Amériques\",\n Antarctica: \"Antarctique\",\n Arctic: \"Arctique\",\n Asia: \"Asie\",\n Atlantic: \"Atlantique\",\n Australia: \"Australie\",\n Europe: \"Europe\",\n Indian: \"Océan Indien\",\n Pacific: \"Pacifique\",\n },\n pushTitle: \"Notifications push\",\n pushDescription: \"Les notifications sur cet appareil, même quand l’app est fermée.\",\n unsupported: \"Ce navigateur ne prend pas en charge les notifications push.\",\n iosInstall: (app) =>\n `Sur iPhone ou iPad, ajoutez d’abord ${app} à votre écran d’accueil\\u00a0: iOS ne délivre les notifications qu’à l’app installée.`,\n notConfigured: \"Les notifications push ne sont pas configurées sur ce serveur.\",\n blocked: \"Les notifications sont bloquées dans les réglages de ce navigateur.\",\n on: \"Les notifications sont activées pour cet appareil.\",\n off: \"Les notifications sont désactivées pour cet appareil.\",\n otherAccount:\n \"Ce navigateur reçoit les notifications d’un autre compte. Activez-les ici pour les recevoir sur le compte avec lequel vous êtes connecté.\",\n enable: \"Activer les notifications\",\n disable: \"Désactiver\",\n sendTest: \"Envoyer un test\",\n enableFailed: \"Impossible d’activer les notifications.\",\n noServiceWorker: \"Impossible de joindre le service worker de l’app. Rechargez la page et réessayez.\",\n pushTimeout: \"Le service push du navigateur n’a pas répondu. Vérifiez votre connexion et réessayez.\",\n testSent: (count) => `Test envoyé à ${n(count)} ${plural(count, \"appareil\", \"appareils\")}`,\n testNone: \"Aucun appareil n’a accepté le test. Activez d’abord les notifications pour cet appareil.\",\n testFailed: \"Impossible d’envoyer la notification de test.\",\n explainerTitle: \"Activer les notifications\\u202f?\",\n explainerBody: (app) =>\n `${app} n’envoie de notifications que pour ce que vous choisissez, et vous pouvez les désactiver à tout moment.`,\n explainerHint: \"Votre navigateur va ensuite demander l’autorisation.\",\n explainerContinue: \"Continuer\",\n devicesTitle: \"Appareils de notification\",\n devicesDescription:\n \"Tous les appareils qui reçoivent des notifications push pour votre compte. Retirez ceux que vous n’utilisez plus.\",\n devicesLoading: \"Chargement des appareils…\",\n devicesEmpty: \"Aucun appareil ne reçoit encore de notifications.\",\n unknownDevice: \"Appareil inconnu\",\n thisDevice: \"Cet appareil\",\n added: (date) => `Ajouté le ${date}`,\n lastDelivery: (date) => `Dernière remise le ${date}`,\n noDelivery: \"Aucune remise pour l’instant\",\n failures: (count) =>\n `${n(count)} ${plural(count, \"remise échouée\", \"remises échouées\")} d’affilée`,\n remove: \"Retirer\",\n // Starts with `remove`, the button's visible text, for voice control.\n removeItem: (device) => `Retirer ${device}`,\n removePrompt: \"Ne plus envoyer de notifications à cet appareil\\u202f?\",\n unsubscribeTitle: \"Notifications par e-mail\",\n unsubscribeAbout: (type) => `Vous recevez des e-mails concernant\\u00a0: ${type}.`,\n unsubscribeGeneric: \"Vous recevez des e-mails de notification.\",\n stopThese: \"Ne plus recevoir ces e-mails\",\n stopAll: (app) => `Ne plus recevoir aucun e-mail de notification de ${app}`,\n stoppedThese: \"C’est fait. Vous ne recevrez plus ces e-mails.\",\n stoppedAll: (app) => `C’est fait. Vous ne recevrez plus d’e-mails de notification de ${app}.`,\n accountMail: \"Les e-mails concernant votre compte continuent d’arriver.\",\n turnBackOn: \"Vous pouvez les réactiver à tout moment dans les paramètres.\",\n openSettings: \"Ouvrir les paramètres\",\n invalidLink: \"Ce lien ne fonctionne plus. Vous pouvez désactiver les e-mails dans les paramètres.\",\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n sessions: {\n title: \"Sessions\",\n description:\n \"Une session ouverte sur un appareil que vous n’utilisez plus, ou auquel vous ne vous fiez pas\\u202f? Déconnectez-vous partout.\",\n signOutEverywhere: \"Se déconnecter partout…\",\n signOutEverywherePrompt:\n \"Toutes les sessions prennent fin, y compris celle-ci\\u00a0: cet appareil sera déconnecté lui aussi, et il faudra vous reconnecter ici.\",\n confirmSignOutEverywhere: \"Se déconnecter partout\",\n list: \"Vos sessions ouvertes\",\n loading: \"Chargement des sessions…\",\n empty: \"Aucune session à afficher.\",\n current: \"Cet appareil\",\n unknownDevice: \"Appareil inconnu\",\n // A colon: `when` is either \"il y a 3 heures\" or a date.\n lastActive: (when) => `Dernière activité\\u00a0: ${when}`,\n ip: (address) => `IP ${address}`,\n revoke: \"Déconnecter\",\n // Starts with `revoke`, the button's visible text, for voice control.\n revokeItem: (device) => `Déconnecter ${device}`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n deleteAccount: {\n title: \"Supprimer le compte\",\n afterDays: (days) =>\n `Votre compte est désactivé immédiatement et effacé définitivement ${n(days)} ${plural(days, \"jour\", \"jours\")} plus tard.`,\n operator: \"Votre compte est désactivé immédiatement, puis l’exploitant l’effacera définitivement.\",\n arm: \"Supprimer le compte…\",\n prompt: \"Toutes vos sessions prendront fin, sur tous les appareils, et votre compte ne pourra plus être utilisé.\",\n handOver: (count) =>\n count < 2\n ? `${n(count)} élément visible par d’autres passera à un administrateur.`\n : `${n(count)} éléments visibles par d’autres passeront à un administrateur.`,\n confirm: \"Supprimer mon compte\",\n done: \"Votre compte est désactivé. Déconnexion en cours.\",\n wrongPassword: \"Le mot de passe est incorrect.\",\n confirmationMismatch: \"Ce n’est pas l’adresse de votre compte.\",\n lastAdmin:\n \"Votre compte est le dernier compte administrateur. Nommez d’abord quelqu’un d’autre administrateur.\",\n lastAdminOf: (companies) =>\n `Votre compte est le dernier compte administrateur de ${companies}. Nommez-y d’abord quelqu’un d’autre administrateur.`,\n // keksdose's \"ménage\".\n householdHasMembers:\n \"Votre ménage a d’autres membres, le compte ne peut donc pas être supprimé ici. Veuillez écrire à l’exploitant.\",\n rateLimited,\n failed: \"Votre compte n’a pas pu être supprimé. Veuillez réessayer.\",\n },\n dataExport: {\n title: \"Exporter vos données\",\n description: \"Téléchargez une copie des données de votre compte sous forme de fichier JSON.\",\n download: \"Télécharger mes données\",\n started: \"Votre téléchargement a commencé.\",\n saveAgain: \"Rien ne s’est passé\\u202f? Enregistrer le fichier\",\n rateLimited: (seconds) =>\n seconds && seconds > 0\n ? `Vous venez d’exporter vos données. Réessayez dans ${wait(seconds)}.`\n : \"Vous venez d’exporter vos données. Veuillez réessayer dans une minute.\",\n failed: \"L’export a échoué. Veuillez réessayer.\",\n },\n userRoster: {\n name: \"Nom\",\n email: \"E-mail\",\n role: \"Rôle\",\n state: \"État\",\n created: \"Créé le\",\n lastLogin: \"Dernière connexion\",\n never: \"Jamais\",\n actions: \"Actions\",\n actionsFor: (name) => `Actions pour ${name}`,\n },\n roleSelect: {\n label: \"Rôle\",\n rolesLegend: \"Rôles\",\n roleOf: (name) => `Rôle de ${name}`,\n lockedLastAdmin: \"Le dernier compte administrateur actif garde ce rôle.\",\n lockedSelf: \"Vous ne pouvez pas changer votre propre rôle.\",\n notForLastAdmin: \"pas pour le dernier administrateur\",\n notForSelf: \"pas pour votre propre compte\",\n unavailable: (role, reason) => `${role} (${reason})`,\n },\n reviewerScope: {\n languages: \"Langues\",\n hint: \"Cochez les langues que cette personne relit.\",\n none: \"Aucune langue\\u00a0: enregistrer retire le rôle de relecteur.\",\n areas: \"Limiter à\",\n legalOnly: \"Uniquement les pages légales\",\n legalOnlyHint:\n \"Mentions légales, politique de confidentialité et conditions d’utilisation\\u00a0: pour un juriste plutôt que pour un locuteur natif.\",\n failed: \"Le rôle de relecteur n’a pas pu être enregistré. Veuillez réessayer.\",\n },\n adminAction: {\n confirm: \"Confirmer\",\n cancel: \"Annuler\",\n close: \"Fermer\",\n lastAdmin:\n \"C’est le dernier compte administrateur actif. Nommez d’abord quelqu’un d’autre administrateur.\",\n self: \"Vous ne pouvez pas faire cela sur votre propre compte.\",\n confirmationMismatch:\n \"L’adresse ne correspond pas à ce compte. Vérifiez sur quel compte vous êtes.\",\n otherCompanies:\n \"Ce compte appartient aussi à d’autres entreprises, seul l’exploitant de la plateforme peut donc faire cela. Vous pouvez plutôt le retirer de cette entreprise.\",\n removeFromCompany: \"Retirer de l’entreprise\",\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n adminActionLog: {\n title: \"Actions d’administration\",\n empty: \"Aucune action d’administration pour l’instant.\",\n loading: \"Chargement…\",\n by: (actor) => `par ${actor}`,\n bySelf: \"par la personne elle-même\",\n automatic: \"automatiquement\",\n erased: \"un compte effacé\",\n filteredTo: (target) => `Uniquement ${target}`,\n showAll: \"Afficher toutes les actions\",\n filterBy: (target) => `Afficher uniquement les actions concernant ${target}`,\n // Agreeing with \"compte\" (masculine), like `accountState`.\n actions: {\n deactivate: \"Désactivé\",\n reactivate: \"Réactivé\",\n role: \"Rôle modifié\",\n password_change_require: \"Nouveau mot de passe exigé\",\n password_change_withdraw: \"Exigence de mot de passe retirée\",\n mail_verification: \"E-mail de confirmation envoyé\",\n mail_reset: \"E-mail de réinitialisation du mot de passe envoyé\",\n reviewer: \"Périmètre de relecture modifié\",\n invite: \"Invité\",\n invite_resend: \"Invitation renvoyée\",\n invite_revoke: \"Invitation révoquée\",\n transfer: \"Travail transmis\",\n deletion_request: \"Suppression demandée\",\n deletion_cancel: \"Suppression annulée\",\n erase: \"Compte effacé\",\n plan: \"Formule modifiée\",\n },\n // 0.34 (§11.5): whole phrases per noun. The group's own agree with the noun\n // (\"Équipe créée\", Kurvenschmiede's feminine \"équipe\"), a member's with \"compte\",\n // as `actions` do. `budget` is keksdose's; `company` keeps\n // `actions.membership_remove`'s string.\n renamedFromTo: (from, to) => `de ${from} en ${to}`,\n groupActions: {\n group: {\n group_create: \"Groupe créé\",\n group_rename: \"Groupe renommé\",\n group_delete: \"Groupe supprimé\",\n group_deactivate: \"Groupe désactivé\",\n group_reactivate: \"Groupe réactivé\",\n membership_add: \"Ajouté au groupe\",\n membership_role: \"Rôle dans le groupe modifié\",\n membership_remove: \"Retiré du groupe\",\n deleted: \"un groupe supprimé\",\n },\n team: {\n group_create: \"Équipe créée\",\n group_rename: \"Équipe renommée\",\n group_delete: \"Équipe supprimée\",\n group_deactivate: \"Équipe désactivée\",\n group_reactivate: \"Équipe réactivée\",\n membership_add: \"Ajouté à l’équipe\",\n membership_role: \"Rôle dans l’équipe modifié\",\n membership_remove: \"Retiré de l’équipe\",\n deleted: \"une équipe supprimée\",\n },\n company: {\n group_create: \"Entreprise créée\",\n group_rename: \"Entreprise renommée\",\n group_delete: \"Entreprise supprimée\",\n group_deactivate: \"Entreprise désactivée\",\n group_reactivate: \"Entreprise réactivée\",\n membership_add: \"Ajouté à l’entreprise\",\n membership_role: \"Rôle dans l’entreprise modifié\",\n membership_remove: \"Retiré de l’entreprise\",\n deleted: \"une entreprise supprimée\",\n },\n budget: {\n group_create: \"Budget créé\",\n group_rename: \"Budget renommé\",\n group_delete: \"Budget supprimé\",\n group_deactivate: \"Budget désactivé\",\n group_reactivate: \"Budget réactivé\",\n membership_add: \"Ajouté au budget\",\n membership_role: \"Rôle dans le budget modifié\",\n membership_remove: \"Retiré du budget\",\n deleted: \"un budget supprimé\",\n },\n },\n },\n transferOwnership: {\n title: (name) => `Transmettre le travail de ${name}`,\n body: \"Tout ce que possède ce compte passe au compte choisi, en une seule étape.\",\n recipient: \"Le transmettre à\",\n choose: \"Choisissez un compte…\",\n chooseFirst: \"Choisissez qui reçoit le travail\",\n confirm: \"Transmettre\",\n customer: \"client\",\n deactivated: \"désactivé\",\n self: \"le même compte\",\n unavailable: (account, reason) => `${account} (${reason})`,\n noCandidates: \"Aucun autre compte ne peut le recevoir.\",\n },\n invitations: {\n email: \"Adresse e-mail\",\n invalidEmail: \"Saisissez une adresse e-mail complète.\",\n role: \"Rôle\",\n scope: \"Portée\",\n scopeNone: \"Aucune\",\n language: \"Langue de l’invitation\",\n note: \"Note\",\n invite: \"Inviter\",\n listTitle: \"Invitations\",\n empty: \"Personne n’a encore été invité.\",\n loading: \"Chargement…\",\n // Agreeing with \"invitation\" (feminine).\n status: { open: \"Ouverte\", accepted: \"Acceptée\", expired: \"Expirée\", revoked: \"Révoquée\" },\n sent: (date) => `Envoyée le ${date}`,\n // kastlan's \"Valable jusqu’au\".\n expires: (date) => `Valable jusqu’au ${date}`,\n invitedBy: (name) => `par ${name}`,\n resend: (email) => `Envoyer un nouveau lien à ${email}`,\n copyLink: \"Copier le lien d’invitation\",\n revoke: (email) => `Révoquer l’invitation de ${email}`,\n consoleHint:\n \"Ce serveur n’envoie pas d’e-mails — ils sont écrits dans le journal du serveur. Copiez ici chaque lien d’invitation et transmettez-le vous-même\\u00a0: il n’est affiché qu’une seule fois.\",\n linkReady: (email) => `Le lien d’invitation pour ${email}, affiché cette seule fois\\u00a0:`,\n notSent: (email) => `${email} est invité, mais l’e-mail n’a pas pu être envoyé. Renvoyez-le.`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n characterCount: {\n count: (used, max) => `${n(used)} sur ${n(max)} ${plural(max, \"caractère\", \"caractères\")}`,\n remaining: (left) => `${n(left)} ${plural(left, \"caractère restant\", \"caractères restants\")}`,\n limitReached: \"Limite de caractères atteinte\",\n },\n countrySelect: {\n country: \"Pays\",\n search: \"Rechercher un pays\",\n others: \"Autres pays\",\n },\n inlineEdit: {\n edit: (label) => `Modifier ${label}`,\n failed: \"La modification n’a pas pu être enregistrée.\",\n empty: \"Vide\",\n },\n ibanInput: {\n format: \"Un IBAN commence par un code pays de deux lettres et deux chiffres de contrôle.\",\n country: (code) => `«\\u202f${code}\\u202f» n’est pas le code pays d’un IBAN.`,\n length: (actual, expected) =>\n `Un IBAN de ce pays compte ${n(expected)} caractères — celui-ci en compte ${n(actual)}.`,\n checksum: \"Les chiffres de contrôle ne correspondent pas — un caractère est sans doute mal saisi.\",\n qrRequired: \"Ceci est un IBAN ordinaire. Une QR-facture exige le QR-IBAN du compte.\",\n qrNotAllowed:\n \"Ceci est un QR-IBAN, qui ne reçoit que des paiements par QR-facture. Saisissez l’IBAN ordinaire du compte.\",\n },\n phoneInput: {\n countryCode: \"Indicatif du pays\",\n other: \"Autre\",\n },\n signChip: {\n outflow: \"Sortie\",\n inflow: \"Entrée\",\n direction: (current, next) => `Sens\\u00a0: ${current} — passer à ${next}`,\n switchTo: (next) => `Passer à ${next}`,\n },\n columnMapper: {\n paste: \"Coller un tableau\",\n pasteHint:\n \"Copiez les lignes d’un tableur et collez-les ici, ou déposez un fichier CSV ou texte.\",\n chooseFile: \"Choisir un fichier\",\n readError: (name) => `«\\u202f${name}\\u202f» n’a pas pu être lu`,\n headerRow: \"La première ligne contient les noms des colonnes\",\n summary: (columns, rows) =>\n `${n(columns)} ${plural(columns, \"colonne\", \"colonnes\")}, ${n(rows)} ${plural(rows, \"ligne\", \"lignes\")}`,\n // Fragments of the summary line. \"Séparé par…\" would have to agree with a noun the\n // line does not name, so the separator is stated as a value.\n separatorSemicolon: \"séparateur\\u00a0: point-virgule\",\n separatorComma: \"séparateur\\u00a0: virgule\",\n separatorTab: \"séparateur\\u00a0: tabulation\",\n separatorSpace: \"séparateur\\u00a0: espace\",\n // The examples stay as written: they show the convention, not the reader's locale.\n decimalComma: \"virgule décimale (1,5)\",\n decimalPoint: \"point décimal (1.5)\",\n unreadCount: (count) =>\n count < 2\n ? `${n(count)} ligne n’a pas pu être lue`\n : `${n(count)} lignes n’ont pas pu être lues`,\n unreadLine: (line) => `La ligne ${line} n\\u2019a pas pu être lue`,\n unreadMore: (count) => `…et ${n(count)} ${plural(count, \"autre\", \"autres\")}`,\n noRows: \"Aucune ligne de ce texte ne se lit comme une ligne du tableau.\",\n table: \"Colonnes et leurs rôles\",\n columnN: (column) => `Colonne ${column}`,\n roleOf: (column) => `Que contient la colonne «\\u202f${column}\\u202f»\\u202f?`,\n ignore: \"Ignorer\",\n requiredRole: (role) => `${role} (obligatoire)`,\n requiredRoleShort: (role) => `${role} *`,\n previewOf: (shown, total) =>\n shown < 2\n ? `La première ligne sur ${n(total)}`\n : `Les ${n(shown)} premières lignes sur ${n(total)}`,\n // `roles` arrives joined with \"ou\" (\"Débit ou Crédit\").\n oneOf: (roles) => `${roles} (au choix)`,\n missing: (roles) => `Il manque encore\\u00a0: ${roles}.`,\n },\n translationReview: {\n statusMissing: \"Manquant\",\n statusUnreviewed: \"Non relu\",\n statusChanged: \"Modifié depuis la relecture\",\n statusNeedsChange: \"À modifier\",\n statusApproved: \"Approuvé\",\n statusFilter: \"Statut\",\n all: \"Tous\",\n filterCount: (label, count) => `${label} · ${n(count)}`,\n source: \"Textes\",\n allSources: \"Tous les textes\",\n namespace: \"Domaine\",\n allNamespaces: \"Tous les domaines\",\n search: \"Rechercher dans les clés et les textes\",\n placeholdersOnly: (count) => `Seulement les problèmes d’espaces réservés (${n(count)})`,\n placeholderChip: \"Espaces réservés\",\n key: \"Clé\",\n statusColumn: \"Statut\",\n empty: \"Aucun texte ne correspond à ces filtres.\",\n missingText: \"Manquant dans cette langue\",\n progress: (approved, total) => `${n(approved)} sur ${n(total)} ${plural(approved, \"approuvé\", \"approuvés\")}`,\n localeProgress: (approved, total) => `${n(approved)}/${n(total)}`,\n locales: \"Langues\",\n approve: \"Approuver\",\n flag: \"À modifier\",\n suggest: \"Proposer une traduction\",\n reset: \"Marquer comme non relu\",\n cancel: \"Annuler\",\n approveSelected: \"Approuver la sélection\",\n resetSelected: \"Marquer la sélection comme non relue\",\n selectShown: \"Sélectionner tout ce qui est affiché\",\n changedSince: \"Ce texte a été modifié après la relecture. Veuillez le relire.\",\n reviewedWording: \"Formulation lors de la relecture\",\n reviewedReference: \"Référence lors de la relecture\",\n placeholderMismatch: (reference, text) =>\n `Les espaces réservés diffèrent de la référence — référence\\u00a0: ${reference}\\u202f; ce texte\\u00a0: ${text}. L’application y insère des valeurs, ils doivent donc rester exactement tels quels.`,\n lastApproved: (name, date) => `Approuvé par ${name} le ${date}`,\n lastFlagged: (name, date) => `Signalé à modifier par ${name} le ${date}`,\n erasedReviewer: \"un compte supprimé\",\n suggestion: \"Meilleure formulation\",\n translation: \"Traduction\",\n note: \"Remarque (facultatif)\",\n notePlaceholder: \"Ce qui ne va pas, ou ce qu’il faut garder en tête\",\n readOnly: \"Vous pouvez consulter cette langue, mais pas la relire.\",\n scope: (areas) => `Votre relecture se limite à\\u00a0: ${areas}.`,\n exportCorrections: (count) => `Exporter les corrections (${n(count)})`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n approvedToast: (count) => (count < 2 ? \"Texte approuvé\" : `${n(count)} textes approuvés`),\n clearedToast: (count) => (count < 2 ? \"Texte marqué comme non relu\" : `${n(count)} textes marqués comme non relus`),\n groupCount: (unreviewed, total) =>\n `${n(unreviewed)} non ${plural(unreviewed, \"relu\", \"relus\")} / ${n(total)}`,\n approveGroup: (count) => `Approuver les non relus (${n(count)})`,\n confirmGroup: (count, group) =>\n count < 2\n ? `Approuver le texte non relu de «\\u202f${group}\\u202f»\\u202f?`\n : `Approuver les ${n(count)} textes non relus de «\\u202f${group}\\u202f», y compris ceux qui ne sont pas à l’écran\\u202f?`,\n },\n // 0.31.0 — docs/settings-harmonization.md §4.3 and docs/landing-demo-harmonization.md\n // §4–§5: the settings shell, the landing page's generic words and the demo. The help\n // lines name things as `accountSettings`, `sessions` and `dataExport` do, and no\n // sentence about the reader needs a gender (\"informé·e\").\n settings: {\n title: \"Paramètres\",\n search: \"Rechercher dans les paramètres\",\n searchPlaceholder: \"Rechercher dans les paramètres…\",\n results: \"Paramètres correspondants\",\n noMatches: (query) => `Aucun paramètre ne correspond à «\\u202f${query}\\u202f».`,\n // As `commandPalette.clear`.\n clearSearch: \"Effacer la recherche\",\n back: \"Retour aux paramètres\",\n sections: \"Sections des paramètres\",\n matchCount: (count) => `${n(count)} ${plural(count, \"résultat\", \"résultats\")}`,\n groups: {\n appearance: {\n title: \"Apparence\",\n help: \"Langue, thème et apparence de l’application sur cet appareil.\",\n },\n account: {\n title: \"Compte\",\n help: \"Votre profil et votre adresse e-mail.\",\n },\n security: {\n title: \"Sécurité\",\n help: \"Votre connexion, et les appareils où elle est ouverte.\",\n },\n notifications: {\n title: \"Notifications\",\n help: \"Quelles notifications vous recevez, quand et sur quels appareils.\",\n },\n data: {\n title: \"Données\",\n help: \"Exportez ce qui vous appartient, ou supprimez-le avec votre compte.\",\n },\n },\n },\n landing: {\n signIn: \"Se connecter\",\n requestAccess: \"Demander l’accès\",\n getStarted: \"Commencer\",\n tryDemo: \"Essayer la démo\",\n openApp: \"Ouvrir l’application\",\n continueDemo: \"Continuer la démo\",\n // As `legal.notice` (\"Bêta fermée\").\n beta: \"Bêta\",\n // Plain text: a mail's subject and body lines, never HTML. The no-break space\n // before the colon, as everywhere in this catalogue.\n accessSubject: (app) => (app ? `Accès à ${app}` : \"Demande d’accès\"),\n accessName: \"Nom\\u00a0:\",\n accessCompany: \"Entreprise\\u00a0:\",\n accessUse: \"Utilisation prévue\\u00a0:\",\n },\n demo: {\n starting: \"Démarrage de la démo…\",\n rateLimited: (minutes) =>\n minutes\n ? `Trop de démos depuis ce réseau. Réessayez dans ${n(minutes)}\\u00a0min.`\n : \"Trop de démos depuis ce réseau. Réessayez plus tard.\",\n capacity: \"La démo est complète pour le moment. Réessayez plus tard.\",\n unavailable: \"La démo n’est pas disponible pour le moment.\",\n failed: \"La démo n’a pas pu être lancée. Veuillez réessayer.\",\n // As `legal.backHome`.\n backToStart: \"Retour à l’accueil\",\n hoursLeft: (hours, minutes) => `Démo · il reste ${n(hours)}\\u00a0h ${n(minutes)}\\u00a0min`,\n minutesLeft: (minutes) => `Démo · il reste ${n(minutes)}\\u00a0min`,\n badge: \"Démo\",\n readOnly: \"Vous consultez des données d’exemple. Aucune modification n’est possible.\",\n sandbox: \"Ce que vous créez vous-même est supprimé à la fin de la démo.\",\n details: \"Détails de la démo\",\n writeLocked: \"Impossible dans la démo.\",\n endedTitle: \"La démo est terminée\",\n endedReadOnly: \"Les données d’exemple sont réinitialisées régulièrement.\",\n endedSandbox:\n \"Les données d’exemple sont réinitialisées régulièrement\\u202f; ce que vous avez créé dans la démo est supprimé.\",\n restart: \"Lancer une nouvelle démo\",\n },\n // 0.32.0 — docs/billing-harmonization.md §7, §10 and §12.24: \"formule\" is what is\n // bought (Free, Pro), \"abonnement\" the standing arrangement and the settings group;\n // \"résilier\", the word for ending a contract. \"Vous\".\n billing: {\n group: \"Abonnement\",\n plans: \"Formules\",\n interval: \"Période de facturation\",\n // Agreeing with \"période\".\n yearly: \"Annuelle\",\n monthly: \"Mensuelle\",\n // As `currency.currency`.\n currency: \"Devise\",\n perYear: \"par an\",\n perMonth: \"par mois\",\n vatIncluded: \"TVA incluse\",\n free: \"Gratuit\",\n notOffered: \"Non proposée pour cette période de facturation\",\n // As `progressBar.unlimited`.\n unlimited: \"Illimité\",\n limits: \"Limites\",\n features: \"Inclus\",\n current: \"Formule actuelle\",\n choose: (plan) => `Choisir ${plan}`,\n upgrade: (plan) => `Passer à ${plan}`,\n downgrade: (plan) => `Changer pour ${plan}`,\n isCurrent: \"C’est votre formule actuelle.\",\n pickFirst: \"Choisissez d’abord une formule.\",\n // Agreeing with \"abonnement\".\n status: {\n trialing: \"Essai\",\n active: \"Actif\",\n past_due: \"Paiement en retard\",\n canceled: \"Résilié\",\n expired: \"Expiré\",\n comped: \"Offert\",\n },\n trialEnding: (days) =>\n `Votre période d’essai se termine ${inDays(days)}. Vous pourrez ensuite continuer à tout consulter, mais il vous faudra une formule pour apporter des modifications.`,\n grantEnding: (days) =>\n `Votre accès gratuit se termine ${inDays(days)}. Vous pourrez ensuite continuer à tout consulter, mais il vous faudra une formule pour apporter des modifications.`,\n paymentFailed:\n \"Votre dernier paiement n’a pas abouti. Mettez à jour votre moyen de paiement pour conserver votre formule.\",\n planEnded:\n \"Votre formule a pris fin. Vous pouvez encore tout consulter et exporter\\u202f; choisissez une formule pour pouvoir de nouveau apporter des modifications.\",\n // Never why: the owner's payment status is the owner's personal data (§12.6).\n guestReadOnly: (item) =>\n item\n ? `«\\u202f${item}\\u202f» est en lecture seule pour le moment\\u202f; son propriétaire peut lever cette restriction.`\n : \"Ceci est en lecture seule pour le moment\\u202f; son propriétaire peut lever cette restriction.\",\n processing:\n \"Votre paiement est en cours de traitement. Votre formule démarre dès qu’il est confirmé\\u202f; cette page se met à jour d’elle-même.\",\n choosePlan: \"Choisir une formule\",\n updatePayment: \"Mettre à jour le moyen de paiement\",\n // 0.42 (§16.7 A): for an admin who isn't the buyer.\n paymentFailedAskBuyer: (buyer) =>\n buyer\n ? `Le paiement a échoué. ${buyer} peut mettre à jour le moyen de paiement.`\n : \"Le paiement a échoué. L’administrateur qui a souscrit l’abonnement peut mettre à jour le moyen de paiement.\",\n checkAgain: \"Vérifier à nouveau\",\n lockReason: \"Votre formule a pris fin. Choisissez une formule pour pouvoir de nouveau apporter des modifications.\",\n // As `characterCount.limitReached` (\"Limite de caractères atteinte\").\n limitReached: \"Limite de la formule atteinte\",\n limitUpgrade: \"Pour en ajouter davantage, choisissez une formule avec une limite plus élevée.\",\n limitContact: \"Pour en ajouter davantage, demandez-nous une limite plus élevée.\",\n askForMore: \"Demander plus\",\n // Both figures arrive formatted; \"sur\", as `characterCount.count`.\n usage: (used, limit) => `${used} sur ${limit}`,\n contactSubject: (dimension) => `Limite de la formule\\u00a0: ${dimension}`,\n // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12):\n // a key of its own for the space before the colon.\n limitUsageLine: (dimension, used, limit) => `${dimension}\\u00a0: ${used} sur ${limit}`,\n manage: \"Paiement et factures\",\n cancel: \"Résilier l’abonnement\",\n // §14.5: no customer at the provider yet, so no portal to open.\n notAtProvider:\n \"Rien à gérer pour l’instant. Les paiements et les factures apparaîtront ici dès que vous aurez une formule payante.\",\n // §14.4: the pay page's lines, built into its bundle.\n payOpening: \"Ouverture du paiement sécurisé…\",\n payNothing: \"Il n’y a rien à payer ici. Pour choisir une formule, revenez à l’application.\",\n payFailed: \"Le paiement n’a pas pu s’ouvrir. Veuillez revenir en arrière et réessayer dans un instant.\",\n payBack: \"Le paiement a été fermé. Vous pouvez revenir en arrière, ou recharger cette page pour le rouvrir.\",\n payDone: \"Paiement effectué. Vous pouvez fermer cette page.\",\n // 0.39 (§15.2.10): PlanSwitchConfirm.\n switchTitle: \"Changer de formule\",\n switchFromTo: (from, to) => `De ${from} à ${to}`,\n switchChargedNow: \"Débité maintenant\",\n switchCredited: \"Crédité sur vos prochains paiements\",\n switchNextCharge: (date) => `Prochain prélèvement le ${date}`,\n switchConfirm: \"Changer de formule\",\n // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.\n buyerHolds: (buyer) =>\n buyer\n ? `Le moyen de paiement et les factures sont gérés par ${buyer}, qui a souscrit l’abonnement.`\n : \"Le moyen de paiement et les factures sont gérés par l’administrateur qui a souscrit l’abonnement.\",\n cancelConfirmTitle: \"Résilier l’abonnement\",\n cancelConfirmBody: (date) =>\n `Votre abonnement prendra fin le ${date}. D’ici là, tout fonctionne comme avant.`,\n cancelConfirmAction: \"Résilier maintenant\",\n keepSubscription: \"Conserver l’abonnement\",\n portalOpensNewTab: (provider, app) =>\n `Le paiement et les factures s’ouvrent chez ${provider} dans un nouvel onglet\\u202f; ${app ? `${app} reste ouvert ici` : \"cette page reste ouverte\"}.`,\n grantWarningTitle: \"Votre accès gratuit continue\",\n grantWarningBody:\n \"Votre accès gratuit n’a pas de date de fin. Tant qu’il dure, un achat ne change pas votre formule : vous paieriez pour une formule qui ne s’applique pas.\",\n grantWarningAction: \"Acheter quand même\",\n waitingChanges: (count) =>\n `${n(count)} ${plural(count, \"modification en attente\", \"modifications en attente\")} d’une formule`,\n // \"Abandonner\", as `wizard.cancelConfirmLabel`.\n discardWaiting: \"Abandonner les modifications en attente\",\n notConfigured: \"Les paiements ne sont pas encore configurés. Veuillez réessayer plus tard.\",\n disabled: \"Les abonnements ne sont pas disponibles ici.\",\n // §14.2: server-kit 0.7's refusals. \"Paiement et factures\", as `manage`.\n providerUnavailable:\n \"Le prestataire de paiement est injoignable pour le moment. Veuillez réessayer dans un instant.\",\n alreadySubscribed: \"Vous avez déjà un abonnement. Changez de formule ci-dessus.\",\n planNotSold:\n \"Cette formule n’est pas proposée pour cette période de facturation ou cette devise. Veuillez en choisir une autre.\",\n // 0.39 (§15.2.10): the plan switch's refusals.\n notSubscribed: \"Aucun abonnement en cours à modifier. Choisissez une formule pour vous abonner.\",\n planUnchanged: \"C’est déjà votre formule. Choisissez une autre formule ou une autre période de facturation.\",\n },\n // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, \"formule\"\n // as in `billing`. \"Vous\".\n planChange: {\n column: \"Formule\",\n title: \"Changer de formule\",\n confirm: \"Changer de formule\",\n plan: \"Formule\",\n current: (plan) => `Formule actuelle\\u00a0: ${plan}`,\n keepsItems: \"Une formule plus petite bloque seulement les nouvelles créations\\u202f; rien n’est supprimé.\",\n until: \"Gratuit jusqu’au\",\n untilHint: \"Laissez vide pour aucune fin. Une bêta en cours garde sa propre fin.\",\n needsChange: \"Choisissez une autre formule ou une date de fin.\",\n changed: (from, to) => `Formule changée de ${from} à ${to}.`,\n set: (to) => `Formule définie sur ${to}.`,\n keptBeta: \"La bêta garde sa fin\\u202f; seule la formule a changé.\",\n untilDone: (date) => `Gratuit jusqu’au ${date}.`,\n overLimit:\n \"Au-delà de la limite de la nouvelle formule\\u00a0: rien n’est supprimé, les nouveaux éléments sont bloqués.\",\n // Figures formatted; \"sur\", as `billing.usage`. The app's word follows the limit,\n // in its form (0.33.1): \"1 sur 1 budget\", \"1 sur 5 budgets\" — and French reads 0\n // as singular, which the forms' `one` covers.\n usageOf: (used, limit, dimension) => `${used} sur ${limit} ${dimension}`,\n },\n // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in\n // the \"Apparence\" group. The steps agree with \"taille\", the modes with \"contraste\".\n appearance: {\n textSize: \"Taille du texte\",\n textSizeHelp: \"Des lettres plus grandes, et une mise en page qui leur fait de la place.\",\n textSizes: { normal: \"Normale\", large: \"Grande\", xlarge: \"Très grande\" },\n contrast: \"Contraste\",\n contrastHelp:\n \"Le contraste renforcé assombrit les textes discrets et les lignes, et épaissit les contours de focus. «\\u202fSystème\\u202f» suit le réglage de cet appareil.\",\n contrastModes: { system: \"Système\", standard: \"Standard\", more: \"Renforcé\" },\n saveFailed: \"Impossible de l’enregistrer dans votre compte. Le réglage s’applique tout de même sur cet appareil.\",\n },\n // 0.36.0 — docs/settings-harmonization.md §11.3: resetting this device's settings, the\n // last card of \"Apparence\". \"Réglages\", as `contrastHelp` says \"réglage\".\n deviceReset: {\n title: \"Réinitialiser cet appareil\",\n description:\n \"Rétablit les valeurs par défaut de l’apparence de cet appareil et de l’état dans lequel ses tableaux et ses panneaux ont été laissés. Votre compte, vos données et votre connexion ne sont pas touchés.\",\n action: \"Réinitialiser les réglages de cet appareil\",\n confirmTitle: \"Réinitialiser les réglages de cet appareil ?\",\n confirmBody:\n \"Le thème, les couleurs, la taille du texte, le contraste et la langue reprennent ici leurs valeurs par défaut, et les tableaux et les panneaux s’ouvrent comme la première fois. Si votre compte définit une langue, une taille de texte ou un contraste, cet appareil s’y conforme de nouveau. Votre compte et vos autres appareils restent tels quels.\",\n confirmAction: \"Réinitialiser\",\n done: \"Les réglages de cet appareil ont retrouvé leurs valeurs par défaut.\",\n keywords: \"réinitialiser défaut appareil restaurer rétablir apparence tableaux disposition\",\n },\n rowActions: {\n actions: \"Actions\",\n actionsFor: (name) => `Actions pour ${name}`,\n },\n appShellMore: {\n more: \"Plus\",\n moreTitle: \"Autres pages\",\n },\n // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words.\n mailTestCard: {\n title: \"E-mail de test\",\n description: \"Envoie un e-mail à votre propre adresse, par le transport avec lequel cette installation envoie tous ses e-mails.\",\n transport: (backend) => `Transport : ${backend}`,\n action: \"M’envoyer un e-mail de test\",\n sent: (address) => `Envoyé à ${address}. Vérifiez la boîte de réception.`,\n console: \"Le transport console ne fait que journaliser les e-mails ; rien n’a été envoyé.\",\n failed: \"Envoi impossible. Le journal du serveur contient la réponse du fournisseur.\",\n rateLimited,\n keywords: \"e-mail test courriel transport smtp resend console envoyer distribution\",\n },\n adminArea: {\n title: \"Administration\",\n waiting: (count) => `${n(count)} en attente`,\n waitingLabel: (label, count) => `${label}, ${n(count)} en attente`,\n forbiddenTitle: \"Réservé aux administrateurs\",\n forbiddenBody: (appName) =>\n `C’est ici que les administrateurs gèrent ${appName}. Votre compte ne peut pas ouvrir cette page.`,\n forbiddenHome: \"Aller à la page d’accueil\",\n forbiddenReviewer: \"Relire les traductions\",\n sections: {\n overview: { title: \"Vue d’ensemble\", help: \"Ce qui est en attente, en un coup d’œil.\" },\n users: { title: \"Utilisateurs\", help: \"Qui a un compte, et ce que chacun peut faire.\" },\n invitations: { title: \"Invitations\", help: \"Invitez des personnes par e-mail dans leur langue\\u202f; renvoyez ou révoquez les invitations encore ouvertes.\" },\n billing: { title: \"Facturation\", help: \"L’offre, le paiement et les factures.\" },\n activity: { title: \"Activité\", help: \"Ce que les administrateurs ont fait, du plus récent au plus ancien.\" },\n },\n tiles: {\n feedbackWaiting: \"À trier\",\n deletionRequests: \"Demandes de suppression\",\n invitationsPending: \"Invitations en attente\",\n users: \"Utilisateurs\",\n usersNew: (count) => `${n(count)} ${plural(count, \"nouveau\", \"nouveaux\")} en 7 jours`,\n },\n overviewError: \"La vue d’ensemble n’a pas pu être chargée.\",\n retry: \"Réessayer\",\n tools: \"Outils\",\n },\n // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts, keksdose's\n // reviewed sync words where they are not about its budgets; \"formule\" as `billing`.\n topBarParts: {\n tours: {\n menu: \"Visites guidées\",\n newDot: \"Nouvelles visites\",\n thisPage: \"Sur cette page\",\n newTours: \"Nouvelles visites\",\n allTours: \"Toutes les visites…\",\n badgeNew: \"Nouveau\",\n completed: \"Terminée\",\n badgeUpdated: \"Mise à jour\",\n updatedDot: \"Visites mises à jour\",\n newAndUpdated: \"Nouvelles et mises à jour\",\n },\n sync: {\n blocked: (count) =>\n `${n(count)} ${plural(count, \"modification ne peut pas être envoyée\", \"modifications ne peuvent pas être envoyées\")} depuis cet appareil`,\n offline: \"Hors ligne — les modifications sont enregistrées sur cet appareil et seront synchronisées à la reconnexion\",\n refused: \"Le serveur a refusé la dernière synchronisation\",\n syncing: \"Synchronisation…\",\n pending: (count) =>\n `${n(count)} ${plural(count, \"modification\", \"modifications\")} en attente de synchronisation`,\n syncedAt: (time) => `Synchronisé à ${time}`,\n idle: \"À jour\",\n syncHint: \"Touchez pour synchroniser maintenant\",\n offlineHint: \"rien à synchroniser hors ligne\",\n withHint: (state, hint) => `${state} — ${hint}`,\n scoped: (scope, state) => `${scope}\\u00a0: ${state}`,\n offlineShort: \"Hors ligne\",\n syncingShort: \"Synchronisation…\",\n waitingShort: (count) => `${n(count)} en attente`,\n refusedShort: \"Non synchronisé\",\n offlineUnsaved: \"Hors ligne — les modifications ne peuvent pas être enregistrées avant la reconnexion\",\n saving: \"Enregistrement…\",\n },\n dev: {\n roleHeading: \"Dev · rôle\",\n switchPlan: \"Changer de formule\",\n plan: (value) => `Formule\\u00a0: ${value}`,\n planHeading: \"Dev · formule\",\n backTo: (role) => `Revenir à ${role}`,\n billingOff: \"La facturation est désactivée en local\\u00a0: les formules ne changent rien\",\n },\n },\n // 0.45.0 — docs/local-first-harmonization.md §1.6 (`@eifi1/ui-kit/offline`): keksdose's\n // reviewed words (nav.logout_queued_*, pwa.*) where it has the language.\n signOutPending: {\n title: \"Certaines modifications ne sont pas encore enregistrées sur le serveur\",\n lost: (count) =>\n count < 2\n ? `${n(count)} modification attend encore la synchronisation. La déconnexion efface la copie de cet appareil, et c’est la seule.`\n : `${n(count)} modifications attendent encore la synchronisation. La déconnexion efface la copie de cet appareil, et c’est la seule.`,\n kept: (count) =>\n count < 2\n ? `${n(count)} modification attend encore la synchronisation. Elle reste sur cet appareil pour vous et sera synchronisée à votre prochaine connexion ici.`\n : `${n(count)} modifications attendent encore la synchronisation. Elles restent sur cet appareil pour vous et seront synchronisées à votre prochaine connexion ici.`,\n syncNow: \"Synchroniser maintenant\",\n signOutAnyway: \"Se déconnecter quand même\",\n discardWaiting: \"Abandonner les modifications en attente\",\n cancel: \"Annuler\",\n },\n pwaUpdate: {\n updateAvailable: \"Une nouvelle version est disponible.\",\n reload: \"Recharger\",\n },\n sharedComputer: {\n label: \"C’est un ordinateur partagé\",\n hint: \"Aucune copie de vos données ne reste sur cet appareil. Les pages ne s’ouvrent alors qu’avec une connexion.\",\n },\n };\n}\n\nexport const UI_KIT_LABELS_FR: UiKitLabels = uiKitLabelsFr();\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/i18n/locales/fr.ts"],"sourcesContent":["import { formatFileSize } from \"../kit-labels\";\nimport type { UiKitLabels } from \"../kit-labels\";\n\n/**\n * The kit's words in French: every namespace of {@link UiKitLabels}, for\n * `<UiKitProvider labels={UI_KIT_LABELS_FR}>`.\n *\n * Self-contained on purpose — nothing but the kit's own `formatFileSize` — so it works\n * as a starting point to copy and adjust. Counts and sizes are formatted with\n * `fr-FR` digits; {@link uiKitLabelsFr} takes another number locale\n * (e.g. `\"de-CH\"` for 1’234) without touching the words.\n */\nexport function uiKitLabelsFr(numberLocale = \"fr-FR\"): UiKitLabels {\n const num = new Intl.NumberFormat(numberLocale);\n const n = (value: number) => num.format(value);\n const plural = (count: number, one: string, many: string) => (count < 2 ? one : many);\n // 0.30.0 — a throttled request (HTTP 429), as `englishRateLimited` in\n // src/auth/auth-errors.ts: no wait → \"un instant\", under a minute → seconds, else\n // minutes rounded up. kastlan's reviewed \"auth.throttled\" is the sentence without one.\n const wait = (seconds: number) =>\n seconds < 60 ? `${n(Math.ceil(seconds))}\\u00a0s` : `${n(Math.ceil(seconds / 60))}\\u00a0min`;\n const rateLimited = (seconds?: number) =>\n !seconds || seconds <= 0\n ? \"Trop de tentatives. Veuillez patienter un instant, puis réessayer.\"\n : `Trop de tentatives. Réessayez dans ${wait(seconds)}.`;\n // 0.32.0 — when a trial or a grant ends, as `inDays` in src/billing/billing-labels.ts:\n // 0 (or less) is today, 1 tomorrow.\n const inDays = (days: number) =>\n days <= 0 ? \"aujourd’hui\" : days === 1 ? \"demain\" : `dans ${n(days)} ${plural(days, \"jour\", \"jours\")}`;\n\n return {\n feedbackAttachment: {\n attachmentAdd: \"Ajouter une pièce jointe\",\n attachmentCapture: \"Capturer l’écran\",\n attachmentPaste:\n \"…ou collez une capture d’écran directement depuis le presse-papiers, pour ne montrer qu’un détail plutôt que toute la page.\",\n attachmentRemove: \"Retirer la pièce jointe\",\n attachmentList: \"Pièces jointes\",\n attachmentScreenshot: \"Capture d’écran\",\n attachmentRemoveFile: (name) => `Retirer ${name}`,\n attachmentLimit: (max) =>\n max === 1\n ? `${n(max)} pièce jointe au maximum — retirez-la pour en ajouter une autre.`\n : `${n(max)} pièces jointes au maximum — retirez-en une pour en ajouter une autre.`,\n attachmentUploading: \"Envoi en cours…\",\n attachmentUploadFailed: (name) => `«\\u202f${name}\\u202f» n’a pas pu être envoyé`,\n },\n feedbackDialog: {\n title: \"Envoyer un retour\",\n category: \"Catégorie\",\n subject: \"Objet\",\n body: \"Que s’est-il passé\\u202f?\",\n bodyOptional: \"Que s’est-il passé\\u202f? (facultatif)\",\n attachment: \"Pièce jointe\",\n submitHint: (apple) => (apple ? \"⌘ Entrée pour envoyer\" : \"Ctrl+Entrée pour envoyer\"),\n cancel: \"Annuler\",\n save: \"Envoyer\",\n publicNotice: \"Les autres personnes verront le titre et le texte (jamais vos captures d’écran ni vos fichiers).\",\n },\n feedbackThread: {\n thread: \"Commentaires\",\n empty: \"Aucun commentaire pour l’instant\",\n loading: \"Chargement des commentaires…\",\n you: \"Vous\",\n staff: \"Équipe\",\n attachments: \"Pièces jointes\",\n },\n feedbackComposer: {\n field: \"Écrire un commentaire\",\n placeholder: \"Écrire un commentaire…\",\n send: \"Envoyer\",\n sendHint: (modifier) => `${modifier} + Entrée pour envoyer`,\n sendHintEnter: \"Entrée pour envoyer, Maj + Entrée pour aller à la ligne\",\n },\n // 0.27.0. \"Retour\" for feedback, as `feedbackDialog`; \"reprise\" for rework.\n feedbackStatus: {\n OPEN: \"Ouvert\",\n READY: \"Prêt à implémenter\",\n REWORK: \"Reprise demandée\",\n IN_PROGRESS: \"En cours\",\n IN_EVALUATION: \"En évaluation\",\n NEEDS_LIVE_TEST: \"À tester en production\",\n POSTPONED: \"Reporté\",\n DONE: \"Terminé\",\n WONT_DO: \"Ne sera pas traité\",\n },\n feedbackCategory: {\n CRASH: \"Plantage\",\n BUG: \"Bug\",\n IDEA: \"Idée\",\n QUESTION: \"Question\",\n OTHER: \"Autre\",\n },\n feedbackToast: {\n submitted: \"Merci pour votre retour\\u202f!\",\n submitFailed: \"Impossible d’envoyer le retour\",\n attachmentUnsupported: \"Seuls les images, les PDF et les fichiers texte sont acceptés\",\n attachmentTooLarge: \"Le fichier dépasse 10\\u00a0Mo\",\n attachmentTooMany: (count) =>\n `Il n’y a de place que pour ${n(count)} ${plural(count, \"pièce jointe\", \"pièces jointes\")} — les autres ont été écartées.`,\n captureFailed: \"Impossible de capturer l’écran\",\n updateFailed: \"La modification n’a pas pu être enregistrée.\",\n statusChanged: (status, title) => `Passé à «\\u202f${status}\\u202f»\\u00a0: ${title}`,\n statusUndo: \"Annuler\",\n statusRestored: (status, title) => `Revenu à «\\u202f${status}\\u202f»\\u00a0: ${title}`,\n commentFailed: \"Le commentaire n’a pas pu être publié.\",\n voteFailed: \"Votre vote n’a pas pu être enregistré.\",\n replyFailed: \"La réponse n’a pas pu être envoyée.\",\n },\n feedbackMenu: {\n trigger: \"Envoyer un retour\",\n myFeedback: \"Mes retours\",\n discussion: \"Discussion des retours\",\n inbox: \"Retours reçus\",\n },\n // 0.38.0 — docs/feedback-harmonization.md §9: the public pages and the two feedback\n // notification types. \"Retour\" for a report, as `feedbackMenu`.\n feedbackPublic: {\n title: \"Discussion des retours\",\n sort: \"Trier\",\n sortNewest: \"Plus récents\",\n sortVotes: \"Plus demandés\",\n sortUpdated: \"Mis à jour récemment\",\n search: \"Rechercher dans les titres\",\n columnVotes: \"Votes\",\n total: (count) => (count === 1 ? \"1 retour\" : `${n(count)} retours`),\n comments: (count) => (count === 1 ? \"1 commentaire\" : `${n(count)} commentaires`),\n votes: (count) => (count === 1 ? \"1 vote\" : `${n(count)} votes`),\n anonymous: \"Une personne\",\n filedBy: (name) => `De ${name}`,\n body: \"Description\",\n conversation: \"Réponses et commentaires\",\n loading: \"Chargement…\",\n empty: \"Aucun retour pour l’instant\",\n visibleToOthers: \"Visible par les autres\",\n visibleHint: \"Les autres personnes voient le titre et le texte, jamais vos captures d’écran ni vos fichiers.\",\n visibleLocked: \"Seulement tant que le retour est encore ouvert.\",\n page: (page) => `Page ${n(page)}`,\n },\n feedbackNotificationTypes: {\n answered: \"Réponses à vos retours\",\n answeredDescription: \"Quand un retour que vous avez écrit ou commenté reçoit une réponse.\",\n comment: \"Commentaires sur les retours que vous suivez\",\n commentDescription: \"Quand quelqu’un commente un retour que vous avez écrit ou commenté.\",\n received: \"Nouveaux retours et reprises\",\n receivedDescription: \"Quand quelqu’un dépose un retour ou en renvoie un.\",\n adminGroup: \"Admin\",\n },\n feedbackContext: {\n user: \"Utilisateur\",\n attachUrl: \"Joindre l’URL de la page actuelle\",\n },\n feedbackPage: {\n title: \"Retours reçus\",\n myTitle: \"Mes retours\",\n columnId: \"#\",\n columnDate: \"Date\",\n columnCategory: \"Catégorie\",\n columnSubject: \"Objet\",\n columnUser: \"Utilisateur\",\n columnEmail: \"E-mail\",\n columnUrl: \"URL\",\n columnStatus: \"Statut\",\n columnResolved: \"Résolu le\",\n openPage: \"Ouvrir la page\",\n empty: \"Aucun\",\n deletedUser: \"<utilisateur supprimé>\",\n // An id, not a count: printed as it is, like the \"#\" column.\n userFallback: (id) => `utilisateur #${id}`,\n environment: (environment) => String(environment ?? \"\").toUpperCase(),\n reworkChip: (count) => (count === 1 ? \"Reprise\" : `Reprise ×${n(count)}`),\n awaitingFilter: \"Seulement ce qui vous attend\",\n phoneActions: \"Actions sur les retours\",\n },\n feedbackDetail: {\n subject: \"Objet\",\n body: \"Description\",\n edit: \"Modifier\",\n editDescription: \"Modifier la description\",\n save: \"Enregistrer\",\n cancel: \"Annuler\",\n url: \"URL\",\n copyUrl: \"Copier l’URL\",\n attachment: \"Pièce jointe\",\n download: (name) => `Télécharger ${name}`,\n downloadFailed: \"La pièce jointe n’a pas pu être téléchargée.\",\n outcome: \"Résultat\",\n replies: \"Réponses\",\n resolvedAt: (date) => `Résolu le ${date}`,\n outcomeAdd: \"Ajouter un résultat\",\n outcomeUpdate: \"Mettre à jour\",\n outcomePlaceholder: \"Ce qui a été fait ou décidé, ou pourquoi ce point ne sera pas traité.\",\n rework: \"Reprise\",\n openPage: \"Ouvrir la page\",\n reworkTitle: \"Renvoyer pour reprise\",\n reworkSend: \"Demander la reprise\",\n reworkPlaceholder:\n \"Que faut-il encore affiner\\u202f? Nouvelles contraintes ou changement de cap éventuels.\",\n reworkUploadFailed: \"Le fichier n’a pas pu être envoyé. La demande de reprise n’a pas été transmise.\",\n status: \"Statut\",\n note: \"Note\",\n },\n // 0.38.0 — docs/feedback-harmonization.md §9.15: the vote, the comment thread, the replies.\n feedbackVote: {\n vote: \"Moi aussi\",\n own: \"Votre retour\",\n },\n feedbackComments: {\n comments: \"Commentaires\",\n empty: \"Pas encore de commentaire\",\n hidden: \"Masqué par un administrateur\",\n hide: \"Masquer\",\n unhide: \"Afficher\",\n delete: \"Supprimer\",\n deleteTitle: \"Supprimer ce commentaire\\u202f?\",\n deleteBody: \"Il sera retiré pour tout le monde. Cette action est irréversible.\",\n field: \"Écrire un commentaire\",\n placeholder: \"Écrire un commentaire…\",\n send: \"Commenter\",\n },\n feedbackReplies: {\n replies: \"Réponses\",\n empty: \"Pas encore de réponse\",\n admin: \"Admin\",\n statusChanged: \"Statut changé en\",\n field: \"Écrire une réponse\",\n placeholder: \"Écrire une réponse…\",\n reply: \"Répondre\",\n status: \"Statut avec la réponse\",\n noChange: \"Aucun changement\",\n nudge: \"La personne qui l’a signalé n’a pas été prévenue. Ajoutez une réponse.\",\n },\n accountSettings: {\n profile: {\n title: \"Profil\",\n email: \"E-mail\",\n role: \"Rôle\",\n memberSince: \"Membre depuis\",\n displayName: \"Nom affiché\",\n save: \"Enregistrer\",\n firstName: \"Prénom\",\n lastName: \"Nom\",\n nameRequired: \"Saisissez un prénom et un nom.\",\n },\n password: {\n title: \"Changer le mot de passe\",\n current: \"Mot de passe actuel\",\n next: \"Nouveau mot de passe\",\n confirm: \"Confirmer le nouveau mot de passe\",\n submit: \"Changer le mot de passe\",\n tooShort: \"Le nouveau mot de passe est trop court.\",\n mismatch: \"Les mots de passe ne correspondent pas.\",\n wrongPassword: \"Le mot de passe est incorrect.\",\n },\n twoFactor: {\n status: \"Authentification à deux facteurs\",\n enabledText: \"Activée\",\n disabledText: \"Désactivée\",\n enable: \"Configurer l’authentification à deux facteurs\",\n scanHint:\n \"Scannez ce code avec votre application d’authentification, puis saisissez le code affiché.\",\n codeLabel: \"Code de vérification\",\n verify: \"Vérifier et activer\",\n disableSection: \"Désactiver l’authentification à deux facteurs\",\n password: \"Mot de passe actuel\",\n disable: \"Désactiver\",\n qrAlt: \"Code QR pour votre application d’authentification\",\n secretHint: \"Impossible de le scanner\\u202f? Saisissez plutôt cette clé dans l’application\\u00a0:\",\n copySecret: \"Copier la clé\",\n // 0.31.0: the card's title; the state (\"Activée\") stands beside it.\n title: \"Authentification à deux facteurs\",\n },\n passkeys: {\n title: \"Clés d’accès\",\n description:\n \"Connectez-vous avec votre empreinte, votre visage ou le code PIN de l’appareil plutôt qu’avec un mot de passe.\",\n descriptionAlongside:\n \"Connectez-vous avec votre empreinte, votre visage ou le code PIN de l’appareil. Votre mot de passe reste valable.\",\n empty: \"Aucune clé d’accès pour l’instant\",\n loading: \"Chargement des clés d’accès…\",\n list: \"Vos clés d’accès\",\n nameLabel: \"Nom (facultatif)\",\n namePlaceholder: \"p. ex. Portable, Téléphone\",\n add: \"Ajouter une clé d’accès\",\n adding: \"En attente de l’appareil…\",\n rename: \"Renommer\",\n renameItem: (name) => `Renommer ${name}`,\n renameField: (name) => `Nouveau nom pour ${name}`,\n save: \"Enregistrer\",\n cancel: \"Annuler\",\n delete: \"Supprimer\",\n deleteItem: (name) => `Supprimer ${name}`,\n deleteConfirm: (name) =>\n `Supprimer «\\u202f${name}\\u202f»\\u202f? Elle ne permettra plus de se connecter.`,\n confirmDelete: \"Supprimer la clé d’accès\",\n created: (date) => `Ajoutée le ${date}`,\n lastUsed: (date) => `Dernière utilisation le ${date}`,\n neverUsed: \"Jamais utilisée\",\n },\n },\n measuredGrid: {\n view: \"Vue du tableau\",\n cellsView: \"Cellules\",\n textView: \"Texte\",\n addRow: \"Ajouter une ligne\",\n removeRow: (row) => `Supprimer la ligne ${row}`,\n clear: \"Vider le tableau\",\n pasteHint: \"Collez un bloc copié d\\u2019un tableur dans n\\u2019importe quelle cellule\",\n cell: (column, row) => `${column}, ligne ${row}`,\n rowNumber: \"Ligne\",\n rowActions: \"Actions de ligne\",\n keyboardHint:\n \"Les flèches passent d\\u2019une cellule à l\\u2019autre. Tapez pour remplacer une cellule, F2 pour la modifier, Échap pour annuler la modification. Entrée descend et ajoute une ligne à la fin.\",\n lineError: (line) => `La ligne ${line} n\\u2019a pas pu être lue`,\n points: (count) => (count < 2 ? `${n(count)} point` : `${n(count)} points`),\n problems: (count) =>\n count < 2\n ? `${n(count)} cellule n\\u2019est pas un nombre`\n : `${n(count)} cellules ne sont pas des nombres`,\n },\n pageContents: { title: \"Sur cette page\" },\n common: {\n dismiss: \"Fermer\",\n close: \"Fermer\",\n clear: \"Effacer\",\n search: \"Rechercher\",\n done: \"Terminé\",\n cancel: \"Annuler\",\n save: \"Enregistrer\",\n back: \"Retour\",\n next: \"Suivant\",\n remove: \"Supprimer\",\n loading: \"Chargement…\",\n noResults: \"Aucun résultat\",\n // No-break space before the colon, per French typography.\n fieldValue: (field, value) => `${field}\\u00a0: ${value}`,\n opensInNewTab: \"s’ouvre dans un nouvel onglet\",\n aboutField: (field) => `À propos de «\\u202f${field}\\u202f»`,\n help: \"Aide\",\n },\n dataTable: {\n columns: \"Colonnes\",\n selectAllRows: \"Sélectionner toutes les lignes\",\n sortHint: \"Cliquer pour trier · Maj+clic pour ajouter un tri\",\n filter: \"Filtrer\",\n close: \"Fermer\",\n selectRow: \"Sélectionner la ligne\",\n selectRows: \"Sélectionner des lignes\",\n cancelSelection: \"Annuler\",\n rowDetails: \"Détails\",\n autoSize: \"Ajuster la largeur des colonnes\",\n loading: \"Chargement…\",\n filters: \"Filtres\",\n clearAll: \"Tout effacer\",\n done: \"Terminé\",\n pageSize: \"Lignes par page\",\n pageSizeAll: \"Toutes\",\n prevPage: \"Page précédente\",\n nextPage: \"Page suivante\",\n clearFilter: \"Effacer le filtre\",\n filterPlaceholder: \"Filtrer…\",\n selectFilter: \"Sélectionner\",\n selectAll: \"Tout\",\n selectNone: \"Aucun\",\n dateFrom: \"Du\",\n dateTo: \"Au\",\n numberMin: \"Min.\",\n numberMax: \"Max.\",\n numberAbs: \"Valeur absolue\",\n presets: {\n today: \"Aujourd’hui\",\n yesterday: \"Hier\",\n this_week: \"Cette semaine\",\n last_week: \"Semaine dernière\",\n last_7_days: \"7 derniers jours\",\n last_30_days: \"30 derniers jours\",\n this_month: \"Ce mois-ci\",\n last_month: \"Mois dernier\",\n last_3_months: \"3 derniers mois\",\n ytd: \"Depuis le début de l’année\",\n last_year: \"Année dernière\",\n },\n table: \"Tableau de données\",\n filterResults: (shown, total) =>\n `${n(shown)} ${plural(shown, \"ligne\", \"lignes\")} sur ${n(total)}`,\n sortedAscending: (column) => `Trié par ${column}, ordre croissant`,\n sortedDescending: (column) => `Trié par ${column}, ordre décroissant`,\n sortCleared: (column) => `Tri retiré sur ${column}`,\n pageChanged: (page, totalPages) => `Page ${n(page)} sur ${n(totalPages)}`,\n pageRange: (from, to, total) => `${n(from)}–${n(to)} / ${n(total)}`,\n rowCount: (total) => n(total),\n columnsCount: (visible, total) => `Colonnes (${n(visible)}/${n(total)})`,\n filterColumn: (column, active) => (active ? `Filtrer ${column} (actif)` : `Filtrer ${column}`),\n empty: \"Aucune entrée\",\n actions: \"Actions\",\n edit: \"Modifier\",\n delete: \"Supprimer\",\n booleanTrue: \"Oui\",\n booleanFalse: \"Non\",\n booleanUnset: \"Non défini\",\n sortBy: \"Trier par\",\n sortDefault: \"Ordre par défaut\",\n sortAscending: \"Croissant\",\n sortDescending: \"Décroissant\",\n },\n miniCalendar: {\n previousMonth: \"Mois précédent\",\n nextMonth: \"Mois suivant\",\n // Already formatted in the provider's locale (\"lundi 14 septembre 2026\").\n day: (date) => date,\n chooseStart: \"Choisissez une date de début\",\n chooseEnd: \"Choisissez une date de fin\",\n // \"Date\" is feminine and the formatted day is not a noun French can agree with,\n // so the date is set after a label rather than made the subject.\n startSelected: (date) => `Date de début\\u00a0: ${date}. Choisissez une date de fin.`,\n rangeSelected: (from, to) =>\n `Période du ${from} au ${to} sélectionnée. Choisissez une date de début pour recommencer.`,\n },\n calendarHeatmap: {\n grid: \"Valeurs quotidiennes\",\n day: (date, value) => `${date} : ${value}`,\n less: \"Moins\",\n more: \"Plus\",\n truncated: (count) =>\n `Affichage des jours les plus récents ; ${n(count)} ${count === 1 ? \"jour antérieur n’est pas affiché\" : \"jours antérieurs ne sont pas affichés\"}.`,\n },\n datePicker: {\n apply: \"Appliquer\",\n cancel: \"Annuler\",\n presets: \"Plages rapides\",\n panel: \"Choisir une date\",\n rangePanel: \"Choisir une période\",\n clear: \"Effacer\",\n previousDay: \"Jour précédent\",\n nextDay: \"Jour suivant\",\n today: \"Aujourd’hui\",\n },\n monthPicker: {\n previousYear: \"Année précédente\",\n nextYear: \"Année suivante\",\n panel: \"Choisir un mois\",\n month: (monthYear) => monthYear,\n previousMonth: \"Mois précédent\",\n nextMonth: \"Mois suivant\",\n today: \"Aujourd’hui\",\n yearPanel: \"Choisir une année\",\n earlierYears: \"Années précédentes\",\n laterYears: \"Années suivantes\",\n thisYear: \"Cette année\",\n },\n popover: {\n panel: \"Fenêtre contextuelle\",\n },\n combobox: {\n search: \"Rechercher\",\n noResults: \"Aucun résultat\",\n clear: \"Effacer\",\n loading: \"Chargement…\",\n create: (query) => `Créer «\\u202f${query}\\u202f»`,\n selectedCount: (count) => `${n(count)} ${plural(count, \"sélectionné\", \"sélectionnés\")}`,\n loadError: \"Impossible de charger les résultats\",\n resultCount: (count) => `${n(count)} ${plural(count, \"résultat\", \"résultats\")}`,\n minChars: (count) =>\n `Saisissez au moins ${n(count)} ${plural(count, \"caractère\", \"caractères\")}`,\n },\n multiSelect: {\n search: \"Rechercher\",\n selectAll: \"Tout sélectionner\",\n clear: \"Effacer\",\n all: \"Tous\",\n // The bare count, as in English: the trigger has always shown just the number.\n selectedCount: (count) => n(count),\n },\n calculator: {\n open: \"Ouvrir la calculatrice\",\n panel: \"Calculatrice\",\n calculation: \"Calcul\",\n backspace: \"Retour arrière\",\n clear: \"Effacer\",\n equals: \"Égal\",\n done: \"Terminé\",\n plus: \"Plus\",\n minus: \"Moins\",\n times: \"Multiplié par\",\n divide: \"Divisé par\",\n decimal: \"Séparateur décimal\",\n },\n currency: {\n currency: \"Devise\",\n search: \"Rechercher une devise\",\n },\n chipInput: {\n // The quoted value is a citation; the participle agrees with the implied\n // \"élément\" whatever the chip says.\n added: (value) => `«\\u202f${value}\\u202f» ajouté`,\n removed: (value) => `«\\u202f${value}\\u202f» supprimé`,\n remove: \"Supprimer\",\n atLimit: (max) => `Limite de ${n(max)} ${plural(max, \"élément\", \"éléments\")} atteinte`,\n duplicate: (value) => `«\\u202f${value}\\u202f» figure déjà dans la liste`,\n },\n swatchPicker: {\n none: \"Aucune couleur\",\n mixed: \"Mixte\\u00a0: les éléments sélectionnés ont des couleurs différentes\",\n },\n iconPicker: {\n none: \"Aucune icône\",\n mixed: \"Mixte\\u00a0: les éléments sélectionnés ont des icônes différentes\",\n search: \"Rechercher des icônes\",\n noResults: \"Aucune icône ne correspond\",\n resultCount: (count) => `${n(count)} ${plural(count, \"icône\", \"icônes\")}`,\n },\n fieldSync: {\n synced: \"Enregistré\",\n edited: \"Modifications non enregistrées\",\n pending: \"Enregistrement…\",\n error: \"Échec de l’enregistrement\",\n retry: \"Réessayer\",\n },\n passwordReveal: {\n show: \"Afficher le mot de passe\",\n hide: \"Masquer le mot de passe\",\n },\n dangerConfirm: {\n arm: \"Supprimer…\",\n confirm: \"Supprimer\",\n cancel: \"Annuler\",\n prompt: \"Cette action est irréversible.\",\n password: \"Mot de passe\",\n phrase: (phrase) => `Saisissez «\\u202f${phrase}\\u202f» pour confirmer`,\n acknowledge: \"J’ai lu ce que fait cette action et je souhaite continuer.\",\n needsPhrase: (phrase) => `Saisissez «\\u202f${phrase}\\u202f» pour confirmer`,\n needsAcknowledge: \"Cochez la case pour confirmer\",\n needsPassword: \"Saisissez votre mot de passe pour confirmer\",\n },\n tabs: {\n add: \"Ajouter un onglet\",\n remove: (tab) => `Supprimer ${tab}`,\n more: \"Autres onglets\",\n backToFirst: \"Retour au premier onglet\",\n },\n appShell: {\n collapse: \"Réduire la barre latérale\",\n expand: \"Développer la barre latérale\",\n toggleGroup: (groupLabel) => `${groupLabel}\\u00a0: pages`,\n },\n topBar: {\n theme: \"Changer de thème\",\n palette: \"Préréglage d’apparence\",\n language: \"Langue\",\n switchRole: \"Changer de rôle\",\n role: (value) => `Rôle\\u00a0: ${value}`,\n },\n pickerSheet: {\n close: \"Fermer\",\n done: \"Terminé\",\n },\n dialogFrame: {\n close: \"Fermer\",\n },\n bulkActionBar: {\n selected: (count) => `${n(count)} ${count === 1 ? \"sélectionné\" : \"sélectionnés\"}`,\n clear: \"Effacer la sélection\",\n cleared: \"Sélection effacée\",\n },\n swipeableRow: {\n actions: \"Actions de la ligne\",\n },\n file: {\n // The kit's own `Intl` unit formatting, pinned to this locale (\"3,4 Mo\").\n size: (bytes) => formatFileSize(bytes, numberLocale),\n },\n filePicker: {\n dropzone: \"Envoi de fichier\",\n browse: \"Parcourir\",\n empty: \"Déposez un fichier ici\",\n emptyMultiple: \"Déposez des fichiers ici\",\n hint: (accept) => (accept ? `Acceptés\\u00a0: ${accept}` : \"Tout type de fichier\"),\n busy: \"Envoi en cours…\",\n rejectedPick: (count) =>\n count < 2\n ? \"Le fichier n\\u2019a pas été ajouté\"\n : `Aucun des ${n(count)} fichiers n\\u2019a été ajouté`,\n rejectedType: (name) => `Le type du fichier «\\u202f${name}\\u202f» n’est pas pris en charge`,\n rejectedTypeOnly: (accept) => `Uniquement des fichiers ${accept}`,\n rejectedSize: (name, maxSize) => `«\\u202f${name}\\u202f» dépasse ${maxSize}`,\n rejectedCount: (name, maxFiles) =>\n `«\\u202f${name}\\u202f» n’a pas été ajouté\\u00a0: ${n(maxFiles)} ${plural(maxFiles, \"fichier\", \"fichiers\")} au maximum`,\n rejectedInvalid: (name) => `«\\u202f${name}\\u202f» ne peut pas être utilisé ici`,\n rejectedMany: (count) =>\n count < 2\n ? `${n(count)} fichier n’a pas été ajouté`\n : `${n(count)} fichiers n’ont pas été ajoutés`,\n // The name branch is for exactly one file, as in English; 0 falls to the count.\n selected: (count, firstName) =>\n count === 1\n ? `«\\u202f${firstName}\\u202f» sélectionné`\n : `${n(count)} ${plural(count, \"fichier sélectionné\", \"fichiers sélectionnés\")}`,\n remove: (name) => `Supprimer «\\u202f${name}\\u202f»`,\n clearAll: \"Supprimer tous les fichiers\",\n removed: (name) => `«\\u202f${name}\\u202f» supprimé`,\n cleared: \"Tous les fichiers ont été supprimés\",\n },\n wizard: {\n done: \"Terminé\",\n cancel: \"Annuler\",\n back: \"Retour\",\n next: \"Suivant\",\n skip: \"Passer\",\n finish: \"Terminer\",\n submitting: \"Création…\",\n steps: \"Étapes\",\n step: (current, total) => `Étape ${n(current)} sur ${n(total)}`,\n cancelTitle: \"Abandonner ce formulaire\\u202f?\",\n confirmCancel: \"Vos saisies seront perdues.\",\n cancelConfirmLabel: \"Abandonner\",\n cancelDismissLabel: \"Continuer la saisie\",\n reviewTitle: \"Vérification\",\n edit: \"Modifier\",\n missingRequired: \"Veuillez remplir tous les champs obligatoires.\",\n genericError: \"Une erreur est survenue\",\n },\n tour: {\n next: \"Suivant\",\n back: \"Retour\",\n skip: \"Passer\",\n done: \"Terminé\",\n awaitClickHint: \"Cliquez sur l’élément mis en évidence pour continuer\",\n awaitInputHint: \"Saisissez une valeur dans le champ mis en évidence pour continuer\", // 0.46: TourStep.awaitInput (keksdose live #436).\n step: (current, total) => `${n(current)} / ${n(total)}`,\n },\n // 0.43.0 — docs/tours-harmonization.md §3, §8: the tours page. keksdose's reviewed words.\n tourCatalogue: {\n searchLabel: \"Rechercher une visite\",\n searchPlaceholder: \"Rechercher une visite…\",\n groupLabel: \"Thème\",\n groupAll: (count) => `Tous les thèmes (${n(count)})`,\n groupOption: (group, count) => `${group} (${n(count)})`,\n stateLabel: \"Filtrer les visites\",\n stateAll: (count) => `Toutes (${n(count)})`,\n stateTodo: (count) => `Non suivies (${n(count)})`,\n stateDone: (count) => `Terminées (${n(count)})`,\n showing: (shown, total) => `${n(shown)} visites sur ${n(total)}`,\n noMatches: \"Aucune visite ne correspond\",\n noMatchesHint: \"Essayez un autre mot, ou effacez le filtre.\",\n clearFilters: \"Effacer les filtres\",\n badgeNew: \"Nouveau\",\n badgeUpdated: \"Mise à jour\",\n resetOn: (date, reason) => (reason ? `Réinitialisée le ${date}\\u202f: ${reason}` : `Réinitialisée le ${date}`),\n points: (count) => `+${n(count)} pts`,\n steps: (count) => (count === 1 ? `${n(count)} étape` : `${n(count)} étapes`),\n duration: (minutes) => `Environ ${n(minutes)} min`,\n completedOn: (date) => `Terminée le ${date}`,\n completed: \"Terminée\",\n notCompleted: \"Non terminée\",\n markUndone: \"Marquer comme non terminée\",\n start: \"Démarrer\",\n replay: \"Rejouer\",\n },\n commandPalette: {\n clear: \"Effacer la recherche\",\n submit: \"Rechercher\",\n close: \"Fermer\",\n placeholder: \"Rechercher…\",\n empty: \"Aucun résultat\",\n loading: \"Recherche…\",\n dialog: \"Recherche\",\n error: \"La recherche a échoué. Réessayez.\",\n },\n globalSearch: {\n trigger: \"Rechercher\",\n placeholder: \"Rechercher ou aller à…\",\n shortcut: (keys) => `Rechercher (${keys})`,\n suggestions: \"Essayez\",\n results: \"Résultats\",\n },\n sparkline: {\n // \"En hausse de 12 à 40\" would read as \"up BY 12\", hence the colon.\n rising: (first, last) => `En hausse\\u00a0: de ${first} à ${last}`,\n falling: (first, last) => `En baisse\\u00a0: de ${first} à ${last}`,\n flat: (value) => `Stable à ${value}`,\n single: (value) => `Une seule valeur\\u00a0: ${value}`,\n noData: \"Aucune donnée\",\n named: (name, summary) => `${name}\\u00a0: ${summary}`,\n },\n statTile: {\n increase: (amount) => `En hausse de ${amount}`,\n decrease: (amount) => `En baisse de ${amount}`,\n unchanged: \"Sans changement\",\n better: (change) => `${change} (favorable)`,\n worse: (change) => `${change} (défavorable)`,\n noValue: \"Aucune donnée\",\n loading: \"Chargement…\",\n },\n signaturePad: {\n label: \"Signature\",\n instructions: \"Signez dans le cadre avec une souris, votre doigt ou un stylet.\",\n typedFallbackHint: \"Si vous ne pouvez pas dessiner, saisissez plutôt votre nom.\",\n empty: \"Aucun tracé pour l’instant\",\n signed: \"Signature tracée\",\n undo: \"Annuler le dernier trait\",\n clear: \"Effacer\",\n save: \"Enregistrer la signature\",\n useTyped: \"Saisir le nom à la place\",\n useDrawn: \"Dessiner à la place\",\n typedName: \"Nom complet\",\n cleared: \"Signature effacée\",\n undone: \"Dernier trait supprimé\",\n viewEmpty: \"Non signé\",\n viewDrawn: \"Signature manuscrite\",\n viewTyped: (name) => `Signé avec le nom saisi ${name}`,\n },\n passwordStrength: {\n // Agrees with \"mot de passe\" (masculine).\n tooShort: \"Trop court\",\n weak: \"Faible\",\n fair: \"Moyen\",\n good: \"Bon\",\n strong: \"Fort\",\n announcement: (level) => `Robustesse du mot de passe\\u00a0: ${level}`,\n // Unformatted, as in the English default.\n ruleLength: (minLength) =>\n `Au moins ${n(minLength)} ${plural(minLength, \"caractère\", \"caractères\")}`,\n ruleCase: \"Majuscules et minuscules\",\n ruleDigit: \"Un chiffre\",\n ruleSymbol: \"Un caractère spécial\",\n optional: (rule) => `${rule} (facultatif)`,\n met: \"Respecté\\u00a0:\",\n notMet: \"Non respecté\\u00a0:\",\n tooLong: (maxBytes) =>\n `Au plus ${n(maxBytes)} ${plural(maxBytes, \"caractère\", \"caractères\")} (les lettres accentuées et les emoji comptent pour plus d’un).`,\n },\n seriesChart: {\n resetZoom: \"Réinitialiser le zoom\",\n zoomHint:\n \"Faites glisser pour zoomer\\u00a0: une sélection à peu près carrée zoome sur les deux axes, une sélection longue et étroite sur son seul axe. Double-cliquez pour réinitialiser.\",\n empty: \"Aucune donnée\",\n legend: \"Séries\",\n points: \"Valeurs du graphique\",\n },\n pieChart: {\n slices: \"Secteurs du graphique\",\n slice: (label, value, percent) => `${label}\\u00a0: ${value} (${percent})`,\n total: \"Total\",\n empty: \"Aucune donnée\",\n legend: \"Catégories\",\n },\n confirmDialog: {\n confirm: \"Confirmer\",\n cancel: \"Annuler\",\n typed: (text) => `Saisissez «\\u202f${text}\\u202f» pour confirmer`,\n },\n floatingPanel: {\n close: \"Fermer\",\n badge: (count) => `${n(count)} ${plural(count, \"nouveau\", \"nouveaux\")}`,\n },\n copyButton: {\n copy: \"Copier\",\n copied: \"Copié\",\n failed: \"Échec de la copie\",\n copiedAnnouncement: \"Copié dans le presse-papiers\",\n failedAnnouncement: \"Impossible de copier dans le presse-papiers\",\n },\n list: {\n unread: \"Non lu\",\n opensInNewTab: \"s’ouvre dans un nouvel onglet\",\n },\n breadcrumbs: {\n label: \"Fil d’Ariane\",\n showAll: \"Afficher le chemin complet\",\n },\n toast: {\n close: \"Fermer la notification\",\n notifications: \"Notifications\",\n undo: \"Annuler\",\n redo: \"Rétablir\",\n },\n form: {\n save: \"Enregistrer\",\n cancel: \"Annuler\",\n submitShortcut: (apple) => (apple ? \"⌘ Entrée\" : \"Ctrl+Entrée\"),\n },\n descriptionList: {\n empty: \"—\",\n },\n lineItems: {\n add: \"Ajouter une ligne\",\n remove: (row) => `Supprimer la ligne ${row}`,\n confirmRemove: (row) => `Supprimer la ligne ${row}\\u202f? Appuyez de nouveau pour confirmer`,\n row: (row) => `Ligne ${row}`,\n cell: (column, row) => `${column}, ligne ${row}`,\n totals: \"Total\",\n },\n progressBar: {\n unlimited: \"Illimité\",\n overLimit: (amount) => `${amount} au-delà de la limite`,\n },\n signedAmount: {\n positive: (amount) => `plus ${amount}`,\n negative: (amount) => `moins ${amount}`,\n },\n errorBoundary: {\n title: \"Une erreur s’est produite\",\n message: \"Cette partie de la page n’a pas pu s’afficher. Réessayez ou rechargez la page.\",\n retry: \"Réessayer\",\n details: \"Détails de l’erreur\",\n reload: \"Recharger\",\n updateTitle: \"Une nouvelle version est disponible\",\n updateMessage: \"Une partie de l’application a changé depuis le chargement de cette page. Rechargez-la pour obtenir la nouvelle version.\",\n offlineTitle: \"Vous êtes hors ligne\",\n offlineMessage: \"Cette page n’a pas pu être chargée sans connexion. Reconnectez-vous, puis rechargez la page.\",\n copyReport: \"Copier le rapport d’erreur\",\n reported: \"L’erreur a été signalée automatiquement.\",\n reportedAs: (reference) => `Signalée sous la référence ${reference}`,\n },\n authedImage: {\n loading: \"Chargement de l’image…\",\n loadError: \"Impossible de charger l’image\",\n failedImage: (alt) => `${alt} : impossible de charger l’image`,\n },\n imageGrid: {\n list: \"Images\",\n item: (index, count) => `Image ${n(index)} sur ${n(count)}`,\n actions: (name) => `Actions pour ${name}`,\n },\n lightbox: {\n dialog: \"Visionneuse d’images\",\n close: \"Fermer\",\n previous: \"Image précédente\",\n next: \"Image suivante\",\n counter: (index, count) => `${n(index)} / ${n(count)}`,\n position: (index, count) => `Image ${n(index)} sur ${n(count)}`,\n download: \"Télécharger\",\n zoom: \"Agrandir\",\n noPreview: \"Aucun aperçu disponible pour ce fichier\",\n openInNewTab: \"Ouvrir dans un nouvel onglet\",\n },\n writeLock: {\n reason: \"Vous pouvez consulter ceci, mais pas le modifier.\",\n offline: \"Nécessite une connexion.\",\n },\n accountState: {\n // Agreeing with \"compte\" (masculine): the chip is the state of an account.\n active: \"Actif\",\n inactive: \"Inactif\",\n invited: \"Invité\",\n registered: \"Inscrit\",\n unverified: \"Non vérifié\",\n passwordChange: \"Doit changer de mot de passe\",\n deletion: \"Suppression demandée\",\n deletionOn: (date) => `Suppression le ${date}`,\n },\n shareCard: {\n dialogTitle: \"Partager\",\n close: \"Fermer\",\n email: \"Adresse e-mail\",\n emailOptional: \"Adresse e-mail (facultatif)\",\n // example.com is reserved for examples (RFC 2606); a localised domain is real.\n emailPlaceholder: \"nom@example.com\",\n invalidEmail: \"Saisissez une adresse e-mail complète.\",\n role: \"Rôle\",\n roleOf: (name) => `Rôle de ${name}`,\n add: \"Partager\",\n whoHasAccess: \"Qui a accès\",\n nobodyYet: \"Personne d’autre n’y a encore accès.\",\n pending: \"En attente\",\n openInvite: \"Lien d’invitation ouvert\",\n copyLink: \"Copier le lien\",\n team: \"Équipe\",\n teamHint: (name) => `Tous les membres de ${name} y auront accès.`,\n remove: \"Retirer l’accès\",\n removeConfirm: (name) => `Retirer l’accès de ${name}\\u202f?`,\n revokePending: \"Révoquer l’invitation\",\n revokePendingConfirm: (name) => `Révoquer l’invitation de ${name}\\u202f?`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n loading: \"Chargement…\",\n },\n reauthDialog: {\n title: \"Confirmez votre identité\",\n description: \"Saisissez votre mot de passe actuel pour continuer.\",\n password: \"Mot de passe actuel\",\n submit: \"Continuer\",\n cancel: \"Annuler\",\n },\n // 0.35: keksdose's reviewed French (its `boot.slow` / `boot.waking`), which is canon.\n serverWake: {\n slow: \"Chargement en cours — c’est plus long que d’habitude.\",\n waking: (appName) =>\n `Le serveur se met en veille quand personne n’utilise ${appName ?? \"l’application\"}\\u202f; la première requête après une pause doit donc le réveiller. Cela peut prendre un instant — rien n’est perdu, la page se remplit toute seule.`,\n },\n // 0.28.0 — docs/legal-harmonization.md §4.3/§4.4: keksdose's reviewed French, and\n // Kurvenschmiede's for the browser section and the beta notice; spaced as this\n // catalogue writes it (\\u00a0 before \":\", \\u202f before \";\" and inside « »).\n legal: {\n // Not keksdose's \"Mentions légales\": that is the Imprint link's label, and a screen\n // reader would read it twice (§4.4).\n navLabel: \"Informations légales\",\n links: {\n impressum: \"Mentions légales\",\n privacy: \"Confidentialité\",\n terms: \"Conditions d’utilisation\",\n },\n titles: {\n impressum: \"Mentions légales\",\n privacy: \"Politique de confidentialité\",\n terms: \"Conditions d’utilisation\",\n },\n backHome: \"Retour à l’accueil\",\n accept: \"J’accepte les {terms} et la {privacy}\",\n notice: {\n beta: \"Bêta fermée. Ces textes n’ont pas encore été relus par un avocat et le seront avant un lancement public.\",\n privacy:\n \"Bêta fermée. Les formulations juridiques ci-dessous n’ont pas encore été relues par un avocat\\u202f; cela sera fait avant un lancement public. Les descriptions techniques — ce qui est stocké, où, et qui peut le lire — décrivent ce que fait réellement le logiciel aujourd’hui et sont faites pour être vérifiées par rapport à lui.\",\n },\n translation: {\n note: (o) =>\n `Ceci est une traduction fournie pour votre commodité. Seule la version en ${o.bindingLanguage} fait foi.`,\n show: (o) => `Afficher la version en ${o.bindingLanguage}`,\n },\n sections: {\n impressum: {\n operator: {\n title: \"Exploitant\",\n body: (o) =>\n `${o.name}\\n${o.postalCode} ${o.city}\\n${o.country}\\n\\nL’adresse postale complète est communiquée sur demande à toute personne ayant un intérêt juridique légitime\\u202f; écrivez à l’adresse de contact ci-dessous.`,\n },\n contact: {\n title: \"Contact\",\n body: (o) => `E-mail\\u00a0: ${o.email}`,\n },\n disclaimer: {\n title: \"Responsabilité pour les contenus et les liens\",\n body: \"Il s’agit d’un projet privé et non commercial, proposé dans le cadre d’une bêta fermée, sans garantie. Les sites externes vers lesquels nous renvoyons relèvent de la responsabilité de leurs exploitants respectifs\\u202f; nous n’avons aucun contrôle sur leur contenu.\",\n // 0.32.0 — the commercial variant (docs/billing-harmonization.md §8).\n // \"Formule\" and \"abonnement\" as the `billing` namespace.\n commercial:\n \"Il s’agit d’un service commercial. Les formules payantes sont vendues par notre revendeur, qui agit en qualité de Merchant of Record\\u00a0: il vend l’abonnement en son nom propre, encaisse le paiement, émet la facture et se charge de la TVA, et ses conditions de vente s’appliquent à l’achat. Nous veillons à l’exactitude du contenu de ce service, mais ne pouvons pas garantir qu’il soit complet ou à jour. Les sites externes vers lesquels nous renvoyons relèvent de la responsabilité de leurs exploitants respectifs\\u202f; nous n’avons aucun contrôle sur leur contenu.\",\n },\n },\n privacy: {\n controller: {\n title: \"Responsable du traitement\",\n body: (o) =>\n `Le responsable du traitement des données personnelles dans ce service est\\u00a0:\\n${o.name}\\n${o.postalCode} ${o.city}, ${o.country}\\nE-mail\\u00a0: ${o.email}\\n\\nL’adresse postale complète est communiquée sur demande aux personnes concernées et aux autorités de surveillance.`,\n },\n legal_basis: {\n title: \"Base légale\",\n body: \"L’exploitant étant établi en Suisse, le traitement est régi par la loi fédérale suisse sur la protection des données (LPD). Lorsque le Règlement général sur la protection des données de l’UE (RGPD) vous est applicable, nous nous fondons sur l’exécution d’un contrat pour fournir le service (art. 6, par. 1, let. b RGPD) et sur notre intérêt légitime à l’exploiter et à le sécuriser (art. 6, par. 1, let. f RGPD).\",\n },\n browser: {\n title: \"Ce que votre navigateur enregistre\",\n lead: \"Aucun cookie. L’app conserve les éléments suivants dans le stockage de votre navigateur\\u00a0:\",\n tail: \"Rien de tout cela ne sert à vous suivre. Les éléments en attente d’envoi nous sont transmis dès que possible\\u202f; tout le reste demeure sur votre appareil. Tout cela disparaît lorsque vous effacez les données du site, et la déconnexion supprime les jetons de connexion.\",\n },\n rights: {\n title: \"Vos droits\",\n lead: \"Vous disposez d’un droit d’accès, de rectification, d’effacement, de limitation, de portabilité des données et d’opposition.\",\n tail: \"Si vous êtes en Suisse, vous pouvez vous adresser au Préposé fédéral à la protection des données et à la transparence (PFPDT)\\u202f; si vous êtes dans l’UE, vous pouvez déposer une plainte auprès de votre autorité de surveillance locale.\",\n },\n contact: {\n title: \"Contact pour la protection des données\",\n body: (o) => `Pour toute demande relative à la confidentialité, contactez\\u00a0: ${o.email}`,\n },\n },\n terms: {\n warranty: {\n title: \"Absence de garantie\",\n body: \"Le service est fourni «\\u202ftel quel\\u202f» et «\\u202fselon disponibilité\\u202f», sans garantie d’aucune sorte dans la mesure permise par la loi. En tant que bêta, il peut contenir des erreurs, changer ou être interrompu à tout moment — conservez vos propres sauvegardes des données importantes.\",\n },\n liability: {\n title: \"Limitation de responsabilité\",\n body: \"Dans la mesure permise par le droit applicable, l’exploitant n’est pas responsable des dommages indirects ou consécutifs résultant de l’utilisation ou de l’impossibilité d’utiliser le service. Rien ici ne limite une responsabilité qui ne peut pas être limitée par la loi.\",\n },\n changes: {\n title: \"Modifications des présentes conditions\",\n body: \"Ces conditions peuvent être mises à jour au fil de l’évolution du service. Les modifications importantes seront annoncées par e-mail ou dans l’app\\u202f; continuer à utiliser le service après une modification vaut acceptation.\",\n },\n language: {\n title: \"Langue\",\n body: (o) =>\n `Les présentes conditions sont rédigées en ${o.bindingLanguage}. Les traductions dans d’autres langues sont fournies à titre indicatif uniquement\\u202f; en cas de divergence, la version en ${o.bindingLanguage} prévaut.`,\n },\n law: {\n title: \"Droit applicable\",\n body: (o) =>\n `Les présentes conditions sont régies par le droit suisse, à l’exclusion de ses règles de conflit de lois. Dans la mesure où la loi le permet, le for est ${o.city} (${o.region}), ${o.country}.`,\n },\n },\n },\n },\n // 0.29.0 — docs/auth-harmonization.md: keksdose's reviewed French (auth.*,\n // verify_email, error.not_found_*, budget_share.join_*), kastlan's for the names and\n // the 2FA prompt; written fresh where neither app had the sentence. Spaced as this\n // catalogue writes it (\\u00a0 before \":\", \\u202f before \"?\" and \";\"), \"l’application\"\n // where keksdose writes \"l’app\".\n signIn: {\n email: \"E-mail\",\n password: \"Mot de passe\",\n submit: \"Se connecter\",\n passkey: \"Se connecter avec une clé d’accès\",\n forgotPassword: \"Mot de passe oublié\\u202f?\",\n noAccount: \"Pas encore de compte\\u202f?\",\n register: \"Créer un compte\",\n invalidCredentials: \"L’adresse e-mail ou le mot de passe est incorrect.\",\n failed: \"Échec de la connexion. Veuillez réessayer.\",\n passkeyFailed: \"Échec de la connexion par clé d’accès.\",\n deactivatedHint: \"Compte désactivé\\u202f? Écrivez à {contact}.\",\n // \"Compte créé avec…\" rather than \"Inscrit avec…\", which would need a gender.\n tagHint: (taggedAddress) =>\n `Compte créé avec ${taggedAddress}\\u202f? Utilisez cette adresse.`,\n twoFactorTitle: \"Authentification à deux facteurs\",\n twoFactorIntro: \"Saisissez le code affiché par votre application d’authentification.\",\n code: \"Code 2FA\",\n verify: \"Vérifier\",\n codeInvalid: \"Code 2FA invalide.\",\n setPasswordTitle: \"Choisir un nouveau mot de passe\",\n setPasswordIntro:\n \"Un nouveau mot de passe a été demandé pour ce compte. Choisissez-en un et vous êtes aussitôt de retour.\",\n newPassword: \"Nouveau mot de passe\",\n confirmPassword: \"Répéter le nouveau mot de passe\",\n passwordMismatch: \"Les mots de passe ne correspondent pas.\",\n setPasswordSubmit: \"Définir le mot de passe et se connecter\",\n setPasswordFailed: \"Le mot de passe n’a pas pu être défini.\",\n expired: \"Cette connexion a expiré. Veuillez vous reconnecter.\",\n backToSignIn: \"Retour à la connexion\",\n // kastlan's backup-code words (\"code de secours\" — not keksdose's \"code de\n // récupération\", which is the key of its end-to-end encryption).\n useRecoveryCode: \"Utiliser un code de secours\",\n useAuthenticatorCode: \"Utiliser votre application d’authentification\",\n recoveryCode: \"Code de secours\",\n recoveryIntro:\n \"Saisissez l’un des codes de secours que vous avez enregistrés en activant l’authentification à deux facteurs.\",\n recoveryCodeHint: (length) =>\n `${n(length)} lettres et chiffres. Les tirets et les espaces ne comptent pas.`,\n recoveryCodeInvalid: \"Ce code de secours n’est pas valable ou a déjà été utilisé.\",\n rateLimited,\n // 0.31.0: the same words as `landing.requestAccess`.\n requestAccess: \"Demander l’accès\",\n },\n register: {\n firstName: \"Prénom\",\n lastName: \"Nom\",\n email: \"E-mail\",\n emailTagUse: (address) => `Utiliser ${address}`,\n emailTagHint:\n \"Beaucoup de fournisseurs livrent nom+tag@… dans la même boîte, ce qui rend le courrier de cette application filtrable et traçable. Vérifiez que le vôtre le fait avant de vous y fier\\u00a0: vous vous connecteriez avec l’adresse marquée.\",\n invitedEmailHint: \"L’adresse à laquelle votre invitation a été envoyée.\",\n invitedTagNote: \"L’adresse marquée reçoit son propre e-mail de confirmation.\",\n password: \"Mot de passe\",\n confirmPassword: \"Répéter le mot de passe\",\n passwordMismatch: \"Les mots de passe ne correspondent pas.\",\n language: \"Langue\",\n submit: \"Créer un compte\",\n haveAccount: \"Déjà un compte\\u202f?\",\n signIn: \"Se connecter\",\n emailTaken: \"Un compte existe déjà avec cette adresse e-mail.\",\n registrationClosed:\n \"Les nouveaux comptes ne sont créés que sur invitation. Demandez à l’exploitant d’inviter votre adresse e-mail.\",\n invitationInvalid: \"Ce lien d’invitation n’est pas valide.\",\n invitationExpired: \"Cette invitation a expiré. Demandez-en une nouvelle.\",\n failed: \"Échec de l’inscription. Veuillez réessayer.\",\n rateLimited,\n },\n completeName: {\n title: \"Complétez votre nom\",\n description:\n \"Le prénom et le nom sont désormais demandés séparément. Vérifiez ce qui est déjà rempli et ajoutez ce qui manque.\",\n firstName: \"Prénom\",\n lastName: \"Nom\",\n save: \"Enregistrer\",\n later: \"Plus tard\",\n failed: \"Votre nom n’a pas pu être enregistré. Veuillez réessayer.\",\n },\n forgotPassword: {\n title: \"Mot de passe oublié\",\n intro:\n \"Saisissez l’adresse e-mail de votre compte. Nous vous enverrons un lien pour choisir un nouveau mot de passe.\",\n email: \"E-mail\",\n submit: \"Envoyer le lien\",\n sent: (email) => `S’il existe un compte pour ${email}, le lien est en route.`,\n sentHint:\n \"Le lien est valable une heure et ne fonctionne qu’une seule fois. Vérifiez aussi votre dossier de courrier indésirable.\",\n backToSignIn: \"Retour à la connexion\",\n error: \"La demande a échoué. Veuillez réessayer plus tard.\",\n rateLimited,\n },\n resetPassword: {\n title: \"Choisir un nouveau mot de passe\",\n checking: \"Vérification du lien…\",\n intro: (email) => `Vous définissez un nouveau mot de passe pour ${email}.`,\n newPassword: \"Nouveau mot de passe\",\n confirmPassword: \"Répéter le nouveau mot de passe\",\n mismatch: \"Les mots de passe ne correspondent pas.\",\n submit: \"Enregistrer le mot de passe\",\n failed: \"Le mot de passe n’a pas pu être changé.\",\n noToken: \"Ce lien est incomplet.\",\n invalid: \"Ce lien est invalide ou a expiré.\",\n invalidHint:\n \"Les liens sont valables une heure et ne fonctionnent qu’une fois. Demandez simplement un nouveau lien.\",\n requestNew: \"Demander un nouveau lien\",\n success: \"Votre mot de passe a été changé. Vous pouvez vous connecter avec dès maintenant.\",\n sessionsEnded: \"Les appareils connectés ont été déconnectés — vous devrez vous y reconnecter.\",\n signIn: \"Aller à la connexion\",\n rateLimited,\n },\n verifyEmail: {\n title: \"Confirmez votre adresse e-mail\",\n verifying: \"Confirmation…\",\n verified: \"Votre adresse e-mail est confirmée.\",\n continue: \"Continuer\",\n invalid: \"Ce lien de confirmation n’est pas valide\",\n expired: \"Ce lien de confirmation a expiré\",\n noToken: \"Ce lien n’a pas de jeton de confirmation.\",\n invalidHint: \"Le lien a peut-être expiré ou déjà été utilisé.\",\n requestInApp: \"Vous pouvez en demander un nouveau depuis l’application.\",\n requestHere: \"Vous pouvez en demander un nouveau ici.\",\n resend: \"Envoyer à nouveau\",\n resendIn: (seconds) => `Envoyer à nouveau dans ${n(seconds)}\\u00a0s`,\n resent: \"E-mail de confirmation envoyé\",\n resendError: \"Impossible d’envoyer l’e-mail de confirmation\",\n rateLimited,\n banner: \"Veuillez confirmer votre adresse e-mail.\",\n dismiss: \"Pas maintenant\",\n },\n notFound: {\n title: \"Page introuvable\",\n body: \"Cette adresse n’existe pas (ou plus). Peut-être une faute de frappe, ou la page a été déplacée.\",\n home: \"Aller à la page d’accueil\",\n app: \"Retour à l’application\",\n },\n acceptInvitation: {\n title: \"Accepter l’invitation\",\n accepting: \"Acceptation de l’invitation…\",\n accepted: \"Invitation acceptée.\",\n joined: (name) => `Vous avez rejoint ${name}.`,\n continue: \"Continuer\",\n invalid: \"Impossible de rejoindre avec ce lien\",\n expired: \"Cette invitation a expiré\",\n noToken: \"Ce lien n’a pas de jeton d’invitation.\",\n // Without \"qui vous a invité(e)\", which would need a gender.\n askAgain: \"Demandez une nouvelle invitation à la personne qui vous l’a envoyée.\",\n signInFirst: \"Connectez-vous pour accepter cette invitation\",\n signInHint: \"Utilisez le compte auquel l’invitation a été envoyée.\",\n signIn: \"Se connecter\",\n register: \"Créer un compte\",\n },\n companySwitcher: {\n switchCompany: \"Changer d’entreprise\",\n heading: \"Entreprises\",\n current: (name) => `Entreprise\\u00a0: ${name}`,\n // Agreeing with \"entreprise\" (feminine).\n currentMark: \"(actuelle)\",\n switching: \"Changement d’entreprise…\",\n },\n // 0.30.0 — docs/user-admin-harmonization.md: keksdose's reviewed French for the admin\n // words (admin.users.*), Kurvenschmiede's for transfer, invitations and sessions,\n // kastlan's for the company, the throttle and \"Se déconnecter partout\"; written fresh\n // where no app had the sentence. Phrased so that no sentence about the reader needs\n // a gender (\"déconnecté·e\").\n emailChange: {\n title: \"Adresse e-mail\",\n current: \"Adresse actuelle\",\n newEmail: \"Nouvelle adresse e-mail\",\n password: \"Mot de passe actuel\",\n passwordHint: \"Votre adresse sert à vous connecter, c’est pourquoi la changer demande votre mot de passe.\",\n emailTagUse: (address) => `Utiliser ${address}`,\n emailTagHint:\n \"Beaucoup de fournisseurs livrent nom+tag@… dans la même boîte, ce qui rend le courrier de cette application filtrable et traçable. Vérifiez que le vôtre le fait avant de vous y fier\\u00a0: vous vous connecteriez avec l’adresse marquée.\",\n submit: \"Changer d’adresse e-mail\",\n sameAsCurrent: \"C’est déjà votre adresse.\",\n emailTaken: \"Un compte existe déjà avec cette adresse e-mail.\",\n wrongPassword: \"Le mot de passe est incorrect.\",\n pending: (newEmail) => `Confirmez le lien que nous avons envoyé à ${newEmail}.`,\n pendingHint: (currentEmail) =>\n `D’ici là, vous continuez à vous connecter avec ${currentEmail}. Vérifiez aussi votre dossier de courrier indésirable.`,\n resend: \"Renvoyer le lien\",\n resent: \"Nous avons renvoyé le lien.\",\n cancel: \"Annuler le changement\",\n confirmed: (email) => `Votre adresse e-mail est désormais ${email}.`,\n passkeyNote:\n \"Vos clés d’accès continuent de fonctionner. Votre appareil peut encore les afficher sous votre ancienne adresse.\",\n rateLimited,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n // 0.36.0 — docs/notifications-harmonization.md §4.2: the notification cards. The push\n // and device words follow keksdose's reviewed French.\n notifications: {\n typesTitle: \"Me notifier pour\",\n typesDescription: \"Choisissez ce dont vous êtes averti, et comment.\",\n byEmail: \"Par e-mail\",\n channelApp: \"Dans l’app\",\n channelPush: \"Push\",\n channelEmail: \"E-mail\",\n emailUnverified: \"Confirmez votre adresse pour les recevoir.\",\n digestCadence: \"Fréquence\",\n digestWeekly: \"Hebdomadaire\",\n digestMonthly: \"Mensuelle\",\n typesLoading: \"Chargement des paramètres de notification…\",\n typesEmpty: \"Il n’y a aucune notification pour ce compte.\",\n quietTitle: \"Heures calmes\",\n quietDescription: (inbox, held) =>\n held\n ? inbox\n ? \"Les notifications push attendent pendant cette plage et arrivent à sa fin. Elles arrivent tout de suite dans votre boîte de réception.\"\n : \"Les notifications push attendent pendant cette plage et arrivent à sa fin.\"\n : inbox\n ? \"Aucune notification push pendant cette plage. Elles arrivent quand même dans votre boîte de réception.\"\n : \"Aucune notification push pendant cette plage.\",\n quietZone: (zone) => `Dans votre fuseau horaire (${zone}), qui suit le dernier appareil utilisé.`,\n quietFrom: \"De\",\n quietUntil: \"Jusqu’à\",\n quietIncomplete:\n \"Définissez une heure de début et une heure de fin. Les heures calmes s’appliquent une fois les deux renseignées.\",\n timeZone: \"Fuseau horaire\",\n deviceZone: (zone) => `Cet appareil est dans le fuseau ${zone}.`,\n useDeviceZone: \"L’utiliser\",\n regions: {\n Africa: \"Afrique\",\n America: \"Amériques\",\n Antarctica: \"Antarctique\",\n Arctic: \"Arctique\",\n Asia: \"Asie\",\n Atlantic: \"Atlantique\",\n Australia: \"Australie\",\n Europe: \"Europe\",\n Indian: \"Océan Indien\",\n Pacific: \"Pacifique\",\n },\n pushTitle: \"Notifications push\",\n pushDescription: \"Les notifications sur cet appareil, même quand l’app est fermée.\",\n unsupported: \"Ce navigateur ne prend pas en charge les notifications push.\",\n iosInstall: (app) =>\n `Sur iPhone ou iPad, ajoutez d’abord ${app} à votre écran d’accueil\\u00a0: iOS ne délivre les notifications qu’à l’app installée.`,\n notConfigured: \"Les notifications push ne sont pas configurées sur ce serveur.\",\n blocked: \"Les notifications sont bloquées dans les réglages de ce navigateur.\",\n on: \"Les notifications sont activées pour cet appareil.\",\n off: \"Les notifications sont désactivées pour cet appareil.\",\n otherAccount:\n \"Ce navigateur reçoit les notifications d’un autre compte. Activez-les ici pour les recevoir sur le compte avec lequel vous êtes connecté.\",\n enable: \"Activer les notifications\",\n disable: \"Désactiver\",\n sendTest: \"Envoyer un test\",\n enableFailed: \"Impossible d’activer les notifications.\",\n noServiceWorker: \"Impossible de joindre le service worker de l’app. Rechargez la page et réessayez.\",\n pushTimeout: \"Le service push du navigateur n’a pas répondu. Vérifiez votre connexion et réessayez.\",\n testSent: (count) => `Test envoyé à ${n(count)} ${plural(count, \"appareil\", \"appareils\")}`,\n testNone: \"Aucun appareil n’a accepté le test. Activez d’abord les notifications pour cet appareil.\",\n testFailed: \"Impossible d’envoyer la notification de test.\",\n explainerTitle: \"Activer les notifications\\u202f?\",\n explainerBody: (app) =>\n `${app} n’envoie de notifications que pour ce que vous choisissez, et vous pouvez les désactiver à tout moment.`,\n explainerHint: \"Votre navigateur va ensuite demander l’autorisation.\",\n explainerContinue: \"Continuer\",\n devicesTitle: \"Appareils de notification\",\n devicesDescription:\n \"Tous les appareils qui reçoivent des notifications push pour votre compte. Retirez ceux que vous n’utilisez plus.\",\n devicesLoading: \"Chargement des appareils…\",\n devicesEmpty: \"Aucun appareil ne reçoit encore de notifications.\",\n unknownDevice: \"Appareil inconnu\",\n thisDevice: \"Cet appareil\",\n added: (date) => `Ajouté le ${date}`,\n lastDelivery: (date) => `Dernière remise le ${date}`,\n noDelivery: \"Aucune remise pour l’instant\",\n failures: (count) =>\n `${n(count)} ${plural(count, \"remise échouée\", \"remises échouées\")} d’affilée`,\n remove: \"Retirer\",\n // Starts with `remove`, the button's visible text, for voice control.\n removeItem: (device) => `Retirer ${device}`,\n removePrompt: \"Ne plus envoyer de notifications à cet appareil\\u202f?\",\n deviceTypes: \"Types sur cet appareil\",\n deviceTypesDescription: \"Désactivez un type pour le mettre en sourdine sur cet appareil seulement.\",\n deviceTypesEmpty: \"Aucun type n’a les notifications push activées.\",\n inboxTitle: \"Boîte de réception\",\n inboxLoading: \"Chargement des notifications…\",\n inboxEmpty: \"Vous êtes à jour.\",\n markAllRead: \"Tout marquer comme lu\",\n clearAll: \"Tout effacer\",\n clearPrompt: \"Supprimer toutes les notifications de votre boîte de réception\\u202f?\",\n showMore: \"Afficher plus\",\n bellLabel: \"Notifications\",\n bellUnread: (count) => (count === 1 ? `${n(count)} non lue` : `${n(count)} non lues`),\n allNotifications: \"Toutes les notifications\",\n unsubscribeTitle: \"Notifications par e-mail\",\n unsubscribeAbout: (type) => `Vous recevez des e-mails concernant\\u00a0: ${type}.`,\n unsubscribeGeneric: \"Vous recevez des e-mails de notification.\",\n stopThese: \"Ne plus recevoir ces e-mails\",\n stopAll: (app) => `Ne plus recevoir aucun e-mail de notification de ${app}`,\n stoppedThese: \"C’est fait. Vous ne recevrez plus ces e-mails.\",\n stoppedAll: (app) => `C’est fait. Vous ne recevrez plus d’e-mails de notification de ${app}.`,\n accountMail: \"Les e-mails concernant votre compte continuent d’arriver.\",\n turnBackOn: \"Vous pouvez les réactiver à tout moment dans les paramètres.\",\n openSettings: \"Ouvrir les paramètres\",\n invalidLink: \"Ce lien ne fonctionne plus. Vous pouvez désactiver les e-mails dans les paramètres.\",\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n sessions: {\n title: \"Sessions\",\n description:\n \"Une session ouverte sur un appareil que vous n’utilisez plus, ou auquel vous ne vous fiez pas\\u202f? Déconnectez-vous partout.\",\n signOutEverywhere: \"Se déconnecter partout…\",\n signOutEverywherePrompt:\n \"Toutes les sessions prennent fin, y compris celle-ci\\u00a0: cet appareil sera déconnecté lui aussi, et il faudra vous reconnecter ici.\",\n confirmSignOutEverywhere: \"Se déconnecter partout\",\n list: \"Vos sessions ouvertes\",\n loading: \"Chargement des sessions…\",\n empty: \"Aucune session à afficher.\",\n current: \"Cet appareil\",\n unknownDevice: \"Appareil inconnu\",\n // A colon: `when` is either \"il y a 3 heures\" or a date.\n lastActive: (when) => `Dernière activité\\u00a0: ${when}`,\n ip: (address) => `IP ${address}`,\n revoke: \"Déconnecter\",\n // Starts with `revoke`, the button's visible text, for voice control.\n revokeItem: (device) => `Déconnecter ${device}`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n deleteAccount: {\n title: \"Supprimer le compte\",\n afterDays: (days) =>\n `Votre compte est désactivé immédiatement et effacé définitivement ${n(days)} ${plural(days, \"jour\", \"jours\")} plus tard.`,\n operator: \"Votre compte est désactivé immédiatement, puis l’exploitant l’effacera définitivement.\",\n arm: \"Supprimer le compte…\",\n prompt: \"Toutes vos sessions prendront fin, sur tous les appareils, et votre compte ne pourra plus être utilisé.\",\n handOver: (count) =>\n count < 2\n ? `${n(count)} élément visible par d’autres passera à un administrateur.`\n : `${n(count)} éléments visibles par d’autres passeront à un administrateur.`,\n confirm: \"Supprimer mon compte\",\n done: \"Votre compte est désactivé. Déconnexion en cours.\",\n wrongPassword: \"Le mot de passe est incorrect.\",\n confirmationMismatch: \"Ce n’est pas l’adresse de votre compte.\",\n lastAdmin:\n \"Votre compte est le dernier compte administrateur. Nommez d’abord quelqu’un d’autre administrateur.\",\n lastAdminOf: (companies) =>\n `Votre compte est le dernier compte administrateur de ${companies}. Nommez-y d’abord quelqu’un d’autre administrateur.`,\n // keksdose's \"ménage\".\n householdHasMembers:\n \"Votre ménage a d’autres membres, le compte ne peut donc pas être supprimé ici. Veuillez écrire à l’exploitant.\",\n rateLimited,\n failed: \"Votre compte n’a pas pu être supprimé. Veuillez réessayer.\",\n },\n dataExport: {\n title: \"Exporter vos données\",\n description: \"Téléchargez une copie des données de votre compte sous forme de fichier JSON.\",\n download: \"Télécharger mes données\",\n started: \"Votre téléchargement a commencé.\",\n saveAgain: \"Rien ne s’est passé\\u202f? Enregistrer le fichier\",\n rateLimited: (seconds) =>\n seconds && seconds > 0\n ? `Vous venez d’exporter vos données. Réessayez dans ${wait(seconds)}.`\n : \"Vous venez d’exporter vos données. Veuillez réessayer dans une minute.\",\n failed: \"L’export a échoué. Veuillez réessayer.\",\n },\n userRoster: {\n name: \"Nom\",\n email: \"E-mail\",\n role: \"Rôle\",\n state: \"État\",\n created: \"Créé le\",\n lastLogin: \"Dernière connexion\",\n never: \"Jamais\",\n actions: \"Actions\",\n actionsFor: (name) => `Actions pour ${name}`,\n },\n roleSelect: {\n label: \"Rôle\",\n rolesLegend: \"Rôles\",\n roleOf: (name) => `Rôle de ${name}`,\n lockedLastAdmin: \"Le dernier compte administrateur actif garde ce rôle.\",\n lockedSelf: \"Vous ne pouvez pas changer votre propre rôle.\",\n notForLastAdmin: \"pas pour le dernier administrateur\",\n notForSelf: \"pas pour votre propre compte\",\n unavailable: (role, reason) => `${role} (${reason})`,\n },\n reviewerScope: {\n languages: \"Langues\",\n hint: \"Cochez les langues que cette personne relit.\",\n none: \"Aucune langue\\u00a0: enregistrer retire le rôle de relecteur.\",\n areas: \"Limiter à\",\n legalOnly: \"Uniquement les pages légales\",\n legalOnlyHint:\n \"Mentions légales, politique de confidentialité et conditions d’utilisation\\u00a0: pour un juriste plutôt que pour un locuteur natif.\",\n failed: \"Le rôle de relecteur n’a pas pu être enregistré. Veuillez réessayer.\",\n },\n adminAction: {\n confirm: \"Confirmer\",\n cancel: \"Annuler\",\n close: \"Fermer\",\n lastAdmin:\n \"C’est le dernier compte administrateur actif. Nommez d’abord quelqu’un d’autre administrateur.\",\n self: \"Vous ne pouvez pas faire cela sur votre propre compte.\",\n confirmationMismatch:\n \"L’adresse ne correspond pas à ce compte. Vérifiez sur quel compte vous êtes.\",\n otherCompanies:\n \"Ce compte appartient aussi à d’autres entreprises, seul l’exploitant de la plateforme peut donc faire cela. Vous pouvez plutôt le retirer de cette entreprise.\",\n removeFromCompany: \"Retirer de l’entreprise\",\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n adminActionLog: {\n title: \"Actions d’administration\",\n empty: \"Aucune action d’administration pour l’instant.\",\n loading: \"Chargement…\",\n by: (actor) => `par ${actor}`,\n bySelf: \"par la personne elle-même\",\n automatic: \"automatiquement\",\n erased: \"un compte effacé\",\n filteredTo: (target) => `Uniquement ${target}`,\n showAll: \"Afficher toutes les actions\",\n filterBy: (target) => `Afficher uniquement les actions concernant ${target}`,\n // Agreeing with \"compte\" (masculine), like `accountState`.\n actions: {\n deactivate: \"Désactivé\",\n reactivate: \"Réactivé\",\n role: \"Rôle modifié\",\n password_change_require: \"Nouveau mot de passe exigé\",\n password_change_withdraw: \"Exigence de mot de passe retirée\",\n mail_verification: \"E-mail de confirmation envoyé\",\n mail_reset: \"E-mail de réinitialisation du mot de passe envoyé\",\n reviewer: \"Périmètre de relecture modifié\",\n invite: \"Invité\",\n invite_resend: \"Invitation renvoyée\",\n invite_revoke: \"Invitation révoquée\",\n transfer: \"Travail transmis\",\n deletion_request: \"Suppression demandée\",\n deletion_cancel: \"Suppression annulée\",\n erase: \"Compte effacé\",\n plan: \"Formule modifiée\",\n },\n // 0.34 (§11.5): whole phrases per noun. The group's own agree with the noun\n // (\"Équipe créée\", Kurvenschmiede's feminine \"équipe\"), a member's with \"compte\",\n // as `actions` do. `budget` is keksdose's; `company` keeps\n // `actions.membership_remove`'s string.\n renamedFromTo: (from, to) => `de ${from} en ${to}`,\n groupActions: {\n group: {\n group_create: \"Groupe créé\",\n group_rename: \"Groupe renommé\",\n group_delete: \"Groupe supprimé\",\n group_deactivate: \"Groupe désactivé\",\n group_reactivate: \"Groupe réactivé\",\n membership_add: \"Ajouté au groupe\",\n membership_role: \"Rôle dans le groupe modifié\",\n membership_remove: \"Retiré du groupe\",\n deleted: \"un groupe supprimé\",\n },\n team: {\n group_create: \"Équipe créée\",\n group_rename: \"Équipe renommée\",\n group_delete: \"Équipe supprimée\",\n group_deactivate: \"Équipe désactivée\",\n group_reactivate: \"Équipe réactivée\",\n membership_add: \"Ajouté à l’équipe\",\n membership_role: \"Rôle dans l’équipe modifié\",\n membership_remove: \"Retiré de l’équipe\",\n deleted: \"une équipe supprimée\",\n },\n company: {\n group_create: \"Entreprise créée\",\n group_rename: \"Entreprise renommée\",\n group_delete: \"Entreprise supprimée\",\n group_deactivate: \"Entreprise désactivée\",\n group_reactivate: \"Entreprise réactivée\",\n membership_add: \"Ajouté à l’entreprise\",\n membership_role: \"Rôle dans l’entreprise modifié\",\n membership_remove: \"Retiré de l’entreprise\",\n deleted: \"une entreprise supprimée\",\n },\n budget: {\n group_create: \"Budget créé\",\n group_rename: \"Budget renommé\",\n group_delete: \"Budget supprimé\",\n group_deactivate: \"Budget désactivé\",\n group_reactivate: \"Budget réactivé\",\n membership_add: \"Ajouté au budget\",\n membership_role: \"Rôle dans le budget modifié\",\n membership_remove: \"Retiré du budget\",\n deleted: \"un budget supprimé\",\n },\n },\n },\n transferOwnership: {\n title: (name) => `Transmettre le travail de ${name}`,\n body: \"Tout ce que possède ce compte passe au compte choisi, en une seule étape.\",\n recipient: \"Le transmettre à\",\n choose: \"Choisissez un compte…\",\n chooseFirst: \"Choisissez qui reçoit le travail\",\n confirm: \"Transmettre\",\n customer: \"client\",\n deactivated: \"désactivé\",\n self: \"le même compte\",\n unavailable: (account, reason) => `${account} (${reason})`,\n noCandidates: \"Aucun autre compte ne peut le recevoir.\",\n },\n invitations: {\n email: \"Adresse e-mail\",\n invalidEmail: \"Saisissez une adresse e-mail complète.\",\n role: \"Rôle\",\n scope: \"Portée\",\n scopeNone: \"Aucune\",\n language: \"Langue de l’invitation\",\n note: \"Note\",\n invite: \"Inviter\",\n listTitle: \"Invitations\",\n empty: \"Personne n’a encore été invité.\",\n loading: \"Chargement…\",\n // Agreeing with \"invitation\" (feminine).\n status: { open: \"Ouverte\", accepted: \"Acceptée\", expired: \"Expirée\", revoked: \"Révoquée\" },\n sent: (date) => `Envoyée le ${date}`,\n // kastlan's \"Valable jusqu’au\".\n expires: (date) => `Valable jusqu’au ${date}`,\n invitedBy: (name) => `par ${name}`,\n resend: (email) => `Envoyer un nouveau lien à ${email}`,\n copyLink: \"Copier le lien d’invitation\",\n revoke: (email) => `Révoquer l’invitation de ${email}`,\n consoleHint:\n \"Ce serveur n’envoie pas d’e-mails — ils sont écrits dans le journal du serveur. Copiez ici chaque lien d’invitation et transmettez-le vous-même\\u00a0: il n’est affiché qu’une seule fois.\",\n linkReady: (email) => `Le lien d’invitation pour ${email}, affiché cette seule fois\\u00a0:`,\n notSent: (email) => `${email} est invité, mais l’e-mail n’a pas pu être envoyé. Renvoyez-le.`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n },\n characterCount: {\n count: (used, max) => `${n(used)} sur ${n(max)} ${plural(max, \"caractère\", \"caractères\")}`,\n remaining: (left) => `${n(left)} ${plural(left, \"caractère restant\", \"caractères restants\")}`,\n limitReached: \"Limite de caractères atteinte\",\n },\n countrySelect: {\n country: \"Pays\",\n search: \"Rechercher un pays\",\n others: \"Autres pays\",\n },\n inlineEdit: {\n edit: (label) => `Modifier ${label}`,\n failed: \"La modification n’a pas pu être enregistrée.\",\n empty: \"Vide\",\n },\n ibanInput: {\n format: \"Un IBAN commence par un code pays de deux lettres et deux chiffres de contrôle.\",\n country: (code) => `«\\u202f${code}\\u202f» n’est pas le code pays d’un IBAN.`,\n length: (actual, expected) =>\n `Un IBAN de ce pays compte ${n(expected)} caractères — celui-ci en compte ${n(actual)}.`,\n checksum: \"Les chiffres de contrôle ne correspondent pas — un caractère est sans doute mal saisi.\",\n qrRequired: \"Ceci est un IBAN ordinaire. Une QR-facture exige le QR-IBAN du compte.\",\n qrNotAllowed:\n \"Ceci est un QR-IBAN, qui ne reçoit que des paiements par QR-facture. Saisissez l’IBAN ordinaire du compte.\",\n },\n phoneInput: {\n countryCode: \"Indicatif du pays\",\n other: \"Autre\",\n },\n signChip: {\n outflow: \"Sortie\",\n inflow: \"Entrée\",\n direction: (current, next) => `Sens\\u00a0: ${current} — passer à ${next}`,\n switchTo: (next) => `Passer à ${next}`,\n },\n columnMapper: {\n paste: \"Coller un tableau\",\n pasteHint:\n \"Copiez les lignes d’un tableur et collez-les ici, ou déposez un fichier CSV ou texte.\",\n chooseFile: \"Choisir un fichier\",\n readError: (name) => `«\\u202f${name}\\u202f» n’a pas pu être lu`,\n headerRow: \"La première ligne contient les noms des colonnes\",\n summary: (columns, rows) =>\n `${n(columns)} ${plural(columns, \"colonne\", \"colonnes\")}, ${n(rows)} ${plural(rows, \"ligne\", \"lignes\")}`,\n // Fragments of the summary line. \"Séparé par…\" would have to agree with a noun the\n // line does not name, so the separator is stated as a value.\n separatorSemicolon: \"séparateur\\u00a0: point-virgule\",\n separatorComma: \"séparateur\\u00a0: virgule\",\n separatorTab: \"séparateur\\u00a0: tabulation\",\n separatorSpace: \"séparateur\\u00a0: espace\",\n // The examples stay as written: they show the convention, not the reader's locale.\n decimalComma: \"virgule décimale (1,5)\",\n decimalPoint: \"point décimal (1.5)\",\n unreadCount: (count) =>\n count < 2\n ? `${n(count)} ligne n’a pas pu être lue`\n : `${n(count)} lignes n’ont pas pu être lues`,\n unreadLine: (line) => `La ligne ${line} n\\u2019a pas pu être lue`,\n unreadMore: (count) => `…et ${n(count)} ${plural(count, \"autre\", \"autres\")}`,\n noRows: \"Aucune ligne de ce texte ne se lit comme une ligne du tableau.\",\n table: \"Colonnes et leurs rôles\",\n columnN: (column) => `Colonne ${column}`,\n roleOf: (column) => `Que contient la colonne «\\u202f${column}\\u202f»\\u202f?`,\n ignore: \"Ignorer\",\n requiredRole: (role) => `${role} (obligatoire)`,\n requiredRoleShort: (role) => `${role} *`,\n previewOf: (shown, total) =>\n shown < 2\n ? `La première ligne sur ${n(total)}`\n : `Les ${n(shown)} premières lignes sur ${n(total)}`,\n // `roles` arrives joined with \"ou\" (\"Débit ou Crédit\").\n oneOf: (roles) => `${roles} (au choix)`,\n missing: (roles) => `Il manque encore\\u00a0: ${roles}.`,\n },\n translationReview: {\n statusMissing: \"Manquant\",\n statusUnreviewed: \"Non relu\",\n statusChanged: \"Modifié depuis la relecture\",\n statusNeedsChange: \"À modifier\",\n statusApproved: \"Approuvé\",\n statusFilter: \"Statut\",\n all: \"Tous\",\n filterCount: (label, count) => `${label} · ${n(count)}`,\n source: \"Textes\",\n allSources: \"Tous les textes\",\n namespace: \"Domaine\",\n allNamespaces: \"Tous les domaines\",\n search: \"Rechercher dans les clés et les textes\",\n placeholdersOnly: (count) => `Seulement les problèmes d’espaces réservés (${n(count)})`,\n placeholderChip: \"Espaces réservés\",\n key: \"Clé\",\n statusColumn: \"Statut\",\n empty: \"Aucun texte ne correspond à ces filtres.\",\n missingText: \"Manquant dans cette langue\",\n progress: (approved, total) => `${n(approved)} sur ${n(total)} ${plural(approved, \"approuvé\", \"approuvés\")}`,\n localeProgress: (approved, total) => `${n(approved)}/${n(total)}`,\n locales: \"Langues\",\n approve: \"Approuver\",\n flag: \"À modifier\",\n suggest: \"Proposer une traduction\",\n flagRow: \"Signaler une modification…\",\n suggestRow: \"Ajouter une traduction…\",\n reset: \"Marquer comme non relu\",\n cancel: \"Annuler\",\n approveSelected: \"Approuver la sélection\",\n resetSelected: \"Marquer la sélection comme non relue\",\n selectShown: \"Sélectionner tout ce qui est affiché\",\n changedSince: \"Ce texte a été modifié après la relecture. Veuillez le relire.\",\n reviewedWording: \"Formulation lors de la relecture\",\n reviewedReference: \"Référence lors de la relecture\",\n placeholderMismatch: (reference, text) =>\n `Les espaces réservés diffèrent de la référence — référence\\u00a0: ${reference}\\u202f; ce texte\\u00a0: ${text}. L’application y insère des valeurs, ils doivent donc rester exactement tels quels.`,\n lastApproved: (name, date) => `Approuvé par ${name} le ${date}`,\n lastFlagged: (name, date) => `Signalé à modifier par ${name} le ${date}`,\n erasedReviewer: \"un compte supprimé\",\n suggestion: \"Meilleure formulation\",\n translation: \"Traduction\",\n note: \"Remarque (facultatif)\",\n notePlaceholder: \"Ce qui ne va pas, ou ce qu’il faut garder en tête\",\n readOnly: \"Vous pouvez consulter cette langue, mais pas la relire.\",\n scope: (areas) => `Votre relecture se limite à\\u00a0: ${areas}.`,\n exportCorrections: (count) => `Exporter les corrections (${n(count)})`,\n failed: \"Cela n’a pas fonctionné. Veuillez réessayer.\",\n approvedToast: (count) => (count < 2 ? \"Texte approuvé\" : `${n(count)} textes approuvés`),\n clearedToast: (count) => (count < 2 ? \"Texte marqué comme non relu\" : `${n(count)} textes marqués comme non relus`),\n groupCount: (unreviewed, total) =>\n `${n(unreviewed)} non ${plural(unreviewed, \"relu\", \"relus\")} / ${n(total)}`,\n approveGroup: (count) => `Approuver les non relus (${n(count)})`,\n confirmGroup: (count, group) =>\n count < 2\n ? `Approuver le texte non relu de «\\u202f${group}\\u202f»\\u202f?`\n : `Approuver les ${n(count)} textes non relus de «\\u202f${group}\\u202f», y compris ceux qui ne sont pas à l’écran\\u202f?`,\n },\n // 0.31.0 — docs/settings-harmonization.md §4.3 and docs/landing-demo-harmonization.md\n // §4–§5: the settings shell, the landing page's generic words and the demo. The help\n // lines name things as `accountSettings`, `sessions` and `dataExport` do, and no\n // sentence about the reader needs a gender (\"informé·e\").\n settings: {\n title: \"Paramètres\",\n search: \"Rechercher dans les paramètres\",\n searchPlaceholder: \"Rechercher dans les paramètres…\",\n results: \"Paramètres correspondants\",\n noMatches: (query) => `Aucun paramètre ne correspond à «\\u202f${query}\\u202f».`,\n // As `commandPalette.clear`.\n clearSearch: \"Effacer la recherche\",\n back: \"Retour aux paramètres\",\n sections: \"Sections des paramètres\",\n matchCount: (count) => `${n(count)} ${plural(count, \"résultat\", \"résultats\")}`,\n groups: {\n appearance: {\n title: \"Apparence\",\n help: \"Langue, thème et apparence de l’application sur cet appareil.\",\n },\n account: {\n title: \"Compte\",\n help: \"Votre profil et votre adresse e-mail.\",\n },\n security: {\n title: \"Sécurité\",\n help: \"Votre connexion, et les appareils où elle est ouverte.\",\n },\n notifications: {\n title: \"Notifications\",\n help: \"Quelles notifications vous recevez, quand et sur quels appareils.\",\n },\n data: {\n title: \"Données\",\n help: \"Exportez ce qui vous appartient, ou supprimez-le avec votre compte.\",\n },\n },\n },\n landing: {\n signIn: \"Se connecter\",\n requestAccess: \"Demander l’accès\",\n getStarted: \"Commencer\",\n tryDemo: \"Essayer la démo\",\n openApp: \"Ouvrir l’application\",\n continueDemo: \"Continuer la démo\",\n // As `legal.notice` (\"Bêta fermée\").\n beta: \"Bêta\",\n // Plain text: a mail's subject and body lines, never HTML. The no-break space\n // before the colon, as everywhere in this catalogue.\n accessSubject: (app) => (app ? `Accès à ${app}` : \"Demande d’accès\"),\n accessName: \"Nom\\u00a0:\",\n accessCompany: \"Entreprise\\u00a0:\",\n accessUse: \"Utilisation prévue\\u00a0:\",\n },\n demo: {\n starting: \"Démarrage de la démo…\",\n rateLimited: (minutes) =>\n minutes\n ? `Trop de démos depuis ce réseau. Réessayez dans ${n(minutes)}\\u00a0min.`\n : \"Trop de démos depuis ce réseau. Réessayez plus tard.\",\n capacity: \"La démo est complète pour le moment. Réessayez plus tard.\",\n unavailable: \"La démo n’est pas disponible pour le moment.\",\n failed: \"La démo n’a pas pu être lancée. Veuillez réessayer.\",\n // As `legal.backHome`.\n backToStart: \"Retour à l’accueil\",\n hoursLeft: (hours, minutes) => `Démo · il reste ${n(hours)}\\u00a0h ${n(minutes)}\\u00a0min`,\n minutesLeft: (minutes) => `Démo · il reste ${n(minutes)}\\u00a0min`,\n badge: \"Démo\",\n readOnly: \"Vous consultez des données d’exemple. Aucune modification n’est possible.\",\n sandbox: \"Ce que vous créez vous-même est supprimé à la fin de la démo.\",\n details: \"Détails de la démo\",\n writeLocked: \"Impossible dans la démo.\",\n endedTitle: \"La démo est terminée\",\n endedReadOnly: \"Les données d’exemple sont réinitialisées régulièrement.\",\n endedSandbox:\n \"Les données d’exemple sont réinitialisées régulièrement\\u202f; ce que vous avez créé dans la démo est supprimé.\",\n restart: \"Lancer une nouvelle démo\",\n },\n // 0.32.0 — docs/billing-harmonization.md §7, §10 and §12.24: \"formule\" is what is\n // bought (Free, Pro), \"abonnement\" the standing arrangement and the settings group;\n // \"résilier\", the word for ending a contract. \"Vous\".\n billing: {\n group: \"Abonnement\",\n plans: \"Formules\",\n interval: \"Période de facturation\",\n // Agreeing with \"période\".\n yearly: \"Annuelle\",\n monthly: \"Mensuelle\",\n // As `currency.currency`.\n currency: \"Devise\",\n perYear: \"par an\",\n perMonth: \"par mois\",\n vatIncluded: \"TVA incluse\",\n free: \"Gratuit\",\n notOffered: \"Non proposée pour cette période de facturation\",\n // As `progressBar.unlimited`.\n unlimited: \"Illimité\",\n limits: \"Limites\",\n features: \"Inclus\",\n current: \"Formule actuelle\",\n choose: (plan) => `Choisir ${plan}`,\n upgrade: (plan) => `Passer à ${plan}`,\n downgrade: (plan) => `Changer pour ${plan}`,\n isCurrent: \"C’est votre formule actuelle.\",\n pickFirst: \"Choisissez d’abord une formule.\",\n // Agreeing with \"abonnement\".\n status: {\n trialing: \"Essai\",\n active: \"Actif\",\n past_due: \"Paiement en retard\",\n canceled: \"Résilié\",\n expired: \"Expiré\",\n comped: \"Offert\",\n },\n trialEnding: (days) =>\n `Votre période d’essai se termine ${inDays(days)}. Vous pourrez ensuite continuer à tout consulter, mais il vous faudra une formule pour apporter des modifications.`,\n grantEnding: (days) =>\n `Votre accès gratuit se termine ${inDays(days)}. Vous pourrez ensuite continuer à tout consulter, mais il vous faudra une formule pour apporter des modifications.`,\n paymentFailed:\n \"Votre dernier paiement n’a pas abouti. Mettez à jour votre moyen de paiement pour conserver votre formule.\",\n planEnded:\n \"Votre formule a pris fin. Vous pouvez encore tout consulter et exporter\\u202f; choisissez une formule pour pouvoir de nouveau apporter des modifications.\",\n // Never why: the owner's payment status is the owner's personal data (§12.6).\n guestReadOnly: (item) =>\n item\n ? `«\\u202f${item}\\u202f» est en lecture seule pour le moment\\u202f; son propriétaire peut lever cette restriction.`\n : \"Ceci est en lecture seule pour le moment\\u202f; son propriétaire peut lever cette restriction.\",\n processing:\n \"Votre paiement est en cours de traitement. Votre formule démarre dès qu’il est confirmé\\u202f; cette page se met à jour d’elle-même.\",\n choosePlan: \"Choisir une formule\",\n updatePayment: \"Mettre à jour le moyen de paiement\",\n // 0.42 (§16.7 A): for an admin who isn't the buyer.\n paymentFailedAskBuyer: (buyer) =>\n buyer\n ? `Le paiement a échoué. ${buyer} peut mettre à jour le moyen de paiement.`\n : \"Le paiement a échoué. L’administrateur qui a souscrit l’abonnement peut mettre à jour le moyen de paiement.\",\n checkAgain: \"Vérifier à nouveau\",\n lockReason: \"Votre formule a pris fin. Choisissez une formule pour pouvoir de nouveau apporter des modifications.\",\n // As `characterCount.limitReached` (\"Limite de caractères atteinte\").\n limitReached: \"Limite de la formule atteinte\",\n limitUpgrade: \"Pour en ajouter davantage, choisissez une formule avec une limite plus élevée.\",\n limitContact: \"Pour en ajouter davantage, demandez-nous une limite plus élevée.\",\n askForMore: \"Demander plus\",\n // Both figures arrive formatted; \"sur\", as `characterCount.count`.\n usage: (used, limit) => `${used} sur ${limit}`,\n contactSubject: (dimension) => `Limite de la formule\\u00a0: ${dimension}`,\n // The toast's figure line (§14.11) and the plan change's over-limit lines (§14.12):\n // a key of its own for the space before the colon.\n limitUsageLine: (dimension, used, limit) => `${dimension}\\u00a0: ${used} sur ${limit}`,\n manage: \"Paiement et factures\",\n cancel: \"Résilier l’abonnement\",\n // §14.5: no customer at the provider yet, so no portal to open.\n notAtProvider:\n \"Rien à gérer pour l’instant. Les paiements et les factures apparaîtront ici dès que vous aurez une formule payante.\",\n // §14.4: the pay page's lines, built into its bundle.\n payOpening: \"Ouverture du paiement sécurisé…\",\n payNothing: \"Il n’y a rien à payer ici. Pour choisir une formule, revenez à l’application.\",\n payFailed: \"Le paiement n’a pas pu s’ouvrir. Veuillez revenir en arrière et réessayer dans un instant.\",\n payBack: \"Le paiement a été fermé. Vous pouvez revenir en arrière, ou recharger cette page pour le rouvrir.\",\n payDone: \"Paiement effectué. Vous pouvez fermer cette page.\",\n // 0.39 (§15.2.10): PlanSwitchConfirm.\n switchTitle: \"Changer de formule\",\n switchFromTo: (from, to) => `De ${from} à ${to}`,\n switchChargedNow: \"Débité maintenant\",\n switchCredited: \"Crédité sur vos prochains paiements\",\n switchNextCharge: (date) => `Prochain prélèvement le ${date}`,\n switchConfirm: \"Changer de formule\",\n // 0.42 (§16): the portal for the buyer only, the in-app cancel, the grant warning.\n buyerHolds: (buyer) =>\n buyer\n ? `Le moyen de paiement et les factures sont gérés par ${buyer}, qui a souscrit l’abonnement.`\n : \"Le moyen de paiement et les factures sont gérés par l’administrateur qui a souscrit l’abonnement.\",\n cancelConfirmTitle: \"Résilier l’abonnement\",\n cancelConfirmBody: (date) =>\n `Votre abonnement prendra fin le ${date}. D’ici là, tout fonctionne comme avant.`,\n cancelConfirmAction: \"Résilier maintenant\",\n keepSubscription: \"Conserver l’abonnement\",\n portalOpensNewTab: (provider, app) =>\n `Le paiement et les factures s’ouvrent chez ${provider} dans un nouvel onglet\\u202f; ${app ? `${app} reste ouvert ici` : \"cette page reste ouverte\"}.`,\n grantWarningTitle: \"Votre accès gratuit continue\",\n grantWarningBody:\n \"Votre accès gratuit n’a pas de date de fin. Tant qu’il dure, un achat ne change pas votre formule : vous paieriez pour une formule qui ne s’applique pas.\",\n grantWarningAction: \"Acheter quand même\",\n waitingChanges: (count) =>\n `${n(count)} ${plural(count, \"modification en attente\", \"modifications en attente\")} d’une formule`,\n // \"Abandonner\", as `wizard.cancelConfirmLabel`.\n discardWaiting: \"Abandonner les modifications en attente\",\n notConfigured: \"Les paiements ne sont pas encore configurés. Veuillez réessayer plus tard.\",\n disabled: \"Les abonnements ne sont pas disponibles ici.\",\n // §14.2: server-kit 0.7's refusals. \"Paiement et factures\", as `manage`.\n providerUnavailable:\n \"Le prestataire de paiement est injoignable pour le moment. Veuillez réessayer dans un instant.\",\n alreadySubscribed: \"Vous avez déjà un abonnement. Changez de formule ci-dessus.\",\n planNotSold:\n \"Cette formule n’est pas proposée pour cette période de facturation ou cette devise. Veuillez en choisir une autre.\",\n // 0.39 (§15.2.10): the plan switch's refusals.\n notSubscribed: \"Aucun abonnement en cours à modifier. Choisissez une formule pour vous abonner.\",\n planUnchanged: \"C’est déjà votre formule. Choisissez une autre formule ou une autre période de facturation.\",\n },\n // 0.33.0 — docs/billing-harmonization.md §14.12: the operator's plan parts, \"formule\"\n // as in `billing`. \"Vous\".\n planChange: {\n column: \"Formule\",\n title: \"Changer de formule\",\n confirm: \"Changer de formule\",\n plan: \"Formule\",\n current: (plan) => `Formule actuelle\\u00a0: ${plan}`,\n keepsItems: \"Une formule plus petite bloque seulement les nouvelles créations\\u202f; rien n’est supprimé.\",\n until: \"Gratuit jusqu’au\",\n untilHint: \"Laissez vide pour aucune fin. Une bêta en cours garde sa propre fin.\",\n needsChange: \"Choisissez une autre formule ou une date de fin.\",\n changed: (from, to) => `Formule changée de ${from} à ${to}.`,\n set: (to) => `Formule définie sur ${to}.`,\n keptBeta: \"La bêta garde sa fin\\u202f; seule la formule a changé.\",\n untilDone: (date) => `Gratuit jusqu’au ${date}.`,\n overLimit:\n \"Au-delà de la limite de la nouvelle formule\\u00a0: rien n’est supprimé, les nouveaux éléments sont bloqués.\",\n // Figures formatted; \"sur\", as `billing.usage`. The app's word follows the limit,\n // in its form (0.33.1): \"1 sur 1 budget\", \"1 sur 5 budgets\" — and French reads 0\n // as singular, which the forms' `one` covers.\n usageOf: (used, limit, dimension) => `${used} sur ${limit} ${dimension}`,\n },\n // 0.32.0 — docs/text-size-harmonization.md §6: the text-size and contrast settings in\n // the \"Apparence\" group. The steps agree with \"taille\", the modes with \"contraste\".\n appearance: {\n textSize: \"Taille du texte\",\n textSizeHelp: \"Des lettres plus grandes, et une mise en page qui leur fait de la place.\",\n textSizes: { normal: \"Normale\", large: \"Grande\", xlarge: \"Très grande\" },\n contrast: \"Contraste\",\n contrastHelp:\n \"Le contraste renforcé assombrit les textes discrets et les lignes, et épaissit les contours de focus. «\\u202fSystème\\u202f» suit le réglage de cet appareil.\",\n contrastModes: { system: \"Système\", standard: \"Standard\", more: \"Renforcé\" },\n saveFailed: \"Impossible de l’enregistrer dans votre compte. Le réglage s’applique tout de même sur cet appareil.\",\n // 0.46: DateFormatSetting (keksdose's words where it has them).\n dateFormat: \"Format de date\",\n dateFormatHelp:\n \"Comment les dates sont écrites dans toute l’app. Indépendant de la langue de l’interface, vous pouvez donc lire l’app en anglais et voir quand même des dates à la française.\",\n dateFormatAuto: \"Suivre la langue\",\n // 0.46: AccountMenuTextSize (keksdose live #426).\n textSmaller: \"Texte plus petit\",\n textLarger: \"Texte plus grand\",\n },\n // 0.36.0 — docs/settings-harmonization.md §11.3: resetting this device's settings, the\n // last card of \"Apparence\". \"Réglages\", as `contrastHelp` says \"réglage\".\n deviceReset: {\n title: \"Réinitialiser cet appareil\",\n description:\n \"Rétablit les valeurs par défaut de l’apparence de cet appareil et de l’état dans lequel ses tableaux et ses panneaux ont été laissés. Votre compte, vos données et votre connexion ne sont pas touchés.\",\n action: \"Réinitialiser les réglages de cet appareil\",\n confirmTitle: \"Réinitialiser les réglages de cet appareil ?\",\n confirmBody:\n \"Le thème, les couleurs, la taille du texte, le contraste et la langue reprennent ici leurs valeurs par défaut, et les tableaux et les panneaux s’ouvrent comme la première fois. Si votre compte définit une langue, une taille de texte ou un contraste, cet appareil s’y conforme de nouveau. Votre compte et vos autres appareils restent tels quels.\",\n confirmAction: \"Réinitialiser\",\n done: \"Les réglages de cet appareil ont retrouvé leurs valeurs par défaut.\",\n keywords: \"réinitialiser défaut appareil restaurer rétablir apparence tableaux disposition\",\n },\n rowActions: {\n actions: \"Actions\",\n actionsFor: (name) => `Actions pour ${name}`,\n },\n appShellMore: {\n more: \"Plus\",\n moreTitle: \"Autres pages\",\n },\n // 0.42.0 — docs/admin-harmonization.md §3.1: the admin area's shared words.\n mailTestCard: {\n title: \"E-mail de test\",\n description: \"Envoie un e-mail à votre propre adresse, par le transport avec lequel cette installation envoie tous ses e-mails.\",\n transport: (backend) => `Transport : ${backend}`,\n action: \"M’envoyer un e-mail de test\",\n sent: (address) => `Envoyé à ${address}. Vérifiez la boîte de réception.`,\n console: \"Le transport console ne fait que journaliser les e-mails ; rien n’a été envoyé.\",\n failed: \"Envoi impossible. Le journal du serveur contient la réponse du fournisseur.\",\n rateLimited,\n keywords: \"e-mail test courriel transport smtp resend console envoyer distribution\",\n },\n adminArea: {\n title: \"Administration\",\n waiting: (count) => `${n(count)} en attente`,\n waitingLabel: (label, count) => `${label}, ${n(count)} en attente`,\n forbiddenTitle: \"Réservé aux administrateurs\",\n forbiddenBody: (appName) =>\n `C’est ici que les administrateurs gèrent ${appName}. Votre compte ne peut pas ouvrir cette page.`,\n forbiddenHome: \"Aller à la page d’accueil\",\n forbiddenReviewer: \"Relire les traductions\",\n sections: {\n overview: { title: \"Vue d’ensemble\", help: \"Ce qui est en attente, en un coup d’œil.\" },\n users: { title: \"Utilisateurs\", help: \"Qui a un compte, et ce que chacun peut faire.\" },\n invitations: { title: \"Invitations\", help: \"Invitez des personnes par e-mail dans leur langue\\u202f; renvoyez ou révoquez les invitations encore ouvertes.\" },\n billing: { title: \"Facturation\", help: \"L’offre, le paiement et les factures.\" },\n activity: { title: \"Activité\", help: \"Ce que les administrateurs ont fait, du plus récent au plus ancien.\" },\n },\n tiles: {\n feedbackWaiting: \"À trier\",\n deletionRequests: \"Demandes de suppression\",\n invitationsPending: \"Invitations en attente\",\n users: \"Utilisateurs\",\n usersNew: (count) => `${n(count)} ${plural(count, \"nouveau\", \"nouveaux\")} en 7 jours`,\n awaitingVerdict: \"En attente d’un verdict\",\n awaitingVerdictHint: \"Traités, en attente de votre confirmation ou de celle de la personne qui les a signalés\",\n releasedForWork: \"Prêts à traiter\",\n releasedForWorkHint: \"Prêts, reprise demandée ou en cours\",\n },\n overviewError: \"La vue d’ensemble n’a pas pu être chargée.\",\n retry: \"Réessayer\",\n tools: \"Outils\",\n },\n // 0.42.0 — docs/top-bar-harmonization.md §3.1: the top bar's shared parts, keksdose's\n // reviewed sync words where they are not about its budgets; \"formule\" as `billing`.\n topBarParts: {\n tours: {\n menu: \"Visites guidées\",\n newDot: \"Nouvelles visites\",\n thisPage: \"Sur cette page\",\n newTours: \"Nouvelles visites\",\n allTours: \"Toutes les visites…\",\n badgeNew: \"Nouveau\",\n completed: \"Terminée\",\n badgeUpdated: \"Mise à jour\",\n updatedDot: \"Visites mises à jour\",\n newAndUpdated: \"Nouvelles et mises à jour\",\n },\n sync: {\n blocked: (count) =>\n `${n(count)} ${plural(count, \"modification ne peut pas être envoyée\", \"modifications ne peuvent pas être envoyées\")} depuis cet appareil`,\n offline: \"Hors ligne — les modifications sont enregistrées sur cet appareil et seront synchronisées à la reconnexion\",\n refused: \"Le serveur a refusé la dernière synchronisation\",\n syncing: \"Synchronisation…\",\n pending: (count) =>\n `${n(count)} ${plural(count, \"modification\", \"modifications\")} en attente de synchronisation`,\n syncedAt: (time) => `Synchronisé à ${time}`,\n idle: \"À jour\",\n syncHint: \"Touchez pour synchroniser maintenant\",\n offlineHint: \"rien à synchroniser hors ligne\",\n withHint: (state, hint) => `${state} — ${hint}`,\n scoped: (scope, state) => `${scope}\\u00a0: ${state}`,\n offlineShort: \"Hors ligne\",\n syncingShort: \"Synchronisation…\",\n waitingShort: (count) => `${n(count)} en attente`,\n refusedShort: \"Non synchronisé\",\n offlineUnsaved: \"Hors ligne — les modifications ne peuvent pas être enregistrées avant la reconnexion\",\n saving: \"Enregistrement…\",\n },\n dev: {\n roleHeading: \"Dev · rôle\",\n switchPlan: \"Changer de formule\",\n plan: (value) => `Formule\\u00a0: ${value}`,\n planHeading: \"Dev · formule\",\n backTo: (role) => `Revenir à ${role}`,\n billingOff: \"La facturation est désactivée en local\\u00a0: les formules ne changent rien\",\n },\n },\n // 0.45.0 — docs/local-first-harmonization.md §1.6 (`@eifi1/ui-kit/offline`): keksdose's\n // reviewed words (nav.logout_queued_*, pwa.*) where it has the language.\n signOutPending: {\n title: \"Certaines modifications ne sont pas encore enregistrées sur le serveur\",\n lost: (count) =>\n count < 2\n ? `${n(count)} modification attend encore la synchronisation. La déconnexion efface la copie de cet appareil, et c’est la seule.`\n : `${n(count)} modifications attendent encore la synchronisation. La déconnexion efface la copie de cet appareil, et c’est la seule.`,\n kept: (count) =>\n count < 2\n ? `${n(count)} modification attend encore la synchronisation. Elle reste sur cet appareil pour vous et sera synchronisée à votre prochaine connexion ici.`\n : `${n(count)} modifications attendent encore la synchronisation. Elles restent sur cet appareil pour vous et seront synchronisées à votre prochaine connexion ici.`,\n syncNow: \"Synchroniser maintenant\",\n signOutAnyway: \"Se déconnecter quand même\",\n discardWaiting: \"Abandonner les modifications en attente\",\n cancel: \"Annuler\",\n },\n pwaUpdate: {\n updateAvailable: \"Une nouvelle version est disponible.\",\n reload: \"Recharger\",\n },\n sharedComputer: {\n label: \"C’est un ordinateur partagé\",\n hint: \"Aucune copie de vos données ne reste sur cet appareil. Les pages ne s’ouvrent alors qu’avec une connexion.\",\n },\n };\n}\n\nexport const UI_KIT_LABELS_FR: UiKitLabels = uiKitLabelsFr();\n"],"mappings":"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","names":[]}