@adminiumjs/i18n 0.2.1 → 0.2.2

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 (232) hide show
  1. package/dist/a11y-keys.d.ts +1 -1
  2. package/dist/a11y-keys.d.ts.map +1 -1
  3. package/dist/a11y-keys.js +219 -4
  4. package/dist/a11y-keys.js.map +1 -1
  5. package/dist/create-i18n.d.ts.map +1 -1
  6. package/dist/create-i18n.js +1 -0
  7. package/dist/create-i18n.js.map +1 -1
  8. package/dist/editing.d.ts +1 -1
  9. package/dist/editing.d.ts.map +1 -1
  10. package/dist/editing.js +2 -1
  11. package/dist/editing.js.map +1 -1
  12. package/dist/fallback.d.ts.map +1 -1
  13. package/dist/fallback.js +1 -0
  14. package/dist/fallback.js.map +1 -1
  15. package/dist/format/index.d.ts.map +1 -1
  16. package/dist/format/index.js +1 -0
  17. package/dist/format/index.js.map +1 -1
  18. package/dist/format-errors.d.ts.map +1 -1
  19. package/dist/format-errors.js +1 -0
  20. package/dist/format-errors.js.map +1 -1
  21. package/dist/icu-format.d.ts.map +1 -1
  22. package/dist/icu-format.js +1 -0
  23. package/dist/icu-format.js.map +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/keys.d.ts.map +1 -1
  28. package/dist/keys.js +1 -0
  29. package/dist/keys.js.map +1 -1
  30. package/dist/locales.d.ts +6 -2
  31. package/dist/locales.d.ts.map +1 -1
  32. package/dist/locales.js +7 -2
  33. package/dist/locales.js.map +1 -1
  34. package/dist/overrides.d.ts.map +1 -1
  35. package/dist/overrides.js +1 -0
  36. package/dist/overrides.js.map +1 -1
  37. package/dist/react.d.ts.map +1 -1
  38. package/dist/react.js +1 -0
  39. package/dist/react.js.map +1 -1
  40. package/dist/resources/ar-eg/common.d.ts +858 -5
  41. package/dist/resources/ar-eg/common.d.ts.map +1 -1
  42. package/dist/resources/ar-eg/common.js +882 -28
  43. package/dist/resources/ar-eg/common.js.map +1 -1
  44. package/dist/resources/ar-eg/errors.d.ts +1 -0
  45. package/dist/resources/ar-eg/errors.d.ts.map +1 -1
  46. package/dist/resources/ar-eg/errors.js +2 -0
  47. package/dist/resources/ar-eg/errors.js.map +1 -1
  48. package/dist/resources/ar-eg/generated.d.ts.map +1 -1
  49. package/dist/resources/ar-eg/generated.js +1 -0
  50. package/dist/resources/ar-eg/generated.js.map +1 -1
  51. package/dist/resources/ar-eg/studio.d.ts.map +1 -1
  52. package/dist/resources/ar-eg/studio.js +1 -0
  53. package/dist/resources/ar-eg/studio.js.map +1 -1
  54. package/dist/resources/ar-eg/ui.d.ts +9 -0
  55. package/dist/resources/ar-eg/ui.d.ts.map +1 -1
  56. package/dist/resources/ar-eg/ui.js +18 -8
  57. package/dist/resources/ar-eg/ui.js.map +1 -1
  58. package/dist/resources/cs-cz/common.d.ts +858 -5
  59. package/dist/resources/cs-cz/common.d.ts.map +1 -1
  60. package/dist/resources/cs-cz/common.js +882 -28
  61. package/dist/resources/cs-cz/common.js.map +1 -1
  62. package/dist/resources/cs-cz/errors.d.ts +1 -0
  63. package/dist/resources/cs-cz/errors.d.ts.map +1 -1
  64. package/dist/resources/cs-cz/errors.js +2 -0
  65. package/dist/resources/cs-cz/errors.js.map +1 -1
  66. package/dist/resources/cs-cz/generated.d.ts.map +1 -1
  67. package/dist/resources/cs-cz/generated.js +1 -0
  68. package/dist/resources/cs-cz/generated.js.map +1 -1
  69. package/dist/resources/cs-cz/studio.d.ts.map +1 -1
  70. package/dist/resources/cs-cz/studio.js +1 -0
  71. package/dist/resources/cs-cz/studio.js.map +1 -1
  72. package/dist/resources/cs-cz/ui.d.ts +9 -0
  73. package/dist/resources/cs-cz/ui.d.ts.map +1 -1
  74. package/dist/resources/cs-cz/ui.js +18 -8
  75. package/dist/resources/cs-cz/ui.js.map +1 -1
  76. package/dist/resources/da-dk/common.d.ts +858 -5
  77. package/dist/resources/da-dk/common.d.ts.map +1 -1
  78. package/dist/resources/da-dk/common.js +882 -28
  79. package/dist/resources/da-dk/common.js.map +1 -1
  80. package/dist/resources/da-dk/errors.d.ts +1 -0
  81. package/dist/resources/da-dk/errors.d.ts.map +1 -1
  82. package/dist/resources/da-dk/errors.js +2 -0
  83. package/dist/resources/da-dk/errors.js.map +1 -1
  84. package/dist/resources/da-dk/generated.d.ts.map +1 -1
  85. package/dist/resources/da-dk/generated.js +1 -0
  86. package/dist/resources/da-dk/generated.js.map +1 -1
  87. package/dist/resources/da-dk/studio.d.ts.map +1 -1
  88. package/dist/resources/da-dk/studio.js +1 -0
  89. package/dist/resources/da-dk/studio.js.map +1 -1
  90. package/dist/resources/da-dk/ui.d.ts +9 -0
  91. package/dist/resources/da-dk/ui.d.ts.map +1 -1
  92. package/dist/resources/da-dk/ui.js +18 -8
  93. package/dist/resources/da-dk/ui.js.map +1 -1
  94. package/dist/resources/de-de/common.d.ts +858 -5
  95. package/dist/resources/de-de/common.d.ts.map +1 -1
  96. package/dist/resources/de-de/common.js +882 -28
  97. package/dist/resources/de-de/common.js.map +1 -1
  98. package/dist/resources/de-de/errors.d.ts +1 -0
  99. package/dist/resources/de-de/errors.d.ts.map +1 -1
  100. package/dist/resources/de-de/errors.js +2 -0
  101. package/dist/resources/de-de/errors.js.map +1 -1
  102. package/dist/resources/de-de/generated.d.ts.map +1 -1
  103. package/dist/resources/de-de/generated.js +1 -0
  104. package/dist/resources/de-de/generated.js.map +1 -1
  105. package/dist/resources/de-de/studio.d.ts.map +1 -1
  106. package/dist/resources/de-de/studio.js +1 -0
  107. package/dist/resources/de-de/studio.js.map +1 -1
  108. package/dist/resources/de-de/ui.d.ts +9 -0
  109. package/dist/resources/de-de/ui.d.ts.map +1 -1
  110. package/dist/resources/de-de/ui.js +18 -8
  111. package/dist/resources/de-de/ui.js.map +1 -1
  112. package/dist/resources/en-us/common.d.ts +858 -5
  113. package/dist/resources/en-us/common.d.ts.map +1 -1
  114. package/dist/resources/en-us/common.js +882 -28
  115. package/dist/resources/en-us/common.js.map +1 -1
  116. package/dist/resources/en-us/errors.d.ts +1 -0
  117. package/dist/resources/en-us/errors.d.ts.map +1 -1
  118. package/dist/resources/en-us/errors.js +2 -0
  119. package/dist/resources/en-us/errors.js.map +1 -1
  120. package/dist/resources/en-us/generated.d.ts.map +1 -1
  121. package/dist/resources/en-us/generated.js +1 -0
  122. package/dist/resources/en-us/generated.js.map +1 -1
  123. package/dist/resources/en-us/studio.d.ts.map +1 -1
  124. package/dist/resources/en-us/studio.js +1 -0
  125. package/dist/resources/en-us/studio.js.map +1 -1
  126. package/dist/resources/en-us/ui.d.ts +9 -0
  127. package/dist/resources/en-us/ui.d.ts.map +1 -1
  128. package/dist/resources/en-us/ui.js +18 -8
  129. package/dist/resources/en-us/ui.js.map +1 -1
  130. package/dist/resources/fr-fr/common.d.ts +858 -5
  131. package/dist/resources/fr-fr/common.d.ts.map +1 -1
  132. package/dist/resources/fr-fr/common.js +882 -28
  133. package/dist/resources/fr-fr/common.js.map +1 -1
  134. package/dist/resources/fr-fr/errors.d.ts +1 -0
  135. package/dist/resources/fr-fr/errors.d.ts.map +1 -1
  136. package/dist/resources/fr-fr/errors.js +2 -0
  137. package/dist/resources/fr-fr/errors.js.map +1 -1
  138. package/dist/resources/fr-fr/generated.d.ts.map +1 -1
  139. package/dist/resources/fr-fr/generated.js +1 -0
  140. package/dist/resources/fr-fr/generated.js.map +1 -1
  141. package/dist/resources/fr-fr/studio.d.ts.map +1 -1
  142. package/dist/resources/fr-fr/studio.js +1 -0
  143. package/dist/resources/fr-fr/studio.js.map +1 -1
  144. package/dist/resources/fr-fr/ui.d.ts +9 -0
  145. package/dist/resources/fr-fr/ui.d.ts.map +1 -1
  146. package/dist/resources/fr-fr/ui.js +18 -8
  147. package/dist/resources/fr-fr/ui.js.map +1 -1
  148. package/dist/resources/index.d.ts.map +1 -1
  149. package/dist/resources/index.js +1 -0
  150. package/dist/resources/index.js.map +1 -1
  151. package/dist/resources/lazy.d.ts.map +1 -1
  152. package/dist/resources/lazy.js.map +1 -1
  153. package/dist/resources/zh-cn/common.d.ts +858 -5
  154. package/dist/resources/zh-cn/common.d.ts.map +1 -1
  155. package/dist/resources/zh-cn/common.js +882 -28
  156. package/dist/resources/zh-cn/common.js.map +1 -1
  157. package/dist/resources/zh-cn/errors.d.ts +1 -0
  158. package/dist/resources/zh-cn/errors.d.ts.map +1 -1
  159. package/dist/resources/zh-cn/errors.js +2 -0
  160. package/dist/resources/zh-cn/errors.js.map +1 -1
  161. package/dist/resources/zh-cn/generated.d.ts.map +1 -1
  162. package/dist/resources/zh-cn/generated.js +1 -0
  163. package/dist/resources/zh-cn/generated.js.map +1 -1
  164. package/dist/resources/zh-cn/studio.d.ts.map +1 -1
  165. package/dist/resources/zh-cn/studio.js +1 -0
  166. package/dist/resources/zh-cn/studio.js.map +1 -1
  167. package/dist/resources/zh-cn/ui.d.ts +9 -0
  168. package/dist/resources/zh-cn/ui.d.ts.map +1 -1
  169. package/dist/resources/zh-cn/ui.js +18 -8
  170. package/dist/resources/zh-cn/ui.js.map +1 -1
  171. package/dist/resources/zh-tw/common.d.ts +858 -5
  172. package/dist/resources/zh-tw/common.d.ts.map +1 -1
  173. package/dist/resources/zh-tw/common.js +882 -28
  174. package/dist/resources/zh-tw/common.js.map +1 -1
  175. package/dist/resources/zh-tw/errors.d.ts +1 -0
  176. package/dist/resources/zh-tw/errors.d.ts.map +1 -1
  177. package/dist/resources/zh-tw/errors.js +2 -0
  178. package/dist/resources/zh-tw/errors.js.map +1 -1
  179. package/dist/resources/zh-tw/generated.d.ts.map +1 -1
  180. package/dist/resources/zh-tw/generated.js +1 -0
  181. package/dist/resources/zh-tw/generated.js.map +1 -1
  182. package/dist/resources/zh-tw/studio.d.ts.map +1 -1
  183. package/dist/resources/zh-tw/studio.js +1 -0
  184. package/dist/resources/zh-tw/studio.js.map +1 -1
  185. package/dist/resources/zh-tw/ui.d.ts +9 -0
  186. package/dist/resources/zh-tw/ui.d.ts.map +1 -1
  187. package/dist/resources/zh-tw/ui.js +18 -8
  188. package/dist/resources/zh-tw/ui.js.map +1 -1
  189. package/dist/review-status.d.ts.map +1 -1
  190. package/dist/review-status.js +8 -7
  191. package/dist/review-status.js.map +1 -1
  192. package/dist/revision.d.ts.map +1 -1
  193. package/dist/revision.js +1 -0
  194. package/dist/revision.js.map +1 -1
  195. package/dist/server.d.ts.map +1 -1
  196. package/dist/server.js +1 -0
  197. package/dist/server.js.map +1 -1
  198. package/dist/validate-message.d.ts.map +1 -1
  199. package/dist/validate-message.js +1 -0
  200. package/dist/validate-message.js.map +1 -1
  201. package/locales/ar-EG/.meta.json +5508 -2872
  202. package/locales/ar-EG/common.json +881 -28
  203. package/locales/ar-EG/errors.json +1 -0
  204. package/locales/ar-EG/ui.json +17 -8
  205. package/locales/cs-CZ/.meta.json +5542 -2906
  206. package/locales/cs-CZ/common.json +881 -28
  207. package/locales/cs-CZ/errors.json +1 -0
  208. package/locales/cs-CZ/ui.json +17 -8
  209. package/locales/da-DK/.meta.json +5613 -2977
  210. package/locales/da-DK/common.json +881 -28
  211. package/locales/da-DK/errors.json +1 -0
  212. package/locales/da-DK/ui.json +17 -8
  213. package/locales/de-DE/.meta.json +5600 -2964
  214. package/locales/de-DE/common.json +881 -28
  215. package/locales/de-DE/errors.json +1 -0
  216. package/locales/de-DE/ui.json +17 -8
  217. package/locales/en-US/common.json +881 -28
  218. package/locales/en-US/errors.json +1 -0
  219. package/locales/en-US/ui.json +17 -8
  220. package/locales/fr-FR/.meta.json +5644 -3008
  221. package/locales/fr-FR/common.json +881 -28
  222. package/locales/fr-FR/errors.json +1 -0
  223. package/locales/fr-FR/ui.json +17 -8
  224. package/locales/zh-CN/.meta.json +5504 -2868
  225. package/locales/zh-CN/common.json +881 -28
  226. package/locales/zh-CN/errors.json +1 -0
  227. package/locales/zh-CN/ui.json +17 -8
  228. package/locales/zh-TW/.meta.json +5507 -2871
  229. package/locales/zh-TW/common.json +881 -28
  230. package/locales/zh-TW/errors.json +1 -0
  231. package/locales/zh-TW/ui.json +17 -8
  232. package/package.json +2 -2
