@eifi1/ui-kit 0.29.0 → 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 (187) hide show
  1. package/README.md +26 -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/auth-errors.d.ts +85 -6
  42. package/dist/auth/auth-errors.js +62 -2
  43. package/dist/auth/auth-errors.js.map +1 -1
  44. package/dist/auth/forgot-password-form.d.ts +10 -3
  45. package/dist/auth/forgot-password-form.js +6 -3
  46. package/dist/auth/forgot-password-form.js.map +1 -1
  47. package/dist/auth/register-form.d.ts +17 -12
  48. package/dist/auth/register-form.js +6 -4
  49. package/dist/auth/register-form.js.map +1 -1
  50. package/dist/auth/reset-password-form.d.ts +10 -3
  51. package/dist/auth/reset-password-form.js +6 -3
  52. package/dist/auth/reset-password-form.js.map +1 -1
  53. package/dist/auth/sign-in-form.d.ts +61 -9
  54. package/dist/auth/sign-in-form.js +94 -13
  55. package/dist/auth/sign-in-form.js.map +1 -1
  56. package/dist/auth/verify-email.d.ts +7 -2
  57. package/dist/auth/verify-email.js +44 -8
  58. package/dist/auth/verify-email.js.map +1 -1
  59. package/dist/chart.d.ts +16 -11
  60. package/dist/components/account-chips.d.ts +47 -7
  61. package/dist/components/account-chips.js +19 -3
  62. package/dist/components/account-chips.js.map +1 -1
  63. package/dist/components/account-settings-labels.d.ts +12 -1
  64. package/dist/components/account-settings-labels.js +4 -1
  65. package/dist/components/account-settings-labels.js.map +1 -1
  66. package/dist/components/account-settings.d.ts +61 -6
  67. package/dist/components/account-settings.js +115 -15
  68. package/dist/components/account-settings.js.map +1 -1
  69. package/dist/components/amount-input.d.ts +17 -12
  70. package/dist/components/button-group.d.ts +17 -12
  71. package/dist/components/calculator.d.ts +17 -12
  72. package/dist/components/confirm-dialog.d.ts +17 -12
  73. package/dist/components/copy-button.d.ts +14 -9
  74. package/dist/components/danger-confirm.d.ts +17 -12
  75. package/dist/components/facing-pair.d.ts +17 -12
  76. package/dist/components/file-button.d.ts +17 -12
  77. package/dist/components/file-dropzone.d.ts +17 -12
  78. package/dist/components/form-actions.d.ts +17 -12
  79. package/dist/components/iban-input.d.ts +17 -12
  80. package/dist/components/language-select.d.ts +17 -12
  81. package/dist/components/legal-page.d.ts +17 -12
  82. package/dist/components/legal.d.ts +17 -12
  83. package/dist/components/money-field.d.ts +17 -12
  84. package/dist/components/number-field.d.ts +17 -12
  85. package/dist/components/number-input.d.ts +17 -12
  86. package/dist/components/numpad-sheet.d.ts +17 -12
  87. package/dist/components/phone-input.d.ts +17 -12
  88. package/dist/components/series-chart.d.ts +17 -12
  89. package/dist/components/settings-fields.d.ts +16 -11
  90. package/dist/components/share-card.d.ts +16 -11
  91. package/dist/components/text-link.d.ts +17 -12
  92. package/dist/components/time-input.d.ts +17 -12
  93. package/dist/components/ui.d.ts +13 -8
  94. package/dist/{register-form-V1OeNlMr.d.ts → delete-account-setting-CGVMckMw.d.ts} +6616 -5645
  95. package/dist/feedback/feedback-attachment.d.ts +17 -12
  96. package/dist/feedback/feedback-context.d.ts +17 -12
  97. package/dist/feedback/feedback-crash.d.ts +17 -12
  98. package/dist/feedback/feedback-dialog.d.ts +17 -12
  99. package/dist/feedback/feedback-inbox.d.ts +17 -12
  100. package/dist/feedback/feedback-labels.d.ts +17 -12
  101. package/dist/feedback/feedback-menu.d.ts +17 -12
  102. package/dist/feedback/feedback-record.d.ts +17 -12
  103. package/dist/feedback/feedback-row-detail.d.ts +17 -12
  104. package/dist/feedback/feedback-status-undo.d.ts +17 -12
  105. package/dist/feedback/feedback-submit.d.ts +17 -12
  106. package/dist/feedback/feedback-swipe.d.ts +17 -12
  107. package/dist/feedback/feedback-table.d.ts +14 -9
  108. package/dist/feedback/feedback-thread.d.ts +17 -12
  109. package/dist/feedback.d.ts +17 -12
  110. package/dist/hooks/use-anchored-panel.d.ts +6 -2
  111. package/dist/hooks/use-anchored-panel.js +2 -1
  112. package/dist/hooks/use-anchored-panel.js.map +1 -1
  113. package/dist/hooks/use-file-drop.d.ts +17 -12
  114. package/dist/i18n/defaults.d.ts +17 -12
  115. package/dist/i18n/defaults.js +22 -0
  116. package/dist/i18n/defaults.js.map +1 -1
  117. package/dist/i18n/german.d.ts +17 -12
  118. package/dist/i18n/german.js +215 -11
  119. package/dist/i18n/german.js.map +1 -1
  120. package/dist/i18n/kit-labels.d.ts +10 -5
  121. package/dist/i18n/kit-labels.js.map +1 -1
  122. package/dist/i18n/languages.d.ts +11 -6
  123. package/dist/i18n/locales/de-CH.d.ts +17 -12
  124. package/dist/i18n/locales/en.d.ts +17 -12
  125. package/dist/i18n/locales/es.d.ts +17 -12
  126. package/dist/i18n/locales/es.js +207 -9
  127. package/dist/i18n/locales/es.js.map +1 -1
  128. package/dist/i18n/locales/fr.d.ts +17 -12
  129. package/dist/i18n/locales/fr.js +209 -6
  130. package/dist/i18n/locales/fr.js.map +1 -1
  131. package/dist/i18n/locales/hu.d.ts +17 -12
  132. package/dist/i18n/locales/hu.js +207 -11
  133. package/dist/i18n/locales/hu.js.map +1 -1
  134. package/dist/i18n/locales/it.d.ts +17 -12
  135. package/dist/i18n/locales/it.js +209 -6
  136. package/dist/i18n/locales/it.js.map +1 -1
  137. package/dist/i18n/locales/zh.d.ts +17 -12
  138. package/dist/i18n/locales/zh.js +200 -6
  139. package/dist/i18n/locales/zh.js.map +1 -1
  140. package/dist/i18n/review.d.ts +17 -12
  141. package/dist/i18n/review.js +37 -1
  142. package/dist/i18n/review.js.map +1 -1
  143. package/dist/index.d.ts +8 -3
  144. package/dist/index.js +53 -0
  145. package/dist/index.js.map +1 -1
  146. package/dist/rhf/fields.d.ts +17 -12
  147. package/dist/rhf/form.d.ts +17 -12
  148. package/dist/rhf.d.ts +17 -12
  149. package/dist/shell/app-shell.d.ts +17 -12
  150. package/dist/shell/top-bar-brand.d.ts +17 -12
  151. package/dist/shell.d.ts +11 -6
  152. package/dist/wizard/stepper-nav.d.ts +17 -12
  153. package/dist/wizard.d.ts +17 -12
  154. package/package.json +1 -1
  155. package/src/account/account-parts.ts +67 -0
  156. package/src/account/data-export-setting.tsx +218 -0
  157. package/src/account/delete-account-setting.tsx +362 -0
  158. package/src/account/email-change-setting.tsx +457 -0
  159. package/src/account/sessions-setting.tsx +283 -0
  160. package/src/admin/admin-action-confirm.tsx +495 -0
  161. package/src/admin/admin-action-log.tsx +297 -0
  162. package/src/admin/admin-parts.ts +82 -0
  163. package/src/admin/invitations-panel.tsx +516 -0
  164. package/src/admin/reviewer-scope-editor.tsx +234 -0
  165. package/src/admin/role-select.tsx +286 -0
  166. package/src/admin/transfer-ownership-dialog.tsx +172 -0
  167. package/src/admin/user-roster.tsx +573 -0
  168. package/src/auth/auth-errors.ts +165 -8
  169. package/src/auth/forgot-password-form.tsx +21 -5
  170. package/src/auth/register-form.tsx +24 -6
  171. package/src/auth/reset-password-form.tsx +19 -5
  172. package/src/auth/sign-in-form.tsx +207 -35
  173. package/src/auth/verify-email.tsx +59 -8
  174. package/src/components/account-chips.tsx +64 -7
  175. package/src/components/account-settings-labels.ts +15 -1
  176. package/src/components/account-settings.tsx +199 -23
  177. package/src/hooks/use-anchored-panel.ts +14 -3
  178. package/src/i18n/defaults.ts +22 -0
  179. package/src/i18n/german.ts +241 -5
  180. package/src/i18n/kit-labels.tsx +33 -0
  181. package/src/i18n/locales/es.ts +230 -3
  182. package/src/i18n/locales/fr.ts +232 -0
  183. package/src/i18n/locales/hu.ts +224 -5
  184. package/src/i18n/locales/it.ts +230 -0
  185. package/src/i18n/locales/zh.ts +205 -0
  186. package/src/i18n/review.ts +36 -0
  187. package/src/index.ts +93 -0
