@adminiumjs/i18n 0.2.2-rc.0 → 0.2.3

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 (229) 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 +481 -172
  4. package/dist/a11y-keys.js.map +1 -1
  5. package/dist/create-i18n.d.ts +16 -6
  6. package/dist/create-i18n.d.ts.map +1 -1
  7. package/dist/create-i18n.js +23 -9
  8. package/dist/create-i18n.js.map +1 -1
  9. package/dist/editing.d.ts +1 -1
  10. package/dist/editing.js +1 -1
  11. package/dist/index.d.ts +2 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +19 -8
  14. package/dist/index.js.map +1 -1
  15. package/dist/keys.d.ts +6 -4
  16. package/dist/keys.d.ts.map +1 -1
  17. package/dist/keys.js +6 -4
  18. package/dist/keys.js.map +1 -1
  19. package/dist/overrides.d.ts +1 -1
  20. package/dist/overrides.d.ts.map +1 -1
  21. package/dist/resources/ar-eg/common.d.ts +96 -970
  22. package/dist/resources/ar-eg/common.d.ts.map +1 -1
  23. package/dist/resources/ar-eg/common.js +99 -973
  24. package/dist/resources/ar-eg/common.js.map +1 -1
  25. package/dist/resources/ar-eg/errors.d.ts +3 -2
  26. package/dist/resources/ar-eg/errors.d.ts.map +1 -1
  27. package/dist/resources/ar-eg/errors.js +3 -2
  28. package/dist/resources/ar-eg/errors.js.map +1 -1
  29. package/dist/resources/ar-eg/generated.d.ts +3 -2
  30. package/dist/resources/ar-eg/generated.d.ts.map +1 -1
  31. package/dist/resources/ar-eg/generated.js +3 -2
  32. package/dist/resources/ar-eg/generated.js.map +1 -1
  33. package/dist/resources/ar-eg/studio.d.ts +1282 -2
  34. package/dist/resources/ar-eg/studio.d.ts.map +1 -1
  35. package/dist/resources/ar-eg/studio.js +1282 -2
  36. package/dist/resources/ar-eg/studio.js.map +1 -1
  37. package/dist/resources/ar-eg/ui.d.ts +60 -2
  38. package/dist/resources/ar-eg/ui.d.ts.map +1 -1
  39. package/dist/resources/ar-eg/ui.js +72 -14
  40. package/dist/resources/ar-eg/ui.js.map +1 -1
  41. package/dist/resources/cs-cz/common.d.ts +96 -970
  42. package/dist/resources/cs-cz/common.d.ts.map +1 -1
  43. package/dist/resources/cs-cz/common.js +99 -973
  44. package/dist/resources/cs-cz/common.js.map +1 -1
  45. package/dist/resources/cs-cz/errors.d.ts +3 -2
  46. package/dist/resources/cs-cz/errors.d.ts.map +1 -1
  47. package/dist/resources/cs-cz/errors.js +3 -2
  48. package/dist/resources/cs-cz/errors.js.map +1 -1
  49. package/dist/resources/cs-cz/generated.d.ts +3 -2
  50. package/dist/resources/cs-cz/generated.d.ts.map +1 -1
  51. package/dist/resources/cs-cz/generated.js +3 -2
  52. package/dist/resources/cs-cz/generated.js.map +1 -1
  53. package/dist/resources/cs-cz/studio.d.ts +1282 -2
  54. package/dist/resources/cs-cz/studio.d.ts.map +1 -1
  55. package/dist/resources/cs-cz/studio.js +1282 -2
  56. package/dist/resources/cs-cz/studio.js.map +1 -1
  57. package/dist/resources/cs-cz/ui.d.ts +60 -2
  58. package/dist/resources/cs-cz/ui.d.ts.map +1 -1
  59. package/dist/resources/cs-cz/ui.js +72 -14
  60. package/dist/resources/cs-cz/ui.js.map +1 -1
  61. package/dist/resources/da-dk/common.d.ts +96 -970
  62. package/dist/resources/da-dk/common.d.ts.map +1 -1
  63. package/dist/resources/da-dk/common.js +99 -973
  64. package/dist/resources/da-dk/common.js.map +1 -1
  65. package/dist/resources/da-dk/errors.d.ts +3 -2
  66. package/dist/resources/da-dk/errors.d.ts.map +1 -1
  67. package/dist/resources/da-dk/errors.js +3 -2
  68. package/dist/resources/da-dk/errors.js.map +1 -1
  69. package/dist/resources/da-dk/generated.d.ts +3 -2
  70. package/dist/resources/da-dk/generated.d.ts.map +1 -1
  71. package/dist/resources/da-dk/generated.js +3 -2
  72. package/dist/resources/da-dk/generated.js.map +1 -1
  73. package/dist/resources/da-dk/studio.d.ts +1282 -2
  74. package/dist/resources/da-dk/studio.d.ts.map +1 -1
  75. package/dist/resources/da-dk/studio.js +1282 -2
  76. package/dist/resources/da-dk/studio.js.map +1 -1
  77. package/dist/resources/da-dk/ui.d.ts +60 -2
  78. package/dist/resources/da-dk/ui.d.ts.map +1 -1
  79. package/dist/resources/da-dk/ui.js +72 -14
  80. package/dist/resources/da-dk/ui.js.map +1 -1
  81. package/dist/resources/de-de/common.d.ts +96 -970
  82. package/dist/resources/de-de/common.d.ts.map +1 -1
  83. package/dist/resources/de-de/common.js +99 -973
  84. package/dist/resources/de-de/common.js.map +1 -1
  85. package/dist/resources/de-de/errors.d.ts +3 -2
  86. package/dist/resources/de-de/errors.d.ts.map +1 -1
  87. package/dist/resources/de-de/errors.js +3 -2
  88. package/dist/resources/de-de/errors.js.map +1 -1
  89. package/dist/resources/de-de/generated.d.ts +3 -2
  90. package/dist/resources/de-de/generated.d.ts.map +1 -1
  91. package/dist/resources/de-de/generated.js +3 -2
  92. package/dist/resources/de-de/generated.js.map +1 -1
  93. package/dist/resources/de-de/studio.d.ts +1282 -2
  94. package/dist/resources/de-de/studio.d.ts.map +1 -1
  95. package/dist/resources/de-de/studio.js +1282 -2
  96. package/dist/resources/de-de/studio.js.map +1 -1
  97. package/dist/resources/de-de/ui.d.ts +60 -2
  98. package/dist/resources/de-de/ui.d.ts.map +1 -1
  99. package/dist/resources/de-de/ui.js +72 -14
  100. package/dist/resources/de-de/ui.js.map +1 -1
  101. package/dist/resources/eager.d.ts +3 -0
  102. package/dist/resources/eager.d.ts.map +1 -0
  103. package/dist/resources/eager.js +25 -0
  104. package/dist/resources/eager.js.map +1 -0
  105. package/dist/resources/en-us/common.d.ts +96 -970
  106. package/dist/resources/en-us/common.d.ts.map +1 -1
  107. package/dist/resources/en-us/common.js +99 -973
  108. package/dist/resources/en-us/common.js.map +1 -1
  109. package/dist/resources/en-us/errors.d.ts +3 -2
  110. package/dist/resources/en-us/errors.d.ts.map +1 -1
  111. package/dist/resources/en-us/errors.js +3 -2
  112. package/dist/resources/en-us/errors.js.map +1 -1
  113. package/dist/resources/en-us/generated.d.ts +3 -2
  114. package/dist/resources/en-us/generated.d.ts.map +1 -1
  115. package/dist/resources/en-us/generated.js +3 -2
  116. package/dist/resources/en-us/generated.js.map +1 -1
  117. package/dist/resources/en-us/studio.d.ts +1282 -2
  118. package/dist/resources/en-us/studio.d.ts.map +1 -1
  119. package/dist/resources/en-us/studio.js +1282 -2
  120. package/dist/resources/en-us/studio.js.map +1 -1
  121. package/dist/resources/en-us/ui.d.ts +60 -2
  122. package/dist/resources/en-us/ui.d.ts.map +1 -1
  123. package/dist/resources/en-us/ui.js +72 -14
  124. package/dist/resources/en-us/ui.js.map +1 -1
  125. package/dist/resources/fr-fr/common.d.ts +96 -970
  126. package/dist/resources/fr-fr/common.d.ts.map +1 -1
  127. package/dist/resources/fr-fr/common.js +99 -973
  128. package/dist/resources/fr-fr/common.js.map +1 -1
  129. package/dist/resources/fr-fr/errors.d.ts +3 -2
  130. package/dist/resources/fr-fr/errors.d.ts.map +1 -1
  131. package/dist/resources/fr-fr/errors.js +3 -2
  132. package/dist/resources/fr-fr/errors.js.map +1 -1
  133. package/dist/resources/fr-fr/generated.d.ts +3 -2
  134. package/dist/resources/fr-fr/generated.d.ts.map +1 -1
  135. package/dist/resources/fr-fr/generated.js +3 -2
  136. package/dist/resources/fr-fr/generated.js.map +1 -1
  137. package/dist/resources/fr-fr/studio.d.ts +1282 -2
  138. package/dist/resources/fr-fr/studio.d.ts.map +1 -1
  139. package/dist/resources/fr-fr/studio.js +1282 -2
  140. package/dist/resources/fr-fr/studio.js.map +1 -1
  141. package/dist/resources/fr-fr/ui.d.ts +60 -2
  142. package/dist/resources/fr-fr/ui.d.ts.map +1 -1
  143. package/dist/resources/fr-fr/ui.js +72 -14
  144. package/dist/resources/fr-fr/ui.js.map +1 -1
  145. package/dist/resources/index.d.ts +3 -6
  146. package/dist/resources/index.d.ts.map +1 -1
  147. package/dist/resources/index.js +15 -14
  148. package/dist/resources/index.js.map +1 -1
  149. package/dist/resources/lazy.d.ts +19 -9
  150. package/dist/resources/lazy.d.ts.map +1 -1
  151. package/dist/resources/lazy.js +4 -2
  152. package/dist/resources/lazy.js.map +1 -1
  153. package/dist/resources/namespaces.d.ts +43 -0
  154. package/dist/resources/namespaces.d.ts.map +1 -0
  155. package/dist/resources/namespaces.js +37 -0
  156. package/dist/resources/namespaces.js.map +1 -0
  157. package/dist/resources/zh-cn/common.d.ts +96 -970
  158. package/dist/resources/zh-cn/common.d.ts.map +1 -1
  159. package/dist/resources/zh-cn/common.js +99 -973
  160. package/dist/resources/zh-cn/common.js.map +1 -1
  161. package/dist/resources/zh-cn/errors.d.ts +3 -2
  162. package/dist/resources/zh-cn/errors.d.ts.map +1 -1
  163. package/dist/resources/zh-cn/errors.js +3 -2
  164. package/dist/resources/zh-cn/errors.js.map +1 -1
  165. package/dist/resources/zh-cn/generated.d.ts +3 -2
  166. package/dist/resources/zh-cn/generated.d.ts.map +1 -1
  167. package/dist/resources/zh-cn/generated.js +3 -2
  168. package/dist/resources/zh-cn/generated.js.map +1 -1
  169. package/dist/resources/zh-cn/studio.d.ts +1282 -2
  170. package/dist/resources/zh-cn/studio.d.ts.map +1 -1
  171. package/dist/resources/zh-cn/studio.js +1282 -2
  172. package/dist/resources/zh-cn/studio.js.map +1 -1
  173. package/dist/resources/zh-cn/ui.d.ts +60 -2
  174. package/dist/resources/zh-cn/ui.d.ts.map +1 -1
  175. package/dist/resources/zh-cn/ui.js +72 -14
  176. package/dist/resources/zh-cn/ui.js.map +1 -1
  177. package/dist/resources/zh-tw/common.d.ts +96 -970
  178. package/dist/resources/zh-tw/common.d.ts.map +1 -1
  179. package/dist/resources/zh-tw/common.js +99 -973
  180. package/dist/resources/zh-tw/common.js.map +1 -1
  181. package/dist/resources/zh-tw/errors.d.ts +3 -2
  182. package/dist/resources/zh-tw/errors.d.ts.map +1 -1
  183. package/dist/resources/zh-tw/errors.js +3 -2
  184. package/dist/resources/zh-tw/errors.js.map +1 -1
  185. package/dist/resources/zh-tw/generated.d.ts +3 -2
  186. package/dist/resources/zh-tw/generated.d.ts.map +1 -1
  187. package/dist/resources/zh-tw/generated.js +3 -2
  188. package/dist/resources/zh-tw/generated.js.map +1 -1
  189. package/dist/resources/zh-tw/studio.d.ts +1282 -2
  190. package/dist/resources/zh-tw/studio.d.ts.map +1 -1
  191. package/dist/resources/zh-tw/studio.js +1282 -2
  192. package/dist/resources/zh-tw/studio.js.map +1 -1
  193. package/dist/resources/zh-tw/ui.d.ts +60 -2
  194. package/dist/resources/zh-tw/ui.d.ts.map +1 -1
  195. package/dist/resources/zh-tw/ui.js +72 -14
  196. package/dist/resources/zh-tw/ui.js.map +1 -1
  197. package/dist/review-status.js +7 -7
  198. package/locales/ar-EG/.meta.json +3783 -2339
  199. package/locales/ar-EG/common.json +96 -971
  200. package/locales/ar-EG/studio.json +1279 -0
  201. package/locales/ar-EG/ui.json +69 -12
  202. package/locales/cs-CZ/.meta.json +3849 -2405
  203. package/locales/cs-CZ/common.json +96 -971
  204. package/locales/cs-CZ/studio.json +1279 -0
  205. package/locales/cs-CZ/ui.json +69 -12
  206. package/locales/da-DK/.meta.json +3935 -2491
  207. package/locales/da-DK/common.json +96 -971
  208. package/locales/da-DK/studio.json +1279 -0
  209. package/locales/da-DK/ui.json +69 -12
  210. package/locales/de-DE/.meta.json +3895 -2451
  211. package/locales/de-DE/common.json +96 -971
  212. package/locales/de-DE/studio.json +1279 -0
  213. package/locales/de-DE/ui.json +69 -12
  214. package/locales/en-US/common.json +96 -971
  215. package/locales/en-US/studio.json +1279 -0
  216. package/locales/en-US/ui.json +69 -12
  217. package/locales/fr-FR/.meta.json +3964 -2520
  218. package/locales/fr-FR/common.json +96 -971
  219. package/locales/fr-FR/studio.json +1279 -0
  220. package/locales/fr-FR/ui.json +69 -12
  221. package/locales/zh-CN/.meta.json +3781 -2337
  222. package/locales/zh-CN/common.json +96 -971
  223. package/locales/zh-CN/studio.json +1279 -0
  224. package/locales/zh-CN/ui.json +69 -12
  225. package/locales/zh-TW/.meta.json +3785 -2341
  226. package/locales/zh-TW/common.json +96 -971
  227. package/locales/zh-TW/studio.json +1279 -0
  228. package/locales/zh-TW/ui.json +69 -12
  229. package/package.json +1 -1
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * GENERATED MIRROR of ../../../locales/zh-CN/studio.json — do not edit by hand.
3
3
  * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);