@@ -14,6 +14,7 @@
14
14
  },
15
15
  "auth": {
16
16
  "headline": "把任何数据库变成仪表盘。",
17
+ "description": "连接 PostgreSQL,Adminium 就会生成一个可换主题、懂权限的管理后台——无需写代码。",
17
18
  "trust": "AGPL 核心 · 自托管 · 数据始终归你所有",
18
19
  "signIn": {
19
20
  "title": "欢迎回来",
@@ -97,7 +98,12 @@
97
98
  "planning": "规划",
98
99
  "people": "人员",
99
100
  "account": "账户"
100
- }
101
+ },
102
+ "back": "返回",
103
+ "team": "团队",
104
+ "roles": "角色与权限",
105
+ "audit": "审计日志",
106
+ "security": "密码与会话"
101
107
  },
102
108
  "topbar": {
103
109
  "search": "搜索…",
@@ -120,8 +126,8 @@
120
126
  "askAi": "询问 AI",
121
127
  "shortcuts": "键盘快捷键",
122
128
  "signOut": "退出登录",
123
- "themeDark": "切换到深色主题",
124
- "themeLight": "切换到浅色主题",
129
+ "themeDark": "深色模式",
130
+ "themeLight": "浅色模式",
125
131
  "footerNavigate": "导航",
126
132
  "footerOpen": "选择",
127
133
  "footerClose": "关闭",
@@ -230,6 +236,7 @@
230
236
  },
231
237
  "notFound": {
232
238
  "title": "页面不见了",
239
+ "body": "你要找的页面不存在或已被移动。请检查网址,或返回你的仪表盘。",
233
240
  "errorLine": "错误 404",
234
241
  "searchPlaceholder": "搜索页面…",
235
242
  "matches": "匹配的页面",
@@ -247,10 +254,12 @@
247
254
  "title": "此页面渲染失败"
248
255
  },
249
256
  "tooNew": {
250
- "title": "此页面需要更新版本的 Adminium"
257
+ "title": "此页面需要更新版本的 Adminium",
258
+ "body": "此页面保存时使用的配置版本是 {version},而当前版本最高只支持到版本 {latest}。请升级 Adminium 后再打开。"
251
259
  },