@@ -14,6 +14,15 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
14
14
  const num = new Intl.NumberFormat(numberLocale);
15
15
  const n = (value: number) => num.format(value);
16
16
  const plural = (count: number, one: string, many: string) => (count < 2 ? one : many);
17
+ // 0.30.0 — a throttled request (HTTP 429), as `englishRateLimited` in
18
+ // src/auth/auth-errors.ts: no wait → "un instant", under a minute → seconds, else
19
+ // minutes rounded up. kastlan's reviewed "auth.throttled" is the sentence without one.
20
+ const wait = (seconds: number) =>
21
+ seconds < 60 ? `${n(Math.ceil(seconds))}\u00a0s` : `${n(Math.ceil(seconds / 60))}\u00a0min`;
22
+ const rateLimited = (seconds?: number) =>
23
+ !seconds || seconds <= 0
24
+ ? "Trop de tentatives. Veuillez patienter un instant, puis réessayer."
25
+ : `Trop de tentatives. Réessayez dans ${wait(seconds)}.`;
17
26
 
18
27
  return {
19
28
  feedbackAttachment: {
@@ -152,6 +161,9 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
152
161
  memberSince: "Membre depuis",
153
162
  displayName: "Nom affiché",
154
163
  save: "Enregistrer",
164
+ firstName: "Prénom",
165
+ lastName: "Nom",
166
+ nameRequired: "Saisissez un prénom et un nom.",
155
167
  },
156
168
  password: {
157
169
  title: "Changer le mot de passe",
@@ -715,6 +727,8 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
715
727
  registered: "Inscrit",
716
728
  unverified: "Non vérifié",
717
729
  passwordChange: "Doit changer de mot de passe",
730
+ deletion: "Suppression demandée",
731
+ deletionOn: (date) => `Suppression le ${date}`,
718
732
  },
719
733
  shareCard: {
720
734
  dialogTitle: "Partager",
@@ -884,6 +898,17 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
884
898
  setPasswordFailed: "Le mot de passe n’a pas pu être défini.",
885
899
  expired: "Cette connexion a expiré. Veuillez vous reconnecter.",
886
900
  backToSignIn: "Retour à la connexion",
901
+ // kastlan's backup-code words ("code de secours" — not keksdose's "code de
902
+ // récupération", which is the key of its end-to-end encryption).
903
+ useRecoveryCode: "Utiliser un code de secours",
904
+ useAuthenticatorCode: "Utiliser votre application d’authentification",
905
+ recoveryCode: "Code de secours",
906
+ recoveryIntro:
907
+ "Saisissez l’un des codes de secours que vous avez enregistrés en activant l’authentification à deux facteurs.",
908
+ recoveryCodeHint: (length) =>
909
+ `${n(length)} lettres et chiffres. Les tirets et les espaces ne comptent pas.`,
910
+ recoveryCodeInvalid: "Ce code de secours n’est pas valable ou a déjà été utilisé.",
911
+ rateLimited,
887
912
  },
888
913
  register: {
889
914
  firstName: "Prénom",
@@ -907,6 +932,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
907
932
  invitationInvalid: "Ce lien d’invitation n’est pas valide.",
908
933
  invitationExpired: "Cette invitation a expiré. Demandez-en une nouvelle.",
909
934
  failed: "Échec de l’inscription. Veuillez réessayer.",
935
+ rateLimited,
910
936
  },
911
937
  completeName: {
912
938
  title: "Complétez votre nom",
@@ -929,6 +955,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
929
955
  "Le lien est valable une heure et ne fonctionne qu’une seule fois. Vérifiez aussi votre dossier de courrier indésirable.",
930
956
  backToSignIn: "Retour à la connexion",
931
957
  error: "La demande a échoué. Veuillez réessayer plus tard.",
958
+ rateLimited,
932
959
  },
933
960
  resetPassword: {
934
961
  title: "Choisir un nouveau mot de passe",
@@ -947,6 +974,7 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
947
974
  success: "Votre mot de passe a été changé. Vous pouvez vous connecter avec dès maintenant.",
948
975
  sessionsEnded: "Les appareils connectés ont été déconnectés — vous devrez vous y reconnecter.",
949
976
  signIn: "Aller à la connexion",
977
+ rateLimited,
950
978
  },
951
979
  verifyEmail: {
952
980
  title: "Confirmez votre adresse e-mail",
@@ -996,6 +1024,210 @@ export function uiKitLabelsFr(numberLocale = "fr-FR"): UiKitLabels {
996
1024
  currentMark: "(actuelle)",
997
1025
  switching: "Changement d’entreprise…",
998
1026
  },
1027
+ // 0.30.0 — docs/user-admin-harmonization.md: keksdose's reviewed French for the admin
1028
+ // words (admin.users.*), Kurvenschmiede's for transfer, invitations and sessions,
1029
+ // kastlan's for the company, the throttle and "Se déconnecter partout"; written fresh
1030
+ // where no app had the sentence. Phrased so that no sentence about the reader needs
1031
+ // a gender ("déconnecté·e").
1032
+ emailChange: {
1033
+ title: "Adresse e-mail",
1034
+ current: "Adresse actuelle",
1035
+ newEmail: "Nouvelle adresse e-mail",
1036
+ password: "Mot de passe actuel",
1037
+ passwordHint: "Votre adresse sert à vous connecter, c’est pourquoi la changer demande votre mot de passe.",
1038
+ emailTagUse: (address) => `Utiliser ${address}`,
1039
+ emailTagHint:
1040
+ "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.",
1041
+ submit: "Changer d’adresse e-mail",
1042
+ sameAsCurrent: "C’est déjà votre adresse.",
1043
+ emailTaken: "Un compte existe déjà avec cette adresse e-mail.",
1044
+ wrongPassword: "Le mot de passe est incorrect.",
1045
+ pending: (newEmail) => `Confirmez le lien que nous avons envoyé à ${newEmail}.`,
1046
+ pendingHint: (currentEmail) =>
1047
+ `D’ici là, vous continuez à vous connecter avec ${currentEmail}. Vérifiez aussi votre dossier de courrier indésirable.`,
1048
+ resend: "Renvoyer le lien",
1049
+ resent: "Nous avons renvoyé le lien.",
1050
+ cancel: "Annuler le changement",
1051
+ confirmed: (email) => `Votre adresse e-mail est désormais ${email}.`,
1052
+ passkeyNote:
1053
+ "Vos clés d’accès continuent de fonctionner. Votre appareil peut encore les afficher sous votre ancienne adresse.",
1054
+ rateLimited,
1055
+ failed: "Cela n’a pas fonctionné. Veuillez réessayer.",
1056
+ },
1057
+ sessions: {
1058
+ title: "Sessions",
1059
+ description:
1060
+ "Une session ouverte sur un appareil que vous n’utilisez plus, ou auquel vous ne vous fiez pas\u202f? Déconnectez-vous partout.",
1061
+ signOutEverywhere: "Se déconnecter partout…",
1062
+ signOutEverywherePrompt:
1063
+ "Toutes les sessions prennent fin, y compris celle-ci\u00a0: cet appareil sera déconnecté lui aussi, et il faudra vous reconnecter ici.",
1064
+ confirmSignOutEverywhere: "Se déconnecter partout",
1065
+ list: "Vos sessions ouvertes",
1066
+ loading: "Chargement des sessions…",
1067
+ empty: "Aucune session à afficher.",
1068
+ current: "Cet appareil",
1069
+ unknownDevice: "Appareil inconnu",
1070
+ // A colon: `when` is either "il y a 3 heures" or a date.
1071
+ lastActive: (when) => `Dernière activité\u00a0: ${when}`,
1072
+ ip: (address) => `IP ${address}`,
1073
+ revoke: "Déconnecter",
1074
+ // Starts with `revoke`, the button's visible text, for voice control.
1075
+ revokeItem: (device) => `Déconnecter ${device}`,
1076
+ failed: "Cela n’a pas fonctionné. Veuillez réessayer.",
1077
+ },
1078
+ deleteAccount: {
1079
+ title: "Supprimer le compte",
1080
+ afterDays: (days) =>
1081
+ `Votre compte est désactivé immédiatement et effacé définitivement ${n(days)} ${plural(days, "jour", "jours")} plus tard.`,
1082
+ operator: "Votre compte est désactivé immédiatement, puis l’exploitant l’effacera définitivement.",
1083
+ arm: "Supprimer le compte…",
1084
+ prompt: "Toutes vos sessions prendront fin, sur tous les appareils, et votre compte ne pourra plus être utilisé.",
1085
+ handOver: (count) =>
1086
+ count < 2
1087
+ ? `${n(count)} élément visible par d’autres passera à un administrateur.`
1088
+ : `${n(count)} éléments visibles par d’autres passeront à un administrateur.`,
1089
+ confirm: "Supprimer mon compte",
1090
+ done: "Votre compte est désactivé. Déconnexion en cours.",
1091
+ wrongPassword: "Le mot de passe est incorrect.",
1092
+ confirmationMismatch: "Ce n’est pas l’adresse de votre compte.",
1093
+ lastAdmin:
1094
+ "Votre compte est le dernier compte administrateur. Nommez d’abord quelqu’un d’autre administrateur.",
1095
+ lastAdminOf: (companies) =>
1096
+ `Votre compte est le dernier compte administrateur de ${companies}. Nommez-y d’abord quelqu’un d’autre administrateur.`,
1097
+ // keksdose's "ménage".
1098
+ householdHasMembers:
1099
+ "Votre ménage a d’autres membres, le compte ne peut donc pas être supprimé ici. Veuillez écrire à l’exploitant.",
1100
+ rateLimited,
1101
+ failed: "Votre compte n’a pas pu être supprimé. Veuillez réessayer.",
1102
+ },
1103
+ dataExport: {
1104
+ title: "Exporter vos données",
1105
+ description: "Téléchargez une copie des données de votre compte sous forme de fichier JSON.",
1106
+ download: "Télécharger mes données",
1107
+ started: "Votre téléchargement a commencé.",
1108
+ saveAgain: "Rien ne s’est passé\u202f? Enregistrer le fichier",
1109
+ rateLimited: (seconds) =>
1110
+ seconds && seconds > 0
1111
+ ? `Vous venez d’exporter vos données. Réessayez dans ${wait(seconds)}.`
1112
+ : "Vous venez d’exporter vos données. Veuillez réessayer dans une minute.",
1113
+ failed: "L’export a échoué. Veuillez réessayer.",
1114
+ },
1115
+ userRoster: {
1116
+ name: "Nom",
1117
+ email: "E-mail",
1118
+ role: "Rôle",
1119
+ state: "État",
1120
+ created: "Créé le",
1121
+ lastLogin: "Dernière connexion",
1122
+ never: "Jamais",
1123
+ actions: "Actions",
1124
+ actionsFor: (name) => `Actions pour ${name}`,
1125
+ },
1126
+ roleSelect: {
1127
+ label: "Rôle",
1128
+ rolesLegend: "Rôles",
1129
+ roleOf: (name) => `Rôle de ${name}`,
1130
+ lockedLastAdmin: "Le dernier compte administrateur actif garde ce rôle.",
1131
+ lockedSelf: "Vous ne pouvez pas changer votre propre rôle.",
1132
+ notForLastAdmin: "pas pour le dernier administrateur",
1133
+ notForSelf: "pas pour votre propre compte",
1134
+ unavailable: (role, reason) => `${role} (${reason})`,
1135
+ },
1136
+ reviewerScope: {
1137
+ languages: "Langues",
1138
+ hint: "Cochez les langues que cette personne relit.",
1139
+ none: "Aucune langue\u00a0: enregistrer retire le rôle de relecteur.",
1140
+ areas: "Limiter à",
1141
+ legalOnly: "Uniquement les pages légales",
1142
+ legalOnlyHint:
1143
+ "Mentions légales, politique de confidentialité et conditions d’utilisation\u00a0: pour un juriste plutôt que pour un locuteur natif.",
1144
+ failed: "Le rôle de relecteur n’a pas pu être enregistré. Veuillez réessayer.",
1145
+ },
1146
+ adminAction: {
1147
+ confirm: "Confirmer",
1148
+ cancel: "Annuler",
1149
+ close: "Fermer",
1150
+ lastAdmin:
1151
+ "C’est le dernier compte administrateur actif. Nommez d’abord quelqu’un d’autre administrateur.",
1152
+ self: "Vous ne pouvez pas faire cela sur votre propre compte.",
1153
+ confirmationMismatch:
1154
+ "L’adresse ne correspond pas à ce compte. Vérifiez sur quel compte vous êtes.",
1155
+ otherCompanies:
1156
+ "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.",
1157
+ removeFromCompany: "Retirer de l’entreprise",
1158
+ failed: "Cela n’a pas fonctionné. Veuillez réessayer.",
1159
+ },
1160
+ adminActionLog: {
1161
+ title: "Actions d’administration",
1162
+ empty: "Aucune action d’administration pour l’instant.",
1163
+ loading: "Chargement…",
1164
+ by: (actor) => `par ${actor}`,
1165
+ bySelf: "par la personne elle-même",
1166
+ automatic: "automatiquement",
1167
+ erased: "un compte effacé",
1168
+ filteredTo: (target) => `Uniquement ${target}`,
1169
+ showAll: "Afficher toutes les actions",
1170
+ filterBy: (target) => `Afficher uniquement les actions concernant ${target}`,
1171
+ // Agreeing with "compte" (masculine), like `accountState`.
1172
+ actions: {
1173
+ deactivate: "Désactivé",
1174
+ reactivate: "Réactivé",
1175
+ role: "Rôle modifié",
1176
+ membership_remove: "Retiré de l’entreprise",
1177
+ password_change_require: "Nouveau mot de passe exigé",
1178
+ password_change_withdraw: "Exigence de mot de passe retirée",
1179
+ mail_verification: "E-mail de confirmation envoyé",
1180
+ mail_reset: "E-mail de réinitialisation du mot de passe envoyé",
1181
+ reviewer: "Périmètre de relecture modifié",
1182
+ invite: "Invité",
1183
+ invite_resend: "Invitation renvoyée",
1184
+ invite_revoke: "Invitation révoquée",
1185
+ transfer: "Travail transmis",
1186
+ deletion_request: "Suppression demandée",
1187
+ deletion_cancel: "Suppression annulée",
1188
+ erase: "Compte effacé",
1189
+ },
1190
+ },
1191
+ transferOwnership: {
1192
+ title: (name) => `Transmettre le travail de ${name}`,
1193
+ body: "Tout ce que possède ce compte passe au compte choisi, en une seule étape.",
1194
+ recipient: "Le transmettre à",
1195
+ choose: "Choisissez un compte…",
1196
+ chooseFirst: "Choisissez qui reçoit le travail",
1197
+ confirm: "Transmettre",
1198
+ customer: "client",
1199
+ deactivated: "désactivé",
1200
+ self: "le même compte",
1201
+ unavailable: (account, reason) => `${account} (${reason})`,
1202
+ noCandidates: "Aucun autre compte ne peut le recevoir.",
1203
+ },
1204
+ invitations: {
1205
+ email: "Adresse e-mail",
1206
+ invalidEmail: "Saisissez une adresse e-mail complète.",
1207
+ role: "Rôle",
1208
+ scope: "Portée",
1209
+ scopeNone: "Aucune",
1210
+ language: "Langue de l’invitation",
1211
+ note: "Note",
1212
+ invite: "Inviter",
1213
+ listTitle: "Invitations",
1214
+ empty: "Personne n’a encore été invité.",
1215
+ loading: "Chargement…",
1216
+ // Agreeing with "invitation" (feminine).
1217
+ status: { open: "Ouverte", accepted: "Acceptée", expired: "Expirée", revoked: "Révoquée" },
1218
+ sent: (date) => `Envoyée le ${date}`,
1219
+ // kastlan's "Valable jusqu’au".
1220
+ expires: (date) => `Valable jusqu’au ${date}`,
1221
+ invitedBy: (name) => `par ${name}`,
1222
+ resend: (email) => `Envoyer un nouveau lien à ${email}`,
1223
+ copyLink: "Copier le lien d’invitation",
1224
+ revoke: (email) => `Révoquer l’invitation de ${email}`,
1225
+ consoleHint:
1226
+ "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.",
1227
+ linkReady: (email) => `Le lien d’invitation pour ${email}, affiché cette seule fois\u00a0:`,
1228
+ notSent: (email) => `${email} est invité, mais l’e-mail n’a pas pu être envoyé. Renvoyez-le.`,
1229
+ failed: "Cela n’a pas fonctionné. Veuillez réessayer.",
1230
+ },
999
1231
  characterCount: {
1000
1232
  count: (used, max) => `${n(used)} sur ${n(max)} ${plural(max, "caractère", "caractères")}`,
1001
1233
  remaining: (left) => `${n(left)} ${plural(left, "caractère restant", "caractères restants")}`,
@@ -13,6 +13,15 @@ import type { UiKitLabels } from "../kit-labels";
13
13
  export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
14
14
  const num = new Intl.NumberFormat(numberLocale);
15
15
  const n = (value: number) => num.format(value);
16
+ // 0.30.0 — a throttled request (HTTP 429), as `englishRateLimited` in
17
+ // src/auth/auth-errors.ts: no wait → "egy kicsit", under a minute → seconds, else
18
+ // minutes rounded up. The numeral stays bare before its unit ("30 mp múlva").
19
+ const wait = (seconds: number) =>
20
+ seconds < 60 ? `${n(Math.ceil(seconds))} mp` : `${n(Math.ceil(seconds / 60))} perc`;
21
+ const rateLimited = (seconds?: number) =>
22
+ !seconds || seconds <= 0
23
+ ? "Túl sok próbálkozás. Várjon egy kicsit, majd próbálja újra."
24
+ : `Túl sok próbálkozás. Próbálja újra ${wait(seconds)} múlva.`;
16
25
 
17
26
  return {
18
27
  feedbackAttachment: {
@@ -151,6 +160,9 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
151
160
  memberSince: "Regisztráció dátuma",
152
161
  displayName: "Megjelenített név",
153
162
  save: "Mentés",
163
+ firstName: "Keresztnév",
164
+ lastName: "Vezetéknév",
165
+ nameRequired: "Adja meg a keresztnevet és a vezetéknevet is.",
154
166
  },
155
167
  password: {
156
168
  title: "Jelszó módosítása",
@@ -700,6 +712,8 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
700
712
  registered: "Regisztrált",
701
713
  unverified: "Nincs megerősítve",
702
714
  passwordChange: "Jelszócsere szükséges",
715
+ deletion: "Törlés kérelmezve",
716
+ deletionOn: (date) => `Törlés: ${date}`,
703
717
  },
704
718
  shareCard: {
705
719
  dialogTitle: "Megosztás",
@@ -856,9 +870,9 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
856
870
  invalidCredentials: "Az e-mail-cím vagy a jelszó helytelen.",
857
871
  failed: "A bejelentkezés sikertelen. Kérjük, próbálja újra.",
858
872
  passkeyFailed: "A bejelentkezés hozzáférési kulccsal sikertelen.",
859
- deactivatedHint: "Inaktív a fiókja? Írjon ide: {contact}.",
873
+ deactivatedHint: "Letiltották a fiókját? Írjon ide: {contact}.",
860
874
  tagHint: (taggedAddress) =>
861
- `Ezzel a címmel regisztrált: ${taggedAddress}? Akkor ezt a címet használja.`,
875
+ `Ezzel a címmel regisztrált (${taggedAddress})? Akkor azt használja.`,
862
876
  twoFactorTitle: "Kétlépcsős azonosítás",
863
877
  twoFactorIntro: "Adja meg a hitelesítő alkalmazásban megjelenő kódot.",
864
878
  code: "Ellenőrző kód",
@@ -874,6 +888,15 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
874
888
  setPasswordFailed: "A jelszót nem sikerült beállítani.",
875
889
  expired: "Ez a bejelentkezés lejárt. Kérjük, jelentkezzen be újra.",
876
890
  backToSignIn: "Vissza a bejelentkezéshez",
891
+ useRecoveryCode: "Tartalékkód használata",
892
+ useAuthenticatorCode: "Hitelesítő alkalmazás használata",
893
+ recoveryCode: "Tartalékkód",
894
+ recoveryIntro:
895
+ "Adja meg az egyik tartalékkódot, amelyet a kétlépcsős azonosítás bekapcsolásakor mentett el.",
896
+ recoveryCodeHint: (length) =>
897
+ `${n(length)} betű és számjegy. A kötőjelek és a szóközök nem számítanak.`,
898
+ recoveryCodeInvalid: "Ez a tartalékkód érvénytelen, vagy már felhasználták.",
899
+ rateLimited,
877
900
  },
878
901
  register: {
879
902
  firstName: "Keresztnév",
@@ -895,9 +918,10 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
895
918
  emailTaken: "Ezzel az e-mail-címmel már létezik fiók.",
896
919
  registrationClosed:
897
920
  "Új fiókot csak meghívással lehet létrehozni. Kérje meg az üzemeltetőt, hogy küldjön meghívót az e-mail-címére.",
898
- invitationInvalid: "Ez a meghívó hivatkozás érvénytelen.",
921
+ invitationInvalid: "Ez a meghívóhivatkozás érvénytelen.",
899
922
  invitationExpired: "Ez a meghívó lejárt. Kérjen újat.",
900
923
  failed: "A regisztráció sikertelen. Kérjük, próbálja újra.",
924
+ rateLimited,
901
925
  },
902
926
  completeName: {
903
927
  title: "Név kiegészítése",
@@ -915,11 +939,12 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
915
939
  "Adja meg a fiókjához tartozó e-mail-címet. Küldünk egy hivatkozást, amellyel új jelszót választhat.",
916
940
  email: "E-mail",
917
941
  submit: "Hivatkozás küldése",
918
- sent: (email) => `Ha létezik fiók ehhez a címhez: ${email}, a hivatkozás úton van.`,
942
+ sent: (email) => `Ha létezik fiók ezzel a címmel (${email}), a hivatkozás úton van.`,
919
943
  sentHint:
920
944
  "A hivatkozás egy órán át érvényes, és pontosan egyszer használható. Nézze meg a levélszemét mappát is.",
921
945
  backToSignIn: "Vissza a bejelentkezéshez",
922
946
  error: "A kérés sikertelen. Kérjük, próbálja újra később.",
947
+ rateLimited,
923
948
  },
924
949
  resetPassword: {
925
950
  title: "Új jelszó választása",
@@ -938,6 +963,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
938
963
  success: "A jelszava megváltozott. Most már bejelentkezhet vele.",
939
964
  sessionsEnded: "A bejelentkezett eszközök ki lettek jelentkeztetve – ott újra be kell jelentkeznie.",
940
965
  signIn: "Tovább a bejelentkezéshez",
966
+ rateLimited,
941
967
  },
942
968
  verifyEmail: {
943
969
  title: "E-mail-cím megerősítése",
@@ -967,7 +993,7 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
967
993
  title: "Meghívás elfogadása",
968
994
  accepting: "Csatlakozás…",
969
995
  accepted: "Meghívás elfogadva.",
970
- joined: (name) => `Csatlakozott: ${name}.`,
996
+ joined: (name) => `Sikeresen csatlakozott: ${name}.`,
971
997
  continue: "Tovább",
972
998
  invalid: "Ezzel a hivatkozással nem sikerült csatlakozni",
973
999
  expired: "Ez a meghívó lejárt",
@@ -985,6 +1011,199 @@ export function uiKitLabelsHu(numberLocale = "hu-HU"): UiKitLabels {
985
1011
  currentMark: "(jelenlegi)",
986
1012
  switching: "Cég váltása folyamatban…",
987
1013
  },
1014
+ // 0.30.0 — docs/user-admin-harmonization.md: Kurvenschmiede's reviewed Hungarian for
1015
+ // the admin words (inaktiválás, szerepkör, lektor), transfer, invitations and
1016
+ // sessions; written fresh where it had no sentence. "Ön", and every value the app
1017
+ // passes in stands after a colon or in brackets, never with a case ending.
1018
+ emailChange: {
1019
+ title: "E-mail-cím",
1020
+ current: "Jelenlegi cím",
1021
+ newEmail: "Új e-mail-cím",
1022
+ password: "Jelenlegi jelszó",
1023
+ passwordHint: "A címével jelentkezik be, ezért a módosításához meg kell adnia a jelszavát.",
1024
+ emailTagUse: (address) => `${address} használata`,
1025
+ emailTagHint:
1026
+ "Sok szolgáltató a név+címke@… alakú címekre érkező leveleket ugyanabba a postafiókba kézbesíti, így az alkalmazás levelei könnyen szűrhetők és visszakövethetők. Mielőtt erre hagyatkozna, ellenőrizze, hogy az Öné is így működik-e: a címkés címmel kell majd bejelentkeznie.",
1027
+ submit: "E-mail-cím módosítása",
1028
+ sameAsCurrent: "Már ez az Ön címe.",
1029
+ emailTaken: "Ezzel az e-mail-címmel már létezik fiók.",
1030
+ wrongPassword: "A jelszó helytelen.",
1031
+ pending: (newEmail) => `Erősítse meg a hivatkozást, amelyet erre a címre küldtünk: ${newEmail}.`,
1032
+ pendingHint: (currentEmail) =>
1033
+ `Addig továbbra is ezzel a címmel jelentkezik be: ${currentEmail}. Nézze meg a levélszemét mappát is.`,
1034
+ resend: "Hivatkozás újraküldése",
1035
+ resent: "Újra elküldtük a hivatkozást.",
1036
+ cancel: "Módosítás visszavonása",
1037
+ confirmed: (email) => `Az e-mail-címe mostantól: ${email}.`,
1038
+ passkeyNote:
1039
+ "A hozzáférési kulcsai továbbra is működnek. Az eszköze azonban még a régi címe alatt mutathatja őket.",
1040
+ rateLimited,
1041
+ failed: "Ez nem sikerült. Kérjük, próbálja újra.",
1042
+ },
1043
+ sessions: {
1044
+ title: "Munkamenetek",
1045
+ description:
1046
+ "Be van jelentkezve egy olyan eszközön, amelyet már nem használ, vagy amelyben nem bízik? Jelentkezzen ki mindenhol.",
1047
+ signOutEverywhere: "Kijelentkezés mindenhol…",
1048
+ signOutEverywherePrompt:
1049
+ "Ez minden munkamenetet befejez, ezt is: ezen az eszközön is kijelentkezik, és innen újra be kell jelentkeznie.",
1050
+ confirmSignOutEverywhere: "Kijelentkezés mindenhol",
1051
+ list: "Ahol be van jelentkezve",
1052
+ loading: "Munkamenetek betöltése…",
1053
+ empty: "Nincs megjeleníthető munkamenet.",
1054
+ current: "Ez az eszköz",
1055
+ unknownDevice: "Ismeretlen eszköz",
1056
+ lastActive: (when) => `Utoljára aktív: ${when}`,
1057
+ ip: (address) => `IP-cím: ${address}`,
1058
+ revoke: "Kijelentkeztetés",
1059
+ // Starts with `revoke`, the button's visible text, for voice control.
1060
+ revokeItem: (device) => `Kijelentkeztetés: ${device}`,
1061
+ failed: "Ez nem sikerült. Kérjük, próbálja újra.",
1062
+ },
1063
+ deleteAccount: {
1064
+ title: "Fiók törlése",
1065
+ afterDays: (days) =>
1066
+ `A fiókját azonnal inaktiváljuk, majd ${n(days)} nap múlva véglegesen töröljük.`,
1067
+ operator: "A fiókját azonnal inaktiváljuk, a végleges törlést pedig az üzemeltető végzi el.",
1068
+ arm: "Fiók törlése…",
1069
+ prompt: "Minden eszközön kijelentkezik, és a fiókja többé nem használható.",
1070
+ handOver: (count) => `${n(count)} elem, amelyet mások is látnak, egy adminisztrátorhoz kerül.`,
1071
+ confirm: "Fiókom törlése",
1072
+ done: "A fiókja inaktiválva. Kijelentkeztetjük.",
1073
+ wrongPassword: "A jelszó helytelen.",
1074
+ confirmationMismatch: "Ez nem a fiókja címe.",
1075
+ lastAdmin: "Ön az utolsó adminisztrátor. Előbb tegyen adminisztrátorrá valaki mást.",
1076
+ lastAdminOf: (companies) =>
1077
+ `Ön az utolsó adminisztrátor itt: ${companies}. Előbb tegyen ott adminisztrátorrá valaki mást.`,
1078
+ householdHasMembers:
1079
+ "A háztartásának más tagjai is vannak, ezért a fiók itt nem törölhető. Kérjük, írjon az üzemeltetőnek.",
1080
+ rateLimited,
1081
+ failed: "A fiókját nem sikerült törölni. Kérjük, próbálja újra.",
1082
+ },
1083
+ dataExport: {
1084
+ title: "Adatai exportálása",
1085
+ description: "Töltse le a fiókja adatainak másolatát JSON-fájlként.",
1086
+ download: "Adataim letöltése",
1087
+ started: "A letöltés elkezdődött.",
1088
+ saveAgain: "Nem indult el? Fájl mentése",
1089
+ rateLimited: (seconds) =>
1090
+ seconds && seconds > 0
1091
+ ? `Az imént exportálta az adatait. Próbálja újra ${wait(seconds)} múlva.`
1092
+ : "Az imént exportálta az adatait. Kérjük, próbálja újra egy perc múlva.",
1093
+ failed: "Az exportálás sikertelen. Kérjük, próbálja újra.",
1094
+ },
1095
+ userRoster: {
1096
+ name: "Név",
1097
+ email: "E-mail",
1098
+ role: "Szerepkör",
1099
+ state: "Állapot",
1100
+ created: "Létrehozva",
1101
+ lastLogin: "Utolsó bejelentkezés",
1102
+ never: "Soha",
1103
+ actions: "Műveletek",
1104
+ // The name in brackets, never inflected — as `shareCard.roleOf`.
1105
+ actionsFor: (name) => `Műveletek (${name})`,
1106
+ },
1107
+ roleSelect: {
1108
+ label: "Szerepkör",
1109
+ rolesLegend: "Szerepkörök",
1110
+ roleOf: (name) => `Szerepkör (${name})`,
1111
+ lockedLastAdmin: "Az utolsó aktív adminisztrátor megtartja ezt a szerepkört.",
1112
+ lockedSelf: "A saját szerepkörét nem módosíthatja.",
1113
+ notForLastAdmin: "az utolsó adminisztrátornak nem",
1114
+ notForSelf: "a saját fiókjának nem",
1115
+ unavailable: (role, reason) => `${role} (${reason})`,
1116
+ },
1117
+ reviewerScope: {
1118
+ languages: "Nyelvek",
1119
+ hint: "Jelölje be a nyelveket, amelyeket ez a személy lektorál.",
1120
+ none: "Nincs nyelv: mentéskor megszűnik a lektori szerepkör.",
1121
+ areas: "Szűkítés",
1122
+ legalOnly: "Csak a jogi oldalak",
1123
+ legalOnlyHint:
1124
+ "Impresszum, adatvédelmi tájékoztató és felhasználási feltételek – inkább jogásznak, mint anyanyelvi lektornak.",
1125
+ failed: "A lektori beállítást nem sikerült menteni. Kérjük, próbálja újra.",
1126
+ },
1127
+ adminAction: {
1128
+ confirm: "Megerősítés",
1129
+ cancel: "Mégse",
1130
+ close: "Bezárás",
1131
+ lastAdmin: "Ez az utolsó aktív adminisztrátor. Előbb tegyen adminisztrátorrá valaki mást.",
1132
+ self: "Ezt a saját fiókjával nem teheti meg.",
1133
+ confirmationMismatch: "A cím nem egyezik ezzel a fiókkal. Ellenőrizze, melyik fióknál jár.",
1134
+ otherCompanies:
1135
+ "Ez a fiók más cégekhez is tartozik, ezért ezt csak a platform üzemeltetője teheti meg. Ehelyett eltávolíthatja ebből a cégből.",
1136
+ removeFromCompany: "Eltávolítás a cégből",
1137
+ failed: "Ez nem sikerült. Kérjük, próbálja újra.",
1138
+ },
1139
+ adminActionLog: {
1140
+ title: "Adminisztrátori műveletek",
1141
+ empty: "Még nincs adminisztrátori művelet.",
1142
+ loading: "Betöltés…",
1143
+ by: (actor) => `Végrehajtotta: ${actor}`,
1144
+ bySelf: "A felhasználó maga",
1145
+ automatic: "Automatikusan",
1146
+ erased: "egy törölt fiók",
1147
+ filteredTo: (target) => `Csak: ${target}`,
1148
+ showAll: "Az összes művelet megjelenítése",
1149
+ filterBy: (target) => `Csak az ezt a fiókot érintő műveletek megjelenítése: ${target}`,
1150
+ actions: {
1151
+ deactivate: "Inaktiválva",
1152
+ reactivate: "Újraaktiválva",
1153
+ role: "Szerepkör módosítva",
1154
+ membership_remove: "Eltávolítva a cégből",
1155
+ password_change_require: "Új jelszó előírva",
1156
+ password_change_withdraw: "Jelszócsere-előírás visszavonva",
1157
+ mail_verification: "Megerősítő e-mail elküldve",
1158
+ mail_reset: "Jelszó-visszaállító e-mail elküldve",
1159
+ reviewer: "Lektori beállítás módosítva",
1160
+ invite: "Meghívva",
1161
+ invite_resend: "Meghívó újraküldve",
1162
+ invite_revoke: "Meghívó visszavonva",
1163
+ transfer: "Munka továbbadva",
1164
+ deletion_request: "Törlés kérelmezve",
1165
+ deletion_cancel: "Törlés visszavonva",
1166
+ erase: "Fiók véglegesen törölve",
1167
+ },
1168
+ },
1169
+ transferOwnership: {
1170
+ title: (name) => `Munka továbbadása: ${name}`,
1171
+ body: "Minden, ami ennek a fióknak a tulajdona, egy lépésben átkerül a kiválasztott fiókhoz.",
1172
+ recipient: "Kinek adja",
1173
+ choose: "Válasszon egy fiókot…",
1174
+ chooseFirst: "Válassza ki, ki kapja meg a munkát",
1175
+ confirm: "Továbbadás",
1176
+ customer: "ügyfél",
1177
+ deactivated: "inaktivált",
1178
+ self: "ugyanaz a fiók",
1179
+ unavailable: (account, reason) => `${account} (${reason})`,
1180
+ noCandidates: "Más fiók nem kaphatja meg.",
1181
+ },
1182
+ invitations: {
1183
+ email: "E-mail-cím",
1184
+ invalidEmail: "Adjon meg egy teljes e-mail-címet.",
1185
+ role: "Szerepkör",
1186
+ scope: "Hatókör",
1187
+ scopeNone: "Nincs",
1188
+ language: "A meghívó nyelve",
1189
+ note: "Megjegyzés",
1190
+ invite: "Meghívás",
1191
+ listTitle: "Meghívók",
1192
+ empty: "Még senkit sem hívtak meg.",
1193
+ loading: "Betöltés…",
1194
+ status: { open: "Függőben", accepted: "Elfogadva", expired: "Lejárt", revoked: "Visszavonva" },
1195
+ sent: (date) => `Elküldve: ${date}`,
1196
+ expires: (date) => `Lejár: ${date}`,
1197
+ invitedBy: (name) => `Meghívta: ${name}`,
1198
+ resend: (email) => `Új hivatkozás küldése ide: ${email}`,
1199
+ copyLink: "Meghívóhivatkozás másolása",
1200
+ revoke: (email) => `Meghívó visszavonása: ${email}`,
1201
+ consoleHint:
1202
+ "Ez a szerver nem küld leveleket – a szervernaplóba írja őket. Innen másolja ki az egyes meghívóhivatkozásokat, és adja tovább maga: mindegyik csak egyszer jelenik meg.",
1203
+ linkReady: (email) => `Meghívóhivatkozás ehhez a címhez: ${email}. Csak most jelenik meg:`,
1204
+ notSent: (email) => `${email} meghívást kapott, de az e-mailt nem sikerült elküldeni. Küldje el újra.`,
1205
+ failed: "Ez nem sikerült. Kérjük, próbálja újra.",
1206
+ },
988
1207
  characterCount: {
989
1208
  // A noun after a numeral stays singular: "80 karakter".
990
1209
  count: (used, max) => `${n(used)} / ${n(max)} karakter`,