@object-ui/i18n 17.6.0 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +5408 -0
  2. package/README.md +255 -13
  3. package/dist/LocalizationContext.d.ts +32 -9
  4. package/dist/LocalizationContext.js +32 -10
  5. package/dist/builtinAggregateLabels.d.ts +40 -0
  6. package/dist/builtinAggregateLabels.js +23 -0
  7. package/dist/currency.d.ts +27 -3
  8. package/dist/currency.js +28 -4
  9. package/dist/fallbackInterpolation.d.ts +79 -0
  10. package/dist/fallbackInterpolation.js +124 -0
  11. package/dist/i18n.d.ts +27 -1
  12. package/dist/i18n.js +99 -16
  13. package/dist/index.d.ts +8 -13
  14. package/dist/index.js +45 -17
  15. package/dist/locales/ar.d.ts +1504 -188
  16. package/dist/locales/ar.js +1711 -281
  17. package/dist/locales/de.d.ts +1080 -188
  18. package/dist/locales/de.js +1248 -261
  19. package/dist/locales/en.d.ts +1141 -249
  20. package/dist/locales/en.js +1714 -295
  21. package/dist/locales/es.d.ts +1186 -188
  22. package/dist/locales/es.js +1350 -255
  23. package/dist/locales/fr.d.ts +1186 -188
  24. package/dist/locales/fr.js +1351 -258
  25. package/dist/locales/index.d.ts +11940 -2033
  26. package/dist/locales/index.js +48 -9
  27. package/dist/locales/ja.d.ts +1080 -188
  28. package/dist/locales/ja.js +1240 -254
  29. package/dist/locales/ko.d.ts +1080 -188
  30. package/dist/locales/ko.js +1244 -258
  31. package/dist/locales/pt.d.ts +1186 -188
  32. package/dist/locales/pt.js +1350 -255
  33. package/dist/locales/registry.d.ts +102 -0
  34. package/dist/locales/registry.js +220 -0
  35. package/dist/locales/rtl.d.ts +24 -0
  36. package/dist/locales/rtl.js +26 -0
  37. package/dist/locales/ru.d.ts +1292 -188
  38. package/dist/locales/ru.js +1479 -272
  39. package/dist/locales/zh.d.ts +1144 -252
  40. package/dist/locales/zh.js +1245 -259
  41. package/dist/pickLocalized.d.ts +30 -0
  42. package/dist/pickLocalized.js +39 -0
  43. package/dist/provider.d.ts +101 -12
  44. package/dist/provider.js +335 -50
  45. package/dist/translateFn.d.ts +29 -0
  46. package/dist/translateFn.js +8 -0
  47. package/dist/useDisplayLocale.d.ts +11 -0
  48. package/dist/useDisplayLocale.js +11 -0
  49. package/dist/useObjectLabel.d.ts +143 -100
  50. package/dist/useObjectLabel.js +129 -82
  51. package/dist/useSafeTranslation.js +40 -42
  52. package/dist/utils/first-day-of-week.d.ts +71 -0
  53. package/dist/utils/first-day-of-week.js +61 -0
  54. package/dist/utils/formatting.d.ts +23 -1
  55. package/dist/utils/formatting.js +34 -5
  56. package/dist/utils/index.d.ts +1 -0
  57. package/dist/utils/index.js +1 -0
  58. package/dist/utils/spec-formatters.d.ts +13 -23
  59. package/dist/utils/spec-formatters.js +41 -2
  60. package/dist/utils/spec-translations.d.ts +16 -3
  61. package/dist/utils/spec-translations.js +52 -13
  62. package/package.json +12 -6
@@ -17,7 +17,7 @@ const zh = {
17
17
  },
18
18
  },
19
19
  // objectui#2600 B5 — 能力选择器的作用域分组标题(能力标签本身来自