252
260
  "unknownTemplate": {
253
- "title": "未知的页面模板"
261
+ "title": "未知的页面模板",
262
+ "body": "此页面使用了当前版本无法识别的模板。它可能来自更新版本的 Adminium,或来自尚未安装的扩展。"
254
263
  }
255
264
  },
256
265
  "mutation": {
@@ -339,6 +348,70 @@
339
348
  "emptyTitle": "暂无可配置项",
340
349
  "emptyBody": "随着功能上线,通知事件将显示在这里。",
341
350
  "saveFailed": "无法保存此更改。"
351
+ },
352
+ "translations": {
353
+ "title": "语言与翻译",
354
+ "subtitle": "修改 Adminium 中的任何文案,决定用户可以选择哪些语言,并添加你自己的语言。",
355
+ "warning": "错误提示和登录文案同样可以修改。出问题时用户读到的正是这些内容,请谨慎改动。",
356
+ "editor": {
357
+ "heading": "编辑翻译"
358
+ },
359
+ "localeLabel": "语言",
360
+ "groupLabel": "区域",
361
+ "allAreas": "全部区域",
362
+ "stateLabel": "显示",
363
+ "state": {
364
+ "all": "全部",
365
+ "overridden": "仅已自定义",
366
+ "untranslated": "仅未翻译",
367
+ "stale": "此后英文有改动"
368
+ },
369
+ "searchLabel": "搜索",
370
+ "searchPlaceholder": "键名或英文原文",
371
+ "loading": "正在加载文案…",
372
+ "noMatches": "没有符合这些筛选条件的文案。",
373
+ "count": "{total, plural, other {# 条文案}}",
374
+ "badge": {
375
+ "custom": "已自定义",
376
+ "stale": "英文已更改",
377
+ "a11y": "无障碍名称"
378
+ },
379
+ "sourceLabel": "英文原文",
380
+ "valueLabel": "翻译",
381
+ "save": "保存",
382
+ "saved": "翻译已保存",
383
+ "resetAction": "恢复为内置文案",
384
+ "reset": "已恢复为内置文案",
385
+ "locales": {
386
+ "heading": "可用语言",
387
+ "help": "关闭某种语言后,它会从所有语言选择器中消失。已经在使用它的人会继续使用,直到自己改选其他语言。"
388
+ },
389
+ "locale": {
390
+ "builtin": "内置",
391
+ "custom": "自定义",
392
+ "overrides": "{count, plural, =0 {暂无自定义文案} other {# 条自定义文案}}",
393
+ "enable": "开启",
394
+ "disable": "关闭",
395
+ "delete": "删除",
396
+ "deleted": "语言已移除",
397
+ "deletedDetail": "{users, plural, other {# 位用户}}已改回工作区默认语言;已删除 {strings, plural, other {# 条翻译}}。",
398
+ "deleteFailed": "无法移除该语言",
399
+ "add": "添加语言",
400
+ "added": "语言已添加",
401
+ "create": "确认添加",
402
+ "id": "语言代码",
403
+ "intlTag": "格式规则参照",
404
+ "native": "该语言中的名称",
405
+ "english": "英文名称",
406
+ "dir": "文字方向",
407
+ "ltr": "从左到右",
408
+ "rtl": "从右到左",
409
+ "font": "文字系统",
410
+ "latin": "拉丁文",
411
+ "arabic": "阿拉伯文",
412
+ "cjk": "中文 / 日文 / 韩文",
413
+ "intlHelp": "格式规则决定数字、日期和复数的表现方式。请选择最接近且已有这些规则的语言——它不必与你的语言代码一致。"
414
+ }
342
415
  }
343
416
  },
344
417
  "studio": {
@@ -544,13 +617,31 @@
544
617
  "label": "应用名称",
545
618
  "helper": "显示在侧边栏、浏览器标题和邮件中。",
546
619
  "error": "请输入不超过 60 个字符的名称。"
620
+ },
621
+ "logo": {
622
+ "label": "标志",
623
+ "drop": "将图片拖放到此处",
624
+ "helper": "支持 PNG、JPEG、WebP、GIF 或 SVG,最大 1 MB。将在所有位置替换内置标志。",
625
+ "upload": "上传标志",
626
+ "replace": "更换标志",
627
+ "remove": "移除",
628
+ "uploaded": "标志已更新",
629
+ "removed": "标志已移除",
630
+ "tooLarge": "该图片大于 1 MB。",
631
+ "badType": "请选择 PNG、JPEG、WebP、GIF 或 SVG 图片。",
632
+ "undo": "撤销"
633
+ },
634
+ "showVersion": {
635
+ "label": "侧边栏中的版本",
636
+ "helper": "标志旁的版本号。关闭后将隐藏您运行的版本。"
547
637
  }
548
638
  },
549
639
  "security": {
550
640
  "heading": "安全",
551
641
  "require2fa": {
552
642
  "label": "强制双重验证",
553
- "desc": "每位成员都必须启用双重验证才能登录。"
643
+ "desc": "每位成员都必须启用双重验证才能登录。",
644
+ "note": "这是提示而非强制:未启用双重验证的成员会被引导去设置,之后也无法再关闭,但登录不会被阻止,API 密钥也不受影响。"
554
645
  },
555
646
  "allowSignup": {
556
647
  "label": "允许自助注册",
@@ -565,6 +656,41 @@
565
656
  "error": "介于 {min, number} 到 {max, number} 个字符之间。"
566
657
  }
567
658
  },
659
+ "email": {
660
+ "heading": "电子邮件 (SMTP)",
661
+ "unconfigured": "尚未设置邮件服务器,因此 Adminium 无法发送密码重置、用户邀请或计划报告。",
662
+ "host": {
663
+ "label": "SMTP 主机",
664
+ "error": "只能填写主机名或 IP 地址 — 不含协议、端口或凭据。"
665
+ },
666
+ "port": {
667
+ "label": "端口",
668
+ "error": "介于 {min, number} 与 {max, number} 之间。"
669
+ },
670
+ "user": {
671
+ "label": "用户名",
672
+ "helper": "若中继无需认证,请留空。"
673
+ },
674
+ "pass": {
675
+ "label": "密码",
676
+ "helper": "加密存储且不再显示。留空则保留当前密码。",
677
+ "error": "该用户名需要密码。"
678
+ },
679
+ "from": {
680
+ "label": "发件人地址",
681
+ "helper": "可只填地址,或在地址前加显示名称。",
682
+ "error": "请输入电子邮件地址。"
683
+ },
684
+ "secure": {
685
+ "label": "隐式 TLS",
686
+ "helper": "端口 465 请开启。关闭时以明文开始并通过 STARTTLS 升级,这正是端口 587 所期望的。"
687
+ },
688
+ "remove": "移除邮件服务器",
689
+ "review": {
690
+ "removed": "已移除",
691
+ "password": "已替换"
692
+ }
693
+ },
568
694
  "review": {
569
695
  "title": "保存工作区设置",
570
696
  "subtitle": "保存前请确认您的更改。",
@@ -573,6 +699,8 @@
573
699
  "close": "关闭",
574
700
  "on": "开",
575
701
  "off": "关",
702
+ "shown": "显示",
703
+ "hidden": "隐藏",
576
704
  "change": "{before} → {after}"
577
705
  },
578
706
  "defaultsCard": {
@@ -591,6 +719,16 @@
591
719
  "heading": "AI 增强",
592
720
  "body": "配置 AI 提供方(或复制粘贴往返)来增强标签、分组和关系。",
593
721
  "cta": "打开 AI 设置"
722
+ },
723
+ "pagesCard": {
724
+ "heading": "页面",
725
+ "body": "添加、编辑和删除页面,更改每个页面的内容,并重新排列侧边栏。",
726
+ "cta": "管理页面"
727
+ },
728
+ "translationsCard": {
729
+ "heading": "语言与翻译",
730
+ "body": "重写 Adminium 中的任何文案,决定用户可以选择哪些语言,并添加你自己的语言。",
731
+ "cta": "打开翻译"
594
732
  }
595
733
  },
