@eifi1/ui-kit 0.28.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +44 -4
  2. package/dist/account/account-parts.d.ts +21 -0
  3. package/dist/account/account-parts.js +40 -0
  4. package/dist/account/account-parts.js.map +1 -0
  5. package/dist/account/data-export-setting.d.ts +73 -0
  6. package/dist/account/data-export-setting.js +113 -0
  7. package/dist/account/data-export-setting.js.map +1 -0
  8. package/dist/account/delete-account-setting.d.ts +91 -0
  9. package/dist/account/delete-account-setting.js +199 -0
  10. package/dist/account/delete-account-setting.js.map +1 -0
  11. package/dist/account/email-change-setting.d.ts +136 -0
  12. package/dist/account/email-change-setting.js +277 -0
  13. package/dist/account/email-change-setting.js.map +1 -0
  14. package/dist/account/sessions-setting.d.ts +110 -0
  15. package/dist/account/sessions-setting.js +146 -0
  16. package/dist/account/sessions-setting.js.map +1 -0
  17. package/dist/admin/admin-action-confirm.d.ts +91 -0
  18. package/dist/admin/admin-action-confirm.js +276 -0
  19. package/dist/admin/admin-action-confirm.js.map +1 -0
  20. package/dist/admin/admin-action-log.d.ts +105 -0
  21. package/dist/admin/admin-action-log.js +153 -0
  22. package/dist/admin/admin-action-log.js.map +1 -0
  23. package/dist/admin/admin-parts.d.ts +40 -0
  24. package/dist/admin/admin-parts.js +45 -0
  25. package/dist/admin/admin-parts.js.map +1 -0
  26. package/dist/admin/invitations-panel.d.ts +91 -0
  27. package/dist/admin/invitations-panel.js +289 -0
  28. package/dist/admin/invitations-panel.js.map +1 -0
  29. package/dist/admin/reviewer-scope-editor.d.ts +91 -0
  30. package/dist/admin/reviewer-scope-editor.js +134 -0
  31. package/dist/admin/reviewer-scope-editor.js.map +1 -0
  32. package/dist/admin/role-select.d.ts +91 -0
  33. package/dist/admin/role-select.js +128 -0
  34. package/dist/admin/role-select.js.map +1 -0
  35. package/dist/admin/transfer-ownership-dialog.d.ts +91 -0
  36. package/dist/admin/transfer-ownership-dialog.js +83 -0
  37. package/dist/admin/transfer-ownership-dialog.js.map +1 -0
  38. package/dist/admin/user-roster.d.ts +91 -0
  39. package/dist/admin/user-roster.js +285 -0
  40. package/dist/admin/user-roster.js.map +1 -0
  41. package/dist/auth/accept-invitation.d.ts +90 -0
  42. package/dist/auth/accept-invitation.js +117 -0
  43. package/dist/auth/accept-invitation.js.map +1 -0
  44. package/dist/auth/auth-errors.d.ts +139 -0
  45. package/dist/auth/auth-errors.js +92 -0
  46. package/dist/auth/auth-errors.js.map +1 -0
  47. package/dist/auth/complete-name-dialog.d.ts +71 -0
  48. package/dist/auth/complete-name-dialog.js +168 -0
  49. package/dist/auth/complete-name-dialog.js.map +1 -0
  50. package/dist/auth/email-tag.d.ts +60 -0
  51. package/dist/auth/email-tag.js +23 -0
  52. package/dist/auth/email-tag.js.map +1 -0
  53. package/dist/auth/forgot-password-form.d.ts +86 -0
  54. package/dist/auth/forgot-password-form.js +123 -0
  55. package/dist/auth/forgot-password-form.js.map +1 -0
  56. package/dist/auth/form-rules.d.ts +27 -0
  57. package/dist/auth/form-rules.js +23 -0
  58. package/dist/auth/form-rules.js.map +1 -0
  59. package/dist/auth/new-password-fields.d.ts +38 -0
  60. package/dist/auth/new-password-fields.js +54 -0
  61. package/dist/auth/new-password-fields.js.map +1 -0
  62. package/dist/auth/not-found-page.d.ts +57 -0
  63. package/dist/auth/not-found-page.js +40 -0
  64. package/dist/auth/not-found-page.js.map +1 -0
  65. package/dist/auth/register-form.d.ts +91 -0
  66. package/dist/auth/register-form.js +270 -0
  67. package/dist/auth/register-form.js.map +1 -0
  68. package/dist/auth/reset-password-form.d.ts +131 -0
  69. package/dist/auth/reset-password-form.js +167 -0
  70. package/dist/auth/reset-password-form.js.map +1 -0
  71. package/dist/auth/sign-in-form.d.ts +295 -0
  72. package/dist/auth/sign-in-form.js +426 -0
  73. package/dist/auth/sign-in-form.js.map +1 -0
  74. package/dist/auth/status-parts.d.ts +78 -0
  75. package/dist/auth/status-parts.js +83 -0
  76. package/dist/auth/status-parts.js.map +1 -0
  77. package/dist/auth/verify-email.d.ts +126 -0
  78. package/dist/auth/verify-email.js +243 -0
  79. package/dist/auth/verify-email.js.map +1 -0
  80. package/dist/chart.d.ts +25 -5
  81. package/dist/components/account-chips.d.ts +47 -7
  82. package/dist/components/account-chips.js +19 -3
  83. package/dist/components/account-chips.js.map +1 -1
  84. package/dist/components/account-settings-labels.d.ts +12 -1
  85. package/dist/components/account-settings-labels.js +4 -1
  86. package/dist/components/account-settings-labels.js.map +1 -1
  87. package/dist/components/account-settings.d.ts +61 -6
  88. package/dist/components/account-settings.js +115 -15
  89. package/dist/components/account-settings.js.map +1 -1
  90. package/dist/components/amount-input.d.ts +26 -5
  91. package/dist/components/button-group.d.ts +26 -5
  92. package/dist/components/calculator.d.ts +26 -5
  93. package/dist/components/confirm-dialog.d.ts +26 -5
  94. package/dist/components/copy-button.d.ts +23 -2
  95. package/dist/components/danger-confirm.d.ts +26 -5
  96. package/dist/components/facing-pair.d.ts +26 -5
  97. package/dist/components/file-button.d.ts +26 -5
  98. package/dist/components/file-dropzone.d.ts +26 -5
  99. package/dist/components/form-actions.d.ts +26 -5
  100. package/dist/components/iban-input.d.ts +26 -5
  101. package/dist/components/language-select.d.ts +26 -12
  102. package/dist/components/legal-page.d.ts +26 -5
  103. package/dist/components/legal.d.ts +26 -5
  104. package/dist/components/money-field.d.ts +26 -5
  105. package/dist/components/number-field.d.ts +26 -5
  106. package/dist/components/number-input.d.ts +26 -5
  107. package/dist/components/numpad-sheet.d.ts +26 -5
  108. package/dist/components/phone-input.d.ts +26 -5
  109. package/dist/components/series-chart.d.ts +26 -5
  110. package/dist/components/settings-fields.d.ts +25 -7
  111. package/dist/components/share-card.d.ts +25 -4
  112. package/dist/components/text-link.d.ts +26 -5
  113. package/dist/components/time-input.d.ts +26 -5
  114. package/dist/components/ui.d.ts +23 -2
  115. package/dist/components/user-avatar.d.ts +16 -2
  116. package/dist/components/user-avatar.js +7 -3
  117. package/dist/components/user-avatar.js.map +1 -1
  118. package/dist/{kit-labels-Du0uHBq4.d.ts → delete-account-setting-CGVMckMw.d.ts} +6654 -5302
  119. package/dist/feedback/feedback-attachment.d.ts +26 -5
  120. package/dist/feedback/feedback-context.d.ts +26 -5
  121. package/dist/feedback/feedback-crash.d.ts +26 -5
  122. package/dist/feedback/feedback-dialog.d.ts +26 -5
  123. package/dist/feedback/feedback-inbox.d.ts +26 -5
  124. package/dist/feedback/feedback-labels.d.ts +26 -5
  125. package/dist/feedback/feedback-menu.d.ts +26 -5
  126. package/dist/feedback/feedback-record.d.ts +26 -5
  127. package/dist/feedback/feedback-row-detail.d.ts +26 -5
  128. package/dist/feedback/feedback-status-undo.d.ts +26 -5
  129. package/dist/feedback/feedback-submit.d.ts +26 -5
  130. package/dist/feedback/feedback-swipe.d.ts +26 -5
  131. package/dist/feedback/feedback-table.d.ts +23 -2
  132. package/dist/feedback/feedback-thread.d.ts +26 -5
  133. package/dist/feedback.d.ts +26 -5
  134. package/dist/hooks/use-anchored-panel.d.ts +6 -2
  135. package/dist/hooks/use-anchored-panel.js +2 -1
  136. package/dist/hooks/use-anchored-panel.js.map +1 -1
  137. package/dist/hooks/use-file-drop.d.ts +26 -5
  138. package/dist/i18n/defaults.d.ts +26 -5
  139. package/dist/i18n/defaults.js +40 -0
  140. package/dist/i18n/defaults.js.map +1 -1
  141. package/dist/i18n/german.d.ts +26 -5
  142. package/dist/i18n/german.js +343 -2
  143. package/dist/i18n/german.js.map +1 -1
  144. package/dist/i18n/kit-labels.d.ts +23 -2
  145. package/dist/i18n/kit-labels.js.map +1 -1
  146. package/dist/i18n/languages.d.ts +21 -204
  147. package/dist/i18n/locales/de-CH.d.ts +26 -5
  148. package/dist/i18n/locales/en.d.ts +26 -5
  149. package/dist/i18n/locales/es.d.ts +26 -5
  150. package/dist/i18n/locales/es.js +337 -3
  151. package/dist/i18n/locales/es.js.map +1 -1
  152. package/dist/i18n/locales/fr.d.ts +26 -5
  153. package/dist/i18n/locales/fr.js +344 -2
  154. package/dist/i18n/locales/fr.js.map +1 -1
  155. package/dist/i18n/locales/hu.d.ts +26 -5
  156. package/dist/i18n/locales/hu.js +337 -3
  157. package/dist/i18n/locales/hu.js.map +1 -1
  158. package/dist/i18n/locales/it.d.ts +26 -5
  159. package/dist/i18n/locales/it.js +342 -2
  160. package/dist/i18n/locales/it.js.map +1 -1
  161. package/dist/i18n/locales/zh.d.ts +26 -5
  162. package/dist/i18n/locales/zh.js +333 -2
  163. package/dist/i18n/locales/zh.js.map +1 -1
  164. package/dist/i18n/review.d.ts +26 -5
  165. package/dist/i18n/review.js +45 -1
  166. package/dist/i18n/review.js.map +1 -1
  167. package/dist/index.d.ts +19 -3
  168. package/dist/index.js +89 -0
  169. package/dist/index.js.map +1 -1
  170. package/dist/lib/person-name.d.ts +69 -0
  171. package/dist/lib/person-name.js +65 -0
  172. package/dist/lib/person-name.js.map +1 -0
  173. package/dist/rhf/fields.d.ts +26 -5
  174. package/dist/rhf/form.d.ts +26 -5
  175. package/dist/rhf.d.ts +26 -5
  176. package/dist/shell/app-shell.d.ts +26 -5
  177. package/dist/shell/company-switcher.d.ts +59 -0
  178. package/dist/shell/company-switcher.js +85 -0
  179. package/dist/shell/company-switcher.js.map +1 -0
  180. package/dist/shell/top-bar-brand.d.ts +26 -5
  181. package/dist/shell/topbar-action-menu.d.ts +1 -0
  182. package/dist/shell.d.ts +20 -5
  183. package/dist/wizard/stepper-nav.d.ts +26 -5
  184. package/dist/wizard.d.ts +26 -5
  185. package/package.json +1 -1
  186. package/src/account/account-parts.ts +67 -0
  187. package/src/account/data-export-setting.tsx +218 -0
  188. package/src/account/delete-account-setting.tsx +362 -0
  189. package/src/account/email-change-setting.tsx +457 -0
  190. package/src/account/sessions-setting.tsx +283 -0
  191. package/src/admin/admin-action-confirm.tsx +495 -0
  192. package/src/admin/admin-action-log.tsx +297 -0
  193. package/src/admin/admin-parts.ts +82 -0
  194. package/src/admin/invitations-panel.tsx +516 -0
  195. package/src/admin/reviewer-scope-editor.tsx +234 -0
  196. package/src/admin/role-select.tsx +286 -0
  197. package/src/admin/transfer-ownership-dialog.tsx +172 -0
  198. package/src/admin/user-roster.tsx +573 -0
  199. package/src/auth/accept-invitation.tsx +227 -0
  200. package/src/auth/auth-errors.ts +262 -0
  201. package/src/auth/complete-name-dialog.tsx +253 -0
  202. package/src/auth/email-tag.ts +75 -0
  203. package/src/auth/forgot-password-form.tsx +229 -0
  204. package/src/auth/form-rules.ts +40 -0
  205. package/src/auth/new-password-fields.tsx +85 -0
  206. package/src/auth/not-found-page.tsx +98 -0
  207. package/src/auth/register-form.tsx +477 -0
  208. package/src/auth/reset-password-form.tsx +351 -0
  209. package/src/auth/sign-in-form.tsx +859 -0
  210. package/src/auth/status-parts.tsx +138 -0
  211. package/src/auth/verify-email.tsx +409 -0
  212. package/src/components/account-chips.tsx +64 -7
  213. package/src/components/account-settings-labels.ts +15 -1
  214. package/src/components/account-settings.tsx +199 -23
  215. package/src/components/user-avatar.tsx +22 -4
  216. package/src/hooks/use-anchored-panel.ts +14 -3
  217. package/src/i18n/defaults.ts +40 -0
  218. package/src/i18n/german.ts +379 -0
  219. package/src/i18n/kit-labels.tsx +60 -0
  220. package/src/i18n/locales/es.ts +371 -1
  221. package/src/i18n/locales/fr.ts +379 -0
  222. package/src/i18n/locales/hu.ts +366 -1
  223. package/src/i18n/locales/it.ts +373 -0
  224. package/src/i18n/locales/zh.ts +343 -0
  225. package/src/i18n/review.ts +44 -0
  226. package/src/index.ts +146 -0
  227. package/src/lib/person-name.ts +157 -0
  228. package/src/shell/company-switcher.tsx +140 -0
