@eifi1/ui-kit 0.29.0 → 0.31.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 (307) hide show
  1. package/README.md +65 -6
  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 +114 -0
  7. package/dist/account/data-export-setting.js.map +1 -0
  8. package/dist/account/delete-account-setting.d.ts +95 -0
  9. package/dist/account/delete-account-setting.js +200 -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 +278 -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 +147 -0
  16. package/dist/account/sessions-setting.js.map +1 -0
  17. package/dist/admin/admin-action-confirm.d.ts +95 -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 +95 -0
  27. package/dist/admin/invitations-panel.js +290 -0
  28. package/dist/admin/invitations-panel.js.map +1 -0
  29. package/dist/admin/reviewer-scope-editor.d.ts +95 -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 +95 -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 +95 -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 +95 -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 +103 -6
  42. package/dist/auth/auth-errors.js +68 -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 +21 -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 +75 -9
  54. package/dist/auth/sign-in-form.js +105 -15
  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 +20 -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 +24 -1
  64. package/dist/components/account-settings-labels.js +6 -2
  65. package/dist/components/account-settings-labels.js.map +1 -1
  66. package/dist/components/account-settings.d.ts +69 -8
  67. package/dist/components/account-settings.js +133 -25
  68. package/dist/components/account-settings.js.map +1 -1
  69. package/dist/components/amount-input.d.ts +21 -12
  70. package/dist/components/button-group.d.ts +21 -12
  71. package/dist/components/calculator.d.ts +21 -12
  72. package/dist/components/confirm-dialog.d.ts +21 -12
  73. package/dist/components/copy-button.d.ts +18 -9
  74. package/dist/components/danger-confirm.d.ts +21 -12
  75. package/dist/components/data-table.js +8 -1
  76. package/dist/components/data-table.js.map +1 -1
  77. package/dist/components/date-picker.js +9 -4
  78. package/dist/components/date-picker.js.map +1 -1
  79. package/dist/components/facing-pair.d.ts +21 -12
  80. package/dist/components/file-button.d.ts +21 -12
  81. package/dist/components/file-dropzone.d.ts +21 -12
  82. package/dist/components/form-actions.d.ts +21 -12
  83. package/dist/components/iban-input.d.ts +21 -12
  84. package/dist/components/language-select.d.ts +21 -12
  85. package/dist/components/legal-page.d.ts +21 -12
  86. package/dist/components/legal.d.ts +21 -12
  87. package/dist/components/money-field.d.ts +21 -12
  88. package/dist/components/number-field.d.ts +21 -12
  89. package/dist/components/number-input.d.ts +21 -12
  90. package/dist/components/numpad-sheet.d.ts +21 -12
  91. package/dist/components/passkeys-setting.js +2 -1
  92. package/dist/components/passkeys-setting.js.map +1 -1
  93. package/dist/components/phone-input.d.ts +21 -12
  94. package/dist/components/series-chart.d.ts +21 -12
  95. package/dist/components/settings-fields.d.ts +55 -13
  96. package/dist/components/settings-fields.js +20 -1
  97. package/dist/components/settings-fields.js.map +1 -1
  98. package/dist/components/share-card.d.ts +20 -11
  99. package/dist/components/text-link.d.ts +21 -12
  100. package/dist/components/time-input.d.ts +21 -12
  101. package/dist/components/ui.d.ts +17 -8
  102. package/dist/{register-form-V1OeNlMr.d.ts → delete-account-setting-DCFS5Vof.d.ts} +6612 -5612
  103. package/dist/demo/demo-banner.d.ts +51 -0
  104. package/dist/demo/demo-banner.js +97 -0
  105. package/dist/demo/demo-banner.js.map +1 -0
  106. package/dist/demo/demo-countdown.d.ts +58 -0
  107. package/dist/demo/demo-countdown.js +79 -0
  108. package/dist/demo/demo-countdown.js.map +1 -0
  109. package/dist/demo/demo-ended.d.ts +45 -0
  110. package/dist/demo/demo-ended.js +42 -0
  111. package/dist/demo/demo-ended.js.map +1 -0
  112. package/dist/demo/demo-labels.d.ts +53 -0
  113. package/dist/demo/demo-labels.js +29 -0
  114. package/dist/demo/demo-labels.js.map +1 -0
  115. package/dist/demo/demo-session.d.ts +30 -0
  116. package/dist/demo/demo-session.js +8 -0
  117. package/dist/demo/demo-session.js.map +1 -0
  118. package/dist/demo/demo-start.d.ts +54 -0
  119. package/dist/demo/demo-start.js +68 -0
  120. package/dist/demo/demo-start.js.map +1 -0
  121. package/dist/feedback/feedback-attachment.d.ts +21 -12
  122. package/dist/feedback/feedback-context.d.ts +21 -12
  123. package/dist/feedback/feedback-crash.d.ts +21 -12
  124. package/dist/feedback/feedback-dialog.d.ts +21 -12
  125. package/dist/feedback/feedback-inbox.d.ts +21 -12
  126. package/dist/feedback/feedback-inbox.js +12 -2
  127. package/dist/feedback/feedback-inbox.js.map +1 -1
  128. package/dist/feedback/feedback-labels.d.ts +21 -12
  129. package/dist/feedback/feedback-labels.js +1 -0
  130. package/dist/feedback/feedback-labels.js.map +1 -1
  131. package/dist/feedback/feedback-menu.d.ts +21 -12
  132. package/dist/feedback/feedback-record.d.ts +21 -12
  133. package/dist/feedback/feedback-record.js +2 -0
  134. package/dist/feedback/feedback-record.js.map +1 -1
  135. package/dist/feedback/feedback-row-detail.d.ts +21 -12
  136. package/dist/feedback/feedback-row-detail.js +7 -0
  137. package/dist/feedback/feedback-row-detail.js.map +1 -1
  138. package/dist/feedback/feedback-status-undo.d.ts +21 -12
  139. package/dist/feedback/feedback-submit.d.ts +21 -12
  140. package/dist/feedback/feedback-swipe.d.ts +22 -13
  141. package/dist/feedback/feedback-swipe.js.map +1 -1
  142. package/dist/feedback/feedback-table.d.ts +18 -9
  143. package/dist/feedback/feedback-thread.d.ts +21 -12
  144. package/dist/feedback.d.ts +21 -12
  145. package/dist/hooks/use-anchored-panel.d.ts +6 -2
  146. package/dist/hooks/use-anchored-panel.js +2 -1
  147. package/dist/hooks/use-anchored-panel.js.map +1 -1
  148. package/dist/hooks/use-file-drop.d.ts +21 -12
  149. package/dist/i18n/defaults.d.ts +21 -12
  150. package/dist/i18n/defaults.js +28 -0
  151. package/dist/i18n/defaults.js.map +1 -1
  152. package/dist/i18n/german.d.ts +21 -12
  153. package/dist/i18n/german.js +298 -12
  154. package/dist/i18n/german.js.map +1 -1
  155. package/dist/i18n/kit-labels.d.ts +14 -5
  156. package/dist/i18n/kit-labels.js.map +1 -1
  157. package/dist/i18n/languages.d.ts +15 -6
  158. package/dist/i18n/locales/de-CH.d.ts +21 -12
  159. package/dist/i18n/locales/en.d.ts +21 -12
  160. package/dist/i18n/locales/es.d.ts +21 -12
  161. package/dist/i18n/locales/es.js +287 -10
  162. package/dist/i18n/locales/es.js.map +1 -1
  163. package/dist/i18n/locales/fr.d.ts +21 -12
  164. package/dist/i18n/locales/fr.js +290 -7
  165. package/dist/i18n/locales/fr.js.map +1 -1
  166. package/dist/i18n/locales/hu.d.ts +21 -12
  167. package/dist/i18n/locales/hu.js +288 -12
  168. package/dist/i18n/locales/hu.js.map +1 -1
  169. package/dist/i18n/locales/it.d.ts +21 -12
  170. package/dist/i18n/locales/it.js +289 -7
  171. package/dist/i18n/locales/it.js.map +1 -1
  172. package/dist/i18n/locales/zh.d.ts +21 -12
  173. package/dist/i18n/locales/zh.js +279 -7
  174. package/dist/i18n/locales/zh.js.map +1 -1
  175. package/dist/i18n/review.d.ts +21 -12
  176. package/dist/i18n/review.js +50 -1
  177. package/dist/i18n/review.js.map +1 -1
  178. package/dist/index.d.ts +31 -4
  179. package/dist/index.js +148 -0
  180. package/dist/index.js.map +1 -1
  181. package/dist/landing/access.d.ts +48 -0
  182. package/dist/landing/access.js +38 -0
  183. package/dist/landing/access.js.map +1 -0
  184. package/dist/landing/landing-actions.d.ts +138 -0
  185. package/dist/landing/landing-actions.js +39 -0
  186. package/dist/landing/landing-actions.js.map +1 -0
  187. package/dist/landing/landing-labels.d.ts +43 -0
  188. package/dist/landing/landing-labels.js +23 -0
  189. package/dist/landing/landing-labels.js.map +1 -0
  190. package/dist/landing/landing-sections.d.ts +218 -0
  191. package/dist/landing/landing-sections.js +167 -0
  192. package/dist/landing/landing-sections.js.map +1 -0
  193. package/dist/landing/page-seo.d.ts +99 -0
  194. package/dist/landing/page-seo.js +121 -0
  195. package/dist/landing/page-seo.js.map +1 -0
  196. package/dist/landing/public-header.d.ts +148 -0
  197. package/dist/landing/public-header.js +49 -0
  198. package/dist/landing/public-header.js.map +1 -0
  199. package/dist/landing/routing.d.ts +218 -0
  200. package/dist/landing/routing.js +81 -0
  201. package/dist/landing/routing.js.map +1 -0
  202. package/dist/rhf/fields.d.ts +21 -12
  203. package/dist/rhf/form.d.ts +21 -12
  204. package/dist/rhf.d.ts +21 -12
  205. package/dist/settings/settings-catalogue.d.ts +84 -0
  206. package/dist/settings/settings-catalogue.js +47 -0
  207. package/dist/settings/settings-catalogue.js.map +1 -0
  208. package/dist/settings/settings-context.d.ts +31 -0
  209. package/dist/settings/settings-context.js +11 -0
  210. package/dist/settings/settings-context.js.map +1 -0
  211. package/dist/settings/settings-heading.d.ts +50 -0
  212. package/dist/settings/settings-heading.js +27 -0
  213. package/dist/settings/settings-heading.js.map +1 -0
  214. package/dist/settings/settings-labels.d.ts +41 -0
  215. package/dist/settings/settings-labels.js +38 -0
  216. package/dist/settings/settings-labels.js.map +1 -0
  217. package/dist/settings/settings-layout.d.ts +77 -0
  218. package/dist/settings/settings-layout.js +242 -0
  219. package/dist/settings/settings-layout.js.map +1 -0
  220. package/dist/settings/settings-section.d.ts +133 -0
  221. package/dist/settings/settings-section.js +63 -0
  222. package/dist/settings/settings-section.js.map +1 -0
  223. package/dist/settings/use-account-language.d.ts +83 -0
  224. package/dist/settings/use-account-language.js +62 -0
  225. package/dist/settings/use-account-language.js.map +1 -0
  226. package/dist/settings/use-settings-focus.d.ts +34 -0
  227. package/dist/settings/use-settings-focus.js +77 -0
  228. package/dist/settings/use-settings-focus.js.map +1 -0
  229. package/dist/settings/use-settings-route.d.ts +118 -0
  230. package/dist/settings/use-settings-route.js +120 -0
  231. package/dist/settings/use-settings-route.js.map +1 -0
  232. package/dist/shell/app-shell.d.ts +27 -12
  233. package/dist/shell/app-shell.js +3 -2
  234. package/dist/shell/app-shell.js.map +1 -1
  235. package/dist/shell/top-bar-brand.d.ts +21 -12
  236. package/dist/shell.d.ts +25 -6
  237. package/dist/shell.js +56 -0
  238. package/dist/shell.js.map +1 -1
  239. package/dist/wizard/stepper-nav.d.ts +21 -12
  240. package/dist/wizard.d.ts +21 -12
  241. package/package.json +2 -1
  242. package/src/account/account-parts.ts +67 -0
  243. package/src/account/data-export-setting.tsx +219 -0
  244. package/src/account/delete-account-setting.tsx +363 -0
  245. package/src/account/email-change-setting.tsx +454 -0
  246. package/src/account/sessions-setting.tsx +284 -0
  247. package/src/admin/admin-action-confirm.tsx +495 -0
  248. package/src/admin/admin-action-log.tsx +297 -0
  249. package/src/admin/admin-parts.ts +82 -0
  250. package/src/admin/invitations-panel.tsx +523 -0
  251. package/src/admin/reviewer-scope-editor.tsx +234 -0
  252. package/src/admin/role-select.tsx +286 -0
  253. package/src/admin/transfer-ownership-dialog.tsx +172 -0
  254. package/src/admin/user-roster.tsx +573 -0
  255. package/src/auth/auth-errors.ts +196 -8
  256. package/src/auth/forgot-password-form.tsx +21 -5
  257. package/src/auth/register-form.tsx +24 -6
  258. package/src/auth/reset-password-form.tsx +19 -5
  259. package/src/auth/sign-in-form.tsx +241 -38
  260. package/src/auth/verify-email.tsx +59 -8
  261. package/src/components/account-chips.tsx +64 -7
  262. package/src/components/account-settings-labels.ts +28 -1
  263. package/src/components/account-settings.tsx +231 -34
  264. package/src/components/data-table.tsx +8 -0
  265. package/src/components/date-picker.tsx +9 -4
  266. package/src/components/passkeys-setting.tsx +2 -1
  267. package/src/components/settings-fields.tsx +50 -1
  268. package/src/demo/demo-banner.tsx +159 -0
  269. package/src/demo/demo-countdown.ts +141 -0
  270. package/src/demo/demo-ended.tsx +89 -0
  271. package/src/demo/demo-labels.ts +78 -0
  272. package/src/demo/demo-session.ts +32 -0
  273. package/src/demo/demo-start.tsx +150 -0
  274. package/src/feedback/feedback-inbox.tsx +21 -8
  275. package/src/feedback/feedback-labels.ts +2 -1
  276. package/src/feedback/feedback-record.ts +10 -7
  277. package/src/feedback/feedback-row-detail.tsx +28 -4
  278. package/src/feedback/feedback-swipe.tsx +1 -1
  279. package/src/hooks/use-anchored-panel.ts +14 -3
  280. package/src/i18n/defaults.ts +28 -0
  281. package/src/i18n/german.ts +327 -5
  282. package/src/i18n/kit-labels.tsx +42 -0
  283. package/src/i18n/locales/es.ts +313 -3
  284. package/src/i18n/locales/fr.ts +316 -0
  285. package/src/i18n/locales/hu.ts +308 -5
  286. package/src/i18n/locales/it.ts +313 -0
  287. package/src/i18n/locales/zh.ts +286 -0
  288. package/src/i18n/review.ts +49 -0
  289. package/src/index.ts +184 -0
  290. package/src/landing/access.ts +97 -0
  291. package/src/landing/landing-actions.tsx +92 -0
  292. package/src/landing/landing-labels.ts +59 -0
  293. package/src/landing/landing-sections.tsx +337 -0
  294. package/src/landing/page-seo.ts +251 -0
  295. package/src/landing/public-header.tsx +120 -0
  296. package/src/landing/routing.tsx +209 -0
  297. package/src/settings/settings-catalogue.ts +132 -0
  298. package/src/settings/settings-context.ts +33 -0
  299. package/src/settings/settings-heading.tsx +65 -0
  300. package/src/settings/settings-labels.ts +75 -0
  301. package/src/settings/settings-layout.tsx +379 -0
  302. package/src/settings/settings-section.tsx +108 -0
  303. package/src/settings/use-account-language.ts +146 -0
  304. package/src/settings/use-settings-focus.ts +120 -0
  305. package/src/settings/use-settings-route.ts +258 -0
  306. package/src/shell/app-shell.tsx +10 -2
  307. package/src/shell.ts +45 -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",