596
734
  "settingsAi": {
@@ -956,7 +1094,20 @@
956
1094
  "testFailed": "连接失败。",
957
1095
  "v1Note": {
958
1096
  "title": "关于此安装",
959
- "body": "此服务器在首次启动时选择了元数据存储。此步骤验证你的选择与此连接兼容并记录下来——服务器会独立执行同一规则(409 META_PLACEMENT_INVALID)。迁移现有元数据存储属于运维任务(M10)。"
1097
+ "body": "此服务器已将自有数据表保存在配置好的数据库中,本步骤不会迁移它们。它只校验你的选择是否与此连接兼容——服务器会独立执行同一规则(409 META_PLACEMENT_INVALID)。"
1098
+ },
1099
+ "move": {
1100
+ "title": "正在迁移 Adminium 的数据表",
1101
+ "copying": "正在迁移 Adminium 的数据表…",
1102
+ "restarting": "正在重启…",
1103
+ "copyingBody": "正在将每张 adminium_ 表复制到新数据库。你的源数据不会被改动,只有在校验通过后才会切换。",
1104
+ "restartingBody": "复制已完成。Adminium 正在新数据库上重启——本页面将在几秒后自动继续。",
1105
+ "failed": "无法迁移 Adminium 的数据表——请重试。",
1106
+ "timeout": "Adminium 已迁移数据表,但尚未恢复。你的数据已安全存放在新数据库中——请稍后刷新本页面。"
1107
+ },
1108
+ "willMove": {
1109
+ "title": "此操作将迁移 Adminium 的数据表",
1110
+ "body": "Adminium 目前使用内置的 SQLite 存储。点击“继续”会把该存储复制到你选择的数据库并在其上重启——账号、页面和设置都会一起迁移,你将保持登录状态。"
960
1111
  }
961
1112
  },
962
1113
  "intent": {
@@ -1111,7 +1262,64 @@
1111
1262
  "pii": "PII",
1112
1263
  "masked": "已脱敏"
1113
1264
  },
1114
- "unavailableTitle": "架构重映射编辑器不可用"
1265
+ "unavailableTitle": "架构重映射编辑器不可用",
1266
+ "unavailableBody": "此版本尚未包含重映射编辑器(09-T12)。等它上线后重新运行生成,即可重映射标签、类型和关系。"
1267
+ },
1268
+ "publicApi": {
1269
+ "error": "Something went wrong",
1270
+ "scopes": {
1271
+ "deleteTitle": "Delete this scope",
1272
+ "deleteBody": "Any page using a key bound to this scope stops loading data. Keys are not deleted — revoke them first if that is what you meant.",
1273
+ "deletePrompt": "Type the scope name to confirm",
1274
+ "deleteConfirm": "Delete scope",
1275
+ "issuesTitle": "This scope did not compile",
1276
+ "title": "Scopes",
1277
+ "subtitle": "A scope is the whole of what a key may reach — the tables, the exact columns, and a filter the caller can narrow but never remove.",
1278
+ "emptyTitle": "No scopes yet",
1279
+ "emptyBody": "Create one below. It is checked against your live schema before it is saved.",
1280
+ "keyCount": "{count, plural, =0 {no keys} other {# keys}}",
1281
+ "delete": "Delete",
1282
+ "nameLabel": "Name",
1283
+ "connectionLabel": "Connection ID",
1284
+ "documentLabel": "Scope document",
1285
+ "documentHint": "Compiled against your schema when you save. Every column a caller can reach is listed here and nowhere else.",
1286
+ "create": "Create scope",
1287
+ "formLabel": "Create a scope"
1288
+ },
1289
+ "cancel": "Cancel",
1290
+ "close": "Close",
1291
+ "title": "Public API",
1292
+ "subtitle": "Let your own customer- or staff-facing pages read this database, through a scope you define.",
1293
+ "notRegistered": {
1294
+ "title": "Not enabled on this server",
1295
+ "body": "Set ADMINIUM_PUBLIC_API_ORIGINS to the exact origins allowed to call it, then restart. Until then these routes are not served at all."
1296
+ },
1297
+ "toggle": {
1298
+ "label": "Serve the public API",
1299
+ "hint": "Turning this off stops every public request immediately. Nothing is deleted — keys, scopes and data all survive."
1300
+ },
1301
+ "origins": {
1302
+ "label": "Origins allowed to call it"
1303
+ },
1304
+ "keys": {
1305
+ "title": "Keys",
1306
+ "subtitle": "These go in your page’s JavaScript, so anyone can read them. That is expected — a key can only ever do what its scope allows.",
1307
+ "emptyTitle": "No keys yet",
1308
+ "emptyBody": "Create a scope first, then mint a key for it.",
1309
+ "reveal": "Show key",
1310
+ "rotate": "Rotate",
1311
+ "revoke": "Revoke",
1312
+ "nameLabel": "Name",
1313
+ "scopeLabel": "Scope",
1314
+ "scopePlaceholder": "Choose a scope",
1315
+ "create": "Create key",
1316
+ "formLabel": "Create a key",
1317
+ "scopeIsAuthTitle": "The scope is the only permission",
1318
+ "scopeIsAuthBody": "A key can reach exactly what its scope lists and nothing else. It does not use roles or table permissions, and it cannot read anything through the rest of the API."
1319
+ },
1320
+ "status": {
1321
+ "heading": "Status"
1322
+ }
1115
1323
  }
1116
1324
  },
1117
1325
  "onboarding": {
@@ -1231,7 +1439,9 @@
1231
1439
  "duplicate": "复制 {name}",
1232
1440
  "remove": "移除 {name}",
1233
1441
  "removed": "已移除 {name}。",
1234
- "duplicated": "已复制 {name}。"
1442
+ "duplicated": "已复制 {name}。",
1443
+ "unboundHint": "此小组件在这里和线上页面上显示的都是示例数据。打开“配置”将其连接到数据表。",
1444
+ "unbound": "示例数据"
1235
1445
  },
