@object-ui/i18n 17.6.0 → 17.7.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 (56) hide show
  1. package/CHANGELOG.md +4320 -0
  2. package/README.md +192 -13
  3. package/dist/builtinAggregateLabels.d.ts +40 -0
  4. package/dist/builtinAggregateLabels.js +23 -0
  5. package/dist/currency.d.ts +27 -3
  6. package/dist/currency.js +28 -4
  7. package/dist/fallbackInterpolation.d.ts +79 -0
  8. package/dist/fallbackInterpolation.js +124 -0
  9. package/dist/i18n.d.ts +27 -1
  10. package/dist/i18n.js +99 -16
  11. package/dist/index.d.ts +7 -13
  12. package/dist/index.js +41 -17
  13. package/dist/locales/ar.d.ts +946 -113
  14. package/dist/locales/ar.js +1095 -161
  15. package/dist/locales/de.d.ts +618 -113
  16. package/dist/locales/de.js +715 -134
  17. package/dist/locales/en.d.ts +632 -127
  18. package/dist/locales/en.js +1044 -162
  19. package/dist/locales/es.d.ts +700 -113
  20. package/dist/locales/es.js +794 -130
  21. package/dist/locales/fr.d.ts +700 -113
  22. package/dist/locales/fr.js +795 -132
  23. package/dist/locales/index.d.ts +6990 -1169
  24. package/dist/locales/index.js +48 -9
  25. package/dist/locales/ja.d.ts +618 -113
  26. package/dist/locales/ja.js +708 -128
  27. package/dist/locales/ko.d.ts +618 -113
  28. package/dist/locales/ko.js +712 -132
  29. package/dist/locales/pt.d.ts +700 -113
  30. package/dist/locales/pt.js +794 -130
  31. package/dist/locales/registry.d.ts +102 -0
  32. package/dist/locales/registry.js +220 -0
  33. package/dist/locales/rtl.d.ts +24 -0
  34. package/dist/locales/rtl.js +26 -0
  35. package/dist/locales/ru.d.ts +782 -113
  36. package/dist/locales/ru.js +910 -152
  37. package/dist/locales/zh.d.ts +635 -130
  38. package/dist/locales/zh.js +725 -131
  39. package/dist/pickLocalized.d.ts +30 -0
  40. package/dist/pickLocalized.js +39 -0
  41. package/dist/provider.d.ts +101 -12
  42. package/dist/provider.js +335 -50
  43. package/dist/translateFn.d.ts +29 -0
  44. package/dist/translateFn.js +8 -0
  45. package/dist/useDisplayLocale.d.ts +11 -0
  46. package/dist/useDisplayLocale.js +11 -0
  47. package/dist/useObjectLabel.d.ts +40 -18
  48. package/dist/useObjectLabel.js +46 -14
  49. package/dist/useSafeTranslation.js +40 -42
  50. package/dist/utils/formatting.d.ts +16 -0
  51. package/dist/utils/formatting.js +23 -3
  52. package/dist/utils/spec-formatters.d.ts +13 -23
  53. package/dist/utils/spec-formatters.js +41 -2
  54. package/dist/utils/spec-translations.d.ts +16 -3
  55. package/dist/utils/spec-translations.js +52 -13
  56. package/package.json +12 -6
@@ -29,10 +29,12 @@ const zh = {
29
29
  manage_users: '管理用户',
30
30
  manage_org_users: '管理组织用户',
31
31
  manage_metadata: '管理元数据',
32
+ manage_org_presentation: '管理组织展示',
32
33
  manage_platform_settings: '管理平台设置',
33
34
  setup_access: '访问 Setup',
34
35
  setup_write: '保存设置',
35
36
  studio_access: '访问 Studio',
37
+ manage_sharing: '管理共享',
36
38
  },
37
39
  },
38
40
  // objectui#3546 切片六 —— 权限集记录上六个授权面的只读摘要与 Studio 深链