@@ -45,6 +47,7 @@ function uiKitLabelsZh(numberLocale = "zh-CN") {
45
47
  // 0.27.0. 反馈 for feedback, as `feedbackDialog`; 返工 for rework.
46
48
  feedbackStatus: {
47
49
  OPEN: "\u5F85\u5904\u7406",
50
+ READY: "\u5F85\u5B9E\u73B0",
48
51
  IN_PROGRESS: "\u5904\u7406\u4E2D",
49
52
  IN_EVALUATION: "\u8BC4\u4F30\u4E2D",
50
53
  NEEDS_LIVE_TEST: "\u5F85\u7EBF\u4E0A\u6D4B\u8BD5",
@@ -103,6 +106,7 @@ function uiKitLabelsZh(numberLocale = "zh-CN") {
103
106
  phoneActions: "\u53CD\u9988\u64CD\u4F5C"
104
107
  },
105
108
  feedbackDetail: {
109
+ subject: "\u4E3B\u9898",
106
110
  body: "\u63CF\u8FF0",
107
111
  edit: "\u7F16\u8F91",
108
112
  editDescription: "\u7F16\u8F91\u63CF\u8FF0",
@@ -133,7 +137,10 @@ function uiKitLabelsZh(numberLocale = "zh-CN") {
133
137
  role: "\u89D2\u8272",
134
138
  memberSince: "\u6CE8\u518C\u65F6\u95F4",
135
139
  displayName: "\u663E\u793A\u540D\u79F0",
136
- save: "\u4FDD\u5B58"
140
+ save: "\u4FDD\u5B58",
141
+ firstName: "\u540D\u5B57",
142
+ lastName: "\u59D3\u6C0F",
143
+ nameRequired: "\u8BF7\u540C\u65F6\u586B\u5199\u540D\u5B57\u548C\u59D3\u6C0F\u3002"
137
144
  },
138
145
  password: {
139
146
  title: "\u4FEE\u6539\u5BC6\u7801",
@@ -157,7 +164,9 @@ function uiKitLabelsZh(numberLocale = "zh-CN") {
157
164
  disable: "\u5173\u95ED",
158
165
  qrAlt: "\u8EAB\u4EFD\u9A8C\u8BC1\u5668\u5E94\u7528\u7684\u4E8C\u7EF4\u7801",
159
166
  secretHint: "\u65E0\u6CD5\u626B\u63CF\uFF1F\u8BF7\u6539\u4E3A\u5728\u5E94\u7528\u4E2D\u8F93\u5165\u6B64\u5BC6\u94A5\uFF1A",
160
- copySecret: "\u590D\u5236\u5BC6\u94A5"
167
+ copySecret: "\u590D\u5236\u5BC6\u94A5",
168
+ // 0.31.0: the card's title; the state ("已开启") stands beside it.
169
+ title: "\u53CC\u91CD\u9A8C\u8BC1"
161
170
  },
162
171
  passkeys: {
163
172
  title: "\u901A\u884C\u5BC6\u94A5",
@@ -665,7 +674,9 @@ function uiKitLabelsZh(numberLocale = "zh-CN") {
665
674
  invited: "\u5DF2\u9080\u8BF7",
666
675
  registered: "\u5DF2\u6CE8\u518C",
667
676
  unverified: "\u672A\u9A8C\u8BC1",
668
- passwordChange: "\u9700\u4FEE\u6539\u5BC6\u7801"
677
+ passwordChange: "\u9700\u4FEE\u6539\u5BC6\u7801",
678
+ deletion: "\u5DF2\u7533\u8BF7\u5220\u9664",
679
+ deletionOn: (date) => `\u5C06\u4E8E ${date} \u5220\u9664`
669
680
  },
670
681
  shareCard: {
671
682
  dialogTitle: "\u5171\u4EAB",
@@ -832,7 +843,16 @@ ${o.postalCode} ${o.city}\uFF0C${o.country}
832
843
  setPasswordSubmit: "\u8BBE\u7F6E\u5BC6\u7801\u5E76\u767B\u5F55",
833
844
  setPasswordFailed: "\u65E0\u6CD5\u8BBE\u7F6E\u5BC6\u7801\u3002",
834
845
  expired: "\u672C\u6B21\u767B\u5F55\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55\u3002",
835
- backToSignIn: "\u8FD4\u56DE\u767B\u5F55"
846
+ backToSignIn: "\u8FD4\u56DE\u767B\u5F55",
847
+ useRecoveryCode: "\u4F7F\u7528\u5907\u7528\u7801",
848
+ useAuthenticatorCode: "\u4F7F\u7528\u8EAB\u4EFD\u9A8C\u8BC1\u5668\u5E94\u7528",
849
+ recoveryCode: "\u5907\u7528\u7801",
850
+ recoveryIntro: "\u8BF7\u8F93\u5165\u60A8\u5728\u5F00\u542F\u53CC\u91CD\u9A8C\u8BC1\u65F6\u4FDD\u5B58\u7684\u5907\u7528\u7801\u4E4B\u4E00\u3002",
851
+ recoveryCodeHint: (length) => `\u5171 ${n(length)} \u4F4D\u5B57\u6BCD\u548C\u6570\u5B57\uFF0C\u8FDE\u5B57\u7B26\u548C\u7A7A\u683C\u4E0D\u5F71\u54CD\u3002`,
852
+ recoveryCodeInvalid: "\u6B64\u5907\u7528\u7801\u65E0\u6548\u6216\u5DF2\u88AB\u4F7F\u7528\u3002",
853
+ rateLimited,
854
+ // 0.31.0: the same words as `landing.requestAccess`.
855
+ requestAccess: "\u7533\u8BF7\u8BBF\u95EE\u6743\u9650"
836
856
  },
837
857
  register: {
838
858
  firstName: "\u540D\u5B57",
@@ -853,7 +873,8 @@ ${o.postalCode} ${o.city}\uFF0C${o.country}
853
873
  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",
854
874
  invitationInvalid: "\u6B64\u9080\u8BF7\u94FE\u63A5\u65E0\u6548\u3002",
855
875
  invitationExpired: "\u6B64\u9080\u8BF7\u5DF2\u8FC7\u671F\uFF0C\u8BF7\u7D22\u53D6\u65B0\u7684\u9080\u8BF7\u3002",
856
- failed: "\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"
876
+ failed: "\u6CE8\u518C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
877
+ rateLimited
857
878
  },
858
879
  completeName: {
859
880
  title: "\u5B8C\u5584\u60A8\u7684\u59D3\u540D",
@@ -872,7 +893,8 @@ ${o.postalCode} ${o.city}\uFF0C${o.country}
872
893
  sent: (email) => `\u5982\u679C ${email} \u6709\u8D26\u6237\uFF0C\u94FE\u63A5\u6B63\u5728\u53D1\u9001\u4E2D\u3002`,
873
894
  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",
874
895
  backToSignIn: "\u8FD4\u56DE\u767B\u5F55",
875
- error: "\u8BF7\u6C42\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002"
896
+ error: "\u8BF7\u6C42\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
897
+ rateLimited
876
898
  },
877
899
  resetPassword: {
878
900
  title: "\u8BBE\u7F6E\u65B0\u5BC6\u7801",
@@ -889,7 +911,8 @@ ${o.postalCode} ${o.city}\uFF0C${o.country}
889
911
  requestNew: "\u7533\u8BF7\u65B0\u94FE\u63A5",
890
912
  success: "\u60A8\u7684\u5BC6\u7801\u5DF2\u4FEE\u6539\uFF0C\u73B0\u5728\u53EF\u4EE5\u7528\u5B83\u767B\u5F55\u4E86\u3002",
891
913
  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",
892
- signIn: "\u524D\u5F80\u767B\u5F55"
914
+ signIn: "\u524D\u5F80\u767B\u5F55",
915
+ rateLimited
893
916
  },
894
917
  verifyEmail: {
895
918
  title: "\u786E\u8BA4\u60A8\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
@@ -937,6 +960,183 @@ ${o.postalCode} ${o.city}\uFF0C${o.country}
937
960
  currentMark: "\uFF08\u5F53\u524D\uFF09",
938
961
  switching: "\u6B63\u5728\u5207\u6362\u516C\u53F8\u2026"
939
962
  },
963
+ // 0.30.0 — docs/user-admin-harmonization.md: Kurvenschmiede's reviewed Chinese for the
964
+ // admin words (停用、角色、审校者), transfer (移交), invitations and sessions;
965
+ // written fresh where it had no sentence.
966
+ emailChange: {
967
+ title: "\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
968
+ current: "\u5F53\u524D\u5730\u5740",
969
+ newEmail: "\u65B0\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
970
+ password: "\u5F53\u524D\u5BC6\u7801",
971
+ passwordHint: "\u60A8\u4F7F\u7528\u6B64\u5730\u5740\u767B\u5F55\uFF0C\u56E0\u6B64\u66F4\u6539\u5B83\u9700\u8981\u8F93\u5165\u5BC6\u7801\u3002",
972
+ emailTagUse: (address) => `\u4F7F\u7528 ${address}`,
973
+ 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",
974
+ submit: "\u66F4\u6539\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
975
+ sameAsCurrent: "\u8FD9\u5DF2\u7ECF\u662F\u60A8\u7684\u5730\u5740\u3002",
976
+ emailTaken: "\u8BE5\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u5DF2\u6709\u8D26\u6237\u3002",
977
+ wrongPassword: "\u5BC6\u7801\u4E0D\u6B63\u786E\u3002",
978
+ pending: (newEmail) => `\u8BF7\u70B9\u51FB\u6211\u4EEC\u53D1\u9001\u5230 ${newEmail} \u7684\u94FE\u63A5\u8FDB\u884C\u786E\u8BA4\u3002`,
979
+ 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`,
980
+ resend: "\u91CD\u65B0\u53D1\u9001\u94FE\u63A5",
981
+ resent: "\u94FE\u63A5\u5DF2\u91CD\u65B0\u53D1\u9001\u3002",
982
+ cancel: "\u53D6\u6D88\u66F4\u6539",
983
+ confirmed: (email) => `\u60A8\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u73B0\u5728\u662F ${email}\u3002`,
984
+ 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",
985
+ rateLimited,
986
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
987
+ },
988
+ sessions: {
989
+ title: "\u4F1A\u8BDD",
990
+ 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",
991
+ signOutEverywhere: "\u5728\u6240\u6709\u8BBE\u5907\u4E0A\u9000\u51FA\u767B\u5F55\u2026",
992
+ 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",
993
+ confirmSignOutEverywhere: "\u5728\u6240\u6709\u8BBE\u5907\u4E0A\u9000\u51FA\u767B\u5F55",
994
+ list: "\u60A8\u5DF2\u767B\u5F55\u7684\u8BBE\u5907",
995
+ loading: "\u6B63\u5728\u52A0\u8F7D\u4F1A\u8BDD\u2026",
996
+ empty: "\u6CA1\u6709\u53EF\u663E\u793A\u7684\u4F1A\u8BDD\u3002",
997
+ current: "\u6B64\u8BBE\u5907",
998
+ unknownDevice: "\u672A\u77E5\u8BBE\u5907",
999
+ lastActive: (when) => `\u4E0A\u6B21\u6D3B\u52A8\uFF1A${when}`,
1000
+ ip: (address) => `IP\uFF1A${address}`,
1001
+ revoke: "\u9000\u51FA\u767B\u5F55",
1002
+ // Starts with `revoke`, the button's visible text, for voice control.
1003
+ revokeItem: (device) => `\u9000\u51FA\u767B\u5F55\uFF1A${device}`,
1004
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1005
+ },
1006
+ deleteAccount: {
1007
+ title: "\u5220\u9664\u8D26\u6237",
1008
+ afterDays: (days) => `\u60A8\u7684\u8D26\u6237\u5C06\u7ACB\u5373\u505C\u7528\uFF0C\u5E76\u5728 ${n(days)} \u5929\u540E\u88AB\u6C38\u4E45\u5220\u9664\u3002`,
1009
+ operator: "\u60A8\u7684\u8D26\u6237\u5C06\u7ACB\u5373\u505C\u7528\uFF0C\u4E4B\u540E\u7531\u8FD0\u8425\u8005\u5C06\u5176\u6C38\u4E45\u5220\u9664\u3002",
1010
+ arm: "\u5220\u9664\u8D26\u6237\u2026",
1011
+ prompt: "\u60A8\u5C06\u5728\u6240\u6709\u8BBE\u5907\u4E0A\u9000\u51FA\u767B\u5F55\uFF0C\u4E14\u65E0\u6CD5\u518D\u4F7F\u7528\u6B64\u8D26\u6237\u3002",
1012
+ handOver: (count) => `${n(count)} \u9879\u4ED6\u4EBA\u53EF\u89C1\u7684\u5185\u5BB9\u5C06\u79FB\u4EA4\u7ED9\u4E00\u4F4D\u7BA1\u7406\u5458\u3002`,
1013
+ confirm: "\u5220\u9664\u6211\u7684\u8D26\u6237",
1014
+ done: "\u60A8\u7684\u8D26\u6237\u5DF2\u505C\u7528\uFF0C\u6B63\u5728\u9000\u51FA\u767B\u5F55\u3002",
1015
+ wrongPassword: "\u5BC6\u7801\u4E0D\u6B63\u786E\u3002",
1016
+ confirmationMismatch: "\u8FD9\u4E0D\u662F\u60A8\u8D26\u6237\u7684\u5730\u5740\u3002",
1017
+ lastAdmin: "\u60A8\u662F\u6700\u540E\u4E00\u4F4D\u7BA1\u7406\u5458\u3002\u8BF7\u5148\u5C06\u5176\u4ED6\u4EBA\u8BBE\u4E3A\u7BA1\u7406\u5458\u3002",
1018
+ 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`,
1019
+ 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",
1020
+ rateLimited,
1021
+ failed: "\u65E0\u6CD5\u5220\u9664\u60A8\u7684\u8D26\u6237\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1022
+ },
1023
+ dataExport: {
1024
+ title: "\u5BFC\u51FA\u60A8\u7684\u6570\u636E",
1025
+ description: "\u4E0B\u8F7D\u60A8\u8D26\u6237\u6570\u636E\u7684\u526F\u672C\uFF08JSON \u6587\u4EF6\uFF09\u3002",
1026
+ download: "\u4E0B\u8F7D\u6211\u7684\u6570\u636E",
1027
+ started: "\u4E0B\u8F7D\u5DF2\u5F00\u59CB\u3002",
1028
+ saveAgain: "\u6CA1\u6709\u5F00\u59CB\uFF1F\u4FDD\u5B58\u6587\u4EF6",
1029
+ 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",
1030
+ failed: "\u5BFC\u51FA\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1031
+ },
1032
+ userRoster: {
1033
+ name: "\u59D3\u540D",
1034
+ email: "\u7535\u5B50\u90AE\u7BB1",
1035
+ role: "\u89D2\u8272",
1036
+ state: "\u72B6\u6001",
1037
+ created: "\u521B\u5EFA\u65F6\u95F4",
1038
+ lastLogin: "\u6700\u540E\u767B\u5F55",
1039
+ never: "\u4ECE\u672A",
1040
+ actions: "\u64CD\u4F5C",
1041
+ actionsFor: (name) => `${name} \u7684\u64CD\u4F5C`
1042
+ },
1043
+ roleSelect: {
1044
+ label: "\u89D2\u8272",
1045
+ rolesLegend: "\u89D2\u8272",
1046
+ roleOf: (name) => `${name} \u7684\u89D2\u8272`,
1047
+ lockedLastAdmin: "\u6700\u540E\u4E00\u4F4D\u6D3B\u8DC3\u7BA1\u7406\u5458\u5FC5\u987B\u4FDD\u7559\u6B64\u89D2\u8272\u3002",
1048
+ lockedSelf: "\u60A8\u4E0D\u80FD\u66F4\u6539\u81EA\u5DF1\u7684\u89D2\u8272\u3002",
1049
+ notForLastAdmin: "\u4E0D\u9002\u7528\u4E8E\u6700\u540E\u4E00\u4F4D\u7BA1\u7406\u5458",
1050
+ notForSelf: "\u4E0D\u9002\u7528\u4E8E\u60A8\u81EA\u5DF1\u7684\u8D26\u6237",
1051
+ unavailable: (role, reason) => `${role}\uFF08${reason}\uFF09`
1052
+ },
1053
+ reviewerScope: {
1054
+ languages: "\u8BED\u8A00",
1055
+ hint: "\u52FE\u9009\u6B64\u4EBA\u8D1F\u8D23\u5BA1\u6821\u7684\u8BED\u8A00\u3002",
1056
+ none: "\u672A\u9009\u62E9\u8BED\u8A00\uFF1A\u4FDD\u5B58\u540E\u5C06\u53D6\u6D88\u5BA1\u6821\u8005\u89D2\u8272\u3002",
1057
+ areas: "\u4EC5\u9650",
1058
+ legalOnly: "\u4EC5\u6CD5\u5F8B\u9875\u9762",
1059
+ 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",
1060
+ failed: "\u65E0\u6CD5\u4FDD\u5B58\u5BA1\u6821\u8303\u56F4\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1061
+ },
1062
+ adminAction: {
1063
+ confirm: "\u786E\u8BA4",
1064
+ cancel: "\u53D6\u6D88",
1065
+ close: "\u5173\u95ED",
1066
+ 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",
1067
+ self: "\u4E0D\u80FD\u5BF9\u60A8\u81EA\u5DF1\u7684\u8D26\u6237\u6267\u884C\u6B64\u64CD\u4F5C\u3002",
1068
+ confirmationMismatch: "\u8BE5\u5730\u5740\u4E0E\u6B64\u8D26\u6237\u4E0D\u7B26\u3002\u8BF7\u68C0\u67E5\u60A8\u5F53\u524D\u6240\u5728\u7684\u8D26\u6237\u3002",
1069
+ 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",
1070
+ removeFromCompany: "\u4ECE\u516C\u53F8\u79FB\u9664",
1071
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1072
+ },
1073
+ adminActionLog: {
1074
+ title: "\u7BA1\u7406\u64CD\u4F5C",
1075
+ empty: "\u6682\u65E0\u7BA1\u7406\u64CD\u4F5C\u3002",
1076
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
1077
+ by: (actor) => `\u64CD\u4F5C\u8005\uFF1A${actor}`,
1078
+ bySelf: "\u7528\u6237\u672C\u4EBA",
1079
+ automatic: "\u81EA\u52A8\u6267\u884C",
1080
+ erased: "\u5DF2\u5220\u9664\u7684\u8D26\u6237",
1081
+ filteredTo: (target) => `\u4EC5 ${target}`,
1082
+ showAll: "\u663E\u793A\u5168\u90E8\u64CD\u4F5C",
1083
+ filterBy: (target) => `\u4EC5\u663E\u793A\u9488\u5BF9 ${target} \u7684\u64CD\u4F5C`,
1084
+ actions: {
1085
+ deactivate: "\u5DF2\u505C\u7528",
1086
+ reactivate: "\u5DF2\u91CD\u65B0\u6FC0\u6D3B",
1087
+ role: "\u89D2\u8272\u5DF2\u66F4\u6539",
1088
+ membership_remove: "\u5DF2\u4ECE\u516C\u53F8\u79FB\u9664",
1089
+ password_change_require: "\u5DF2\u8981\u6C42\u8BBE\u7F6E\u65B0\u5BC6\u7801",
1090
+ password_change_withdraw: "\u5DF2\u64A4\u56DE\u65B0\u5BC6\u7801\u8981\u6C42",
1091
+ mail_verification: "\u5DF2\u53D1\u9001\u786E\u8BA4\u90AE\u4EF6",
1092
+ mail_reset: "\u5DF2\u53D1\u9001\u5BC6\u7801\u91CD\u7F6E\u90AE\u4EF6",
1093
+ reviewer: "\u5BA1\u6821\u8303\u56F4\u5DF2\u66F4\u6539",
1094
+ invite: "\u5DF2\u9080\u8BF7",
1095
+ invite_resend: "\u5DF2\u91CD\u65B0\u53D1\u9001\u9080\u8BF7",
1096
+ invite_revoke: "\u5DF2\u64A4\u56DE\u9080\u8BF7",
1097
+ transfer: "\u5DE5\u4F5C\u5DF2\u79FB\u4EA4",
1098
+ deletion_request: "\u5DF2\u7533\u8BF7\u5220\u9664",
1099
+ deletion_cancel: "\u5DF2\u53D6\u6D88\u5220\u9664",
1100
+ erase: "\u8D26\u6237\u5DF2\u6C38\u4E45\u5220\u9664"
1101
+ }
1102
+ },
1103
+ transferOwnership: {
1104
+ title: (name) => `\u79FB\u4EA4 ${name} \u7684\u5DE5\u4F5C`,
1105
+ 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",
1106
+ recipient: "\u79FB\u4EA4\u7ED9",
1107
+ choose: "\u9009\u62E9\u8D26\u6237\u2026",
1108
+ chooseFirst: "\u8BF7\u9009\u62E9\u63A5\u6536\u5DE5\u4F5C\u7684\u4EBA",
1109
+ confirm: "\u79FB\u4EA4",
1110
+ customer: "\u5BA2\u6237",
1111
+ deactivated: "\u5DF2\u505C\u7528",
1112
+ self: "\u540C\u4E00\u8D26\u6237",
1113
+ unavailable: (account, reason) => `${account}\uFF08${reason}\uFF09`,
1114
+ noCandidates: "\u6CA1\u6709\u5176\u4ED6\u8D26\u6237\u53EF\u4EE5\u63A5\u6536\u3002"
1115
+ },
1116
+ invitations: {
1117
+ email: "\u7535\u5B50\u90AE\u7BB1\u5730\u5740",
1118
+ invalidEmail: "\u8BF7\u8F93\u5165\u5B8C\u6574\u7684\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u3002",
1119
+ role: "\u89D2\u8272",
1120
+ scope: "\u8303\u56F4",
1121
+ scopeNone: "\u65E0",
1122
+ language: "\u9080\u8BF7\u90AE\u4EF6\u8BED\u8A00",
1123
+ note: "\u5907\u6CE8",
1124
+ invite: "\u9080\u8BF7",
1125
+ listTitle: "\u9080\u8BF7",
1126
+ empty: "\u5C1A\u672A\u9080\u8BF7\u4EFB\u4F55\u4EBA\u3002",
1127
+ loading: "\u52A0\u8F7D\u4E2D\u2026",
1128
+ status: { open: "\u7B49\u5F85\u4E2D", accepted: "\u5DF2\u63A5\u53D7", expired: "\u5DF2\u8FC7\u671F", revoked: "\u5DF2\u64A4\u56DE" },
1129
+ sent: (date) => `\u53D1\u9001\u4E8E ${date}`,
1130
+ expires: (date) => `${date} \u5230\u671F`,
1131
+ invitedBy: (name) => `\u9080\u8BF7\u4EBA\uFF1A${name}`,
1132
+ resend: (email) => `\u5411 ${email} \u53D1\u9001\u65B0\u94FE\u63A5`,
1133
+ copyLink: "\u590D\u5236\u9080\u8BF7\u94FE\u63A5",
1134
+ revoke: (email) => `\u64A4\u56DE\u5BF9 ${email} \u7684\u9080\u8BF7`,
1135
+ 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",
1136
+ linkReady: (email) => `${email} \u7684\u9080\u8BF7\u94FE\u63A5\uFF0C\u4EC5\u663E\u793A\u8FD9\u4E00\u6B21\uFF1A`,
1137
+ notSent: (email) => `\u5DF2\u9080\u8BF7 ${email}\uFF0C\u4F46\u90AE\u4EF6\u672A\u80FD\u53D1\u9001\u3002\u8BF7\u91CD\u65B0\u53D1\u9001\u3002`,
1138
+ failed: "\u64CD\u4F5C\u672A\u6210\u529F\uFF0C\u8BF7\u91CD\u8BD5\u3002"
1139
+ },
940
1140
  characterCount: {
941
1141
  count: (used, max) => `\u5DF2\u8F93\u5165 ${n(used)}/${n(max)} \u4E2A\u5B57\u7B26`,
942
1142
  remaining: (left) => `\u8FD8\u53EF\u8F93\u5165 ${n(left)} \u4E2A\u5B57\u7B26`,
@@ -1050,6 +1250,78 @@ ${o.postalCode} ${o.city}\uFF0C${o.country}
1050
1250
  groupCount: (unreviewed, total) => `\u672A\u5BA1\u6821 ${n(unreviewed)} / ${n(total)}`,
1051
1251
  approveGroup: (count) => `\u901A\u8FC7\u672A\u5BA1\u6821\u9879\uFF08${n(count)}\uFF09`,
1052
1252
  confirmGroup: (count, group) => count === 1 ? `\u901A\u8FC7\u201C${group}\u201D\u4E2D\u7684\u672A\u5BA1\u6821\u6587\u672C\uFF1F` : `\u901A\u8FC7\u201C${group}\u201D\u4E2D\u5168\u90E8 ${n(count)} \u6761\u672A\u5BA1\u6821\u6587\u672C\uFF08\u5305\u62EC\u672A\u663E\u793A\u5728\u5C4F\u5E55\u4E0A\u7684\uFF09\uFF1F`
1253
+ },
1254
+ // 0.31.0 — docs/settings-harmonization.md §4.3 and docs/landing-demo-harmonization.md
1255
+ // §4–§5: the settings shell, the landing page's generic words and the demo. The help
1256
+ // lines name things as `accountSettings`, `sessions` and `dataExport` do; "访问权限"
1257
+ // as `shareCard`. A space either side of a numeral or a Latin name.
1258
+ settings: {
1259
+ title: "\u8BBE\u7F6E",
1260
+ search: "\u641C\u7D22\u8BBE\u7F6E",
1261
+ searchPlaceholder: "\u641C\u7D22\u8BBE\u7F6E\u2026",
1262
+ results: "\u5339\u914D\u7684\u8BBE\u7F6E",
1263
+ noMatches: (query) => `\u6CA1\u6709\u4E0E\u201C${query}\u201D\u5339\u914D\u7684\u8BBE\u7F6E\u3002`,
1264
+ // As `commandPalette.clear`.
1265
+ clearSearch: "\u6E05\u9664\u641C\u7D22",
1266
+ back: "\u8FD4\u56DE\u8BBE\u7F6E",
1267
+ sections: "\u8BBE\u7F6E\u5206\u7C7B",
1268
+ matchCount: (count) => `${n(count)} \u4E2A\u5339\u914D\u9879`,
1269
+ groups: {
1270
+ appearance: {
1271
+ title: "\u5916\u89C2",
1272
+ help: "\u8BED\u8A00\u3001\u4E3B\u9898\uFF0C\u4EE5\u53CA\u5E94\u7528\u5728\u6B64\u8BBE\u5907\u4E0A\u7684\u5916\u89C2\u3002"
1273
+ },
1274
+ account: {
1275
+ title: "\u8D26\u6237",
1276
+ help: "\u60A8\u7684\u4E2A\u4EBA\u8D44\u6599\u548C\u7535\u5B50\u90AE\u7BB1\u5730\u5740\u3002"
1277
+ },
1278
+ security: {
1279
+ title: "\u5B89\u5168",
1280
+ help: "\u60A8\u7684\u767B\u5F55\u65B9\u5F0F\uFF1A\u5BC6\u7801\u3001\u53CC\u91CD\u9A8C\u8BC1\u7801\u3001\u901A\u884C\u5BC6\u94A5\u548C\u4F1A\u8BDD\u3002"
1281
+ },
1282
+ notifications: {
1283
+ title: "\u901A\u77E5",
1284
+ help: "\u60A8\u4F1A\u6536\u5230\u54EA\u4E9B\u901A\u77E5\u3001\u4F55\u65F6\u6536\u5230\uFF0C\u4EE5\u53CA\u5728\u54EA\u4E9B\u8BBE\u5907\u4E0A\u6536\u5230\u3002"
1285
+ },
1286
+ data: {
1287
+ title: "\u6570\u636E",
1288
+ help: "\u5BFC\u51FA\u5C5E\u4E8E\u60A8\u7684\u6570\u636E\uFF0C\u6216\u5C06\u5176\u8FDE\u540C\u8D26\u6237\u4E00\u5E76\u5220\u9664\u3002"
1289
+ }
1290
+ }
1291
+ },
1292
+ landing: {
1293
+ signIn: "\u767B\u5F55",
1294
+ requestAccess: "\u7533\u8BF7\u8BBF\u95EE\u6743\u9650",
1295
+ getStarted: "\u5F00\u59CB\u4F7F\u7528",
1296
+ tryDemo: "\u4F53\u9A8C\u6F14\u793A",
1297
+ openApp: "\u6253\u5F00\u5E94\u7528",
1298
+ continueDemo: "\u7EE7\u7EED\u6F14\u793A",
1299
+ beta: "\u6D4B\u8BD5\u7248",
1300
+ // Plain text: a mail's subject and body lines, never HTML. Full-width colons.
1301
+ accessSubject: (app) => app ? `\u7533\u8BF7\u8BBF\u95EE ${app}` : "\u8BBF\u95EE\u6743\u9650\u7533\u8BF7",
1302
+ accessName: "\u59D3\u540D\uFF1A",
1303
+ accessCompany: "\u516C\u53F8\uFF1A",
1304
+ accessUse: "\u7528\u9014\uFF1A"
1305
+ },
1306
+ demo: {
1307
+ starting: "\u6B63\u5728\u542F\u52A8\u6F14\u793A\u2026",
1308
+ rateLimited: (minutes) => minutes ? `\u6765\u81EA\u6B64\u7F51\u7EDC\u7684\u6F14\u793A\u8FC7\u591A\uFF0C\u8BF7 ${n(minutes)} \u5206\u949F\u540E\u91CD\u8BD5\u3002` : "\u6765\u81EA\u6B64\u7F51\u7EDC\u7684\u6F14\u793A\u8FC7\u591A\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
1309
+ capacity: "\u6F14\u793A\u540D\u989D\u5DF2\u6EE1\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002",
1310
+ unavailable: "\u6F14\u793A\u6682\u4E0D\u53EF\u7528\u3002",
1311
+ failed: "\u65E0\u6CD5\u542F\u52A8\u6F14\u793A\uFF0C\u8BF7\u91CD\u8BD5\u3002",
1312
+ // As `legal.backHome`.
1313
+ backToStart: "\u8FD4\u56DE\u9996\u9875",
1314
+ hoursLeft: (hours, minutes) => `\u6F14\u793A \xB7 \u5269\u4F59 ${n(hours)} \u5C0F\u65F6 ${n(minutes)} \u5206\u949F`,
1315
+ minutesLeft: (minutes) => `\u6F14\u793A \xB7 \u5269\u4F59 ${n(minutes)} \u5206\u949F`,
1316
+ badge: "\u6F14\u793A",
1317
+ readOnly: "\u60A8\u6B63\u5728\u67E5\u770B\u793A\u4F8B\u6570\u636E\uFF0C\u65E0\u6CD5\u8FDB\u884C\u4FEE\u6539\u3002",
1318
+ sandbox: "\u60A8\u81EA\u5DF1\u521B\u5EFA\u7684\u5185\u5BB9\u5C06\u5728\u6F14\u793A\u7ED3\u675F\u65F6\u5220\u9664\u3002",
1319
+ details: "\u6F14\u793A\u8BE6\u60C5",
1320
+ writeLocked: "\u6F14\u793A\u4E2D\u65E0\u6CD5\u6267\u884C\u6B64\u64CD\u4F5C\u3002",
1321
+ endedTitle: "\u6F14\u793A\u5DF2\u7ED3\u675F",
1322
+ endedReadOnly: "\u793A\u4F8B\u6570\u636E\u4F1A\u5B9A\u671F\u91CD\u7F6E\u3002",
1323
+ endedSandbox: "\u793A\u4F8B\u6570\u636E\u4F1A\u5B9A\u671F\u91CD\u7F6E\uFF1B\u60A8\u5728\u6F14\u793A\u4E2D\u521B\u5EFA\u7684\u5185\u5BB9\u4F1A\u88AB\u5220\u9664\u3002",
1324
+ restart: "\u5F00\u59CB\u65B0\u7684\u6F14\u793A"
1053
1325
  }
1054
1326
  };
1055
1327
  }