1236
1446
  "families": {
1237
1447
  "kpi": "关键指标",
@@ -1254,7 +1464,149 @@
1254
1464
  "saveVersionTitle": "保存版本",
1255
1465
  "saveVersionBody": "为当前文档创建快照。可随时从“版本”中恢复。",
1256
1466
  "versionName": "版本名称",
1257
- "versionNamePlaceholder": "例如:Q3 费率调整前"
1467
+ "versionNamePlaceholder": "例如:Q3 费率调整前",
1468
+ "discard": "放弃更改",
1469
+ "discardTitle": "放弃你的更改?",
1470
+ "discardBody": "仪表盘将恢复到你打开编辑器时的样子。你的数据不受影响。",
1471
+ "discardConfirm": "放弃更改",
1472
+ "keepEditing": "继续编辑",
1473
+ "discarded": "更改已放弃。",
1474
+ "binding": {
1475
+ "addFilter": "添加筛选条件",
1476
+ "brokenBody": "它已不再符合此版本能够识别的查询,因此该小组件会在线上页面上显示错误。",
1477
+ "brokenTitle": "此小组件的查询已损坏",
1478
+ "bucketColumn": "日期列",
1479
+ "bucketRequired": "请选择承载日期的列。",
1480
+ "bucketUnit": "时间分组方式",
1481
+ "columnNone": "无",
1482
+ "columnPlaceholder": "选择列…",
1483
+ "connect": "连接数据",
1484
+ "edit": "编辑查询",
1485
+ "event": {
1486
+ "category": "类别列(可选)",
1487
+ "date": "开始日期列",
1488
+ "end": "结束日期列(可选)",
1489
+ "title": "标题列"
1490
+ },
1491
+ "filterColumnRequired": "请选择一列。",
1492
+ "filterColumn": "列",
1493
+ "filterListHelper": "多个值之间用逗号分隔。",
1494
+ "filterOp": "条件",
1495
+ "filterValue": "值",
1496
+ "fn": {
1497
+ "avg": "平均值",
1498
+ "countDistinct": "去重值计数",
1499
+ "count": "行数计数",
1500
+ "max": "最大值",
1501
+ "min": "最小值",
1502
+ "sum": "求和"
1503
+ },
1504
+ "groupByColumns": "列",
1505
+ "groupByRequired": "此视图需要一个拆分列。",
1506
+ "groupByRows": "行",
1507
+ "groupBy": "分组依据",
1508
+ "incompleteBody": "请填写高亮的字段——写了一半的查询会在线上仪表盘中失败。",
1509
+ "incompleteTitle": "此查询尚未完成",
1510
+ "limit": "最多获取的行数",
1511
+ "loadingSchema": "正在加载数据表…",
1512
+ "lossyBody": "其中的部分内容——额外的度量、排序或页面筛选联动——不会在此显示,保存后将被丢弃。",
1513
+ "lossyTitle": "此查询比本编辑器支持的更高级",
1514
+ "measureColumnRequired": "此计算需要指定一列。",
1515
+ "measureColumn": "目标列",
1516
+ "measureFn": "计算方式",
1517
+ "noConnectionBody": "只有属于某个连接的页面,其小组件才能绑定数据。",
1518
+ "noConnectionTitle": "此页面没有数据库连接",
1519
+ "noDateColumns": "此数据表没有日期或时间戳列。",
1520
+ "noFilters": "没有筛选条件——表中的每一行都会被计入。",
1521
+ "noSnapshotBody": "表和列来自该连接上次内省的结果。请在 Studio 中运行内省,然后重新打开此编辑器。",
1522
+ "noSnapshotTitle": "此连接没有架构快照",
1523
+ "op": {
1524
+ "between": "介于",
1525
+ "ilike": "包含(不区分大小写)",
1526
+ "in": "属于其中之一",
1527
+ "isNull": "为空",
1528
+ "like": "包含",
1529
+ "notNull": "不为空"
1530
+ },
1531
+ "orderAsc": "最早/最小在前",
1532
+ "orderBy": "排序依据",
1533
+ "orderDesc": "最新/最大在前",
1534
+ "orderDir": "排序方向",
1535
+ "orderNone": "数据库默认顺序",
1536
+ "pickTableFirst": "请先选择数据表,才能选择其中的列。",
1537
+ "removeFilter": "移除筛选条件",
1538
+ "remove": "移除数据源",
1539
+ "save": "使用此查询",
1540
+ "sectionBreakdown": "拆分维度",
1541
+ "sectionColumns": "列",
1542
+ "sectionFilters": "筛选条件",
1543
+ "sectionMeasure": "度量",
1544
+ "sectionRows": "行",
1545
+ "sectionSource": "来源",
1546
+ "sectionTime": "时间轴",
1547
+ "sectionWindow": "时间范围",
1548
+ "selectColumns": "要显示的列",
1549
+ "selectRequired": "请至少选择一列进行显示。",
1550
+ "shape": {
1551
+ "calendarEvents": "带日期的事件",
1552
+ "categorical": "每个类别一个值",
1553
+ "distribution": "单列的分布情况",
1554
+ "matrix": "行列交叉的网格",
1555
+ "metricDelta": "一个数字,并与上一时间段对比",
1556
+ "multiTimeseries": "每个类别一条随时间变化的折线",
1557
+ "recordList": "一组行的列表",
1558
+ "record": "单行",
1559
+ "singleMetric": "单个数字",
1560
+ "stream": "最近行的实时动态",
1561
+ "timeseries": "随时间变化的值",
1562
+ "tree": "每个类别一个值,分两个层级",
1563
+ "geoPoints": "每个地点或地区一个值",
1564
+ "flows": "从一个类别流向另一个类别的量",
1565
+ "ohlc": "每个时间段的开盘、最高、最低和收盘价",
1566
+ "booleanMap": "每个键一个开/关标记"
1567
+ },
1568
+ "shapeHelper": "更改此项会改变可用的查询设置项。",
1569
+ "shapeLabel": "此小组件展示的内容",
1570
+ "summaryColumns": "{count, plural, other {# 列}}",
1571
+ "summaryFilters": "{count, plural, other {# 个筛选条件}}",
1572
+ "tableEmpty": "没有匹配的数据表。",
1573
+ "tablePlaceholder": "搜索数据表…",
1574
+ "tableRequired": "请选择要查询的数据表。",
1575
+ "table": "数据表或视图",
1576
+ "title": "数据源",
1577
+ "unbindableBody": "它展示的数据形态查询引擎尚未支持构建,因此它只会渲染自带的示例内容。",
1578
+ "unbindableTitle": "此小组件尚不能查询数据",
1579
+ "unboundBody": "它在这里和线上页面上显示的都是示例数字。请将它连接到数据表以显示真实数据。",
1580
+ "unboundTitle": "未连接到你的数据",
1581
+ "unit": {
1582
+ "day": "按天",
1583
+ "hour": "按小时",
1584
+ "month": "按月",
1585
+ "quarter": "按季度",
1586
+ "week": "按周",
1587
+ "year": "按年"
1588
+ },
1589
+ "valueColumnRequired": "请选择要度量的列。",
1590
+ "valueColumn": "值列",
1591
+ "windowColumn": "日期列",
1592
+ "windowLast": "最近",
1593
+ "windowNone": "全部时间",
1594
+ "windowRequired": "与上一时间段对比需要一个日期列。",
1595
+ "windowUnit": {
1596
+ "day": "天",
1597
+ "hour": "小时",
1598
+ "month": "个月",
1599
+ "quarter": "个季度",
1600
+ "week": "周",
1601
+ "year": "年"
1602
+ },
1603
+ "windowUnitLabel": "单位",
1604
+ "role": {
1605
+ "flagKey": "键列",
1606
+ "flagValue": "开/关列"
1607
+ },
1608
+ "roleColumnsRequired": "请填写每个必填列,并且在已填写的列之前不能留空,因为这些列是按顺序读取的。"
1609
+ }
1258
1610
  },
1259
1611
  "setup": {
1260
1612
  "title": "设置 Adminium",
@@ -1607,7 +1959,8 @@
1607
1959
  "helpAbout": "关于 Adminium"
1608
1960
  },
1609
1961
  "settings": {
1610
- "explainer": "这些设置仅适用于这台电脑上的 Adminium 应用,保存在本机,不会保存到你的工作区。"
1962
+ "explainer": "这些设置仅适用于这台电脑上的 Adminium 应用,保存在本机,不会保存到你的工作区。",
1963
+ "title": "桌面设置"
1611
1964
  },
1612
1965
  "security": {
1613
1966
  "heading": "登录"
@@ -1654,7 +2007,8 @@
1654
2007
  "mismatchBody": "共享已关闭,但服务器尚未释放网络。请重启 Adminium 以关闭它。",
1655
2008
  "transportTitle": "局域网中的流量未加密。",
1656
2009
  "transportBody": "仅在你信任的网络中共享。如需远程访问,请使用置于 HTTPS 之后的 Adminium 自托管版本。",
1657
- "firewall": "首次共享时,操作系统会询问是否允许传入连接 — 请选择\"允许\",否则其他设备将无法访问 Adminium。"
2010
+ "firewall": "首次共享时,操作系统会询问是否允许传入连接 — 请选择\"允许\",否则其他设备将无法访问 Adminium。",
2011
+ "manageTeam": "管理用户与角色"
1658
2012
  },
1659
2013
  "setup": {
1660
2014
  "title": "欢迎使用 Adminium",
@@ -1863,37 +2217,48 @@
1863
2217
  },
1864
2218
  "templates": {
1865
2219
  "crud": {
1866
- "title": "记录"
2220
+ "title": "记录",
2221
+ "description": "可搜索的数据表格,支持新增、编辑和删除。"
1867
2222
  },
1868
2223
  "dashboard": {
1869
- "title": "仪表盘"
2224
+ "title": "仪表盘",
2225
+ "description": "由你自行排布的图表与指标网格。"
1870
2226
  },
1871
2227
  "board": {
1872
- "title": "看板"
2228
+ "title": "看板",
2229
+ "description": "按状态分列的卡片,可在列之间拖动。"
1873
2230
  },
1874
2231
  "calendar": {
1875
- "title": "日历"
2232
+ "title": "日历",
2233
+ "description": "按日期排布在月视图或周视图网格中的记录。"
1876
2234
  },
1877
2235
  "scheduler": {
1878
- "title": "排班"
2236
+ "title": "排班",
2237
+ "description": "谁在做什么——以每人一行的时间轴呈现。"
1879
2238
  },
1880
2239
  "logViewer": {
1881
- "title": "日志"
2240
+ "title": "日志",
2241
+ "description": "密集且可筛选的事件行,附详细追踪。"
1882
2242
  },
1883
2243
  "files": {
1884
- "title": "文件"
2244
+ "title": "文件",
2245
+ "description": "以可浏览的资料库形式展示文件与文件夹。"
1885
2246
  },
1886
2247
  "chat": {
1887
- "title": "聊天"
2248
+ "title": "聊天",
2249
+ "description": "带消息历史的会话线程。"
1888
2250
  },
1889
2251
  "builder": {
1890
- "title": "构建器"
2252
+ "title": "构建器",
2253
+ "description": "用于制作文档与模板的拖放画布。"
1891
2254
  },
1892
2255
  "wizard": {
1893
- "title": "向导"
2256
+ "title": "向导",
2257
+ "description": "引导式的分步流程,逐步完成任务。"
1894
2258
  },
1895
2259
  "settings": {
1896
- "title": "设置"
2260
+ "title": "设置",
2261
+ "description": "分组的偏好设置行,含开关与输入项。"
1897
2262
  },
1898
2263
  "directory": {
1899
2264
  "title": "通讯录",
@@ -1907,7 +2272,8 @@
1907
2272
  "noMatchesBody": "试试其他搜索词或移除筛选。",
1908
2273
  "errorTitle": "无法加载此通讯录",
1909
2274
  "loading": "正在加载人员",
1910
- "memberCount": "{count} 人"
2275
+ "memberCount": "{count} 人",
2276
+ "description": "以卡片展示人员,并附组织架构图。"
1911
2277
  },
1912
2278
  "masterDetail": {
1913
2279
  "title": "列表与详情",
@@ -1919,7 +2285,8 @@
1919
2285
  "noMatchesBody": "试试移除筛选。",
1920
2286
  "errorTitle": "无法加载此列表",
1921
2287
  "loading": "正在加载记录",
1922
- "selectPrompt": "选择一条记录"
2288
+ "selectPrompt": "选择一条记录",
2289
+ "description": "左侧是列表,选中的记录显示在旁边。"
1923
2290
  },
1924
2291
  "queueInbox": {
1925
2292
  "title": "队列",
@@ -1944,7 +2311,8 @@
1944
2311
  "errorTitle": "无法加载此队列",
1945
2312
  "loading": "正在加载队列",
1946
2313
  "selectPrompt": "选择一个请求",
1947
- "daysUnit": "{count} 天"
2314
+ "daysUnit": "{count} 天",
2315
+ "description": "带有通过与拒绝操作的工作队列。"
1948
2316
  }
1949
2317
  },