@@ -4,6 +4,8 @@ function uiKitLabelsFr(numberLocale = "fr-FR") {
4
4
  const num = new Intl.NumberFormat(numberLocale);
5
5
  const n = (value) => num.format(value);
6
6
  const plural = (count, one, many) => count < 2 ? one : many;
7
+ const wait = (seconds) => seconds < 60 ? `${n(Math.ceil(seconds))}\xA0s` : `${n(Math.ceil(seconds / 60))}\xA0min`;
8
+ const rateLimited = (seconds) => !seconds || seconds <= 0 ? "Trop de tentatives. Veuillez patienter un instant, puis r\xE9essayer." : `Trop de tentatives. R\xE9essayez dans ${wait(seconds)}.`;
7
9
  return {
8
10
  feedbackAttachment: {
9
11
  attachmentAdd: "Ajouter une pi\xE8ce jointe",
@@ -134,7 +136,10 @@ function uiKitLabelsFr(numberLocale = "fr-FR") {
134
136
  role: "R\xF4le",
135
137
  memberSince: "Membre depuis",
136
138
  displayName: "Nom affich\xE9",
137
- save: "Enregistrer"
139
+ save: "Enregistrer",
140
+ firstName: "Pr\xE9nom",
141
+ lastName: "Nom",
142
+ nameRequired: "Saisissez un pr\xE9nom et un nom."
138
143
  },
139
144
  password: {
140
145
  title: "Changer le mot de passe",
@@ -672,7 +677,9 @@ function uiKitLabelsFr(numberLocale = "fr-FR") {
672
677
  invited: "Invit\xE9",
673
678
  registered: "Inscrit",
674
679
  unverified: "Non v\xE9rifi\xE9",
675
- passwordChange: "Doit changer de mot de passe"
680
+ passwordChange: "Doit changer de mot de passe",
681
+ deletion: "Suppression demand\xE9e",
682
+ deletionOn: (date) => `Suppression le ${date}`
676
683
  },
677
684
  shareCard: {
678
685
  dialogTitle: "Partager",
@@ -809,6 +816,341 @@ L\u2019adresse postale compl\xE8te est communiqu\xE9e sur demande aux personnes
809
816
  }
810
817
  }
811
818
  },
819
+ // 0.29.0 — docs/auth-harmonization.md: keksdose's reviewed French (auth.*,
820
+ // verify_email, error.not_found_*, budget_share.join_*), kastlan's for the names and
821
+ // the 2FA prompt; written fresh where neither app had the sentence. Spaced as this
822
+ // catalogue writes it (\u00a0 before ":", \u202f before "?" and ";"), "l’application"
823
+ // where keksdose writes "l’app".
824
+ signIn: {
825
+ email: "E-mail",
826
+ password: "Mot de passe",
827
+ submit: "Se connecter",
828
+ passkey: "Se connecter avec une cl\xE9 d\u2019acc\xE8s",
829
+ forgotPassword: "Mot de passe oubli\xE9\u202F?",
830
+ noAccount: "Pas encore de compte\u202F?",
831
+ register: "Cr\xE9er un compte",
832
+ invalidCredentials: "L\u2019adresse e-mail ou le mot de passe est incorrect.",
833
+ failed: "\xC9chec de la connexion. Veuillez r\xE9essayer.",
834
+ passkeyFailed: "\xC9chec de la connexion par cl\xE9 d\u2019acc\xE8s.",
835
+ deactivatedHint: "Compte d\xE9sactiv\xE9\u202F? \xC9crivez \xE0 {contact}.",
836
+ // "Compte créé avec…" rather than "Inscrit avec…", which would need a gender.
837
+ tagHint: (taggedAddress) => `Compte cr\xE9\xE9 avec ${taggedAddress}\u202F? Utilisez cette adresse.`,
838
+ twoFactorTitle: "Authentification \xE0 deux facteurs",
839
+ twoFactorIntro: "Saisissez le code affich\xE9 par votre application d\u2019authentification.",
840
+ code: "Code 2FA",
841
+ verify: "V\xE9rifier",
842
+ codeInvalid: "Code 2FA invalide.",
843
+ setPasswordTitle: "Choisir un nouveau mot de passe",
844
+ setPasswordIntro: "Un nouveau mot de passe a \xE9t\xE9 demand\xE9 pour ce compte. Choisissez-en un et vous \xEAtes aussit\xF4t de retour.",
845
+ newPassword: "Nouveau mot de passe",
846
+ confirmPassword: "R\xE9p\xE9ter le nouveau mot de passe",
847
+ passwordMismatch: "Les mots de passe ne correspondent pas.",
848
+ setPasswordSubmit: "D\xE9finir le mot de passe et se connecter",
849
+ setPasswordFailed: "Le mot de passe n\u2019a pas pu \xEAtre d\xE9fini.",
850
+ expired: "Cette connexion a expir\xE9. Veuillez vous reconnecter.",
851
+ backToSignIn: "Retour \xE0 la connexion",
852
+ // kastlan's backup-code words ("code de secours" — not keksdose's "code de
853
+ // récupération", which is the key of its end-to-end encryption).
854
+ useRecoveryCode: "Utiliser un code de secours",
855
+ useAuthenticatorCode: "Utiliser votre application d\u2019authentification",
856
+ recoveryCode: "Code de secours",
857
+ recoveryIntro: "Saisissez l\u2019un des codes de secours que vous avez enregistr\xE9s en activant l\u2019authentification \xE0 deux facteurs.",
858
+ recoveryCodeHint: (length) => `${n(length)} lettres et chiffres. Les tirets et les espaces ne comptent pas.`,
859
+ recoveryCodeInvalid: "Ce code de secours n\u2019est pas valable ou a d\xE9j\xE0 \xE9t\xE9 utilis\xE9.",
860
+ rateLimited
861
+ },
862
+ register: {
863
+ firstName: "Pr\xE9nom",
864
+ lastName: "Nom",
865
+ email: "E-mail",
866
+ emailTagUse: (address) => `Utiliser ${address}`,
867
+ emailTagHint: "Beaucoup de fournisseurs livrent nom+tag@\u2026 dans la m\xEAme bo\xEEte, ce qui rend le courrier de cette application filtrable et tra\xE7able. V\xE9rifiez que le v\xF4tre le fait avant de vous y fier\xA0: vous vous connecteriez avec l\u2019adresse marqu\xE9e.",
868
+ invitedEmailHint: "L\u2019adresse \xE0 laquelle votre invitation a \xE9t\xE9 envoy\xE9e.",
869
+ invitedTagNote: "L\u2019adresse marqu\xE9e re\xE7oit son propre e-mail de confirmation.",
870
+ password: "Mot de passe",
871
+ confirmPassword: "R\xE9p\xE9ter le mot de passe",
872
+ passwordMismatch: "Les mots de passe ne correspondent pas.",
873
+ language: "Langue",
874
+ submit: "Cr\xE9er un compte",
875
+ haveAccount: "D\xE9j\xE0 un compte\u202F?",
876
+ signIn: "Se connecter",
877
+ emailTaken: "Un compte existe d\xE9j\xE0 avec cette adresse e-mail.",
878
+ registrationClosed: "Les nouveaux comptes ne sont cr\xE9\xE9s que sur invitation. Demandez \xE0 l\u2019exploitant d\u2019inviter votre adresse e-mail.",
879
+ invitationInvalid: "Ce lien d\u2019invitation n\u2019est pas valide.",
880
+ invitationExpired: "Cette invitation a expir\xE9. Demandez-en une nouvelle.",
881
+ failed: "\xC9chec de l\u2019inscription. Veuillez r\xE9essayer.",
882
+ rateLimited
883
+ },
884
+ completeName: {
885
+ title: "Compl\xE9tez votre nom",
886
+ description: "Le pr\xE9nom et le nom sont d\xE9sormais demand\xE9s s\xE9par\xE9ment. V\xE9rifiez ce qui est d\xE9j\xE0 rempli et ajoutez ce qui manque.",
887
+ firstName: "Pr\xE9nom",
888
+ lastName: "Nom",
889
+ save: "Enregistrer",
890
+ later: "Plus tard",
891
+ failed: "Votre nom n\u2019a pas pu \xEAtre enregistr\xE9. Veuillez r\xE9essayer."
892
+ },
893
+ forgotPassword: {
894
+ title: "Mot de passe oubli\xE9",
895
+ intro: "Saisissez l\u2019adresse e-mail de votre compte. Nous vous enverrons un lien pour choisir un nouveau mot de passe.",
896
+ email: "E-mail",
897
+ submit: "Envoyer le lien",
898
+ sent: (email) => `S\u2019il existe un compte pour ${email}, le lien est en route.`,
899
+ sentHint: "Le lien est valable une heure et ne fonctionne qu\u2019une seule fois. V\xE9rifiez aussi votre dossier de courrier ind\xE9sirable.",
900
+ backToSignIn: "Retour \xE0 la connexion",
901
+ error: "La demande a \xE9chou\xE9. Veuillez r\xE9essayer plus tard.",
902
+ rateLimited
903
+ },
904
+ resetPassword: {
905
+ title: "Choisir un nouveau mot de passe",
906
+ checking: "V\xE9rification du lien\u2026",
907
+ intro: (email) => `Vous d\xE9finissez un nouveau mot de passe pour ${email}.`,
908
+ newPassword: "Nouveau mot de passe",
909
+ confirmPassword: "R\xE9p\xE9ter le nouveau mot de passe",
910
+ mismatch: "Les mots de passe ne correspondent pas.",
911
+ submit: "Enregistrer le mot de passe",
912
+ failed: "Le mot de passe n\u2019a pas pu \xEAtre chang\xE9.",
913
+ noToken: "Ce lien est incomplet.",
914
+ invalid: "Ce lien est invalide ou a expir\xE9.",
915
+ invalidHint: "Les liens sont valables une heure et ne fonctionnent qu\u2019une fois. Demandez simplement un nouveau lien.",
916
+ requestNew: "Demander un nouveau lien",
917
+ success: "Votre mot de passe a \xE9t\xE9 chang\xE9. Vous pouvez vous connecter avec d\xE8s maintenant.",
918
+ sessionsEnded: "Les appareils connect\xE9s ont \xE9t\xE9 d\xE9connect\xE9s \u2014 vous devrez vous y reconnecter.",
919
+ signIn: "Aller \xE0 la connexion",
920
+ rateLimited
921
+ },
922
+ verifyEmail: {
923
+ title: "Confirmez votre adresse e-mail",
924
+ verifying: "Confirmation\u2026",
925
+ verified: "Votre adresse e-mail est confirm\xE9e.",
926
+ continue: "Continuer",
927
+ invalid: "Ce lien de confirmation n\u2019est pas valide",
928
+ expired: "Ce lien de confirmation a expir\xE9",
929
+ noToken: "Ce lien n\u2019a pas de jeton de confirmation.",
930
+ invalidHint: "Le lien a peut-\xEAtre expir\xE9 ou d\xE9j\xE0 \xE9t\xE9 utilis\xE9.",
931
+ requestInApp: "Vous pouvez en demander un nouveau depuis l\u2019application.",
932
+ requestHere: "Vous pouvez en demander un nouveau ici.",
933
+ resend: "Envoyer \xE0 nouveau",
934
+ resendIn: (seconds) => `Envoyer \xE0 nouveau dans ${n(seconds)}\xA0s`,
935
+ resent: "E-mail de confirmation envoy\xE9",
936
+ resendError: "Impossible d\u2019envoyer l\u2019e-mail de confirmation",
937
+ banner: "Veuillez confirmer votre adresse e-mail.",
938
+ dismiss: "Pas maintenant"
939
+ },
940
+ notFound: {
941
+ title: "Page introuvable",
942
+ body: "Cette adresse n\u2019existe pas (ou plus). Peut-\xEAtre une faute de frappe, ou la page a \xE9t\xE9 d\xE9plac\xE9e.",
943
+ home: "Aller \xE0 la page d\u2019accueil",
944
+ app: "Retour \xE0 l\u2019application"
945
+ },
946
+ acceptInvitation: {
947
+ title: "Accepter l\u2019invitation",
948
+ accepting: "Acceptation de l\u2019invitation\u2026",
949
+ accepted: "Invitation accept\xE9e.",
950
+ joined: (name) => `Vous avez rejoint ${name}.`,
951
+ continue: "Continuer",
952
+ invalid: "Impossible de rejoindre avec ce lien",
953
+ expired: "Cette invitation a expir\xE9",
954
+ noToken: "Ce lien n\u2019a pas de jeton d\u2019invitation.",
955
+ // Without "qui vous a invité(e)", which would need a gender.
956
+ askAgain: "Demandez une nouvelle invitation \xE0 la personne qui vous l\u2019a envoy\xE9e.",
957
+ signInFirst: "Connectez-vous pour accepter cette invitation",
958
+ signInHint: "Utilisez le compte auquel l\u2019invitation a \xE9t\xE9 envoy\xE9e.",
959
+ signIn: "Se connecter",
960
+ register: "Cr\xE9er un compte"
961
+ },
962
+ companySwitcher: {
963
+ switchCompany: "Changer d\u2019entreprise",
964
+ heading: "Entreprises",
965
+ current: (name) => `Entreprise\xA0: ${name}`,
966
+ // Agreeing with "entreprise" (feminine).
967
+ currentMark: "(actuelle)",
968
+ switching: "Changement d\u2019entreprise\u2026"
969
+ },
970
+ // 0.30.0 — docs/user-admin-harmonization.md: keksdose's reviewed French for the admin
971
+ // words (admin.users.*), Kurvenschmiede's for transfer, invitations and sessions,
972
+ // kastlan's for the company, the throttle and "Se déconnecter partout"; written fresh
973
+ // where no app had the sentence. Phrased so that no sentence about the reader needs
974
+ // a gender ("déconnecté·e").
975
+ emailChange: {
976
+ title: "Adresse e-mail",
977
+ current: "Adresse actuelle",
978
+ newEmail: "Nouvelle adresse e-mail",
979
+ password: "Mot de passe actuel",
980
+ passwordHint: "Votre adresse sert \xE0 vous connecter, c\u2019est pourquoi la changer demande votre mot de passe.",
981
+ emailTagUse: (address) => `Utiliser ${address}`,
982
+ emailTagHint: "Beaucoup de fournisseurs livrent nom+tag@\u2026 dans la m\xEAme bo\xEEte, ce qui rend le courrier de cette application filtrable et tra\xE7able. V\xE9rifiez que le v\xF4tre le fait avant de vous y fier\xA0: vous vous connecteriez avec l\u2019adresse marqu\xE9e.",
983
+ submit: "Changer d\u2019adresse e-mail",
984
+ sameAsCurrent: "C\u2019est d\xE9j\xE0 votre adresse.",
985
+ emailTaken: "Un compte existe d\xE9j\xE0 avec cette adresse e-mail.",
986
+ wrongPassword: "Le mot de passe est incorrect.",
987
+ pending: (newEmail) => `Confirmez le lien que nous avons envoy\xE9 \xE0 ${newEmail}.`,
988
+ pendingHint: (currentEmail) => `D\u2019ici l\xE0, vous continuez \xE0 vous connecter avec ${currentEmail}. V\xE9rifiez aussi votre dossier de courrier ind\xE9sirable.`,
989
+ resend: "Renvoyer le lien",
990
+ resent: "Nous avons renvoy\xE9 le lien.",
991
+ cancel: "Annuler le changement",
992
+ confirmed: (email) => `Votre adresse e-mail est d\xE9sormais ${email}.`,
993
+ passkeyNote: "Vos cl\xE9s d\u2019acc\xE8s continuent de fonctionner. Votre appareil peut encore les afficher sous votre ancienne adresse.",
994
+ rateLimited,
995
+ failed: "Cela n\u2019a pas fonctionn\xE9. Veuillez r\xE9essayer."
996
+ },
997
+ sessions: {
998
+ title: "Sessions",
999
+ description: "Une session ouverte sur un appareil que vous n\u2019utilisez plus, ou auquel vous ne vous fiez pas\u202F? D\xE9connectez-vous partout.",
1000
+ signOutEverywhere: "Se d\xE9connecter partout\u2026",
1001
+ signOutEverywherePrompt: "Toutes les sessions prennent fin, y compris celle-ci\xA0: cet appareil sera d\xE9connect\xE9 lui aussi, et il faudra vous reconnecter ici.",
1002
+ confirmSignOutEverywhere: "Se d\xE9connecter partout",
1003
+ list: "Vos sessions ouvertes",
1004
+ loading: "Chargement des sessions\u2026",
1005
+ empty: "Aucune session \xE0 afficher.",
1006
+ current: "Cet appareil",
1007
+ unknownDevice: "Appareil inconnu",
1008
+ // A colon: `when` is either "il y a 3 heures" or a date.
1009
+ lastActive: (when) => `Derni\xE8re activit\xE9\xA0: ${when}`,
1010
+ ip: (address) => `IP ${address}`,
1011
+ revoke: "D\xE9connecter",
1012
+ // Starts with `revoke`, the button's visible text, for voice control.
1013
+ revokeItem: (device) => `D\xE9connecter ${device}`,
1014
+ failed: "Cela n\u2019a pas fonctionn\xE9. Veuillez r\xE9essayer."
1015
+ },
1016
+ deleteAccount: {
1017
+ title: "Supprimer le compte",
1018
+ afterDays: (days) => `Votre compte est d\xE9sactiv\xE9 imm\xE9diatement et effac\xE9 d\xE9finitivement ${n(days)} ${plural(days, "jour", "jours")} plus tard.`,
1019
+ operator: "Votre compte est d\xE9sactiv\xE9 imm\xE9diatement, puis l\u2019exploitant l\u2019effacera d\xE9finitivement.",
1020
+ arm: "Supprimer le compte\u2026",
1021
+ prompt: "Toutes vos sessions prendront fin, sur tous les appareils, et votre compte ne pourra plus \xEAtre utilis\xE9.",
1022
+ handOver: (count) => count < 2 ? `${n(count)} \xE9l\xE9ment visible par d\u2019autres passera \xE0 un administrateur.` : `${n(count)} \xE9l\xE9ments visibles par d\u2019autres passeront \xE0 un administrateur.`,
1023
+ confirm: "Supprimer mon compte",
1024
+ done: "Votre compte est d\xE9sactiv\xE9. D\xE9connexion en cours.",
1025
+ wrongPassword: "Le mot de passe est incorrect.",
1026
+ confirmationMismatch: "Ce n\u2019est pas l\u2019adresse de votre compte.",
1027
+ lastAdmin: "Votre compte est le dernier compte administrateur. Nommez d\u2019abord quelqu\u2019un d\u2019autre administrateur.",
1028
+ lastAdminOf: (companies) => `Votre compte est le dernier compte administrateur de ${companies}. Nommez-y d\u2019abord quelqu\u2019un d\u2019autre administrateur.`,
1029
+ // keksdose's "ménage".
1030
+ householdHasMembers: "Votre m\xE9nage a d\u2019autres membres, le compte ne peut donc pas \xEAtre supprim\xE9 ici. Veuillez \xE9crire \xE0 l\u2019exploitant.",
1031
+ rateLimited,
1032
+ failed: "Votre compte n\u2019a pas pu \xEAtre supprim\xE9. Veuillez r\xE9essayer."
1033
+ },
1034
+ dataExport: {
1035
+ title: "Exporter vos donn\xE9es",
1036
+ description: "T\xE9l\xE9chargez une copie des donn\xE9es de votre compte sous forme de fichier JSON.",
1037
+ download: "T\xE9l\xE9charger mes donn\xE9es",
1038
+ started: "Votre t\xE9l\xE9chargement a commenc\xE9.",
1039
+ saveAgain: "Rien ne s\u2019est pass\xE9\u202F? Enregistrer le fichier",
1040
+ rateLimited: (seconds) => seconds && seconds > 0 ? `Vous venez d\u2019exporter vos donn\xE9es. R\xE9essayez dans ${wait(seconds)}.` : "Vous venez d\u2019exporter vos donn\xE9es. Veuillez r\xE9essayer dans une minute.",
1041
+ failed: "L\u2019export a \xE9chou\xE9. Veuillez r\xE9essayer."
1042
+ },
1043
+ userRoster: {
1044
+ name: "Nom",
1045
+ email: "E-mail",
1046
+ role: "R\xF4le",
1047
+ state: "\xC9tat",
1048
+ created: "Cr\xE9\xE9 le",
1049
+ lastLogin: "Derni\xE8re connexion",
1050
+ never: "Jamais",
1051
+ actions: "Actions",
1052
+ actionsFor: (name) => `Actions pour ${name}`
1053
+ },
1054
+ roleSelect: {
1055
+ label: "R\xF4le",
1056
+ rolesLegend: "R\xF4les",
1057
+ roleOf: (name) => `R\xF4le de ${name}`,
1058
+ lockedLastAdmin: "Le dernier compte administrateur actif garde ce r\xF4le.",
1059
+ lockedSelf: "Vous ne pouvez pas changer votre propre r\xF4le.",
1060
+ notForLastAdmin: "pas pour le dernier administrateur",
1061
+ notForSelf: "pas pour votre propre compte",
1062
+ unavailable: (role, reason) => `${role} (${reason})`
1063
+ },
1064
+ reviewerScope: {
1065
+ languages: "Langues",
1066
+ hint: "Cochez les langues que cette personne relit.",
1067
+ none: "Aucune langue\xA0: enregistrer retire le r\xF4le de relecteur.",
1068
+ areas: "Limiter \xE0",
1069
+ legalOnly: "Uniquement les pages l\xE9gales",
1070
+ legalOnlyHint: "Mentions l\xE9gales, politique de confidentialit\xE9 et conditions d\u2019utilisation\xA0: pour un juriste plut\xF4t que pour un locuteur natif.",
1071
+ failed: "Le r\xF4le de relecteur n\u2019a pas pu \xEAtre enregistr\xE9. Veuillez r\xE9essayer."
1072
+ },
1073
+ adminAction: {
1074
+ confirm: "Confirmer",
1075
+ cancel: "Annuler",
1076
+ close: "Fermer",
1077
+ lastAdmin: "C\u2019est le dernier compte administrateur actif. Nommez d\u2019abord quelqu\u2019un d\u2019autre administrateur.",
1078
+ self: "Vous ne pouvez pas faire cela sur votre propre compte.",
1079
+ confirmationMismatch: "L\u2019adresse ne correspond pas \xE0 ce compte. V\xE9rifiez sur quel compte vous \xEAtes.",
1080
+ otherCompanies: "Ce compte appartient aussi \xE0 d\u2019autres entreprises, seul l\u2019exploitant de la plateforme peut donc faire cela. Vous pouvez plut\xF4t le retirer de cette entreprise.",
1081
+ removeFromCompany: "Retirer de l\u2019entreprise",
1082
+ failed: "Cela n\u2019a pas fonctionn\xE9. Veuillez r\xE9essayer."
1083
+ },
1084
+ adminActionLog: {
1085
+ title: "Actions d\u2019administration",
1086
+ empty: "Aucune action d\u2019administration pour l\u2019instant.",
1087
+ loading: "Chargement\u2026",
1088
+ by: (actor) => `par ${actor}`,
1089
+ bySelf: "par la personne elle-m\xEAme",
1090
+ automatic: "automatiquement",
1091
+ erased: "un compte effac\xE9",
1092
+ filteredTo: (target) => `Uniquement ${target}`,
1093
+ showAll: "Afficher toutes les actions",
1094
+ filterBy: (target) => `Afficher uniquement les actions concernant ${target}`,
1095
+ // Agreeing with "compte" (masculine), like `accountState`.
1096
+ actions: {
1097
+ deactivate: "D\xE9sactiv\xE9",
1098
+ reactivate: "R\xE9activ\xE9",
1099
+ role: "R\xF4le modifi\xE9",
1100
+ membership_remove: "Retir\xE9 de l\u2019entreprise",
1101
+ password_change_require: "Nouveau mot de passe exig\xE9",
1102
+ password_change_withdraw: "Exigence de mot de passe retir\xE9e",
1103
+ mail_verification: "E-mail de confirmation envoy\xE9",
1104
+ mail_reset: "E-mail de r\xE9initialisation du mot de passe envoy\xE9",
1105
+ reviewer: "P\xE9rim\xE8tre de relecture modifi\xE9",
1106
+ invite: "Invit\xE9",
1107
+ invite_resend: "Invitation renvoy\xE9e",
1108
+ invite_revoke: "Invitation r\xE9voqu\xE9e",
1109
+ transfer: "Travail transmis",
1110
+ deletion_request: "Suppression demand\xE9e",
1111
+ deletion_cancel: "Suppression annul\xE9e",
1112
+ erase: "Compte effac\xE9"
1113
+ }
1114
+ },
1115
+ transferOwnership: {
1116
+ title: (name) => `Transmettre le travail de ${name}`,
1117
+ body: "Tout ce que poss\xE8de ce compte passe au compte choisi, en une seule \xE9tape.",
1118
+ recipient: "Le transmettre \xE0",
1119
+ choose: "Choisissez un compte\u2026",
1120
+ chooseFirst: "Choisissez qui re\xE7oit le travail",
1121
+ confirm: "Transmettre",
1122
+ customer: "client",
1123
+ deactivated: "d\xE9sactiv\xE9",
1124
+ self: "le m\xEAme compte",
1125
+ unavailable: (account, reason) => `${account} (${reason})`,
1126
+ noCandidates: "Aucun autre compte ne peut le recevoir."
1127
+ },
1128
+ invitations: {
1129
+ email: "Adresse e-mail",
1130
+ invalidEmail: "Saisissez une adresse e-mail compl\xE8te.",
1131
+ role: "R\xF4le",
1132
+ scope: "Port\xE9e",
1133
+ scopeNone: "Aucune",
1134
+ language: "Langue de l\u2019invitation",
1135
+ note: "Note",
1136
+ invite: "Inviter",
1137
+ listTitle: "Invitations",
1138
+ empty: "Personne n\u2019a encore \xE9t\xE9 invit\xE9.",
1139
+ loading: "Chargement\u2026",
1140
+ // Agreeing with "invitation" (feminine).
1141
+ status: { open: "Ouverte", accepted: "Accept\xE9e", expired: "Expir\xE9e", revoked: "R\xE9voqu\xE9e" },
1142
+ sent: (date) => `Envoy\xE9e le ${date}`,
1143
+ // kastlan's "Valable jusqu’au".
1144
+ expires: (date) => `Valable jusqu\u2019au ${date}`,
1145
+ invitedBy: (name) => `par ${name}`,
1146
+ resend: (email) => `Envoyer un nouveau lien \xE0 ${email}`,
1147
+ copyLink: "Copier le lien d\u2019invitation",
1148
+ revoke: (email) => `R\xE9voquer l\u2019invitation de ${email}`,
1149
+ consoleHint: "Ce serveur n\u2019envoie pas d\u2019e-mails \u2014 ils sont \xE9crits dans le journal du serveur. Copiez ici chaque lien d\u2019invitation et transmettez-le vous-m\xEAme\xA0: il n\u2019est affich\xE9 qu\u2019une seule fois.",
1150
+ linkReady: (email) => `Le lien d\u2019invitation pour ${email}, affich\xE9 cette seule fois\xA0:`,
1151
+ notSent: (email) => `${email} est invit\xE9, mais l\u2019e-mail n\u2019a pas pu \xEAtre envoy\xE9. Renvoyez-le.`,
1152
+ failed: "Cela n\u2019a pas fonctionn\xE9. Veuillez r\xE9essayer."
1153
+ },
812
1154
  characterCount: {
813
1155
  count: (used, max) => `${n(used)} sur ${n(max)} ${plural(max, "caract\xE8re", "caract\xE8res")}`,
814
1156
  remaining: (left) => `${n(left)} ${plural(left, "caract\xE8re restant", "caract\xE8res restants")}`,