@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
@@ -3,6 +3,8 @@ import { formatFileSize } from "../kit-labels.js";
3
3
  function uiKitLabelsZh(numberLocale = "zh-CN") {
4
4
  const num = new Intl.NumberFormat(numberLocale);
5
5
  const n = (value) => num.format(value);
6
+ const wait = (seconds) => seconds < 60 ? `${n(Math.ceil(seconds))} \u79D2` : `${n(Math.ceil(seconds / 60))} \u5206\u949F`;
7
+ const rateLimited = (seconds) => !seconds || seconds <= 0 ? "\u5C1D\u8BD5\u6B21\u6570\u8FC7\u591A\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5\u3002" : `\u5C1D\u8BD5\u6B21\u6570\u8FC7\u591A\uFF0C\u8BF7 ${wait(seconds)}\u540E\u91CD\u8BD5\u3002`;
6
8
  return {
7
9
  feedbackAttachment: {
8
10
  attachmentAdd: "\u6DFB\u52A0\u9644\u4EF6",
@@ -133,7 +135,10 @@ function uiKitLabelsZh(numberLocale = "zh-CN") {
133
135
  role: "\u89D2\u8272",
134
136
  memberSince: "\u6CE8\u518C\u65F6\u95F4",
135
137
  displayName: "\u663E\u793A\u540D\u79F0",
136
- save: "\u4FDD\u5B58"
138
+ save: "\u4FDD\u5B58",
139
+ firstName: "\u540D\u5B57",
140
+ lastName: "\u59D3\u6C0F",
141
+ nameRequired: "\u8BF7\u540C\u65F6\u586B\u5199\u540D\u5B57\u548C\u59D3\u6C0F\u3002"
137
142
  },
138
143
  password: {
139
144
  title: "\u4FEE\u6539\u5BC6\u7801",
@@ -665,7 +670,9 @@ function uiKitLabelsZh(numberLocale = "zh-CN") {
665
670
  invited: "\u5DF2\u9080\u8BF7",
666
671
  registered: "\u5DF2\u6CE8\u518C",
667
672
  unverified: "\u672A\u9A8C\u8BC1",
668
- passwordChange: "\u9700\u4FEE\u6539\u5BC6\u7801"
673
+ passwordChange: "\u9700\u4FEE\u6539\u5BC6\u7801",
674
+ deletion: "\u5DF2\u7533\u8BF7\u5220\u9664",
675
+ deletionOn: (date) => `\u5C06\u4E8E ${date} \u5220\u9664`
669
676
  },
670
677
  shareCard: {
671
678
  dialogTitle: "\u5171\u4EAB",
@@ -800,6 +807,330 @@ ${o.postalCode} ${o.city}\uFF0C${o.country}
800
807
  }
801
808
  }
802
809
  },
810
+ // 0.29.0 — docs/auth-harmonization.md: Kurvenschmiede's reviewed Chinese (auth.*,
811
+ // notfound) where it says the same, brought into line with the kit's English and this
812
+ // catalogue's words ("通行密钥", "双重验证"); written fresh where Kurvenschmiede has no
813
+ // such text yet. Full-width punctuation; an interpolated address or name gets a space
814
+ // either side, none before full-width punctuation. It goes back to Kurvenschmiede for
815
+ // review.
816
+ signIn: {
817
+ email: "\u7535\u5B50\u90AE\u7BB1",
818
+ password: "\u5BC6\u7801",
819
+ submit: "\u767B\u5F55",
820
+ passkey: "\u4F7F\u7528\u901A\u884C\u5BC6\u94A5\u767B\u5F55",
821
+ forgotPassword: "\u5FD8\u8BB0\u5BC6\u7801\uFF1F",
822
+ noAccount: "\u8FD8\u6CA1\u6709\u8D26\u6237\uFF1F",
823
+ register: "\u521B\u5EFA\u8D26\u6237",
824
+ invalidCredentials: "\u7535\u5B50\u90AE\u7BB1\u6216\u5BC6\u7801\u4E0D\u6B63\u786E\u3002",
825
+ failed: "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
826
+ passkeyFailed: "\u901A\u884C\u5BC6\u94A5\u767B\u5F55\u5931\u8D25\u3002",
827
+ deactivatedHint: "\u8D26\u6237\u5DF2\u505C\u7528\uFF1F\u8BF7\u8054\u7CFB {contact}\u3002",
828
+ tagHint: (taggedAddress) => `\u6CE8\u518C\u65F6\u7528\u7684\u662F ${taggedAddress} \u5417\uFF1F\u8BF7\u4F7F\u7528\u8BE5\u5730\u5740\u3002`,
829
+ twoFactorTitle: "\u53CC\u91CD\u9A8C\u8BC1",
830
+ twoFactorIntro: "\u8BF7\u8F93\u5165\u8EAB\u4EFD\u9A8C\u8BC1\u5668\u5E94\u7528\u663E\u793A\u7684\u9A8C\u8BC1\u7801\u3002",
831
+ code: "\u9A8C\u8BC1\u7801",
832
+ verify: "\u9A8C\u8BC1",
833
+ codeInvalid: "\u9A8C\u8BC1\u7801\u65E0\u6548\u3002",
834
+ setPasswordTitle: "\u8BBE\u7F6E\u65B0\u5BC6\u7801",
835
+ setPasswordIntro: "\u5DF2\u8981\u6C42\u4E3A\u6B64\u8D26\u6237\u8BBE\u7F6E\u65B0\u5BC6\u7801\u3002\u8BBE\u7F6E\u4E4B\u540E\u5373\u53EF\u76F4\u63A5\u7EE7\u7EED\u4F7F\u7528\u3002",
836
+ newPassword: "\u65B0\u5BC6\u7801",
837
+ confirmPassword: "\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801",
838
+ passwordMismatch: "\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4\u3002",
839
+ setPasswordSubmit: "\u8BBE\u7F6E\u5BC6\u7801\u5E76\u767B\u5F55",
840
+ setPasswordFailed: "\u65E0\u6CD5\u8BBE\u7F6E\u5BC6\u7801\u3002",
841
+ expired: "\u672C\u6B21\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002",
842
+ backToSignIn: "\u8FD4\u56DE\u767B\u5F55",
843
+ useRecoveryCode: "\u4F7F\u7528\u5907\u7528\u7801",
844
+ useAuthenticatorCode: "\u4F7F\u7528\u8EAB\u4EFD\u9A8C\u8BC1\u5668\u5E94\u7528",
845
+ recoveryCode: "\u5907\u7528\u7801",
846
+ recoveryIntro: "\u8BF7\u8F93\u5165\u60A8\u5728\u5F00\u542F\u53CC\u91CD\u9A8C\u8BC1\u65F6\u4FDD\u5B58\u7684\u5907\u7528\u7801\u4E4B\u4E00\u3002",
847
+ recoveryCodeHint: (length) => `\u5171 ${n(length)} \u4F4D\u5B57\u6BCD\u548C\u6570\u5B57\uFF0C\u8FDE\u5B57\u7B26\u548C\u7A7A\u683C\u4E0D\u5F71\u54CD\u3002`,
848
+ recoveryCodeInvalid: "\u6B64\u5907\u7528\u7801\u65E0\u6548\u6216\u5DF2\u88AB\u4F7F\u7528\u3002",
849
+ rateLimited
850
+ },
851
+ register: {
852
+ firstName: "\u540D\u5B57",
853
+ lastName: "\u59D3\u6C0F",
854
+ email: "\u7535\u5B50\u90AE\u7BB1",
855
+ emailTagUse: (address) => `\u4F7F\u7528 ${address}`,
856
+ emailTagHint: "\u8BB8\u591A\u90AE\u4EF6\u670D\u52A1\u5546\u4F1A\u628A\u53D1\u5F80 name+tag@\u2026 \u7684\u90AE\u4EF6\u6295\u9012\u5230\u540C\u4E00\u4E2A\u6536\u4EF6\u7BB1\uFF0C\u8FD9\u6837\u672C\u5E94\u7528\u53D1\u6765\u7684\u90AE\u4EF6\u4FBF\u4E8E\u7B5B\u9009\u548C\u8FFD\u6EAF\u3002\u8BF7\u5148\u786E\u8BA4\u60A8\u7684\u670D\u52A1\u5546\u652F\u6301\u8FD9\u4E00\u70B9\u518D\u4F7F\u7528\uFF1A\u4E4B\u540E\u60A8\u9700\u8981\u7528\u5E26\u6807\u7B7E\u7684\u5730\u5740\u767B\u5F55\u3002",
857
+ invitedEmailHint: "\u63A5\u6536\u9080\u8BF7\u7684\u5730\u5740\u3002",
858
+ invitedTagNote: "\u5E26\u6807\u7B7E\u7684\u5730\u5740\u4F1A\u5355\u72EC\u6536\u5230\u4E00\u5C01\u786E\u8BA4\u90AE\u4EF6\u3002",
859
+ password: "\u5BC6\u7801",
860
+ confirmPassword: "\u518D\u6B21\u8F93\u5165\u5BC6\u7801",
861
+ passwordMismatch: "\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4\u3002",
862
+ language: "\u8BED\u8A00",
863
+ submit: "\u521B\u5EFA\u8D26\u6237",
864
+ haveAccount: "\u5DF2\u6709\u8D26\u6237\uFF1F",
865
+ signIn: "\u767B\u5F55",
866
+ emailTaken: "\u8BE5\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u5DF2\u6709\u8D26\u6237\u3002",
867
+ registrationClosed: "\u65B0\u8D26\u6237\u4EC5\u9650\u53D7\u9080\u6CE8\u518C\u3002\u8BF7\u8054\u7CFB\u8FD0\u8425\u8005\uFF0C\u4E3A\u60A8\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u53D1\u9001\u9080\u8BF7\u3002",
868
+ invitationInvalid: "\u6B64\u9080\u8BF7\u94FE\u63A5\u65E0\u6548\u3002",
869
+ invitationExpired: "\u6B64\u9080\u8BF7\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u7D22\u53D6\u65B0\u7684\u9080\u8BF7\u3002",
870
+ failed: "\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
871
+ rateLimited
872
+ },
873
+ completeName: {
874
+ title: "\u5B8C\u5584\u60A8\u7684\u59D3\u540D",
875
+ description: "\u73B0\u5728\u9700\u8981\u5206\u522B\u586B\u5199\u540D\u5B57\u548C\u59D3\u6C0F\u3002\u8BF7\u68C0\u67E5\u5DF2\u586B\u5199\u7684\u5185\u5BB9\uFF0C\u5E76\u8865\u5145\u7F3A\u5C11\u7684\u90E8\u5206\u3002",
876
+ firstName: "\u540D\u5B57",
877
+ lastName: "\u59D3\u6C0F",
878
+ save: "\u4FDD\u5B58",
879
+ later: "\u7A0D\u540E",
880
+ failed: "\u65E0\u6CD5\u4FDD\u5B58\u60A8\u7684\u59D3\u540D\uFF0C\u8BF7\u91CD\u8BD5\u3002"
881
+ },
882
+ forgotPassword: {
883
+ title: "\u5FD8\u8BB0\u5BC6\u7801",
884
+ intro: "\u8BF7\u8F93\u5165\u60A8\u8D26\u6237\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u3002\u6211\u4EEC\u4F1A\u5411\u60A8\u53D1\u9001\u4E00\u4E2A\u8BBE\u7F6E\u65B0\u5BC6\u7801\u7684\u94FE\u63A5\u3002",
885
+ email: "\u7535\u5B50\u90AE\u7BB1",
886
+ submit: "\u53D1\u9001\u94FE\u63A5",
887
+ sent: (email) => `\u5982\u679C ${email} \u6709\u8D26\u6237\uFF0C\u94FE\u63A5\u6B63\u5728\u53D1\u9001\u4E2D\u3002`,
888
+ sentHint: "\u8BE5\u94FE\u63A5\u6709\u6548\u671F\u4E00\u5C0F\u65F6\uFF0C\u4E14\u4EC5\u53EF\u4F7F\u7528\u4E00\u6B21\u3002\u4E5F\u8BF7\u67E5\u770B\u5783\u573E\u90AE\u4EF6\u6587\u4EF6\u5939\u3002",
889
+ backToSignIn: "\u8FD4\u56DE\u767B\u5F55",
890
+ error: "\u8BF7\u6C42\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
891
+ rateLimited
892
+ },
893
+ resetPassword: {
894
+ title: "\u8BBE\u7F6E\u65B0\u5BC6\u7801",
895
+ checking: "\u6B63\u5728\u68C0\u67E5\u94FE\u63A5\u2026",
896
+ intro: (email) => `\u60A8\u6B63\u5728\u4E3A ${email} \u8BBE\u7F6E\u65B0\u5BC6\u7801\u3002`,
897
+ newPassword: "\u65B0\u5BC6\u7801",
898
+ confirmPassword: "\u518D\u6B21\u8F93\u5165\u65B0\u5BC6\u7801",
899
+ mismatch: "\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4\u3002",
900
+ submit: "\u4FDD\u5B58\u5BC6\u7801",
901
+ failed: "\u65E0\u6CD5\u4FEE\u6539\u5BC6\u7801\u3002",
902
+ noToken: "\u6B64\u94FE\u63A5\u4E0D\u5B8C\u6574\u3002",
903
+ invalid: "\u6B64\u94FE\u63A5\u65E0\u6548\u6216\u5DF2\u8FC7\u671F\u3002",
904
+ invalidHint: "\u94FE\u63A5\u6709\u6548\u671F\u4E00\u5C0F\u65F6\uFF0C\u4E14\u4EC5\u53EF\u4F7F\u7528\u4E00\u6B21\u3002\u91CD\u65B0\u7533\u8BF7\u4E00\u4E2A\u5373\u53EF\u3002",
905
+ requestNew: "\u7533\u8BF7\u65B0\u94FE\u63A5",
906
+ success: "\u60A8\u7684\u5BC6\u7801\u5DF2\u4FEE\u6539\uFF0C\u73B0\u5728\u53EF\u4EE5\u7528\u5B83\u767B\u5F55\u4E86\u3002",
907
+ sessionsEnded: "\u5DF2\u767B\u5F55\u7684\u8BBE\u5907\u5747\u5DF2\u9000\u51FA\u767B\u5F55\u2014\u2014\u60A8\u9700\u8981\u5728\u8FD9\u4E9B\u8BBE\u5907\u4E0A\u91CD\u65B0\u767B\u5F55\u3002",
908
+ signIn: "\u524D\u5F80\u767B\u5F55",
909
+ rateLimited
910
+ },
911
+ verifyEmail: {
912
+ title: "\u786E\u8BA4\u60A8\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
913
+ verifying: "\u6B63\u5728\u786E\u8BA4\u2026",
914
+ verified: "\u60A8\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u5DF2\u786E\u8BA4\u3002",
915
+ continue: "\u7EE7\u7EED",
916
+ invalid: "\u6B64\u786E\u8BA4\u94FE\u63A5\u65E0\u6548",
917
+ expired: "\u6B64\u786E\u8BA4\u94FE\u63A5\u5DF2\u8FC7\u671F",
918
+ noToken: "\u6B64\u94FE\u63A5\u7F3A\u5C11\u786E\u8BA4\u4EE4\u724C\u3002",
919
+ invalidHint: "\u8BE5\u94FE\u63A5\u53EF\u80FD\u5DF2\u8FC7\u671F\u6216\u5DF2\u88AB\u4F7F\u7528\u3002",
920
+ requestInApp: "\u60A8\u53EF\u4EE5\u5728\u5E94\u7528\u5185\u7533\u8BF7\u65B0\u7684\u94FE\u63A5\u3002",
921
+ requestHere: "\u60A8\u53EF\u4EE5\u5728\u6B64\u7533\u8BF7\u65B0\u7684\u94FE\u63A5\u3002",
922
+ resend: "\u91CD\u65B0\u53D1\u9001",
923
+ resendIn: (seconds) => `${n(seconds)} \u79D2\u540E\u53EF\u91CD\u65B0\u53D1\u9001`,
924
+ resent: "\u786E\u8BA4\u90AE\u4EF6\u5DF2\u53D1\u9001",
925
+ resendError: "\u65E0\u6CD5\u53D1\u9001\u786E\u8BA4\u90AE\u4EF6",
926
+ banner: "\u8BF7\u786E\u8BA4\u60A8\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u3002",
927
+ dismiss: "\u6682\u4E0D"
928
+ },
929
+ notFound: {
930
+ title: "\u672A\u627E\u5230\u9875\u9762",
931
+ body: "\u6B64\u5730\u5740\u4E0D\u5B58\u5728\uFF08\u6216\u5DF2\u4E0D\u5B58\u5728\uFF09\u3002\u53EF\u80FD\u662F\u8F93\u5165\u6709\u8BEF\uFF0C\u4E5F\u53EF\u80FD\u662F\u9875\u9762\u5DF2\u88AB\u79FB\u52A8\u3002",
932
+ home: "\u524D\u5F80\u9996\u9875",
933
+ app: "\u8FD4\u56DE\u5E94\u7528"
934
+ },
935
+ acceptInvitation: {
936
+ title: "\u63A5\u53D7\u9080\u8BF7",
937
+ accepting: "\u6B63\u5728\u52A0\u5165\u2026",
938
+ accepted: "\u5DF2\u63A5\u53D7\u9080\u8BF7\u3002",
939
+ joined: (name) => `\u60A8\u5DF2\u52A0\u5165 ${name}\u3002`,
940
+ continue: "\u7EE7\u7EED",
941
+ invalid: "\u65E0\u6CD5\u901A\u8FC7\u6B64\u94FE\u63A5\u52A0\u5165",
942
+ expired: "\u6B64\u9080\u8BF7\u5DF2\u8FC7\u671F",
943
+ noToken: "\u6B64\u94FE\u63A5\u7F3A\u5C11\u9080\u8BF7\u4EE4\u724C\u3002",
944
+ askAgain: "\u8BF7\u8BA9\u9080\u8BF7\u60A8\u7684\u4EBA\u91CD\u65B0\u53D1\u9001\u4E00\u4EFD\u9080\u8BF7\u3002",
945
+ signInFirst: "\u767B\u5F55\u4EE5\u63A5\u53D7\u6B64\u9080\u8BF7",
946
+ signInHint: "\u8BF7\u4F7F\u7528\u6536\u5230\u9080\u8BF7\u7684\u8D26\u6237\u767B\u5F55\u3002",
947
+ signIn: "\u767B\u5F55",
948
+ register: "\u521B\u5EFA\u8D26\u6237"
949
+ },
950
+ companySwitcher: {
951
+ switchCompany: "\u5207\u6362\u516C\u53F8",
952
+ heading: "\u516C\u53F8",
953
+ current: (name) => `\u516C\u53F8\uFF1A${name}`,
954
+ currentMark: "\uFF08\u5F53\u524D\uFF09",
955
+ switching: "\u6B63\u5728\u5207\u6362\u516C\u53F8\u2026"
956
+ },
957
+ // 0.30.0 — docs/user-admin-harmonization.md: Kurvenschmiede's reviewed Chinese for the
958
+ // admin words (停用、角色、审校者), transfer (移交), invitations and sessions;
959
+ // written fresh where it had no sentence.
960
+ emailChange: {
961
+ title: "\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
962
+ current: "\u5F53\u524D\u5730\u5740",
963
+ newEmail: "\u65B0\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
964
+ password: "\u5F53\u524D\u5BC6\u7801",
965
+ passwordHint: "\u60A8\u4F7F\u7528\u6B64\u5730\u5740\u767B\u5F55\uFF0C\u56E0\u6B64\u66F4\u6539\u5B83\u9700\u8981\u8F93\u5165\u5BC6\u7801\u3002",
966
+ emailTagUse: (address) => `\u4F7F\u7528 ${address}`,
967
+ emailTagHint: "\u8BB8\u591A\u90AE\u4EF6\u670D\u52A1\u5546\u4F1A\u628A\u53D1\u5F80 name+tag@\u2026 \u7684\u90AE\u4EF6\u6295\u9012\u5230\u540C\u4E00\u4E2A\u6536\u4EF6\u7BB1\uFF0C\u8FD9\u6837\u672C\u5E94\u7528\u53D1\u6765\u7684\u90AE\u4EF6\u4FBF\u4E8E\u7B5B\u9009\u548C\u8FFD\u6EAF\u3002\u8BF7\u5148\u786E\u8BA4\u60A8\u7684\u670D\u52A1\u5546\u652F\u6301\u8FD9\u4E00\u70B9\u518D\u4F7F\u7528\uFF1A\u4E4B\u540E\u60A8\u9700\u8981\u7528\u5E26\u6807\u7B7E\u7684\u5730\u5740\u767B\u5F55\u3002",
968
+ submit: "\u66F4\u6539\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
969
+ sameAsCurrent: "\u8FD9\u5DF2\u7ECF\u662F\u60A8\u7684\u5730\u5740\u3002",
970
+ emailTaken: "\u8BE5\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u5DF2\u6709\u8D26\u6237\u3002",
971
+ wrongPassword: "\u5BC6\u7801\u4E0D\u6B63\u786E\u3002",
972
+ pending: (newEmail) => `\u8BF7\u70B9\u51FB\u6211\u4EEC\u53D1\u9001\u5230 ${newEmail} \u7684\u94FE\u63A5\u8FDB\u884C\u786E\u8BA4\u3002`,
973
+ pendingHint: (currentEmail) => `\u5728\u6B64\u4E4B\u524D\uFF0C\u60A8\u4ECD\u4F7F\u7528 ${currentEmail} \u767B\u5F55\u3002\u4E5F\u8BF7\u67E5\u770B\u5783\u573E\u90AE\u4EF6\u6587\u4EF6\u5939\u3002`,
974
+ resend: "\u91CD\u65B0\u53D1\u9001\u94FE\u63A5",
975
+ resent: "\u94FE\u63A5\u5DF2\u91CD\u65B0\u53D1\u9001\u3002",
976
+ cancel: "\u53D6\u6D88\u66F4\u6539",
977
+ confirmed: (email) => `\u60A8\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u73B0\u5728\u662F ${email}\u3002`,
978
+ passkeyNote: "\u60A8\u7684\u901A\u884C\u5BC6\u94A5\u4ECD\u53EF\u6B63\u5E38\u4F7F\u7528\u3002\u60A8\u7684\u8BBE\u5907\u53EF\u80FD\u4ECD\u4EE5\u65E7\u5730\u5740\u5217\u51FA\u5B83\u4EEC\u3002",
979
+ rateLimited,
980
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
981
+ },
982
+ sessions: {
983
+ title: "\u4F1A\u8BDD",
984
+ description: "\u5728\u4E0D\u518D\u4F7F\u7528\u6216\u4E0D\u4FE1\u4EFB\u7684\u8BBE\u5907\u4E0A\u767B\u5F55\u8FC7\uFF1F\u8BF7\u5728\u6240\u6709\u8BBE\u5907\u4E0A\u9000\u51FA\u767B\u5F55\u3002",
985
+ signOutEverywhere: "\u5728\u6240\u6709\u8BBE\u5907\u4E0A\u9000\u51FA\u767B\u5F55\u2026",
986
+ signOutEverywherePrompt: "\u8FD9\u5C06\u7ED3\u675F\u6240\u6709\u4F1A\u8BDD\uFF0C\u5305\u62EC\u5F53\u524D\u4F1A\u8BDD\uFF1A\u6B64\u8BBE\u5907\u4E5F\u4F1A\u9000\u51FA\u767B\u5F55\uFF0C\u60A8\u9700\u8981\u5728\u8FD9\u91CC\u91CD\u65B0\u767B\u5F55\u3002",
987
+ confirmSignOutEverywhere: "\u5728\u6240\u6709\u8BBE\u5907\u4E0A\u9000\u51FA\u767B\u5F55",
988
+ list: "\u60A8\u5DF2\u767B\u5F55\u7684\u8BBE\u5907",
989
+ loading: "\u6B63\u5728\u52A0\u8F7D\u4F1A\u8BDD\u2026",
990
+ empty: "\u6CA1\u6709\u53EF\u663E\u793A\u7684\u4F1A\u8BDD\u3002",
991
+ current: "\u6B64\u8BBE\u5907",
992
+ unknownDevice: "\u672A\u77E5\u8BBE\u5907",
993
+ lastActive: (when) => `\u4E0A\u6B21\u6D3B\u52A8\uFF1A${when}`,
994
+ ip: (address) => `IP\uFF1A${address}`,
995
+ revoke: "\u9000\u51FA\u767B\u5F55",
996
+ // Starts with `revoke`, the button's visible text, for voice control.
997
+ revokeItem: (device) => `\u9000\u51FA\u767B\u5F55\uFF1A${device}`,
998
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
999
+ },
1000
+ deleteAccount: {
1001
+ title: "\u5220\u9664\u8D26\u6237",
1002
+ afterDays: (days) => `\u60A8\u7684\u8D26\u6237\u5C06\u7ACB\u5373\u505C\u7528\uFF0C\u5E76\u5728 ${n(days)} \u5929\u540E\u88AB\u6C38\u4E45\u5220\u9664\u3002`,
1003
+ operator: "\u60A8\u7684\u8D26\u6237\u5C06\u7ACB\u5373\u505C\u7528\uFF0C\u4E4B\u540E\u7531\u8FD0\u8425\u8005\u5C06\u5176\u6C38\u4E45\u5220\u9664\u3002",
1004
+ arm: "\u5220\u9664\u8D26\u6237\u2026",
1005
+ prompt: "\u60A8\u5C06\u5728\u6240\u6709\u8BBE\u5907\u4E0A\u9000\u51FA\u767B\u5F55\uFF0C\u4E14\u65E0\u6CD5\u518D\u4F7F\u7528\u6B64\u8D26\u6237\u3002",
1006
+ handOver: (count) => `${n(count)} \u9879\u4ED6\u4EBA\u53EF\u89C1\u7684\u5185\u5BB9\u5C06\u79FB\u4EA4\u7ED9\u4E00\u4F4D\u7BA1\u7406\u5458\u3002`,
1007
+ confirm: "\u5220\u9664\u6211\u7684\u8D26\u6237",
1008
+ done: "\u60A8\u7684\u8D26\u6237\u5DF2\u505C\u7528\uFF0C\u6B63\u5728\u9000\u51FA\u767B\u5F55\u3002",
1009
+ wrongPassword: "\u5BC6\u7801\u4E0D\u6B63\u786E\u3002",
1010
+ confirmationMismatch: "\u8FD9\u4E0D\u662F\u60A8\u8D26\u6237\u7684\u5730\u5740\u3002",
1011
+ lastAdmin: "\u60A8\u662F\u6700\u540E\u4E00\u4F4D\u7BA1\u7406\u5458\u3002\u8BF7\u5148\u5C06\u5176\u4ED6\u4EBA\u8BBE\u4E3A\u7BA1\u7406\u5458\u3002",
1012
+ lastAdminOf: (companies) => `\u60A8\u662F ${companies} \u7684\u6700\u540E\u4E00\u4F4D\u7BA1\u7406\u5458\u3002\u8BF7\u5148\u5728\u90A3\u91CC\u5C06\u5176\u4ED6\u4EBA\u8BBE\u4E3A\u7BA1\u7406\u5458\u3002`,
1013
+ householdHasMembers: "\u60A8\u7684\u5BB6\u5EAD\u8FD8\u6709\u5176\u4ED6\u6210\u5458\uFF0C\u56E0\u6B64\u65E0\u6CD5\u5728\u6B64\u5220\u9664\u8D26\u6237\u3002\u8BF7\u8054\u7CFB\u8FD0\u8425\u8005\u3002",
1014
+ rateLimited,
1015
+ failed: "\u65E0\u6CD5\u5220\u9664\u60A8\u7684\u8D26\u6237\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1016
+ },
1017
+ dataExport: {
1018
+ title: "\u5BFC\u51FA\u60A8\u7684\u6570\u636E",
1019
+ description: "\u4E0B\u8F7D\u60A8\u8D26\u6237\u6570\u636E\u7684\u526F\u672C\uFF08JSON \u6587\u4EF6\uFF09\u3002",
1020
+ download: "\u4E0B\u8F7D\u6211\u7684\u6570\u636E",
1021
+ started: "\u4E0B\u8F7D\u5DF2\u5F00\u59CB\u3002",
1022
+ saveAgain: "\u6CA1\u6709\u5F00\u59CB\uFF1F\u4FDD\u5B58\u6587\u4EF6",
1023
+ rateLimited: (seconds) => seconds && seconds > 0 ? `\u60A8\u521A\u521A\u5BFC\u51FA\u8FC7\u6570\u636E\uFF0C\u8BF7 ${wait(seconds)}\u540E\u91CD\u8BD5\u3002` : "\u60A8\u521A\u521A\u5BFC\u51FA\u8FC7\u6570\u636E\uFF0C\u8BF7\u4E00\u5206\u949F\u540E\u91CD\u8BD5\u3002",
1024
+ failed: "\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1025
+ },
1026
+ userRoster: {
1027
+ name: "\u59D3\u540D",
1028
+ email: "\u7535\u5B50\u90AE\u7BB1",
1029
+ role: "\u89D2\u8272",
1030
+ state: "\u72B6\u6001",
1031
+ created: "\u521B\u5EFA\u65F6\u95F4",
1032
+ lastLogin: "\u6700\u540E\u767B\u5F55",
1033
+ never: "\u4ECE\u672A",
1034
+ actions: "\u64CD\u4F5C",
1035
+ actionsFor: (name) => `${name} \u7684\u64CD\u4F5C`
1036
+ },
1037
+ roleSelect: {
1038
+ label: "\u89D2\u8272",
1039
+ rolesLegend: "\u89D2\u8272",
1040
+ roleOf: (name) => `${name} \u7684\u89D2\u8272`,
1041
+ lockedLastAdmin: "\u6700\u540E\u4E00\u4F4D\u6D3B\u8DC3\u7BA1\u7406\u5458\u5FC5\u987B\u4FDD\u7559\u6B64\u89D2\u8272\u3002",
1042
+ lockedSelf: "\u60A8\u4E0D\u80FD\u66F4\u6539\u81EA\u5DF1\u7684\u89D2\u8272\u3002",
1043
+ notForLastAdmin: "\u4E0D\u9002\u7528\u4E8E\u6700\u540E\u4E00\u4F4D\u7BA1\u7406\u5458",
1044
+ notForSelf: "\u4E0D\u9002\u7528\u4E8E\u60A8\u81EA\u5DF1\u7684\u8D26\u6237",
1045
+ unavailable: (role, reason) => `${role}\uFF08${reason}\uFF09`
1046
+ },
1047
+ reviewerScope: {
1048
+ languages: "\u8BED\u8A00",
1049
+ hint: "\u52FE\u9009\u6B64\u4EBA\u8D1F\u8D23\u5BA1\u6821\u7684\u8BED\u8A00\u3002",
1050
+ none: "\u672A\u9009\u62E9\u8BED\u8A00\uFF1A\u4FDD\u5B58\u540E\u5C06\u53D6\u6D88\u5BA1\u6821\u8005\u89D2\u8272\u3002",
1051
+ areas: "\u4EC5\u9650",
1052
+ legalOnly: "\u4EC5\u6CD5\u5F8B\u9875\u9762",
1053
+ legalOnlyHint: "\u8FD0\u8425\u8005\u4FE1\u606F\u3001\u9690\u79C1\u653F\u7B56\u548C\u4F7F\u7528\u6761\u6B3E\u2014\u2014\u9002\u5408\u5F8B\u5E08\u800C\u975E\u6BCD\u8BED\u5BA1\u6821\u8005\u3002",
1054
+ failed: "\u65E0\u6CD5\u4FDD\u5B58\u5BA1\u6821\u8303\u56F4\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1055
+ },
1056
+ adminAction: {
1057
+ confirm: "\u786E\u8BA4",
1058
+ cancel: "\u53D6\u6D88",
1059
+ close: "\u5173\u95ED",
1060
+ lastAdmin: "\u8FD9\u662F\u6700\u540E\u4E00\u4F4D\u6D3B\u8DC3\u7BA1\u7406\u5458\u3002\u8BF7\u5148\u5C06\u5176\u4ED6\u4EBA\u8BBE\u4E3A\u7BA1\u7406\u5458\u3002",
1061
+ self: "\u4E0D\u80FD\u5BF9\u60A8\u81EA\u5DF1\u7684\u8D26\u6237\u6267\u884C\u6B64\u64CD\u4F5C\u3002",
1062
+ confirmationMismatch: "\u8BE5\u5730\u5740\u4E0E\u6B64\u8D26\u6237\u4E0D\u7B26\u3002\u8BF7\u68C0\u67E5\u60A8\u5F53\u524D\u6240\u5728\u7684\u8D26\u6237\u3002",
1063
+ otherCompanies: "\u6B64\u8D26\u6237\u4E5F\u5C5E\u4E8E\u5176\u4ED6\u516C\u53F8\uFF0C\u56E0\u6B64\u53EA\u6709\u5E73\u53F0\u8FD0\u8425\u8005\u624D\u80FD\u6267\u884C\u6B64\u64CD\u4F5C\u3002\u60A8\u53EF\u4EE5\u6539\u4E3A\u5C06\u5176\u4ECE\u672C\u516C\u53F8\u79FB\u9664\u3002",
1064
+ removeFromCompany: "\u4ECE\u516C\u53F8\u79FB\u9664",
1065
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1066
+ },
1067
+ adminActionLog: {
1068
+ title: "\u7BA1\u7406\u64CD\u4F5C",
1069
+ empty: "\u6682\u65E0\u7BA1\u7406\u64CD\u4F5C\u3002",
1070
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
1071
+ by: (actor) => `\u64CD\u4F5C\u8005\uFF1A${actor}`,
1072
+ bySelf: "\u7528\u6237\u672C\u4EBA",
1073
+ automatic: "\u81EA\u52A8\u6267\u884C",
1074
+ erased: "\u5DF2\u5220\u9664\u7684\u8D26\u6237",
1075
+ filteredTo: (target) => `\u4EC5 ${target}`,
1076
+ showAll: "\u663E\u793A\u5168\u90E8\u64CD\u4F5C",
1077
+ filterBy: (target) => `\u4EC5\u663E\u793A\u9488\u5BF9 ${target} \u7684\u64CD\u4F5C`,
1078
+ actions: {
1079
+ deactivate: "\u5DF2\u505C\u7528",
1080
+ reactivate: "\u5DF2\u91CD\u65B0\u6FC0\u6D3B",
1081
+ role: "\u89D2\u8272\u5DF2\u66F4\u6539",
1082
+ membership_remove: "\u5DF2\u4ECE\u516C\u53F8\u79FB\u9664",
1083
+ password_change_require: "\u5DF2\u8981\u6C42\u8BBE\u7F6E\u65B0\u5BC6\u7801",
1084
+ password_change_withdraw: "\u5DF2\u64A4\u56DE\u65B0\u5BC6\u7801\u8981\u6C42",
1085
+ mail_verification: "\u5DF2\u53D1\u9001\u786E\u8BA4\u90AE\u4EF6",
1086
+ mail_reset: "\u5DF2\u53D1\u9001\u5BC6\u7801\u91CD\u7F6E\u90AE\u4EF6",
1087
+ reviewer: "\u5BA1\u6821\u8303\u56F4\u5DF2\u66F4\u6539",
1088
+ invite: "\u5DF2\u9080\u8BF7",
1089
+ invite_resend: "\u5DF2\u91CD\u65B0\u53D1\u9001\u9080\u8BF7",
1090
+ invite_revoke: "\u5DF2\u64A4\u56DE\u9080\u8BF7",
1091
+ transfer: "\u5DE5\u4F5C\u5DF2\u79FB\u4EA4",
1092
+ deletion_request: "\u5DF2\u7533\u8BF7\u5220\u9664",
1093
+ deletion_cancel: "\u5DF2\u53D6\u6D88\u5220\u9664",
1094
+ erase: "\u8D26\u6237\u5DF2\u6C38\u4E45\u5220\u9664"
1095
+ }
1096
+ },
1097
+ transferOwnership: {
1098
+ title: (name) => `\u79FB\u4EA4 ${name} \u7684\u5DE5\u4F5C`,
1099
+ body: "\u6B64\u8D26\u6237\u62E5\u6709\u7684\u5168\u90E8\u5185\u5BB9\u5C06\u4E00\u6B21\u6027\u8F6C\u79FB\u5230\u60A8\u9009\u62E9\u7684\u8D26\u6237\u3002",
1100
+ recipient: "\u79FB\u4EA4\u7ED9",
1101
+ choose: "\u9009\u62E9\u8D26\u6237\u2026",
1102
+ chooseFirst: "\u8BF7\u9009\u62E9\u63A5\u6536\u5DE5\u4F5C\u7684\u4EBA",
1103
+ confirm: "\u79FB\u4EA4",
1104
+ customer: "\u5BA2\u6237",
1105
+ deactivated: "\u5DF2\u505C\u7528",
1106
+ self: "\u540C\u4E00\u8D26\u6237",
1107
+ unavailable: (account, reason) => `${account}\uFF08${reason}\uFF09`,
1108
+ noCandidates: "\u6CA1\u6709\u5176\u4ED6\u8D26\u6237\u53EF\u4EE5\u63A5\u6536\u3002"
1109
+ },
1110
+ invitations: {
1111
+ email: "\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
1112
+ invalidEmail: "\u8BF7\u8F93\u5165\u5B8C\u6574\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u3002",
1113
+ role: "\u89D2\u8272",
1114
+ scope: "\u8303\u56F4",
1115
+ scopeNone: "\u65E0",
1116
+ language: "\u9080\u8BF7\u90AE\u4EF6\u8BED\u8A00",
1117
+ note: "\u5907\u6CE8",
1118
+ invite: "\u9080\u8BF7",
1119
+ listTitle: "\u9080\u8BF7",
1120
+ empty: "\u5C1A\u672A\u9080\u8BF7\u4EFB\u4F55\u4EBA\u3002",
1121
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
1122
+ status: { open: "\u7B49\u5F85\u4E2D", accepted: "\u5DF2\u63A5\u53D7", expired: "\u5DF2\u8FC7\u671F", revoked: "\u5DF2\u64A4\u56DE" },
1123
+ sent: (date) => `\u53D1\u9001\u4E8E ${date}`,
1124
+ expires: (date) => `${date} \u5230\u671F`,
1125
+ invitedBy: (name) => `\u9080\u8BF7\u4EBA\uFF1A${name}`,
1126
+ resend: (email) => `\u5411 ${email} \u53D1\u9001\u65B0\u94FE\u63A5`,
1127
+ copyLink: "\u590D\u5236\u9080\u8BF7\u94FE\u63A5",
1128
+ revoke: (email) => `\u64A4\u56DE\u5BF9 ${email} \u7684\u9080\u8BF7`,
1129
+ consoleHint: "\u6B64\u670D\u52A1\u5668\u4E0D\u53D1\u9001\u90AE\u4EF6\u2014\u2014\u90AE\u4EF6\u4F1A\u5199\u5165\u670D\u52A1\u5668\u65E5\u5FD7\u3002\u8BF7\u5728\u8FD9\u91CC\u590D\u5236\u6BCF\u4E2A\u9080\u8BF7\u94FE\u63A5\u5E76\u81EA\u884C\u8F6C\u4EA4\uFF1A\u94FE\u63A5\u53EA\u663E\u793A\u4E00\u6B21\u3002",
1130
+ linkReady: (email) => `${email} \u7684\u9080\u8BF7\u94FE\u63A5\uFF0C\u4EC5\u663E\u793A\u8FD9\u4E00\u6B21\uFF1A`,
1131
+ notSent: (email) => `\u5DF2\u9080\u8BF7 ${email}\uFF0C\u4F46\u90AE\u4EF6\u672A\u80FD\u53D1\u9001\u3002\u8BF7\u91CD\u65B0\u53D1\u9001\u3002`,
1132
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1133
+ },
803
1134
  characterCount: {
804
1135
  count: (used, max) => `\u5DF2\u8F93\u5165 ${n(used)}/${n(max)} \u4E2A\u5B57\u7B26`,
805
1136
  remaining: (left) => `\u8FD8\u53EF\u8F93\u5165 ${n(left)} \u4E2A\u5B57\u7B26`,