@@ -46,12 +48,16 @@ const zh = {
46
48
  more: '+{{count}} 更多',
47
49
  objects: '{{count}} 个对象',
48
50
  objects_one: '{{count}} 个对象',
51
+ objects_other: '{{count}} 个对象',
49
52
  fields: '{{count}} 条字段规则',
50
53
  fields_one: '{{count}} 条字段规则',
54
+ fields_other: '{{count}} 条字段规则',
51
55
  rls: '{{count}} 条 RLS 策略',
52
56
  rls_one: '{{count}} 条 RLS 策略',
57
+ rls_other: '{{count}} 条 RLS 策略',
53
58
  tabs: '{{count}} 条标签页规则',
54
59
  tabs_one: '{{count}} 条标签页规则',
60
+ tabs_other: '{{count}} 条标签页规则',
55
61
  adminScope: '已配置委派管理范围',
56
62
  designInStudio: '在 Studio 中设计 →',
57
63
  designInStudioHint: '在 Studio 中设计',
@@ -73,7 +79,8 @@ const zh = {
73
79
  selectFirst: '请先选择{{fields}}',
74
80
  selectRecord: '选择记录',
75
81
  recordCount: '{{count}} 条记录',
76
- recordCountOne: '1 条记录',
82
+ recordCount_one: '{{count}} 条记录',
83
+ recordCount_other: '{{count}} 条记录',
77
84
  pageOf: '第 {{current}}/{{total}} 页',
78
85
  filters: '筛选',
79
86
  clear: '清除',
@@ -123,7 +130,8 @@ const zh = {
123
130
  closePanel: '关闭面板',
124
131
  resizeDrawer: '调整面板宽度',
125
132
  itemCount: '{{count}} 项',
126
- itemCountOne: '{{count}} 项',
133
+ itemCount_one: '{{count}} 项',
134
+ itemCount_other: '{{count}} 项',
127
135
  toggleSidebar: '切换侧边栏',
128
136
  package: '软件包',
129
137
  done: '完成',
@@ -131,6 +139,16 @@ const zh = {
131
139
  record: '记录',
132
140
  retry: '重试',
133
141
  printDialogHint: '打开浏览器打印对话框(不是导出 PDF)',
142
+ // The non-grid row ceiling's footnote (objectui#7210). Two keys because
143
+ // there are two conditions: a reported `total` states the fact with BOTH
144
+ // numbers, a missing one cannot name how many. Kept terse deliberately —
145
+ // this copy is eagerly loaded, and since objectui#7399 these bytes are
146
+ // budgeted by the `i18n-locales` chunk, not `framework`. ⛔ That ceiling's
147
+ // headroom is deliberately NOT restated here — it moves on every
148
+ // re-baseline, and the figure that was here went stale.
149
+ // `pnpm check:eager-closure` prints it.
150
+ rowCeilingNote: '仅显示 {{total}} 条记录中的前 {{shown}} 条。请缩小筛选范围。',
151
+ rowCeilingNoteUnknownTotal: '仅显示前 {{shown}} 条记录。请缩小筛选范围。',
134
152
  },
135
153
  actions: {
136
154
  decisionOutput: {
@@ -142,6 +160,14 @@ const zh = {
142
160
  acknowledge: '我已保存',
143
161
  copyAll: '全部复制',
144
162
  },
163
+ notAvailableHere: '「{{action}}」在当前页面不可用。',
164
+ completedSuccessfully: '操作已成功完成',
165
+ failed: '操作失败',
166
+ parallelFailed: '一个或多个并行操作失败',
167
+ undo: '撤销',
168
+ undone: '已撤销更改',
169
+ undoneOperation: '撤销:{{description}}',
170
+ redoneOperation: '重做:{{description}}',
145
171
  },
146
172
  validation: {
147
173
  required: '{{field}}不能为空',
@@ -159,8 +185,12 @@ const zh = {
159
185
  },
160
186
  form: {
161
187
  noPermissionToSave: '您没有权限保存这条记录。',
188
+ noPermissionToCreate: '您没有创建{{object}}的权限,字段均为只读。',
189
+ noPermissionToEdit: '您没有编辑{{object}}的权限,字段均为只读。',
162
190
  submitFailed: '保存失败,请重试。',
163
- addItem: '添加项目',
191
+ uploadInFlight: '请等待上传完成后再保存。',
192
+ clearedOnHide: '已清空不再适用于当前取值的字段:{{fields}}',
193
+ visibleWhenFaulted: '无法提交:{{fields}} 的 visibleWhen 规则无法求值。需先修正该规则,才能提交此表单。',
164
194
  removeItem: '移除项目',
165
195
  fieldRequired: '此字段为必填项',
166
196
  invalidFormat: '格式不正确',
@@ -172,13 +202,35 @@ const zh = {
172
202
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
173
203
  // description, used when the form declares no `description` of its own.
174
204
  dialogDescriptionFallback: '填写表单字段,然后提交或取消。',
205
+ deniedDescription: '您没有此字段的编辑权限。',
206
+ masterDetail: {
207
+ loadingColumns: '正在加载列…',
208
+ subtotal: '小计',
209
+ tax: '税额({{rate}}%)',
210
+ total: '合计',
211
+ lineItem: '明细行',
212
+ rowTitle: '{{title}} — 第 {{row}} 行',
213
+ applyRow: '应用',
214
+ editorDescription: '填写记录及其明细行,然后保存。',
215
+ noChildObject: '此集合未配置子对象:请将 {{property}} 设为其所列行所属的对象。',
216
+ schemaUnavailable: '无法加载 {{object}} 的对象结构,因此此集合没有可显示的列。请检查该对象是否存在且可读,然后重新加载。',
217
+ noRelationshipField: '无法确定 {{object}} 如何关联到 {{parent}}:它没有引用父对象的 lookup 或 master_detail 字段。请在此集合上将 {{property}} 设为保存父记录的字段。',
218
+ },
219
+ lineItems: {
220
+ title: '明细行',
221
+ saveRecordFirst: '保存记录后才能添加明细行。',
222
+ notLoaded: '此记录的明细行尚未加载。',
223
+ loadFailed: '明细行加载失败',
224
+ saveFailed: '明细行保存失败',
225
+ noChildObject: '此面板未配置子对象:请将 {{property}} 设为其所列行所属的对象。',
226
+ },
175
227
  keepEditing: '继续编辑',
176
228
  discard: '放弃',
177
229
  conflictTitle: '保存冲突',
178
230
  conflictMessage: '您编辑期间,这条记录已被其他人修改。覆盖保存将用您的内容替换对方的修改。',
179
231
  conflictLatestVersion: '对方保存时间:{{time}}',
180
232
  conflictOverwrite: '覆盖保存',
181
- stepOf: '第{{current}}步,共{{total}}步',
233
+ stepOf: '第 {{current}} 步,共 {{total}} 步',
182
234
  createTitle: '新建{{object}}',
183
235
  editTitle: '编辑{{object}}',
184
236
  viewTitle: '查看{{object}}',
@@ -189,6 +241,13 @@ const zh = {
189
241
  createSuccess: '{{object}}创建成功',
190
242
  updateSuccess: '{{object}}更新成功',
191
243
  deleteSuccess: '{{object}}删除成功',
244
+ // objectui#11039 — plugin-form feedback chrome; see the `en` pack.
245
+ created: '已创建',
246
+ saved: '已保存',
247
+ savedNamed: '{{title}}已保存',
248
+ submitted: '已提交',
249
+ errorLoading: '表单加载失败',
250
+ navigateRefused: '此表单声明的 `navigateOnSuccess` 跳转目标被拒绝,因此未执行跳转。',
192
251
  fullscreen: {
193
252
  title: '编辑文本',
194
253
  description: '编辑完整的文本内容,然后保存或取消更改。',
@@ -200,6 +259,8 @@ const zh = {
200
259
  fields: {
201
260
  relativeDate: {
202
261
  overdue: '逾期 {{count}} 天',
262
+ overdue_one: '逾期 {{count}} 天',
263
+ overdue_other: '逾期 {{count}} 天',
203
264
  },
204
265
  file: {
205
266
  dragDropHere: '拖拽文件到此处',
@@ -216,6 +277,7 @@ const zh = {
216
277
  remove: '移除 {{name}}',
217
278
  exceedsMaxSize: '“{{name}}” 超过大小上限({{max}} MB)',
218
279
  uploadFailed: '上传 “{{name}}” 失败:{{error}}',
280
+ uploadIncomplete: '“{{name}}” 上传未完成:未返回文件 ID,未保存任何内容',
219
281
  },
220
282
  image: {
221
283
  upload: '上传图片',
@@ -256,6 +318,9 @@ const zh = {
256
318
  selectBusinessUnit: '请选择业务单元',
257
319
  selectPosition: '请选择岗位',
258
320
  selectUnitAndSubordinates: '请选择业务单元',
321
+ selectField: '请选择用户字段',
322
+ noUserFields: '此对象没有用户字段',
323
+ fieldNotUserTyped: '{{name}} — 不是用户字段',
259
324
  },
260
325
  filterCondition: {
261
326
  selectObjectFirst: '请先选择对象。',
@@ -266,6 +331,26 @@ const zh = {
266
331
  editAsJson: '以 JSON 编辑',
267
332
  useVisualBuilder: '使用可视化构建器',
268
333
  },
334
+ object: {
335
+ invalidJson: 'JSON 无效',
336
+ },
337
+ location: {
338
+ refusedFormat: '未保存:请输入纬度, 经度坐标对(例如 30.2741, 120.1551)。',
339
+ refusedRange: '未保存:{{detail}}',
340
+ latitude: '纬度',
341
+ longitude: '经度',
342
+ refusedResidueOne: '未保存:{{name}}“{{text}}”不是数字。请输入普通小数(例如 30.2741, 120.1551)。',
343
+ refusedResidue: '未保存:{{name}}“{{text}}”和{{otherName}}“{{otherText}}”不是数字。请输入普通小数(例如 30.2741, 120.1551)。',
344
+ },
345
+ date: {
346
+ impossibleDay: '存储的值“{{value}}”不是真实存在的日期。请选择日期以替换它。',
347
+ },
348
+ dateTime: {
349
+ impossibleDay: '存储的值“{{value}}”不是真实存在的日期。请选择日期和时间以替换它。',
350
+ },
351
+ number: {
352
+ badInput: '未保存:此输入框中的文本不是数字。请输入普通小数(例如 {{example}})。',
353
+ },
269
354
  tags: {
270
355
  placeholder: '输入后回车添加…',
271
356
  },
@@ -284,6 +369,16 @@ const zh = {
284
369
  characterCount: '已输入 {{count}} 个字符,最多 {{max}} 个',
285
370
  charactersRemaining: '还可输入 {{count}} 个字符',
286
371
  },
372
+ grid: {
373
+ addLine: '添加行',
374
+ noItems: '暂无条目',
375
+ noItemsAddHint: '暂无条目,点击“{{label}}”开始添加。',
376
+ optionalColumns: '可选列',
377
+ computed: '自动计算',
378
+ openRow: '打开行',
379
+ duplicateRow: '复制行',
380
+ removeRow: '删除行',
381
+ },
287
382
  },
288
383
  table: {
289
384
  rowsPerPage: '每页行数',
@@ -312,8 +407,12 @@ const zh = {
312
407
  open: '打开',
313
408
  search: '搜索…',
314
409
  modified: '{{count}} 行已修改',
410
+ modified_one: '{{count}} 行已修改',
411
+ modified_other: '{{count}} 行已修改',
315
412
  saveFailed: '保存失败',
316
413
  selected: '已选择 {{count}} 项',
414
+ selected_one: '已选择 {{count}} 项',
415
+ selected_other: '已选择 {{count}} 项',
317
416
  edit: '编辑',
318
417
  delete: '删除',
319
418
  },
@@ -330,9 +429,13 @@ const zh = {
330
429
  openRecord: '打开记录',
331
430
  openMenu: '更多操作',
332
431
  bulkSelected: '已选择 {{count}} 项',
432
+ bulkSelected_one: '已选择 {{count}} 项',
433
+ bulkSelected_other: '已选择 {{count}} 项',
333
434
  bulkSelectedAllMatches: '已选择全部 {{count}} 项(全部匹配)',
334
435
  bulkClear: '清除',
335
436
  bulkAllOnPage: '本页 {{count}} 项已全选。',
437
+ bulkAllOnPage_one: '本页 {{count}} 项已全选。',
438
+ bulkAllOnPage_other: '本页 {{count}} 项已全选。',
336
439
  bulkSelectAllMatching: '选择全部 {{count}} 项匹配记录',
337
440
  bulkAllMatchingSelected: '已选择全部 {{count}} 项匹配记录。',
338
441
  rowHeight: '行高: {{mode}}',
@@ -340,6 +443,14 @@ const zh = {
340
443
  yes: '是',
341
444
  no: '否',
342
445
  systemFields: '系统字段',
446
+ // objectui#10881 — the grouped grid's two refusals: over a data source
447
+ // that cannot answer the group header query, and over rows a host
448
+ // handed in while declaring them one page of more. `queryGroupHeaders`
449
+ // is the member's name and stays untranslated.
450
+ grouping: {
451
+ needsHeaderQuery: '此视图已分组,但其数据源未实现 queryGroupHeaders,因此无法统计分组。移除分组即可显示记录。',
452
+ needsWholeRows: '分组需要全部记录,但此表格只收到其中一页,因此无法统计分组。请传入全部记录,或让表格从实现了 queryGroupHeaders 的数据源获取记录。',
453
+ },
343
454
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
344
455
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
345
456
  // pack controls its own separator and word order.
@@ -411,7 +522,11 @@ const zh = {
411
522
  mapped: '已映射',
412
523
  skipped: '已跳过',
413
524
  rowsWithErrors: '{{count}} 行有错误',
525
+ rowsWithErrors_one: '{{count}} 行有错误',
526
+ rowsWithErrors_other: '{{count}} 行有错误',
414
527
  rowsCorrected: '已修正 {{count}} 行',
528
+ rowsCorrected_one: '已修正 {{count}} 行',
529
+ rowsCorrected_other: '已修正 {{count}} 行',
415
530
  clickToFix: '— 点击高亮单元格可直接修改。',
416
531
  showingRows: '显示第 {{shown}} 行,共 {{total}} 行',
417
532
  importing: '导入中… {{progress}}%',
@@ -419,11 +534,15 @@ const zh = {
419
534
  imported: '已导入 {{count}} 条',
420
535
  skippedCount: '已跳过 {{count}} 条',
421
536
  moreErrors: '…还有 {{count}} 个错误',
537
+ moreErrors_one: '…还有 {{count}} 个错误',
538
+ moreErrors_other: '…还有 {{count}} 个错误',
422
539
  cancel: '取消',
423
540
  back: '上一步',
424
541
  next: '下一步',
425
542
  close: '关闭',
426
543
  importNRows: '导入 {{count}} 行',
544
+ importNRows_one: '导入 {{count}} 行',
545
+ importNRows_other: '导入 {{count}} 行',
427
546
  importingProgress: '导入中…',
428
547
  requiredMark: '*',
429
548
  optTreatHistorical: '作为历史数据导入',
@@ -436,6 +555,8 @@ const zh = {
436
555
  // 自动匹配(Airtable 风格)
437
556
  autoMatched: '自动匹配',
438
557
  autoMatchedSummary: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
558
+ autoMatchedSummary_one: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
559
+ autoMatchedSummary_other: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
439
560
  confidence: {
440
561
  high: '高置信度',
441
562
  medium: '中置信度',
@@ -443,8 +564,10 @@ const zh = {
443
564
  },
444
565
  // 下载模板
445
566
  downloadTemplate: '下载模板',
446
- downloadTemplateHint: '获取带正确列的 CSV(必填字段标 *)。',
567
+ downloadTemplateHint: '获取 Excel 模板:仅含可导入的列(必填字段标 *),并附填写说明。',
447
568
  templateFileName: '{{object}}-导入模板',
569
+ templateDownloadFailed: '模板下载失败,请重试。',
570
+ templateNotPermitted: '您没有新建该对象记录的权限,无法获取其导入模板。',
448
571
  // 校验(服务端 dryRun 预检)
449
572
  validate: '校验数据',
450
573
  validateHint: '导入前在服务端逐行校验。',
@@ -452,6 +575,8 @@ const zh = {
452
575
  validatePassed: '全部 {{ok}} 行均有效。',
453
576
  validateFailed: '{{ok}} 条有效,{{errors}} 条有错误。',
454
577
  errorCount: '{{count}} 个错误',
578
+ errorCount_one: '{{count}} 个错误',
579
+ errorCount_other: '{{count}} 个错误',
455
580
  errorRowPrefix: '第 {{row}} 行:',
456
581
  // 服务端结构化导入错误的友好文案
457
582
  referenceNotFound: '找不到匹配 "{{value}}" 的记录',
@@ -482,8 +607,14 @@ const zh = {
482
607
  optBackgroundHint: '(作为可撤销任务运行)',
483
608
  // 结果
484
609
  createdCount: '新建 {{count}} 条',
610
+ createdCount_one: '新建 {{count}} 条',
611
+ createdCount_other: '新建 {{count}} 条',
485
612
  updatedCount: '更新 {{count}} 条',
613
+ updatedCount_one: '更新 {{count}} 条',
614
+ updatedCount_other: '更新 {{count}} 条',
486
615
  resultsTruncated: '显示前 {{count}} 行结果(共 {{total}} 行)。',
616
+ resultsTruncated_one: '显示前 {{count}} 行结果(共 {{total}} 行)。',
617
+ resultsTruncated_other: '显示前 {{count}} 行结果(共 {{total}} 行)。',
487
618
  downloadFailed: '下载失败行',
488
619
  cancelImport: '取消导入',
489
620
  importCancelled: '导入已取消',
@@ -520,9 +651,13 @@ const zh = {
520
651
  },
521
652
  bulk: {
522
653
  confirmDefault: '此操作将应用于 {{count}} 条记录。',
654
+ confirmDefault_one: '此操作将应用于 {{count}} 条记录。',
655
+ confirmDefault_other: '此操作将应用于 {{count}} 条记录。',
523
656
  overLimit: '所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。',
524
657
  affectedRecords: '受影响的记录({{count}}):',
525
658
  skippedIneligible: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
659
+ skippedIneligible_one: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
660
+ skippedIneligible_other: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
526
661
  rowFallback: '第 {{index}} 行',
527
662
  andMore: '……以及另外 {{count}} 条',
528
663
  processed: '已处理 {{count}} / {{total}}',
@@ -540,7 +675,6 @@ const zh = {
540
675
  undo: '撤销',
541
676
  undoing: '撤销中…',
542
677
  done: '完成',
543
- selectPlaceholder: '请选择…',
544
678
  loading: '加载中…',
545
679
  },
546
680
  },
@@ -549,16 +683,43 @@ const zh = {
549
683
  month: '月',
550
684
  week: '周',
551
685
  day: '日',
552
- agenda: '日程',
553
686
  allDay: '全天',
554
- noEvents: '暂无事件',
555
687
  newEvent: '新建事件',
556
688
  moreEvents: '+{{count}} 更多',
689
+ unscheduled: '未排期 ({{count}})',
690
+ loading: '加载日历中…',
691
+ loadError: '错误:{{message}}',
692
+ configRequired: '需要日历配置。请指定 startDateField,这是日历唯一必填的键;事件标题无需 titleField 也能解析。',
693
+ configRequiredHint: '它属于视图的 calendar 块。界面页面没有自己的日历插槽:请将其 sourceView 指向一个声明了日历的视图。',
694
+ eventDetails: '事件详情',
695
+ pullToRefresh: '下拉刷新',
696
+ refreshing: '刷新中…',
697
+ onDate: '{{date}}',
698
+ eventTitle: '标题',
699
+ eventTitlePlaceholder: '这个事件是关于什么的?',
700
+ creating: '创建中…',
701
+ titleRequired: '请填写标题',
702
+ a11y: {
703
+ region: '日历',
704
+ grid: '日历网格',
705
+ goToToday: '转到今天',
706
+ previousPeriod: '上一时段',
707
+ nextPeriod: '下一时段',
708
+ currentDate: '当前日期:{{date}}',
709
+ dayCell: '{{date}},{{count}} 个日程',
710
+ dayCell_one: '{{date}},{{count}} 个日程',
711
+ dayCell_other: '{{date}},{{count}} 个日程',
712
+ resizeEventEnd: '调整日程结束时间',
713
+ resizeEventEndHint: '拖动以更改结束日期',
714
+ resizeStart: '调整开始时间',
715
+ resizeEnd: '调整结束时间',
716
+ },
557
717
  },
558
718
  list: {
559
719
  loading: '正在加载记录…',
560
720
  recordCount: '{{count}} 条记录',
561
- recordCountOne: '{{count}} 条记录',
721
+ recordCount_one: '{{count}} 条记录',
722
+ recordCount_other: '{{count}} 条记录',
562
723
  addRecord: '添加记录',
563
724
  tabs: '标签页',
564
725
  allRecords: '全部记录',
@@ -628,7 +789,7 @@ const zh = {
628
789
  hideFieldsTitle: '隐藏字段',
629
790
  dataLimitReached: '显示前 {{limit}} 条记录。可能有更多数据。',
630
791
  viewSettings: '视图设置',
631
- viewSettingsHint: '分组、行颜色、密度与可见字段。',
792
+ viewSettingsHint: '分组、行颜色、密度与可见字段。对所有使用该视图的用户生效。',
632
793
  addGroup: '添加分组字段',
633
794
  collapsedByDefault: '默认折叠',
634
795
  removeGroup: '删除',
@@ -693,6 +854,17 @@ const zh = {
693
854
  },
694
855
  gantt: {
695
856
  rowLabel: '条目',
857
+ unusableRange: {
858
+ malformedDate: '甘特图日期区间不可用 —— {{path}} 的值是 {{value}},无法解析为日期。每个甘特图日期都必须能被解析:每行条目的 startDate 与 endDate,以及 schema 上钉住的 minDate / maxDate。',
859
+ malformedRow: '甘特图行不可用 —— {{path}} 的值是 {{value}},不是行的形状。甘特图把 items 读作行的列表,每一行是带 label 和自身 items 的对象,每一行的 items 是条形的列表;这些位置上出现 null、数字、字符串或普通对象都无法绘制。',
860
+ inverted: '甘特图日期区间不可用 —— minDate {{minDate}} 晚于 maxDate {{maxDate}}。钉住的 minDate / maxDate 会覆盖由行数据算出的区间,因此该坐标轴没有任何列,也无法放置任何条形;请对调这两个值。',
861
+ },
862
+ },
863
+ unsupported: {
864
+ objectBoundGantt: '不支持的变体 "gantt" —— 对象绑定的时间线只渲染 feed 变体({{variants}})。甘特图需要字面量行,每行自带嵌套的 items,因此此处的甘特轴(scale)不起作用。',
865
+ },
866
+ unconfigured: {
867
+ noDateAxis: '时间线需要日期轴 —— 该视图未声明任何日期字段,而对象绑定的时间线不会虚构一个。请声明以下之一:{{fields}}。第一个是 spec 写法,其余为遗留别名。',
696
868
  },
697
869
  },
698
870
  gantt: {
@@ -738,6 +910,7 @@ const zh = {
738
910
  },
739
911
  aria: {
740
912
  taskList: '任务列表',
913
+ refreshing: '刷新中…',
741
914
  },
742
915
  tooltip: {
743
916
  days: '天',
@@ -783,13 +956,19 @@ const zh = {
783
956
  conflict: {
784
957
  title: '排程冲突',
785
958
  body: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
959
+ body_one: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
960
+ body_other: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
786
961
  confirm: '自动重新排程',
787
962
  cancel: '保持不变',
788
963
  },
789
964
  autoScheduleDlg: {
790
965
  title: '自动排程',
791
966
  body: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
967
+ body_one: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
968
+ body_other: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
792
969
  skipped: '另有 {{count}} 项因锁定/无权限跳过。',
970
+ skipped_one: '另有 {{count}} 项因锁定/无权限跳过。',
971
+ skipped_other: '另有 {{count}} 项因锁定/无权限跳过。',
793
972
  confirm: '执行',
794
973
  cancel: '取消',
795
974
  none: '依赖均满足,无需排程',
@@ -840,6 +1019,7 @@ const zh = {
840
1019
  tabActionsFor: '{{name}} 的视图操作',
841
1020
  readonlyAriaLabel: '只读视图',
842
1021
  readonlyTooltip: '系统视图 — 由代码定义,只读。',
1022
+ malformedFilter: '此视图的筛选条件有误,因此不显示任何记录:无法应用 {{subject}} 条件。',
843
1023
  },
844
1024
  designer: {
845
1025
  undo: '撤销',
@@ -860,6 +1040,7 @@ const zh = {
860
1040
  writeStrippedReadonly: '以下字段为只读,未生效:{{fields}}',
861
1041
  writeStrippedByState: '以下字段在记录当前状态下不可编辑,未生效:{{fields}}',
862
1042
  writeStrippedPrimaryKey: '以下字段是记录的标识符,保存时无法修改,未生效:{{fields}}',
1043
+ writeStrippedComputed: '以下字段由服务端按公式计算,提交的值未生效:{{fields}}',
863
1044
  writeStrippedUnknownReason: '以下字段未被服务端写入:{{fields}}',
864
1045
  approvalPendingEditable: '审批中 · 可编辑',
865
1046
  approvalPendingTooltip: '该记录有待审批的请求,但当前审批节点仍允许编辑',
@@ -881,6 +1062,8 @@ const zh = {
881
1062
  pathStageLostUpcoming: '{{stage}},已失败,未到达',
882
1063
  pathStageWonUpcoming: '{{stage}},目标阶段,未到达',
883
1064
  linkCopied: '链接已复制到剪贴板',
1065
+ commentFailed: '评论未发布,内容没有保存,请重试。',
1066
+ reactionFailed: '表情回应未保存,请重试。',
884
1067
  linkCopyFailed: '复制链接失败',
885
1068
  cancel: '取消',
886
1069
  cancelEdit: '放弃更改',
@@ -907,7 +1090,8 @@ const zh = {
907
1090
  pageHeaderActions: '页面标题栏操作',
908
1091
  emojiPicker: '表情选择器',
909
1092
  reactionCount: '{{emoji}} {{count}} 个回应',
910
- reactionCountOne: '{{emoji}} {{count}} 个回应',
1093
+ reactionCount_one: '{{emoji}} {{count}} 个回应',
1094
+ reactionCount_other: '{{emoji}} {{count}} 个回应',
911
1095
  recordDetail: '记录详情',
912
1096
  recordDetailWithLabel: '{{label}}详情',
913
1097
  openAsFullPage: '以完整页面打开',
@@ -934,7 +1118,6 @@ const zh = {
934
1118
  viewAll: '查看全部',
935
1119
  new: '新建',
936
1120
  add: '添加',
937
- emptyValue: '—',
938
1121
  activity: '活动',
939
1122
  history: '历史',
940
1123
  historyEmpty: '暂无历史记录',
@@ -949,6 +1132,7 @@ const zh = {
949
1132
  sortBy: '排序',
950
1133
  filterPlaceholder: '筛选…',
951
1134
  highlightFields: '关键字段',
1135
+ highlightsLabel: '记录关键字段',
952
1136
  // Comments
953
1137
  comments: '评论',
954
1138
  searchComments: '搜索评论…',
@@ -960,8 +1144,14 @@ const zh = {
960
1144
  unpin: '取消置顶',
961
1145
  justNow: '刚刚',
962
1146
  minutesAgo: '{{count}}分钟前',
1147
+ minutesAgo_one: '{{count}}分钟前',
1148
+ minutesAgo_other: '{{count}}分钟前',
963
1149
  hoursAgo: '{{count}}小时前',
1150
+ hoursAgo_one: '{{count}}小时前',
1151
+ hoursAgo_other: '{{count}}小时前',
964
1152
  daysAgo: '{{count}}天前',
1153
+ daysAgo_one: '{{count}}天前',
1154
+ daysAgo_other: '{{count}}天前',
965
1155
  // Activity feed actors
966
1156
  systemActor: '系统',
967
1157
  unknownUser: '未知用户',
@@ -975,7 +1165,8 @@ const zh = {
975
1165
  // Attachments
976
1166
  dropFilesToUpload: '拖拽文件到此处或点击上传',
977
1167
  attachmentCount: '{{count}} 个附件',
978
- attachmentCountPlural: '{{count}} 个附件',
1168
+ attachmentCount_one: '{{count}} 个附件',
1169
+ attachmentCount_other: '{{count}} 个附件',
979
1170
  removeAttachment: '移除附件',
980
1171
  // Record Attachments panel (enable.files, objectstack#4358)
981
1172
  attachments: '附件',
@@ -994,11 +1185,6 @@ const zh = {
994
1185
  attachmentsApiUnavailable: '此对象上的附件列表不可用。',
995
1186
  retryLoadAttachments: '重试',
996
1187
  // Diff
997
- unifiedDiff: '统一视图',
998
- sideBySideDiff: '并排视图',
999
- noChanges: '无变更',
1000
- previousVersion: '旧版本',
1001
- currentVersion: '新版本',
1002
1188
  // Discussion
1003
1189
  discussion: '讨论',
1004
1190
  showDiscussion: '显示讨论 ({{count}})',
@@ -1017,18 +1203,12 @@ const zh = {
1017
1203
  subscribedTooltip: '已订阅 — 点击取消订阅',
1018
1204
  unsubscribedTooltip: '订阅通知',
1019
1205
  // Navigation
1020
- firstRecord: '第一条记录 (Home)',
1021
- previousRecordKey: '上一条记录 (←)',
1022
- nextRecordKey: '下一条记录 (→)',
1023
- lastRecord: '最后一条记录 (End)',
1024
1206
  noRecords: '无记录',
1025
1207
  // objectui#3863 — base key. zh has a single plural category (`other`), so this
1026
1208
  // slot is unreachable here and equals `_other` for key-set parity.
1027
1209
  showEmptyRelated: '+ {{count}} 个为空',
1028
1210
  showEmptyRelated_one: '+ {{count}} 个为空',
1029
1211
  showEmptyRelated_other: '+ {{count}} 个为空',
1030
- searchWhileNavigating: '导航时搜索',
1031
- searchRecords: '搜索记录…',
1032
1212
  // Activity timeline
1033
1213
  allActivity: '全部动态',
1034
1214
  commentsOnly: '仅评论',
@@ -1036,13 +1216,29 @@ const zh = {
1036
1216
  tasksOnly: '仅任务',
1037
1217
  leaveCommentPlaceholder: '留下评论… (Ctrl+Enter 提交)',
1038
1218
  noActivity: '暂无活动记录',
1219
+ activityAccessDenied: '您没有查看此记录活动的权限。',
1220
+ commentsAccessDenied: '您没有查看此记录评论的权限。',
1221
+ // objectui#7149 — the rest of `ActivityTimeline`. The four chip labels the
1222
+ // `detail.*` pack did not already name, and the `formatFieldChange`
1223
+ // sentences, which are assembled in code and so need interpolation holes.
1224
+ allFilter: '全部',
1225
+ createsFilter: '创建',
1226
+ deletesFilter: '删除',
1227
+ statusChangesFilter: '状态变更',
1228
+ activityEmptyValue: '(空)',
1229
+ activityFieldChanged: '将 {{field}} 从“{{old}}”改为“{{new}}”',
1230
+ activityCreated: '创建了此记录',
1231
+ activityDeleted: '删除了此记录',
1232
+ activityStatusChanged: '将状态改为“{{value}}”',
1233
+ activityUpdated: '更新了记录',
1039
1234
  loadMore: '加载更多',
1040
1235
  edited: '(已编辑)',
1041
1236
  via: '通过 {{source}}',
1042
1237
  viewSource: '查看来源',
1043
1238
  // Replies
1044
1239
  replyCount: '{{count}} 条回复',
1045
- replyCountPlural: '{{count}} 条回复',
1240
+ replyCount_one: '{{count}} 条回复',
1241
+ replyCount_other: '{{count}} 条回复',
1046
1242
  replyPlaceholder: '回复…',
1047
1243
  // 无障碍标签
1048
1244
  filterActivity: '筛选活动',
@@ -1055,13 +1251,27 @@ const zh = {
1055
1251
  copyPhone: '复制电话号码',
1056
1252
  copyRecordId: '复制记录 ID',
1057
1253
  showEmptyFields: '显示 {{count}} 个空字段',
1254
+ showEmptyFields_one: '显示 {{count}} 个空字段',
1255
+ showEmptyFields_other: '显示 {{count}} 个空字段',
1058
1256
  hideEmptyFields: '隐藏空字段',
1059
1257
  noValue: '无',
1258
+ unresolvedReference: '未解析的引用:{{value}} 未能解析为用户',
1259
+ unresolvedLookupReference: '未解析的引用:{{value}} 在本屏未能解析为记录',
1260
+ repeaterItemCount: '{{count}} 项',
1261
+ repeaterItemCount_one: '{{count}} 项',
1262
+ repeaterItemCount_other: '{{count}} 项',
1263
+ fileCount: '{{count}} 个文件',
1264
+ fileCount_one: '{{count}} 个文件',
1265
+ fileCount_other: '{{count}} 个文件',
1060
1266
  },
1061
1267
  chart: {
1062
- noData: '暂无图表数据',
1063
1268
  loading: '图表加载中…',
1269
+ refreshing: '刷新中…',
1064
1270
  nullCategory: '(未指定)',
1271
+ scatterOneMeasure: '散点图只绘制一个度量。请只保留一个系列:',
1272
+ unconfigured: {
1273
+ noCategoryAxis: '图表需要分类轴 —— 对象绑定的图表不会虚构一个。请声明以下之一:',
1274
+ },
1065
1275
  },
1066
1276
  report: {
1067
1277
  total: '总计',
@@ -1089,26 +1299,34 @@ const zh = {
1089
1299
  panelTitle: '编辑报表',
1090
1300
  },
1091
1301
  },
1092
- map: {
1093
- searchLocations: '搜索位置…',
1094
- locationDetails: '位置详情',
1095
- markersCount: '{{count}} 个标记',
1096
- invalidCoordinates: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1097
- invalidCoordinatesPlural: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1098
- },
1099
1302
  dashboard: {
1100
1303
  addWidget: '添加组件',
1101
- removeWidget: '移除组件',
1102
1304
  editLayout: '编辑布局',
1103
1305
  saveLayout: '保存布局',
1104
1306
  resetLayout: '重置布局',
1105
1307
  total: '总计',
1106
- noDataAvailable: '暂无数据',
1107
1308
  noDataSourceFor: '没有可用的数据源:',
1108
- noRows: '暂无数据行',
1309
+ // objectui#7063 — the DEFAULT empty state every dashboard widget renders
1310
+ // when its query SUCCEEDED and returned nothing. It replaced the terse
1311
+ // per-widget `noRows` / `noDataAvailable` fragments at the render site;
1312
+ // objectui#7125 deleted those two keys from all ten packs once nothing
1313
+ // read them. The copy here has to read as a state rather than a failure,
1314
+ // which is why it says the widget loaded. `sourceLabel` carries its own
1315
+ // punctuation so the call site concatenates no separator (see
1316
+ // `WidgetEmptyState`).
1317
+ empty: {
1318
+ title: '暂时还没有数据',
1319
+ message: '该组件已成功加载,只是查询目前没有返回任何记录。',
1320
+ sourceLabel: '数据源:',
1321
+ },
1109
1322
  loading: '加载中…',
1323
+ refreshing: '刷新中…',
1324
+ refreshAll: '全部刷新',
1325
+ refreshDashboard: '刷新仪表盘',
1110
1326
  pickMeasures: '请为该数据集组件选择度量(值)。',
1111
1327
  datasetUnsupported: '当前数据源不支持数据集查询。',
1328
+ widgetForbiddenTitle: '无权访问',
1329
+ widgetForbiddenMessage: '你没有查看该组件数据的权限。',
1112
1330
  details: '明细',
1113
1331
  exportCsv: '导出 CSV',
1114
1332
  openInList: '在列表中打开',
@@ -1255,10 +1473,6 @@ const zh = {
1255
1473
  appDescription: '描述',
1256
1474
  appIcon: '图标',
1257
1475
  template: '模板',
1258
- layout: '布局',
1259
- layoutSidebar: '侧边栏',
1260
- layoutHeader: '顶部导航',
1261
- layoutEmpty: '空白',
1262
1476
  selectObjects: '选择对象',
1263
1477
  searchObjects: '搜索对象…',
1264
1478
  selectAll: '全选',
@@ -1267,7 +1481,6 @@ const zh = {
1267
1481
  addGroup: '添加分组',
1268
1482
  addUrl: '添加链接',
1269
1483
  addSeparator: '添加分隔线',
1270
- noNavItems: '暂无导航项。',
1271
1484
  logoUrl: 'Logo 链接',
1272
1485
  primaryColor: '主色调',
1273
1486
  faviconUrl: '网站图标链接',
@@ -1294,13 +1507,12 @@ const zh = {
1294
1507
  appearance: '外观',
1295
1508
  rowHeight: '行高',
1296
1509
  livePreview: '实时预览',
1297
- stepBasicDesc: '名称、标题和布局',
1510
+ stepBasicDesc: '名称、标题和图标',
1298
1511
  stepObjectsDesc: '选择业务对象',
1299
1512
  stepNavigationDesc: '构建导航树',
1300
1513
  stepBrandingDesc: 'Logo、颜色和图标',
1301
1514
  noObjectsFound: '未找到对象。',
1302
1515
  noNavItemsHint: '暂无导航项。请在上一步选择对象或手动添加项目。',
1303
- separator: '分隔线',
1304
1516
  separatorLabel: '— 分隔线 —',
1305
1517
  newGroup: '新建分组',
1306
1518
  newLink: '新建链接',
@@ -1334,6 +1546,7 @@ const zh = {
1334
1546
  navTypeSeparator: '分隔线',
1335
1547
  navTypeAction: '操作',
1336
1548
  navTypeComponent: '组件',
1549
+ navTypeDoc: '文档',
1337
1550
  navEditIcon: '编辑图标',
1338
1551
  navToggleVisible: '切换可见性',
1339
1552
  navHidden: '已隐藏',
@@ -1411,11 +1624,8 @@ const zh = {
1411
1624
  defaultValue: '默认值',
1412
1625
  placeholder: '占位文本',
1413
1626
  referenceTo: '引用对象',
1414
- formula: '公式',
1415
1627
  options: '选项',
1416
1628
  addOption: '添加选项',
1417
- validationRules: '验证规则',
1418
- addRule: '添加规则',
1419
1629
  systemBadge: '系统',
1420
1630
  ungrouped: '通用',
1421
1631
  deleteConfirmTitle: '删除字段?',
@@ -1434,21 +1644,57 @@ const zh = {
1434
1644
  },
1435
1645
  },
1436
1646
  console: {
1647
+ studio: {
1648
+ backToHome: '返回首页',
1649
+ },
1437
1650
  saveAdvisoryTitle: '已保存 — 编辑检查提出了 {{count}} 条建议',
1651
+ saveAdvisoryTitle_one: '已保存 — 编辑检查提出了 {{count}} 条建议',
1652
+ saveAdvisoryTitle_other: '已保存 — 编辑检查提出了 {{count}} 条建议',
1653
+ publishAdvisoryTitle: '已发布 — 编辑检查提出了 {{count}} 条建议',
1654
+ publishAdvisoryTitle_one: '已发布 — 编辑检查提出了 {{count}} 条建议',
1655
+ publishAdvisoryTitle_other: '已发布 — 编辑检查提出了 {{count}} 条建议',
1656
+ importMappingsUnavailable: "无法加载 {{object}} 的已保存导入映射",
1657
+ importMappingsRefused: "服务器拒绝了此请求,因此该列表为空是因为读取失败,而不是因为没有注册任何映射。请重新登录,或联系管理员申请访问权限。",
1658
+ importMappingsUnreadable: "该列表为空是因为读取失败,而不是因为没有注册任何映射。请重试;如果反复出现,请反馈此问题。",
1659
+ savedViewsUnavailable: "无法加载 {{object}} 的已保存视图",
1660
+ savedViewsRefused: "服务器拒绝了此请求,因此该列表为空是因为读取失败,而不是因为该对象没有已保存的视图。请重新登录,或联系管理员申请访问权限。",
1661
+ savedViewsUnreadable: "该列表为空是因为读取失败,而不是因为该对象没有已保存的视图。请重试;如果反复出现,请反馈此问题。",
1438
1662
  title: 'ObjectStack 控制台',
1439
1663
  initializing: '正在初始化应用程序…',
1440
1664
  search: '搜索…',
1441
1665
  breadcrumb: {
1442
1666
  dashboards: '仪表盘',
1443
1667
  pages: '页面',
1444
- reports: '报告',
1668
+ // objectui#6166 — 报表 here is a maintainer RULING (2026-08-25), not a
1669
+ // majority count. 报表 (tabular/data report) and 报告 (written/narrative
1670
+ // report) are NOT interchangeable, so this key holding 报告 against the
1671
+ // rest of the pack was read as evidence of a majority and never, on its
1672
+ // own, as evidence of a mistake; the call was made on what renders. This
1673
+ // segment labels the `routeType === 'report'` LIST route (app-shell
1674
+ // AppHeader) — a structural sibling of dashboards/pages that drills into
1675
+ // metadata report definitions, i.e. the same feature that
1676
+ // `console.commandPalette.reports`, `console.nav.navReport` and
1677
+ // `search.badgeReport` already call 报表. Nothing narrative renders
1678
+ // beneath it. Don't re-file this as a pack inconsistency, and don't
1679
+ // restore 报告 without a new ruling.
1680
+ reports: '报表',
1445
1681
  system: '系统',
1682
+ marketplace: '应用市场',
1683
+ settings: '设置',
1684
+ apps: '应用',
1685
+ profile: '个人资料',
1686
+ approvals: '审批',
1687
+ aiApprovals: 'AI 审批',
1688
+ auditLog: '审计日志',
1446
1689
  },
1447
1690
  nav: {
1448
1691
  pinItem: '固定 {{name}}',
1449
1692
  unpinItem: '取消固定 {{name}}',
1450
1693
  dragToReorder: '拖动以重新排序',
1451
1694
  favorites: '收藏',
1695
+ launcherLabel: '应用启动台',
1696
+ menuLabel: '应用导航',
1697
+ menuEmpty: '此应用没有你可以打开的导航项。',
1452
1698
  },
1453
1699
  settingsHub: {
1454
1700
  title: '设置',
@@ -1575,9 +1821,16 @@ const zh = {
1575
1821
  statusFull: '额度已用完',
1576
1822
  resetsDaily: '今晚重置',
1577
1823
  resetsMonthly: '下个周期重置',
1824
+ resetsWeeklyDays: '{{count}} 天后重置',
1825
+ resetsWeeklyDays_one: '{{count}} 天后重置',
1826
+ resetsWeeklyDays_other: '{{count}} 天后重置',
1827
+ resetsWeeklyHours: '{{count}} 小时后重置',
1828
+ resetsWeeklyHours_one: '{{count}} 小时后重置',
1829
+ resetsWeeklyHours_other: '{{count}} 小时后重置',
1578
1830
  ctaUpgrade: '升级以继续使用',
1579
1831
  ctaTopUp: '购买额度包以继续',
1580
1832
  ariaLabel: 'AI 用量:{{status}}',
1833
+ breakdownTitle: '已用额度构成',
1581
1834
  },
1582
1835
  workspaceTitle: 'AI 工作区',
1583
1836
  workspaceSubtitle: '提问、查看并继续历史对话',
@@ -1587,6 +1840,31 @@ const zh = {
1587
1840
  share: '分享',
1588
1841
  shareTitle: '分享此对话',
1589
1842
  shareDisabledTitle: '开始对话后即可分享',
1843
+ buildDoctor: '构建诊断',
1844
+ buildDoctorTitle: '构建诊断 — 实际生效了哪些变更?',
1845
+ buildDoctorDisabledTitle: '请先发送一条消息',
1846
+ buildDoctorDrawer: {
1847
+ description: '智能体声称的变更与实际已生效的内容对照。只读诊断。',
1848
+ reconciling: '正在核对…',
1849
+ notAvailable: '不可用——未找到该对话,或你没有访问权限。',
1850
+ untitled: '(无标题)',
1851
+ summary: '{{turns}} 轮 · {{messages}} 条消息 · {{tokens}} tok · LLM {{seconds}} 秒',
1852
+ allLive: '全部 {{count}} 项尝试的变更均已生效——没有丢失。',
1853
+ discrepancies: '{{count}} 处不一致——对话中所说的与实际生效的内容不符。',
1854
+ orphanedTitle: '已提议但从未应用',
1855
+ orphanedHint: '智能体提议了确认卡片,但之后没有任何一轮应用它——该变更被静默丢弃。',
1856
+ missingTitle: '声称已应用但缺失',
1857
+ missingHint: '工具结果称已应用,但该产物并未在 sys_metadata 中生效。',
1858
+ toolErrorsTitle: '工具错误',
1859
+ toolErrorsHint: '构建期间返回错误的工具调用。',
1860
+ verifyTitle: '构建检查(verify_build)',
1861
+ yourApp: '你的应用:',
1862
+ noIssues: '0 个问题',
1863
+ issueCount: '{{count}} 个问题',
1864
+ platformNoise: '已隐藏 {{count}} 条平台 sys_* 发现',
1865
+ pendingActions: '待处理操作',
1866
+ timeline: '时间线({{count}})',
1867
+ },
1590
1868
  newChat: '新对话',
1591
1869
  searchChats: '搜索对话…',
1592
1870
  noChatsYet: '暂无对话',
@@ -1616,7 +1894,7 @@ const zh = {
1616
1894
  empty: {
1617
1895
  build: {
1618
1896
  title: '用 AI 搭建',
1619
- description: '用自然语言描述一个应用或流程 —— 我会起草对象、界面和自动化,随后你审阅并发布。',
1897
+ description: '用自然语言描述一个应用 —— 我会起草对象、界面和示例数据,随后你审阅并发布。',
1620
1898
  },
1621
1899
  ask: {
1622
1900
  title: '向你的数据提问',
@@ -1625,7 +1903,7 @@ const zh = {
1625
1903
  editApp: {
1626
1904
  title: '正在编辑「{{app}}」',
1627
1905
  titleGeneric: '编辑此应用',
1628
- description: '想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或自动化,或调整已有内容。',
1906
+ description: '想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或仪表盘,或调整已有内容。',
1629
1907
  },
1630
1908
  },
1631
1909
  clearConversation: '清空',
@@ -1709,23 +1987,41 @@ const zh = {
1709
1987
  recentRecords: '帮我列出最近创建的 5 条记录。',
1710
1988
  recordCounts: '统计每个对象的记录数。',
1711
1989
  },
1990
+ // cloud#1984 — these five chips are the maker's own recommendations, so
1991
+ // they may only ask for what ADR-0112 v1 BUILDS: objects, fields, views
1992
+ // (grid/kanban/calendar/gallery), pages, dashboards and sample data. No
1993
+ // wording that promises autonomous behaviour (alert / remind / notify /
1994
+ // automate / status workflow) — v1 has no flows, actions or schedules, and
1995
+ // the model silently degrades such a request into a board or a filtered
1996
+ // view, so the chip would promise an alert and deliver a page. REVERT to
1997
+ // the automation wording when ADR-0112 v2 re-adds flows and actions.
1712
1998
  metadataAssistant: {
1713
- buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,并建立它们之间的关系。',
1714
- buildApp: '做一个项目管理应用:项目、任务、成员。',
1715
- buildFlow: '设计一个工单系统:工单、优先级、状态流转。',
1716
- buildInventory: '做一个库存管理应用:商品、库存量、供应商,以及低库存预警。',
1717
- buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段和面试记录。',
1999
+ buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,以及一个按阶段汇总商机金额的仪表盘。',
2000
+ buildApp: '做一个项目管理应用:项目、任务(负责人、截止日期),按状态分组的看板,以及按截止日期的日历视图。',
2001
+ buildFlow: '设计一个工单系统:工单、优先级、状态(下拉),以及按状态分组的看板。',
2002
+ buildInventory: '做一个库存管理应用:商品、库存量、供应商,并用一个视图筛出低于安全库存的商品。',
2003
+ buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段字段,以及按阶段分组的看板。',
1718
2004
  },
1719
2005
  generic: {
1720
2006
  help: '你可以帮我做什么?',
1721
2007
  availableObjects: '列出可用的数据对象。',
1722
2008
  recentActivity: '总结我的最近动态。',
1723
2009
  },
2010
+ // objectui#7709 — the edit-mode starters, shown when the maker is bound
2011
+ // to an EXISTING app (`?package=`). Same rule as the five above: they
2012
+ // may only ask for what ADR-0112 v1 BUILDS. The fourth chip used to be
2013
+ // `addAutomation` ("an approval, a status flow, or a notification") and
2014
+ // every capability it named is refused by v1 (cloud#1956 / PR #1970), so
2015
+ // it now asks for sample data — `seed` IS on v1's whitelist, and having
2016
+ // no data is what an existing app most often lacks. REVERT: when
2017
+ // ADR-0112 v2 re-adds flows and actions, THIS chip's automation wording
2018
+ // comes back as `addAutomation`; the retired string is pinned for every
2019
+ // pack in `packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts`.
1724
2020
  editApp: {
1725
2021
  addField: '给某个对象加一个字段。',
1726
2022
  addObject: '新增一个对象,并关联到已有对象。',
1727
2023
  addDashboard: '加一个展示关键指标的仪表盘。',
1728
- addAutomation: '加一个自动化 —— 审批、状态流转或通知。',
2024
+ addSampleData: '给现有对象补一批贴近真实的示例数据,好拿去演示。',
1729
2025
  },
1730
2026
  },
1731
2027
  // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
@@ -1780,6 +2076,21 @@ const zh = {
1780
2076
  older: '更早',
1781
2077
  },
1782
2078
  },
2079
+ // objectui#9954 — see the `en` pack for what raises each case.
2080
+ readRate: {
2081
+ ratioTitle: '本环境读取量异常',
2082
+ ratio: '每写入 1 行就读取 {{ratio}} 行。平台会标记高于 {{threshold}} 的比率。没有任何东西被限制或阻断;这只是一份报告,便于检查读取方式。',
2083
+ noWritesTitle: '本环境只有读取、完全没有写入',
2084
+ noWrites: '有行被读取,却完全没有任何写入,因此读取比率没有上限。这是最严重的读数。平台会标记高于 {{threshold}} 的比率。没有任何东西被限制或阻断;这只是一份报告,便于检查读取方式。',
2085
+ },
2086
+ // objectui#10439 — see the `en` pack for what raises each case.
2087
+ storageUsage: {
2088
+ warningTitle: '存储空间即将用满',
2089
+ warning: '已用 {{used}} MB / {{limit}} MB。存储用满后,上传与导入将暂停。',
2090
+ blockedTitle: '存储已满,上传与导入已暂停',
2091
+ blocked: '已用 {{used}} MB / {{limit}} MB。现有数据不受影响,读取、导出与单条记录编辑照常。',
2092
+ upgrade: '升级以继续',
2093
+ },
1783
2094
  errors: {
1784
2095
  somethingWentWrong: '出错了',
1785
2096
  unexpectedError: '渲染此视图时发生意外错误。',
@@ -1829,6 +2140,7 @@ const zh = {
1829
2140
  objectView: {
1830
2141
  systemViewReadonly: '系统视图由代码定义,只读。',
1831
2142
  cannotEditMetaView: '该视图为内置视图,由代码定义,无法修改。',
2143
+ viewConfigPermissionDenied: '视图配置对所有使用该视图的用户生效,因此修改它需要「管理元数据」权限。请联系管理员进行修改。',
1832
2144
  cannotDeleteMetaView: '该视图为内置视图,由代码定义,无法删除。',
1833
2145
  expandToPage: '以完整页面打开',
1834
2146
  objectNotFound: '未找到对象',
@@ -1841,14 +2153,17 @@ const zh = {
1841
2153
  import: '导入',
1842
2154
  importTitle: '从 CSV 文件导入',
1843
2155
  importedToast: '成功导入 {{count}} 行。',
2156
+ importedToast_one: '成功导入 {{count}} 行。',
2157
+ importedToast_other: '成功导入 {{count}} 行。',
1844
2158
  importedWithSkipped: '已导入 {{ok}} 行;跳过 {{skipped}} 行。',
1845
2159
  configureView: '配置视图',
1846
- toolbar: '工具栏',
1847
2160
  toolbarEnabledCount: '已启用 {{count}}/{{total}} 项',
1848
2161
  searchFields: '搜索字段…',
1849
2162
  title: '标题',
1850
2163
  viewType: '视图类型',
1851
2164
  recordCount: '{{count}} 条记录',
2165
+ recordCount_one: '{{count}} 条记录',
2166
+ recordCount_other: '{{count}} 条记录',
1852
2167
  save: '保存',
1853
2168
  discard: '丢弃',
1854
2169
  createView: '创建视图',
@@ -1859,6 +2174,8 @@ const zh = {
1859
2174
  deleteViewTitle: '删除视图',
1860
2175
  deleteViewConfirm: '确定要删除视图 "{{name}}" 吗?此操作无法撤销。',
1861
2176
  bulkDeleteConfirm: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
2177
+ bulkDeleteConfirm_one: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
2178
+ bulkDeleteConfirm_other: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
1862
2179
  duplicateViewName: '已存在同名视图。',
1863
2180
  viewTypeGrid: '表格',
1864
2181
  viewTypeGridDesc: '电子表格风格的记录表格。',
@@ -1911,11 +2228,14 @@ const zh = {
1911
2228
  chartTypePie: '饼图',
1912
2229
  chartTypeArea: '面积图',
1913
2230
  chartTypeScatter: '散点图',
1914
- xAxisField: 'X 轴字段',
1915
- xAxisFieldHelp: '用于分类或时间维度的字段。',
1916
- yAxisField: 'Y 轴字段',
1917
- yAxisFieldHelp: '用于数值聚合的字段。',
1918
- groupBy: '分组依据',
2231
+ dataset: '数据集',
2232
+ datasetHelp: '图表从该对象的这个数据集读取数值。',
2233
+ chartMeasure: '度量',
2234
+ chartMeasureHelp: '在数值轴上绘制的数据集度量。',
2235
+ chartDimension: '维度',
2236
+ chartDimensionHelp: '用于对数值分组的数据集维度(可选)。',
2237
+ viewTypeUnavailableDataset: '该对象没有可用于图表的数据集。',
2238
+ noDatasetMeasure: '该数据集未声明可绘制的度量。',
1919
2239
  endDateField: '结束日期字段',
1920
2240
  ufTabs: '标签页',
1921
2241
  ufAddField: '+ 添加筛选字段…',
@@ -1962,6 +2282,8 @@ const zh = {
1962
2282
  resendOtpCountdownText: '{seconds} 秒后可重新发送',
1963
2283
  usePhoneOtpText: '使用验证码登录',
1964
2284
  usePasswordSignInText: '改用密码登录',
2285
+ socialButton: '使用 {provider} 继续',
2286
+ orText: '或使用邮箱继续',
1965
2287
  },
1966
2288
  register: {
1967
2289
  title: '创建账户',
@@ -1980,8 +2302,12 @@ const zh = {
1980
2302
  submittingButton: '创建中…',
1981
2303
  hasAccountText: '已有账户?',
1982
2304
  signInText: '登录',
2305
+ socialButton: '使用 {provider} 注册',
2306
+ orText: '或使用邮箱继续',
1983
2307
  errors: {
1984
2308
  userExists: '该邮箱已被注册,请直接登录或更换邮箱。',
2309
+ selfRegistrationClosed: '本环境未开放自助注册,请联系管理员获取邀请。',
2310
+ emailDomainNotAllowed: '该邮箱的域名不允许在此注册,请使用组织邮箱,或联系管理员获取邀请。',
1985
2311
  },
1986
2312
  verifyInbox: {
1987
2313
  title: '请检查您的邮箱',
@@ -2194,6 +2520,15 @@ const zh = {
2194
2520
  role: '角色',
2195
2521
  save: '保存更改',
2196
2522
  },
2523
+ language: {
2524
+ title: '语言',
2525
+ description: '发送给您的通知和消息所使用的语言。界面语言另行设置,在地球图标菜单中切换。',
2526
+ label: '首选语言',
2527
+ systemDefault: '使用部署默认值',
2528
+ save: '保存',
2529
+ saved: '语言偏好已更新。',
2530
+ readOnly: '您账户的语言由管理员管理。',
2531
+ },
2197
2532
  password: {
2198
2533
  changeTitle: '修改密码',
2199
2534
  setTitle: '设置本地密码',
@@ -2225,7 +2560,6 @@ const zh = {
2225
2560
  label: '工作区',
2226
2561
  default: '我的工作区',
2227
2562
  switch: '切换工作区',
2228
- create: '创建工作区',
2229
2563
  createTitle: '创建工作区',
2230
2564
  createDescription: '工作区是团队协作的共享空间。',
2231
2565
  createButton: '创建工作区',
@@ -2248,7 +2582,6 @@ const zh = {
2248
2582
  },
2249
2583
  sidebar: {
2250
2584
  settings: '设置',
2251
- help: '帮助',
2252
2585
  helpTooltip: '帮助与文档',
2253
2586
  activityFeed: '活动动态',
2254
2587
  notifications: '通知',
@@ -2288,7 +2621,6 @@ const zh = {
2288
2621
  },
2289
2622
  home: {
2290
2623
  title: '首页',
2291
- subtitle: '您的工作区仪表盘',
2292
2624
  nav: '首页',
2293
2625
  allApps: '全部应用',
2294
2626
  yourApps: '我的应用',
@@ -2315,14 +2647,7 @@ const zh = {
2315
2647
  marketplaceDisabled: '本运行时未配置应用市场,因此这里没有可安装的模板。',
2316
2648
  },
2317
2649
  open: '打开',
2318
- stats: {
2319
- apps: '应用',
2320
- starred: '收藏',
2321
- recent: '最近访问',
2322
- },
2323
2650
  loading: '正在加载工作区…',
2324
- recent: '最近使用',
2325
- starred: '收藏',
2326
2651
  welcome: '用 AI 搭建你的业务系统',
2327
2652
  welcomeDescription: '用一句话描述你的业务,AI 帮你生成对象、界面、API 和 agent 工具。也可以手动从零开始。',
2328
2653
  welcomeAdminDescription: '用一句话描述你的业务,AI 会为你生成对象、界面、API 和智能体工具;也可以从左侧菜单自行搭建。',
@@ -2339,6 +2664,8 @@ const zh = {
2339
2664
  },
2340
2665
  pendingDrafts: {
2341
2666
  message: '你有 {{count}} 项未发布的更改 —— 点击发布即可生效。',
2667
+ message_one: '你有 {{count}} 项未发布的更改 —— 点击发布即可生效。',
2668
+ message_other: '你有 {{count}} 项未发布的更改 —— 点击发布即可生效。',
2342
2669
  cta: '发布',
2343
2670
  publishing: '发布中…',
2344
2671
  published: '已发布!更改已生效。',
@@ -2356,8 +2683,6 @@ const zh = {
2356
2683
  browseMarketplace: '浏览应用市场',
2357
2684
  quickActions: {
2358
2685
  title: '快捷操作',
2359
- createApp: '创建应用',
2360
- createAppDesc: '从新应用开始',
2361
2686
  manageObjects: '管理对象',
2362
2687
  manageObjectsDesc: '配置数据模型',
2363
2688
  systemSettings: '系统设置',
@@ -2369,7 +2694,9 @@ const zh = {
2369
2694
  object: '对象',
2370
2695
  dashboard: '仪表盘',
2371
2696
  page: '页面',
2697
+ report: '报表',
2372
2698
  record: '记录',
2699
+ metadata: '元数据',
2373
2700
  },
2374
2701
  },
2375
2702
  starredApps: {
@@ -2406,7 +2733,6 @@ const zh = {
2406
2733
  organizations: '组织',
2407
2734
  roles: '角色',
2408
2735
  configuration: '配置',
2409
- createApp: '创建应用',
2410
2736
  administration: '管理',
2411
2737
  datasources: '数据源',
2412
2738
  documentation: '文档',
@@ -2421,6 +2747,7 @@ const zh = {
2421
2747
  typeUpdate: '更新',
2422
2748
  typeDelete: '删除',
2423
2749
  typeComment: '评论',
2750
+ typeSystem: '系统',
2424
2751
  relativeJustNow: '刚刚',
2425
2752
  relativeSecondsAgo: '{{count}} 秒前',
2426
2753
  relativeMinutesAgo: '{{count}} 分钟前',
@@ -2441,8 +2768,11 @@ const zh = {
2441
2768
  placeholder: '搜索对象、仪表板、页面、报表…',
2442
2769
  inputAriaLabel: '搜索对象、仪表板、页面、报表',
2443
2770
  resultsCount: '找到 {{count}} 条与“{{query}}”相关的结果',
2444
- resultsCountPlural: '找到 {{count}} 条与“{{query}}”相关的结果',
2771
+ resultsCount_one: '找到 {{count}} 条与“{{query}}”相关的结果',
2772
+ resultsCount_other: '找到 {{count}} 条与“{{query}}”相关的结果',
2445
2773
  itemsAvailable: '共 {{count}} 项可搜索',
2774
+ itemsAvailable_one: '共 {{count}} 项可搜索',
2775
+ itemsAvailable_other: '共 {{count}} 项可搜索',
2446
2776
  noResults: '未找到结果',
2447
2777
  noResultsHint: '请尝试调整搜索关键字',
2448
2778
  typeObjects: '对象',
@@ -2469,7 +2799,11 @@ const zh = {
2469
2799
  noAppsConfigured: '尚未配置应用',
2470
2800
  noAppsConfiguredDescription: '当前没有任何已注册的应用。请创建您的第一个应用,或前往系统设置进行配置。',
2471
2801
  appNotAvailable: '应用不可用',
2472
- appNotAvailableDescription: '此应用尚不可用 —— 可能仍在发布中。请稍后重试。',
2802
+ appNotAvailableDescription: '此应用不可用 —— 请稍后重试。',
2803
+ appNotFound: '无法打开此应用',
2804
+ appNotFoundDescription: '服务器未返回你的账号可访问的此应用。',
2805
+ appUnreachable: '无法连接到服务器',
2806
+ appUnreachableDescription: '无法检查此应用。请稍后重试。',
2473
2807
  appAccessDenied: '你没有访问此应用的权限',
2474
2808
  appAccessDeniedDescription: '此应用存在,但你的账号未获授权打开它。请联系管理员为你开通访问权限。',
2475
2809
  appAccessDeniedHome: '返回首页',
@@ -2512,11 +2846,15 @@ const zh = {
2512
2846
  detailNone: '未检测到差异 —— 草稿与已发布版本一致。',
2513
2847
  detailChangedKeys: '其他变更:',
2514
2848
  confirmNote: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2849
+ confirmNote_one: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2850
+ confirmNote_other: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2515
2851
  publishConfirm: '全部发布',
2516
- // [objectui#5418] Pre-publish security-posture findings, shown next to
2852
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
2517
2853
  // the confirm button so a refusal the door would issue is read BEFORE
2518
2854
  // the click rather than as a toast after the batch rolled back.
2519
2855
  securityBlockTitle: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2856
+ securityBlockTitle_one: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2857
+ securityBlockTitle_other: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2520
2858
  securityBlockWhere: '请在对象的“设置 → 记录共享模型”中修改后重新发布。',
2521
2859
  },
2522
2860
  // ADR-0045 — the materialized-but-unlisted app banner
@@ -2541,7 +2879,7 @@ const zh = {
2541
2879
  revertLabel: '已撤销一处变更',
2542
2880
  applyLabel: '构建变更',
2543
2881
  revert: '撤销',
2544
- items: '项',
2882
+ items: '{{count}} 项',
2545
2883
  revertAction: '撤销',
2546
2884
  reverted: '已撤销 —— 该变更已还原。',
2547
2885
  revertFailed: '撤销失败',
@@ -2555,22 +2893,17 @@ const zh = {
2555
2893
  requiredError: '{{label}} 为必填项',
2556
2894
  lookupPlaceholder: '{{label}} 的记录 ID',
2557
2895
  lookupHelpText: '该参数未配置引用对象,无法使用记录选择器。请直接填写记录 ID,或联系管理员修正该动作参数。',
2896
+ unresolvedParam: '无法显示该参数:它所依据的字段不在对象元数据中,因此无法构建它所需的控件。请联系管理员修正该动作定义。',
2897
+ carryOverHint: '原样带入(只读)',
2558
2898
  cancel: '取消',
2559
2899
  confirm: '确认',
2560
2900
  uploading: '上传中…',
2561
- defaultActionTitle: '操作',
2562
- ok: '确定',
2563
2901
  },
2564
2902
  actionConfirm: {
2565
2903
  title: '确认操作',
2566
2904
  confirm: '继续',
2567
2905
  cancel: '取消',
2568
2906
  },
2569
- rowAction: {
2570
- openMenu: '更多操作',
2571
- edit: '编辑',
2572
- delete: '删除',
2573
- },
2574
2907
  navigationSync: {
2575
2908
  addedPage: '导航已更新:已添加页面 “{{name}}”',
2576
2909
  addedDashboard: '导航已更新:已添加仪表板 “{{name}}”',
@@ -2591,6 +2924,8 @@ const zh = {
2591
2924
  resetPackageSetConfirm: '该权限集随已安装的软件包发布,无法删除。删除操作将丢弃环境定制并把它重置为发布基线。是否继续?',
2592
2925
  resetPackageSetSuccess: '权限集已重置为发布基线',
2593
2926
  bulkDeleteSuccess: '已删除 {{count}} 条 {{label}} 记录',
2927
+ bulkDeleteSuccess_one: '已删除 {{count}} 条 {{label}} 记录',
2928
+ bulkDeleteSuccess_other: '已删除 {{count}} 条 {{label}} 记录',
2594
2929
  bulkDeletePartial: '成功 {{succeeded}} 条,失败 {{failed}} 条',
2595
2930
  },
2596
2931
  objectViewActions: {
@@ -2602,15 +2937,6 @@ const zh = {
2602
2937
  exportFailed: '导出失败:{{message}}',
2603
2938
  forecastSoon: '预测视图即将上线',
2604
2939
  },
2605
- recordDetail: {
2606
- viewersTooltip: '正在查看此记录的用户',
2607
- },
2608
- cellRender: {
2609
- empty: '空',
2610
- yes: '是',
2611
- no: '否',
2612
- systemFields: '系统字段',
2613
- },
2614
2940
  user: {
2615
2941
  profile: '个人资料',
2616
2942
  settings: '设置',
@@ -2780,15 +3106,30 @@ const zh = {
2780
3106
  viewAll: '查看全部通知',
2781
3107
  groupCount: '{{count}} 条通知',
2782
3108
  groupUnread: '{{count}} 条未读',
3109
+ groupUnread_one: '{{count}} 条未读',
3110
+ groupUnread_other: '{{count}} 条未读',
2783
3111
  groupMarkRead: '标记已读',
2784
3112
  groupMarkReadTitle: '将此类通知全部标记为已读',
2785
3113
  approvalsPending: '{{count}} 条待审批',
3114
+ approvalsPending_one: '{{count}} 条待审批',
3115
+ approvalsPending_other: '{{count}} 条待审批',
2786
3116
  viewApprovals: '查看审批',
2787
3117
  noPendingApprovals: '暂无待审批事项',
2788
3118
  openApprovalsInbox: '打开审批中心',
2789
3119
  badgeTotal: '共 {{total}} 项',
2790
3120
  badgeNotifications: '{{unread}} 条通知',
2791
3121
  badgeApprovals: '{{approvals}} 条待审批',
3122
+ arrivalMany: '{{count}} 条新消息',
3123
+ arrivalMany_one: '{{count}} 条新消息',
3124
+ arrivalMany_other: '{{count}} 条新消息',
3125
+ arrivalRepeats: '该主题有 {{count}} 条新消息',
3126
+ arrivalRepeats_one: '该主题有 {{count}} 条新消息',
3127
+ arrivalRepeats_other: '该主题有 {{count}} 条新消息',
3128
+ arrivalOpen: '查看',
3129
+ toastEnabled: '站内提醒',
3130
+ desktopEnabled: '桌面通知',
3131
+ desktopBlocked: '已被拦截。请在浏览器设置中允许本站发送通知。',
3132
+ desktopUnsupported: '当前浏览器不支持桌面通知。',
2792
3133
  },
2793
3134
  publicForm: {
2794
3135
  submit: '提交',
@@ -2796,15 +3137,17 @@ const zh = {
2796
3137
  submitAnother: '再填一份',
2797
3138
  poweredBy: '由 ObjectStack 提供技术支持',
2798
3139
  secureNotice: '您的信息将通过安全通道传输,仅用于回复您本次请求。',
2799
- thankYouTitle: '感谢您的提交!',
3140
+ thankYouTitle: '感谢您的提交!',
2800
3141
  thankYouMessage: '我们已成功收到您的信息。',
2801
3142
  redirecting: '将在 {{seconds}} 秒后跳转…',
3143
+ redirectPending: '正在跳转…',
2802
3144
  unavailableTitle: '表单不可用',
2803
3145
  unavailableDescription: '该链接当前没有可用的公开表单。请确认对应视图已启用匿名分享并匹配此 slug。',
2804
3146
  tryDemo: '试用演示',
2805
3147
  retry: '重试',
2806
3148
  loading: '正在加载表单…',
2807
3149
  requiredHint: '* 为必填项',
3150
+ requiredFields: '必填项:{{fields}}',
2808
3151
  consentLabelDefault: '我已阅读并同意隐私政策,授权对本次请求所提供的信息进行处理。',
2809
3152
  consentLink: '隐私政策',
2810
3153
  consentRequired: '请先勾选同意隐私政策。',
@@ -2855,6 +3198,8 @@ const zh = {
2855
3198
  noImportableFields: '该对象没有可导入的字段。',
2856
3199
  schemaReadFailed: '无法读取对象结构。',
2857
3200
  imported: '已把 {{count}} 行真实数据导入「{{object}}」。',
3201
+ imported_one: '已把 {{count}} 行真实数据导入「{{object}}」。',
3202
+ imported_other: '已把 {{count}} 行真实数据导入「{{object}}」。',
2858
3203
  importFrom: '把真实数据导入自',
2859
3204
  into: '到',
2860
3205
  opening: '打开中…',
@@ -2868,6 +3213,76 @@ const zh = {
2868
3213
  openProduction: '打开生产环境',
2869
3214
  manageEnvironments: '管理环境',
2870
3215
  },
3216
+ cloudPlanStatus: {
3217
+ current: '当前套餐',
3218
+ },
3219
+ ai: {
3220
+ nlQuery: {
3221
+ placeholder: '就您的数据提问…',
3222
+ ask: '提问',
3223
+ results: '结果',
3224
+ match: '匹配度 {{percent}}',
3225
+ simulatedSummary: '查询结果:{{query}}',
3226
+ noResults: '未找到匹配的记录',
3227
+ recentQueries: '最近的查询',
3228
+ },
3229
+ formAssist: {
3230
+ title: 'AI 建议',
3231
+ suggestionCount: '{{count}} 条建议',
3232
+ suggestionCount_one: '{{count}} 条建议',
3233
+ suggestionCount_other: '{{count}} 条建议',
3234
+ applyAll: '全部应用',
3235
+ confidence: '置信度 {{percent}}',
3236
+ appliedCount: '已应用 {{count}} 条建议',
3237
+ appliedCount_one: '已应用 {{count}} 条建议',
3238
+ appliedCount_other: '已应用 {{count}} 条建议',
3239
+ },
3240
+ recommendations: {
3241
+ title: '推荐',
3242
+ generating: '正在生成推荐…',
3243
+ empty: '暂无推荐',
3244
+ },
3245
+ },
3246
+ aiApprovals: {
3247
+ title: 'AI 审批',
3248
+ description: 'AI 智能体提出的操作,需要人工审核后才会执行。',
3249
+ tabPending: '待审批',
3250
+ tabDecided: '已处理',
3251
+ tabAll: '全部',
3252
+ statusPending: '待审批',
3253
+ statusApproved: '已通过',
3254
+ statusExecuted: '已执行',
3255
+ statusFailed: '失败',
3256
+ statusRejected: '已拒绝',
3257
+ colTool: '工具',
3258
+ colAction: '动作',
3259
+ colObject: '对象',
3260
+ colStatus: '状态',
3261
+ colProposed: '提出时间',
3262
+ colDecision: '决定',
3263
+ emptyTitle: '暂无待处理操作',
3264
+ emptyDescription: '当 AI 提出敏感操作时,会显示在这里等待审核。',
3265
+ view: '查看',
3266
+ approve: '通过',
3267
+ reject: '拒绝',
3268
+ working: '处理中…',
3269
+ approveAndExecute: '通过并执行',
3270
+ outcomeApprove: '对 {{id}} 的通过操作:{{message}}',
3271
+ outcomeReject: '对 {{id}} 的拒绝操作:{{message}}',
3272
+ outcomeExecuteFailed: '操作执行失败',
3273
+ drawerFallbackTitle: '待处理操作',
3274
+ drawerSubtitle: '在 {{object}} 上执行工具 {{tool}}',
3275
+ fieldProposedBy: '提出者',
3276
+ fieldDecidedBy: '处理人',
3277
+ fieldConversation: '会话',
3278
+ fieldToolInput: '工具输入',
3279
+ fieldResult: '结果',
3280
+ fieldError: '错误',
3281
+ fieldRejectionReason: '拒绝原因',
3282
+ rejectTitle: '要拒绝此操作吗?',
3283
+ rejectBody: '该原因会回传给 AI,便于它调整下一步回复。',
3284
+ rejectPlaceholder: '可选原因(例如:“记录 ID 有误 — 请先与用户确认。”)',
3285
+ },
2871
3286
  aiModelStatus: {
2872
3287
  summary: '构建 / 提问使用 {{conversational}}({{conversationalSource}});结构化使用 {{structured}}({{structuredSource}})。',
2873
3288
  summaryRouting: '路由策略:免费方案 → {{free}},付费方案 → {{paid}}。',
@@ -2885,6 +3300,111 @@ const zh = {
2885
3300
  sourceInherits: '与 build/ask 相同',
2886
3301
  sourcePinned: '被 {{source}} 钉住',
2887
3302
  },
3303
+ // objectui#7254 — the AI copilot's tool cards. Three families, all of them
3304
+ // English-only until this landed while every other string on the same screen
3305
+ // was translated:
3306
+ //
3307
+ // `tool.*` — one entry per PLATFORM-PROVIDED tool name
3308
+ // (@objectstack/spec `PLATFORM_TOOLS_BY_PACKAGE`, the
3309
+ // closed registry those runtimes are conformance-tested
3310
+ // against). `humanizeToolName` looks each up as
3311
+ // `chatbot.tool.<tool_name>` and falls back to its English
3312
+ // title-caser for a custom / third-party tool, so a name
3313
+ // missing here is degraded, never broken. The `en` values
3314
+ // are deliberately EQUAL to what that title-caser produces:
3315
+ // adding the key must not silently reword the English UI.
3316
+ // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3317
+ // set for both surfaces (they used to carry separate
3318
+ // tables and disagreed on casing).
3319
+ // `plan.*` — the "N objects · N views · N dashboards" strip. Plural
3320
+ // FAMILIES: one slot per CLDR category the pack's language
3321
+ // selects (objectui#11432), plus the base key for a call
3322
+ // made without a count. `all-locales-key-parity.test.ts`
3323
+ // derives the required slots from `Intl.PluralRules`.
3324
+ //
3325
+ // objectui#7481 — five `tool.*` entries are NEWER than the registry above:
3326
+ // `get_authoring_rules` (cloud#1837), `load_tools`, `open_record`, `test_flow`
3327
+ // and `toggle_flow` are registered by cloud `service-ai-studio` but the pinned
3328
+ // `@objectstack/spec` snapshot does not list them yet. They are kept here on
3329
+ // purpose: a step label the user reads must not wait on a pin bump. When the
3330
+ // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3331
+ // against the registry instead of against its own hand-held list.
3332
+ chatbot: {
3333
+ tool: {
3334
+ aggregate_data: '汇总数据',
3335
+ get_record: '读取记录',
3336
+ query_data: '查询数据',
3337
+ query_records: '查询记录',
3338
+ search_knowledge: '搜索知识库',
3339
+ visualize_data: '生成图表',
3340
+ add_field: '添加字段',
3341
+ apply_blueprint: '搭建应用',
3342
+ apply_edit: '应用修改',
3343
+ create_metadata: '新建元数据',
3344
+ create_object: '新建对象',
3345
+ create_package: '新建应用包',
3346
+ create_seed: '生成示例数据',
3347
+ delete_field: '删除字段',
3348
+ describe_metadata: '查看元数据',
3349
+ describe_object: '查看对象结构',
3350
+ get_active_package: '读取当前应用包',
3351
+ get_authoring_rules: '读取编写规范',
3352
+ get_metadata_schema: '读取元数据结构',
3353
+ get_package: '读取应用包',
3354
+ list_metadata: '列出元数据',
3355
+ list_objects: '列出对象',
3356
+ list_packages: '列出应用包',
3357
+ load_tools: '加载工具',
3358
+ modify_field: '修改字段',
3359
+ open_record: '打开记录',
3360
+ propose_blueprint: '设计应用方案',
3361
+ set_active_package: '切换当前应用包',
3362
+ suggest_builder: '推荐搭建方式',
3363
+ test_flow: '测试流程',
3364
+ todo_write: '记录待办',
3365
+ toggle_flow: '启停流程',
3366
+ update_metadata: '更新元数据',
3367
+ validate_expression: '校验表达式',
3368
+ verify_build: '校验搭建结果',
3369
+ },
3370
+ toolState: {
3371
+ agentActivity: '智能体活动',
3372
+ pending: '等待中',
3373
+ running: '运行中',
3374
+ awaitingApproval: '待确认',
3375
+ responded: '已回复',
3376
+ completed: '已完成',
3377
+ error: '出错',
3378
+ denied: '已拒绝',
3379
+ failed: '失败',
3380
+ },
3381
+ plan: {
3382
+ countObjects: '{{count}} 个对象',
3383
+ countObjects_one: '{{count}} 个对象',
3384
+ countObjects_other: '{{count}} 个对象',
3385
+ countViews: '{{count}} 个视图',
3386
+ countViews_one: '{{count}} 个视图',
3387
+ countViews_other: '{{count}} 个视图',
3388
+ countDashboards: '{{count}} 个仪表板',
3389
+ countDashboards_one: '{{count}} 个仪表板',
3390
+ countDashboards_other: '{{count}} 个仪表板',
3391
+ countSeedData: '示例数据',
3392
+ },
3393
+ build: {
3394
+ building: '正在构建{{app}}…',
3395
+ built: '已构建{{app}}',
3396
+ appFallback: '你的应用',
3397
+ addingSampleData: '正在添加示例数据',
3398
+ group: {
3399
+ object: '对象',
3400
+ view: '视图',
3401
+ dashboard: '仪表板',
3402
+ app: '应用',
3403
+ seed: '示例数据',
3404
+ },
3405
+ moreArtifacts: '+{{n}} 个',
3406
+ },
3407
+ },
2888
3408
  chatbotError: {
2889
3409
  title: '响应失败',
2890
3410
  fallbackDetail: '出了点问题,请重试。',
@@ -2955,7 +3475,7 @@ const zh = {
2955
3475
  marketplace: {
2956
3476
  title: '应用市场',
2957
3477
  subtitle: '浏览已通过审核、发布到 ObjectStack 目录中的应用。点击应用查看详情并安装到你的某个环境中。',
2958
- searchPlaceholder: '按名称或 manifest ID 搜索应用…',
3478
+ searchPlaceholder: '按名称或标识搜索应用…',
2959
3479
  searchAria: '搜索市场应用',
2960
3480
  installed: '已安装',
2961
3481
  installedCount: '已安装({{count}})',
@@ -3003,10 +3523,15 @@ const zh = {
3003
3523
  purgeSampleData: '清除示例数据',
3004
3524
  purgeConfirm: '删除此应用预置的所有示例记录?用户自行添加的记录不会被删除。',
3005
3525
  purgeSuccess: '已删除 {{count}} 条示例记录。',
3526
+ purgeSuccess_one: '已删除 {{count}} 条示例记录。',
3527
+ purgeSuccess_other: '已删除 {{count}} 条示例记录。',
3006
3528
  purgeNoData: '没有可清除的示例记录。',
3007
3529
  reseedQueued: '示例数据将在下次访问该环境时重新加载。',
3008
3530
  reseedLocalSuccess: '已重新加载示例数据:新增 {{inserted}} 条,更新 {{updated}} 条。',
3009
3531
  reseedPartialErrors: '(有 {{count}} 条记录写入失败)',
3532
+ reseedPartialErrors_one: '(有 {{count}} 条记录写入失败)',
3533
+ reseedPartialErrors_other: '(有 {{count}} 条记录写入失败)',
3534
+ sampleDataKernelUnavailable: '此控制面没有环境内核,因此无法在这里重新加载或清除示例数据。请在该环境自己的运行时中操作。',
3010
3535
  updateAvailable: '有可用更新',
3011
3536
  },
3012
3537
  action: {
@@ -3059,7 +3584,8 @@ const zh = {
3059
3584
  reviewed: '已审核并批准',
3060
3585
  unreviewed: '尚未审核',
3061
3586
  signed: '已签名',
3062
- grantsIntro: '安装后,此软件包将获得以下权限:',
3587
+ grantsIntro: '此软件包请求以下权限:',
3588
+ notEnforced: '安装时会记录这份清单,后续版本要求更多权限时会再次征求同意;但运行时目前还不会把该软件包限制在此清单内。',
3063
3589
  services: '平台服务',
3064
3590
  hooks: '生命周期钩子',
3065
3591
  network: '网络访问',
@@ -3109,30 +3635,19 @@ const zh = {
3109
3635
  storage: '存储',
3110
3636
  other: '其他',
3111
3637
  },
3112
- pricing: {
3113
- free: '免费',
3114
- freemium: '免费增值',
3115
- paid: '付费',
3116
- subscription: '订阅',
3117
- 'usage-based': '按用量计费',
3118
- 'contact-sales': '联系销售',
3119
- },
3120
3638
  relativeTime: {
3121
3639
  today: '今天',
3122
3640
  daysAgo: '{{count}} 天前',
3123
3641
  monthsAgo: '{{count}} 个月前',
3642
+ monthsAgo_one: '{{count}} 个月前',
3643
+ monthsAgo_other: '{{count}} 个月前',
3124
3644
  yearsAgo: '{{count}} 年前',
3645
+ yearsAgo_one: '{{count}} 年前',
3646
+ yearsAgo_other: '{{count}} 年前',
3125
3647
  },
3126
3648
  },
3127
- approvals: {
3128
- approve: '批准',
3129
- reject: '驳回',
3130
- comment: '审批意见(可选)',
3131
- approveSuccess: '已批准',
3132
- rejectSuccess: '已驳回',
3133
- rejectConfirm: '确定驳回该审批请求吗?',
3134
- },
3135
3649
  approvalsInbox: {
3650
+ recordUnresolvable: '无法打开此记录',
3136
3651
  loadMore: '加载更多',
3137
3652
  loadingMore: '加载中…',
3138
3653
  loadedOf: '已加载 {{loaded}} / 共 {{total}} 条',
@@ -3151,6 +3666,8 @@ const zh = {
3151
3666
  requestInfoSent: '已退回给申请人补充材料',
3152
3667
  remindBtn: '催办',
3153
3668
  remindSuccess: '已提醒 {{count}} 位审批人',
3669
+ remindSuccess_one: '已提醒 {{count}} 位审批人',
3670
+ remindSuccess_other: '已提醒 {{count}} 位审批人',
3154
3671
  remindThrottled: '刚刚已发送过催办,请稍后再试。',
3155
3672
  replyPlaceholder: '在此回复…',
3156
3673
  slaRemaining: 'SLA 剩余 {{dur}}',
@@ -3167,6 +3684,8 @@ const zh = {
3167
3684
  progressApprovals: '审批进度 — {{got}} / {{need}}',
3168
3685
  progressGroups: '会签进度 — {{got}} / {{need}} 组',
3169
3686
  progressEligible: '{{count}} 位可审批人',
3687
+ progressEligible_one: '{{count}} 位可审批人',
3688
+ progressEligible_other: '{{count}} 位可审批人',
3170
3689
  progressBar: '决策进度',
3171
3690
  declaredActions: '操作',
3172
3691
  attachmentChip: '附件',
@@ -3198,6 +3717,8 @@ const zh = {
3198
3717
  filterCount: '{{shown}} / {{total}} 条',
3199
3718
  selected: '已选择',
3200
3719
  actionableCount: '({{count}} 条可操作)',
3720
+ actionableCount_one: '({{count}} 条可操作)',
3721
+ actionableCount_other: '({{count}} 条可操作)',
3201
3722
  selectAll: '全选',
3202
3723
  selectRow: '选择该请求',
3203
3724
  colRequest: '审批事项',
@@ -3271,11 +3792,19 @@ const zh = {
3271
3792
  approveN: '通过 {{count}} 条',
3272
3793
  rejectN: '拒绝 {{count}} 条',
3273
3794
  bulkApproveTitle: '通过这 {{count}} 条请求?',
3795
+ bulkApproveTitle_one: '通过这 {{count}} 条请求?',
3796
+ bulkApproveTitle_other: '通过这 {{count}} 条请求?',
3274
3797
  bulkApproveBody: '每条请求都将以你的身份通过,对应流程沿“通过”分支继续。',
3275
3798
  bulkRejectTitle: '拒绝这 {{count}} 条请求?',
3799
+ bulkRejectTitle_one: '拒绝这 {{count}} 条请求?',
3800
+ bulkRejectTitle_other: '拒绝这 {{count}} 条请求?',
3276
3801
  bulkRejectBody: '将拒绝所选请求并通知各申请人。',
3277
3802
  bulkApproved: '已通过 {{count}} 条请求',
3803
+ bulkApproved_one: '已通过 {{count}} 条请求',
3804
+ bulkApproved_other: '已通过 {{count}} 条请求',
3278
3805
  bulkRejected: '已拒绝 {{count}} 条请求',
3806
+ bulkRejected_one: '已拒绝 {{count}} 条请求',
3807
+ bulkRejected_other: '已拒绝 {{count}} 条请求',
3279
3808
  bulkPartial: '{{ok}} 条成功,{{fail}} 条失败:{{which}}',
3280
3809
  rejectOneTitle: '拒绝“{{title}}”?',
3281
3810
  rejectOneBody: '将拒绝该请求并通知申请人。',
@@ -3300,8 +3829,14 @@ const zh = {
3300
3829
  alreadyDecided: '该请求已被处理,请刷新列表。',
3301
3830
  justNow: '刚刚',
3302
3831
  minutesAgo: '{{count}} 分钟前',
3832
+ minutesAgo_one: '{{count}} 分钟前',
3833
+ minutesAgo_other: '{{count}} 分钟前',
3303
3834
  hoursAgo: '{{count}} 小时前',
3835
+ hoursAgo_one: '{{count}} 小时前',
3836
+ hoursAgo_other: '{{count}} 小时前',
3304
3837
  daysAgo: '{{count}} 天前',
3838
+ daysAgo_one: '{{count}} 天前',
3839
+ daysAgo_other: '{{count}} 天前',
3305
3840
  },
3306
3841
  filterBuilder: {
3307
3842
  where: '其中',
@@ -3325,25 +3860,25 @@ const zh = {
3325
3860
  rangeEnd: '结束值',
3326
3861
  operators: {
3327
3862
  equals: '等于',
3328
- notEquals: '不等于',
3863
+ not_equals: '不等于',
3329
3864
  contains: '包含',
3330
- containsCaseInsensitive: '包含(忽略大小写)',
3331
- notContains: '不包含',
3332
- isEmpty: '为空',
3333
- isNotEmpty: '不为空',
3334
- greaterThan: '大于',
3335
- lessThan: '小于',
3336
- greaterOrEqual: '大于或等于',
3337
- lessOrEqual: '小于或等于',
3865
+ icontains: '包含(忽略大小写)',
3866
+ not_contains: '不包含',
3867
+ is_empty: '为空',
3868
+ is_not_empty: '不为空',
3869
+ greater_than: '大于',
3870
+ less_than: '小于',
3871
+ greater_than_or_equal: '大于或等于',
3872
+ less_than_or_equal: '小于或等于',
3338
3873
  before: '早于',
3339
3874
  after: '晚于',
3340
3875
  between: '介于',
3341
3876
  in: '属于',
3342
- notIn: '不属于',
3343
- startsWith: '以…开头',
3344
- endsWith: '以…结尾',
3345
- isNull: '为 null',
3346
- isNotNull: '不为 null',
3877
+ not_in: '不属于',
3878
+ starts_with: '以…开头',
3879
+ ends_with: '以…结尾',
3880
+ is_null: '为 null',
3881
+ is_not_null: '不为 null',
3347
3882
  exists: '已设置',
3348
3883
  notExists: '未设置',
3349
3884
  },
@@ -3359,7 +3894,8 @@ const zh = {
3359
3894
  },
3360
3895
  collaboration: {
3361
3896
  commentCount: '{{count}} 条评论',
3362
- commentCountOne: '{{count}} 条评论',
3897
+ commentCount_one: '{{count}} 条评论',
3898
+ commentCount_other: '{{count}} 条评论',
3363
3899
  resolvedSuffix: ' · 已解决',
3364
3900
  sortComments: '评论排序',
3365
3901
  sortOldest: '最早优先',
@@ -3368,11 +3904,18 @@ const zh = {
3368
3904
  reopen: '重新打开',
3369
3905
  justNow: '刚刚',
3370
3906
  minutesAgo: '{{count}} 分钟前',
3907
+ minutesAgo_one: '{{count}} 分钟前',
3908
+ minutesAgo_other: '{{count}} 分钟前',
3371
3909
  hoursAgo: '{{count}} 小时前',
3910
+ hoursAgo_one: '{{count}} 小时前',
3911
+ hoursAgo_other: '{{count}} 小时前',
3372
3912
  daysAgo: '{{count}} 天前',
3913
+ daysAgo_one: '{{count}} 天前',
3914
+ daysAgo_other: '{{count}} 天前',
3373
3915
  edited: '(已编辑)',
3374
3916
  reactionCount: '{{count}} 个回应',
3375
- reactionCountOne: '{{count}} 个回应',
3917
+ reactionCount_one: '{{count}} 个回应',
3918
+ reactionCount_other: '{{count}} 个回应',
3376
3919
  addThumbsUp: '点赞',
3377
3920
  reply: '回复',
3378
3921
  reactThumbsUp: '以点赞回应',
@@ -3383,9 +3926,11 @@ const zh = {
3383
3926
  commentPlaceholder: '添加评论…(输入 @ 提及他人)',
3384
3927
  send: '发送',
3385
3928
  presentUserCount: '{{count}} 人在线',
3386
- presentUserCountOne: '{{count}} 人在线',
3929
+ presentUserCount_one: '{{count}} 人在线',
3930
+ presentUserCount_other: '{{count}} 人在线',
3387
3931
  moreUserCount: '另有 {{count}} 人',
3388
- moreUserCountOne: '另有 {{count}} 人',
3932
+ moreUserCount_one: '另有 {{count}} 人',
3933
+ moreUserCount_other: '另有 {{count}} 人',
3389
3934
  userStatusTitle: '{{name}}({{status}})',
3390
3935
  statusActive: '活跃',
3391
3936
  statusIdle: '空闲',
@@ -3393,6 +3938,11 @@ const zh = {
3393
3938
  },
3394
3939
  wizard: {
3395
3940
  missingRequired: '请填写以下必填字段:{{fields}}',
3941
+ back: '上一步',
3942
+ submitting: '提交中…',
3943
+ stepFallback: '第 {{n}} 步',
3944
+ progressLabel: '进度',
3945
+ emptyStep: '此步骤未配置字段',
3396
3946
  },
3397
3947
  flowRunner: {
3398
3948
  title: '输入',
@@ -3450,5 +4000,49 @@ const zh = {
3450
4000
  bulkOperationFailed: '批量操作失败:{{reason}}',
3451
4001
  },
3452
4002
  },
4003
+ // objectui#6301 — 设置 › 打包自动化(ADR-0126 §7.4)。术语沿用本包既有译法:
4004
+ // `common.package` = 软件包,`flowRunner.completed` = 流程,`common.duplicate`
4005
+ // 一族的“复制”在这里写作“克隆”,因为服务端的 clone 是另起机器名的同级流程,
4006
+ // 不是一次副本粘贴。⛔ 本组不含任何血缘/漂移措辞(§9)。
4007
+ packagedAutomation: {
4008
+ title: '打包自动化',
4009
+ subtitle: '由已安装软件包提供的流程与动作。可在本部署中关闭其中之一,流程还可以新名称克隆后再自定义。编辑在 Studio 中进行。',
4010
+ refresh: '刷新',
4011
+ flowsHeading: '打包流程',
4012
+ actionsHeading: '打包动作',
4013
+ colFlow: '流程',
4014
+ colActivation: '启用状态',
4015
+ colActions: '操作',
4016
+ toggleLabel: '{{label}} 的启用状态',
4017
+ on: '已启用',
4018
+ off: '已关闭',
4019
+ clone: '克隆',
4020
+ cloneTitle: '克隆打包流程',
4021
+ cloneBody: '副本会带上完整定义,并需要新的机器名和标签。请在 Studio 中编辑副本。',
4022
+ cloneName: '新机器名',
4023
+ cloneLabel: '新标签',
4024
+ cancel: '取消',
4025
+ cloneConfirm: '创建克隆',
4026
+ cloneCreated: '已创建流程「{{name}}」。',
4027
+ emptyTitle: '没有打包流程',
4028
+ emptyBody: '本部署中没有任何已安装软件包提供自动化流程。你自己编写的流程在 Studio 中。',
4029
+ loadFailed: '无法加载打包自动化。',
4030
+ toggleFailedHttp: '无法更改启用状态(HTTP {{status}})。',
4031
+ toggleFailed: '无法更改启用状态。',
4032
+ cloneFailedHttp: '无法克隆此流程(HTTP {{status}})。',
4033
+ cloneFailed: '无法克隆此流程。',
4034
+ actionsSubtitle: '由已安装软件包提供的动作。在本部署中关闭后,它在所有提供它的位置都不再运行。你仍然可以在 Studio 中另行编写自己的动作。',
4035
+ colAction: '动作',
4036
+ colObject: '对象',
4037
+ actionToggleLabel: '{{object}} 上 {{label}} 的启用状态',
4038
+ actionsEmptyTitle: '没有打包动作',
4039
+ actionsEmptyBody: '本部署中没有任何已安装软件包声明动作。你自己编写的动作在 Studio 中。',
4040
+ actionsLoadFailed: '无法加载打包动作。',
4041
+ },
4042
+ element: {
4043
+ number: {
4044
+ noObject: '未指定对象:请设置 object 或 dataSource.object。',
4045
+ },
4046
+ },
3453
4047
  };
3454
4048
  export default zh;