4
- * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits
5
- * the other locales) without JSON import attributes (browser + NodeNext safe).
4
+ * this TS mirror exists so the runtime can bundle a namespace (en-US's eager
5
+ * ones) or chunk-split it (every other locale, and en-US's deferred `studio`)
6
+ * without JSON import attributes (browser + NodeNext safe).
6
7
  * Parity is enforced by src/resources/parity.test.ts. Regenerate with
7
8
  * scripts/gen-resources.mjs.
8
9
  */
@@ -13,6 +14,1285 @@ declare const _default: {
13
14
  readonly workspaceSection: "工作区";
14
15
  readonly globalDefaultsNav: "全局默认值";
15
16
  };
17
+ readonly source: {
18
+ readonly engine: {
19
+ readonly label: "数据库引擎";
20
+ readonly postgres: "PostgreSQL";
21
+ readonly mysql: "MySQL / MariaDB";
22
+ readonly sqlite: "SQLite";
23
+ };
24
+ readonly format: {
25
+ readonly label: "架构格式";
26
+ readonly helper: "除非自动检测出错,否则保持自动检测即可。";
27
+ readonly auto: "自动检测";
28
+ readonly sql: "SQL DDL / pg_dump";
29
+ readonly prisma: "Prisma 架构";
30
+ readonly drizzle: "Drizzle ORM";
31
+ readonly typeorm: "TypeORM 实体";
32
+ readonly sequelize: "Sequelize 模型";
33
+ readonly rails: "Rails schema.rb";
34
+ readonly django: "Django models.py";
35
+ readonly json: "Adminium JSON";
36
+ };
37
+ readonly sqlite: {
38
+ readonly file: "数据库文件路径";
39
+ readonly helper: "SQLite 是文件而非服务器——请填写运行 Adminium 的机器上的绝对路径。";
40
+ };
41
+ readonly file: {
42
+ readonly detectedAs: "检测到:{format}";
43
+ readonly moreWarnings: "另有 {count} 条警告——完整列表将在分析步骤中显示。";
44
+ readonly dropTitle: "将架构文件拖放到此处,或浏览选择";
45
+ readonly dropHint: "SQL DDL / pg_dump、Prisma、Drizzle、TypeORM、Sequelize、Rails schema.rb、Django 模型、Adminium JSON";
46
+ readonly pitch: "无需数据库连接——我们解析你的架构文件并构建相同的仪表板。";
47
+ readonly parsing: "正在读取上传的架构文件…";
48
+ readonly tables: "个表";
49
+ readonly columns: "列";
50
+ readonly warnings: "警告";
51
+ readonly errorTitle: "无法解析该文件";
52
+ readonly parseFailed: "我们无法解析该文件。如果自动检测判断有误,请明确选择格式后重试。";
53
+ readonly unsupported: "无法识别该格式——支持 SQL DDL、Prisma、Drizzle、TypeORM、Sequelize、Rails schema.rb、Django 模型和 Adminium JSON。请明确选择一种后重试。";
54
+ readonly requestFailed: "上传失败——请检查网络连接后重试。";
55
+ };
56
+ readonly title: "连接你的数据库";
57
+ readonly subtitle: "将 Adminium 指向一个数据库,我们会根据其架构生成管理仪表板。";
58
+ readonly name: "连接名称";
59
+ readonly namePlaceholder: "生产环境 Postgres";
60
+ readonly modeLabel: "来源输入方式";
61
+ readonly mode: {
62
+ readonly dsn: "连接字符串";
63
+ readonly fields: "逐项填写";
64
+ readonly file: "架构文件";
65
+ };
66
+ readonly dsn: {
67
+ readonly label: "连接字符串";
68
+ readonly helper: "postgres://user:password@host:5432/database——mysql:// 和 sqlite: 也可用。";
69
+ readonly incomplete: "请补全主机和数据库,例如 postgres://user@host:5432/db";
70
+ readonly invalidScheme: "无法识别的协议——应为 postgres://、mysql://、mariadb:// 或 sqlite:";
71
+ readonly quickFill: "快速填充:";
72
+ };
73
+ readonly fields: {
74
+ readonly host: "主机";
75
+ readonly port: "端口";
76
+ readonly database: "数据库";
77
+ readonly user: "用户";
78
+ readonly password: "密码";
79
+ readonly ssl: "SSL 模式";
80
+ readonly preview: "连接字符串预览:";
81
+ };
82
+ readonly readOnlyRole: {
83
+ readonly title: "使用只读角色";
84
+ readonly body: "Adminium 绝不会写入你的数据库——设置过程仅使用架构元数据。建议使用仅有 SELECT 权限的专用用户;Adminium 自己的表放在哪里,可在元数据存储步骤中决定。";
85
+ };
86
+ };
87
+ readonly capability: {
88
+ readonly mysqlApproxRows: "MySQL 的行数来自存储引擎估算(偏差可达 ±40%),以 ≈ 显示。";
89
+ readonly mysqlFkEnum: "MySQL 的外键/枚举元数据较弱:MyISAM 表不声明外键,枚举是按列的 enum(…) 类型,CHECK 约束需要 MySQL 8.0.16+ / MariaDB 10.2+。";
90
+ readonly sqliteCheckEnums: "SQLite 没有原生枚举类型——枚举由 CHECK (col IN (…)) 约束合成。";
91
+ readonly sqliteNoComments: "SQLite 不支持列注释——请在架构重映射编辑器中添加标签。";
92
+ readonly importNoRowCounts: "架构文件不包含行数——表格列表显示 — 而不是编造的数字。";
93
+ readonly importNoLiveHealth: "没有实时数据库连接——此来源无法进行健康检查和架构漂移检测。";
94
+ readonly rowsUnavailable: "架构文件没有实时数据库——在连接数据库之前行数未知。";
95
+ readonly rowsRunAnalyze: "尚无估算——请在数据库上运行 ANALYZE 以获取行数。";
96
+ readonly rowsNoEstimate: "引擎未报告此表的行数估算。";
97
+ readonly rowsApproximate: "存储引擎估算——在 InnoDB 上偏差可达 ±40%。";
98
+ };
99
+ readonly test: {
100
+ readonly log: {
101
+ readonly moreWarnings: "另有 {count} 条解析器警告";
102
+ readonly connecting: "正在建立安全连接…";
103
+ readonly connected: "已连接({latency} 毫秒)· 只读自省";
104
+ readonly connectFailed: "连接失败。";
105
+ readonly readingSchema: "正在读取架构:public";
106
+ readonly readingFile: "正在读取上传的架构文件…";
107
+ readonly parsingFile: "正在解析 {file}…";
108
+ readonly detected: "检测到 {tables} 个表 · {columns} 列";
109
+ readonly found: "共发现 {tables} 个表 · {columns} 列";
110
+ readonly mapping: "正在映射列类型 → 输入组件";
111
+ readonly relations: "正在检测关系…";
112
+ readonly piiScan: "正在扫描 PII 列…";
113
+ readonly piiDone: "PII 扫描完成——默认屏蔽 {count} 列";
114
+ readonly piiDoneUnknown: "PII 扫描完成";
115
+ readonly jobFailed: "自省失败。";
116
+ readonly networkFailed: "请求失败——请检查网络连接后重试。";
117
+ readonly ready: "就绪";
118
+ };
119
+ readonly title: "正在分析你的架构";
120
+ readonly subtitle: "正在自省表、列和关系。这需要几秒钟。";
121
+ readonly trust: "我们只读取你的架构和数据,不会做任何修改。";
122
+ readonly errorTitle: "连接失败";
123
+ readonly retry: "重试";
124
+ readonly logLabel: "自省日志";
125
+ readonly hint: {
126
+ readonly auth: "身份验证失败——请检查 DSN 中的用户名和密码。";
127
+ readonly hostUnreachable: "主机不可达——请检查主机名和端口,并确认数据库接受来自本机的连接(将我们的 IP 加入允许列表)。";
128
+ readonly metaPlacement: "该数据源无法承载 Adminium 的元数据表——请改用单独的元数据库继续。";
129
+ readonly permission: "该角色已连接,但缺少读取架构的权限——请为自省角色授予该架构的 USAGE 权限。";
130
+ readonly timeout: "数据库未及时响应——请检查网络路径和负载后重试。";
131
+ readonly tls: "TLS 协商失败——请尝试 sslmode=require,或上传服务器所需的 CA 证书。";
132
+ readonly unknown: "连接失败——请核对 DSN 后重试。";
133
+ };
134
+ };
135
+ readonly tables: {
136
+ readonly importNoCounts: "架构文件不包含行数——在连接实时数据库之前,该列显示 —。";
137
+ readonly title: "选择数据表";
138
+ readonly subtitle: "选择要包含的表。之后可随时更改。";
139
+ readonly search: "筛选表…";
140
+ readonly listLabel: "可包含的表";
141
+ readonly emptyFilter: "没有匹配筛选条件的表。";
142
+ readonly pii: "PII";
143
+ readonly highVolume: "高数据量";
144
+ readonly highVolumeNote: "超过 100,000 行的表默认不勾选——运维类表很少适合放进仪表板。";
145
+ readonly joinHidden: "{count} 个关联/系统表已预先隐藏——它们仍支撑多对多关系。";
146
+ };
147
+ readonly hub: {
148
+ readonly title: "数据连接";
149
+ readonly subtitle: "{total, plural, other {# 个连接中 {healthy, number} 个}}状态正常";
150
+ readonly connectNew: "新建连接";
151
+ readonly stats: {
152
+ readonly connections: "连接";
153
+ readonly healthy: "正常";
154
+ readonly tables: "已包含的表";
155
+ readonly pages: "已生成的页面";
156
+ };
157
+ readonly status: {
158
+ readonly connected: "已连接";
159
+ readonly error: "错误";
160
+ readonly unconfigured: "草稿";
161
+ readonly testing: "测试中…";
162
+ readonly paused: "已暂停";
163
+ };
164
+ readonly card: {
165
+ readonly readOnly: "只读";
166
+ readonly tables: "表";
167
+ readonly pages: "页面";
168
+ readonly latency: "延迟";
169
+ readonly latencyMs: "{latency, number} 毫秒";
170
+ readonly lastIntrospected: "上次内省";
171
+ readonly never: "从未";
172
+ readonly timezone: "时区";
173
+ readonly timezoneGuessed: "来自此服务器";
174
+ readonly paused: "Adminium 不会连接此数据库。恢复后,其页面会重新加载数据。";
175
+ readonly pausedSince: "已于{when}暂停 — Adminium 不会连接此数据库。恢复后,其页面会重新加载数据。";
176
+ };
177
+ readonly action: {
178
+ readonly test: "测试";
179
+ readonly reintrospect: "重新内省";
180
+ readonly reintrospectFile: "架构文件来源没有在线数据库——请改为重新上传文件。";
181
+ readonly remap: "重映射架构";
182
+ readonly delete: "删除";
183
+ readonly regional: "区域设置";
184
+ readonly pause: "暂停";
185
+ readonly resume: "恢复";
186
+ readonly pausedHint: "此连接已暂停 — 恢复后才能访问数据库。";
187
+ readonly rename: "重命名";
188
+ };
189
+ readonly regional: {
190
+ readonly title: "区域设置";
191
+ readonly intro: "这些设置描述该数据库所属的业务,而非阅读者本人。由 Adminium 提供服务的应用会从这里读取。";
192
+ readonly timezone: "时区";
193
+ readonly timezoneHelper: "日期和时间以此时区显示。若未设置,由 Adminium 托管的应用将回退到 UTC,并在界面上说明。";
194
+ readonly guessedTitle: "此时区来自服务器";
195
+ readonly guessedBody: "Adminium 从其运行的机器上取得该时区,并非有人在此选择。保存即可确认,或选择该商家实际所在的时区。";
196
+ readonly timezonePlaceholder: "地区/城市";
197
+ readonly currency: "货币";
198
+ readonly currencyHelper: "用于格式化金额。可选——不设置仅影响格式。";
199
+ readonly currencyPlaceholder: "ISO-4217 代码";
200
+ readonly notSet: "未设置";
201
+ readonly noMatch: "没有匹配的时区";
202
+ readonly noMatchCurrency: "没有匹配的货币";
203
+ readonly save: "保存";
204
+ readonly failed: "无法保存区域设置";
205
+ readonly saved: "区域设置已更新";
206
+ };
207
+ readonly test: {
208
+ readonly ok: "连接正常 · {latency, number} 毫秒";
209
+ readonly failed: "连接测试失败";
210
+ };
211
+ readonly introspect: {
212
+ readonly noChanges: "架构无变化——未创建新快照。";
213
+ readonly updated: "已重新内省架构";
214
+ readonly masksProposed: "{count, plural, other {建议对 # 列进行脱敏}}——请在重映射编辑器中查看。";
215
+ readonly failed: "内省失败,请重试。";
216
+ };
217
+ readonly delete: {
218
+ readonly title: "删除连接";
219
+ readonly body: "此操作将删除“{name}”及其生成的页面。您的数据库本身不会被改动。";
220
+ readonly prompt: "输入 {name} 以确认";
221
+ readonly confirm: "删除连接";
222
+ readonly cancel: "取消";
223
+ readonly close: "关闭";
224
+ readonly success: "连接“{name}”已删除";
225
+ readonly failed: "无法删除连接,请重试。";
226
+ };
227
+ readonly empty: {
228
+ readonly title: "还没有数据源";
229
+ readonly body: "连接数据库后,Adminium 会根据其架构生成您的管理面板。";
230
+ readonly cta: "连接数据库";
231
+ };
232
+ readonly hostedApps: "托管应用";
233
+ readonly subtitlePaused: "{total, plural, other {# 个连接中 {healthy, number} 个}}状态正常 · {paused, number} 个已暂停";
234
+ readonly pause: {
235
+ readonly title: "暂停此连接?";
236
+ readonly body: "Adminium 将不再打开到“{name}”的任何连接。在你恢复之前,{pages, plural, other {它的 # 个页面}}、计划报告和托管应用都会停止加载数据。";
237
+ readonly keeps: "不会删除任何内容 — 连接、它的结构和{pages, plural, other {它的 # 个页面}}都会保留,一键即可恢复。";
238
+ readonly confirm: "暂停连接";
239
+ readonly pausedToast: "已暂停连接“{name}”";
240
+ readonly resumedToast: "已恢复连接“{name}”";
241
+ readonly pauseFailed: "无法暂停该连接。请重试。";
242
+ readonly resumeFailed: "无法恢复该连接。请重试。";
243
+ };
244
+ readonly rename: {
245
+ readonly title: "重命名连接";
246
+ readonly label: "名称";
247
+ readonly helper: "该数据库在整个 Adminium 中的显示名称——卡片、其页面上方的侧边栏分组,以及每个提供它的选择器。数据库本身不会被重命名。";
248
+ readonly save: "重命名";
249
+ readonly saved: "连接已重命名";
250
+ readonly failed: "无法重命名该连接";
251
+ };
252
+ };
253
+ readonly settingsHub: {
254
+ readonly title: "工作区设置";
255
+ readonly subtitle: "此工作区的标识、安全与危险操作。";
256
+ readonly save: "保存更改";
257
+ readonly saved: "工作区设置已更新";
258
+ readonly saveFailed: "无法保存工作区设置,请重试。";
259
+ readonly superAdminOnlyTitle: "需要超级管理员";
260
+ readonly superAdminOnly: "只有超级管理员才能更改工作区标识和安全设置。";
261
+ readonly identity: {
262
+ readonly heading: "工作区标识";
263
+ readonly appName: {
264
+ readonly label: "应用名称";
265
+ readonly helper: "显示在侧边栏、浏览器标题和邮件中。";
266
+ readonly error: "请输入不超过 60 个字符的名称。";
267
+ };
268
+ readonly logo: {
269
+ readonly label: "标志";
270
+ readonly drop: "将图片拖放到此处";
271
+ readonly helper: "支持 PNG、JPEG、WebP、GIF 或 SVG,最大 1 MB。将在所有位置替换内置标志。";
272
+ readonly upload: "上传标志";
273
+ readonly replace: "更换标志";
274
+ readonly remove: "移除";
275
+ readonly uploaded: "标志已更新";
276
+ readonly removed: "标志已移除";
277
+ readonly tooLarge: "该图片大于 1 MB。";
278
+ readonly badType: "请选择 PNG、JPEG、WebP、GIF 或 SVG 图片。";
279
+ readonly undo: "撤销";
280
+ };
281
+ readonly showVersion: {
282
+ readonly label: "侧边栏中的版本";
283
+ readonly helper: "标志旁的版本号。关闭后将隐藏您运行的版本。";
284
+ };
285
+ };
286
+ readonly security: {
287
+ readonly heading: "安全";
288
+ readonly require2fa: {
289
+ readonly label: "强制双重验证";
290
+ readonly desc: "每位成员都必须启用双重验证才能登录。";
291
+ readonly note: "这是提示而非强制:未启用双重验证的成员会被引导去设置,之后也无法再关闭,但登录不会被阻止,API 密钥也不受影响。";
292
+ };
293
+ readonly allowSignup: {
294
+ readonly label: "允许自助注册";
295
+ readonly desc: "任何人都可以创建账户——关闭后此工作区仅限邀请。";
296
+ };
297
+ readonly sessionTtl: {
298
+ readonly label: "会话有效期(小时)";
299
+ readonly error: "介于 {min, number} 到 {max, number} 小时之间。";
300
+ };
301
+ readonly passwordMin: {
302
+ readonly label: "密码最小长度";
303
+ readonly error: "介于 {min, number} 到 {max, number} 个字符之间。";
304
+ };
305
+ };
306
+ readonly email: {
307
+ readonly heading: "电子邮件 (SMTP)";
308
+ readonly unconfigured: "尚未设置邮件服务器,因此 Adminium 无法发送密码重置、用户邀请或计划报告。";
309
+ readonly host: {
310
+ readonly label: "SMTP 主机";
311
+ readonly error: "只能填写主机名或 IP 地址 — 不含协议、端口或凭据。";
312
+ };
313
+ readonly port: {
314
+ readonly label: "端口";
315
+ readonly error: "介于 {min, number} 与 {max, number} 之间。";
316
+ };
317
+ readonly user: {
318
+ readonly label: "用户名";
319
+ readonly helper: "若中继无需认证,请留空。";
320
+ };
321
+ readonly pass: {
322
+ readonly label: "密码";
323
+ readonly helper: "加密存储且不再显示。留空则保留当前密码。";
324
+ readonly error: "该用户名需要密码。";
325
+ };
326
+ readonly from: {
327
+ readonly label: "发件人地址";
328
+ readonly helper: "可只填地址,或在地址前加显示名称。";
329
+ readonly error: "请输入电子邮件地址。";
330
+ };
331
+ readonly secure: {
332
+ readonly label: "隐式 TLS";
333
+ readonly helper: "端口 465 请开启。关闭时以明文开始并通过 STARTTLS 升级,这正是端口 587 所期望的。";
334
+ };
335
+ readonly remove: "移除邮件服务器";
336
+ readonly review: {
337
+ readonly removed: "已移除";
338
+ readonly password: "已替换";
339
+ };
340
+ };
341
+ readonly review: {
342
+ readonly title: "保存工作区设置";
343
+ readonly subtitle: "保存前请确认您的更改。";
344
+ readonly confirm: "保存更改";
345
+ readonly cancel: "取消";
346
+ readonly close: "关闭";
347
+ readonly on: "开";
348
+ readonly off: "关";
349
+ readonly shown: "显示";
350
+ readonly hidden: "隐藏";
351
+ readonly change: "{before} → {after}";
352
+ };
353
+ readonly defaultsCard: {
354
+ readonly heading: "外观与语言默认值";
355
+ readonly body: "工作区级的主题、强调色、密度和语言设置位于全局默认值中。";
356
+ readonly cta: "打开全局默认值";
357
+ };
358
+ readonly danger: {
359
+ readonly heading: "危险区域";
360
+ readonly subtitle: "不可逆的操作。";
361
+ readonly empty: "没有可删除的内容——还没有连接。";
362
+ readonly deleteDesc: "删除该连接及其生成的页面。您的数据库不会被改动。此操作无法撤销。";
363
+ readonly deleteCta: "删除连接";
364
+ };
365
+ readonly aiCard: {
366
+ readonly heading: "AI 增强";
367
+ readonly body: "配置 AI 提供方(或复制粘贴往返)来增强标签、分组和关系。";
368
+ readonly cta: "打开 AI 设置";
369
+ };
370
+ readonly pagesCard: {
371
+ readonly heading: "页面";
372
+ readonly body: "添加、编辑和删除页面,更改每个页面的内容,并重新排列侧边栏。";
373
+ readonly cta: "管理页面";
374
+ };
375
+ readonly translationsCard: {
376
+ readonly heading: "语言与翻译";
377
+ readonly body: "重写 Adminium 中的任何文案,决定用户可以选择哪些语言,并添加你自己的语言。";
378
+ readonly cta: "打开翻译";
379
+ };
380
+ };
381
+ readonly settingsAi: {
382
+ readonly title: "AI 增强";
383
+ readonly subtitle: "连接一个模型,让 Adminium 建议标签、分组、关系等——在应用之前始终以差异形式审阅。";
384
+ readonly saved: "AI 提供方已保存";
385
+ readonly saveFailed: "无法保存 AI 提供方。请重试。";
386
+ readonly save: "保存提供方";
387
+ readonly test: "测试连接";
388
+ readonly testHintDirty: "测试前请先保存更改。";
389
+ readonly testing: "正在连接提供方…";
390
+ readonly testError: "测试失败";
391
+ readonly testErrorBody: "无法连接到提供方。请检查密钥和基础 URL。";
392
+ readonly testOk: "已连接到 {model},用时 {latency} 毫秒";
393
+ readonly testUnknownModel: "提供方";
394
+ readonly provider: {
395
+ readonly heading: "AI 提供方";
396
+ readonly subtitle: "选择 Adminium 如何访问模型来增强你的架构。密钥将加密存储且不再显示。";
397
+ readonly active: "使用中";
398
+ readonly anthropic: {
399
+ readonly label: "Anthropic";
400
+ readonly desc: "通过 Anthropic API 使用 Claude 模型。";
401
+ };
402
+ readonly openai: {
403
+ readonly label: "OpenAI";
404
+ readonly desc: "通过 OpenAI API 使用 GPT 模型。";
405
+ };
406
+ readonly openaiCompatible: {
407
+ readonly label: "兼容 OpenAI";
408
+ readonly desc: "任何使用 OpenAI 协议的端点——Groq、Together、vLLM、LM Studio。";
409
+ };
410
+ readonly ollama: {
411
+ readonly label: "Ollama(本地)";
412
+ readonly desc: "通过 Ollama 在本地运行模型——无需密钥,无需云端。";
413
+ };
414
+ readonly requiresNetwork: "需要联网和 API 密钥";
415
+ readonly networkDisabledTitle: "此安装已关闭直连 AI 服务商";
416
+ readonly networkDisabledBody: "此 Adminium 配置为无出站网络访问,无法连接服务商 API。请使用下方的复制粘贴往返方式——无需密钥,也无需联网。";
417
+ };
418
+ readonly configure: {
419
+ readonly heading: "配置 {provider}";
420
+ };
421
+ readonly field: {
422
+ readonly baseUrl: "基础 URL";
423
+ readonly baseUrlOptional: "除非 Ollama 运行在其他主机上,否则保持不变。";
424
+ readonly baseUrlHelper: "提供 /chat/completions 的端点根地址。";
425
+ readonly model: "模型";
426
+ readonly modelFreeText: "输入你的端点所提供的确切模型 ID。";
427
+ readonly modelLive: "已从提供方实时加载。";
428
+ readonly modelStatic: "一份经过验证的列表;保存后输入自定义 ID 可刷新它。";
429
+ readonly modelLoading: "加载中…";
430
+ readonly modelPlaceholder: "选择一个模型…";
431
+ readonly key: "API 密钥";
432
+ readonly keyStored: "已加密存储。替换它以使用其他密钥。";
433
+ readonly keyMask: "sk-…{last4}";
434
+ readonly keyReplace: "替换密钥";
435
+ readonly keyOptional: "可选——某些端点无需密钥。";
436
+ readonly keyWriteOnly: "仅写入:保存后将不再显示。";
437
+ readonly noKeyTitle: "无需 API 密钥";
438
+ readonly noKeyBody: "Ollama 在本地运行,因此没有任何内容离开这台机器。";
439
+ };
440
+ readonly runStatus: {
441
+ readonly draft: "草稿";
442
+ readonly running: "运行中";
443
+ readonly awaitingResponse: "等待响应";
444
+ readonly validated: "已验证";
445
+ readonly applied: "已应用";
446
+ readonly partiallyApplied: "部分应用";
447
+ readonly failed: "失败";
448
+ readonly discarded: "已丢弃";
449
+ };
450
+ readonly byo: {
451
+ readonly heading: "没有密钥?使用你自己的 AI 工具";
452
+ readonly subtitle: "复制粘贴往返——没有任何内容离开这台机器。";
453
+ readonly body: "Studio 可以根据你的架构生成一个自包含的提示词。在 Claude Code、ChatGPT 或任意工具中运行它,然后将返回的 JSON 粘贴回连接向导。验证、审阅和结果都与直连方式相同。";
454
+ readonly guaranteeTitle: "无遥测保证";
455
+ readonly guarantee1: "提示词仅包含你的架构和聚合统计——默认绝不包含行数据。";
456
+ readonly guarantee2: "不嵌入任何凭据、实例 URL 或标识符。";
457
+ readonly guarantee3: "BYO 运行不进行任何网络调用。";
458
+ readonly promptVersion: "提示词 {version}";
459
+ readonly schemaVersion: "架构 {version}";
460
+ readonly headingRecommended: "使用你自己的 AI 工具——无需密钥";
461
+ readonly recommended: "推荐";
462
+ };
463
+ readonly history: {
464
+ readonly heading: "运行历史";
465
+ readonly subtitle: "过往的增强运行。打开其中一个以审阅其建议。";
466
+ readonly tableLabel: "增强运行";
467
+ readonly colDate: "日期";
468
+ readonly colSource: "来源";
469
+ readonly colStatus: "状态";
470
+ readonly colChunks: "分块";
471
+ readonly openReview: "打开 {date} 的运行审阅";
472
+ readonly connection: "连接";
473
+ readonly empty: "暂无增强运行。在连接向导中增强架构后,历史将显示在这里。";
474
+ readonly errorTitle: "无法加载运行";
475
+ readonly errorBody: "刷新页面以重试。";
476
+ readonly noConnections: "请先连接数据库——增强运行按连接记录。";
477
+ readonly byo: "BYO";
478
+ readonly directPath: "直连";
479
+ };
480
+ };
481
+ readonly enrich: {
482
+ readonly title: "使用 AI 丰富";
483
+ readonly subtitle: "可选择使用 LLM 优化生成的标签、分组、枚举和仪表板。启发式基线无需它即可工作——这仅添加供你在应用前审阅的建议。";
484
+ readonly intentLabel: "你希望如何丰富?";
485
+ readonly sectionsLegend: "应由 AI 决定哪些内容?";
486
+ readonly localesLegend: "将标签翻译为";
487
+ readonly localeLocked: "(必填)";
488
+ readonly samplingTitle: "包含示例值";
489
+ readonly samplingHint: "在提示中为每个非 PII 列最多包含 20 个真实值。";
490
+ readonly samplingPreviewTitle: "离开此机器的内容";
491
+ readonly samplingPreviewBody: "每个非 PII 列最多 20 个最常见值,以及数值和日期列的最小/最大值。标记为 PII 的列永不采样。其余所有内容仅保留聚合值。复制前请审阅确切的提示(BYO)——未经你的操作不会发送任何内容。";
492
+ readonly noSections: "请至少选择一个要丰富的决策组。";
493
+ readonly generatePrompt: "生成提示";
494
+ readonly startProvider: "开始丰富";
495
+ readonly startOver: "重新开始";
496
+ readonly copied: "已复制";
497
+ readonly createFailed: "无法构建丰富提示——请重试。";
498
+ readonly createFailedTitle: "无法启动";
499
+ readonly providerFallback: "你的 AI 提供商";
500
+ readonly fileTitle: "AI 丰富需要一个在线数据库";
501
+ readonly fileBody: "架构文件来源尚无可丰富的快照。连接一个在线数据库以使用 AI 丰富,或继续——启发式基线仍会生成完整的应用。";
502
+ readonly section: {
503
+ readonly labels: "标签与描述";
504
+ readonly groups: "导航分组";
505
+ readonly enums: "枚举语义";
506
+ readonly relations: "关系";
507
+ readonly keys: "关键列";
508
+ readonly templates: "页面模板";
509
+ readonly widgets: "仪表板小组件";
510
+ readonly pii: "PII 与脱敏";
511
+ readonly icons: "图标";
512
+ readonly microcopy: "微文案";
513
+ };
514
+ readonly provider: {
515
+ readonly title: "使用我的 AI 提供商";
516
+ readonly description: "立即使用已配置的提供商运行丰富。你将以差异形式审阅每条建议。";
517
+ readonly unconfigured: "尚未配置 AI 提供商——请在下方将提示复制到你自己的工具,或先配置一个提供商。";
518
+ readonly settingsHint: "想直接运行吗?";
519
+ readonly settingsLink: "在“设置 → AI”中配置提供商";
520
+ readonly networkDisabled: "此 Adminium 无出站网络访问,无法连接服务商 API。请改用复制粘贴往返方式——同样的提示词,同样的审阅。";
521
+ };
522
+ readonly byo: {
523
+ readonly cardTitle: "复制提示到我自己的 AI 工具";
524
+ readonly cardDescription: "将一个自包含的提示复制到 Claude Code、ChatGPT 或任何工具——然后将 JSON 粘贴回来。无需密钥,不会自动将任何内容传出此机器。";
525
+ readonly guidance: "在任意 AI 工具中运行——Claude Code、ChatGPT,皆可。将其返回的 JSON 粘贴到下方。";
526
+ readonly promptLabel: "丰富提示";
527
+ readonly promptLabelN: "丰富提示 第 {index} 个,共 {total} 个";
528
+ readonly tokenChip: "≈ {tokens} 个 token";
529
+ readonly copyPrompt: "复制提示";
530
+ readonly copyPromptDone: "提示已复制";
531
+ readonly download: "下载 .md";
532
+ readonly chunkTabs: "提示分块";
533
+ readonly chunkTab: "提示 {index}";
534
+ readonly chunkValid: "分块 {index} 已验证";
535
+ readonly pasteLabel: "粘贴 JSON 响应";
536
+ readonly pastePlaceholder: "在此粘贴 JSON 响应…";
537
+ readonly validate: "验证";
538
+ readonly valid: "响应已验证";
539
+ readonly mergedTitle: "全部 {count} 个分块已验证并合并";
540
+ readonly mergedTitleSingle: "响应已验证";
541
+ readonly mergedBody: "建议已准备好,可对照启发式基线进行审阅。";
542
+ readonly errorsTitle: "验证发现 {count} 个问题";
543
+ readonly copyErrors: "为你的 AI 工具复制错误";
544
+ readonly copyErrorsDone: "错误已复制";
545
+ readonly copyErrorsHint: "将其粘贴回你的 AI 工具以获取更正后的响应。";
546
+ readonly droppedItems: "有 {count} 条建议在验证时被丢弃——审阅中显示其余内容。";
547
+ readonly pendingTitle: "验证每个提示以继续";
548
+ readonly pendingBody: "在上方粘贴 JSON 响应并验证,以继续进行审阅。";
549
+ readonly pendingBodyChunked: "每个分块都必须先验证,建议才会合并。请粘贴并验证上方的每个提示。";
550
+ readonly requestFailed: "无法连接服务器进行验证——请重试。";
551
+ readonly continueReview: "继续审阅";
552
+ readonly wholeDocument: "整个文档";
553
+ readonly cardTitleRecommended: "把提示词复制到我自己的 AI 工具——推荐";
554
+ };
555
+ readonly direct: {
556
+ readonly title: "正在使用 AI 丰富";
557
+ readonly subtitle: "正在将你的架构发送至";
558
+ readonly building: "正在构建提示…";
559
+ readonly logLabel: "丰富日志";
560
+ readonly cancel: "取消";
561
+ readonly back: "返回选项";
562
+ readonly retry: "重试";
563
+ readonly done: "丰富完成——请审阅建议。";
564
+ readonly continueReview: "继续审阅";
565
+ readonly failed: "提供商运行失败。请检查你的 AI 设置并重试。";
566
+ readonly jobFailed: "丰富运行未完成。";
567
+ readonly startFailed: "无法启动运行——请重试。";
568
+ readonly errorTitle: "丰富失败";
569
+ };
570
+ readonly skip: {
571
+ readonly title: "跳过——仅使用启发式";
572
+ readonly description: "从启发式基线生成。你之后可在“设置 → AI”中丰富——跳过绝不会受到惩罚。";
573
+ readonly confirmTitle: "继续使用启发式";
574
+ readonly confirmBody: "生成的应用将使用启发式的标签、分组和仪表板。继续生成——你可随时在“设置 → AI”中运行 AI 丰富。";
575
+ };
576
+ };
577
+ readonly review: {
578
+ readonly unavailableTitle: "审阅界面不可用";
579
+ readonly unavailableBody: "此版本尚未包含增强审阅界面(06-T14)。它将随差异与应用流程一起推出。";
580
+ };
581
+ readonly llmRuns: {
582
+ readonly review: {
583
+ readonly header: {
584
+ readonly title: "审查 AI 建议";
585
+ readonly model: "模型";
586
+ readonly snapshot: "快照";
587
+ readonly byo: "自带";
588
+ readonly pathDirect: "直接 API";
589
+ readonly pathByo: "复制粘贴";
590
+ readonly agree: "{n} 项一致";
591
+ readonly conflict: "{n} 项冲突";
592
+ readonly new: "{n} 项新增";
593
+ readonly rejects: "{n} 项拒绝";
594
+ readonly countsAria: "建议数量";
595
+ };
596
+ readonly bulk: {
597
+ readonly thresholdLabel: "置信度阈值";
598
+ readonly thresholdAria: "“全部接受”的置信度阈值";
599
+ readonly acceptAll: "接受所有 ≥ {pct}%";
600
+ readonly clear: "清除选择";
601
+ };
602
+ readonly section: {
603
+ readonly selectAllAria: "全选 {group}";
604
+ readonly acceptedCount: "已接受 {n} 项";
605
+ };
606
+ readonly group: {
607
+ readonly labels: "标签与翻译";
608
+ readonly navigation: "导航与领域";
609
+ readonly enums: "枚举语义";
610
+ readonly relations: "关系";
611
+ readonly keys: "键列";
612
+ readonly templates: "页面模板";
613
+ readonly dashboards: "仪表盘与小组件";
614
+ readonly pii: "个人信息与脱敏";
615
+ readonly icons: "图标";
616
+ readonly microcopy: "微文案";
617
+ };
618
+ readonly status: {
619
+ readonly agree: "一致";
620
+ readonly conflict: "冲突";
621
+ readonly new: "新增";
622
+ readonly heuristicOnly: "仅启发式";
623
+ readonly rejects: "拒绝启发式";
624
+ readonly locked: "已锁定";
625
+ };
626
+ readonly row: {
627
+ readonly acceptAria: "接受 {target} 的{noun}建议";
628
+ readonly keptEdited: "已保留——由您编辑";
629
+ readonly rejectsCallout: "AI 拒绝了某项启发式决策——接受前请确认。";
630
+ readonly showTranslations: "显示翻译";
631
+ readonly hideTranslations: "隐藏翻译";
632
+ readonly confidenceAria: "置信度 {pct}%";
633
+ readonly noAi: "无 AI 建议";
634
+ };
635
+ readonly value: {
636
+ readonly none: "无值";
637
+ readonly absent: "无";
638
+ readonly dash: "—";
639
+ readonly display: "显示";
640
+ readonly key: "键";
641
+ readonly rank: "排名 {n}";
642
+ readonly span: "跨度 {n}";
643
+ readonly tableCount: "{n} 张表";
644
+ readonly widgetCount: "{n} 个小组件";
645
+ readonly enumWorkflow: "工作流";
646
+ readonly enumCategory: "分类";
647
+ readonly notPii: "非个人信息";
648
+ readonly label: "标签";
649
+ readonly description: "描述";
650
+ readonly subtitle: "页面副标题";
651
+ readonly headline: "空状态标题";
652
+ readonly guidance: "空状态提示";
653
+ };
654
+ readonly apply: {
655
+ readonly title: "应用 {n} 项建议";
656
+ readonly subtitle: "这些更改将在一个事务中写入,并可撤销。";
657
+ readonly empty: "未选择任何要应用的内容。";
658
+ readonly confirm: "应用更改";
659
+ };
660
+ readonly footer: {
661
+ readonly count: "已选择 {n} 项建议";
662
+ readonly apply: "应用 {n} 项已接受的建议";
663
+ readonly failed: "应用失败";
664
+ };
665
+ readonly toast: {
666
+ readonly applied: "已应用 {n} 项建议";
667
+ readonly appliedPartial: "已应用 {n} 项建议(部分已跳过)";
668
+ readonly applyFailed: "无法应用建议";
669
+ readonly undoFailed: "无法撤销此更改";
670
+ };
671
+ readonly error: {
672
+ readonly title: "无法加载此运行";
673
+ };
674
+ readonly notReady: {
675
+ readonly title: "此运行尚无可审查的建议";
676
+ readonly body: "运行必须先通过验证,才能审查其建议。请先生成或粘贴响应。";
677
+ };
678
+ readonly applied: {
679
+ readonly title: "此运行已应用";
680
+ readonly body: "下方已接受的建议为只读。";
681
+ };
682
+ readonly empty: {
683
+ readonly title: "无建议";
684
+ readonly body: "此运行未生成可审查的建议。";
685
+ };
686
+ readonly cat: {
687
+ readonly label: "标签";
688
+ readonly key: "键列";
689
+ readonly enum: "枚举";
690
+ readonly relation: "关系";
691
+ readonly pii: "个人信息";
692
+ readonly template: "页面模板";
693
+ readonly group: "导航分组";
694
+ readonly dashboard: "仪表盘";
695
+ readonly widget: "小组件";
696
+ readonly copy: "微文案";
697
+ };
698
+ };
699
+ };
700
+ readonly wizard: {
701
+ readonly title: "新建连接";
702
+ readonly back: "返回";
703
+ readonly continue: "继续";
704
+ readonly progress: "设置进度";
705
+ readonly persistFailed: "无法保存你的表选择——请重试。";
706
+ readonly persistFailedTitle: "保存失败";
707
+ readonly bridgeAppliedTitle: "已收到连接字符串";
708
+ readonly bridgeAppliedBody: "由你的浏览器从 adminium.dev 直接交给本机——它从未被上传到任何服务器。请在下方核对后继续。";
709
+ readonly bridgeFailedTitle: "无法使用这次交接";
710
+ readonly bridgeFailedBody: "它已被使用或已过期。请改为在下方粘贴你的连接字符串。";
711
+ readonly step: {
712
+ readonly source: "来源";
713
+ readonly test: "分析";
714
+ readonly tables: "数据表";
715
+ readonly meta: "元数据存储";
716
+ readonly intent: "意图";
717
+ readonly enrich: "丰富";
718
+ readonly generate: "生成";
719
+ };
720
+ };
721
+ readonly meta: {
722
+ readonly title: "Adminium 应把自己的表放在哪里?";
723
+ readonly subtitle: "页面、角色、审计日志和设置存放在以 adminium_ 为前缀的表中——绝不混入你的数据。";
724
+ readonly sameDb: {
725
+ readonly title: "同一数据库";
726
+ readonly description: "adminium_* 表将创建在你的源表旁边。这是最简单的设置——需要具有写入和 CREATE TABLE 权限的角色。";
727
+ readonly disabledReadOnly: "你的角色是只读的——Adminium 绝不会写入此数据库。请为 Adminium 自己的表选择单独的数据库。";
728
+ readonly disabledNoDdl: "该角色无法执行 DDL——Adminium 迁移需要 CREATE TABLE 权限。请为 Adminium 自己的表选择单独的数据库。";
729
+ readonly disabledFile: "架构文件没有实时数据库——请为 Adminium 自己的表选择单独的数据库。";
730
+ };
731
+ readonly separate: {
732
+ readonly title: "单独的数据库";
733
+ readonly description: "Adminium 将其表保存在另一个数据库中。你的源保持不变——只读源必须如此。";
734
+ readonly dsn: "元数据库连接字符串";
735
+ readonly helper: "需要写入和 DDL 权限——Adminium 会在那里运行自己的迁移。";
736
+ readonly test: "测试连接";
737
+ readonly ok: "兼容——写入 ✓ · DDL ✓";
738
+ readonly insufficient: "该角色无法承载元数据存储——Adminium 在那里需要写入和 CREATE TABLE 权限。";
739
+ readonly errorTitle: "元数据存储不兼容";
740
+ };
741
+ readonly testFailed: "连接失败。";
742
+ readonly v1Note: {
743
+ readonly title: "关于此安装";
744
+ readonly body: "此服务器已将自有数据表保存在配置好的数据库中,本步骤不会迁移它们。它只校验你的选择是否与此连接兼容——服务器会独立执行同一规则(409 META_PLACEMENT_INVALID)。";
745
+ };
746
+ readonly move: {
747
+ readonly title: "正在迁移 Adminium 的数据表";
748
+ readonly copying: "正在迁移 Adminium 的数据表…";
749
+ readonly restarting: "正在重启…";
750
+ readonly copyingBody: "正在将每张 adminium_ 表复制到新数据库。你的源数据不会被改动,只有在校验通过后才会切换。";
751
+ readonly restartingBody: "复制已完成。Adminium 正在新数据库上重启——本页面将在几秒后自动继续。";
752
+ readonly failed: "无法迁移 Adminium 的数据表——请重试。";
753
+ readonly timeout: "Adminium 已迁移数据表,但尚未恢复。你的数据已安全存放在新数据库中——请稍后刷新本页面。";
754
+ };
755
+ readonly willMove: {
756
+ readonly title: "此操作将迁移 Adminium 的数据表";
757
+ readonly body: "Adminium 目前使用内置的 SQLite 存储。点击“继续”会把该存储复制到你选择的数据库并在其上重启——账号、页面和设置都会一起迁移,你将保持登录状态。";
758
+ };
759
+ };
760
+ readonly intent: {
761
+ readonly title: "你需要什么?";
762
+ readonly subtitle: "意图决定生成哪些页面。之后可以更改——更改会提议重新生成,绝不会静默重写。";
763
+ readonly trust: "我们只读取你的架构——设置期间绝不读取行数据。";
764
+ readonly fullAdmin: {
765
+ readonly title: "完整管理面板";
766
+ readonly description: "仪表板、CRUD 页面、搜索、导入与导出——你的架构支持的一切。";
767
+ };
768
+ readonly analytics: {
769
+ readonly title: "只读分析";
770
+ readonly description: "仪表板、图表和只读网格。没有表单、没有写入——所有角色上限为查看者。";
771
+ };
772
+ readonly crud: {
773
+ readonly title: "CRUD 数据表";
774
+ readonly description: "每个表一个编辑页面,外加搜索和导入/导出——极简主页,没有仪表板。";
775
+ };
776
+ readonly support: {
777
+ readonly title: "客服控制台";
778
+ readonly description: "优先生成队列、工单和客户详情页面。默认关闭删除。(队列模板在 M7 提供——v1 页面集与完整管理面板相同。)";
779
+ };
780
+ };
781
+ readonly generate: {
782
+ readonly title: "生成你的应用";
783
+ readonly subtitle: "每个已包含的表一个页面,外加按领域生成的仪表板——意图:";
784
+ readonly run: "生成仪表板";
785
+ readonly openApp: "打开你的应用";
786
+ readonly logLabel: "生成日志";
787
+ readonly log: {
788
+ readonly classifying: "正在对架构分类…";
789
+ readonly composing: "正在组合模板…";
790
+ readonly writing: "正在写入页面…";
791
+ readonly done: "已生成 {pages} 个页面,分布于 {groups} 个导航组";
792
+ };
793
+ readonly successTitle: "你的仪表板已就绪";
794
+ readonly successBody: "{pages} 个页面,分布于 {groups} 个导航组——由你的架构生成,可在 Studio 中编辑。";
795
+ readonly errorTitle: "生成失败";
796
+ readonly failed: "生成失败——请重试,或先重新运行自省。";
797
+ readonly fileTitle: "架构文件已解析——生成需要实时数据库";
798
+ readonly fileBody: "你的架构解析顺利,上方预览是真实的。直接从架构文件生成可运行的应用(含占位行)尚不可用——请连接实时数据库立即生成。";
799
+ };
800
+ readonly remap: {
801
+ readonly column: {
802
+ readonly nullable: "可为空";
803
+ readonly labelOverride: "显示标签";
804
+ readonly labelHelper: "推断:{name}";
805
+ readonly logicalType: "逻辑类型";
806
+ readonly logicalTypeHelper: "推断:{type}(来自 {dbType})——由适配器映射;v1 中不可覆盖。";
807
+ readonly semantic: "语义类型";
808
+ readonly unclassified: "尚未分类。";
809
+ readonly semanticHelper: "分类器:{tag} · 置信度 {confidence}% · 来源:{source}";
810
+ readonly semanticInferred: "推断:{tag}";
811
+ readonly currency: "货币";
812
+ readonly currencyHelper: "应用于金额格式化的 ISO 4217 代码。";
813
+ readonly pii: "默认脱敏";
814
+ readonly piiHelper: "脱敏值以遮盖形式显示;取消脱敏需要 data.unmask_pii 权限,并会记录到审计日志。";
815
+ readonly enum: "枚举语义";
816
+ readonly enumKind: "枚举种类";
817
+ readonly enumWorkflow: "工作流";
818
+ readonly enumCategory: "分类";
819
+ readonly enumLabelFor: "{value} 的标签";
820
+ readonly enumToneFor: "{value} 的色调";
821
+ readonly enumToneAuto: "自动";
822
+ readonly enumHelper: "工作流枚举驱动状态徽章和看板列;色调将各值映射到语义色阶上。";
823
+ };
824
+ readonly diff: {
825
+ readonly one: "1 项更改";
826
+ readonly count: "{count} 项更改";
827
+ readonly saved: "覆盖已保存。";
828
+ readonly revertOne: "还原 {change}";
829
+ readonly regenerate: "重新生成页面";
830
+ readonly revertAll: "全部还原";
831
+ readonly save: "保存覆盖";
832
+ };
833
+ readonly table: {
834
+ readonly iconPicker: "表图标";
835
+ readonly system: "系统";
836
+ readonly labelOverride: "显示标签";
837
+ readonly labelHelper: "推断:{name}";
838
+ readonly icon: "图标";
839
+ readonly navGroup: "导航组";
840
+ readonly navGroupHelper: "导航位置由生成器决定——table.navGroup 覆盖不在 v1 词汇表中。";
841
+ readonly include: "包含在生成的应用中";
842
+ readonly includeHelper: "被排除的表不会生成页面,也不会出现在导航中。";
843
+ readonly shape: "表形态(已分类)";
844
+ readonly role: "角色";
845
+ readonly unclassified: "未分类";
846
+ readonly kind: "种类";
847
+ readonly hierarchy: "层级";
848
+ readonly selfFk: "通过 {column} 自引用";
849
+ readonly polymorphic: "多态列对";
850
+ readonly rows: "行数估算";
851
+ readonly shapeHelper: "每次自省都会重新计算分类;覆盖叠加在其上,并在重新生成后保留。";
852
+ };
853
+ readonly relations: {
854
+ readonly declared: "已声明的外键";
855
+ readonly noneDeclared: "没有已声明的外键涉及此表。";
856
+ readonly inferred: "推断的关系";
857
+ readonly noneInferred: "此表没有推断结果。";
858
+ readonly confidence: "推断 · {pct}%";
859
+ readonly accepted: "已接受";
860
+ readonly suppressed: "已屏蔽";
861
+ readonly accept: "接受";
862
+ readonly suppress: "屏蔽";
863
+ readonly overrides: "覆盖关系(已应用)";
864
+ readonly overrideBadge: "覆盖";
865
+ readonly add: "添加虚拟关系";
866
+ readonly fromColumn: "源列";
867
+ readonly noColumns: "没有匹配的列";
868
+ readonly fromPlaceholder: "customer_id";
869
+ readonly toTable: "目标表";
870
+ readonly noTables: "没有匹配的表";
871
+ readonly toColumn: "目标列";
872
+ readonly cardinality: "基数";
873
+ readonly addButton: "添加关系";
874
+ };
875
+ readonly toast: {
876
+ readonly saved: "架构覆盖已保存";
877
+ readonly savedDetail: "下方已应用的架构反映了你的更改。";
878
+ readonly regenerated: "已创建 {created} · 已更新 {updated} · 未变化 {unchanged}";
879
+ readonly regeneratedDetail: "你手动编辑过的页面会被保留——只有 generated_hash 未被改动的页面才会原地重新生成。";
880
+ readonly regenerateFailed: "重新生成失败";
881
+ };
882
+ readonly title: "架构重映射";
883
+ readonly subtitle: "{tables} 张表 · 已应用 {applied} 项覆盖";
884
+ readonly saveFailed: "保存失败:{message}";
885
+ readonly loadFailed: "无法加载此连接的架构。";
886
+ readonly inspector: "检查器";
887
+ readonly empty: {
888
+ readonly title: "选择一个表或列";
889
+ readonly description: "在架构树中选择一项,以重映射其标签、类型、关系或脱敏设置。";
890
+ };
891
+ readonly tabs: {
892
+ readonly details: "详情";
893
+ readonly relations: "关系";
894
+ };
895
+ readonly tree: {
896
+ readonly label: "架构";
897
+ readonly search: "搜索表和列";
898
+ readonly searchPlaceholder: "搜索表…";
899
+ readonly noMatches: "没有与搜索匹配的表。";
900
+ readonly collapse: "折叠表";
901
+ readonly expand: "展开表";
902
+ readonly unsaved: "未保存的更改";
903
+ readonly excluded: "已排除";
904
+ };
905
+ readonly badge: {
906
+ readonly pk: "主键";
907
+ readonly fk: "外键";
908
+ readonly unique: "唯一";
909
+ readonly pii: "PII";
910
+ readonly masked: "已脱敏";
911
+ };
912
+ readonly unavailableTitle: "架构重映射编辑器不可用";
913
+ readonly unavailableBody: "此版本尚未包含重映射编辑器(09-T12)。等它上线后重新运行生成,即可重映射标签、类型和关系。";
914
+ };
915
+ readonly publicApi: {
916
+ readonly error: "Something went wrong";
917
+ readonly scopes: {
918
+ readonly deleteTitle: "Delete this scope";
919
+ readonly 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.";
920
+ readonly deletePrompt: "Type the scope name to confirm";
921
+ readonly deleteConfirm: "Delete scope";
922
+ readonly issuesTitle: "This scope did not compile";
923
+ readonly title: "Scopes";
924
+ readonly 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.";
925
+ readonly emptyTitle: "No scopes yet";
926
+ readonly emptyBody: "Create one below. It is checked against your live schema before it is saved.";
927
+ readonly keyCount: "{count, plural, =0 {no keys} other {# keys}}";
928
+ readonly delete: "Delete";
929
+ readonly nameLabel: "Name";
930
+ readonly connectionLabel: "Connection ID";
931
+ readonly documentLabel: "Scope document";
932
+ readonly documentHint: "Compiled against your schema when you save. Every column a caller can reach is listed here and nowhere else.";
933
+ readonly create: "Create scope";
934
+ readonly formLabel: "Create a scope";
935
+ };
936
+ readonly cancel: "Cancel";
937
+ readonly close: "Close";
938
+ readonly title: "Public API";
939
+ readonly subtitle: "Let your own customer- or staff-facing pages read this database, through a scope you define.";
940
+ readonly notRegistered: {
941
+ readonly title: "Not enabled on this server";
942
+ readonly 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.";
943
+ };
944
+ readonly toggle: {
945
+ readonly label: "Serve the public API";
946
+ readonly hint: "Turning this off stops every public request immediately. Nothing is deleted — keys, scopes and data all survive.";
947
+ };
948
+ readonly origins: {
949
+ readonly label: "Origins allowed to call it";
950
+ };
951
+ readonly keys: {
952
+ readonly title: "Keys";
953
+ readonly 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.";
954
+ readonly emptyTitle: "No keys yet";
955
+ readonly emptyBody: "Create a scope first, then mint a key for it.";
956
+ readonly reveal: "Show key";
957
+ readonly rotate: "Rotate";
958
+ readonly revoke: "Revoke";
959
+ readonly nameLabel: "Name";
960
+ readonly scopeLabel: "Scope";
961
+ readonly scopePlaceholder: "Choose a scope";
962
+ readonly create: "Create key";
963
+ readonly formLabel: "Create a key";
964
+ readonly scopeIsAuthTitle: "The scope is the only permission";
965
+ readonly 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.";
966
+ readonly appLabel: "绑定到托管应用界面(可选)";
967
+ readonly appHint: "应用的客户界面随后会自行提供此密钥——轮换密钥无需重新构建。";
968
+ readonly appNone: "未绑定";
969
+ };
970
+ readonly status: {
971
+ readonly heading: "Status";
972
+ };
973
+ };
974
+ readonly hostedApps: {
975
+ readonly title: "托管应用";
976
+ readonly subtitle: "此实例所服务的应用界面——每个界面出现的位置,以及指向它们的域名。";
977
+ readonly error: "出了点问题";
978
+ readonly emptyTitle: "当前没有提供任何应用界面";
979
+ readonly emptyBody: "将 ADMINIUM_SURFACES_DIR 指向存放已构建界面的目录——每个应用和端各一个文件夹,各含其 index.html——然后重启。之后它们将在 /apps/ 下提供,并显示在这里。";
980
+ readonly surfaces: {
981
+ readonly title: "界面";
982
+ readonly subtitle: "员工界面可以融入此仪表盘的侧边栏,也可以独立存在;客户界面是公开的,通过其绑定的密钥读取数据。";
983
+ readonly staff: "员工";
984
+ readonly customer: "客户";
985
+ readonly noNav: "内嵌位置不可用——请用当前工具链重新构建此界面,使其生成 surface.json。";
986
+ readonly noKey: "未绑定密钥——为其创建密钥之前,此界面无法读取数据。";
987
+ readonly mintLink: "在“公开 API”中创建";
988
+ readonly boundKey: "提供密钥";
989
+ readonly placementLabel: "位置";
990
+ readonly placementInternal: "在侧边栏中(内嵌)";
991
+ readonly placementExternal: "外部(仅自有网址)";
992
+ readonly connectionLabel: "读取";
993
+ readonly connectionUnset: "当前提供服务的连接";
994
+ };
995
+ readonly domains: {
996
+ readonly title: "域名";
997
+ readonly subtitle: "将域名的 DNS 指向你的代理,把 Host 标头透传给 Adminium,然后在此附加——该主机随后将提供此界面而非本仪表盘。证书保留在你的代理上。";
998
+ readonly issuesTitle: "域名映射被拒绝";
999
+ readonly savedTitle: "已保存";
1000
+ readonly savedBody: "映射会在几秒内生效。只有当其 DNS 和你的代理真正到达此实例时,主机才会响应。";
1001
+ readonly none: "未附加任何域名。";
1002
+ readonly hostLabel: "主机";
1003
+ readonly surfaceLabel: "界面";
1004
+ readonly remove: "移除";
1005
+ readonly add: "附加域名";
1006
+ readonly save: "保存域名";
1007
+ readonly instanceLabel: "实例";
1008
+ readonly instanceOwn: "应用自身";
1009
+ };
1010
+ readonly instances: {
1011
+ readonly title: "实例";
1012
+ readonly body: "让同一个应用服务于多个数据库。每个实例可通过 /apps/<app>/<segment>/<side>/ 访问,且只读取你指定的连接。";
1013
+ readonly appLabel: "应用";
1014
+ readonly slugLabel: "URL 片段";
1015
+ readonly readsLabel: "读取";
1016
+ readonly add: "添加实例";
1017
+ readonly save: "保存实例";
1018
+ readonly remove: "移除";
1019
+ readonly empty: "没有额外实例。";
1020
+ readonly failed: "实例未保存";
1021
+ };
1022
+ };
1023
+ readonly addOns: {
1024
+ readonly plan: {
1025
+ readonly blocked: "This cannot be installed here";
1026
+ readonly needsColumns: "This add-on needs columns you do not have";
1027
+ readonly needsColumnsBody: "Adminium will not add columns to tables you already own. Add them yourself, then install.";
1028
+ readonly willCreate: "This will create tables in your database";
1029
+ readonly willCreateBody: "Installing creates these tables. Uninstalling later leaves them, and their data, alone.";
1030
+ readonly noData: "This add-on reads and writes no tables of its own.";
1031
+ readonly reuse: "This add-on will use tables you already have:";
1032
+ };
1033
+ readonly consent: {
1034
+ readonly title: "Install {name}";
1035
+ readonly subtitle: "What this add-on will do, before it can do it.";
1036
+ readonly close: "Close";
1037
+ readonly loading: "Working out what this would do…";
1038
+ readonly hosts: "Attach to";
1039
+ readonly cancel: "Cancel";
1040
+ readonly confirm: "Install";
1041
+ };
1042
+ readonly connect: {
1043
+ readonly apiKey: "API key";
1044
+ readonly submit: "Connect";
1045
+ };
1046
+ readonly title: "Add-ons";
1047
+ readonly subtitle: "Extra capabilities you can add to your apps — shipping, artwork, data. Each one says what it needs before you install it.";
1048
+ readonly error: "Something went wrong";
1049
+ readonly browse: {
1050
+ readonly title: "Available";
1051
+ readonly online: "Includes add-ons from the online catalogue. Checking for newer versions is a separate action.";
1052
+ readonly offline: "Showing the add-ons that came with this build. Browsing online is switched off, and nothing here has contacted the internet.";
1053
+ readonly refresh: "Check for newer";
1054
+ readonly emptyTitle: "No add-ons available";
1055
+ readonly emptyBody: "This build shipped none, and the online catalogue is off.";
1056
+ readonly bundled: "Included";
1057
+ readonly upgrade: "v{version} available";
1058
+ readonly download: "Download";
1059
+ readonly install: "Install";
1060
+ readonly discard: "Discard";
1061
+ readonly upgradeAction: "Upgrade";
1062
+ readonly toggle: "Browse the online catalogue";
1063
+ };
1064
+ readonly installed: {
1065
+ readonly title: "Installed";
1066
+ readonly emptyTitle: "Nothing installed yet";
1067
+ readonly emptyBody: "Install an add-on above and it will appear here with its hosts and connection.";
1068
+ readonly connected: "Connected";
1069
+ readonly notConnected: "Not connected";
1070
+ readonly egress: "May contact: {hosts}";
1071
+ readonly on: "on";
1072
+ readonly off: "off";
1073
+ readonly disconnect: "Disconnect";
1074
+ readonly uninstall: "Uninstall";
1075
+ };
1076
+ readonly confirm: {
1077
+ readonly close: "Close";
1078
+ readonly disconnectTitle: "Disconnect this add-on";
1079
+ readonly uninstallTitle: "Uninstall this add-on";
1080
+ readonly discardTitle: "Discard this download";
1081
+ readonly disconnectBody: "Its keys are deleted and it stops making calls. Every table and every row it created stays exactly as it is, and you can reconnect at any time.";
1082
+ readonly uninstallBody: "Its keys are deleted and its files are removed from this server. Every table and every row it created stays exactly as it is. You can install it again later.";
1083
+ readonly discardBody: "The downloaded files are deleted. Nothing was installed, so nothing else changes — you can download it again whenever you like.";
1084
+ readonly cancel: "Cancel";
1085
+ readonly disconnect: "Disconnect";
1086
+ readonly uninstall: "Uninstall";
1087
+ readonly discard: "Discard";
1088
+ };
1089
+ readonly upgradeNote: "Upgrading keeps the hosts an add-on is attached to and the connection it already has.";
1090
+ readonly job: {
1091
+ readonly title: "Downloading";
1092
+ readonly body: "Fetching and verifying. Nothing is installed until you say so.";
1093
+ readonly failed: "The download did not finish. Nothing was installed.";
1094
+ };
1095
+ readonly veto: {
1096
+ readonly title: "This deployment cannot browse online";
1097
+ readonly body: "The setting is saved, but network features are off for this server and that wins. Downloaded add-ons still work, and you can still upload one yourself.";
1098
+ };
1099
+ readonly sideload: {
1100
+ readonly title: "Upload a package";
1101
+ readonly hint: "For a server with no internet. It is checked exactly as a download would be, so it needs the hash that came with it.";
1102
+ readonly file: "Package file (.tgz)";
1103
+ readonly key: "Add-on key";
1104
+ readonly version: "Version";
1105
+ readonly sha: "Integrity (sha512-…)";
1106
+ readonly shaHint: "The `integrity` value `npm pack --json` printed. The upload is refused if the bytes do not match.";
1107
+ readonly submit: "Upload";
1108
+ };
1109
+ };
1110
+ readonly pages: {
1111
+ readonly title: "页面";
1112
+ readonly subtitle: "添加、编辑和整理应用的页面,以及它们在侧边栏中的顺序。";
1113
+ readonly createButton: "新建页面";
1114
+ readonly loadFailed: {
1115
+ readonly title: "无法加载页面";
1116
+ readonly body: "管理页面需要“管理页面”权限。请联系管理员将该权限授予你的某个角色。";
1117
+ };
1118
+ readonly tab: {
1119
+ readonly pages: "全部页面";
1120
+ readonly sidebar: "侧边栏顺序";
1121
+ };
1122
+ readonly list: {
1123
+ readonly title: "页面";
1124
+ readonly count: "{count, plural, other {# 个页面}}";
1125
+ };
1126
+ readonly empty: {
1127
+ readonly title: "暂无页面";
1128
+ readonly body: "连接数据库即可自动生成页面,也可以手动创建一个。";
1129
+ };
1130
+ readonly status: {
1131
+ readonly live: "已上线";
1132
+ readonly hidden: "已隐藏";
1133
+ };
1134
+ readonly origin: {
1135
+ readonly generated: "自动生成";
1136
+ readonly manifest: "插件";
1137
+ readonly llm: "助手";
1138
+ readonly system: "系统";
1139
+ readonly user: "自定义";
1140
+ };
1141
+ readonly row: {
1142
+ readonly menu: "{title} 的操作";
1143
+ };
1144
+ readonly action: {
1145
+ readonly edit: "编辑页面";
1146
+ readonly duplicate: "创建副本";
1147
+ readonly hide: "在侧边栏中隐藏";
1148
+ readonly show: "在侧边栏中显示";
1149
+ readonly delete: "删除页面";
1150
+ };
1151
+ readonly create: {
1152
+ readonly title: "新建页面";
1153
+ readonly failed: "无法创建页面";
1154
+ readonly submit: "创建页面";
1155
+ readonly subtitle: "选择此页面显示什么以及外观如何。预览会跟随你的选择。";
1156
+ };
1157
+ readonly duplicate: {
1158
+ readonly title: "创建页面副本";
1159
+ readonly failed: "无法创建副本";
1160
+ readonly submit: "创建副本";
1161
+ };
1162
+ readonly delete: {
1163
+ readonly title: "确定删除此页面吗?";
1164
+ readonly body: "此操作无法撤销。该页面上所有已保存的视图和个人布局将对所有人删除。";
1165
+ readonly bodyGenerated: "此页面由架构生成创建,下次重新生成时会再次出现。已保存的视图和个人布局将对所有人删除。";
1166
+ readonly prompt: "输入 {slug} 以确认";
1167
+ readonly confirm: "删除页面";
1168
+ };
1169
+ readonly field: {
1170
+ readonly title: "标题";
1171
+ readonly titleHint: "显示在侧边栏和页面标题栏中。";
1172
+ readonly slug: "页面地址";
1173
+ readonly slugHint: "仅限小写字母、数字和连字符。只需填写最后一段,其余部分会自动补全。";
1174
+ readonly slugTaken: "已有其他页面使用该地址。";
1175
+ readonly slugWarning: "修改地址会导致指向此页面的现有链接和书签失效。";
1176
+ readonly template: "模板";
1177
+ readonly templateHint: "决定页面可以承载哪些内容,之后可以更改。";
1178
+ readonly group: "侧边栏分组";
1179
+ readonly groupHint: "页面出现在侧边栏的哪个区块。";
1180
+ readonly icon: "图标";
1181
+ readonly iconHint: "显示在侧边栏中页面名称的旁边。";
1182
+ readonly visible: "在侧边栏中显示";
1183
+ readonly visibleHint: "隐藏的页面仍可通过网址访问,只要对方有链接。";
1184
+ readonly table: "数据表";
1185
+ readonly tableCreateHint: "此页面读取的数据表。现在选择即可直接使用;留空则可稍后再绑定。";
1186
+ readonly tableNone: "未绑定";
1187
+ readonly tableNeedsConnection: "请先选择数据源。";
1188
+ readonly connection: "数据源";
1189
+ readonly connectionNone: "无";
1190
+ readonly iconPick: "选择页面图标";
1191
+ readonly padding: "页面内边距";
1192
+ readonly width: "内容宽度";
1193
+ readonly widthHint: "在大屏幕上,页面内容列最多可以有多宽。";
1194
+ };
1195
+ readonly editor: {
1196
+ readonly title: "编辑页面";
1197
+ readonly save: "保存更改";
1198
+ readonly saveFailed: "无法保存更改";
1199
+ readonly openPage: "打开页面";
1200
+ readonly generated: {
1201
+ readonly title: "此页面根据你的数据库架构生成";
1202
+ readonly body: "重新生成时会保留你的修改:页面会被标记为已编辑并原样保留。但删除只在下次生成前有效,届时页面会被重新创建。";
1203
+ };
1204
+ readonly contentUnavailable: "无法加载页面内容";
1205
+ readonly contentUnavailableBody: "以上信息仍可保存。";
1206
+ readonly contentInvalid: "无法读取此页面的配置";
1207
+ readonly contentInvalidBody: "配置由更新的版本写入,或已损坏。请重新生成或删除该页面。";
1208
+ readonly data: "数据";
1209
+ readonly schemaFailed: "无法列出数据表";
1210
+ readonly schemaFailedBody: "此连接可能尚未分析。请在“工作室 → 数据连接”中运行架构分析。";
1211
+ readonly notBindable: "此模板不绑定单个数据表";
1212
+ readonly notBindableBody: "它的内容由小组件逐个搭建。打开页面并点击“编辑”即可添加。";
1213
+ readonly recompose: "此页面将被重建";
1214
+ readonly recomposeBody: "保存后将依据上方的模板和数据表用全新布局替换页面内容。此页面上的列调整和小组件改动将会丢失。";
1215
+ readonly missing: "此页面已不存在";
1216
+ readonly missingBody: "它可能已被删除,或被某次重新生成移除。";
1217
+ readonly details: "详细信息";
1218
+ readonly itemsPending: "请先保存上方的更改——页面内容将依据新的模板和数据表重建。";
1219
+ readonly columns: "列";
1220
+ readonly appearance: "外观";
1221
+ };
1222
+ readonly sidebar: {
1223
+ readonly help: "在分组内重新排序页面,或将页面移到其他分组。更改对所有人生效。";
1224
+ readonly discard: "放弃";
1225
+ readonly save: "保存顺序";
1226
+ readonly saveFailed: "无法保存新顺序";
1227
+ readonly emptyGroup: "此分组中没有页面。";
1228
+ readonly moveUp: "将 {title} 上移";
1229
+ readonly moveDown: "将 {title} 下移";
1230
+ readonly moveTo: "将 {title} 移到其他分组";
1231
+ readonly ungrouped: {
1232
+ readonly title: "有些页面不属于任何侧边栏分组";
1233
+ readonly body: "这些页面可以通过网址访问,但不会出现在侧边栏中。请逐个打开并选择分组。";
1234
+ };
1235
+ };
1236
+ readonly columns: {
1237
+ readonly help: "拖动以重新排序列、重命名列标题,并选择哪些列显示在表格中。";
1238
+ readonly empty: "还没有列——在下方添加。";
1239
+ readonly pk: "主键";
1240
+ readonly pii: "个人信息";
1241
+ readonly header: "{name} 的列标题";
1242
+ readonly shown: "显示";
1243
+ readonly toggle: "在表格中显示 {name}";
1244
+ readonly dragHandle: "调整 {name} 的顺序";
1245
+ readonly remove: "移除 {name}";
1246
+ readonly addOpen: "添加列";
1247
+ readonly addTitle: "添加列";
1248
+ readonly addSearch: "搜索列…";
1249
+ readonly addFromTable: "来自 {table}";
1250
+ readonly addFromLinked: "来自关联表";
1251
+ readonly addLinkedHelp: "显示链接列所指向表中的值。";
1252
+ readonly addVia: "通过 {column}";
1253
+ readonly addNoMatches: "没有与“{query}”匹配的列。";
1254
+ readonly followColumn: "跟随 {name}";
1255
+ readonly addLinkedFrom: "链接到此表的表";
1256
+ readonly addLinkedFromHelp: "添加指向每条记录的行数。";
1257
+ readonly countBadge: "计数";
1258
+ readonly lookupBadge: "关联";
1259
+ readonly lookupBack: "返回";
1260
+ readonly lookupBrowse: "选择要从 {table} 显示的内容";
1261
+ readonly lookupBroken: "该关联已无法解析";
1262
+ readonly lookupBrokenBody: "浏览期间架构发生了变化。请重新开始关联。";
1263
+ readonly schemaUnavailable: "无法列出数据库的列,因此这里无法重新添加列。";
1264
+ readonly none: {
1265
+ readonly title: "此页面还没有列";
1266
+ readonly body: "生成页面时会从数据表读取列。请将此页面绑定到数据表后重新生成。";
1267
+ };
1268
+ };
1269
+ readonly icon: {
1270
+ readonly none: "选择图标";
1271
+ readonly search: "搜索图标";
1272
+ readonly noMatches: "没有图标符合该搜索。";
1273
+ };
1274
+ readonly preview: {
1275
+ readonly untitled: "未命名页面";
1276
+ readonly note: "这是版式示意图,不是你的数据。保存后真实页面才会填充内容。";
1277
+ };
1278
+ readonly padding: {
1279
+ readonly default: "此模板的默认值";
1280
+ readonly none: "无";
1281
+ readonly standard: "标准 (28 × 24)";
1282
+ readonly custom: "自定义…";
1283
+ readonly x: "左右 (px)";
1284
+ readonly y: "上下 (px)";
1285
+ };
1286
+ readonly width: {
1287
+ readonly default: "此模板的默认值";
1288
+ readonly narrow: "窄(720px)";
1289
+ readonly content: "内容(900px)";
1290
+ readonly page: "页面(1080px)";
1291
+ readonly dash: "仪表板(1320px)";
1292
+ readonly wide: "宽(1800px)";
1293
+ readonly full: "全宽(不限制)";
1294
+ };
1295
+ };
16
1296
  };
17
1297
  export default _default;
18
1298
  //# sourceMappingURL=studio.d.ts.map