20
- // sys_capability 注册表,这里只本地化分组标题这类 UI 字符串)。
20
+ // capability 注册表,这里只本地化分组标题这类 UI 字符串)。
21
21
  capability: {
22
22
  group: {
23
23
  platform: '平台',
@@ -29,32 +29,13 @@ const zh = {
29
29
  manage_users: '管理用户',
30
30
  manage_org_users: '管理组织用户',
31
31
  manage_metadata: '管理元数据',
32
+ manage_mailboxes: '管理邮箱',
32
33
  manage_platform_settings: '管理平台设置',
33
34
  setup_access: '访问 Setup',
34
35
  setup_write: '保存设置',
35
36
  studio_access: '访问 Studio',
36
- },
37
- },
38
- // objectui#3546 切片六 —— 权限集记录上六个授权面的只读摘要与 Studio 深链
39
- // (ADR-0056 P1,plugin-detail 的 PermissionFacetLink)。
40
- // 用词取自本仓权限集设计器(metadata-admin i18n 表):个对象 / 行级策略 /
41
- // 标签页 / 委派管理范围 —— 与点进去的那个界面一致。
42
- // 中文无单复数,四个计数 key 的 `_one` 与基础 key 同值(设计如此,不是漏改)。
43
- perm: {
44
- facet: {
45
- none: '无',
46
- more: '+{{count}} 更多',
47
- objects: '{{count}} 个对象',
48
- objects_one: '{{count}} 个对象',
49
- fields: '{{count}} 条字段规则',
50
- fields_one: '{{count}} 条字段规则',
51
- rls: '{{count}} 条 RLS 策略',
52
- rls_one: '{{count}} 条 RLS 策略',
53
- tabs: '{{count}} 条标签页规则',
54
- tabs_one: '{{count}} 条标签页规则',
55
- adminScope: '已配置委派管理范围',
56
- designInStudio: '在 Studio 中设计 →',
57
- designInStudioHint: '在 Studio 中设计',
37
+ manage_sharing: '管理共享',
38
+ view_all_audit_log: '查看全部审计日志',
58
39
  },
59
40
  },
60
41
  lookup: {
@@ -73,7 +54,8 @@ const zh = {
73
54
  selectFirst: '请先选择{{fields}}',
74
55
  selectRecord: '选择记录',
75
56
  recordCount: '{{count}} 条记录',
76
- recordCountOne: '1 条记录',
57
+ recordCount_one: '{{count}} 条记录',
58
+ recordCount_other: '{{count}} 条记录',
77
59
  pageOf: '第 {{current}}/{{total}} 页',
78
60
  filters: '筛选',
79
61
  clear: '清除',
@@ -123,14 +105,26 @@ const zh = {
123
105
  closePanel: '关闭面板',
124
106
  resizeDrawer: '调整面板宽度',
125
107
  itemCount: '{{count}} 项',
126
- itemCountOne: '{{count}} 项',
108
+ itemCount_one: '{{count}} 项',
109
+ itemCount_other: '{{count}} 项',
127
110
  toggleSidebar: '切换侧边栏',
111
+ breadcrumb: '面包屑导航',
128
112
  package: '软件包',
129
113
  done: '完成',
130
114
  editInStudio: '在 Studio 中编辑',
131
115
  record: '记录',
132
116
  retry: '重试',
133
117
  printDialogHint: '打开浏览器打印对话框(不是导出 PDF)',
118
+ // The non-grid row ceiling's footnote (objectui#7210). Two keys because
119
+ // there are two conditions: a reported `total` states the fact with BOTH
120
+ // numbers, a missing one cannot name how many. Kept terse deliberately —
121
+ // this copy is eagerly loaded, and since objectui#7399 these bytes are
122
+ // budgeted by the `i18n-locales` chunk, not `framework`. ⛔ That ceiling's
123
+ // headroom is deliberately NOT restated here — it moves on every
124
+ // re-baseline, and the figure that was here went stale.
125
+ // `pnpm check:eager-closure` prints it.
126
+ rowCeilingNote: '仅显示 {{total}} 条记录中的前 {{shown}} 条。请缩小筛选范围。',
127
+ rowCeilingNoteUnknownTotal: '仅显示前 {{shown}} 条记录。请缩小筛选范围。',
134
128
  },
135
129
  actions: {
136
130
  decisionOutput: {
@@ -142,6 +136,15 @@ const zh = {
142
136
  acknowledge: '我已保存',
143
137
  copyAll: '全部复制',
144
138
  },
139
+ notAvailableHere: '「{{action}}」在当前页面不可用。',
140
+ notAvailableForRecord: '对此记录不可用',
141
+ completedSuccessfully: '操作已成功完成',
142
+ failed: '操作失败',
143
+ parallelFailed: '一个或多个并行操作失败',
144
+ undo: '撤销',
145
+ undone: '已撤销更改',
146
+ undoneOperation: '撤销:{{description}}',
147
+ redoneOperation: '重做:{{description}}',
145
148
  },
146
149
  validation: {
147
150
  required: '{{field}}不能为空',
@@ -159,8 +162,12 @@ const zh = {
159
162
  },
160
163
  form: {
161
164
  noPermissionToSave: '您没有权限保存这条记录。',
165
+ noPermissionToCreate: '您没有创建{{object}}的权限,字段均为只读。',
166
+ noPermissionToEdit: '您没有编辑{{object}}的权限,字段均为只读。',
162
167
  submitFailed: '保存失败,请重试。',
163
- addItem: '添加项目',
168
+ uploadInFlight: '请等待上传完成后再保存。',
169
+ clearedOnHide: '已清空不再适用于当前取值的字段:{{fields}}',
170
+ visibleWhenFaulted: '无法提交:{{fields}} 的 visibleWhen 规则无法求值。需先修正该规则,才能提交此表单。',
164
171
  removeItem: '移除项目',
165
172
  fieldRequired: '此字段为必填项',
166
173
  invalidFormat: '格式不正确',
@@ -172,13 +179,37 @@ const zh = {
172
179
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
173
180
  // description, used when the form declares no `description` of its own.
174
181
  dialogDescriptionFallback: '填写表单字段,然后提交或取消。',
182
+ deniedDescription: '您没有此字段的编辑权限。',
183
+ serverDefaultHint: '保存时自动设置。',
184
+ maxFileSize: '最大文件大小:{{size}}',
185
+ masterDetail: {
186
+ loadingColumns: '正在加载列…',
187
+ subtotal: '小计',
188
+ tax: '税额({{rate}}%)',
189
+ total: '合计',
190
+ lineItem: '明细行',
191
+ rowTitle: '{{title}} — 第 {{row}} 行',
192
+ applyRow: '应用',
193
+ editorDescription: '填写记录及其明细行,然后保存。',
194
+ noChildObject: '此集合未配置子对象:请将 {{property}} 设为其所列行所属的对象。',
195
+ schemaUnavailable: '无法加载 {{object}} 的对象结构,因此此集合没有可显示的列。请检查该对象是否存在且可读,然后重新加载。',
196
+ noRelationshipField: '无法确定 {{object}} 如何关联到 {{parent}}:它没有引用父对象的 lookup 或 master_detail 字段。请在此集合上将 {{property}} 设为保存父记录的字段。',
197
+ },
198
+ lineItems: {
199
+ title: '明细行',
200
+ saveRecordFirst: '保存记录后才能添加明细行。',
201
+ notLoaded: '此记录的明细行尚未加载。',
202
+ loadFailed: '明细行加载失败',
203
+ saveFailed: '明细行保存失败',
204
+ noChildObject: '此面板未配置子对象:请将 {{property}} 设为其所列行所属的对象。',
205
+ },
175
206
  keepEditing: '继续编辑',
176
207
  discard: '放弃',
177
208
  conflictTitle: '保存冲突',
178
209
  conflictMessage: '您编辑期间,这条记录已被其他人修改。覆盖保存将用您的内容替换对方的修改。',
179
210
  conflictLatestVersion: '对方保存时间:{{time}}',
180
211
  conflictOverwrite: '覆盖保存',
181
- stepOf: '第{{current}}步,共{{total}}步',
212
+ stepOf: '第 {{current}} 步,共 {{total}} 步',
182
213
  createTitle: '新建{{object}}',
183
214
  editTitle: '编辑{{object}}',
184
215
  viewTitle: '查看{{object}}',
@@ -189,6 +220,13 @@ const zh = {
189
220
  createSuccess: '{{object}}创建成功',
190
221
  updateSuccess: '{{object}}更新成功',
191
222
  deleteSuccess: '{{object}}删除成功',
223
+ // objectui#11039 — plugin-form feedback chrome; see the `en` pack.
224
+ created: '已创建',
225
+ saved: '已保存',
226
+ savedNamed: '{{title}}已保存',
227
+ submitted: '已提交',
228
+ errorLoading: '表单加载失败',
229
+ navigateRefused: '此表单声明的 `navigateOnSuccess` 跳转目标被拒绝,因此未执行跳转。',
192
230
  fullscreen: {
193
231
  title: '编辑文本',
194
232
  description: '编辑完整的文本内容,然后保存或取消更改。',
@@ -200,6 +238,8 @@ const zh = {
200
238
  fields: {
201
239
  relativeDate: {
202
240
  overdue: '逾期 {{count}} 天',
241
+ overdue_one: '逾期 {{count}} 天',
242
+ overdue_other: '逾期 {{count}} 天',
203
243
  },
204
244
  file: {
205
245
  dragDropHere: '拖拽文件到此处',
@@ -216,6 +256,9 @@ const zh = {
216
256
  remove: '移除 {{name}}',
217
257
  exceedsMaxSize: '“{{name}}” 超过大小上限({{max}} MB)',
218
258
  uploadFailed: '上传 “{{name}}” 失败:{{error}}',
259
+ uploadIncomplete: '“{{name}}” 上传未完成:未返回文件 ID,未保存任何内容',
260
+ restricted: '受限文件',
261
+ restrictedHint: '你无权查看此文件的详细信息',
219
262
  },
220
263
  image: {
221
264
  upload: '上传图片',
@@ -226,10 +269,14 @@ const zh = {
226
269
  remove: '移除图片 {{index}}',
227
270
  enlarge: '放大 {{name}}',
228
271
  preview: '图片预览',
272
+ cropPreview: '图片裁剪预览',
229
273
  previous: '上一张',
230
274
  next: '下一张',
231
275
  counter: '{{current}} / {{total}}',
232
276
  },
277
+ percent: {
278
+ slider: '百分比',
279
+ },
233
280
  richText: {
234
281
  format: '格式: {{format}}',
235
282
  basicEditorHint: '富文本编辑器(基础)',
@@ -245,6 +292,10 @@ const zh = {
245
292
  search: '搜索对象…',
246
293
  empty: '未找到对象',
247
294
  },
295
+ registryRef: {
296
+ loadFailed: '列表加载失败。仍可直接输入名称。',
297
+ notFound: '{{name}}(未找到)',
298
+ },
248
299
  recipient: {
249
300
  selectTypeFirst: '请先选择接收方类型。',
250
301
  loading: '加载中…',
@@ -256,6 +307,9 @@ const zh = {
256
307
  selectBusinessUnit: '请选择业务单元',
257
308
  selectPosition: '请选择岗位',
258
309
  selectUnitAndSubordinates: '请选择业务单元',
310
+ selectField: '请选择用户字段',
311
+ noUserFields: '此对象没有用户字段',
312
+ fieldNotUserTyped: '{{name}} — 不是用户字段',
259
313
  },
260
314
  filterCondition: {
261
315
  selectObjectFirst: '请先选择对象。',
@@ -266,6 +320,33 @@ const zh = {
266
320
  editAsJson: '以 JSON 编辑',
267
321
  useVisualBuilder: '使用可视化构建器',
268
322
  },
323
+ object: {
324
+ invalidJson: 'JSON 无效',
325
+ },
326
+ location: {
327
+ refusedFormat: '未保存:请输入纬度, 经度坐标对(例如 30.2741, 120.1551)。',
328
+ refusedRange: '未保存:{{detail}}',
329
+ latitude: '纬度',
330
+ longitude: '经度',
331
+ refusedResidueOne: '未保存:{{name}}“{{text}}”不是数字。请输入普通小数(例如 30.2741, 120.1551)。',
332
+ refusedResidue: '未保存:{{name}}“{{text}}”和{{otherName}}“{{otherText}}”不是数字。请输入普通小数(例如 30.2741, 120.1551)。',
333
+ },
334
+ date: {
335
+ impossibleDay: '存储的值“{{value}}”不是真实存在的日期。请选择日期以替换它。',
336
+ },
337
+ dateTime: {
338
+ impossibleDay: '存储的值“{{value}}”不是真实存在的日期。请选择日期和时间以替换它。',
339
+ },
340
+ datePicker: {
341
+ today: '今天',
342
+ tomorrow: '明天',
343
+ clear: '清除日期',
344
+ openCalendar: '打开日历',
345
+ invalid: '未保存:“{{value}}”不是有效日期。请按 {{format}} 格式输入,或从日历中选择。',
346
+ },
347
+ number: {
348
+ badInput: '未保存:此输入框中的文本不是数字。请输入普通小数(例如 {{example}})。',
349
+ },
269
350
  tags: {
270
351
  placeholder: '输入后回车添加…',
271
352
  },
@@ -280,10 +361,25 @@ const zh = {
280
361
  postalCode: '邮政编码',
281
362
  country: '国家 / 地区',
282
363
  },
364
+ boolean: {
365
+ offBadge: '{{label}} — 已关闭',
366
+ completed: '已完成',
367
+ notCompleted: '未完成',
368
+ },
283
369
  textarea: {
284
370
  characterCount: '已输入 {{count}} 个字符,最多 {{max}} 个',
285
371
  charactersRemaining: '还可输入 {{count}} 个字符',
286
372
  },
373
+ grid: {
374
+ addLine: '添加行',
375
+ noItems: '暂无条目',
376
+ noItemsAddHint: '暂无条目,点击“{{label}}”开始添加。',
377
+ optionalColumns: '可选列',
378
+ computed: '自动计算',
379
+ openRow: '打开行',
380
+ duplicateRow: '复制行',
381
+ removeRow: '删除行',
382
+ },
287
383
  },
288
384
  table: {
289
385
  rowsPerPage: '每页行数',
@@ -299,10 +395,15 @@ const zh = {
299
395
  selectAllRows: '选择所有行',
300
396
  expandRow: '展开行',
301
397
  collapseRow: '折叠行',
398
+ rowActions: '行操作',
302
399
  hideColumn: '隐藏列',
303
400
  freezeColumn: '冻结列',
304
401
  unfreezeColumn: '取消冻结列',
305
402
  pageInfo: '第 {{current}} 页,共 {{total}} 页',
403
+ firstPage: '第一页',
404
+ previousPage: '上一页',
405
+ nextPage: '下一页',
406
+ lastPage: '最后一页',
306
407
  totalRecords: '共 {{count}} 条',
307
408
  noResults: '未找到结果',
308
409
  noResultsHint: '请尝试调整筛选条件或搜索关键词。',
@@ -312,8 +413,15 @@ const zh = {
312
413
  open: '打开',
313
414
  search: '搜索…',
314
415
  modified: '{{count}} 行已修改',
416
+ modified_one: '{{count}} 行已修改',
417
+ modified_other: '{{count}} 行已修改',
418
+ saved: '{{count}} 行已保存',
419
+ saved_one: '{{count}} 行已保存',
420
+ saved_other: '{{count}} 行已保存',
315
421
  saveFailed: '保存失败',
316
422
  selected: '已选择 {{count}} 项',
423
+ selected_one: '已选择 {{count}} 项',
424
+ selected_other: '已选择 {{count}} 项',
317
425
  edit: '编辑',
318
426
  delete: '删除',
319
427
  },
@@ -328,23 +436,38 @@ const zh = {
328
436
  pullToRefresh: '下拉刷新',
329
437
  refreshing: '刷新中…',
330
438
  openRecord: '打开记录',
439
+ recordUnavailable: '{{object}} · 记录不可用',
331
440
  openMenu: '更多操作',
332
441
  bulkSelected: '已选择 {{count}} 项',
442
+ bulkSelected_one: '已选择 {{count}} 项',
443
+ bulkSelected_other: '已选择 {{count}} 项',
333
444
  bulkSelectedAllMatches: '已选择全部 {{count}} 项(全部匹配)',
334
445
  bulkClear: '清除',
335
446
  bulkAllOnPage: '本页 {{count}} 项已全选。',
447
+ bulkAllOnPage_one: '本页 {{count}} 项已全选。',
448
+ bulkAllOnPage_other: '本页 {{count}} 项已全选。',
336
449
  bulkSelectAllMatching: '选择全部 {{count}} 项匹配记录',
337
450
  bulkAllMatchingSelected: '已选择全部 {{count}} 项匹配记录。',
451
+ bulkActions: '批量操作',
338
452
  rowHeight: '行高: {{mode}}',
339
453
  empty: '空',
340
454
  yes: '是',
341
455
  no: '否',
342
456
  systemFields: '系统字段',
457
+ // objectui#10881 — the grouped grid's two refusals: over a data source
458
+ // that cannot answer the group header query, and over rows a host
459
+ // handed in while declaring them one page of more. `queryGroupHeaders`
460
+ // is the member's name and stays untranslated.
461
+ grouping: {
462
+ needsHeaderQuery: '此视图已分组,但其数据源未实现 queryGroupHeaders,因此无法统计分组。移除分组即可显示记录。',
463
+ needsWholeRows: '分组需要全部记录,但此表格只收到其中一页,因此无法统计分组。请传入全部记录,或让表格从实现了 queryGroupHeaders 的数据源获取记录。',
464
+ },
343
465
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
344
466
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
345
467
  // pack controls its own separator and word order.
346
468
  summary: {
347
469
  pattern: '{{label}}:{{value}}',
470
+ pagePattern: '{{label}}(本页):{{value}}',
348
471
  count: '计数',
349
472
  countEmpty: '空值',
350
473
  countFilled: '非空',
@@ -411,23 +534,31 @@ const zh = {
411
534
  mapped: '已映射',
412
535
  skipped: '已跳过',
413
536
  rowsWithErrors: '{{count}} 行有错误',
537
+ rowsWithErrors_one: '{{count}} 行有错误',
538
+ rowsWithErrors_other: '{{count}} 行有错误',
414
539
  rowsCorrected: '已修正 {{count}} 行',
540
+ rowsCorrected_one: '已修正 {{count}} 行',
541
+ rowsCorrected_other: '已修正 {{count}} 行',
415
542
  clickToFix: '— 点击高亮单元格可直接修改。',
416
543
  showingRows: '显示第 {{shown}} 行,共 {{total}} 行',
417
544
  importing: '导入中… {{progress}}%',
418
545
  importComplete: '导入完成',
546
+ importPartial: '导入完成,但有错误',
547
+ importFailed: '导入失败',
419
548
  imported: '已导入 {{count}} 条',
420
549
  skippedCount: '已跳过 {{count}} 条',
421
550
  moreErrors: '…还有 {{count}} 个错误',
551
+ moreErrors_one: '…还有 {{count}} 个错误',
552
+ moreErrors_other: '…还有 {{count}} 个错误',
422
553
  cancel: '取消',
423
554
  back: '上一步',
424
555
  next: '下一步',
425
556
  close: '关闭',
426
557
  importNRows: '导入 {{count}} 行',
558
+ importNRows_one: '导入 {{count}} 行',
559
+ importNRows_other: '导入 {{count}} 行',
427
560
  importingProgress: '导入中…',
428
561
  requiredMark: '*',
429
- optTreatHistorical: '作为历史数据导入',
430
- optTreatHistoricalHint: '(按原样导入已完结的记录——跳过状态机校验,保留原始时间戳与作者,而不是记为当前时间)',
431
562
  missingRequiredHint: '无法继续——以下必填字段未映射:{{fields}}。请在文件中添加对应的列,或返回上一步重新上传包含该列的文件。',
432
563
  legacyFallbackNotice: '已通过兼容模式导入:当前连接不支持服务端导入接口,因此所有值均以文本写入,未做服务端类型转换。请升级后端/客户端以获得完整的导入支持(类型转换与关联查找)。',
433
564
  required: '必填',
@@ -436,6 +567,8 @@ const zh = {
436
567
  // 自动匹配(Airtable 风格)
437
568
  autoMatched: '自动匹配',
438
569
  autoMatchedSummary: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
570
+ autoMatchedSummary_one: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
571
+ autoMatchedSummary_other: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
439
572
  confidence: {
440
573
  high: '高置信度',
441
574
  medium: '中置信度',
@@ -443,8 +576,10 @@ const zh = {
443
576
  },
444
577
  // 下载模板
445
578
  downloadTemplate: '下载模板',
446
- downloadTemplateHint: '获取带正确列的 CSV(必填字段标 *)。',
579
+ downloadTemplateHint: '获取 Excel 模板:仅含可导入的列(必填字段标 *),并附填写说明。',
447
580
  templateFileName: '{{object}}-导入模板',
581
+ templateDownloadFailed: '模板下载失败,请重试。',
582
+ templateNotPermitted: '您没有新建该对象记录的权限,无法获取其导入模板。',
448
583
  // 校验(服务端 dryRun 预检)
449
584
  validate: '校验数据',
450
585
  validateHint: '导入前在服务端逐行校验。',
@@ -452,6 +587,8 @@ const zh = {
452
587
  validatePassed: '全部 {{ok}} 行均有效。',
453
588
  validateFailed: '{{ok}} 条有效,{{errors}} 条有错误。',
454
589
  errorCount: '{{count}} 个错误',
590
+ errorCount_one: '{{count}} 个错误',
591
+ errorCount_other: '{{count}} 个错误',
455
592
  errorRowPrefix: '第 {{row}} 行:',
456
593
  // 服务端结构化导入错误的友好文案
457
594
  referenceNotFound: '找不到匹配 "{{value}}" 的记录',
@@ -459,6 +596,7 @@ const zh = {
459
596
  invalidBoolean: '"{{value}}" 不是有效的是/否值',
460
597
  invalidNumber: '"{{value}}" 不是有效的数字',
461
598
  invalidDate: '"{{value}}" 不是有效的日期',
599
+ invalidTime: '"{{value}}" 不是有效的时间',
462
600
  invalidOption: '"{{value}}" 不在允许的选项范围内',
463
601
  requiredValue: '此字段为必填项',
464
602
  matchAmbiguous: '匹配到多条已有记录,请使用唯一值或记录 ID',
@@ -475,15 +613,20 @@ const zh = {
475
613
  matchFieldsHint: '按这些字段将行匹配到已有记录。',
476
614
  needMatchFields: '请至少选择一个匹配字段。',
477
615
  matchOnlyField: '(仅匹配)',
478
- optRunAutomations: '运行自动化与触发器',
479
616
  optCreateOptions: '保留未知选项值',
480
617
  optSkipBlankKey: '跳过匹配值为空的行',
481
618
  optBackground: '后台导入',
482
619
  optBackgroundHint: '(作为可撤销任务运行)',
483
620
  // 结果
484
621
  createdCount: '新建 {{count}} 条',
622
+ createdCount_one: '新建 {{count}} 条',
623
+ createdCount_other: '新建 {{count}} 条',
485
624
  updatedCount: '更新 {{count}} 条',
625
+ updatedCount_one: '更新 {{count}} 条',
626
+ updatedCount_other: '更新 {{count}} 条',
486
627
  resultsTruncated: '显示前 {{count}} 行结果(共 {{total}} 行)。',
628
+ resultsTruncated_one: '显示前 {{count}} 行结果(共 {{total}} 行)。',
629
+ resultsTruncated_other: '显示前 {{count}} 行结果(共 {{total}} 行)。',
487
630
  downloadFailed: '下载失败行',
488
631
  cancelImport: '取消导入',
489
632
  importCancelled: '导入已取消',
@@ -516,13 +659,20 @@ const zh = {
516
659
  undoImport: '撤销导入',
517
660
  undoing: '撤销中…',
518
661
  reverted: '已撤销',
662
+ undoPartial: '{{count}} 行未能撤销。再次撤销只会重试这些行。',
663
+ undoPartial_one: '{{count}} 行未能撤销。再次撤销只会重试这一行。',
664
+ undoPartial_other: '{{count}} 行未能撤销。再次撤销只会重试这些行。',
519
665
  undoConfirm: '撤销此次导入?它新建的记录将被删除,它更新的记录将恢复为之前的值。',
520
666
  },
521
667
  bulk: {
522
668
  confirmDefault: '此操作将应用于 {{count}} 条记录。',
669
+ confirmDefault_one: '此操作将应用于 {{count}} 条记录。',
670
+ confirmDefault_other: '此操作将应用于 {{count}} 条记录。',
523
671
  overLimit: '所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。',
524
672
  affectedRecords: '受影响的记录({{count}}):',
525
673
  skippedIneligible: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
674
+ skippedIneligible_one: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
675
+ skippedIneligible_other: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
526
676
  rowFallback: '第 {{index}} 行',
527
677
  andMore: '……以及另外 {{count}} 条',
528
678
  processed: '已处理 {{count}} / {{total}}',
@@ -540,7 +690,6 @@ const zh = {
540
690
  undo: '撤销',
541
691
  undoing: '撤销中…',
542
692
  done: '完成',
543
- selectPlaceholder: '请选择…',
544
693
  loading: '加载中…',
545
694
  },
546
695
  },
@@ -549,26 +698,59 @@ const zh = {
549
698
  month: '月',
550
699
  week: '周',
551
700
  day: '日',
552
- agenda: '日程',
553
701
  allDay: '全天',
554
- noEvents: '暂无事件',
555
702
  newEvent: '新建事件',
556
703
  moreEvents: '+{{count}} 更多',
704
+ unscheduled: '未排期 ({{count}})',
705
+ loading: '加载日历中…',
706
+ loadError: '错误:{{message}}',
707
+ configRequired: '需要日历配置。请指定 startDateField,这是日历唯一必填的键;事件标题无需 titleField 也能解析。',
708
+ configRequiredHint: '它属于视图的 calendar 块。界面页面没有自己的日历插槽:请将其 sourceView 指向一个声明了日历的视图。',
709
+ eventDetails: '事件详情',
710
+ pullToRefresh: '下拉刷新',
711
+ refreshing: '刷新中…',
712
+ onDate: '{{date}}',
713
+ eventTitle: '标题',
714
+ eventTitlePlaceholder: '这个事件是关于什么的?',
715
+ creating: '创建中…',
716
+ titleRequired: '请填写标题',
717
+ a11y: {
718
+ region: '日历',
719
+ grid: '日历网格',
720
+ goToToday: '转到今天',
721
+ previousPeriod: '上一时段',
722
+ nextPeriod: '下一时段',
723
+ currentDate: '当前日期:{{date}}',
724
+ dayCell: '{{date}},{{count}} 个日程',
725
+ dayCell_one: '{{date}},{{count}} 个日程',
726
+ dayCell_other: '{{date}},{{count}} 个日程',
727
+ resizeEventEnd: '调整日程结束时间',
728
+ resizeEventEndHint: '拖动以更改结束日期',
729
+ resizeStart: '调整开始时间',
730
+ resizeEnd: '调整结束时间',
731
+ },
557
732
  },
558
733
  list: {
559
734
  loading: '正在加载记录…',
560
735
  recordCount: '{{count}} 条记录',
561
- recordCountOne: '{{count}} 条记录',
736
+ recordCount_one: '{{count}} 条记录',
737
+ recordCount_other: '{{count}} 条记录',
562
738
  addRecord: '添加记录',
739
+ // objectui#12703 — the compact list's footer link to the object's list or the block's view.
740
+ viewAll: '查看全部',
563
741
  tabs: '标签页',
564
742
  allRecords: '全部记录',
565
743
  search: '搜索',
566
744
  filter: '筛选',
567
745
  filterRecords: '筛选记录',
746
+ filterActive: '筛选,{{count}} 个生效',
747
+ filterActive_one: '筛选,{{count}} 个生效',
748
+ filterActive_other: '筛选,{{count}} 个生效',
568
749
  sort: '排序',
569
750
  sortRecords: '排序记录',
570
751
  sortByIdSuffix: '(按 ID)',
571
752
  sortRelationalHint: '指向其他记录的列未列出:它们只能按存储的 ID 排序,而不是单元格中显示的名称。若要按该名称排序,请把该名称反规范化到本对象上,做成一个在来源变更时写入的存储字段,再按它排序。不要用公式字段:公式字段是虚拟的,不会为它存储任何列,服务端会拒绝按它排序。',
753
+ sortRelationalPicked: '关联列按存储的 ID 排序,而不是显示的名称。',
572
754
  resetSortToDefault: '恢复视图默认排序',
573
755
  group: '分组',
574
756
  groupBy: '分组依据',
@@ -586,6 +768,7 @@ const zh = {
586
768
  firstRunMessage: '创建第一条记录即可开始。',
587
769
  noMatches: '没有匹配的记录',
588
770
  noMatchesMessage: '没有符合当前筛选或搜索条件的记录,试试调整或清除它们。',
771
+ viewFilterNoMatchesMessage: '没有符合该视图筛选条件的记录。',
589
772
  loadErrorTitle: '无法加载记录',
590
773
  loadErrorMessage: '加载数据时出错。请检查网络连接后重试。',
591
774
  loadErrorForbiddenTitle: '无权访问',
@@ -627,14 +810,15 @@ const zh = {
627
810
  print: '打印',
628
811
  hideFieldsTitle: '隐藏字段',
629
812
  dataLimitReached: '显示前 {{limit}} 条记录。可能有更多数据。',
630
- viewSettings: '视图设置',
631
- viewSettingsHint: '分组、行颜色、密度与可见字段。',
813
+ display: '显示',
814
+ layout: '布局',
815
+ rowNumbers: '行号',
816
+ resetToViewDefault: '恢复视图默认设置',
632
817
  addGroup: '添加分组字段',
633
818
  collapsedByDefault: '默认折叠',
634
819
  removeGroup: '删除',
635
820
  inlineEditShort: '行内编辑',
636
821
  inlineEditLabel: '行内编辑记录(点击单元格进行编辑)',
637
- recordEditingTitle: '记录编辑',
638
822
  },
639
823
  managedByBadge: {
640
824
  config: {
@@ -670,15 +854,31 @@ const zh = {
670
854
  deleteCard: '删除卡片',
671
855
  deleteColumn: '删除列',
672
856
  noCards: '暂无卡片',
857
+ columnCards: '{{column}} 的卡片',
858
+ laneCards: '{{column}} - {{lane}} 的卡片',
673
859
  cardTitlePlaceholder: '输入卡片标题…',
674
860
  uncategorized: '未分类',
861
+ loadMore: '加载更多',
675
862
  columns: '列',
676
863
  requiredFieldsTitle: '填写必填字段',
677
864
  requiredFieldsDescription: '此次移动会使以下字段成为必填项。填写后即可继续。',
865
+ dnd: {
866
+ start: '已拿起 {{card}},当前在 {{column}}。',
867
+ overCard: '{{card}} 正移到 {{column}} 中的 {{target}} 上。',
868
+ overColumn: '{{card}} 正移到 {{column}}。',
869
+ overNone: '{{card}} 不在任何列上。',
870
+ moved: '{{card}} 已移到 {{column}}。',
871
+ dropped: '已放下 {{card}},仍在 {{column}}。',
872
+ cancelled: '已取消拖动。{{card}} 仍在 {{column}}。',
873
+ untitledCard: '未命名卡片',
874
+ unnamedColumn: '未命名列',
875
+ instructions: '如需将此卡片移到其他列,请用鼠标或触控拖动它。',
876
+ dragging: '正在拖动 {{card}}',
877
+ },
678
878
  },
679
879
  timeline: {
680
880
  bucket: {
681
- overdue: '已逾期',
881
+ earlier: '更早',
682
882
  today: '今天',
683
883
  tomorrow: '明天',
684
884
  thisWeek: '本周',
@@ -693,6 +893,17 @@ const zh = {
693
893
  },
694
894
  gantt: {
695
895
  rowLabel: '条目',
896
+ unusableRange: {
897
+ malformedDate: '甘特图日期区间不可用 —— {{path}} 的值是 {{value}},无法解析为日期。每个甘特图日期都必须能被解析:每行条目的 startDate 与 endDate,以及 schema 上钉住的 minDate / maxDate。',
898
+ malformedRow: '甘特图行不可用 —— {{path}} 的值是 {{value}},不是行的形状。甘特图把 items 读作行的列表,每一行是带 label 和自身 items 的对象,每一行的 items 是条形的列表;这些位置上出现 null、数字、字符串或普通对象都无法绘制。',
899
+ inverted: '甘特图日期区间不可用 —— minDate {{minDate}} 晚于 maxDate {{maxDate}}。钉住的 minDate / maxDate 会覆盖由行数据算出的区间,因此该坐标轴没有任何列,也无法放置任何条形;请对调这两个值。',
900
+ },
901
+ },
902
+ unsupported: {
903
+ objectBoundGantt: '不支持的变体 "gantt" —— 对象绑定的时间线只渲染 feed 变体({{variants}})。甘特图需要字面量行,每行自带嵌套的 items,因此此处的甘特轴(scale)不起作用。',
904
+ },
905
+ unconfigured: {
906
+ noDateAxis: '时间线需要日期轴 —— 该视图未声明任何日期字段,而对象绑定的时间线不会虚构一个。请声明以下之一:{{fields}}。第一个是 spec 写法,其余为遗留别名。',
696
907
  },
697
908
  },
698
909
  gantt: {
@@ -738,6 +949,7 @@ const zh = {
738
949
  },
739
950
  aria: {
740
951
  taskList: '任务列表',
952
+ refreshing: '刷新中…',
741
953
  },
742
954
  tooltip: {
743
955
  days: '天',
@@ -783,13 +995,19 @@ const zh = {
783
995
  conflict: {
784
996
  title: '排程冲突',
785
997
  body: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
998
+ body_one: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
999
+ body_other: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
786
1000
  confirm: '自动重新排程',
787
1001
  cancel: '保持不变',
788
1002
  },
789
1003
  autoScheduleDlg: {
790
1004
  title: '自动排程',
791
1005
  body: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
1006
+ body_one: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
1007
+ body_other: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
792
1008
  skipped: '另有 {{count}} 项因锁定/无权限跳过。',
1009
+ skipped_one: '另有 {{count}} 项因锁定/无权限跳过。',
1010
+ skipped_other: '另有 {{count}} 项因锁定/无权限跳过。',
793
1011
  confirm: '执行',
794
1012
  cancel: '取消',
795
1013
  none: '依赖均满足,无需排程',
@@ -840,10 +1058,14 @@ const zh = {
840
1058
  tabActionsFor: '{{name}} 的视图操作',
841
1059
  readonlyAriaLabel: '只读视图',
842
1060
  readonlyTooltip: '系统视图 — 由代码定义,只读。',
1061
+ malformedFilter: '此视图的筛选条件有误,因此不显示任何记录:无法应用 {{subject}} 条件。',
1062
+ noObject: '未指定对象:请设置 {{property}} 或 dataSource.object。',
843
1063
  },
844
1064
  designer: {
845
1065
  undo: '撤销',
846
1066
  redo: '重做',
1067
+ canvasMinimap: '画布缩略图',
1068
+ versionHistory: '版本历史',
847
1069
  },
848
1070
  detail: {
849
1071
  back: '返回',
@@ -857,9 +1079,12 @@ const zh = {
857
1079
  lockedByApproval: '审批中已锁定',
858
1080
  lockedTooltip: '该记录有待审批的请求,编辑已被锁定',
859
1081
  writeStrippedTitle: '已保存,但部分字段未生效',
1082
+ writeWarningsTitle: '已保存,但有警告',
860
1083
  writeStrippedReadonly: '以下字段为只读,未生效:{{fields}}',
861
1084
  writeStrippedByState: '以下字段在记录当前状态下不可编辑,未生效:{{fields}}',
862
1085
  writeStrippedPrimaryKey: '以下字段是记录的标识符,保存时无法修改,未生效:{{fields}}',
1086
+ writeStrippedComputed: '以下字段由服务端按公式计算,提交的值未生效:{{fields}}',
1087
+ writeStrippedStoredExpression: '以下字段的值由记录计算得出,已保存计算值而非提交的值:{{fields}}',
863
1088
  writeStrippedUnknownReason: '以下字段未被服务端写入:{{fields}}',
864
1089
  approvalPendingEditable: '审批中 · 可编辑',
865
1090
  approvalPendingTooltip: '该记录有待审批的请求,但当前审批节点仍允许编辑',
@@ -881,6 +1106,13 @@ const zh = {
881
1106
  pathStageLostUpcoming: '{{stage}},已失败,未到达',
882
1107
  pathStageWonUpcoming: '{{stage}},目标阶段,未到达',
883
1108
  linkCopied: '链接已复制到剪贴板',
1109
+ commentFailed: '评论未发布,内容没有保存,请重试。',
1110
+ reactionFailed: '表情回应未保存,请重试。',
1111
+ editComment: '编辑评论',
1112
+ deleteComment: '删除评论',
1113
+ deleteCommentConfirm: '确定要删除这条评论吗?',
1114
+ commentEditFailed: '您的修改未保存,评论保留原有内容。',
1115
+ commentDeleteFailed: '评论未删除,请重试。',
884
1116
  linkCopyFailed: '复制链接失败',
885
1117
  cancel: '取消',
886
1118
  cancelEdit: '放弃更改',
@@ -907,7 +1139,8 @@ const zh = {
907
1139
  pageHeaderActions: '页面标题栏操作',
908
1140
  emojiPicker: '表情选择器',
909
1141
  reactionCount: '{{emoji}} {{count}} 个回应',
910
- reactionCountOne: '{{emoji}} {{count}} 个回应',
1142
+ reactionCount_one: '{{emoji}} {{count}} 个回应',
1143
+ reactionCount_other: '{{emoji}} {{count}} 个回应',
911
1144
  recordDetail: '记录详情',
912
1145
  recordDetailWithLabel: '{{label}}详情',
913
1146
  openAsFullPage: '以完整页面打开',
@@ -934,7 +1167,6 @@ const zh = {
934
1167
  viewAll: '查看全部',
935
1168
  new: '新建',
936
1169
  add: '添加',
937
- emptyValue: '—',
938
1170
  activity: '活动',
939
1171
  history: '历史',
940
1172
  historyEmpty: '暂无历史记录',
@@ -949,6 +1181,7 @@ const zh = {
949
1181
  sortBy: '排序',
950
1182
  filterPlaceholder: '筛选…',
951
1183
  highlightFields: '关键字段',
1184
+ highlightsLabel: '记录关键字段',
952
1185
  // Comments
953
1186
  comments: '评论',
954
1187
  searchComments: '搜索评论…',
@@ -960,8 +1193,14 @@ const zh = {
960
1193
  unpin: '取消置顶',
961
1194
  justNow: '刚刚',
962
1195
  minutesAgo: '{{count}}分钟前',
1196
+ minutesAgo_one: '{{count}}分钟前',
1197
+ minutesAgo_other: '{{count}}分钟前',
963
1198
  hoursAgo: '{{count}}小时前',
1199
+ hoursAgo_one: '{{count}}小时前',
1200
+ hoursAgo_other: '{{count}}小时前',
964
1201
  daysAgo: '{{count}}天前',
1202
+ daysAgo_one: '{{count}}天前',
1203
+ daysAgo_other: '{{count}}天前',
965
1204
  // Activity feed actors
966
1205
  systemActor: '系统',
967
1206
  unknownUser: '未知用户',
@@ -975,7 +1214,8 @@ const zh = {
975
1214
  // Attachments
976
1215
  dropFilesToUpload: '拖拽文件到此处或点击上传',
977
1216
  attachmentCount: '{{count}} 个附件',
978
- attachmentCountPlural: '{{count}} 个附件',
1217
+ attachmentCount_one: '{{count}} 个附件',
1218
+ attachmentCount_other: '{{count}} 个附件',
979
1219
  removeAttachment: '移除附件',
980
1220
  // Record Attachments panel (enable.files, objectstack#4358)
981
1221
  attachments: '附件',
@@ -984,6 +1224,7 @@ const zh = {
984
1224
  noAttachments: '暂无附件。上传一个文件开始吧。',
985
1225
  downloadAttachment: '下载',
986
1226
  deleteAttachment: '删除附件',
1227
+ deleteAttachmentConfirm: '确定要删除附件“{{name}}”吗?',
987
1228
  attachmentDeleteDenied: '只有上传者或可编辑此记录的用户才能删除此附件。',
988
1229
  attachmentParentAccessDenied: '您无权为此记录添加附件。',
989
1230
  attachmentDownloadDenied: '您无权下载此附件。',
@@ -994,11 +1235,6 @@ const zh = {
994
1235
  attachmentsApiUnavailable: '此对象上的附件列表不可用。',
995
1236
  retryLoadAttachments: '重试',
996
1237
  // Diff
997
- unifiedDiff: '统一视图',
998
- sideBySideDiff: '并排视图',
999
- noChanges: '无变更',
1000
- previousVersion: '旧版本',
1001
- currentVersion: '新版本',
1002
1238
  // Discussion
1003
1239
  discussion: '讨论',
1004
1240
  showDiscussion: '显示讨论 ({{count}})',
@@ -1017,18 +1253,12 @@ const zh = {
1017
1253
  subscribedTooltip: '已订阅 — 点击取消订阅',
1018
1254
  unsubscribedTooltip: '订阅通知',
1019
1255
  // Navigation
1020
- firstRecord: '第一条记录 (Home)',
1021
- previousRecordKey: '上一条记录 (←)',
1022
- nextRecordKey: '下一条记录 (→)',
1023
- lastRecord: '最后一条记录 (End)',
1024
1256
  noRecords: '无记录',
1025
1257
  // objectui#3863 — base key. zh has a single plural category (`other`), so this
1026
1258
  // slot is unreachable here and equals `_other` for key-set parity.
1027
1259
  showEmptyRelated: '+ {{count}} 个为空',
1028
1260
  showEmptyRelated_one: '+ {{count}} 个为空',
1029
1261
  showEmptyRelated_other: '+ {{count}} 个为空',
1030
- searchWhileNavigating: '导航时搜索',
1031
- searchRecords: '搜索记录…',
1032
1262
  // Activity timeline
1033
1263
  allActivity: '全部动态',
1034
1264
  commentsOnly: '仅评论',
@@ -1036,13 +1266,29 @@ const zh = {
1036
1266
  tasksOnly: '仅任务',
1037
1267
  leaveCommentPlaceholder: '留下评论… (Ctrl+Enter 提交)',
1038
1268
  noActivity: '暂无活动记录',
1269
+ activityAccessDenied: '您没有查看此记录活动的权限。',
1270
+ commentsAccessDenied: '您没有查看此记录评论的权限。',
1271
+ // objectui#7149 — the rest of `ActivityTimeline`. The four chip labels the
1272
+ // `detail.*` pack did not already name, and the `formatFieldChange`
1273
+ // sentences, which are assembled in code and so need interpolation holes.
1274
+ allFilter: '全部',
1275
+ createsFilter: '创建',
1276
+ deletesFilter: '删除',
1277
+ statusChangesFilter: '状态变更',
1278
+ activityEmptyValue: '(空)',
1279
+ activityFieldChanged: '将 {{field}} 从“{{old}}”改为“{{new}}”',
1280
+ activityCreated: '创建了此记录',
1281
+ activityDeleted: '删除了此记录',
1282
+ activityStatusChanged: '将状态改为“{{value}}”',
1283
+ activityUpdated: '更新了记录',
1039
1284
  loadMore: '加载更多',
1040
1285
  edited: '(已编辑)',
1041
1286
  via: '通过 {{source}}',
1042
1287
  viewSource: '查看来源',
1043
1288
  // Replies
1044
1289
  replyCount: '{{count}} 条回复',
1045
- replyCountPlural: '{{count}} 条回复',
1290
+ replyCount_one: '{{count}} 条回复',
1291
+ replyCount_other: '{{count}} 条回复',
1046
1292
  replyPlaceholder: '回复…',
1047
1293
  // 无障碍标签
1048
1294
  filterActivity: '筛选活动',
@@ -1055,13 +1301,27 @@ const zh = {
1055
1301
  copyPhone: '复制电话号码',
1056
1302
  copyRecordId: '复制记录 ID',
1057
1303
  showEmptyFields: '显示 {{count}} 个空字段',
1304
+ showEmptyFields_one: '显示 {{count}} 个空字段',
1305
+ showEmptyFields_other: '显示 {{count}} 个空字段',
1058
1306
  hideEmptyFields: '隐藏空字段',
1059
1307
  noValue: '无',
1308
+ unresolvedReference: '未解析的引用:{{value}} 未能解析为用户',
1309
+ unresolvedLookupReference: '未解析的引用:{{value}} 在本屏未能解析为记录',
1310
+ repeaterItemCount: '{{count}} 项',
1311
+ repeaterItemCount_one: '{{count}} 项',
1312
+ repeaterItemCount_other: '{{count}} 项',
1313
+ fileCount: '{{count}} 个文件',
1314
+ fileCount_one: '{{count}} 个文件',
1315
+ fileCount_other: '{{count}} 个文件',
1060
1316
  },
1061
1317
  chart: {
1062
- noData: '暂无图表数据',
1063
1318
  loading: '图表加载中…',
1319
+ refreshing: '刷新中…',
1064
1320
  nullCategory: '(未指定)',
1321
+ scatterOneMeasure: '散点图只绘制一个度量。请只保留一个系列:',
1322
+ unconfigured: {
1323
+ noCategoryAxis: '图表需要分类轴 —— 对象绑定的图表不会虚构一个。请声明以下之一:',
1324
+ },
1065
1325
  },
1066
1326
  report: {
1067
1327
  total: '总计',
@@ -1076,6 +1336,7 @@ const zh = {
1076
1336
  loading: '加载中…',
1077
1337
  failedToLoad: '矩阵报表加载失败:{{message}}',
1078
1338
  needsAcross: '矩阵报表至少需要一个 `groupingsAcross` 字段。',
1339
+ forbiddenMessage: '你没有查看该报表数据的权限。',
1079
1340
  aggregate: {
1080
1341
  count: '计数',
1081
1342
  countDistinct: '去重计数',
@@ -1089,26 +1350,34 @@ const zh = {
1089
1350
  panelTitle: '编辑报表',
1090
1351
  },
1091
1352
  },
1092
- map: {
1093
- searchLocations: '搜索位置…',
1094
- locationDetails: '位置详情',
1095
- markersCount: '{{count}} 个标记',
1096
- invalidCoordinates: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1097
- invalidCoordinatesPlural: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1098
- },
1099
1353
  dashboard: {
1100
1354
  addWidget: '添加组件',
1101
- removeWidget: '移除组件',
1102
1355
  editLayout: '编辑布局',
1103
1356
  saveLayout: '保存布局',
1104
1357
  resetLayout: '重置布局',
1105
1358
  total: '总计',
1106
- noDataAvailable: '暂无数据',
1107
1359
  noDataSourceFor: '没有可用的数据源:',
1108
- noRows: '暂无数据行',
1360
+ // objectui#7063 — the DEFAULT empty state every dashboard widget renders
1361
+ // when its query SUCCEEDED and returned nothing. It replaced the terse
1362
+ // per-widget `noRows` / `noDataAvailable` fragments at the render site;
1363
+ // objectui#7125 deleted those two keys from all ten packs once nothing
1364
+ // read them. The copy here has to read as a state rather than a failure,
1365
+ // which is why it says the widget loaded. `sourceLabel` carries its own
1366
+ // punctuation so the call site concatenates no separator (see
1367
+ // `WidgetEmptyState`).
1368
+ empty: {
1369
+ title: '暂时还没有数据',
1370
+ message: '该组件已成功加载,只是查询目前没有返回任何记录。',
1371
+ sourceLabel: '数据源:',
1372
+ },
1109
1373
  loading: '加载中…',
1374
+ refreshing: '刷新中…',
1375
+ refreshAll: '全部刷新',
1376
+ refreshDashboard: '刷新仪表盘',
1110
1377
  pickMeasures: '请为该数据集组件选择度量(值)。',
1111
1378
  datasetUnsupported: '当前数据源不支持数据集查询。',
1379
+ widgetForbiddenTitle: '无权访问',
1380
+ widgetForbiddenMessage: '你没有查看该组件数据的权限。',
1112
1381
  details: '明细',
1113
1382
  exportCsv: '导出 CSV',
1114
1383
  openInList: '在列表中打开',
@@ -1255,10 +1524,6 @@ const zh = {
1255
1524
  appDescription: '描述',
1256
1525
  appIcon: '图标',
1257
1526
  template: '模板',
1258
- layout: '布局',
1259
- layoutSidebar: '侧边栏',
1260
- layoutHeader: '顶部导航',
1261
- layoutEmpty: '空白',
1262
1527
  selectObjects: '选择对象',
1263
1528
  searchObjects: '搜索对象…',
1264
1529
  selectAll: '全选',
@@ -1267,7 +1532,6 @@ const zh = {
1267
1532
  addGroup: '添加分组',
1268
1533
  addUrl: '添加链接',
1269
1534
  addSeparator: '添加分隔线',
1270
- noNavItems: '暂无导航项。',
1271
1535
  logoUrl: 'Logo 链接',
1272
1536
  primaryColor: '主色调',
1273
1537
  faviconUrl: '网站图标链接',
@@ -1294,13 +1558,12 @@ const zh = {
1294
1558
  appearance: '外观',
1295
1559
  rowHeight: '行高',
1296
1560
  livePreview: '实时预览',
1297
- stepBasicDesc: '名称、标题和布局',
1561
+ stepBasicDesc: '名称、标题和图标',
1298
1562
  stepObjectsDesc: '选择业务对象',
1299
1563
  stepNavigationDesc: '构建导航树',
1300
1564
  stepBrandingDesc: 'Logo、颜色和图标',
1301
1565
  noObjectsFound: '未找到对象。',
1302
1566
  noNavItemsHint: '暂无导航项。请在上一步选择对象或手动添加项目。',
1303
- separator: '分隔线',
1304
1567
  separatorLabel: '— 分隔线 —',
1305
1568
  newGroup: '新建分组',
1306
1569
  newLink: '新建链接',
@@ -1334,6 +1597,7 @@ const zh = {
1334
1597
  navTypeSeparator: '分隔线',
1335
1598
  navTypeAction: '操作',
1336
1599
  navTypeComponent: '组件',
1600
+ navTypeDoc: '文档',
1337
1601
  navEditIcon: '编辑图标',
1338
1602
  navToggleVisible: '切换可见性',
1339
1603
  navHidden: '已隐藏',
@@ -1411,11 +1675,8 @@ const zh = {
1411
1675
  defaultValue: '默认值',
1412
1676
  placeholder: '占位文本',
1413
1677
  referenceTo: '引用对象',
1414
- formula: '公式',
1415
1678
  options: '选项',
1416
1679
  addOption: '添加选项',
1417
- validationRules: '验证规则',
1418
- addRule: '添加规则',
1419
1680
  systemBadge: '系统',
1420
1681
  ungrouped: '通用',
1421
1682
  deleteConfirmTitle: '删除字段?',
@@ -1434,32 +1695,60 @@ const zh = {
1434
1695
  },
1435
1696
  },
1436
1697
  console: {
1698
+ studio: {
1699
+ title: 'Studio',
1700
+ accessRequired: '你需要 Studio 访问权限才能打开 Studio。',
1701
+ },
1437
1702
  saveAdvisoryTitle: '已保存 — 编辑检查提出了 {{count}} 条建议',
1703
+ saveAdvisoryTitle_one: '已保存 — 编辑检查提出了 {{count}} 条建议',
1704
+ saveAdvisoryTitle_other: '已保存 — 编辑检查提出了 {{count}} 条建议',
1705
+ publishAdvisoryTitle: '已发布 — 编辑检查提出了 {{count}} 条建议',
1706
+ publishAdvisoryTitle_one: '已发布 — 编辑检查提出了 {{count}} 条建议',
1707
+ publishAdvisoryTitle_other: '已发布 — 编辑检查提出了 {{count}} 条建议',
1708
+ importMappingsUnavailable: "无法加载 {{object}} 的已保存导入映射",
1709
+ importMappingsRefused: "服务器拒绝了此请求,因此该列表为空是因为读取失败,而不是因为没有注册任何映射。请重新登录,或联系管理员申请访问权限。",
1710
+ importMappingsUnreadable: "该列表为空是因为读取失败,而不是因为没有注册任何映射。请重试;如果反复出现,请反馈此问题。",
1711
+ savedViewsUnavailable: "无法加载 {{object}} 的已保存视图",
1712
+ savedViewsRefused: "服务器拒绝了此请求,因此该列表为空是因为读取失败,而不是因为该对象没有已保存的视图。请重新登录,或联系管理员申请访问权限。",
1713
+ savedViewsUnreadable: "该列表为空是因为读取失败,而不是因为该对象没有已保存的视图。请重试;如果反复出现,请反馈此问题。",
1438
1714
  title: 'ObjectStack 控制台',
1439
- initializing: '正在初始化应用程序…',
1715
+ initializing: '正在打开你的控制台…',
1716
+ skipToContent: '跳到主要内容',
1440
1717
  search: '搜索…',
1441
1718
  breadcrumb: {
1442
- dashboards: '仪表盘',
1443
- pages: '页面',
1444
- reports: '报告',
1445
1719
  system: '系统',
1720
+ marketplace: '应用市场',
1721
+ settings: '设置',
1722
+ apps: '应用',
1723
+ profile: '个人资料',
1724
+ approvals: '审批',
1725
+ aiApprovals: 'AI 审批',
1726
+ auditLog: '审计日志',
1446
1727
  },
1447
1728
  nav: {
1448
1729
  pinItem: '固定 {{name}}',
1449
1730
  unpinItem: '取消固定 {{name}}',
1450
- dragToReorder: '拖动以重新排序',
1451
1731
  favorites: '收藏',
1732
+ launcherLabel: '应用启动台',
1733
+ menuLabel: '应用导航',
1734
+ menuEmpty: '此应用没有你可以打开的导航项。',
1735
+ itemMenu: '{{name}} 的更多操作',
1736
+ openInNewTab: '在新标签页打开',
1737
+ copyLink: '复制链接',
1738
+ linkCopied: '链接已复制到剪贴板',
1739
+ linkCopyFailed: '复制链接失败',
1740
+ design: '设计',
1452
1741
  },
1453
1742
  settingsHub: {
1454
1743
  title: '设置',
1455
- subtitle: '配置工作区、集成与功能开关。',
1744
+ subtitle: '配置系统、集成与功能开关。',
1456
1745
  loadError: '加载设置失败',
1457
1746
  empty: '尚未注册任何设置。插件可通过 SettingsService 注册设置清单。',
1458
1747
  settingsCount: '{{n}} 项设置',
1459
1748
  beta: 'Beta',
1460
1749
  // 分类小标题,按 manifest 的 `category` 值取键;未知(插件自定义)分类回退到原始字符串。
1461
1750
  categories: {
1462
- Workspace: '工作区',
1751
+ Workspace: '常规',
1463
1752
  Communication: '通讯',
1464
1753
  Security: '安全',
1465
1754
  Infrastructure: '基础设施',
@@ -1486,18 +1775,31 @@ const zh = {
1486
1775
  unsavedCount: '{{count}} 项未保存的更改',
1487
1776
  unsavedCount_one: '{{count}} 项未保存的更改',
1488
1777
  unsavedCount_other: '{{count}} 项未保存的更改',
1778
+ fieldErrorsToast: '{{count}} 项设置需要处理:{{settings}}',
1779
+ fieldErrorsToast_one: '{{count}} 项设置需要处理:{{settings}}',
1780
+ fieldErrorsToast_other: '{{count}} 项设置需要处理:{{settings}}',
1489
1781
  cryptoRefusalTitle: '此部署无法加密机密信息',
1490
1782
  cryptoRefusalSubjectSuffix: '被声明为加密字段,因此未写入任何内容。',
1491
1783
  cryptoRefusalNoSubject: '声明为加密的值被拒绝,因此未写入任何内容。',
1492
1784
  cryptoRefusalToast: '无法加密机密信息:{{subject}}',
1493
1785
  cryptoRefusalToastNoSubject: '无法加密机密信息',
1786
+ sourceBadgeInherited: '继承自{{source}}',
1787
+ sourceBadgeOverrides: '覆盖{{source}}',
1788
+ resetToDefault: '恢复默认',
1789
+ envLockBadge: '环境变量锁定',
1790
+ envLockBadgeTitle: '由环境变量固定,无法在界面中编辑。',
1791
+ deprecatedBadge: '已弃用',
1792
+ deprecatedBadgeReplacedBy: '已弃用 → {{replacedBy}}',
1793
+ unsupportedSpecifierType: '不支持的设置项类型:{{type}}',
1794
+ },
1795
+ workspaceTimezonePrompt: {
1796
+ title: '设置系统时区',
1797
+ description: '本系统仍在使用平台默认时区 {{current}}。系统时区决定公式中“今天”的含义、报表如何按日期分组,以及日期和时间如何显示,对系统内所有人生效。下方已填入你的浏览器时区。',
1798
+ laterHint: '之后可随时在“设置”页面中修改。',
1799
+ decline: '保持默认',
1800
+ confirm: '设置时区',
1801
+ saved: '系统时区已设置为 {{zone}}',
1494
1802
  },
1495
- loadingSteps: {
1496
- connecting: '正在连接数据源',
1497
- loadingConfig: '正在加载配置',
1498
- preparingWorkspace: '正在准备工作区',
1499
- },
1500
- loadingHint: '初始化新环境可能需要几秒钟。',
1501
1803
  error: {
1502
1804
  connectionFailed: '无法连接到服务器',
1503
1805
  serverUnreachable: '无法访问服务器 {{url}}。',
@@ -1521,21 +1823,20 @@ const zh = {
1521
1823
  groups: {
1522
1824
  general: '通用',
1523
1825
  navigation: '导航',
1524
- dataViews: '数据视图',
1525
1826
  aiChat: 'AI 助手',
1526
- preferences: '偏好设置',
1527
1827
  },
1528
1828
  openCommandPalette: '打开命令面板',
1529
1829
  showShortcuts: '显示键盘快捷键',
1530
1830
  closeDialog: '关闭对话框/面板',
1531
1831
  toggleSidebar: '切换侧边栏',
1532
- focusSearch: '聚焦搜索',
1533
- createRecord: '新建记录',
1534
- refreshData: '刷新数据',
1535
- editRecord: '编辑选中记录',
1536
1832
  newChat: '新建对话',
1537
1833
  toggleChatsList: '切换对话列表',
1538
- toggleDarkMode: '切换深色模式',
1834
+ goHome: '返回首页',
1835
+ },
1836
+ reportIndex: {
1837
+ title: '报表',
1838
+ emptyTitle: '暂无报表',
1839
+ emptyDescription: '此应用没有你可以打开的报表。',
1539
1840
  },
1540
1841
  commandPalette: {
1541
1842
  title: '命令面板',
@@ -1545,6 +1846,8 @@ const zh = {
1545
1846
  records: '记录',
1546
1847
  recentRecords: '最近访问',
1547
1848
  objects: '对象',
1849
+ packages: '软件包',
1850
+ flows: '流程',
1548
1851
  dashboards: '仪表盘',
1549
1852
  pages: '页面',
1550
1853
  reports: '报表',
@@ -1568,13 +1871,18 @@ const zh = {
1568
1871
  },
1569
1872
  usage: {
1570
1873
  title: 'AI 用量',
1571
- meterBuild: 'AI 搭建',
1572
- meterAsk: '数据问询',
1874
+ poolUsed: '已用 {{percent}}',
1573
1875
  statusOk: '额度充足',
1574
1876
  statusLow: '即将用完',
1575
1877
  statusFull: '额度已用完',
1576
1878
  resetsDaily: '今晚重置',
1577
1879
  resetsMonthly: '下个周期重置',
1880
+ resetsWeeklyDays: '{{count}} 天后重置',
1881
+ resetsWeeklyDays_one: '{{count}} 天后重置',
1882
+ resetsWeeklyDays_other: '{{count}} 天后重置',
1883
+ resetsWeeklyHours: '{{count}} 小时后重置',
1884
+ resetsWeeklyHours_one: '{{count}} 小时后重置',
1885
+ resetsWeeklyHours_other: '{{count}} 小时后重置',
1578
1886
  ctaUpgrade: '升级以继续使用',
1579
1887
  ctaTopUp: '购买额度包以继续',
1580
1888
  ariaLabel: 'AI 用量:{{status}}',
@@ -1587,6 +1895,31 @@ const zh = {
1587
1895
  share: '分享',
1588
1896
  shareTitle: '分享此对话',
1589
1897
  shareDisabledTitle: '开始对话后即可分享',
1898
+ buildDoctor: '构建诊断',
1899
+ buildDoctorTitle: '构建诊断 — 实际生效了哪些变更?',
1900
+ buildDoctorDisabledTitle: '请先发送一条消息',
1901
+ buildDoctorDrawer: {
1902
+ description: '智能体声称的变更与实际已生效的内容对照。只读诊断。',
1903
+ reconciling: '正在核对…',
1904
+ notAvailable: '不可用——未找到该对话,或你没有访问权限。',
1905
+ untitled: '(无标题)',
1906
+ summary: '{{turns}} 轮 · {{messages}} 条消息 · {{tokens}} tok · LLM {{seconds}} 秒',
1907
+ allLive: '全部 {{count}} 项尝试的变更均已生效——没有丢失。',
1908
+ discrepancies: '{{count}} 处不一致——对话中所说的与实际生效的内容不符。',
1909
+ orphanedTitle: '已提议但从未应用',
1910
+ orphanedHint: '智能体提议了确认卡片,但之后没有任何一轮应用它——该变更被静默丢弃。',
1911
+ missingTitle: '声称已应用但缺失',
1912
+ missingHint: '工具结果称已应用,但该产物并未在 sys_metadata 中生效。',
1913
+ toolErrorsTitle: '工具错误',
1914
+ toolErrorsHint: '构建期间返回错误的工具调用。',
1915
+ verifyTitle: '构建检查(verify_build)',
1916
+ yourApp: '你的应用:',
1917
+ noIssues: '0 个问题',
1918
+ issueCount: '{{count}} 个问题',
1919
+ platformNoise: '已隐藏 {{count}} 条平台 sys_* 发现',
1920
+ pendingActions: '待处理操作',
1921
+ timeline: '时间线({{count}})',
1922
+ },
1590
1923
  newChat: '新对话',
1591
1924
  searchChats: '搜索对话…',
1592
1925
  noChatsYet: '暂无对话',
@@ -1609,6 +1942,8 @@ const zh = {
1609
1942
  liveCanvasUnlisted: '运行预览 · {{app}}(未发布 · 仅自己可见)',
1610
1943
  loadingAgents: '正在加载助手…',
1611
1944
  askAnything: '输入你的问题…',
1945
+ askOrChangeApp: '问问数据,或让我改改这个应用…',
1946
+ describeAppToBuild: '描述你想搭建的应用,或要改的地方…',
1612
1947
  emptyTitle: '开始对话',
1613
1948
  emptyDescription: '可以直接提问,助手会结合当前应用上下文提供帮助。',
1614
1949
  switchAssistant: '切换助手',
@@ -1616,7 +1951,7 @@ const zh = {
1616
1951
  empty: {
1617
1952
  build: {
1618
1953
  title: '用 AI 搭建',
1619
- description: '用自然语言描述一个应用或流程 —— 我会起草对象、界面和自动化,随后你审阅并发布。',
1954
+ description: '用自然语言描述一个应用 —— 我会起草对象、界面和示例数据,随后你审阅并发布。',
1620
1955
  },
1621
1956
  ask: {
1622
1957
  title: '向你的数据提问',
@@ -1625,17 +1960,22 @@ const zh = {
1625
1960
  editApp: {
1626
1961
  title: '正在编辑「{{app}}」',
1627
1962
  titleGeneric: '编辑此应用',
1628
- description: '想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或自动化,或调整已有内容。',
1963
+ description: '想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或仪表盘,或调整已有内容。',
1629
1964
  },
1630
1965
  },
1631
1966
  clearConversation: '清空',
1632
1967
  sendHint: '发送',
1968
+ newlineHint: '换行',
1633
1969
  agentActivity: '执行过程',
1634
1970
  toolCompleted: '已完成',
1635
1971
  toolRunning: '运行中',
1636
1972
  toolAwaitingApproval: '等待确认',
1637
1973
  toolFailed: '失败',
1638
1974
  toolDetailsHidden: '已隐藏工具参数和原始结果,仅保留过程摘要。',
1975
+ toolDenyReason: '操作员已在对话中拒绝',
1976
+ builderHandoffTitle: '在构建器中搭建',
1977
+ builderHandoffOpen: '在构建器中打开 →',
1978
+ builderHandoffSuperseded: '已有更新的请求',
1639
1979
  copy: '复制',
1640
1980
  copied: '已复制',
1641
1981
  regenerate: '重新生成',
@@ -1652,7 +1992,7 @@ const zh = {
1652
1992
  publishOk: '已发布,对象已生效。',
1653
1993
  seedWarn: '已发布,但部分示例数据未能载入。',
1654
1994
  openBuiltApp: '打开应用',
1655
- designBuiltApp: '进入 Studio 继续完善',
1995
+ viewBuiltAppInStudio: '在 Studio 中查看',
1656
1996
  previewDraft: '预览',
1657
1997
  previewApp: '预览应用',
1658
1998
  resizeSplit: '调整对话与预览的宽度',
@@ -1709,23 +2049,41 @@ const zh = {
1709
2049
  recentRecords: '帮我列出最近创建的 5 条记录。',
1710
2050
  recordCounts: '统计每个对象的记录数。',
1711
2051
  },
2052
+ // cloud#1984 — these five chips are the maker's own recommendations, so
2053
+ // they may only ask for what ADR-0112 v1 BUILDS: objects, fields, views
2054
+ // (grid/kanban/calendar/gallery), pages, dashboards and sample data. No
2055
+ // wording that promises autonomous behaviour (alert / remind / notify /
2056
+ // automate / status workflow) — v1 has no flows, actions or schedules, and
2057
+ // the model silently degrades such a request into a board or a filtered
2058
+ // view, so the chip would promise an alert and deliver a page. REVERT to
2059
+ // the automation wording when ADR-0112 v2 re-adds flows and actions.
1712
2060
  metadataAssistant: {
1713
- buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,并建立它们之间的关系。',
1714
- buildApp: '做一个项目管理应用:项目、任务、成员。',
1715
- buildFlow: '设计一个工单系统:工单、优先级、状态流转。',
1716
- buildInventory: '做一个库存管理应用:商品、库存量、供应商,以及低库存预警。',
1717
- buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段和面试记录。',
2061
+ buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,以及一个按阶段汇总商机金额的仪表盘。',
2062
+ buildApp: '做一个项目管理应用:项目、任务(负责人、截止日期),按状态分组的看板,以及按截止日期的日历视图。',
2063
+ buildFlow: '设计一个工单系统:工单、优先级、状态(下拉),以及按状态分组的看板。',
2064
+ buildInventory: '做一个库存管理应用:商品、库存量、供应商,并用一个视图筛出低于安全库存的商品。',
2065
+ buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段字段,以及按阶段分组的看板。',
1718
2066
  },
1719
2067
  generic: {
1720
2068
  help: '你可以帮我做什么?',
1721
2069
  availableObjects: '列出可用的数据对象。',
1722
2070
  recentActivity: '总结我的最近动态。',
1723
2071
  },
2072
+ // objectui#7709 — the edit-mode starters, shown when the maker is bound
2073
+ // to an EXISTING app (`?package=`). Same rule as the five above: they
2074
+ // may only ask for what ADR-0112 v1 BUILDS. The fourth chip used to be
2075
+ // `addAutomation` ("an approval, a status flow, or a notification") and
2076
+ // every capability it named is refused by v1 (cloud#1956 / PR #1970), so
2077
+ // it now asks for sample data — `seed` IS on v1's whitelist, and having
2078
+ // no data is what an existing app most often lacks. REVERT: when
2079
+ // ADR-0112 v2 re-adds flows and actions, THIS chip's automation wording
2080
+ // comes back as `addAutomation`; the retired string is pinned for every
2081
+ // pack in `packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts`.
1724
2082
  editApp: {
1725
2083
  addField: '给某个对象加一个字段。',
1726
2084
  addObject: '新增一个对象,并关联到已有对象。',
1727
2085
  addDashboard: '加一个展示关键指标的仪表盘。',
1728
- addAutomation: '加一个自动化 —— 审批、状态流转或通知。',
2086
+ addSampleData: '给现有对象补一批贴近真实的示例数据,好拿去演示。',
1729
2087
  },
1730
2088
  },
1731
2089
  // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
@@ -1771,6 +2129,7 @@ const zh = {
1771
2129
  collapse: '收起对话',
1772
2130
  maximize: '以完整页面打开',
1773
2131
  open: '打开助手',
2132
+ planAwaitingApproval: '有一个方案等待确认',
1774
2133
  },
1775
2134
  group: {
1776
2135
  today: '今天',
@@ -1780,6 +2139,21 @@ const zh = {
1780
2139
  older: '更早',
1781
2140
  },
1782
2141
  },
2142
+ // objectui#9954 — see the `en` pack for what raises each case.
2143
+ readRate: {
2144
+ ratioTitle: '本系统读取量异常',
2145
+ ratio: '每写入 1 行就读取 {{ratio}} 行。平台会标记高于 {{threshold}} 的比率。没有任何东西被限制或阻断;这只是一份报告,便于检查读取方式。',
2146
+ noWritesTitle: '本系统只有读取、完全没有写入',
2147
+ noWrites: '有行被读取,却完全没有任何写入,因此读取比率没有上限。这是最严重的读数。平台会标记高于 {{threshold}} 的比率。没有任何东西被限制或阻断;这只是一份报告,便于检查读取方式。',
2148
+ },
2149
+ // objectui#10439 — see the `en` pack for what raises each case.
2150
+ storageUsage: {
2151
+ warningTitle: '存储空间即将用满',
2152
+ warning: '已用 {{used}} MB / {{limit}} MB。存储用满后,上传与导入将暂停。',
2153
+ blockedTitle: '存储已满,上传与导入已暂停',
2154
+ blocked: '已用 {{used}} MB / {{limit}} MB。现有数据不受影响,读取、导出与单条记录编辑照常。',
2155
+ upgrade: '升级以继续',
2156
+ },
1783
2157
  errors: {
1784
2158
  somethingWentWrong: '出错了',
1785
2159
  unexpectedError: '渲染此视图时发生意外错误。',
@@ -1829,11 +2203,14 @@ const zh = {
1829
2203
  objectView: {
1830
2204
  systemViewReadonly: '系统视图由代码定义,只读。',
1831
2205
  cannotEditMetaView: '该视图为内置视图,由代码定义,无法修改。',
2206
+ resetView: '重置视图',
2207
+ resetViewTitle: '将此视图的排序、筛选和列宽恢复为视图自身的设置。只影响你自己。',
1832
2208
  cannotDeleteMetaView: '该视图为内置视图,由代码定义,无法删除。',
1833
2209
  expandToPage: '以完整页面打开',
1834
2210
  objectNotFound: '未找到对象',
1835
2211
  objectNotFoundDescription: '对象"{{objectName}}"在当前配置中不存在。',
1836
2212
  objectNotFoundHint: '请检查您的应用导航设置或从侧边栏选择其他对象。',
2213
+ objectPackageDisabled: '对象“{{objectName}}”所属的软件包已被禁用,因此当前不提供该对象。',
1837
2214
  filterOrNotSavable: '该筛选条件之间使用「或」,保存到视图暂不支持这种结构。它仍会作用于当前列表 —— 取消「或」分组后才能保存到视图。',
1838
2215
  filterNestedNotSavable: '该筛选使用了嵌套条件分组,保存到视图不支持这种结构。请改为单层条件列表后再保存到视图。',
1839
2216
  allRecords: '所有记录',
@@ -1841,14 +2218,17 @@ const zh = {
1841
2218
  import: '导入',
1842
2219
  importTitle: '从 CSV 文件导入',
1843
2220
  importedToast: '成功导入 {{count}} 行。',
2221
+ importedToast_one: '成功导入 {{count}} 行。',
2222
+ importedToast_other: '成功导入 {{count}} 行。',
1844
2223
  importedWithSkipped: '已导入 {{ok}} 行;跳过 {{skipped}} 行。',
1845
2224
  configureView: '配置视图',
1846
- toolbar: '工具栏',
1847
2225
  toolbarEnabledCount: '已启用 {{count}}/{{total}} 项',
1848
2226
  searchFields: '搜索字段…',
1849
2227
  title: '标题',
1850
2228
  viewType: '视图类型',
1851
2229
  recordCount: '{{count}} 条记录',
2230
+ recordCount_one: '{{count}} 条记录',
2231
+ recordCount_other: '{{count}} 条记录',
1852
2232
  save: '保存',
1853
2233
  discard: '丢弃',
1854
2234
  createView: '创建视图',
@@ -1859,6 +2239,8 @@ const zh = {
1859
2239
  deleteViewTitle: '删除视图',
1860
2240
  deleteViewConfirm: '确定要删除视图 "{{name}}" 吗?此操作无法撤销。',
1861
2241
  bulkDeleteConfirm: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
2242
+ bulkDeleteConfirm_one: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
2243
+ bulkDeleteConfirm_other: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
1862
2244
  duplicateViewName: '已存在同名视图。',
1863
2245
  viewTypeGrid: '表格',
1864
2246
  viewTypeGridDesc: '电子表格风格的记录表格。',
@@ -1911,16 +2293,23 @@ const zh = {
1911
2293
  chartTypePie: '饼图',
1912
2294
  chartTypeArea: '面积图',
1913
2295
  chartTypeScatter: '散点图',
1914
- xAxisField: 'X 轴字段',
1915
- xAxisFieldHelp: '用于分类或时间维度的字段。',
1916
- yAxisField: 'Y 轴字段',
1917
- yAxisFieldHelp: '用于数值聚合的字段。',
1918
- groupBy: '分组依据',
2296
+ dataset: '数据集',
2297
+ datasetHelp: '图表从该对象的这个数据集读取数值。',
2298
+ chartMeasure: '度量',
2299
+ chartMeasureHelp: '在数值轴上绘制的数据集度量。',
2300
+ chartDimension: '维度',
2301
+ chartDimensionHelp: '用于对数值分组的数据集维度(可选)。',
2302
+ viewTypeUnavailableDataset: '该对象没有可用于图表的数据集。',
2303
+ noDatasetMeasure: '该数据集未声明可绘制的度量。',
1919
2304
  endDateField: '结束日期字段',
1920
2305
  ufTabs: '标签页',
1921
2306
  ufAddField: '+ 添加筛选字段…',
1922
2307
  ufShowAllRecords: '显示"全部记录"标签页',
1923
2308
  },
2309
+ runtimeDraft: {
2310
+ publishFailed: '发布失败',
2311
+ discardFailed: '放弃草稿失败',
2312
+ },
1924
2313
  localeSwitcher: {
1925
2314
  label: '语言',
1926
2315
  },
@@ -1941,9 +2330,8 @@ const zh = {
1941
2330
  signingIn: '正在登录…',
1942
2331
  ssoHandoff: '继续前往 {{target}}',
1943
2332
  devAdminHint: {
1944
- title: '开发实例',
1945
- body: '可使用内置的开发管理员登录:',
1946
- dismiss: '关闭',
2333
+ title: '本地开发实例',
2334
+ signIn: '以开发管理员登录',
1947
2335
  },
1948
2336
  errors: {
1949
2337
  invalidCredentials: '邮箱或密码错误,请重试。',
@@ -1962,6 +2350,22 @@ const zh = {
1962
2350
  resendOtpCountdownText: '{seconds} 秒后可重新发送',
1963
2351
  usePhoneOtpText: '使用验证码登录',
1964
2352
  usePasswordSignInText: '改用密码登录',
2353
+ socialButton: '使用 {provider} 继续',
2354
+ orText: '或使用邮箱继续',
2355
+ ssoButton: '使用 SSO 登录',
2356
+ ssoOnlyDescription: '使用你所在组织的单点登录进行登录',
2357
+ usePasswordText: '改用密码登录',
2358
+ backToSsoText: '返回单点登录',
2359
+ // objectui#12600 — the console login card's own header, the password
2360
+ // field's reveal toggle, and the footer's legal links.
2361
+ welcomeTitle: '欢迎回来',
2362
+ welcomeDescription: '登录后继续你的工作',
2363
+ showPasswordText: '显示密码',
2364
+ hidePasswordText: '隐藏密码',
2365
+ footer: {
2366
+ privacy: '隐私',
2367
+ terms: '条款',
2368
+ },
1965
2369
  },
1966
2370
  register: {
1967
2371
  title: '创建账户',
@@ -1980,8 +2384,12 @@ const zh = {
1980
2384
  submittingButton: '创建中…',
1981
2385
  hasAccountText: '已有账户?',
1982
2386
  signInText: '登录',
2387
+ socialButton: '使用 {provider} 注册',
2388
+ orText: '或使用邮箱继续',
1983
2389
  errors: {
1984
2390
  userExists: '该邮箱已被注册,请直接登录或更换邮箱。',
2391
+ selfRegistrationClosed: '本系统未开放自助注册,请联系管理员获取邀请。',
2392
+ emailDomainNotAllowed: '该邮箱的域名不允许在此注册,请使用组织邮箱,或联系管理员获取邀请。',
1985
2393
  },
1986
2394
  verifyInbox: {
1987
2395
  title: '请检查您的邮箱',
@@ -2021,7 +2429,7 @@ const zh = {
2021
2429
  },
2022
2430
  setPassword: {
2023
2431
  title: '设置一个备用密码',
2024
- description: '您是通过单点登录进入的。设置一个本地密码,这样即使单点登录不可用,您仍能直接登录此环境。',
2432
+ description: '您是通过单点登录进入的。设置一个本地密码,这样即使单点登录不可用,您仍能直接登录。',
2025
2433
  email: '邮箱',
2026
2434
  newPassword: '新密码',
2027
2435
  confirmPassword: '确认密码',
@@ -2071,7 +2479,7 @@ const zh = {
2071
2479
  checkSpam: '没有收到邮件?请检查垃圾邮件文件夹或联系支持。',
2072
2480
  or: '或',
2073
2481
  // objectui#3546 slice three.
2074
- resendUnavailable: '此环境可能未配置邮件发送服务。如果问题持续存在,请联系支持。',
2482
+ resendUnavailable: '本系统可能未配置邮件发送服务。如果问题持续存在,请联系支持。',
2075
2483
  },
2076
2484
  setup: {
2077
2485
  welcomeTitle: '欢迎使用 ObjectStack',
@@ -2115,7 +2523,7 @@ const zh = {
2115
2523
  disabledDescription: '此部署未启用设备授权,因此无法在此批准该设备。',
2116
2524
  },
2117
2525
  shell: {
2118
- tenantHostHint: '您正在登录此工作区',
2526
+ tenantHostHint: '您正在登录本系统',
2119
2527
  },
2120
2528
  layout: {
2121
2529
  headline: '更快地构建强大的业务应用。',
@@ -2125,6 +2533,7 @@ const zh = {
2125
2533
  signOut: '改为退出登录',
2126
2534
  password: {
2127
2535
  title: '您的密码已过期',
2536
+ resetTitle: '您必须修改密码',
2128
2537
  fallbackMessage: '请设置新密码后继续。',
2129
2538
  current: '当前密码',
2130
2539
  next: '新密码',
@@ -2150,6 +2559,11 @@ const zh = {
2150
2559
  verifying: '正在验证…',
2151
2560
  invalidCode: '验证码无效,请重试。',
2152
2561
  },
2562
+ impersonation: {
2563
+ passwordTitle: '{{user}} 必须修改密码',
2564
+ mfaTitle: '{{user}} 必须设置双重验证',
2565
+ body: '您正在以 {{user}} 的身份操作,此操作只能由该用户本人完成。请结束模拟登录,返回您自己的账户。',
2566
+ },
2153
2567
  },
2154
2568
  },
2155
2569
  // objectui#3546 slice three — the /oauth/consent screen.
@@ -2158,12 +2572,17 @@ const zh = {
2158
2572
  title: '{{appName}} 请求访问您的账户',
2159
2573
  request: '{{appName}} 正在请求授权{{suffix}}。',
2160
2574
  unknownApp: '某个应用',
2575
+ unidentified: '无法识别此应用。',
2576
+ clientId: '客户端 ID',
2161
2577
  willAllow: '此应用将能够:',
2162
2578
  scope: {
2163
2579
  openid: '确认您的身份',
2164
2580
  profile: '读取您的基本资料(姓名、头像)',
2165
2581
  email: '读取您的邮箱地址',
2166
2582
  offlineAccess: '保持登录状态(刷新访问权限)',
2583
+ dataRead: '读取记录(不超出您自己的权限)',
2584
+ dataWrite: '创建、修改和删除记录(不超出您自己的权限)',
2585
+ actionsExecute: '代表您运行操作(不超出您自己的权限)',
2167
2586
  },
2168
2587
  deny: '拒绝',
2169
2588
  authorize: '授权',
@@ -2194,11 +2613,20 @@ const zh = {
2194
2613
  role: '角色',
2195
2614
  save: '保存更改',
2196
2615
  },
2616
+ language: {
2617
+ title: '语言',
2618
+ description: '发送给您的通知和消息所使用的语言。界面语言另行设置,在地球图标菜单中切换。',
2619
+ label: '首选语言',
2620
+ systemDefault: '使用部署默认值',
2621
+ save: '保存',
2622
+ saved: '语言偏好已更新。',
2623
+ readOnly: '您账户的语言由管理员管理。',
2624
+ },
2197
2625
  password: {
2198
2626
  changeTitle: '修改密码',
2199
2627
  setTitle: '设置本地密码',
2200
- changeDescription: '更新您在此环境登录所用的密码。',
2201
- setDescription: '您通过单点登录进入。设置本地密码后,也可以在此环境使用邮箱和密码登录。',
2628
+ changeDescription: '更新您登录所用的密码。',
2629
+ setDescription: '您通过单点登录进入。设置本地密码后,也可以使用邮箱和密码登录。',
2202
2630
  current: '当前密码',
2203
2631
  new: '新密码',
2204
2632
  password: '密码',
@@ -2207,7 +2635,7 @@ const zh = {
2207
2635
  mismatch: '两次输入的密码不一致',
2208
2636
  enterCurrent: '请输入当前密码',
2209
2637
  changed: '密码已修改。',
2210
- localSet: '本地密码已设置。现在您可以在此环境使用邮箱和密码登录。',
2638
+ localSet: '本地密码已设置。现在您可以使用邮箱和密码登录。',
2211
2639
  changeAction: '修改密码',
2212
2640
  setAction: '设置密码',
2213
2641
  },
@@ -2222,22 +2650,21 @@ const zh = {
2222
2650
  unknown: '发生未知错误。',
2223
2651
  },
2224
2652
  workspace: {
2225
- label: '工作区',
2226
- default: '我的工作区',
2227
- switch: '切换工作区',
2228
- create: '创建工作区',
2229
- createTitle: '创建工作区',
2230
- createDescription: '工作区是团队协作的共享空间。',
2231
- createButton: '创建工作区',
2232
- nameLabel: '工作区名称',
2653
+ label: '组织',
2654
+ default: '我的组织',
2655
+ switch: '切换组织',
2656
+ createTitle: '创建组织',
2657
+ createDescription: '组织是团队协作的共享空间。',
2658
+ createButton: '创建组织',
2659
+ nameLabel: '组织名称',
2233
2660
  namePlaceholder: '例如:极客科技',
2234
2661
  slugLabel: 'URL 标识',
2235
2662
  slugHint: '用于 URL 中,仅支持小写字母、数字和连字符。',
2236
2663
  invite: '邀请成员',
2237
2664
  members: '成员',
2238
- settings: '工作区设置',
2665
+ settings: '组织设置',
2239
2666
  multiOrgDisabled: '此实例已禁用创建新组织。',
2240
- createFailed: '创建工作区失败',
2667
+ createFailed: '创建组织失败',
2241
2668
  },
2242
2669
  help: {
2243
2670
  keyboardShortcuts: '键盘快捷键',
@@ -2245,10 +2672,15 @@ const zh = {
2245
2672
  appDocs: '本应用文档',
2246
2673
  allDocs: '全部文档',
2247
2674
  onlineDocs: '在线文档',
2675
+ loadingDocumentation: '正在加载文档',
2676
+ about: '关于',
2677
+ aboutTitle: '关于此控制台',
2678
+ aboutDescription: '此控制台编译所用的构建。',
2679
+ aboutBuild: '控制台构建',
2680
+ aboutBuildUnknown: '未知构建(构建此控制台时未设置版本)',
2248
2681
  },
2249
2682
  sidebar: {
2250
2683
  settings: '设置',
2251
- help: '帮助',
2252
2684
  helpTooltip: '帮助与文档',
2253
2685
  activityFeed: '活动动态',
2254
2686
  notifications: '通知',
@@ -2260,20 +2692,19 @@ const zh = {
2260
2692
  packageManagement: '软件包管理',
2261
2693
  searchNavigation: '搜索导航…',
2262
2694
  recent: '最近使用',
2263
- favorites: '收藏',
2264
2695
  starred: '已收藏',
2265
2696
  removeFromFavorites: '从收藏中移除 {{name}}',
2697
+ allReports: '全部报表',
2266
2698
  },
2267
2699
  topbar: {
2268
2700
  aiAssistant: 'AI 助手',
2269
2701
  designInStudio: '在 Studio 中设计',
2702
+ editApp: '编辑应用',
2270
2703
  openAssistant: '打开{{name}}助手',
2271
2704
  offline: '离线',
2272
2705
  usersOnline: '当前在线用户',
2273
2706
  switchView: '切换视图',
2274
- switchObject: '切换对象',
2275
2707
  connection: {
2276
- connected: '已连接',
2277
2708
  connecting: '连接中…',
2278
2709
  reconnecting: '正在重新连接…',
2279
2710
  disconnected: '已断开连接',
@@ -2288,57 +2719,72 @@ const zh = {
2288
2719
  },
2289
2720
  home: {
2290
2721
  title: '首页',
2291
- subtitle: '您的工作区仪表盘',
2292
2722
  nav: '首页',
2293
2723
  allApps: '全部应用',
2294
2724
  yourApps: '我的应用',
2295
2725
  showMoreApps: '更多',
2296
2726
  showLess: '收起',
2297
2727
  continueEmpty: '你打开过的内容会显示在这里。',
2298
- actionCenter: {
2299
- title: '待办事项',
2300
- empty: '全部处理完毕',
2728
+ // objectui#12602 — Home's "My work" section: its heading, the link to the
2729
+ // full inbox, each column's title, "view all" link and empty line.
2730
+ myWork: {
2731
+ title: "我的工作",
2732
+ openInbox: "打开收件箱",
2733
+ viewAll: "查看全部",
2734
+ approvals: "待审批",
2735
+ approvalsEmpty: "没有待审批的事项",
2736
+ notifications: "通知",
2737
+ notificationsEmpty: "没有未读通知",
2301
2738
  },
2302
2739
  greetingMorning: '早上好',
2303
2740
  greetingAfternoon: '下午好',
2304
2741
  greetingEvening: '晚上好',
2305
2742
  greetingNight: '夜深了',
2306
- heroTagline: '从上次离开的地方继续,或者探索新的内容。',
2743
+ greetingSeparator: ',',
2744
+ greetingEnd: '。',
2745
+ search: '搜索应用、记录、页面…',
2746
+ summary: {
2747
+ approvals: '今天有 {{count}} 项待审批',
2748
+ approvals_one: '今天有 {{count}} 项待审批',
2749
+ approvals_other: '今天有 {{count}} 项待审批',
2750
+ none: '今天没有待办',
2751
+ },
2752
+ addApp: '添加应用',
2753
+ appOpened: '{{time}}打开',
2307
2754
  build: {
2308
2755
  title: '构建应用',
2309
- subtitle: '从零开始 — 设计对象、表单、自动化与界面。',
2310
- noCapability: '此工作区不提供构建应用功能 — 它需要「管理元数据」权限,而你的账号没有该权限。',
2756
+ noCapability: '本系统不提供构建应用功能 — 它需要「管理元数据」权限,而你的账号没有该权限。',
2311
2757
  },
2312
2758
  template: {
2313
2759
  title: '从模板开始',
2314
- subtitle: '从应用市场安装模板应用并按需定制。',
2315
2760
  marketplaceDisabled: '本运行时未配置应用市场,因此这里没有可安装的模板。',
2316
2761
  },
2317
2762
  open: '打开',
2318
- stats: {
2319
- apps: '应用',
2320
- starred: '收藏',
2321
- recent: '最近访问',
2322
- },
2323
- loading: '正在加载工作区…',
2324
- recent: '最近使用',
2325
- starred: '收藏',
2763
+ loading: '加载中…',
2326
2764
  welcome: '用 AI 搭建你的业务系统',
2327
2765
  welcomeDescription: '用一句话描述你的业务,AI 帮你生成对象、界面、API 和 agent 工具。也可以手动从零开始。',
2328
2766
  welcomeAdminDescription: '用一句话描述你的业务,AI 会为你生成对象、界面、API 和智能体工具;也可以从左侧菜单自行搭建。',
2329
2767
  welcomeAdminDescriptionNoBuild: '从左侧的「管理」菜单创建你的第一个应用。有了数据后,AI 助手可以帮你查询和分析。',
2330
2768
  welcomeAdminDescriptionNoAi: '从左侧的「管理」菜单创建你的第一个应用。',
2331
2769
  noAppsTitle: '还没有应用',
2332
- noAppsDescription: '工作区正在准备中——管理员共享给你的应用会显示在这里。',
2770
+ noAppsDescription: '系统正在准备中——管理员共享给你的应用会显示在这里。',
2333
2771
  buildWithAI: '用 AI 搭建',
2334
2772
  askAI: '问 AI',
2335
2773
  recoveryReminder: {
2336
- message: '建议设置一个备用密码,这样即使单点登录不可用,你仍能直接登录此环境。',
2774
+ message: '建议设置一个备用密码,这样即使单点登录不可用,你仍能直接登录。',
2337
2775
  cta: '设置密码',
2338
2776
  dismiss: '关闭',
2339
2777
  },
2340
2778
  pendingDrafts: {
2341
- message: '你有 {{count}} 项未发布的更改 —— 点击发布即可生效。',
2779
+ // objectui#12602 — the drafts row in Home's "My work" section: the
2780
+ // count, then the first draft names joined by `nameSeparator`, in
2781
+ // their package when they share one.
2782
+ title: "{{count}} 项未发布更改",
2783
+ title_one: "{{count}} 项未发布更改",
2784
+ title_other: "{{count}} 项未发布更改",
2785
+ inPackage: "{{names}} 在 {{package}} 包里等待发布",
2786
+ waiting: "{{names}} 等待发布",
2787
+ nameSeparator: "、",
2342
2788
  cta: '发布',
2343
2789
  publishing: '发布中…',
2344
2790
  published: '已发布!更改已生效。',
@@ -2356,12 +2802,10 @@ const zh = {
2356
2802
  browseMarketplace: '浏览应用市场',
2357
2803
  quickActions: {
2358
2804
  title: '快捷操作',
2359
- createApp: '创建应用',
2360
- createAppDesc: '从新应用开始',
2361
2805
  manageObjects: '管理对象',
2362
2806
  manageObjectsDesc: '配置数据模型',
2363
2807
  systemSettings: '系统设置',
2364
- systemSettingsDesc: '配置您的工作区',
2808
+ systemSettingsDesc: '配置您的系统',
2365
2809
  },
2366
2810
  recentApps: {
2367
2811
  title: '最近访问',
@@ -2369,7 +2813,11 @@ const zh = {
2369
2813
  object: '对象',
2370
2814
  dashboard: '仪表盘',
2371
2815
  page: '页面',
2816
+ report: '报表',
2817
+ package: '软件包',
2818
+ view: '列表视图',
2372
2819
  record: '记录',
2820
+ metadata: '元数据',
2373
2821
  },
2374
2822
  },
2375
2823
  starredApps: {
@@ -2396,6 +2844,11 @@ const zh = {
2396
2844
  manageAllApps: '管理所有应用',
2397
2845
  systemConsole: '系统控制台',
2398
2846
  noAppsConfigured: '尚未配置任何应用',
2847
+ allApps: '所有应用',
2848
+ editAppInStudio: '在 Studio 中编辑 {{app}}',
2849
+ backToHome: '返回首页',
2850
+ settings: '系统设置',
2851
+ productHome: '{{product}} 首页',
2399
2852
  },
2400
2853
  systemNav: {
2401
2854
  systemSettings: '系统设置',
@@ -2406,7 +2859,6 @@ const zh = {
2406
2859
  organizations: '组织',
2407
2860
  roles: '角色',
2408
2861
  configuration: '配置',
2409
- createApp: '创建应用',
2410
2862
  administration: '管理',
2411
2863
  datasources: '数据源',
2412
2864
  documentation: '文档',
@@ -2415,12 +2867,14 @@ const zh = {
2415
2867
  title: '最近动态',
2416
2868
  filter: '筛选',
2417
2869
  empty: '暂无最近动态',
2870
+ accessDenied: '您没有查看动态的权限。',
2418
2871
  viewAll: '查看全部动态',
2419
2872
  ariaLabel: '动态消息',
2420
2873
  typeCreate: '创建',
2421
2874
  typeUpdate: '更新',
2422
2875
  typeDelete: '删除',
2423
2876
  typeComment: '评论',
2877
+ typeSystem: '系统',
2424
2878
  relativeJustNow: '刚刚',
2425
2879
  relativeSecondsAgo: '{{count}} 秒前',
2426
2880
  relativeMinutesAgo: '{{count}} 分钟前',
@@ -2441,8 +2895,11 @@ const zh = {
2441
2895
  placeholder: '搜索对象、仪表板、页面、报表…',
2442
2896
  inputAriaLabel: '搜索对象、仪表板、页面、报表',
2443
2897
  resultsCount: '找到 {{count}} 条与“{{query}}”相关的结果',
2444
- resultsCountPlural: '找到 {{count}} 条与“{{query}}”相关的结果',
2898
+ resultsCount_one: '找到 {{count}} 条与“{{query}}”相关的结果',
2899
+ resultsCount_other: '找到 {{count}} 条与“{{query}}”相关的结果',
2445
2900
  itemsAvailable: '共 {{count}} 项可搜索',
2901
+ itemsAvailable_one: '共 {{count}} 项可搜索',
2902
+ itemsAvailable_other: '共 {{count}} 项可搜索',
2446
2903
  noResults: '未找到结果',
2447
2904
  noResultsHint: '请尝试调整搜索关键字',
2448
2905
  typeObjects: '对象',
@@ -2460,6 +2917,10 @@ const zh = {
2460
2917
  interfacePageSourceMissing: '此界面页引用了 “{{name}}”,但该来源不可用。',
2461
2918
  recordNotFound: '未找到记录',
2462
2919
  recordNotFoundDescription: '您查找的记录不存在或已被删除。',
2920
+ recordAccessDenied: '无权访问{{object}}记录',
2921
+ recordAccessDeniedDescription: '你没有查看此类记录的权限。如需访问,请联系管理员。',
2922
+ recordLoadFailed: '无法加载此记录',
2923
+ recordLoadFailedDescription: '加载时出错。请检查网络连接后重试。',
2463
2924
  pageNotFound: '未找到页面',
2464
2925
  pageNotFoundDescription: '未找到页面 “{{name}}”,可能已被删除或重命名。',
2465
2926
  dashboardNotFound: '未找到仪表板',
@@ -2469,10 +2930,18 @@ const zh = {
2469
2930
  noAppsConfigured: '尚未配置应用',
2470
2931
  noAppsConfiguredDescription: '当前没有任何已注册的应用。请创建您的第一个应用,或前往系统设置进行配置。',
2471
2932
  appNotAvailable: '应用不可用',
2472
- appNotAvailableDescription: '此应用尚不可用 —— 可能仍在发布中。请稍后重试。',
2933
+ appNotAvailableDescription: '此应用不可用 —— 请稍后重试。',
2934
+ appNotFound: '无法打开此应用',
2935
+ appNotFoundDescription: '服务器未返回你的账号可访问的此应用。',
2936
+ appUnreachable: '无法连接到服务器',
2937
+ appUnreachableDescription: '无法检查此应用。请稍后重试。',
2473
2938
  appAccessDenied: '你没有访问此应用的权限',
2474
2939
  appAccessDeniedDescription: '此应用存在,但你的账号未获授权打开它。请联系管理员为你开通访问权限。',
2475
2940
  appAccessDeniedHome: '返回首页',
2941
+ appNothingAvailable: '{{app}} 中暂时没有你可以使用的内容',
2942
+ appNothingAvailableDescription: '此应用中没有你的账号可以打开的页面。请联系管理员为你开通访问权限。',
2943
+ appNothingAvailableGrantDescription: '此应用中没有你的账号可以打开的页面。你可以在 Setup 中授予访问权限。',
2944
+ openSetup: '打开 Setup',
2476
2945
  createFirstApp: '创建您的第一个应用',
2477
2946
  systemSettings: '系统设置',
2478
2947
  back: '返回',
@@ -2493,6 +2962,9 @@ const zh = {
2493
2962
  publishing: '发布中…',
2494
2963
  exit: '退出预览',
2495
2964
  changes: '变更',
2965
+ pendingHere: '草稿预览 · 本页 {{count}} 项未发布',
2966
+ pendingHere_one: '草稿预览 · 本页 {{count}} 项未发布',
2967
+ pendingHere_other: '草稿预览 · 本页 {{count}} 项未发布',
2496
2968
  // 魔法时刻提示:刚搭好的草稿因为种子/示例数据要发布后才载入,预览里
2497
2969
  // 仪表板显示 0、列表显示“暂无内容”。直接说明,避免把空预览误当成搭坏了。
2498
2970
  sampleDataTitle: '示例数据将在发布后出现',
@@ -2512,11 +2984,65 @@ const zh = {
2512
2984
  detailNone: '未检测到差异 —— 草稿与已发布版本一致。',
2513
2985
  detailChangedKeys: '其他变更:',
2514
2986
  confirmNote: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2987
+ confirmNote_one: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2988
+ confirmNote_other: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2989
+ // objectui#11591 — the package-less sheet: no package to batch, so each
2990
+ // draft publishes by itself and one that fails stays pending.
2991
+ confirmNoteSeparate: '发布会逐个单独发布这 {{count}} 个待发布草稿:发布失败的草稿仍保持待发布,其余草稿照常发布。',
2992
+ confirmNoteSeparate_one: '发布会逐个单独发布这 {{count}} 个待发布草稿:发布失败的草稿仍保持待发布,其余草稿照常发布。',
2993
+ confirmNoteSeparate_other: '发布会逐个单独发布这 {{count}} 个待发布草稿:发布失败的草稿仍保持待发布,其余草稿照常发布。',
2515
2994
  publishConfirm: '全部发布',
2516
- // [objectui#5418] Pre-publish security-posture findings, shown next to
2995
+ summaryItems: '{{count}} 项',
2996
+ summaryItems_one: '{{count}} 项',
2997
+ summaryItems_other: '{{count}} 项',
2998
+ summaryType: '{{type}} {{n}}',
2999
+ typeCount: {
3000
+ object: '对象 {{count}}',
3001
+ object_one: '对象 {{count}}',
3002
+ object_other: '对象 {{count}}',
3003
+ view: '视图 {{count}}',
3004
+ view_one: '视图 {{count}}',
3005
+ view_other: '视图 {{count}}',
3006
+ page: '页面 {{count}}',
3007
+ page_one: '页面 {{count}}',
3008
+ page_other: '页面 {{count}}',
3009
+ dashboard: '仪表盘 {{count}}',
3010
+ dashboard_one: '仪表盘 {{count}}',
3011
+ dashboard_other: '仪表盘 {{count}}',
3012
+ app: '应用 {{count}}',
3013
+ app_one: '应用 {{count}}',
3014
+ app_other: '应用 {{count}}',
3015
+ action: '动作 {{count}}',
3016
+ action_one: '动作 {{count}}',
3017
+ action_other: '动作 {{count}}',
3018
+ report: '报表 {{count}}',
3019
+ report_one: '报表 {{count}}',
3020
+ report_other: '报表 {{count}}',
3021
+ flow: '流程 {{count}}',
3022
+ flow_one: '流程 {{count}}',
3023
+ flow_other: '流程 {{count}}',
3024
+ permission: '权限集 {{count}}',
3025
+ permission_one: '权限集 {{count}}',
3026
+ permission_other: '权限集 {{count}}',
3027
+ agent: '智能体 {{count}}',
3028
+ agent_one: '智能体 {{count}}',
3029
+ agent_other: '智能体 {{count}}',
3030
+ email_template: '邮件模板 {{count}}',
3031
+ email_template_one: '邮件模板 {{count}}',
3032
+ email_template_other: '邮件模板 {{count}}',
3033
+ },
3034
+ // objectui#12929 — the unchecked choice under an added object field whose
3035
+ // literal default the batch publish can write into the existing records.
3036
+ backfillOption: '补默认值({{count}} 条已有记录)',
3037
+ backfillOption_one: '补默认值({{count}} 条已有记录)',
3038
+ backfillOption_other: '补默认值({{count}} 条已有记录)',
3039
+ backfillOptionNoCount: '补默认值',
3040
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
2517
3041
  // the confirm button so a refusal the door would issue is read BEFORE
2518
3042
  // the click rather than as a toast after the batch rolled back.
2519
3043
  securityBlockTitle: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
3044
+ securityBlockTitle_one: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
3045
+ securityBlockTitle_other: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2520
3046
  securityBlockWhere: '请在对象的“设置 → 记录共享模型”中修改后重新发布。',
2521
3047
  },
2522
3048
  // ADR-0045 — the materialized-but-unlisted app banner
@@ -2541,7 +3067,7 @@ const zh = {
2541
3067
  revertLabel: '已撤销一处变更',
2542
3068
  applyLabel: '构建变更',
2543
3069
  revert: '撤销',
2544
- items: '项',
3070
+ items: '{{count}} 项',
2545
3071
  revertAction: '撤销',
2546
3072
  reverted: '已撤销 —— 该变更已还原。',
2547
3073
  revertFailed: '撤销失败',
@@ -2555,22 +3081,17 @@ const zh = {
2555
3081
  requiredError: '{{label}} 为必填项',
2556
3082
  lookupPlaceholder: '{{label}} 的记录 ID',
2557
3083
  lookupHelpText: '该参数未配置引用对象,无法使用记录选择器。请直接填写记录 ID,或联系管理员修正该动作参数。',
3084
+ unresolvedParam: '无法显示该参数:它所依据的字段不在对象元数据中,因此无法构建它所需的控件。请联系管理员修正该动作定义。',
3085
+ carryOverHint: '原样带入(只读)',
2558
3086
  cancel: '取消',
2559
3087
  confirm: '确认',
2560
3088
  uploading: '上传中…',
2561
- defaultActionTitle: '操作',
2562
- ok: '确定',
2563
3089
  },
2564
3090
  actionConfirm: {
2565
3091
  title: '确认操作',
2566
3092
  confirm: '继续',
2567
3093
  cancel: '取消',
2568
3094
  },
2569
- rowAction: {
2570
- openMenu: '更多操作',
2571
- edit: '编辑',
2572
- delete: '删除',
2573
- },
2574
3095
  navigationSync: {
2575
3096
  addedPage: '导航已更新:已添加页面 “{{name}}”',
2576
3097
  addedDashboard: '导航已更新:已添加仪表板 “{{name}}”',
@@ -2588,9 +3109,14 @@ const zh = {
2588
3109
  deleteFailed: '删除 {{label}} 失败',
2589
3110
  noRecordId: '未提供记录 ID',
2590
3111
  deleteConfirm: '确定要删除此记录吗?',
2591
- resetPackageSetConfirm: '该权限集随已安装的软件包发布,无法删除。删除操作将丢弃环境定制并把它重置为发布基线。是否继续?',
2592
- resetPackageSetSuccess: '权限集已重置为发布基线',
3112
+ deleteConfirmTitle: '删除{{label}}“{{name}}”?',
3113
+ bulkDeleteConfirmTitle: '删除 {{count}} 条 {{label}} 记录?',
3114
+ bulkDeleteConfirmTitle_one: '删除 {{count}} 条 {{label}} 记录?',
3115
+ bulkDeleteConfirmTitle_other: '删除 {{count}} 条 {{label}} 记录?',
3116
+ deleteConfirmButton: '删除',
2593
3117
  bulkDeleteSuccess: '已删除 {{count}} 条 {{label}} 记录',
3118
+ bulkDeleteSuccess_one: '已删除 {{count}} 条 {{label}} 记录',
3119
+ bulkDeleteSuccess_other: '已删除 {{count}} 条 {{label}} 记录',
2594
3120
  bulkDeletePartial: '成功 {{succeeded}} 条,失败 {{failed}} 条',
2595
3121
  },
2596
3122
  objectViewActions: {
@@ -2602,15 +3128,6 @@ const zh = {
2602
3128
  exportFailed: '导出失败:{{message}}',
2603
3129
  forecastSoon: '预测视图即将上线',
2604
3130
  },
2605
- recordDetail: {
2606
- viewersTooltip: '正在查看此记录的用户',
2607
- },
2608
- cellRender: {
2609
- empty: '空',
2610
- yes: '是',
2611
- no: '否',
2612
- systemFields: '系统字段',
2613
- },
2614
3131
  user: {
2615
3132
  profile: '个人资料',
2616
3133
  settings: '设置',
@@ -2620,18 +3137,18 @@ const zh = {
2620
3137
  language: '语言',
2621
3138
  },
2622
3139
  organizations: {
2623
- mine: '我的工作区',
2624
- create: '创建工作区',
2625
- title: '工作区',
2626
- heading: '您的工作区',
2627
- subtitle: '选择一个工作区以继续,或新建一个。',
2628
- searchPlaceholder: '搜索工作区',
2629
- new: '新建工作区',
2630
- current: '当前工作区',
3140
+ mine: '我的组织',
3141
+ create: '创建组织',
3142
+ title: '组织',
3143
+ heading: '您的组织',
3144
+ subtitle: '选择一个组织以继续,或新建一个。',
3145
+ searchPlaceholder: '搜索组织',
3146
+ new: '新建组织',
3147
+ current: '当前组织',
2631
3148
  manage: '管理',
2632
- emptyTitle: '尚无工作区',
2633
- emptyDescription: '创建您的第一个工作区以开始使用。',
2634
- noMatches: '没有匹配的工作区。',
3149
+ emptyTitle: '尚无组织',
3150
+ emptyDescription: '创建您的第一个组织以开始使用。',
3151
+ noMatches: '没有匹配的组织。',
2635
3152
  },
2636
3153
  organization: {
2637
3154
  roles: {
@@ -2716,6 +3233,7 @@ const zh = {
2716
3233
  readOnlyNote: '只有所有者可以修改设置。',
2717
3234
  nameLabel: '组织名称',
2718
3235
  slugLabel: '标识',
3236
+ slugLockedNote: '该组织还有正在使用的环境,因此无法在此修改标识:重命名会同时迁移这些环境的子域名。',
2719
3237
  logoLabel: 'Logo',
2720
3238
  logoUpload: '上传',
2721
3239
  logoReplace: '更换',
@@ -2780,15 +3298,34 @@ const zh = {
2780
3298
  viewAll: '查看全部通知',
2781
3299
  groupCount: '{{count}} 条通知',
2782
3300
  groupUnread: '{{count}} 条未读',
3301
+ groupUnread_one: '{{count}} 条未读',
3302
+ groupUnread_other: '{{count}} 条未读',
2783
3303
  groupMarkRead: '标记已读',
2784
3304
  groupMarkReadTitle: '将此类通知全部标记为已读',
2785
3305
  approvalsPending: '{{count}} 条待审批',
3306
+ approvalsPending_one: '{{count}} 条待审批',
3307
+ approvalsPending_other: '{{count}} 条待审批',
2786
3308
  viewApprovals: '查看审批',
2787
3309
  noPendingApprovals: '暂无待审批事项',
2788
3310
  openApprovalsInbox: '打开审批中心',
2789
3311
  badgeTotal: '共 {{total}} 项',
2790
- badgeNotifications: '{{unread}} 条通知',
2791
- badgeApprovals: '{{approvals}} 条待审批',
3312
+ badgeNotifications: '{{count}} 条通知',
3313
+ badgeNotifications_one: '{{count}} 条通知',
3314
+ badgeNotifications_other: '{{count}} 条通知',
3315
+ badgeApprovals: '{{count}} 条待审批',
3316
+ badgeApprovals_one: '{{count}} 条待审批',
3317
+ badgeApprovals_other: '{{count}} 条待审批',
3318
+ arrivalMany: '{{count}} 条新消息',
3319
+ arrivalMany_one: '{{count}} 条新消息',
3320
+ arrivalMany_other: '{{count}} 条新消息',
3321
+ arrivalRepeats: '该主题有 {{count}} 条新消息',
3322
+ arrivalRepeats_one: '该主题有 {{count}} 条新消息',
3323
+ arrivalRepeats_other: '该主题有 {{count}} 条新消息',
3324
+ arrivalOpen: '查看',
3325
+ toastEnabled: '站内提醒',
3326
+ desktopEnabled: '桌面通知',
3327
+ desktopBlocked: '已被拦截。请在浏览器设置中允许本站发送通知。',
3328
+ desktopUnsupported: '当前浏览器不支持桌面通知。',
2792
3329
  },
2793
3330
  publicForm: {
2794
3331
  submit: '提交',
@@ -2796,15 +3333,17 @@ const zh = {
2796
3333
  submitAnother: '再填一份',
2797
3334
  poweredBy: '由 ObjectStack 提供技术支持',
2798
3335
  secureNotice: '您的信息将通过安全通道传输,仅用于回复您本次请求。',
2799
- thankYouTitle: '感谢您的提交!',
3336
+ thankYouTitle: '感谢您的提交!',
2800
3337
  thankYouMessage: '我们已成功收到您的信息。',
2801
3338
  redirecting: '将在 {{seconds}} 秒后跳转…',
3339
+ redirectPending: '正在跳转…',
2802
3340
  unavailableTitle: '表单不可用',
2803
3341
  unavailableDescription: '该链接当前没有可用的公开表单。请确认对应视图已启用匿名分享并匹配此 slug。',
2804
3342
  tryDemo: '试用演示',
2805
3343
  retry: '重试',
2806
3344
  loading: '正在加载表单…',
2807
3345
  requiredHint: '* 为必填项',
3346
+ requiredFields: '必填项:{{fields}}',
2808
3347
  consentLabelDefault: '我已阅读并同意隐私政策,授权对本次请求所提供的信息进行处理。',
2809
3348
  consentLink: '隐私政策',
2810
3349
  consentRequired: '请先勾选同意隐私政策。',
@@ -2817,10 +3356,10 @@ const zh = {
2817
3356
  body: 'MCP 服务已关闭(OS_MCP_SERVER_ENABLED=false),暂无可连接的端点。请联系运维人员重新启用。',
2818
3357
  },
2819
3358
  url: {
2820
- title: '本环境的 MCP 端点',
3359
+ title: '本系统的 MCP 端点',
2821
3360
  body: '任何支持 MCP 的 AI 客户端都用这个 URL 连接。身份是自助的:部署自身就是 OAuth 2.1 授权服务器,交互式客户端只需在浏览器登录——以你自己的身份连接,每次调用都受你的权限和行级安全约束。',
2822
3361
  downloadSkill: '下载 SKILL.md',
2823
- skillHint: '可移植的智能体技能文件:教会任何支持技能的智能体如何使用本环境。',
3362
+ skillHint: '可移植的智能体技能文件:教会任何支持技能的智能体如何使用本系统。',
2824
3363
  },
2825
3364
  claude: {
2826
3365
  body: '设置 → 连接器 → 添加自定义连接器,粘贴此 URL,按提示在浏览器登录。',
@@ -2855,18 +3394,83 @@ const zh = {
2855
3394
  noImportableFields: '该对象没有可导入的字段。',
2856
3395
  schemaReadFailed: '无法读取对象结构。',
2857
3396
  imported: '已把 {{count}} 行真实数据导入「{{object}}」。',
3397
+ imported_one: '已把 {{count}} 行真实数据导入「{{object}}」。',
3398
+ imported_other: '已把 {{count}} 行真实数据导入「{{object}}」。',
2858
3399
  importFrom: '把真实数据导入自',
2859
3400
  into: '到',
2860
3401
  opening: '打开中…',
2861
3402
  importAction: '导入',
2862
3403
  dismiss: '忽略',
2863
3404
  },
2864
- cloudOnboarding: {
2865
- hintCreate: '创建你的第一个环境——一个独立的工作区,有自己的网址、数据库和套餐。应用的搭建在里面进行。',
2866
- hintReady: '你的生产环境已就绪。打开它来搭建和运行应用——这些都在环境内部进行。',
2867
- createEnvironment: '创建你的环境',
2868
- openProduction: '打开生产环境',
2869
- manageEnvironments: '管理环境',
3405
+ cloudWorkspaceTimezoneNotice: {
3406
+ seeded: '环境时区在创建时已按你的浏览器设为 {{zone}},可在「设置 → 本地化」中修改。',
3407
+ },
3408
+ ai: {
3409
+ nlQuery: {
3410
+ placeholder: '就您的数据提问…',
3411
+ ask: '提问',
3412
+ results: '结果',
3413
+ match: '匹配度 {{percent}}',
3414
+ simulatedSummary: '查询结果:{{query}}',
3415
+ noResults: '未找到匹配的记录',
3416
+ recentQueries: '最近的查询',
3417
+ },
3418
+ formAssist: {
3419
+ title: 'AI 建议',
3420
+ suggestionCount: '{{count}} 条建议',
3421
+ suggestionCount_one: '{{count}} 条建议',
3422
+ suggestionCount_other: '{{count}} 条建议',
3423
+ applyAll: '全部应用',
3424
+ confidence: '置信度 {{percent}}',
3425
+ appliedCount: '已应用 {{count}} 条建议',
3426
+ appliedCount_one: '已应用 {{count}} 条建议',
3427
+ appliedCount_other: '已应用 {{count}} 条建议',
3428
+ },
3429
+ recommendations: {
3430
+ title: '推荐',
3431
+ generating: '正在生成推荐…',
3432
+ empty: '暂无推荐',
3433
+ },
3434
+ },
3435
+ aiApprovals: {
3436
+ title: 'AI 审批',
3437
+ description: 'AI 智能体提出的操作,需要人工审核后才会执行。',
3438
+ tabPending: '待审批',
3439
+ tabDecided: '已处理',
3440
+ tabAll: '全部',
3441
+ statusPending: '待审批',
3442
+ statusApproved: '已通过',
3443
+ statusExecuted: '已执行',
3444
+ statusFailed: '失败',
3445
+ statusRejected: '已拒绝',
3446
+ colTool: '工具',
3447
+ colAction: '动作',
3448
+ colObject: '对象',
3449
+ colStatus: '状态',
3450
+ colProposed: '提出时间',
3451
+ colDecision: '决定',
3452
+ emptyTitle: '暂无待处理操作',
3453
+ emptyDescription: '当 AI 提出敏感操作时,会显示在这里等待审核。',
3454
+ view: '查看',
3455
+ approve: '通过',
3456
+ reject: '拒绝',
3457
+ working: '处理中…',
3458
+ approveAndExecute: '通过并执行',
3459
+ outcomeApprove: '对 {{id}} 的通过操作:{{message}}',
3460
+ outcomeReject: '对 {{id}} 的拒绝操作:{{message}}',
3461
+ outcomeExecuteFailed: '操作执行失败',
3462
+ drawerFallbackTitle: '待处理操作',
3463
+ drawerSubtitle: '在 {{object}} 上执行工具 {{tool}}',
3464
+ fieldProposedBy: '提出者',
3465
+ fieldDecidedBy: '处理人',
3466
+ fieldConversation: '会话',
3467
+ fieldToolInput: '工具输入',
3468
+ fieldResult: '结果',
3469
+ fieldError: '错误',
3470
+ fieldRejectionReason: '拒绝原因',
3471
+ rejectTitle: '要拒绝此操作吗?',
3472
+ rejectBody: '该原因会回传给 AI,便于它调整下一步回复。',
3473
+ rejectPlaceholder: '可选原因(例如:“记录 ID 有误 — 请先与用户确认。”)',
2870
3474
  },
2871
3475
  aiModelStatus: {
2872
3476
  summary: '构建 / 提问使用 {{conversational}}({{conversationalSource}});结构化使用 {{structured}}({{structuredSource}})。',
@@ -2876,8 +3480,8 @@ const zh = {
2876
3480
  rowConversational: 'Build / Ask 模型',
2877
3481
  rowStructured: '结构化(蓝图 / 种子)',
2878
3482
  rowReasoning: '推理强度',
2879
- readFailed: '无法读取有效 AI 模型。该环境可能未运行 AI 服务,或你没有 ai:read 权限。',
2880
- readFailedWithStatus: '无法读取有效 AI 模型(HTTP {{status}})。该环境可能未运行 AI 服务,或你没有 ai:read 权限。',
3483
+ readFailed: '无法读取有效 AI 模型。本系统可能未运行 AI 服务,或你没有 ai:read 权限。',
3484
+ readFailedWithStatus: '无法读取有效 AI 模型(HTTP {{status}})。本系统可能未运行 AI 服务,或你没有 ai:read 权限。',
2881
3485
  overridesInEffect: '生效的 env 覆盖:',
2882
3486
  noOverrides: '无 —— 跑的是部署代码的默认值。',
2883
3487
  adapter: '适配器:',
@@ -2885,6 +3489,174 @@ const zh = {
2885
3489
  sourceInherits: '与 build/ask 相同',
2886
3490
  sourcePinned: '被 {{source}} 钉住',
2887
3491
  },
3492
+ // objectui#7254 — the AI copilot's tool cards. Three families, all of them
3493
+ // English-only until this landed while every other string on the same screen
3494
+ // was translated:
3495
+ //
3496
+ // `tool.*` — one entry per PLATFORM-PROVIDED tool name
3497
+ // (@objectstack/spec `PLATFORM_TOOLS_BY_PACKAGE`, the
3498
+ // closed registry those runtimes are conformance-tested
3499
+ // against). `humanizeToolName` looks each up as
3500
+ // `chatbot.tool.<tool_name>` and falls back to its English
3501
+ // title-caser for a custom / third-party tool, so a name
3502
+ // missing here is degraded, never broken. Every value, `en`
3503
+ // included, is a short sentence in the pack's language
3504
+ // saying what the step does (cloud#2927 Target 3, ruled
3505
+ // 「同意」; objectui#12724): never the tool id, and never
3506
+ // the title-caser's output for it, which is how the step
3507
+ // reads for a tool the pack has no entry for.
3508
+ // `toolLabels-locale-parity-7481` holds both.
3509
+ // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3510
+ // set for both surfaces (they used to carry separate
3511
+ // tables and disagreed on casing).
3512
+ // `plan.*` — the "N objects · N views · N dashboards" strip. Plural
3513
+ // FAMILIES: one slot per CLDR category the pack's language
3514
+ // selects (objectui#11432), plus the base key for a call
3515
+ // made without a count. `all-locales-key-parity.test.ts`
3516
+ // derives the required slots from `Intl.PluralRules`.
3517
+ //
3518
+ // objectui#7481 — five `tool.*` entries are NEWER than the registry above:
3519
+ // `get_authoring_rules` (cloud#1837), `load_tools`, `open_record`, `test_flow`
3520
+ // and `toggle_flow` are registered by cloud `service-ai-studio` but the pinned
3521
+ // `@objectstack/spec` snapshot does not list them yet. They are kept here on
3522
+ // purpose: a step label the user reads must not wait on a pin bump. When the
3523
+ // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3524
+ // against the registry instead of against its own hand-held list.
3525
+ chatbot: {
3526
+ answer: {
3527
+ showFull: '展开全文',
3528
+ collapse: '收起',
3529
+ expandTable: '展开',
3530
+ exitExpandedTable: '关闭',
3531
+ },
3532
+ tool: {
3533
+ aggregate_data: '汇总相关数据',
3534
+ get_record: '读取这条记录',
3535
+ query_data: '查询所需数据',
3536
+ query_records: '查找相关记录',
3537
+ search_knowledge: '在知识库中查找',
3538
+ visualize_data: '把数据画成图表',
3539
+ add_field: '给对象添加字段',
3540
+ apply_blueprint: '按方案搭建应用',
3541
+ apply_edit: '应用这次修改',
3542
+ create_metadata: '新建一项元数据',
3543
+ create_object: '新建一个对象',
3544
+ create_package: '新建一个应用包',
3545
+ create_seed: '为对象生成示例数据',
3546
+ delete_field: '删除一个字段',
3547
+ describe_metadata: '查看元数据的内容',
3548
+ describe_object: '查看对象的结构',
3549
+ get_active_package: '确认当前应用包',
3550
+ get_authoring_rules: '查阅编写规范',
3551
+ get_metadata_schema: '查阅元数据的格式',
3552
+ get_package: '查看应用包信息',
3553
+ list_metadata: '列出已有元数据',
3554
+ list_objects: '列出已有对象',
3555
+ list_packages: '列出已有应用包',
3556
+ load_tools: '加载更多工具',
3557
+ modify_field: '修改一个字段',
3558
+ open_record: '打开这条记录',
3559
+ propose_blueprint: '拟定应用方案',
3560
+ set_active_package: '切换到目标应用包',
3561
+ suggest_builder: '建议改用 AI 搭建',
3562
+ test_flow: '试运行流程',
3563
+ todo_write: '记下后续检查项',
3564
+ toggle_flow: '启用或停用流程',
3565
+ update_metadata: '更新一项元数据',
3566
+ validate_expression: '检查表达式是否有效',
3567
+ verify_build: '核对搭建结果',
3568
+ },
3569
+ toolState: {
3570
+ agentActivity: '智能体活动',
3571
+ pending: '等待中',
3572
+ running: '运行中',
3573
+ awaitingApproval: '待确认',
3574
+ responded: '已回复',
3575
+ completed: '已完成',
3576
+ error: '出错',
3577
+ denied: '已拒绝',
3578
+ failed: '失败',
3579
+ },
3580
+ phase: {
3581
+ build: '搭建',
3582
+ design: '设计方案',
3583
+ stepCount: '{{count}} 步',
3584
+ stepCount_one: '{{count}} 步',
3585
+ stepCount_other: '{{count}} 步',
3586
+ expand: '展开步骤',
3587
+ collapse: '收起步骤',
3588
+ },
3589
+ plan: {
3590
+ countObjects: '{{count}} 个对象',
3591
+ countObjects_one: '{{count}} 个对象',
3592
+ countObjects_other: '{{count}} 个对象',
3593
+ countViews: '{{count}} 个视图',
3594
+ countViews_one: '{{count}} 个视图',
3595
+ countViews_other: '{{count}} 个视图',
3596
+ countDashboards: '{{count}} 个仪表板',
3597
+ countDashboards_one: '{{count}} 个仪表板',
3598
+ countDashboards_other: '{{count}} 个仪表板',
3599
+ countSeedData: '示例数据',
3600
+ extendTarget: '添加到现有应用:{{app}}',
3601
+ awaitingConfirm: '等待确认',
3602
+ objectsAndFields: '对象与字段',
3603
+ views: '视图',
3604
+ suggestedField: '补充',
3605
+ nameField: '名称:{{field}}',
3606
+ },
3607
+ build: {
3608
+ building: '正在构建{{app}}…',
3609
+ built: '已构建{{app}}',
3610
+ builtAndLive: '已搭建并上线 · {{app}}',
3611
+ appFallback: '你的应用',
3612
+ addingSampleData: '正在添加示例数据',
3613
+ group: {
3614
+ object: '对象',
3615
+ view: '视图',
3616
+ dashboard: '仪表板',
3617
+ app: '应用',
3618
+ seed: '示例数据',
3619
+ },
3620
+ moreArtifacts: '+{{n}} 个',
3621
+ verifying: '正在检查改动…',
3622
+ verifyStep: '第 {{n}} 步',
3623
+ verified: '已检查改动',
3624
+ unknownPhase: '未知的构建阶段',
3625
+ nextStepsLead: '接下来可以说:{{steps}}',
3626
+ nextStepQuote: '「{{step}}」',
3627
+ draftPosture: '之后的修改先存草稿,由你在 Studio 发布。',
3628
+ checksPassed: '核对通过 {{passed}}/{{total}}',
3629
+ },
3630
+ changes: {
3631
+ planTitle: '修改方案 · {{count}} 项',
3632
+ planTitle_one: '修改方案 · {{count}} 项',
3633
+ planTitle_other: '修改方案 · {{count}} 项',
3634
+ saveDraft: '存为草稿',
3635
+ reviewAndPublish: '查看变更并发布',
3636
+ undo: '撤销',
3637
+ undoWithOthers: '撤销(连同另外 {{count}} 项草稿)',
3638
+ undoWithOthers_one: '撤销(连同另外 {{count}} 项草稿)',
3639
+ undoWithOthers_other: '撤销(连同另外 {{count}} 项草稿)',
3640
+ undoConfirm: '撤销会丢弃这个应用包全部 {{total}} 项未发布的草稿,其中 {{count}} 项不属于这次修改。',
3641
+ undoConfirm_one: '撤销会丢弃这个应用包全部 {{total}} 项未发布的草稿,其中 {{count}} 项不属于这次修改。',
3642
+ undoConfirm_other: '撤销会丢弃这个应用包全部 {{total}} 项未发布的草稿,其中 {{count}} 项不属于这次修改。',
3643
+ undoConfirmUnknown: '撤销会丢弃这个应用包里全部未发布的草稿,不只是这次修改。',
3644
+ undoConfirmAction: '全部撤销',
3645
+ undoCancel: '取消',
3646
+ undoing: '正在撤销…',
3647
+ undone: '已撤销',
3648
+ undoFailed: '撤销失败',
3649
+ kind: {
3650
+ field: '字段',
3651
+ object: '对象',
3652
+ view: '视图',
3653
+ dashboard: '仪表板',
3654
+ app: '应用',
3655
+ seed: '示例数据',
3656
+ package: '应用包',
3657
+ },
3658
+ },
3659
+ },
2888
3660
  chatbotError: {
2889
3661
  title: '响应失败',
2890
3662
  fallbackDetail: '出了点问题,请重试。',
@@ -2898,10 +3670,13 @@ const zh = {
2898
3670
  buyCredits: '购买额度包',
2899
3671
  upgradePlan: '升级方案',
2900
3672
  },
3673
+ planTier: {
3674
+ teamAndUp: '团队版起',
3675
+ },
2901
3676
  environment: {
2902
- addEnvironment: '新建环境',
2903
3677
  setUpProduction: '创建你的生产环境',
2904
3678
  addDevelopment: '新建开发环境',
3679
+ developmentLocked: '开发环境 · {{tier}}',
2905
3680
  entitlement: {
2906
3681
  productionLimitTitle: '你已经有生产环境了',
2907
3682
  productionLimitBody: '每个组织只包含一个生产环境。如果还需要,可以新建一个组织,或者联系我们了解企业版方案。',
@@ -2948,14 +3723,14 @@ const zh = {
2948
3723
  },
2949
3724
  unbound: {
2950
3725
  title: '未连接',
2951
- body: '将此运行时连接到 ObjectStack 控制平面,即可浏览并安装组织的私有包。只需在云账户中点击一次批准——无需在本页面输入任何 ID 或凭据。',
3726
+ body: '此运行时尚未连接到控制平面。点击「连接」会在新窗口中打开你的云账户,只需点击一次即可批准连接——无需在本页面输入任何 ID 或凭据。',
2952
3727
  connect: '连接',
2953
3728
  },
2954
3729
  },
2955
3730
  marketplace: {
2956
3731
  title: '应用市场',
2957
3732
  subtitle: '浏览已通过审核、发布到 ObjectStack 目录中的应用。点击应用查看详情并安装到你的某个环境中。',
2958
- searchPlaceholder: '按名称或 manifest ID 搜索应用…',
3733
+ searchPlaceholder: '按名称或标识搜索应用…',
2959
3734
  searchAria: '搜索市场应用',
2960
3735
  installed: '已安装',
2961
3736
  installedCount: '已安装({{count}})',
@@ -2965,21 +3740,26 @@ const zh = {
2965
3740
  noMatchFilters: '没有应用匹配当前筛选条件。',
2966
3741
  noDescription: '未提供描述。',
2967
3742
  back: '返回应用市场',
2968
- installedTitle: '已安装的应用',
2969
- installedSubtitle: '当前已安装到本运行时内核的应用市场软件包。缓存的清单文件位于 <code>.objectstack/installed-packages/</code>,重启后仍然保留。',
2970
- installedEmpty: '本运行时尚未安装任何应用市场应用。',
2971
3743
  browseLink: '去应用市场看看 →',
2972
- installedAdditiveNote: '<strong>说明:</strong>内核 API 仅支持新增 — 卸载会移除磁盘上的清单,下次启动时不再加载;但运行中的内核仍会保留该应用,直到下次重启运行时才会真正卸载。',
2973
- installedAt: '安装于 {{when}}',
2974
- installedBy: '由 {{user}}',
2975
- installedPackageId: '包',
2976
- cachedAs: '缓存为 <code>{{path}}</code>',
3744
+ installedAdditiveNote: '卸载会立即将该应用从运行中的内核中移除,其权限集及相应授权也一并移除;同时删除缓存的清单,下次启动时不再加载该包。其对象中已存储的记录仍保留在数据库中。',
2977
3745
  versionBadge: 'v{{version}}',
2978
3746
  installedBadge: '已安装 v{{version}}',
3747
+ // objectui#11645 — an install-local entry this runtime refused to load at
3748
+ // startup (the listing's `notLoaded` marker), read on Installed Apps.
3749
+ notLoaded: {
3750
+ badge: '未加载',
3751
+ protocolIncompatible: '本运行时未加载此包:它面向协议 {{requiredRange}},而本运行时不支持该协议。',
3752
+ otherReason: '本运行时未加载此包({{code}})。',
3753
+ },
2979
3754
  load: {
2980
3755
  failed: '应用市场加载失败',
2981
3756
  failedHintConfigured: '本运行时通过 {{url}} 上的控制面访问应用市场。请检查该地址是否在线、能否从本运行时访问。',
2982
- failedHintSameOrigin: '本运行时自己提供应用市场目录。请检查运行时是否在线。',
3757
+ failedHintSameOrigin: '应用市场目录通过本运行时访问。请检查运行时是否在线、能否访问该目录。',
3758
+ loading: '正在加载应用市场目录…',
3759
+ slow: '仍在加载 —— 应用市场目录响应缓慢。',
3760
+ retry: '重试',
3761
+ unreachable: '无法访问应用市场目录。',
3762
+ answeredError: '应用市场目录返回了错误(HTTP {{status}})。',
2983
3763
  packageFailed: '应用加载失败',
2984
3764
  notFound: '未找到。',
2985
3765
  },
@@ -3003,10 +3783,15 @@ const zh = {
3003
3783
  purgeSampleData: '清除示例数据',
3004
3784
  purgeConfirm: '删除此应用预置的所有示例记录?用户自行添加的记录不会被删除。',
3005
3785
  purgeSuccess: '已删除 {{count}} 条示例记录。',
3786
+ purgeSuccess_one: '已删除 {{count}} 条示例记录。',
3787
+ purgeSuccess_other: '已删除 {{count}} 条示例记录。',
3006
3788
  purgeNoData: '没有可清除的示例记录。',
3007
3789
  reseedQueued: '示例数据将在下次访问该环境时重新加载。',
3008
3790
  reseedLocalSuccess: '已重新加载示例数据:新增 {{inserted}} 条,更新 {{updated}} 条。',
3009
3791
  reseedPartialErrors: '(有 {{count}} 条记录写入失败)',
3792
+ reseedPartialErrors_one: '(有 {{count}} 条记录写入失败)',
3793
+ reseedPartialErrors_other: '(有 {{count}} 条记录写入失败)',
3794
+ sampleDataKernelUnavailable: '此控制面没有环境内核,因此无法在这里重新加载或清除示例数据。请在该环境自己的运行时中操作。',
3010
3795
  updateAvailable: '有可用更新',
3011
3796
  },
3012
3797
  action: {
@@ -3016,6 +3801,7 @@ const zh = {
3016
3801
  installToCloud: '安装到云端…',
3017
3802
  installed: '已安装',
3018
3803
  installing: '安装中…',
3804
+ updating: '更新中…',
3019
3805
  uninstall: '卸载',
3020
3806
  uninstalling: '卸载中…',
3021
3807
  details: '详情',
@@ -3033,15 +3819,45 @@ const zh = {
3033
3819
  environmentPlaceholder: '选择一个环境',
3034
3820
  includeSampleData: '包含示例数据',
3035
3821
  noEnvs: '当前组织没有可用的环境。',
3036
- noPermission: '你没有权限在任何环境中安装应用。仅组织所有者和管理员可以安装 — 请联系你的工作区管理员。',
3822
+ noPermission: '你没有权限在任何环境中安装应用。仅组织所有者和管理员可以安装 — 请联系你的组织管理员。',
3037
3823
  signInFirst: '请先登录 ObjectStack Cloud,然后点击下方"在云端打开"。',
3038
3824
  success: '安装成功。打开环境即可看到新应用。',
3039
3825
  localSuccess: '已将 v{{version}} 安装到本运行时。"{{name}}" 应该已经出现在应用切换器中。',
3826
+ localLoadsAtRestart: '已将 v{{version}} 安装到本运行时。"{{name}}" 将在运行时下次重启时加载,在此之前不会出现在应用切换器中。',
3040
3827
  localManifestConflict: '{{message}}\n提示:本地已有应用占用此 manifest_id,请先从 objectstack.config.ts 中移除。',
3041
3828
  localUnauthorized: '请先登录本运行时再试。',
3042
3829
  localMarketplaceUnavailable: '本运行时未配置 OS_CLOUD_URL,无法访问应用市场目录。',
3043
3830
  updateTo: '更新 → v{{version}}',
3044
3831
  installedVersion: '已安装 v{{version}}',
3832
+ deploying: '正在部署应用…',
3833
+ deployed: '应用已部署完成。',
3834
+ openApp: '打开 {{name}}',
3835
+ deployTimeout: '安装已记录,但当前环境尚未提供该应用。它可能仍在部署中,请稍后再次检查。如果一直没有出现,可能是软件包未能加载、不包含应用,或其应用需要你尚未拥有的权限。',
3836
+ checkAgain: '再次检查',
3837
+ // ADR-0131 D6 — the install modes a package's manifest permits, and
3838
+ // what an unmanaged install answers (MarketplacePackagePage).
3839
+ mode: {
3840
+ label: '安装方式',
3841
+ managed: '托管',
3842
+ managedHint: '软件包保持权威:以代码形式注册并接收其升级,其中的条目不在此处编辑。',
3843
+ unmanaged: '非托管副本',
3844
+ unmanagedHint: '一次性复制到本运行时,成为它自己的元数据:每个条目都可在此编辑,副本不再接收升级。',
3845
+ required: '请先选择安装方式,再安装此软件包。',
3846
+ },
3847
+ unmanagedSuccess: '已将 "{{name}}" 的 v{{version}} 复制到本运行时,成为它自己的元数据,位于基础包 {{base}} 中。副本可编辑,且不再接收升级。',
3848
+ unmanagedStrippedLocks: '软件包锁定了以下条目。副本可编辑,因此这些锁未被复制:',
3849
+ unmanagedIgnored: '本运行时不支持非托管安装,因此 "{{name}}" 以托管方式安装(以代码形式注册),而不是被复制。请先升级运行时,然后卸载该软件包,再以非托管副本重新安装。',
3850
+ },
3851
+ // objectui#12146 — the install dialog opened as an UPDATE of the copy
3852
+ // this environment holds (MarketplacePackagePage).
3853
+ update: {
3854
+ dialogTitle: '更新 {{name}}',
3855
+ dialogDescCurrent: '更新当前环境({{host}})中已安装的应用。',
3856
+ dialogDescPicker: '选择要更新已安装应用的环境。需要先登录 ObjectStack Cloud。',
3857
+ majorNotice: '这是一次主版本更新(v{{fromMajor}} → v{{toMajor}}),可能包含不兼容的变更。',
3858
+ releaseNotes: '查看 v{{version}} 的版本说明',
3859
+ success: '已更新到 v{{version}}。',
3860
+ deployTimeout: '更新已记录,但当前环境尚未提供 v{{version}}。可能仍在部署中,请稍后再次检查。',
3045
3861
  },
3046
3862
  // objectui#3546 — the MarketplacePage "Your organization" strip.
3047
3863
  org: {
@@ -3059,7 +3875,8 @@ const zh = {
3059
3875
  reviewed: '已审核并批准',
3060
3876
  unreviewed: '尚未审核',
3061
3877
  signed: '已签名',
3062
- grantsIntro: '安装后,此软件包将获得以下权限:',
3878
+ grantsIntro: '此软件包请求以下权限:',
3879
+ notEnforced: '安装时会记录这份清单,后续版本要求更多权限时会再次征求同意;但运行时目前还不会把该软件包限制在此清单内。',
3063
3880
  services: '平台服务',
3064
3881
  hooks: '生命周期钩子',
3065
3882
  network: '网络访问',
@@ -3082,11 +3899,20 @@ const zh = {
3082
3899
  dismiss: '忽略',
3083
3900
  confirmedToast: '「{{set}}」已授予 {{anchor}}。',
3084
3901
  dismissedToast: '已忽略「{{set}}」的建议。',
3902
+ guestUnsupported: '此处无法授予:Guest 岗位的权限集不由已接受的建议派生。',
3903
+ acceptedState: '「{{set}}」已为所有已登录用户(Everyone 岗位)接受。',
3904
+ notInForceState: '「{{set}}」已接受,但尚未生效:本次请求未改变 Everyone 岗位。原因见服务器日志。',
3905
+ dismissedState: '「{{set}}」未授予:该建议已被忽略或撤销。',
3906
+ revoke: '撤销',
3907
+ revoking: '撤销中…',
3908
+ revokedToast: '已撤销对「{{set}}」的接受。',
3085
3909
  },
3086
3910
  uninstall: {
3087
- confirm: '从本运行时卸载 {{manifestId}} v{{version}}?\n\n磁盘上的清单缓存将被移除。运行中的内核仍会保留该应用,直到下次重启运行时才会真正卸载。',
3088
- successInList: '已移除 {{manifestId}}。重启运行时即可从内核中彻底卸载。',
3089
- successInDetail: '已移除 {{manifestId}} 的清单缓存。重启运行时即可从内核中彻底卸载该应用。',
3911
+ confirm: '从本运行时卸载 {{manifestId}} v{{version}}?\n\n该应用将立即从运行中的内核中移除,其权限集及相应授权也一并移除,缓存的清单也将被删除。其对象中已存储的记录仍保留在数据库中。',
3912
+ successInList: '已移除 {{manifestId}}:该应用已从运行中的内核中移除,其权限集及相应授权也已一并移除。其对象中已存储的记录仍保留在数据库中。',
3913
+ successInDetail: '已移除 {{manifestId}} 及其清单缓存:该应用已从运行中的内核中移除,其权限集及相应授权也已一并移除。其对象中已存储的记录仍保留在数据库中。',
3914
+ confirmNotLoaded: '从本运行时卸载 {{manifestId}} v{{version}}?\n\n磁盘上的清单缓存将被移除。本运行时并未加载该包,因此它没有任何部分在运行。',
3915
+ successNotLoaded: '已移除 {{manifestId}}。该包未被加载,无需重启运行时。',
3090
3916
  },
3091
3917
  accessDenied: {
3092
3918
  title: '应用市场仅限管理员使用',
@@ -3109,30 +3935,19 @@ const zh = {
3109
3935
  storage: '存储',
3110
3936
  other: '其他',
3111
3937
  },
3112
- pricing: {
3113
- free: '免费',
3114
- freemium: '免费增值',
3115
- paid: '付费',
3116
- subscription: '订阅',
3117
- 'usage-based': '按用量计费',
3118
- 'contact-sales': '联系销售',
3119
- },
3120
3938
  relativeTime: {
3121
3939
  today: '今天',
3122
3940
  daysAgo: '{{count}} 天前',
3123
3941
  monthsAgo: '{{count}} 个月前',
3942
+ monthsAgo_one: '{{count}} 个月前',
3943
+ monthsAgo_other: '{{count}} 个月前',
3124
3944
  yearsAgo: '{{count}} 年前',
3945
+ yearsAgo_one: '{{count}} 年前',
3946
+ yearsAgo_other: '{{count}} 年前',
3125
3947
  },
3126
3948
  },
3127
- approvals: {
3128
- approve: '批准',
3129
- reject: '驳回',
3130
- comment: '审批意见(可选)',
3131
- approveSuccess: '已批准',
3132
- rejectSuccess: '已驳回',
3133
- rejectConfirm: '确定驳回该审批请求吗?',
3134
- },
3135
3949
  approvalsInbox: {
3950
+ recordUnresolvable: '无法打开此记录',
3136
3951
  loadMore: '加载更多',
3137
3952
  loadingMore: '加载中…',
3138
3953
  loadedOf: '已加载 {{loaded}} / 共 {{total}} 条',
@@ -3151,6 +3966,8 @@ const zh = {
3151
3966
  requestInfoSent: '已退回给申请人补充材料',
3152
3967
  remindBtn: '催办',
3153
3968
  remindSuccess: '已提醒 {{count}} 位审批人',
3969
+ remindSuccess_one: '已提醒 {{count}} 位审批人',
3970
+ remindSuccess_other: '已提醒 {{count}} 位审批人',
3154
3971
  remindThrottled: '刚刚已发送过催办,请稍后再试。',
3155
3972
  replyPlaceholder: '在此回复…',
3156
3973
  slaRemaining: 'SLA 剩余 {{dur}}',
@@ -3167,8 +3984,11 @@ const zh = {
3167
3984
  progressApprovals: '审批进度 — {{got}} / {{need}}',
3168
3985
  progressGroups: '会签进度 — {{got}} / {{need}} 组',
3169
3986
  progressEligible: '{{count}} 位可审批人',
3987
+ progressEligible_one: '{{count}} 位可审批人',
3988
+ progressEligible_other: '{{count}} 位可审批人',
3170
3989
  progressBar: '决策进度',
3171
3990
  declaredActions: '操作',
3991
+ decisionPanelOffRequestPage: '审批决策面板仅在审批请求页面上可用。',
3172
3992
  attachmentChip: '附件',
3173
3993
  attachmentOpenFailed: '无法打开附件,请重试',
3174
3994
  approveOneTitle: '通过“{{title}}”?',
@@ -3198,6 +4018,8 @@ const zh = {
3198
4018
  filterCount: '{{shown}} / {{total}} 条',
3199
4019
  selected: '已选择',
3200
4020
  actionableCount: '({{count}} 条可操作)',
4021
+ actionableCount_one: '({{count}} 条可操作)',
4022
+ actionableCount_other: '({{count}} 条可操作)',
3201
4023
  selectAll: '全选',
3202
4024
  selectRow: '选择该请求',
3203
4025
  colRequest: '审批事项',
@@ -3232,6 +4054,9 @@ const zh = {
3232
4054
  emptyPending: '全部处理完毕,没有等待你审批的请求。',
3233
4055
  emptyOther: '这里还没有内容。',
3234
4056
  emptyViewAll: '查看全部请求',
4057
+ waitingOnOthers: '{{count}} 个申请正在等待其他审批人',
4058
+ waitingOnOthers_one: '{{count}} 个申请正在等待其他审批人',
4059
+ waitingOnOthers_other: '{{count}} 个申请正在等待其他审批人',
3235
4060
  noMatches: '没有符合当前筛选条件的请求。',
3236
4061
  keyboardHint: '快捷键:j/k 移动 · Enter 打开 · x 选择 · a 通过 · r 拒绝',
3237
4062
  drawerTitle: '审批请求',
@@ -3249,12 +4074,12 @@ const zh = {
3249
4074
  overrideActionLabel: '越权{{action}}',
3250
4075
  overrideNotice: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,尚未表态的审批人都会被跳过。此决定将记录为管理员越权。',
3251
4076
  overrideNoticeWho: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,并跳过尚未表态的审批人 —— {{who}}。此决定将记录为管理员越权。',
4077
+ overrideReassignNotice: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会转签给你选择的新审批人,取代所有尚未表态的审批人。请求保持待审批状态,等待新审批人处理。此次转签将记录为管理员越权。',
4078
+ overrideReassignNoticeWho: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会转签给你选择的新审批人,取代尚未表态的审批人 —— {{who}}。请求保持待审批状态,等待新审批人处理。此次转签将记录为管理员越权。',
4079
+ overrideRecallNotice: '这不是你发起的请求。继续将使用管理员越权:该请求会被撤回,尚未表态的审批人都将无法再处理它,记录随即解锁。',
4080
+ overrideRecallNoticeWho: '这不是你发起的请求。继续将使用管理员越权:该请求会被撤回,记录随即解锁,尚未表态的审批人将无法再处理它 —— {{who}}。',
3252
4081
  viaOverrideChip: '管理员越权',
3253
4082
  viaOverrideHint: '操作者在该步骤没有审批人席位 —— 经管理员越权通道进入。',
3254
- rawData: '原始数据(JSON)',
3255
- copy: '复制',
3256
- copied: '已复制',
3257
- copyFailed: '复制失败',
3258
4083
  overrideActor: '以其他身份操作(管理员)',
3259
4084
  actor: '操作身份',
3260
4085
  auto: '自动',
@@ -3271,11 +4096,19 @@ const zh = {
3271
4096
  approveN: '通过 {{count}} 条',
3272
4097
  rejectN: '拒绝 {{count}} 条',
3273
4098
  bulkApproveTitle: '通过这 {{count}} 条请求?',
4099
+ bulkApproveTitle_one: '通过这 {{count}} 条请求?',
4100
+ bulkApproveTitle_other: '通过这 {{count}} 条请求?',
3274
4101
  bulkApproveBody: '每条请求都将以你的身份通过,对应流程沿“通过”分支继续。',
3275
4102
  bulkRejectTitle: '拒绝这 {{count}} 条请求?',
4103
+ bulkRejectTitle_one: '拒绝这 {{count}} 条请求?',
4104
+ bulkRejectTitle_other: '拒绝这 {{count}} 条请求?',
3276
4105
  bulkRejectBody: '将拒绝所选请求并通知各申请人。',
3277
4106
  bulkApproved: '已通过 {{count}} 条请求',
4107
+ bulkApproved_one: '已通过 {{count}} 条请求',
4108
+ bulkApproved_other: '已通过 {{count}} 条请求',
3278
4109
  bulkRejected: '已拒绝 {{count}} 条请求',
4110
+ bulkRejected_one: '已拒绝 {{count}} 条请求',
4111
+ bulkRejected_other: '已拒绝 {{count}} 条请求',
3279
4112
  bulkPartial: '{{ok}} 条成功,{{fail}} 条失败:{{which}}',
3280
4113
  rejectOneTitle: '拒绝“{{title}}”?',
3281
4114
  rejectOneBody: '将拒绝该请求并通知申请人。',
@@ -3300,8 +4133,14 @@ const zh = {
3300
4133
  alreadyDecided: '该请求已被处理,请刷新列表。',
3301
4134
  justNow: '刚刚',
3302
4135
  minutesAgo: '{{count}} 分钟前',
4136
+ minutesAgo_one: '{{count}} 分钟前',
4137
+ minutesAgo_other: '{{count}} 分钟前',
3303
4138
  hoursAgo: '{{count}} 小时前',
4139
+ hoursAgo_one: '{{count}} 小时前',
4140
+ hoursAgo_other: '{{count}} 小时前',
3304
4141
  daysAgo: '{{count}} 天前',
4142
+ daysAgo_one: '{{count}} 天前',
4143
+ daysAgo_other: '{{count}} 天前',
3305
4144
  },
3306
4145
  filterBuilder: {
3307
4146
  where: '其中',
@@ -3325,28 +4164,32 @@ const zh = {
3325
4164
  rangeEnd: '结束值',
3326
4165
  operators: {
3327
4166
  equals: '等于',
3328
- notEquals: '不等于',
4167
+ not_equals: '不等于',
3329
4168
  contains: '包含',
3330
- containsCaseInsensitive: '包含(忽略大小写)',
3331
- notContains: '不包含',
3332
- isEmpty: '为空',
3333
- isNotEmpty: '不为空',
3334
- greaterThan: '大于',
3335
- lessThan: '小于',
3336
- greaterOrEqual: '大于或等于',
3337
- lessOrEqual: '小于或等于',
4169
+ icontains: '包含(忽略大小写)',
4170
+ not_contains: '不包含',
4171
+ is_empty: '为空',
4172
+ is_not_empty: '不为空',
4173
+ greater_than: '大于',
4174
+ less_than: '小于',
4175
+ greater_than_or_equal: '大于或等于',
4176
+ less_than_or_equal: '小于或等于',
3338
4177
  before: '早于',
3339
4178
  after: '晚于',
3340
4179
  between: '介于',
3341
4180
  in: '属于',
3342
- notIn: '不属于',
3343
- startsWith: '以…开头',
3344
- endsWith: '以…结尾',
3345
- isNull: '为 null',
3346
- isNotNull: '不为 null',
4181
+ not_in: '不属于',
4182
+ starts_with: '以…开头',
4183
+ ends_with: '以…结尾',
4184
+ is_null: '为 null',
4185
+ is_not_null: '不为 null',
3347
4186
  exists: '已设置',
3348
4187
  notExists: '未设置',
3349
4188
  },
4189
+ emptyCheckHint: {
4190
+ text: '「{{isEmpty}}」也匹配空白文本;「{{isNull}}」只匹配没有值的记录。',
4191
+ list: '「{{isEmpty}}」也匹配空列表;「{{isNull}}」只匹配没有值的记录。',
4192
+ },
3350
4193
  },
3351
4194
  sortBuilder: {
3352
4195
  sortBy: '排序依据',
@@ -3359,7 +4202,8 @@ const zh = {
3359
4202
  },
3360
4203
  collaboration: {
3361
4204
  commentCount: '{{count}} 条评论',
3362
- commentCountOne: '{{count}} 条评论',
4205
+ commentCount_one: '{{count}} 条评论',
4206
+ commentCount_other: '{{count}} 条评论',
3363
4207
  resolvedSuffix: ' · 已解决',
3364
4208
  sortComments: '评论排序',
3365
4209
  sortOldest: '最早优先',
@@ -3368,11 +4212,18 @@ const zh = {
3368
4212
  reopen: '重新打开',
3369
4213
  justNow: '刚刚',
3370
4214
  minutesAgo: '{{count}} 分钟前',
4215
+ minutesAgo_one: '{{count}} 分钟前',
4216
+ minutesAgo_other: '{{count}} 分钟前',
3371
4217
  hoursAgo: '{{count}} 小时前',
4218
+ hoursAgo_one: '{{count}} 小时前',
4219
+ hoursAgo_other: '{{count}} 小时前',
3372
4220
  daysAgo: '{{count}} 天前',
4221
+ daysAgo_one: '{{count}} 天前',
4222
+ daysAgo_other: '{{count}} 天前',
3373
4223
  edited: '(已编辑)',
3374
4224
  reactionCount: '{{count}} 个回应',
3375
- reactionCountOne: '{{count}} 个回应',
4225
+ reactionCount_one: '{{count}} 个回应',
4226
+ reactionCount_other: '{{count}} 个回应',
3376
4227
  addThumbsUp: '点赞',
3377
4228
  reply: '回复',
3378
4229
  reactThumbsUp: '以点赞回应',
@@ -3383,9 +4234,11 @@ const zh = {
3383
4234
  commentPlaceholder: '添加评论…(输入 @ 提及他人)',
3384
4235
  send: '发送',
3385
4236
  presentUserCount: '{{count}} 人在线',
3386
- presentUserCountOne: '{{count}} 人在线',
4237
+ presentUserCount_one: '{{count}} 人在线',
4238
+ presentUserCount_other: '{{count}} 人在线',
3387
4239
  moreUserCount: '另有 {{count}} 人',
3388
- moreUserCountOne: '另有 {{count}} 人',
4240
+ moreUserCount_one: '另有 {{count}} 人',
4241
+ moreUserCount_other: '另有 {{count}} 人',
3389
4242
  userStatusTitle: '{{name}}({{status}})',
3390
4243
  statusActive: '活跃',
3391
4244
  statusIdle: '空闲',
@@ -3393,6 +4246,11 @@ const zh = {
3393
4246
  },
3394
4247
  wizard: {
3395
4248
  missingRequired: '请填写以下必填字段:{{fields}}',
4249
+ back: '上一步',
4250
+ submitting: '提交中…',
4251
+ stepFallback: '第 {{n}} 步',
4252
+ progressLabel: '进度',
4253
+ emptyStep: '此步骤未配置字段',
3396
4254
  },
3397
4255
  flowRunner: {
3398
4256
  title: '输入',
@@ -3442,6 +4300,8 @@ const zh = {
3442
4300
  setDefaultFailed: '设置默认应用失败:{{reason}}',
3443
4301
  appDeleted: '{{name}} 已删除',
3444
4302
  deleteFailed: '删除应用失败:{{reason}}',
4303
+ nothingToDelete: '{{name}} 无可删除:{{reason}}',
4304
+ alreadyAtDefault: '它已是其软件包的默认状态',
3445
4305
  bulkEnabled: '已启用 {{n}} 个应用',
3446
4306
  bulkDisabled: '已停用 {{n}} 个应用',
3447
4307
  bulkFailed: '{{n}} 个失败:{{details}}',
@@ -3450,5 +4310,131 @@ const zh = {
3450
4310
  bulkOperationFailed: '批量操作失败:{{reason}}',
3451
4311
  },
3452
4312
  },
4313
+ // objectui#6301 — 设置 › 打包自动化(ADR-0126 §7.4)。术语沿用本包既有译法:
4314
+ // `common.package` = 软件包,`flowRunner.completed` = 流程,`common.duplicate`
4315
+ // 一族的“复制”在这里写作“克隆”,因为服务端的 clone 是另起机器名的同级流程,
4316
+ // 不是一次副本粘贴。⛔ 本组不含任何血缘/漂移措辞(§9)。
4317
+ packagedAutomation: {
4318
+ title: '打包自动化',
4319
+ subtitle: '由已安装软件包提供的流程与动作。可在本部署中关闭其中之一,流程还可以新名称克隆后再自定义。编辑在 Studio 中进行。',
4320
+ refresh: '刷新',
4321
+ flowsHeading: '打包流程',
4322
+ actionsHeading: '打包动作',
4323
+ colFlow: '流程',
4324
+ colActivation: '启用状态',
4325
+ colActions: '操作',
4326
+ toggleLabel: '{{label}} 的启用状态',
4327
+ on: '已启用',
4328
+ off: '已关闭',
4329
+ notRunning: '未在此运行',
4330
+ clone: '克隆',
4331
+ cloneTitle: '克隆打包流程',
4332
+ cloneBody: '副本会带上完整定义,并需要新的机器名和标签。请在 Studio 中编辑副本。',
4333
+ cloneName: '新机器名',
4334
+ cloneLabel: '新标签',
4335
+ cancel: '取消',
4336
+ cloneConfirm: '创建克隆',
4337
+ cloneCreated: '已创建流程「{{name}}」。',
4338
+ cloneSwitchSourceOff: '停用「{{label}}」',
4339
+ cloneSourceOff: '打包流程「{{label}}」已停用。',
4340
+ cloneOpen: '在 Studio 中打开副本',
4341
+ emptyTitle: '没有打包流程',
4342
+ emptyBody: '本部署中没有任何已安装软件包提供自动化流程。你自己编写的流程在 Studio 中。',
4343
+ loadFailed: '无法加载打包自动化。',
4344
+ toggleFailedHttp: '无法更改启用状态(HTTP {{status}})。',
4345
+ toggleFailed: '无法更改启用状态。',
4346
+ cloneFailedHttp: '无法克隆此流程(HTTP {{status}})。',
4347
+ cloneFailed: '无法克隆此流程。',
4348
+ reasonDetails: '详情',
4349
+ actionsSubtitle: '由已安装软件包提供的动作。在本部署中关闭后,它在所有提供它的位置都不再运行。你仍然可以在 Studio 中另行编写自己的动作。',
4350
+ colAction: '动作',
4351
+ colObject: '对象',
4352
+ actionToggleLabel: '{{object}} 上 {{label}} 的启用状态',
4353
+ actionsEmptyTitle: '没有打包动作',
4354
+ actionsEmptyBody: '本部署中没有任何已安装软件包声明动作。你自己编写的动作在 Studio 中。',
4355
+ actionsLoadFailed: '无法加载打包动作。',
4356
+ },
4357
+ element: {
4358
+ number: {
4359
+ noObject: '未指定对象:请设置 dataSource.object。',
4360
+ sourceUnresolved: '无法解析此指标的数据源',
4361
+ },
4362
+ image: {
4363
+ noSource: '无图片来源',
4364
+ },
4365
+ recordPicker: {
4366
+ sourceUnresolved: '无法解析此记录选择器的数据源',
4367
+ },
4368
+ calendar: {
4369
+ sourceUnresolved: '无法解析此日历的数据源',
4370
+ },
4371
+ chart: {
4372
+ sourceUnresolved: '无法解析此图表的数据源',
4373
+ },
4374
+ pivotTable: {
4375
+ sourceUnresolved: '无法解析此数据透视表的数据源',
4376
+ },
4377
+ detailView: {
4378
+ sourceUnresolved: '无法解析此详情视图的数据源',
4379
+ },
4380
+ relatedList: {
4381
+ sourceUnresolved: '无法解析此相关列表的数据源',
4382
+ parentUnreadable: '无法读取此相关列表的父记录',
4383
+ },
4384
+ form: {
4385
+ sourceUnresolved: '无法解析此表单的数据源',
4386
+ },
4387
+ lineItems: {
4388
+ sourceUnresolved: '无法解析此明细行面板的数据源',
4389
+ },
4390
+ gantt: {
4391
+ sourceUnresolved: '无法解析此甘特图的数据源',
4392
+ },
4393
+ grid: {
4394
+ sourceUnresolved: '无法解析此表格的数据源',
4395
+ },
4396
+ board: {
4397
+ sourceUnresolved: '无法解析此看板的数据源',
4398
+ },
4399
+ listView: {
4400
+ sourceUnresolved: '无法解析此列表视图的数据源',
4401
+ },
4402
+ map: {
4403
+ sourceUnresolved: '无法解析此地图的数据源',
4404
+ },
4405
+ timeline: {
4406
+ sourceUnresolved: '无法解析此时间线的数据源',
4407
+ },
4408
+ component: {
4409
+ sourceUnresolved: '无法解析此组件的数据源',
4410
+ noDataSource: '未解析到数据源',
4411
+ apiRefused: '此组件的 API 数据源被拒绝',
4412
+ apiUnreadable: '无法读取此组件的 API 数据源',
4413
+ },
4414
+ metadataViewer: {
4415
+ missingKey: '此视图缺少 {{key}}。',
4416
+ loading: '正在加载 {{name}}…',
4417
+ loadFailed: '加载 {{name}} 失败:{{message}}',
4418
+ notFound: '未找到 {{name}}。',
4419
+ stateMachine: '状态机',
4420
+ flow: '流程',
4421
+ permission: '权限',
4422
+ noStateMachine: '{{object}} 上没有状态机。',
4423
+ noStateMachineNamed: '{{object}} 上没有名为“{{name}}”的状态机。',
4424
+ lifecycle: '{{object}} 的生命周期',
4425
+ field: '字段 {{field}}',
4426
+ initial: '初始',
4427
+ final: '终态',
4428
+ steps: '步骤:{{count}}',
4429
+ noSteps: '没有可显示的步骤。',
4430
+ untitledStep: '(步骤)',
4431
+ hiddenSteps: '已隐藏技术步骤:{{count}} · 设置 {{setting}} 以显示全部',
4432
+ objectAccess: '对象访问:{{count}}',
4433
+ noPermissions: '未声明对象权限。',
4434
+ object: '对象',
4435
+ unknownType: '未知的元数据视图类型。应为 {{a}}、{{b}} 或 {{c}}。',
4436
+ unknownTypeNamed: '未知的元数据视图类型“{{type}}”。应为 {{a}}、{{b}} 或 {{c}}。',
4437
+ },
4438
+ },
3453
4439
  };
3454
4440
  export default zh;