1950
2318
  "dataio": {
@@ -2048,7 +2416,492 @@
2048
2416
  }
2049
2417
  },
2050
2418
  "theme": {
2051
- "toLight": "切换到浅色主题",
2052
- "toDark": "切换到深色主题"
2419
+ "toLight": "浅色模式",
2420
+ "toDark": "深色模式"
2421
+ },
2422
+ "studioPages": {
2423
+ "title": "页面",
2424
+ "subtitle": "添加、编辑和整理应用的页面,以及它们在侧边栏中的顺序。",
2425
+ "createButton": "新建页面",
2426
+ "loadFailed": {
2427
+ "title": "无法加载页面",
2428
+ "body": "管理页面需要“管理页面”权限。请联系管理员将该权限授予你的某个角色。"
2429
+ },
2430
+ "tab": {
2431
+ "pages": "全部页面",
2432
+ "sidebar": "侧边栏顺序"
2433
+ },
2434
+ "list": {
2435
+ "title": "页面",
2436
+ "count": "{count, plural, other {# 个页面}}"
2437
+ },
2438
+ "empty": {
2439
+ "title": "暂无页面",
2440
+ "body": "连接数据库即可自动生成页面,也可以手动创建一个。"
2441
+ },
2442
+ "status": {
2443
+ "live": "已上线",
2444
+ "hidden": "已隐藏"
2445
+ },
2446
+ "origin": {
2447
+ "generated": "自动生成",
2448
+ "manifest": "插件",
2449
+ "llm": "助手",
2450
+ "system": "系统",
2451
+ "user": "自定义"
2452
+ },
2453
+ "row": {
2454
+ "menu": "{title} 的操作"
2455
+ },
2456
+ "action": {
2457
+ "edit": "编辑页面",
2458
+ "duplicate": "创建副本",
2459
+ "hide": "在侧边栏中隐藏",
2460
+ "show": "在侧边栏中显示",
2461
+ "delete": "删除页面"
2462
+ },
2463
+ "create": {
2464
+ "title": "新建页面",
2465
+ "failed": "无法创建页面",
2466
+ "submit": "创建页面",
2467
+ "subtitle": "选择此页面显示什么以及外观如何。预览会跟随你的选择。"
2468
+ },
2469
+ "duplicate": {
2470
+ "title": "创建页面副本",
2471
+ "failed": "无法创建副本",
2472
+ "submit": "创建副本"
2473
+ },
2474
+ "delete": {
2475
+ "title": "确定删除此页面吗?",
2476
+ "body": "此操作无法撤销。该页面上所有已保存的视图和个人布局将对所有人删除。",
2477
+ "bodyGenerated": "此页面由架构生成创建,下次重新生成时会再次出现。已保存的视图和个人布局将对所有人删除。",
2478
+ "prompt": "输入 {slug} 以确认",
2479
+ "confirm": "删除页面"
2480
+ },
2481
+ "field": {
2482
+ "title": "标题",
2483
+ "titleHint": "显示在侧边栏和页面标题栏中。",
2484
+ "slug": "页面地址",
2485
+ "slugHint": "仅限小写字母、数字和连字符。只需填写最后一段,其余部分会自动补全。",
2486
+ "slugTaken": "已有其他页面使用该地址。",
2487
+ "slugWarning": "修改地址会导致指向此页面的现有链接和书签失效。",
2488
+ "template": "模板",
2489
+ "templateHint": "决定页面可以承载哪些内容,之后可以更改。",
2490
+ "group": "侧边栏分组",
2491
+ "groupHint": "页面出现在侧边栏的哪个区块。",
2492
+ "icon": "图标",
2493
+ "iconHint": "显示在侧边栏中页面名称的旁边。",
2494
+ "visible": "在侧边栏中显示",
2495
+ "visibleHint": "隐藏的页面仍可通过网址访问,只要对方有链接。",
2496
+ "table": "数据表",
2497
+ "tableCreateHint": "此页面读取的数据表。现在选择即可直接使用;留空则可稍后再绑定。",
2498
+ "tableNone": "未绑定",
2499
+ "tableNeedsConnection": "请先选择数据源。",
2500
+ "connection": "数据源",
2501
+ "connectionNone": "无",
2502
+ "iconPick": "选择页面图标",
2503
+ "padding": "页面内边距"
2504
+ },
2505
+ "editor": {
2506
+ "title": "编辑页面",
2507
+ "save": "保存更改",
2508
+ "saveFailed": "无法保存更改",
2509
+ "openPage": "打开页面",
2510
+ "generated": {
2511
+ "title": "此页面根据你的数据库架构生成",
2512
+ "body": "重新生成时会保留你的修改:页面会被标记为已编辑并原样保留。但删除只在下次生成前有效,届时页面会被重新创建。"
2513
+ },
2514
+ "contentUnavailable": "无法加载页面内容",
2515
+ "contentUnavailableBody": "以上信息仍可保存。",
2516
+ "contentInvalid": "无法读取此页面的配置",
2517
+ "contentInvalidBody": "配置由更新的版本写入,或已损坏。请重新生成或删除该页面。",
2518
+ "data": "数据",
2519
+ "schemaFailed": "无法列出数据表",
2520
+ "schemaFailedBody": "此连接可能尚未分析。请在“工作室 → 数据连接”中运行架构分析。",
2521
+ "notBindable": "此模板不绑定单个数据表",
2522
+ "notBindableBody": "它的内容由小组件逐个搭建。打开页面并点击“编辑”即可添加。",
2523
+ "recompose": "此页面将被重建",
2524
+ "recomposeBody": "保存后将依据上方的模板和数据表用全新布局替换页面内容。此页面上的列调整和小组件改动将会丢失。",
2525
+ "missing": "此页面已不存在",
2526
+ "missingBody": "它可能已被删除,或被某次重新生成移除。",
2527
+ "details": "详细信息",
2528
+ "itemsPending": "请先保存上方的更改——页面内容将依据新的模板和数据表重建。",
2529
+ "columns": "列",
2530
+ "appearance": "外观"
2531
+ },
2532
+ "sidebar": {
2533
+ "help": "在分组内重新排序页面,或将页面移到其他分组。更改对所有人生效。",
2534
+ "discard": "放弃",
2535
+ "save": "保存顺序",
2536
+ "saveFailed": "无法保存新顺序",
2537
+ "emptyGroup": "此分组中没有页面。",
2538
+ "moveUp": "将 {title} 上移",
2539
+ "moveDown": "将 {title} 下移",
2540
+ "moveTo": "将 {title} 移到其他分组",
2541
+ "ungrouped": {
2542
+ "title": "有些页面不属于任何侧边栏分组",
2543
+ "body": "这些页面可以通过网址访问,但不会出现在侧边栏中。请逐个打开并选择分组。"
2544
+ }
2545
+ },
2546
+ "columns": {
2547
+ "help": "重新排序列、重命名列标题,并选择哪些列显示在表格中。",
2548
+ "discard": "放弃",
2549
+ "save": "保存列",
2550
+ "saveFailed": "无法保存列",
2551
+ "pk": "主键",
2552
+ "pii": "个人信息",
2553
+ "header": "{name} 的列标题",
2554
+ "shown": "显示",
2555
+ "toggle": "在表格中显示 {name}",
2556
+ "moveUp": "将 {name} 上移",
2557
+ "moveDown": "将 {name} 下移",
2558
+ "remove": "移除 {name}",
2559
+ "none": {
2560
+ "title": "此页面还没有列",
2561
+ "body": "生成页面时会从数据表读取列。请将此页面绑定到数据表后重新生成。"
2562
+ }
2563
+ },
2564
+ "icon": {
2565
+ "none": "选择图标",
2566
+ "search": "搜索图标",
2567
+ "noMatches": "没有图标符合该搜索。"
2568
+ },
2569
+ "preview": {
2570
+ "untitled": "未命名页面",
2571
+ "note": "这是版式示意图,不是你的数据。保存后真实页面才会填充内容。"
2572
+ },
2573
+ "padding": {
2574
+ "default": "此模板的默认值",
2575
+ "none": "无",
2576
+ "standard": "标准 (28 × 24)",
2577
+ "custom": "自定义…",
2578
+ "x": "左右 (px)",
2579
+ "y": "上下 (px)"
2580
+ }
2581
+ },
2582
+ "audit": {
2583
+ "action": {
2584
+ "view": "查看"
2585
+ },
2586
+ "actor": {
2587
+ "apiKey": "API 密钥",
2588
+ "automation": "自动化",
2589
+ "system": "系统",
2590
+ "user": "用户"
2591
+ },
2592
+ "category": {
2593
+ "auth": "登录与账户",
2594
+ "automation": "自动化",
2595
+ "connection": "连接",
2596
+ "data": "记录",
2597
+ "export": "导入与导出",
2598
+ "llm": "AI 辅助",
2599
+ "rbac": "角色与权限",
2600
+ "schema": "架构",
2601
+ "settings": "设置",
2602
+ "system": "系统"
2603
+ },
2604
+ "column": {
2605
+ "action": "操作",
2606
+ "actor": "操作者",
2607
+ "category": "类别",
2608
+ "details": "详情",
2609
+ "when": "时间"
2610
+ },
2611
+ "drawer": {
2612
+ "actorId": "操作者 ID",
2613
+ "actorKind": "操作者类型",
2614
+ "after": "变更后",
2615
+ "before": "变更前",
2616
+ "category": "类别",
2617
+ "changes": "更改",
2618
+ "connection": "连接",
2619
+ "field": "字段",
2620
+ "ip": "IP 地址",
2621
+ "noChanges": "此操作未记录变更前后的快照。",
2622
+ "none": "无",
2623
+ "requestId": "请求 ID",
2624
+ "resource": "资源",
2625
+ "subtitle": "{actor} · {when}",
2626
+ "truncated": "已在 16 KB 处截断",
2627
+ "userAgent": "用户代理"
2628
+ },
2629
+ "empty": {
2630
+ "body": "对数据、架构、设置和权限的更改,会在发生时记录到这里。",
2631
+ "filtered": {
2632
+ "body": "请扩大日期范围,或清除类别筛选。",
2633
+ "title": "没有符合这些筛选条件的记录"
2634
+ },
2635
+ "title": "还没有记录任何日志"
2636
+ },
2637
+ "filterActor": "操作者 ID",
2638
+ "filterCategoryAny": "任意类别",
2639
+ "filterCategory": "按类别筛选",
2640
+ "filterFrom": "起始",
2641
+ "filterTo": "截止",
2642
+ "listFailed": {
2643
+ "title": "无法加载审计日志"
2644
+ },
2645
+ "loadMore": "加载更早的记录",
2646
+ "subtitle": "此工作区中的每一项更改、由谁做出,以及改动了什么。",
2647
+ "title": "审计日志"
2648
+ },
2649
+ "roles": {
2650
+ "action": {
2651
+ "delete": "删除",
2652
+ "rename": "重命名"
2653
+ },
2654
+ "builtinLocked": "内置角色无法删除。",
2655
+ "category": {
2656
+ "access": "访问",
2657
+ "data": "数据",
2658
+ "operations": "运维",
2659
+ "workspace": "工作区"
2660
+ },
2661
+ "column": {
2662
+ "actions": "操作",
2663
+ "members": "成员",
2664
+ "name": "角色"
2665
+ },
2666
+ "create": {
2667
+ "descriptionLabel": "描述",
2668
+ "description": "新建的角色最初不具备任何权限。",
2669
+ "failed": "无法创建该角色",
2670
+ "namePlaceholder": "例如:客服专员",
2671
+ "name": "名称",
2672
+ "submit": "创建角色",
2673
+ "title": "新建角色"
2674
+ },
2675
+ "createButton": "新建角色",
2676
+ "delete": {
2677
+ "confirm": "删除角色",
2678
+ "description": "该角色及其权限记录都会被删除。",
2679
+ "failed": "无法删除该角色",
2680
+ "hasMembers": "“{name}”仍有 {count, plural, other {# 位成员}}。请选择他们迁移到的角色——Adminium 不会让任何账户处于没有角色的状态。",
2681
+ "noMembers": "没有人拥有“{name}”,因此不需要迁移任何人。",
2682
+ "reassignPlaceholder": "选择一个角色…",
2683
+ "reassignTo": "将成员迁移到",
2684
+ "title": "删除角色"
2685
+ },
2686
+ "list": {
2687
+ "title": "角色"
2688
+ },
2689
+ "loadFailed": {
2690
+ "body": "下方的矩阵并不完整,此时保存会清除那些只是没有加载出来的权限。请先重新加载,再进行更改。",
2691
+ "title": "部分权限无法读取"
2692
+ },
2693
+ "matrix": {
2694
+ "discard": "放弃",
2695
+ "empty": {
2696
+ "body": "此实例报告说完全没有可授予的权限,这不应该发生——请重新加载;若问题依旧,请查看服务器日志。",
2697
+ "title": "没有可显示的权限"
2698
+ },
2699
+ "label": "角色权限",
2700
+ "noChanges": "没有待保存的更改",
2701
+ "pending": "{count, plural, other {# 项待保存的更改}}",
2702
+ "rowHeader": "权限",
2703
+ "title": "权限"
2704
+ },
2705
+ "memberCount": "{count, plural, other {# 位用户}}",
2706
+ "permission": {
2707
+ "apiKeysManage": "管理 API 密钥",
2708
+ "auditRead": "查看审计日志",
2709
+ "connectionsManage": "管理数据库连接",
2710
+ "exportsManage": "管理所有人的导出",
2711
+ "importsManage": "管理所有人的导入",
2712
+ "jobsManage": "启动和取消后台任务",
2713
+ "jobsRead": "查看所有后台任务",
2714
+ "llmRun": "运行 AI 辅助",
2715
+ "pagesManage": "创建和整理页面",
2716
+ "reportsManage": "管理定时报告",
2717
+ "rolesManage": "管理角色和权限",
2718
+ "schemaRemap": "编辑架构标签和覆盖",
2719
+ "settingsManage": "管理工作区设置",
2720
+ "usersManage": "管理用户"
2721
+ },
2722
+ "rename": {
2723
+ "failed": "无法重命名该角色",
2724
+ "title": "重命名角色"
2725
+ },
2726
+ "saveFailed": {
2727
+ "title": "无法保存全部角色"
2728
+ },
2729
+ "subtitle": "每个角色可以做什么。用户会获得其所持有的全部角色的权限并集。",
2730
+ "title": "角色与权限"
2731
+ },
2732
+ "security": {
2733
+ "password": {
2734
+ "changedBody": "下次登录时请使用新密码。其他设备上的会话不受影响——如果希望它们退出登录,请在下方结束这些会话。",
2735
+ "changed": "密码已更改",
2736
+ "confirm": "确认新密码",
2737
+ "current": "当前密码",
2738
+ "failed": "无法更改你的密码",
2739
+ "helper": "至少 8 个字符。",
2740
+ "mismatch": "两次输入的密码不一致。",
2741
+ "new": "新密码",
2742
+ "submit": "更改密码",
2743
+ "title": "密码"
2744
+ },
2745
+ "sessions": {
2746
+ "expires": "{at} 过期",
2747
+ "failedBody": "这个列表是唯一能显示你的账户在哪些地方登录的地方,因此列表为空时应当视为情况未知,而不是没有任何登录。",
2748
+ "failed": "无法读取你的会话",
2749
+ "ip": "IP {ip}",
2750
+ "loading": "正在查找其他已登录的设备…",
2751
+ "noIp": "未记录 IP",
2752
+ "revokeBody": "该会话会立即结束,正在使用它的人必须重新登录。",
2753
+ "revokeFailed": "无法让该设备退出登录",
2754
+ "revokeTitle": "让此设备退出登录",
2755
+ "revoke": "退出登录",
2756
+ "seenUnknown": "最后活动:未知",
2757
+ "seen": "最后活动于 {since}",
2758
+ "thisDevice": "此设备",
2759
+ "title": "已登录的设备",
2760
+ "unknownDevice": "无法识别的设备"
2761
+ },
2762
+ "subtitle": "你的密码、你的双重验证,以及你已登录的每一处。",
2763
+ "title": "安全",
2764
+ "twoFactor": {
2765
+ "activateFailed": "该验证码未被接受",
2766
+ "activate": "开启双重验证",
2767
+ "body": "验证器应用会生成一个 6 位数字验证码,Adminium 会在你输入密码之后要求提供它。",
2768
+ "code": "验证器应用中的验证码",
2769
+ "copyKey": "复制设置密钥",
2770
+ "copyLink": "复制设置链接",
2771
+ "disableBody": "你的账户将恢复为仅使用密码,你的恢复代码也会失效。",
2772
+ "disableConfirm": "关闭",
2773
+ "disableFailed": "无法关闭双重验证",
2774
+ "disablePassword": "你的密码",
2775
+ "disableTitle": "关闭双重验证",
2776
+ "disable": "关闭双重验证",
2777
+ "enrollFailed": "无法开始设置",
2778
+ "enroll": "设置双重验证",
2779
+ "hide": "隐藏设置密钥",
2780
+ "off": "未启用",
2781
+ "on": "已启用",
2782
+ "recovery": {
2783
+ "body": "如果你丢失了验证器,每个恢复代码可以让你登录一次。它们只在此刻显示这一次。",
2784
+ "copy": "复制恢复代码",
2785
+ "title": "保存你的恢复代码"
2786
+ },
2787
+ "reveal": "显示设置密钥",
2788
+ "secretHelper": "把设置链接粘贴到你的验证器应用中,或者手动输入密钥。",
2789
+ "secret": "设置密钥",
2790
+ "title": "双重验证"
2791
+ }
2792
+ },
2793
+ "team": {
2794
+ "action": {
2795
+ "reactivate": "恢复",
2796
+ "remove": "删除",
2797
+ "resend": "新链接",
2798
+ "roles": "角色",
2799
+ "suspend": "暂停"
2800
+ },
2801
+ "column": {
2802
+ "actions": "操作",
2803
+ "lastSeen": "最后活动",
2804
+ "person": "人员",
2805
+ "roles": "角色",
2806
+ "status": "状态"
2807
+ },
2808
+ "counts": "活跃 {active} · 已邀请 {invited} · 已暂停 {suspended}",
2809
+ "empty": {
2810
+ "body": "邀请一位同事,让他拥有自己的登录账户和角色。",
2811
+ "filtered": {
2812
+ "body": "清除筛选条件即可查看完整名单。",
2813
+ "title": "没有符合这些筛选条件的人"
2814
+ },
2815
+ "title": "目前只有你拥有账户"
2816
+ },
2817
+ "filterRoleAny": "任意角色",
2818
+ "filterRole": "按角色筛选",
2819
+ "filterStatusAny": "任意状态",
2820
+ "filterStatus": "按状态筛选",
2821
+ "invite": {
2822
+ "copied": "已复制",
2823
+ "copyLink": "复制链接",
2824
+ "created": {
2825
+ "body": "请你自己把这个链接发送给 {email}。它只显示这一次——Adminium 只保存它的哈希值,所以一旦丢失,你就必须删除这条邀请并重新签发一条新的。",
2826
+ "title": "邀请已创建"
2827
+ },
2828
+ "emailIt": "通过邮件发送邀请",
2829
+ "expiresRelative": "该链接将于 {at}({relative})过期。",
2830
+ "expires": "该链接将于 {at} 过期。",
2831
+ "noEmail": {
2832
+ "smtp": "此实例未配置 SMTP 服务器,因此没有任何可用于发送邮件的途径。请通过你已经信任的渠道分享该链接。",
2833
+ "title": "Adminium 没有通过邮件发送这个链接",
2834
+ "unknown": "Adminium 无法确认此实例是否能够发送邮件。请通过你已经信任的渠道分享该链接。"
2835
+ }
2836
+ },
2837
+ "inviteButton": "邀请同事",
2838
+ "inviteDialog": {
2839
+ "description": "Adminium 会创建账户,并给你一个一次性的激活链接,由你转交给对方。",
2840
+ "emailPlaceholder": "name@example.com",
2841
+ "email": "邮箱",
2842
+ "failed": "无法创建邀请",
2843
+ "namePlaceholder": "例如:李明",
2844
+ "name": "姓名",
2845
+ "rolesHelper": "请选择能让他完成本职工作的最小权限角色。之后可以随时更改。",
2846
+ "roles": "角色",
2847
+ "submit": "创建邀请",
2848
+ "title": "邀请同事"
2849
+ },
2850
+ "listFailed": {
2851
+ "title": "无法加载成员名单"
2852
+ },
2853
+ "loadMore": "加载更多",
2854
+ "neverSignedIn": "从未登录",
2855
+ "noRoles": "没有角色",
2856
+ "remove": {
2857
+ "body": "此操作会抹除 {name} 的账户、他们的偏好设置和登录会话,并从他们更改过的设置记录中清空其姓名。改为暂停则会保留所有这些内容,只是不再允许他们登录。此操作无法撤销。",
2858
+ "confirm": "永久删除",
2859
+ "prompt": "输入“{email}”以确认",
2860
+ "title": "永久删除账户"
2861
+ },
2862
+ "roles": {
2863
+ "unavailable": "你的账户无法查看角色,因此这里无法分配任何角色。"
2864
+ },
2865
+ "rolesDialog": {
2866
+ "description": "用户会获得其所持有的全部角色的权限并集。",
2867
+ "failed": "无法更改角色",
2868
+ "title": "{name} 的角色"
2869
+ },
2870
+ "rolesLocked": "更改角色需要“管理角色”权限。",
2871
+ "search": "搜索姓名或邮箱",
2872
+ "status": {
2873
+ "active": "活跃",
2874
+ "invited": "已邀请",
2875
+ "suspended": "已暂停"
2876
+ },
2877
+ "subtitle": "谁在这份 Adminium 上拥有账户,以及他们各自可以做什么。",
2878
+ "title": "团队",
2879
+ "twoFactorOn": "已开启双重验证",
2880
+ "twoFactorShort": "2FA"
2881
+ },
2882
+ "email": {
2883
+ "linkFallback": "如果按钮无法使用,请把这个链接粘贴到浏览器中:{url}",
2884
+ "notification": {
2885
+ "action": "打开 {appName}",
2886
+ "footer": "你收到这封邮件,是因为你的 {appName} 账户开启了邮件通知。你可以在通知设置中将其关闭。",
2887
+ "name": "通知"
2888
+ },
2889
+ "passwordReset": {
2890
+ "action": "设置新密码",
2891
+ "heading": "重置密码",
2892
+ "intro": "{name} 你好,我们收到了为 {email} 重置密码的请求。",
2893
+ "name": "密码重置",
2894
+ "notice": "此链接只能使用一次,并将在 {expiresInMinutes} 分钟后失效。如果你没有申请重置密码,可以忽略这封邮件——你当前的密码将继续有效。",
2895
+ "subject": "重置你的 {appName} 密码"
2896
+ },
2897
+ "userInvite": {
2898
+ "action": "接受邀请",
2899
+ "heading": "你收到了一份邀请",
2900
+ "intro": "{inviterName}邀请你加入 {appName}。接受邀请,为 {email} 设置密码并登录。",
2901
+ "name": "团队邀请",
2902
+ "notice": "此邀请只能使用一次,并将在 {expiresInDays} 天后失效。如果你并未预期会收到它,可以忽略这封邮件。",
2903
+ "subject": "你受邀加入 {appName}",
2904
+ "inviterFallback": "管理员"
2905
+ }
2053
2906
  }
2054
2907
  }