@object-ui/i18n 17.5.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 (58) hide show
  1. package/CHANGELOG.md +4954 -0
  2. package/README.md +234 -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 +28 -2
  10. package/dist/i18n.js +99 -17
  11. package/dist/index.d.ts +17 -23
  12. package/dist/index.js +51 -27
  13. package/dist/locales/ar.d.ts +1113 -370
  14. package/dist/locales/ar.js +1276 -428
  15. package/dist/locales/de.d.ts +785 -370
  16. package/dist/locales/de.js +896 -401
  17. package/dist/locales/en.d.ts +800 -385
  18. package/dist/locales/en.js +1261 -419
  19. package/dist/locales/es.d.ts +867 -370
  20. package/dist/locales/es.js +976 -398
  21. package/dist/locales/fr.d.ts +867 -370
  22. package/dist/locales/fr.js +976 -399
  23. package/dist/locales/index.d.ts +8682 -3761
  24. package/dist/locales/index.js +68 -29
  25. package/dist/locales/ja.d.ts +785 -370
  26. package/dist/locales/ja.js +891 -395
  27. package/dist/locales/ko.d.ts +785 -370
  28. package/dist/locales/ko.js +893 -399
  29. package/dist/locales/pt.d.ts +867 -370
  30. package/dist/locales/pt.js +975 -397
  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 +949 -370
  36. package/dist/locales/ru.js +1093 -419
  37. package/dist/locales/zh.d.ts +803 -388
  38. package/dist/locales/zh.js +899 -388
  39. package/dist/pickLocalized.d.ts +67 -0
  40. package/dist/pickLocalized.js +114 -0
  41. package/dist/provider.d.ts +102 -13
  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 +13 -2
  47. package/dist/useObjectLabel.d.ts +118 -22
  48. package/dist/useObjectLabel.js +148 -23
  49. package/dist/useSafeTranslation.js +41 -43
  50. package/dist/utils/formatting.d.ts +16 -0
  51. package/dist/utils/formatting.js +23 -3
  52. package/dist/utils/index.d.ts +4 -4
  53. package/dist/utils/index.js +4 -4
  54. package/dist/utils/spec-formatters.d.ts +13 -23
  55. package/dist/utils/spec-formatters.js +41 -2
  56. package/dist/utils/spec-translations.d.ts +16 -3
  57. package/dist/utils/spec-translations.js +52 -13
  58. 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: '清除',
@@ -87,6 +94,7 @@ const zh = {
87
94
  common: {
88
95
  loading: '加载中…',
89
96
  save: '保存',
97
+ discard: '放弃',
90
98
  cancel: '取消',
91
99
  delete: '删除',
92
100
  edit: '编辑',
@@ -122,7 +130,8 @@ const zh = {
122
130
  closePanel: '关闭面板',
123
131
  resizeDrawer: '调整面板宽度',
124
132
  itemCount: '{{count}} 项',
125
- itemCountOne: '{{count}} 项',
133
+ itemCount_one: '{{count}} 项',
134
+ itemCount_other: '{{count}} 项',
126
135
  toggleSidebar: '切换侧边栏',
127
136
  package: '软件包',
128
137
  done: '完成',
@@ -130,6 +139,16 @@ const zh = {
130
139
  record: '记录',
131
140
  retry: '重试',
132
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}} 条记录。请缩小筛选范围。',
133
152
  },
134
153
  actions: {
135
154
  decisionOutput: {
@@ -141,6 +160,14 @@ const zh = {
141
160
  acknowledge: '我已保存',
142
161
  copyAll: '全部复制',
143
162
  },
163
+ notAvailableHere: '「{{action}}」在当前页面不可用。',
164
+ completedSuccessfully: '操作已成功完成',
165
+ failed: '操作失败',
166
+ parallelFailed: '一个或多个并行操作失败',
167
+ undo: '撤销',
168
+ undone: '已撤销更改',
169
+ undoneOperation: '撤销:{{description}}',
170
+ redoneOperation: '重做:{{description}}',
144
171
  },
145
172
  validation: {
146
173
  required: '{{field}}不能为空',
@@ -158,8 +185,12 @@ const zh = {
158
185
  },
159
186
  form: {
160
187
  noPermissionToSave: '您没有权限保存这条记录。',
188
+ noPermissionToCreate: '您没有创建{{object}}的权限,字段均为只读。',
189
+ noPermissionToEdit: '您没有编辑{{object}}的权限,字段均为只读。',
161
190
  submitFailed: '保存失败,请重试。',
162
- addItem: '添加项目',
191
+ uploadInFlight: '请等待上传完成后再保存。',
192
+ clearedOnHide: '已清空不再适用于当前取值的字段:{{fields}}',
193
+ visibleWhenFaulted: '无法提交:{{fields}} 的 visibleWhen 规则无法求值。需先修正该规则,才能提交此表单。',
163
194
  removeItem: '移除项目',
164
195
  fieldRequired: '此字段为必填项',
165
196
  invalidFormat: '格式不正确',
@@ -171,13 +202,35 @@ const zh = {
171
202
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
172
203
  // description, used when the form declares no `description` of its own.
173
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
+ },
174
227
  keepEditing: '继续编辑',
175
228
  discard: '放弃',
176
229
  conflictTitle: '保存冲突',
177
230
  conflictMessage: '您编辑期间,这条记录已被其他人修改。覆盖保存将用您的内容替换对方的修改。',
178
231
  conflictLatestVersion: '对方保存时间:{{time}}',
179
232
  conflictOverwrite: '覆盖保存',
180
- stepOf: '第{{current}}步,共{{total}}步',
233
+ stepOf: '第 {{current}} 步,共 {{total}} 步',
181
234
  createTitle: '新建{{object}}',
182
235
  editTitle: '编辑{{object}}',
183
236
  viewTitle: '查看{{object}}',
@@ -188,6 +241,13 @@ const zh = {
188
241
  createSuccess: '{{object}}创建成功',
189
242
  updateSuccess: '{{object}}更新成功',
190
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` 跳转目标被拒绝,因此未执行跳转。',
191
251
  fullscreen: {
192
252
  title: '编辑文本',
193
253
  description: '编辑完整的文本内容,然后保存或取消更改。',
@@ -199,6 +259,8 @@ const zh = {
199
259
  fields: {
200
260
  relativeDate: {
201
261
  overdue: '逾期 {{count}} 天',
262
+ overdue_one: '逾期 {{count}} 天',
263
+ overdue_other: '逾期 {{count}} 天',
202
264
  },
203
265
  file: {
204
266
  dragDropHere: '拖拽文件到此处',
@@ -215,6 +277,7 @@ const zh = {
215
277
  remove: '移除 {{name}}',
216
278
  exceedsMaxSize: '“{{name}}” 超过大小上限({{max}} MB)',
217
279
  uploadFailed: '上传 “{{name}}” 失败:{{error}}',
280
+ uploadIncomplete: '“{{name}}” 上传未完成:未返回文件 ID,未保存任何内容',
218
281
  },
219
282
  image: {
220
283
  upload: '上传图片',
@@ -255,6 +318,9 @@ const zh = {
255
318
  selectBusinessUnit: '请选择业务单元',
256
319
  selectPosition: '请选择岗位',
257
320
  selectUnitAndSubordinates: '请选择业务单元',
321
+ selectField: '请选择用户字段',
322
+ noUserFields: '此对象没有用户字段',
323
+ fieldNotUserTyped: '{{name}} — 不是用户字段',
258
324
  },
259
325
  filterCondition: {
260
326
  selectObjectFirst: '请先选择对象。',
@@ -265,13 +331,54 @@ const zh = {
265
331
  editAsJson: '以 JSON 编辑',
266
332
  useVisualBuilder: '使用可视化构建器',
267
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
+ },
268
354
  tags: {
269
355
  placeholder: '输入后回车添加…',
270
356
  },
357
+ // objectui#4028 — `AddressField`'s five sub-labels. These were English
358
+ // string literals with no key, and this pack is the one the issue was
359
+ // reported against: a zh-CN console showed five English words in the
360
+ // middle of an otherwise fully translated address form.
361
+ address: {
362
+ street: '街道地址',
363
+ city: '城市',
364
+ state: '省 / 州',
365
+ postalCode: '邮政编码',
366
+ country: '国家 / 地区',
367
+ },
271
368
  textarea: {
272
369
  characterCount: '已输入 {{count}} 个字符,最多 {{max}} 个',
273
370
  charactersRemaining: '还可输入 {{count}} 个字符',
274
371
  },
372
+ grid: {
373
+ addLine: '添加行',
374
+ noItems: '暂无条目',
375
+ noItemsAddHint: '暂无条目,点击“{{label}}”开始添加。',
376
+ optionalColumns: '可选列',
377
+ computed: '自动计算',
378
+ openRow: '打开行',
379
+ duplicateRow: '复制行',
380
+ removeRow: '删除行',
381
+ },
275
382
  },
276
383
  table: {
277
384
  rowsPerPage: '每页行数',
@@ -300,8 +407,12 @@ const zh = {
300
407
  open: '打开',
301
408
  search: '搜索…',
302
409
  modified: '{{count}} 行已修改',
410
+ modified_one: '{{count}} 行已修改',
411
+ modified_other: '{{count}} 行已修改',
303
412
  saveFailed: '保存失败',
304
413
  selected: '已选择 {{count}} 项',
414
+ selected_one: '已选择 {{count}} 项',
415
+ selected_other: '已选择 {{count}} 项',
305
416
  edit: '编辑',
306
417
  delete: '删除',
307
418
  },
@@ -318,9 +429,13 @@ const zh = {
318
429
  openRecord: '打开记录',
319
430
  openMenu: '更多操作',
320
431
  bulkSelected: '已选择 {{count}} 项',
432
+ bulkSelected_one: '已选择 {{count}} 项',
433
+ bulkSelected_other: '已选择 {{count}} 项',
321
434
  bulkSelectedAllMatches: '已选择全部 {{count}} 项(全部匹配)',
322
435
  bulkClear: '清除',
323
436
  bulkAllOnPage: '本页 {{count}} 项已全选。',
437
+ bulkAllOnPage_one: '本页 {{count}} 项已全选。',
438
+ bulkAllOnPage_other: '本页 {{count}} 项已全选。',
324
439
  bulkSelectAllMatching: '选择全部 {{count}} 项匹配记录',
325
440
  bulkAllMatchingSelected: '已选择全部 {{count}} 项匹配记录。',
326
441
  rowHeight: '行高: {{mode}}',
@@ -328,6 +443,14 @@ const zh = {
328
443
  yes: '是',
329
444
  no: '否',
330
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
+ },
331
454
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
332
455
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
333
456
  // pack controls its own separator and word order.
@@ -399,7 +522,11 @@ const zh = {
399
522
  mapped: '已映射',
400
523
  skipped: '已跳过',
401
524
  rowsWithErrors: '{{count}} 行有错误',
525
+ rowsWithErrors_one: '{{count}} 行有错误',
526
+ rowsWithErrors_other: '{{count}} 行有错误',
402
527
  rowsCorrected: '已修正 {{count}} 行',
528
+ rowsCorrected_one: '已修正 {{count}} 行',
529
+ rowsCorrected_other: '已修正 {{count}} 行',
403
530
  clickToFix: '— 点击高亮单元格可直接修改。',
404
531
  showingRows: '显示第 {{shown}} 行,共 {{total}} 行',
405
532
  importing: '导入中… {{progress}}%',
@@ -407,11 +534,15 @@ const zh = {
407
534
  imported: '已导入 {{count}} 条',
408
535
  skippedCount: '已跳过 {{count}} 条',
409
536
  moreErrors: '…还有 {{count}} 个错误',
537
+ moreErrors_one: '…还有 {{count}} 个错误',
538
+ moreErrors_other: '…还有 {{count}} 个错误',
410
539
  cancel: '取消',
411
540
  back: '上一步',
412
541
  next: '下一步',
413
542
  close: '关闭',
414
543
  importNRows: '导入 {{count}} 行',
544
+ importNRows_one: '导入 {{count}} 行',
545
+ importNRows_other: '导入 {{count}} 行',
415
546
  importingProgress: '导入中…',
416
547
  requiredMark: '*',
417
548
  optTreatHistorical: '作为历史数据导入',
@@ -424,6 +555,8 @@ const zh = {
424
555
  // 自动匹配(Airtable 风格)
425
556
  autoMatched: '自动匹配',
426
557
  autoMatchedSummary: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
558
+ autoMatchedSummary_one: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
559
+ autoMatchedSummary_other: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
427
560
  confidence: {
428
561
  high: '高置信度',
429
562
  medium: '中置信度',
@@ -431,8 +564,10 @@ const zh = {
431
564
  },
432
565
  // 下载模板
433
566
  downloadTemplate: '下载模板',
434
- downloadTemplateHint: '获取带正确列的 CSV(必填字段标 *)。',
567
+ downloadTemplateHint: '获取 Excel 模板:仅含可导入的列(必填字段标 *),并附填写说明。',
435
568
  templateFileName: '{{object}}-导入模板',
569
+ templateDownloadFailed: '模板下载失败,请重试。',
570
+ templateNotPermitted: '您没有新建该对象记录的权限,无法获取其导入模板。',
436
571
  // 校验(服务端 dryRun 预检)
437
572
  validate: '校验数据',
438
573
  validateHint: '导入前在服务端逐行校验。',
@@ -440,6 +575,8 @@ const zh = {
440
575
  validatePassed: '全部 {{ok}} 行均有效。',
441
576
  validateFailed: '{{ok}} 条有效,{{errors}} 条有错误。',
442
577
  errorCount: '{{count}} 个错误',
578
+ errorCount_one: '{{count}} 个错误',
579
+ errorCount_other: '{{count}} 个错误',
443
580
  errorRowPrefix: '第 {{row}} 行:',
444
581
  // 服务端结构化导入错误的友好文案
445
582
  referenceNotFound: '找不到匹配 "{{value}}" 的记录',
@@ -470,8 +607,14 @@ const zh = {
470
607
  optBackgroundHint: '(作为可撤销任务运行)',
471
608
  // 结果
472
609
  createdCount: '新建 {{count}} 条',
610
+ createdCount_one: '新建 {{count}} 条',
611
+ createdCount_other: '新建 {{count}} 条',
473
612
  updatedCount: '更新 {{count}} 条',
613
+ updatedCount_one: '更新 {{count}} 条',
614
+ updatedCount_other: '更新 {{count}} 条',
474
615
  resultsTruncated: '显示前 {{count}} 行结果(共 {{total}} 行)。',
616
+ resultsTruncated_one: '显示前 {{count}} 行结果(共 {{total}} 行)。',
617
+ resultsTruncated_other: '显示前 {{count}} 行结果(共 {{total}} 行)。',
475
618
  downloadFailed: '下载失败行',
476
619
  cancelImport: '取消导入',
477
620
  importCancelled: '导入已取消',
@@ -508,9 +651,13 @@ const zh = {
508
651
  },
509
652
  bulk: {
510
653
  confirmDefault: '此操作将应用于 {{count}} 条记录。',
654
+ confirmDefault_one: '此操作将应用于 {{count}} 条记录。',
655
+ confirmDefault_other: '此操作将应用于 {{count}} 条记录。',
511
656
  overLimit: '所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。',
512
657
  affectedRecords: '受影响的记录({{count}}):',
513
658
  skippedIneligible: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
659
+ skippedIneligible_one: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
660
+ skippedIneligible_other: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
514
661
  rowFallback: '第 {{index}} 行',
515
662
  andMore: '……以及另外 {{count}} 条',
516
663
  processed: '已处理 {{count}} / {{total}}',
@@ -528,7 +675,6 @@ const zh = {
528
675
  undo: '撤销',
529
676
  undoing: '撤销中…',
530
677
  done: '完成',
531
- selectPlaceholder: '请选择…',
532
678
  loading: '加载中…',
533
679
  },
534
680
  },
@@ -537,16 +683,43 @@ const zh = {
537
683
  month: '月',
538
684
  week: '周',
539
685
  day: '日',
540
- agenda: '日程',
541
686
  allDay: '全天',
542
- noEvents: '暂无事件',
543
687
  newEvent: '新建事件',
544
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
+ },
545
717
  },
546
718
  list: {
547
719
  loading: '正在加载记录…',
548
720
  recordCount: '{{count}} 条记录',
549
- recordCountOne: '{{count}} 条记录',
721
+ recordCount_one: '{{count}} 条记录',
722
+ recordCount_other: '{{count}} 条记录',
550
723
  addRecord: '添加记录',
551
724
  tabs: '标签页',
552
725
  allRecords: '全部记录',
@@ -616,7 +789,7 @@ const zh = {
616
789
  hideFieldsTitle: '隐藏字段',
617
790
  dataLimitReached: '显示前 {{limit}} 条记录。可能有更多数据。',
618
791
  viewSettings: '视图设置',
619
- viewSettingsHint: '分组、行颜色、密度与可见字段。',
792
+ viewSettingsHint: '分组、行颜色、密度与可见字段。对所有使用该视图的用户生效。',
620
793
  addGroup: '添加分组字段',
621
794
  collapsedByDefault: '默认折叠',
622
795
  removeGroup: '删除',
@@ -681,6 +854,17 @@ const zh = {
681
854
  },
682
855
  gantt: {
683
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 写法,其余为遗留别名。',
684
868
  },
685
869
  },
686
870
  gantt: {
@@ -726,6 +910,7 @@ const zh = {
726
910
  },
727
911
  aria: {
728
912
  taskList: '任务列表',
913
+ refreshing: '刷新中…',
729
914
  },
730
915
  tooltip: {
731
916
  days: '天',
@@ -771,13 +956,19 @@ const zh = {
771
956
  conflict: {
772
957
  title: '排程冲突',
773
958
  body: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
959
+ body_one: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
960
+ body_other: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
774
961
  confirm: '自动重新排程',
775
962
  cancel: '保持不变',
776
963
  },
777
964
  autoScheduleDlg: {
778
965
  title: '自动排程',
779
966
  body: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
967
+ body_one: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
968
+ body_other: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
780
969
  skipped: '另有 {{count}} 项因锁定/无权限跳过。',
970
+ skipped_one: '另有 {{count}} 项因锁定/无权限跳过。',
971
+ skipped_other: '另有 {{count}} 项因锁定/无权限跳过。',
781
972
  confirm: '执行',
782
973
  cancel: '取消',
783
974
  none: '依赖均满足,无需排程',
@@ -828,6 +1019,7 @@ const zh = {
828
1019
  tabActionsFor: '{{name}} 的视图操作',
829
1020
  readonlyAriaLabel: '只读视图',
830
1021
  readonlyTooltip: '系统视图 — 由代码定义,只读。',
1022
+ malformedFilter: '此视图的筛选条件有误,因此不显示任何记录:无法应用 {{subject}} 条件。',
831
1023
  },
832
1024
  designer: {
833
1025
  undo: '撤销',
@@ -847,6 +1039,9 @@ const zh = {
847
1039
  writeStrippedTitle: '已保存,但部分字段未生效',
848
1040
  writeStrippedReadonly: '以下字段为只读,未生效:{{fields}}',
849
1041
  writeStrippedByState: '以下字段在记录当前状态下不可编辑,未生效:{{fields}}',
1042
+ writeStrippedPrimaryKey: '以下字段是记录的标识符,保存时无法修改,未生效:{{fields}}',
1043
+ writeStrippedComputed: '以下字段由服务端按公式计算,提交的值未生效:{{fields}}',
1044
+ writeStrippedUnknownReason: '以下字段未被服务端写入:{{fields}}',
850
1045
  approvalPendingEditable: '审批中 · 可编辑',
851
1046
  approvalPendingTooltip: '该记录有待审批的请求,但当前审批节点仍允许编辑',
852
1047
  approvalProgress: '审批 — 已通过 {{got}} / 共需 {{need}}',
@@ -859,7 +1054,16 @@ const zh = {
859
1054
  cancelApprovalTooltipUnlocked: '撤回当前的待审批请求',
860
1055
  cancelApprovalFailed: '撤回审批失败',
861
1056
  cancelApprovalUnavailable: '当前数据源不支持撤回审批',
1057
+ pathLabel: '记录路径',
1058
+ pathStageCompleted: '{{stage}},已完成',
1059
+ pathStageCurrent: '{{stage}},当前阶段',
1060
+ pathStageUpcoming: '{{stage}},未开始',
1061
+ pathStageLostCurrent: '{{stage}},已失败,当前阶段',
1062
+ pathStageLostUpcoming: '{{stage}},已失败,未到达',
1063
+ pathStageWonUpcoming: '{{stage}},目标阶段,未到达',
862
1064
  linkCopied: '链接已复制到剪贴板',
1065
+ commentFailed: '评论未发布,内容没有保存,请重试。',
1066
+ reactionFailed: '表情回应未保存,请重试。',
863
1067
  linkCopyFailed: '复制链接失败',
864
1068
  cancel: '取消',
865
1069
  cancelEdit: '放弃更改',
@@ -886,7 +1090,8 @@ const zh = {
886
1090
  pageHeaderActions: '页面标题栏操作',
887
1091
  emojiPicker: '表情选择器',
888
1092
  reactionCount: '{{emoji}} {{count}} 个回应',
889
- reactionCountOne: '{{emoji}} {{count}} 个回应',
1093
+ reactionCount_one: '{{emoji}} {{count}} 个回应',
1094
+ reactionCount_other: '{{emoji}} {{count}} 个回应',
890
1095
  recordDetail: '记录详情',
891
1096
  recordDetailWithLabel: '{{label}}详情',
892
1097
  openAsFullPage: '以完整页面打开',
@@ -913,7 +1118,6 @@ const zh = {
913
1118
  viewAll: '查看全部',
914
1119
  new: '新建',
915
1120
  add: '添加',
916
- emptyValue: '—',
917
1121
  activity: '活动',
918
1122
  history: '历史',
919
1123
  historyEmpty: '暂无历史记录',
@@ -928,6 +1132,7 @@ const zh = {
928
1132
  sortBy: '排序',
929
1133
  filterPlaceholder: '筛选…',
930
1134
  highlightFields: '关键字段',
1135
+ highlightsLabel: '记录关键字段',
931
1136
  // Comments
932
1137
  comments: '评论',
933
1138
  searchComments: '搜索评论…',
@@ -939,8 +1144,14 @@ const zh = {
939
1144
  unpin: '取消置顶',
940
1145
  justNow: '刚刚',
941
1146
  minutesAgo: '{{count}}分钟前',
1147
+ minutesAgo_one: '{{count}}分钟前',
1148
+ minutesAgo_other: '{{count}}分钟前',
942
1149
  hoursAgo: '{{count}}小时前',
1150
+ hoursAgo_one: '{{count}}小时前',
1151
+ hoursAgo_other: '{{count}}小时前',
943
1152
  daysAgo: '{{count}}天前',
1153
+ daysAgo_one: '{{count}}天前',
1154
+ daysAgo_other: '{{count}}天前',
944
1155
  // Activity feed actors
945
1156
  systemActor: '系统',
946
1157
  unknownUser: '未知用户',
@@ -954,7 +1165,8 @@ const zh = {
954
1165
  // Attachments
955
1166
  dropFilesToUpload: '拖拽文件到此处或点击上传',
956
1167
  attachmentCount: '{{count}} 个附件',
957
- attachmentCountPlural: '{{count}} 个附件',
1168
+ attachmentCount_one: '{{count}} 个附件',
1169
+ attachmentCount_other: '{{count}} 个附件',
958
1170
  removeAttachment: '移除附件',
959
1171
  // Record Attachments panel (enable.files, objectstack#4358)
960
1172
  attachments: '附件',
@@ -968,12 +1180,11 @@ const zh = {
968
1180
  attachmentDownloadDenied: '您无权下载此附件。',
969
1181
  attachmentAuthRequired: '请登录后再下载此附件。',
970
1182
  attachmentPermissionDenied: '您没有执行此操作的权限。',
1183
+ attachmentsAccessDenied: '您没有访问这些附件的权限。',
1184
+ attachmentsLoadFailed: '无法加载此记录的附件。',
1185
+ attachmentsApiUnavailable: '此对象上的附件列表不可用。',
1186
+ retryLoadAttachments: '重试',
971
1187
  // Diff
972
- unifiedDiff: '统一视图',
973
- sideBySideDiff: '并排视图',
974
- noChanges: '无变更',
975
- previousVersion: '旧版本',
976
- currentVersion: '新版本',
977
1188
  // Discussion
978
1189
  discussion: '讨论',
979
1190
  showDiscussion: '显示讨论 ({{count}})',
@@ -992,18 +1203,12 @@ const zh = {
992
1203
  subscribedTooltip: '已订阅 — 点击取消订阅',
993
1204
  unsubscribedTooltip: '订阅通知',
994
1205
  // Navigation
995
- firstRecord: '第一条记录 (Home)',
996
- previousRecordKey: '上一条记录 (←)',
997
- nextRecordKey: '下一条记录 (→)',
998
- lastRecord: '最后一条记录 (End)',
999
1206
  noRecords: '无记录',
1000
1207
  // objectui#3863 — base key. zh has a single plural category (`other`), so this
1001
1208
  // slot is unreachable here and equals `_other` for key-set parity.
1002
1209
  showEmptyRelated: '+ {{count}} 个为空',
1003
1210
  showEmptyRelated_one: '+ {{count}} 个为空',
1004
1211
  showEmptyRelated_other: '+ {{count}} 个为空',
1005
- searchWhileNavigating: '导航时搜索',
1006
- searchRecords: '搜索记录…',
1007
1212
  // Activity timeline
1008
1213
  allActivity: '全部动态',
1009
1214
  commentsOnly: '仅评论',
@@ -1011,13 +1216,29 @@ const zh = {
1011
1216
  tasksOnly: '仅任务',
1012
1217
  leaveCommentPlaceholder: '留下评论… (Ctrl+Enter 提交)',
1013
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: '更新了记录',
1014
1234
  loadMore: '加载更多',
1015
1235
  edited: '(已编辑)',
1016
1236
  via: '通过 {{source}}',
1017
1237
  viewSource: '查看来源',
1018
1238
  // Replies
1019
1239
  replyCount: '{{count}} 条回复',
1020
- replyCountPlural: '{{count}} 条回复',
1240
+ replyCount_one: '{{count}} 条回复',
1241
+ replyCount_other: '{{count}} 条回复',
1021
1242
  replyPlaceholder: '回复…',
1022
1243
  // 无障碍标签
1023
1244
  filterActivity: '筛选活动',
@@ -1030,13 +1251,27 @@ const zh = {
1030
1251
  copyPhone: '复制电话号码',
1031
1252
  copyRecordId: '复制记录 ID',
1032
1253
  showEmptyFields: '显示 {{count}} 个空字段',
1254
+ showEmptyFields_one: '显示 {{count}} 个空字段',
1255
+ showEmptyFields_other: '显示 {{count}} 个空字段',
1033
1256
  hideEmptyFields: '隐藏空字段',
1034
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}} 个文件',
1035
1266
  },
1036
1267
  chart: {
1037
- noData: '暂无图表数据',
1038
1268
  loading: '图表加载中…',
1269
+ refreshing: '刷新中…',
1039
1270
  nullCategory: '(未指定)',
1271
+ scatterOneMeasure: '散点图只绘制一个度量。请只保留一个系列:',
1272
+ unconfigured: {
1273
+ noCategoryAxis: '图表需要分类轴 —— 对象绑定的图表不会虚构一个。请声明以下之一:',
1274
+ },
1040
1275
  },
1041
1276
  report: {
1042
1277
  total: '总计',
@@ -1064,89 +1299,136 @@ const zh = {
1064
1299
  panelTitle: '编辑报表',
1065
1300
  },
1066
1301
  },
1067
- map: {
1068
- searchLocations: '搜索位置…',
1069
- locationDetails: '位置详情',
1070
- markersCount: '{{count}} 个标记',
1071
- invalidCoordinates: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1072
- invalidCoordinatesPlural: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1073
- },
1074
- workflow: {
1075
- draft: '草稿',
1076
- active: '活跃',
1077
- paused: '已暂停',
1078
- completed: '已完成',
1079
- cancelled: '已取消',
1080
- save: '保存',
1081
- publish: '发布',
1082
- addNode: '添加节点',
1083
- workflowFlow: '工作流程',
1084
- properties: '属性',
1085
- connections: '连接',
1086
- quickConnect: '快速连接',
1087
- fromPlaceholder: '从…',
1088
- toPlaceholder: '到…',
1089
- connect: '连接',
1090
- label: '标签',
1091
- type: '类型',
1092
- description: '描述',
1093
- assignee: '负责人',
1094
- assigneeType: '负责人类型',
1095
- user: '用户',
1096
- role: '角色',
1097
- group: '组',
1098
- expression: '表达式',
1099
- timeoutMinutes: '超时时间(分钟)',
1100
- selectNodeToEdit: '选择节点以编辑其属性',
1101
- workflowTitle: '工作流标题',
1102
- newWorkflow: '新工作流',
1103
- outConnections: '{{count}} 个输出',
1104
- start: '开始',
1105
- end: '结束',
1106
- task: '任务',
1107
- userTask: '用户任务',
1108
- serviceTask: '服务任务',
1109
- scriptTask: '脚本任务',
1110
- approval: '审批',
1111
- condition: '条件',
1112
- parallelGateway: '并行网关',
1113
- joinGateway: '合并网关',
1114
- boundaryEvent: '边界事件',
1115
- delay: '延迟',
1116
- notification: '通知',
1117
- webhook: 'Webhook',
1118
- allowConcurrency: '允许(并发执行)',
1119
- forbidConcurrency: '禁止(跳过新任务)',
1120
- replaceConcurrency: '替换(取消现有任务)',
1121
- queueConcurrency: '排队(等待当前完成)',
1122
- conditionEvent: '条件',
1123
- manualEvent: '手动',
1124
- webhookEvent: 'Webhook',
1125
- timerEvent: '定时器',
1126
- signalEvent: '信号',
1127
- versionHistory: '版本历史',
1128
- importBpmn: '导入 BPMN',
1129
- exportBpmn: '导出 BPMN',
1130
- undo: '撤销',
1131
- redo: '重做',
1132
- resetZoom: '重置缩放',
1133
- },
1134
1302
  dashboard: {
1135
1303
  addWidget: '添加组件',
1136
- removeWidget: '移除组件',
1137
1304
  editLayout: '编辑布局',
1138
1305
  saveLayout: '保存布局',
1139
1306
  resetLayout: '重置布局',
1140
1307
  total: '总计',
1141
- noDataAvailable: '暂无数据',
1142
1308
  noDataSourceFor: '没有可用的数据源:',
1143
- 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
+ },
1144
1322
  loading: '加载中…',
1323
+ refreshing: '刷新中…',
1324
+ refreshAll: '全部刷新',
1325
+ refreshDashboard: '刷新仪表盘',
1145
1326
  pickMeasures: '请为该数据集组件选择度量(值)。',
1146
1327
  datasetUnsupported: '当前数据源不支持数据集查询。',
1328
+ widgetForbiddenTitle: '无权访问',
1329
+ widgetForbiddenMessage: '你没有查看该组件数据的权限。',
1147
1330
  details: '明细',
1148
1331
  exportCsv: '导出 CSV',
1149
1332
  openInList: '在列表中打开',
1333
+ config: {
1334
+ breadcrumb: {
1335
+ dashboard: '仪表盘',
1336
+ configuration: '配置',
1337
+ widget: '组件',
1338
+ chart: '图表',
1339
+ table: '表格',
1340
+ pivotTable: '透视表',
1341
+ },
1342
+ section: {
1343
+ general: '基本',
1344
+ layout: '布局',
1345
+ data: '数据',
1346
+ dataBinding: '数据绑定',
1347
+ appearance: '外观',
1348
+ },
1349
+ field: {
1350
+ title: '标题',
1351
+ description: '描述',
1352
+ columns: '列数',
1353
+ gap: '间距',
1354
+ rowHeight: '行高 (px)',
1355
+ autoRefresh: '自动刷新',
1356
+ showDescription: '显示描述',
1357
+ theme: '主题',
1358
+ widgetType: '组件类型',
1359
+ colorVariant: '颜色',
1360
+ dataset: '数据集',
1361
+ dimensions: '维度',
1362
+ values: '度量值',
1363
+ width: '宽度 (列数)',
1364
+ height: '高度 (行数)',
1365
+ },
1366
+ placeholder: {
1367
+ dashboardTitle: '仪表盘标题',
1368
+ dashboardDescription: '显示在标题下方的简短说明',
1369
+ widgetTitle: '组件标题',
1370
+ widgetDescription: '组件描述',
1371
+ datasetName: '数据集名称',
1372
+ selectDataset: '选择数据集…',
1373
+ searchDatasets: '搜索数据集…',
1374
+ addDimension: '添加维度…',
1375
+ addMeasure: '添加度量…',
1376
+ searchMembers: '搜索…',
1377
+ },
1378
+ empty: {
1379
+ datasets: '未找到数据集。',
1380
+ dimensions: '未选择维度。',
1381
+ measures: '未选择度量。',
1382
+ nothingToAdd: '没有可添加的项。',
1383
+ },
1384
+ help: {
1385
+ dataset: '该组件绑定的语义层数据集 (ADR-0021)。',
1386
+ dimensions: '按这些数据集维度对度量值进行分组/拆分。',
1387
+ dimensionsPivot: '分组/拆分字段。最后一个维度将横向展开为列。',
1388
+ values: '要展示的数据集度量 (至少一个)。',
1389
+ },
1390
+ action: {
1391
+ add: '添加',
1392
+ remove: '移除 {{name}}',
1393
+ },
1394
+ refresh: {
1395
+ off: '关闭',
1396
+ every30s: '每 30 秒',
1397
+ every1m: '每 1 分钟',
1398
+ every5m: '每 5 分钟',
1399
+ every15m: '每 15 分钟',
1400
+ every30m: '每 30 分钟',
1401
+ every1h: '每 1 小时',
1402
+ },
1403
+ themeOption: {
1404
+ light: '浅色',
1405
+ dark: '深色',
1406
+ auto: '自动',
1407
+ },
1408
+ widgetType: {
1409
+ metric: '指标',
1410
+ bar: '柱状图',
1411
+ horizontalBar: '条形图',
1412
+ line: '折线图',
1413
+ pie: '饼图',
1414
+ donut: '环形图',
1415
+ area: '面积图',
1416
+ scatter: '散点图',
1417
+ funnel: '漏斗图',
1418
+ table: '表格',
1419
+ pivot: '透视表',
1420
+ },
1421
+ color: {
1422
+ default: '默认',
1423
+ blue: '蓝色',
1424
+ teal: '青色',
1425
+ orange: '橙色',
1426
+ purple: '紫色',
1427
+ success: '成功',
1428
+ warning: '警告',
1429
+ danger: '危险',
1430
+ },
1431
+ },
1150
1432
  trend: {
1151
1433
  vsLastQuarter: '较上季度',
1152
1434
  vsLastMonth: '较上月',
@@ -1179,24 +1461,6 @@ const zh = {
1179
1461
  },
1180
1462
  },
1181
1463
  },
1182
- configPanel: {
1183
- save: '保存',
1184
- discard: '丢弃',
1185
- close: '关闭',
1186
- layout: '布局',
1187
- columns: '列数',
1188
- gap: '间距',
1189
- rowHeight: '行高',
1190
- data: '数据',
1191
- refreshInterval: '刷新间隔',
1192
- appearance: '外观',
1193
- title: '标题',
1194
- showDescription: '显示描述',
1195
- theme: '主题',
1196
- configuration: '配置',
1197
- general: '基本',
1198
- advanced: '高级',
1199
- },
1200
1464
  appDesigner: {
1201
1465
  createApp: '创建应用',
1202
1466
  editApp: '编辑应用',
@@ -1209,10 +1473,6 @@ const zh = {
1209
1473
  appDescription: '描述',
1210
1474
  appIcon: '图标',
1211
1475
  template: '模板',
1212
- layout: '布局',
1213
- layoutSidebar: '侧边栏',
1214
- layoutHeader: '顶部导航',
1215
- layoutEmpty: '空白',
1216
1476
  selectObjects: '选择对象',
1217
1477
  searchObjects: '搜索对象…',
1218
1478
  selectAll: '全选',
@@ -1221,7 +1481,6 @@ const zh = {
1221
1481
  addGroup: '添加分组',
1222
1482
  addUrl: '添加链接',
1223
1483
  addSeparator: '添加分隔线',
1224
- noNavItems: '暂无导航项。',
1225
1484
  logoUrl: 'Logo 链接',
1226
1485
  primaryColor: '主色调',
1227
1486
  faviconUrl: '网站图标链接',
@@ -1247,16 +1506,13 @@ const zh = {
1247
1506
  showSort: '显示排序',
1248
1507
  appearance: '外观',
1249
1508
  rowHeight: '行高',
1250
- stripedRows: '斑马纹',
1251
- bordered: '边框',
1252
1509
  livePreview: '实时预览',
1253
- stepBasicDesc: '名称、标题和布局',
1510
+ stepBasicDesc: '名称、标题和图标',
1254
1511
  stepObjectsDesc: '选择业务对象',
1255
1512
  stepNavigationDesc: '构建导航树',
1256
1513
  stepBrandingDesc: 'Logo、颜色和图标',
1257
1514
  noObjectsFound: '未找到对象。',
1258
1515
  noNavItemsHint: '暂无导航项。请在上一步选择对象或手动添加项目。',
1259
- separator: '分隔线',
1260
1516
  separatorLabel: '— 分隔线 —',
1261
1517
  newGroup: '新建分组',
1262
1518
  newLink: '新建链接',
@@ -1290,6 +1546,7 @@ const zh = {
1290
1546
  navTypeSeparator: '分隔线',
1291
1547
  navTypeAction: '操作',
1292
1548
  navTypeComponent: '组件',
1549
+ navTypeDoc: '文档',
1293
1550
  navEditIcon: '编辑图标',
1294
1551
  navToggleVisible: '切换可见性',
1295
1552
  navHidden: '已隐藏',
@@ -1362,17 +1619,13 @@ const zh = {
1362
1619
  unique: '唯一',
1363
1620
  readOnly: '只读',
1364
1621
  hidden: '隐藏',
1365
- indexed: '索引',
1366
1622
  externalId: '外部 ID',
1367
1623
  trackHistory: '追踪历史',
1368
1624
  defaultValue: '默认值',
1369
1625
  placeholder: '占位文本',
1370
1626
  referenceTo: '引用对象',
1371
- formula: '公式',
1372
1627
  options: '选项',
1373
1628
  addOption: '添加选项',
1374
- validationRules: '验证规则',
1375
- addRule: '添加规则',
1376
1629
  systemBadge: '系统',
1377
1630
  ungrouped: '通用',
1378
1631
  deleteConfirmTitle: '删除字段?',
@@ -1391,21 +1644,57 @@ const zh = {
1391
1644
  },
1392
1645
  },
1393
1646
  console: {
1647
+ studio: {
1648
+ backToHome: '返回首页',
1649
+ },
1394
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: "该列表为空是因为读取失败,而不是因为该对象没有已保存的视图。请重试;如果反复出现,请反馈此问题。",
1395
1662
  title: 'ObjectStack 控制台',
1396
1663
  initializing: '正在初始化应用程序…',
1397
1664
  search: '搜索…',
1398
1665
  breadcrumb: {
1399
1666
  dashboards: '仪表盘',
1400
1667
  pages: '页面',
1401
- 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: '报表',
1402
1681
  system: '系统',
1682
+ marketplace: '应用市场',
1683
+ settings: '设置',
1684
+ apps: '应用',
1685
+ profile: '个人资料',
1686
+ approvals: '审批',
1687
+ aiApprovals: 'AI 审批',
1688
+ auditLog: '审计日志',
1403
1689
  },
1404
1690
  nav: {
1405
1691
  pinItem: '固定 {{name}}',
1406
1692
  unpinItem: '取消固定 {{name}}',
1407
1693
  dragToReorder: '拖动以重新排序',
1408
1694
  favorites: '收藏',
1695
+ launcherLabel: '应用启动台',
1696
+ menuLabel: '应用导航',
1697
+ menuEmpty: '此应用没有你可以打开的导航项。',
1409
1698
  },
1410
1699
  settingsHub: {
1411
1700
  title: '设置',
@@ -1516,6 +1805,13 @@ const zh = {
1516
1805
  createApp: '创建新应用',
1517
1806
  },
1518
1807
  ai: {
1808
+ pendingDrafts: {
1809
+ count: '有 {{count}} 项改动尚未发布——用户还看不到。',
1810
+ publish: '发布',
1811
+ published: '全部待发布改动已生效。',
1812
+ failed: '发布失败。',
1813
+ publishedWithFindings: '已发布,但运行时探针发现问题:{{detail}}',
1814
+ },
1519
1815
  usage: {
1520
1816
  title: 'AI 用量',
1521
1817
  meterBuild: 'AI 搭建',
@@ -1525,9 +1821,16 @@ const zh = {
1525
1821
  statusFull: '额度已用完',
1526
1822
  resetsDaily: '今晚重置',
1527
1823
  resetsMonthly: '下个周期重置',
1824
+ resetsWeeklyDays: '{{count}} 天后重置',
1825
+ resetsWeeklyDays_one: '{{count}} 天后重置',
1826
+ resetsWeeklyDays_other: '{{count}} 天后重置',
1827
+ resetsWeeklyHours: '{{count}} 小时后重置',
1828
+ resetsWeeklyHours_one: '{{count}} 小时后重置',
1829
+ resetsWeeklyHours_other: '{{count}} 小时后重置',
1528
1830
  ctaUpgrade: '升级以继续使用',
1529
1831
  ctaTopUp: '购买额度包以继续',
1530
1832
  ariaLabel: 'AI 用量:{{status}}',
1833
+ breakdownTitle: '已用额度构成',
1531
1834
  },
1532
1835
  workspaceTitle: 'AI 工作区',
1533
1836
  workspaceSubtitle: '提问、查看并继续历史对话',
@@ -1537,6 +1840,31 @@ const zh = {
1537
1840
  share: '分享',
1538
1841
  shareTitle: '分享此对话',
1539
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
+ },
1540
1868
  newChat: '新对话',
1541
1869
  searchChats: '搜索对话…',
1542
1870
  noChatsYet: '暂无对话',
@@ -1566,7 +1894,7 @@ const zh = {
1566
1894
  empty: {
1567
1895
  build: {
1568
1896
  title: '用 AI 搭建',
1569
- description: '用自然语言描述一个应用或流程 —— 我会起草对象、界面和自动化,随后你审阅并发布。',
1897
+ description: '用自然语言描述一个应用 —— 我会起草对象、界面和示例数据,随后你审阅并发布。',
1570
1898
  },
1571
1899
  ask: {
1572
1900
  title: '向你的数据提问',
@@ -1575,7 +1903,7 @@ const zh = {
1575
1903
  editApp: {
1576
1904
  title: '正在编辑「{{app}}」',
1577
1905
  titleGeneric: '编辑此应用',
1578
- description: '想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或自动化,或调整已有内容。',
1906
+ description: '想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或仪表盘,或调整已有内容。',
1579
1907
  },
1580
1908
  },
1581
1909
  clearConversation: '清空',
@@ -1626,6 +1954,11 @@ const zh = {
1626
1954
  changesConfirmed: '已确认',
1627
1955
  changesConfirm: '确认修改',
1628
1956
  changesConfirmHint: '回复以确认或调整该改动。',
1957
+ changesApplying: '应用中…',
1958
+ changesApplied: '已生效',
1959
+ changesDrafted: '已暂存为草稿',
1960
+ changesFailed: '未生效',
1961
+ discussing: '正在讨论:{{target}}',
1629
1962
  changesConfirmMessage: '确认修改,应用你刚才提议的改动。',
1630
1963
  changeVerb: {
1631
1964
  createObject: '新建对象',
@@ -1654,23 +1987,41 @@ const zh = {
1654
1987
  recentRecords: '帮我列出最近创建的 5 条记录。',
1655
1988
  recordCounts: '统计每个对象的记录数。',
1656
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.
1657
1998
  metadataAssistant: {
1658
- buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,并建立它们之间的关系。',
1659
- buildApp: '做一个项目管理应用:项目、任务、成员。',
1660
- buildFlow: '设计一个工单系统:工单、优先级、状态流转。',
1661
- buildInventory: '做一个库存管理应用:商品、库存量、供应商,以及低库存预警。',
1662
- buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段和面试记录。',
1999
+ buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,以及一个按阶段汇总商机金额的仪表盘。',
2000
+ buildApp: '做一个项目管理应用:项目、任务(负责人、截止日期),按状态分组的看板,以及按截止日期的日历视图。',
2001
+ buildFlow: '设计一个工单系统:工单、优先级、状态(下拉),以及按状态分组的看板。',
2002
+ buildInventory: '做一个库存管理应用:商品、库存量、供应商,并用一个视图筛出低于安全库存的商品。',
2003
+ buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段字段,以及按阶段分组的看板。',
1663
2004
  },
1664
2005
  generic: {
1665
2006
  help: '你可以帮我做什么?',
1666
2007
  availableObjects: '列出可用的数据对象。',
1667
2008
  recentActivity: '总结我的最近动态。',
1668
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`.
1669
2020
  editApp: {
1670
2021
  addField: '给某个对象加一个字段。',
1671
2022
  addObject: '新增一个对象,并关联到已有对象。',
1672
2023
  addDashboard: '加一个展示关键指标的仪表盘。',
1673
- addAutomation: '加一个自动化 —— 审批、状态流转或通知。',
2024
+ addSampleData: '给现有对象补一批贴近真实的示例数据,好拿去演示。',
1674
2025
  },
1675
2026
  },
1676
2027
  // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
@@ -1725,6 +2076,21 @@ const zh = {
1725
2076
  older: '更早',
1726
2077
  },
1727
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
+ },
1728
2094
  errors: {
1729
2095
  somethingWentWrong: '出错了',
1730
2096
  unexpectedError: '渲染此视图时发生意外错误。',
@@ -1774,6 +2140,7 @@ const zh = {
1774
2140
  objectView: {
1775
2141
  systemViewReadonly: '系统视图由代码定义,只读。',
1776
2142
  cannotEditMetaView: '该视图为内置视图,由代码定义,无法修改。',
2143
+ viewConfigPermissionDenied: '视图配置对所有使用该视图的用户生效,因此修改它需要「管理元数据」权限。请联系管理员进行修改。',
1777
2144
  cannotDeleteMetaView: '该视图为内置视图,由代码定义,无法删除。',
1778
2145
  expandToPage: '以完整页面打开',
1779
2146
  objectNotFound: '未找到对象',
@@ -1782,64 +2149,21 @@ const zh = {
1782
2149
  filterOrNotSavable: '该筛选条件之间使用「或」,保存到视图暂不支持这种结构。它仍会作用于当前列表 —— 取消「或」分组后才能保存到视图。',
1783
2150
  filterNestedNotSavable: '该筛选使用了嵌套条件分组,保存到视图不支持这种结构。请改为单层条件列表后再保存到视图。',
1784
2151
  allRecords: '所有记录',
1785
- exitDesignMode: '退出设计模式',
1786
- enterDesignMode: '进入设计模式',
1787
- metadataInspector: '元数据检查器',
1788
- editView: '编辑视图',
1789
- addView: '添加视图',
1790
- designTools: '设计工具',
1791
2152
  new: '新建',
1792
2153
  import: '导入',
1793
2154
  importTitle: '从 CSV 文件导入',
1794
2155
  importedToast: '成功导入 {{count}} 行。',
2156
+ importedToast_one: '成功导入 {{count}} 行。',
2157
+ importedToast_other: '成功导入 {{count}} 行。',
1795
2158
  importedWithSkipped: '已导入 {{ok}} 行;跳过 {{skipped}} 行。',
1796
2159
  configureView: '配置视图',
1797
- closePanel: '关闭面板',
1798
- showAdvancedSettings: '显示高级设置',
1799
- showFewerSettings: '显示精简设置',
1800
- page: '页面',
1801
- pageConfigHint: '工具栏、导航与视图外壳设置',
1802
- listConfigHint: '此列表类型的数据渲染、列与外观',
1803
- general: '常规',
1804
- generalHint: '视图标题、描述和类型',
1805
- toolbar: '工具栏',
1806
- toolbarHint: '搜索、筛选、排序、分组和密度切换',
1807
2160
  toolbarEnabledCount: '已启用 {{count}}/{{total}} 项',
1808
- navigationSection: '导航',
1809
- navigationHint: '行点击行为和详情视图设置',
1810
- records: '记录',
1811
- recordsHint: '选择模式、添加记录和内联编辑',
1812
- exportPrint: '导出与打印',
1813
- exportPrintHint: '导出格式、打印和记录数显示',
1814
- showAllFields: '全部显示',
1815
- hideAllFields: '全部隐藏',
1816
2161
  searchFields: '搜索字段…',
1817
2162
  title: '标题',
1818
- description: '描述',
1819
- data: '数据',
1820
- source: '数据源',
1821
- columns: '列',
1822
- filterBy: '筛选条件',
1823
- sortBy: '排序条件',
1824
- appearance: '外观',
1825
- showDescription: '显示描述',
1826
2163
  viewType: '视图类型',
1827
- userFilters: '用户筛选器',
1828
- enableSearch: '启用搜索',
1829
- enableFilter: '启用筛选',
1830
- enableSort: '启用排序',
1831
- enableHideFields: '启用隐藏字段',
1832
- enableGroup: '启用分组',
1833
- enableColor: '启用颜色',
1834
- enableDensity: '启用密度',
1835
- userActions: '用户操作',
1836
- addRecordViaForm: '通过表单添加记录',
1837
- advanced: '高级',
1838
- allowExport: '允许导出',
1839
2164
  recordCount: '{{count}} 条记录',
1840
- noDescription: '无描述',
1841
- none: '无',
1842
- columnsConfigured: '{{count}} 列',
2165
+ recordCount_one: '{{count}} 条记录',
2166
+ recordCount_other: '{{count}} 条记录',
1843
2167
  save: '保存',
1844
2168
  discard: '丢弃',
1845
2169
  createView: '创建视图',
@@ -1850,6 +2174,8 @@ const zh = {
1850
2174
  deleteViewTitle: '删除视图',
1851
2175
  deleteViewConfirm: '确定要删除视图 "{{name}}" 吗?此操作无法撤销。',
1852
2176
  bulkDeleteConfirm: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
2177
+ bulkDeleteConfirm_one: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
2178
+ bulkDeleteConfirm_other: '确定要删除选中的 {{count}} 条记录吗?此操作无法撤销。',
1853
2179
  duplicateViewName: '已存在同名视图。',
1854
2180
  viewTypeGrid: '表格',
1855
2181
  viewTypeGridDesc: '电子表格风格的记录表格。',
@@ -1876,7 +2202,6 @@ const zh = {
1876
2202
  viewNameHelp: '机器标识(snake_case),根据标题自动生成,可自行修改。',
1877
2203
  viewNameRequired: '请输入标识(小写字母、数字、下划线)。非拉丁标题不会自动生成。',
1878
2204
  viewNameInvalid: '仅限小写字母、数字和下划线,且以字母或下划线开头。',
1879
- typeOptions: '类型选项',
1880
2205
  groupByField: '分组字段',
1881
2206
  groupByFieldHelp: '看板会按该字段的不同取值分列。',
1882
2207
  startDateField: '开始日期字段',
@@ -1891,7 +2216,6 @@ const zh = {
1891
2216
  longitudeFieldHelp: '提供经度坐标的字段(仅地理坐标字段可选)。',
1892
2217
  imageField: '图片字段',
1893
2218
  imageFieldHelp: '画廊封面来自该图片或附件字段。',
1894
- dateField: '日期字段',
1895
2219
  selectField: '选择字段…',
1896
2220
  selectOption: '选择…',
1897
2221
  noEligibleFieldForType: '没有符合条件的字段。请先在对象上添加该类型字段。',
@@ -1904,86 +2228,18 @@ const zh = {
1904
2228
  chartTypePie: '饼图',
1905
2229
  chartTypeArea: '面积图',
1906
2230
  chartTypeScatter: '散点图',
1907
- xAxisField: 'X 轴字段',
1908
- xAxisFieldHelp: '用于分类或时间维度的字段。',
1909
- yAxisField: 'Y 轴字段',
1910
- yAxisFieldHelp: '用于数值聚合的字段。',
1911
- gridOptionsHint: '网格视图使用上方配置的列。',
1912
- groupBy: '分组依据',
1913
- prefixField: '前缀字段',
1914
- fields: '字段',
1915
- fieldsVisible: '{{count}} 个可见',
1916
- sortsCount: '{{count}} 个排序',
1917
- filtersCount: '{{count}} 个筛选',
2231
+ dataset: '数据集',
2232
+ datasetHelp: '图表从该对象的这个数据集读取数值。',
2233
+ chartMeasure: '度量',
2234
+ chartMeasureHelp: '在数值轴上绘制的数据集度量。',
2235
+ chartDimension: '维度',
2236
+ chartDimensionHelp: '用于对数值分组的数据集维度(可选)。',
2237
+ viewTypeUnavailableDataset: '该对象没有可用于图表的数据集。',
2238
+ noDatasetMeasure: '该数据集未声明可绘制的度量。',
1918
2239
  endDateField: '结束日期字段',
1919
- color: '颜色',
1920
- fieldTextColor: '字段文字颜色',
1921
- rowHeight: '行高',
1922
- wrapHeaders: '自动换行标题',
1923
- showFieldDescriptions: '显示字段描述',
1924
- collapseAllByDefault: '默认全部折叠',
1925
- striped: '斑马纹行',
1926
- bordered: '边框单元格',
1927
- inlineEdit: '内联编辑记录',
1928
- addDeleteRecordsInline: '内联添加/删除记录',
1929
- clickIntoRecordDetails: '点击进入记录详情',
1930
- navigationMode: '导航模式',
1931
- navigationWidth: '导航宽度',
1932
- navigationWidthHint: '适用于抽屉、弹窗和分屏导航模式',
1933
- openNewTab: '在新标签页打开',
1934
- openNewTabHint: '适用于页面和新窗口导航模式',
1935
- selectionMode: '选择模式',
1936
- selectionNone: '无',
1937
- selectionSingle: '单选',
1938
- selectionMultiple: '多选',
1939
- pageSize: '每页记录数',
1940
- pageSizeOptions: '每页选项',
1941
- exportFormats: '导出格式',
1942
- exportMaxRecords: '最大记录数',
1943
- exportIncludeHeaders: '包含表头',
1944
- exportFileNamePrefix: '文件名前缀',
1945
- searchableFields: '可搜索字段',
1946
- filterableFields: '可筛选字段',
1947
- resizableColumns: '可调整列宽',
1948
- densityCompact: '紧凑',
1949
- densityComfortable: '舒适',
1950
- densitySpacious: '宽松',
1951
- densityMode: '密度模式',
1952
- hiddenFields: '隐藏字段',
1953
- rowActions: '行操作',
1954
- bulkActions: '批量操作',
1955
- sharing: '共享',
1956
- sharingEnabled: '启用共享',
1957
- sharingVisibility: '可见性',
1958
- addRecordEnabled: '启用添加记录',
1959
- addRecordPosition: '位置',
1960
- addRecordMode: '模式',
1961
- addRecordFormView: '表单视图',
1962
- conditionalFormatting: '条件格式',
1963
- addRule: '添加规则',
1964
- quickFilters: '快速筛选',
1965
- addQuickFilter: '添加快速筛选',
1966
- ufElements: '元素类型',
1967
- ufDropdown: '下拉菜单',
1968
2240
  ufTabs: '标签页',
1969
- ufToggle: '开关',
1970
2241
  ufAddField: '+ 添加筛选字段…',
1971
- ufNoFields: '无可用字段',
1972
- ufAddTab: '+ 添加标签页',
1973
- ufTabLabel: '标签',
1974
2242
  ufShowAllRecords: '显示"全部记录"标签页',
1975
- ufAllowAddTab: '允许添加标签页',
1976
- showRecordCount: '显示记录计数',
1977
- allowPrinting: '允许打印',
1978
- virtualScroll: '虚拟滚动',
1979
- emptyStateTitle: '空状态标题',
1980
- emptyStateMessage: '空状态消息',
1981
- emptyStateIcon: '空状态图标',
1982
- ariaLabel: 'ARIA 标签',
1983
- ariaDescribedBy: 'ARIA 描述',
1984
- ariaLive: 'ARIA 实时区域',
1985
- accessibility: '无障碍',
1986
- viewTabs: '视图标签',
1987
2243
  },
1988
2244
  localeSwitcher: {
1989
2245
  label: '语言',
@@ -2026,6 +2282,8 @@ const zh = {
2026
2282
  resendOtpCountdownText: '{seconds} 秒后可重新发送',
2027
2283
  usePhoneOtpText: '使用验证码登录',
2028
2284
  usePasswordSignInText: '改用密码登录',
2285
+ socialButton: '使用 {provider} 继续',
2286
+ orText: '或使用邮箱继续',
2029
2287
  },
2030
2288
  register: {
2031
2289
  title: '创建账户',
@@ -2044,8 +2302,12 @@ const zh = {
2044
2302
  submittingButton: '创建中…',
2045
2303
  hasAccountText: '已有账户?',
2046
2304
  signInText: '登录',
2305
+ socialButton: '使用 {provider} 注册',
2306
+ orText: '或使用邮箱继续',
2047
2307
  errors: {
2048
2308
  userExists: '该邮箱已被注册,请直接登录或更换邮箱。',
2309
+ selfRegistrationClosed: '本环境未开放自助注册,请联系管理员获取邀请。',
2310
+ emailDomainNotAllowed: '该邮箱的域名不允许在此注册,请使用组织邮箱,或联系管理员获取邀请。',
2049
2311
  },
2050
2312
  verifyInbox: {
2051
2313
  title: '请检查您的邮箱',
@@ -2064,7 +2326,7 @@ const zh = {
2064
2326
  submitButton: '发送重置链接',
2065
2327
  submittingButton: '发送中…',
2066
2328
  successTitle: '请查看您的邮箱',
2067
- successDescription: '我们已将密码重置链接发送至 {{email}},请检查您的收件箱。',
2329
+ successDescription: '我们已将密码重置链接发送至 {email},请检查您的收件箱。',
2068
2330
  backToSignInText: '返回登录',
2069
2331
  rememberPasswordText: '记住密码了?',
2070
2332
  signInText: '登录',
@@ -2258,6 +2520,15 @@ const zh = {
2258
2520
  role: '角色',
2259
2521
  save: '保存更改',
2260
2522
  },
2523
+ language: {
2524
+ title: '语言',
2525
+ description: '发送给您的通知和消息所使用的语言。界面语言另行设置,在地球图标菜单中切换。',
2526
+ label: '首选语言',
2527
+ systemDefault: '使用部署默认值',
2528
+ save: '保存',
2529
+ saved: '语言偏好已更新。',
2530
+ readOnly: '您账户的语言由管理员管理。',
2531
+ },
2261
2532
  password: {
2262
2533
  changeTitle: '修改密码',
2263
2534
  setTitle: '设置本地密码',
@@ -2289,7 +2560,6 @@ const zh = {
2289
2560
  label: '工作区',
2290
2561
  default: '我的工作区',
2291
2562
  switch: '切换工作区',
2292
- create: '创建工作区',
2293
2563
  createTitle: '创建工作区',
2294
2564
  createDescription: '工作区是团队协作的共享空间。',
2295
2565
  createButton: '创建工作区',
@@ -2312,7 +2582,6 @@ const zh = {
2312
2582
  },
2313
2583
  sidebar: {
2314
2584
  settings: '设置',
2315
- help: '帮助',
2316
2585
  helpTooltip: '帮助与文档',
2317
2586
  activityFeed: '活动动态',
2318
2587
  notifications: '通知',
@@ -2352,7 +2621,6 @@ const zh = {
2352
2621
  },
2353
2622
  home: {
2354
2623
  title: '首页',
2355
- subtitle: '您的工作区仪表盘',
2356
2624
  nav: '首页',
2357
2625
  allApps: '全部应用',
2358
2626
  yourApps: '我的应用',
@@ -2371,20 +2639,15 @@ const zh = {
2371
2639
  build: {
2372
2640
  title: '构建应用',
2373
2641
  subtitle: '从零开始 — 设计对象、表单、自动化与界面。',
2642
+ noCapability: '此工作区不提供构建应用功能 — 它需要「管理元数据」权限,而你的账号没有该权限。',
2374
2643
  },
2375
2644
  template: {
2376
2645
  title: '从模板开始',
2377
2646
  subtitle: '从应用市场安装模板应用并按需定制。',
2647
+ marketplaceDisabled: '本运行时未配置应用市场,因此这里没有可安装的模板。',
2378
2648
  },
2379
2649
  open: '打开',
2380
- stats: {
2381
- apps: '应用',
2382
- starred: '收藏',
2383
- recent: '最近访问',
2384
- },
2385
2650
  loading: '正在加载工作区…',
2386
- recent: '最近使用',
2387
- starred: '收藏',
2388
2651
  welcome: '用 AI 搭建你的业务系统',
2389
2652
  welcomeDescription: '用一句话描述你的业务,AI 帮你生成对象、界面、API 和 agent 工具。也可以手动从零开始。',
2390
2653
  welcomeAdminDescription: '用一句话描述你的业务,AI 会为你生成对象、界面、API 和智能体工具;也可以从左侧菜单自行搭建。',
@@ -2401,6 +2664,8 @@ const zh = {
2401
2664
  },
2402
2665
  pendingDrafts: {
2403
2666
  message: '你有 {{count}} 项未发布的更改 —— 点击发布即可生效。',
2667
+ message_one: '你有 {{count}} 项未发布的更改 —— 点击发布即可生效。',
2668
+ message_other: '你有 {{count}} 项未发布的更改 —— 点击发布即可生效。',
2404
2669
  cta: '发布',
2405
2670
  publishing: '发布中…',
2406
2671
  published: '已发布!更改已生效。',
@@ -2418,8 +2683,6 @@ const zh = {
2418
2683
  browseMarketplace: '浏览应用市场',
2419
2684
  quickActions: {
2420
2685
  title: '快捷操作',
2421
- createApp: '创建应用',
2422
- createAppDesc: '从新应用开始',
2423
2686
  manageObjects: '管理对象',
2424
2687
  manageObjectsDesc: '配置数据模型',
2425
2688
  systemSettings: '系统设置',
@@ -2431,7 +2694,9 @@ const zh = {
2431
2694
  object: '对象',
2432
2695
  dashboard: '仪表盘',
2433
2696
  page: '页面',
2697
+ report: '报表',
2434
2698
  record: '记录',
2699
+ metadata: '元数据',
2435
2700
  },
2436
2701
  },
2437
2702
  starredApps: {
@@ -2468,7 +2733,6 @@ const zh = {
2468
2733
  organizations: '组织',
2469
2734
  roles: '角色',
2470
2735
  configuration: '配置',
2471
- createApp: '创建应用',
2472
2736
  administration: '管理',
2473
2737
  datasources: '数据源',
2474
2738
  documentation: '文档',
@@ -2483,6 +2747,7 @@ const zh = {
2483
2747
  typeUpdate: '更新',
2484
2748
  typeDelete: '删除',
2485
2749
  typeComment: '评论',
2750
+ typeSystem: '系统',
2486
2751
  relativeJustNow: '刚刚',
2487
2752
  relativeSecondsAgo: '{{count}} 秒前',
2488
2753
  relativeMinutesAgo: '{{count}} 分钟前',
@@ -2503,8 +2768,11 @@ const zh = {
2503
2768
  placeholder: '搜索对象、仪表板、页面、报表…',
2504
2769
  inputAriaLabel: '搜索对象、仪表板、页面、报表',
2505
2770
  resultsCount: '找到 {{count}} 条与“{{query}}”相关的结果',
2506
- resultsCountPlural: '找到 {{count}} 条与“{{query}}”相关的结果',
2771
+ resultsCount_one: '找到 {{count}} 条与“{{query}}”相关的结果',
2772
+ resultsCount_other: '找到 {{count}} 条与“{{query}}”相关的结果',
2507
2773
  itemsAvailable: '共 {{count}} 项可搜索',
2774
+ itemsAvailable_one: '共 {{count}} 项可搜索',
2775
+ itemsAvailable_other: '共 {{count}} 项可搜索',
2508
2776
  noResults: '未找到结果',
2509
2777
  noResultsHint: '请尝试调整搜索关键字',
2510
2778
  typeObjects: '对象',
@@ -2531,7 +2799,11 @@ const zh = {
2531
2799
  noAppsConfigured: '尚未配置应用',
2532
2800
  noAppsConfiguredDescription: '当前没有任何已注册的应用。请创建您的第一个应用,或前往系统设置进行配置。',
2533
2801
  appNotAvailable: '应用不可用',
2534
- appNotAvailableDescription: '此应用尚不可用 —— 可能仍在发布中。请稍后重试。',
2802
+ appNotAvailableDescription: '此应用不可用 —— 请稍后重试。',
2803
+ appNotFound: '无法打开此应用',
2804
+ appNotFoundDescription: '服务器未返回你的账号可访问的此应用。',
2805
+ appUnreachable: '无法连接到服务器',
2806
+ appUnreachableDescription: '无法检查此应用。请稍后重试。',
2535
2807
  appAccessDenied: '你没有访问此应用的权限',
2536
2808
  appAccessDeniedDescription: '此应用存在,但你的账号未获授权打开它。请联系管理员为你开通访问权限。',
2537
2809
  appAccessDeniedHome: '返回首页',
@@ -2574,7 +2846,16 @@ const zh = {
2574
2846
  detailNone: '未检测到差异 —— 草稿与已发布版本一致。',
2575
2847
  detailChangedKeys: '其他变更:',
2576
2848
  confirmNote: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2849
+ confirmNote_one: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2850
+ confirmNote_other: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2577
2851
  publishConfirm: '全部发布',
2852
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
2853
+ // the confirm button so a refusal the door would issue is read BEFORE
2854
+ // the click rather than as a toast after the batch rolled back.
2855
+ securityBlockTitle: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2856
+ securityBlockTitle_one: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2857
+ securityBlockTitle_other: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2858
+ securityBlockWhere: '请在对象的“设置 → 记录共享模型”中修改后重新发布。',
2578
2859
  },
2579
2860
  // ADR-0045 — the materialized-but-unlisted app banner
2580
2861
  // (UnpublishedAppBar.tsx), sibling of draftBar above.
@@ -2598,28 +2879,13 @@ const zh = {
2598
2879
  revertLabel: '已撤销一处变更',
2599
2880
  applyLabel: '构建变更',
2600
2881
  revert: '撤销',
2601
- items: '项',
2882
+ items: '{{count}} 项',
2602
2883
  revertAction: '撤销',
2603
2884
  reverted: '已撤销 —— 该变更已还原。',
2604
2885
  revertFailed: '撤销失败',
2605
2886
  revertUnavailable: '提交存储暂时不可达 —— 此次撤销可能尚未生效。请重新打开历史记录确认后再重试。',
2606
2887
  },
2607
2888
  },
2608
- renderer: {
2609
- noPageSchema: '未提供页面 schema',
2610
- noFormSchema: '未提供表单 schema',
2611
- noDashboardSchema: '未提供仪表板 schema',
2612
- pageRendering: '页面渲染中:{{name}}',
2613
- dashboardRendering: '仪表板渲染中:{{name}}',
2614
- formRenderingMode: '正在以 {{mode}} 模式渲染表单',
2615
- formRenderingFor: '记录 {{id}}',
2616
- createRecord: '新建记录',
2617
- editRecord: '编辑记录',
2618
- page: '页面',
2619
- dashboard: '仪表板',
2620
- save: '保存',
2621
- cancel: '取消',
2622
- },
2623
2889
  actionDialog: {
2624
2890
  title: '操作参数',
2625
2891
  description: '请填写以下信息以继续操作。',
@@ -2627,22 +2893,17 @@ const zh = {
2627
2893
  requiredError: '{{label}} 为必填项',
2628
2894
  lookupPlaceholder: '{{label}} 的记录 ID',
2629
2895
  lookupHelpText: '该参数未配置引用对象,无法使用记录选择器。请直接填写记录 ID,或联系管理员修正该动作参数。',
2896
+ unresolvedParam: '无法显示该参数:它所依据的字段不在对象元数据中,因此无法构建它所需的控件。请联系管理员修正该动作定义。',
2897
+ carryOverHint: '原样带入(只读)',
2630
2898
  cancel: '取消',
2631
2899
  confirm: '确认',
2632
2900
  uploading: '上传中…',
2633
- defaultActionTitle: '操作',
2634
- ok: '确定',
2635
2901
  },
2636
2902
  actionConfirm: {
2637
2903
  title: '确认操作',
2638
2904
  confirm: '继续',
2639
2905
  cancel: '取消',
2640
2906
  },
2641
- rowAction: {
2642
- openMenu: '更多操作',
2643
- edit: '编辑',
2644
- delete: '删除',
2645
- },
2646
2907
  navigationSync: {
2647
2908
  addedPage: '导航已更新:已添加页面 “{{name}}”',
2648
2909
  addedDashboard: '导航已更新:已添加仪表板 “{{name}}”',
@@ -2663,6 +2924,8 @@ const zh = {
2663
2924
  resetPackageSetConfirm: '该权限集随已安装的软件包发布,无法删除。删除操作将丢弃环境定制并把它重置为发布基线。是否继续?',
2664
2925
  resetPackageSetSuccess: '权限集已重置为发布基线',
2665
2926
  bulkDeleteSuccess: '已删除 {{count}} 条 {{label}} 记录',
2927
+ bulkDeleteSuccess_one: '已删除 {{count}} 条 {{label}} 记录',
2928
+ bulkDeleteSuccess_other: '已删除 {{count}} 条 {{label}} 记录',
2666
2929
  bulkDeletePartial: '成功 {{succeeded}} 条,失败 {{failed}} 条',
2667
2930
  },
2668
2931
  objectViewActions: {
@@ -2674,15 +2937,6 @@ const zh = {
2674
2937
  exportFailed: '导出失败:{{message}}',
2675
2938
  forecastSoon: '预测视图即将上线',
2676
2939
  },
2677
- recordDetail: {
2678
- viewersTooltip: '正在查看此记录的用户',
2679
- },
2680
- cellRender: {
2681
- empty: '空',
2682
- yes: '是',
2683
- no: '否',
2684
- systemFields: '系统字段',
2685
- },
2686
2940
  user: {
2687
2941
  profile: '个人资料',
2688
2942
  settings: '设置',
@@ -2832,6 +3086,9 @@ const zh = {
2832
3086
  declined: '邀请已拒绝',
2833
3087
  declineFailed: '拒绝邀请失败',
2834
3088
  },
3089
+ current: {
3090
+ label: '当前组织',
3091
+ },
2835
3092
  switcher: {
2836
3093
  label: '切换组织',
2837
3094
  groupLabel: '当前工作组织',
@@ -2849,15 +3106,30 @@ const zh = {
2849
3106
  viewAll: '查看全部通知',
2850
3107
  groupCount: '{{count}} 条通知',
2851
3108
  groupUnread: '{{count}} 条未读',
3109
+ groupUnread_one: '{{count}} 条未读',
3110
+ groupUnread_other: '{{count}} 条未读',
2852
3111
  groupMarkRead: '标记已读',
2853
3112
  groupMarkReadTitle: '将此类通知全部标记为已读',
2854
3113
  approvalsPending: '{{count}} 条待审批',
3114
+ approvalsPending_one: '{{count}} 条待审批',
3115
+ approvalsPending_other: '{{count}} 条待审批',
2855
3116
  viewApprovals: '查看审批',
2856
3117
  noPendingApprovals: '暂无待审批事项',
2857
3118
  openApprovalsInbox: '打开审批中心',
2858
3119
  badgeTotal: '共 {{total}} 项',
2859
3120
  badgeNotifications: '{{unread}} 条通知',
2860
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: '当前浏览器不支持桌面通知。',
2861
3133
  },
2862
3134
  publicForm: {
2863
3135
  submit: '提交',
@@ -2865,66 +3137,22 @@ const zh = {
2865
3137
  submitAnother: '再填一份',
2866
3138
  poweredBy: '由 ObjectStack 提供技术支持',
2867
3139
  secureNotice: '您的信息将通过安全通道传输,仅用于回复您本次请求。',
2868
- thankYouTitle: '感谢您的提交!',
3140
+ thankYouTitle: '感谢您的提交!',
2869
3141
  thankYouMessage: '我们已成功收到您的信息。',
2870
3142
  redirecting: '将在 {{seconds}} 秒后跳转…',
3143
+ redirectPending: '正在跳转…',
2871
3144
  unavailableTitle: '表单不可用',
2872
3145
  unavailableDescription: '该链接当前没有可用的公开表单。请确认对应视图已启用匿名分享并匹配此 slug。',
2873
3146
  tryDemo: '试用演示',
2874
3147
  retry: '重试',
2875
3148
  loading: '正在加载表单…',
2876
3149
  requiredHint: '* 为必填项',
3150
+ requiredFields: '必填项:{{fields}}',
2877
3151
  consentLabelDefault: '我已阅读并同意隐私政策,授权对本次请求所提供的信息进行处理。',
2878
3152
  consentLink: '隐私政策',
2879
3153
  consentRequired: '请先勾选同意隐私政策。',
2880
3154
  rateLimited: '请再花点时间核对一下您的填写内容,再点击提交。',
2881
3155
  redirectBlocked: '提交成功,但出于安全考虑,跳转链接已被阻止。',
2882
- demo: {
2883
- contactTitle: '联系我们',
2884
- contactDescription: '告诉我们您的项目需求,销售代表将在一个工作日内与您联系。',
2885
- supportTitle: '提交支持请求',
2886
- supportDescription: '描述您遇到的问题,我们的团队会在一个工作日内回复。',
2887
- thankYouSalesTitle: '已收到您的信息,感谢联系!',
2888
- thankYouSalesMessage: '我们的销售代表将在一个工作日内与您取得联系。',
2889
- thankYouSupportTitle: '您的请求已进入处理队列。',
2890
- thankYouSupportMessage: '支持工程师将尽快跟进。如需补充截图,请保留此页面。',
2891
- field: {
2892
- firstName: '名字',
2893
- lastName: '姓氏',
2894
- email: '工作邮箱',
2895
- phone: '电话',
2896
- jobTitle: '职位',
2897
- company: '公司',
2898
- website: '官网',
2899
- industry: '行业',
2900
- companySize: '公司规模',
2901
- howCanWeHelp: '我们可以为您做些什么?',
2902
- subject: '主题',
2903
- description: '问题描述',
2904
- issueType: '问题类型',
2905
- priority: '优先级',
2906
- },
2907
- industry: {
2908
- technology: '科技',
2909
- software: '软件 / SaaS',
2910
- finance: '金融',
2911
- healthcare: '医疗健康',
2912
- retail: '零售',
2913
- other: '其他',
2914
- },
2915
- issueType: {
2916
- question: '咨询',
2917
- problem: '问题',
2918
- bug: '缺陷',
2919
- feature_request: '功能建议',
2920
- },
2921
- priority: {
2922
- low: '低',
2923
- medium: '中',
2924
- high: '高',
2925
- critical: '紧急',
2926
- },
2927
- },
2928
3156
  },
2929
3157
  connectAgent: {
2930
3158
  disabled: {
@@ -2970,6 +3198,8 @@ const zh = {
2970
3198
  noImportableFields: '该对象没有可导入的字段。',
2971
3199
  schemaReadFailed: '无法读取对象结构。',
2972
3200
  imported: '已把 {{count}} 行真实数据导入「{{object}}」。',
3201
+ imported_one: '已把 {{count}} 行真实数据导入「{{object}}」。',
3202
+ imported_other: '已把 {{count}} 行真实数据导入「{{object}}」。',
2973
3203
  importFrom: '把真实数据导入自',
2974
3204
  into: '到',
2975
3205
  opening: '打开中…',
@@ -2983,6 +3213,76 @@ const zh = {
2983
3213
  openProduction: '打开生产环境',
2984
3214
  manageEnvironments: '管理环境',
2985
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
+ },
2986
3286
  aiModelStatus: {
2987
3287
  summary: '构建 / 提问使用 {{conversational}}({{conversationalSource}});结构化使用 {{structured}}({{structuredSource}})。',
2988
3288
  summaryRouting: '路由策略:免费方案 → {{free}},付费方案 → {{paid}}。',
@@ -3000,6 +3300,111 @@ const zh = {
3000
3300
  sourceInherits: '与 build/ask 相同',
3001
3301
  sourcePinned: '被 {{source}} 钉住',
3002
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
+ },
3003
3408
  chatbotError: {
3004
3409
  title: '响应失败',
3005
3410
  fallbackDetail: '出了点问题,请重试。',
@@ -3036,6 +3441,7 @@ const zh = {
3036
3441
  retry: '重试',
3037
3442
  errors: {
3038
3443
  expired: '请求在获批前已过期,请重新开始。',
3444
+ accessDenied: '连接请求已被拒绝,请重新开始。',
3039
3445
  bindFailed: '绑定失败。',
3040
3446
  deviceCodeFailed: '设备码请求失败。',
3041
3447
  },
@@ -3069,7 +3475,7 @@ const zh = {
3069
3475
  marketplace: {
3070
3476
  title: '应用市场',
3071
3477
  subtitle: '浏览已通过审核、发布到 ObjectStack 目录中的应用。点击应用查看详情并安装到你的某个环境中。',
3072
- searchPlaceholder: '按名称或 manifest ID 搜索应用…',
3478
+ searchPlaceholder: '按名称或标识搜索应用…',
3073
3479
  searchAria: '搜索市场应用',
3074
3480
  installed: '已安装',
3075
3481
  installedCount: '已安装({{count}})',
@@ -3092,10 +3498,16 @@ const zh = {
3092
3498
  installedBadge: '已安装 v{{version}}',
3093
3499
  load: {
3094
3500
  failed: '应用市场加载失败',
3095
- failedHint: '本运行时默认指向公共 ObjectStack 云端。请检查运行时是否在线,或通过 <code>OS_CLOUD_URL</code> 指向自托管控制面。',
3501
+ failedHintConfigured: '本运行时通过 {{url}} 上的控制面访问应用市场。请检查该地址是否在线、能否从本运行时访问。',
3502
+ failedHintSameOrigin: '本运行时自己提供应用市场目录。请检查运行时是否在线。',
3096
3503
  packageFailed: '应用加载失败',
3097
3504
  notFound: '未找到。',
3098
3505
  },
3506
+ disabled: {
3507
+ title: '应用市场已关闭',
3508
+ description: '本运行时未配置应用市场,因此这里没有可浏览或安装的内容。',
3509
+ hint: '当运行时以 <code>OS_CLOUD_URL=off</code>(或 <code>none</code>、<code>local</code>、<code>disabled</code>)启动时,这就是预期状态。如需开启应用市场,请把 <code>OS_CLOUD_URL</code> 指向一个控制面并重启运行时。',
3510
+ },
3099
3511
  detail: {
3100
3512
  homepage: '主页',
3101
3513
  installedV: '已安装 · v{{version}}',
@@ -3111,10 +3523,15 @@ const zh = {
3111
3523
  purgeSampleData: '清除示例数据',
3112
3524
  purgeConfirm: '删除此应用预置的所有示例记录?用户自行添加的记录不会被删除。',
3113
3525
  purgeSuccess: '已删除 {{count}} 条示例记录。',
3526
+ purgeSuccess_one: '已删除 {{count}} 条示例记录。',
3527
+ purgeSuccess_other: '已删除 {{count}} 条示例记录。',
3114
3528
  purgeNoData: '没有可清除的示例记录。',
3115
3529
  reseedQueued: '示例数据将在下次访问该环境时重新加载。',
3116
3530
  reseedLocalSuccess: '已重新加载示例数据:新增 {{inserted}} 条,更新 {{updated}} 条。',
3117
3531
  reseedPartialErrors: '(有 {{count}} 条记录写入失败)',
3532
+ reseedPartialErrors_one: '(有 {{count}} 条记录写入失败)',
3533
+ reseedPartialErrors_other: '(有 {{count}} 条记录写入失败)',
3534
+ sampleDataKernelUnavailable: '此控制面没有环境内核,因此无法在这里重新加载或清除示例数据。请在该环境自己的运行时中操作。',
3118
3535
  updateAvailable: '有可用更新',
3119
3536
  },
3120
3537
  action: {
@@ -3167,7 +3584,8 @@ const zh = {
3167
3584
  reviewed: '已审核并批准',
3168
3585
  unreviewed: '尚未审核',
3169
3586
  signed: '已签名',
3170
- grantsIntro: '安装后,此软件包将获得以下权限:',
3587
+ grantsIntro: '此软件包请求以下权限:',
3588
+ notEnforced: '安装时会记录这份清单,后续版本要求更多权限时会再次征求同意;但运行时目前还不会把该软件包限制在此清单内。',
3171
3589
  services: '平台服务',
3172
3590
  hooks: '生命周期钩子',
3173
3591
  network: '网络访问',
@@ -3217,30 +3635,19 @@ const zh = {
3217
3635
  storage: '存储',
3218
3636
  other: '其他',
3219
3637
  },
3220
- pricing: {
3221
- free: '免费',
3222
- freemium: '免费增值',
3223
- paid: '付费',
3224
- subscription: '订阅',
3225
- 'usage-based': '按用量计费',
3226
- 'contact-sales': '联系销售',
3227
- },
3228
3638
  relativeTime: {
3229
3639
  today: '今天',
3230
3640
  daysAgo: '{{count}} 天前',
3231
3641
  monthsAgo: '{{count}} 个月前',
3642
+ monthsAgo_one: '{{count}} 个月前',
3643
+ monthsAgo_other: '{{count}} 个月前',
3232
3644
  yearsAgo: '{{count}} 年前',
3645
+ yearsAgo_one: '{{count}} 年前',
3646
+ yearsAgo_other: '{{count}} 年前',
3233
3647
  },
3234
3648
  },
3235
- approvals: {
3236
- approve: '批准',
3237
- reject: '驳回',
3238
- comment: '审批意见(可选)',
3239
- approveSuccess: '已批准',
3240
- rejectSuccess: '已驳回',
3241
- rejectConfirm: '确定驳回该审批请求吗?',
3242
- },
3243
3649
  approvalsInbox: {
3650
+ recordUnresolvable: '无法打开此记录',
3244
3651
  loadMore: '加载更多',
3245
3652
  loadingMore: '加载中…',
3246
3653
  loadedOf: '已加载 {{loaded}} / 共 {{total}} 条',
@@ -3259,6 +3666,8 @@ const zh = {
3259
3666
  requestInfoSent: '已退回给申请人补充材料',
3260
3667
  remindBtn: '催办',
3261
3668
  remindSuccess: '已提醒 {{count}} 位审批人',
3669
+ remindSuccess_one: '已提醒 {{count}} 位审批人',
3670
+ remindSuccess_other: '已提醒 {{count}} 位审批人',
3262
3671
  remindThrottled: '刚刚已发送过催办,请稍后再试。',
3263
3672
  replyPlaceholder: '在此回复…',
3264
3673
  slaRemaining: 'SLA 剩余 {{dur}}',
@@ -3275,6 +3684,8 @@ const zh = {
3275
3684
  progressApprovals: '审批进度 — {{got}} / {{need}}',
3276
3685
  progressGroups: '会签进度 — {{got}} / {{need}} 组',
3277
3686
  progressEligible: '{{count}} 位可审批人',
3687
+ progressEligible_one: '{{count}} 位可审批人',
3688
+ progressEligible_other: '{{count}} 位可审批人',
3278
3689
  progressBar: '决策进度',
3279
3690
  declaredActions: '操作',
3280
3691
  attachmentChip: '附件',
@@ -3306,6 +3717,8 @@ const zh = {
3306
3717
  filterCount: '{{shown}} / {{total}} 条',
3307
3718
  selected: '已选择',
3308
3719
  actionableCount: '({{count}} 条可操作)',
3720
+ actionableCount_one: '({{count}} 条可操作)',
3721
+ actionableCount_other: '({{count}} 条可操作)',
3309
3722
  selectAll: '全选',
3310
3723
  selectRow: '选择该请求',
3311
3724
  colRequest: '审批事项',
@@ -3346,12 +3759,19 @@ const zh = {
3346
3759
  submittedAgo: '提交于{{when}}',
3347
3760
  completedAt: '完成于{{when}}',
3348
3761
  waitingOn: '等待以下审批人',
3762
+ approverNameSeparator: '、',
3763
+ approverUnstaffed: '{{seat}}(暂无在岗人员)',
3349
3764
  history: '审批动态',
3350
3765
  noActions: '暂无操作记录。',
3351
3766
  actSubmit: '提交',
3352
3767
  actApprove: '通过',
3353
3768
  actReject: '拒绝',
3354
3769
  actRecall: '撤回',
3770
+ overrideActionLabel: '越权{{action}}',
3771
+ overrideNotice: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,尚未表态的审批人都会被跳过。此决定将记录为管理员越权。',
3772
+ overrideNoticeWho: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,并跳过尚未表态的审批人 —— {{who}}。此决定将记录为管理员越权。',
3773
+ viaOverrideChip: '管理员越权',
3774
+ viaOverrideHint: '操作者在该步骤没有审批人席位 —— 经管理员越权通道进入。',
3355
3775
  rawData: '原始数据(JSON)',
3356
3776
  copy: '复制',
3357
3777
  copied: '已复制',
@@ -3372,11 +3792,19 @@ const zh = {
3372
3792
  approveN: '通过 {{count}} 条',
3373
3793
  rejectN: '拒绝 {{count}} 条',
3374
3794
  bulkApproveTitle: '通过这 {{count}} 条请求?',
3795
+ bulkApproveTitle_one: '通过这 {{count}} 条请求?',
3796
+ bulkApproveTitle_other: '通过这 {{count}} 条请求?',
3375
3797
  bulkApproveBody: '每条请求都将以你的身份通过,对应流程沿“通过”分支继续。',
3376
3798
  bulkRejectTitle: '拒绝这 {{count}} 条请求?',
3799
+ bulkRejectTitle_one: '拒绝这 {{count}} 条请求?',
3800
+ bulkRejectTitle_other: '拒绝这 {{count}} 条请求?',
3377
3801
  bulkRejectBody: '将拒绝所选请求并通知各申请人。',
3378
3802
  bulkApproved: '已通过 {{count}} 条请求',
3803
+ bulkApproved_one: '已通过 {{count}} 条请求',
3804
+ bulkApproved_other: '已通过 {{count}} 条请求',
3379
3805
  bulkRejected: '已拒绝 {{count}} 条请求',
3806
+ bulkRejected_one: '已拒绝 {{count}} 条请求',
3807
+ bulkRejected_other: '已拒绝 {{count}} 条请求',
3380
3808
  bulkPartial: '{{ok}} 条成功,{{fail}} 条失败:{{which}}',
3381
3809
  rejectOneTitle: '拒绝“{{title}}”?',
3382
3810
  rejectOneBody: '将拒绝该请求并通知申请人。',
@@ -3401,8 +3829,14 @@ const zh = {
3401
3829
  alreadyDecided: '该请求已被处理,请刷新列表。',
3402
3830
  justNow: '刚刚',
3403
3831
  minutesAgo: '{{count}} 分钟前',
3832
+ minutesAgo_one: '{{count}} 分钟前',
3833
+ minutesAgo_other: '{{count}} 分钟前',
3404
3834
  hoursAgo: '{{count}} 小时前',
3835
+ hoursAgo_one: '{{count}} 小时前',
3836
+ hoursAgo_other: '{{count}} 小时前',
3405
3837
  daysAgo: '{{count}} 天前',
3838
+ daysAgo_one: '{{count}} 天前',
3839
+ daysAgo_other: '{{count}} 天前',
3406
3840
  },
3407
3841
  filterBuilder: {
3408
3842
  where: '其中',
@@ -3420,22 +3854,33 @@ const zh = {
3420
3854
  noResults: '无结果',
3421
3855
  searchField: '搜索 {{label}}…',
3422
3856
  enterId: '输入 {{label}} ID',
3857
+ addValue: '输入值后按回车',
3858
+ removeValue: '移除 {{value}}',
3859
+ rangeStart: '起始值',
3860
+ rangeEnd: '结束值',
3423
3861
  operators: {
3424
3862
  equals: '等于',
3425
- notEquals: '不等于',
3863
+ not_equals: '不等于',
3426
3864
  contains: '包含',
3427
- notContains: '不包含',
3428
- isEmpty: '为空',
3429
- isNotEmpty: '不为空',
3430
- greaterThan: '大于',
3431
- lessThan: '小于',
3432
- greaterOrEqual: '大于或等于',
3433
- 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: '小于或等于',
3434
3873
  before: '早于',
3435
3874
  after: '晚于',
3436
3875
  between: '介于',
3437
3876
  in: '属于',
3438
- notIn: '不属于',
3877
+ not_in: '不属于',
3878
+ starts_with: '以…开头',
3879
+ ends_with: '以…结尾',
3880
+ is_null: '为 null',
3881
+ is_not_null: '不为 null',
3882
+ exists: '已设置',
3883
+ notExists: '未设置',
3439
3884
  },
3440
3885
  },
3441
3886
  sortBuilder: {
@@ -3449,7 +3894,8 @@ const zh = {
3449
3894
  },
3450
3895
  collaboration: {
3451
3896
  commentCount: '{{count}} 条评论',
3452
- commentCountOne: '{{count}} 条评论',
3897
+ commentCount_one: '{{count}} 条评论',
3898
+ commentCount_other: '{{count}} 条评论',
3453
3899
  resolvedSuffix: ' · 已解决',
3454
3900
  sortComments: '评论排序',
3455
3901
  sortOldest: '最早优先',
@@ -3458,11 +3904,18 @@ const zh = {
3458
3904
  reopen: '重新打开',
3459
3905
  justNow: '刚刚',
3460
3906
  minutesAgo: '{{count}} 分钟前',
3907
+ minutesAgo_one: '{{count}} 分钟前',
3908
+ minutesAgo_other: '{{count}} 分钟前',
3461
3909
  hoursAgo: '{{count}} 小时前',
3910
+ hoursAgo_one: '{{count}} 小时前',
3911
+ hoursAgo_other: '{{count}} 小时前',
3462
3912
  daysAgo: '{{count}} 天前',
3913
+ daysAgo_one: '{{count}} 天前',
3914
+ daysAgo_other: '{{count}} 天前',
3463
3915
  edited: '(已编辑)',
3464
3916
  reactionCount: '{{count}} 个回应',
3465
- reactionCountOne: '{{count}} 个回应',
3917
+ reactionCount_one: '{{count}} 个回应',
3918
+ reactionCount_other: '{{count}} 个回应',
3466
3919
  addThumbsUp: '点赞',
3467
3920
  reply: '回复',
3468
3921
  reactThumbsUp: '以点赞回应',
@@ -3473,9 +3926,11 @@ const zh = {
3473
3926
  commentPlaceholder: '添加评论…(输入 @ 提及他人)',
3474
3927
  send: '发送',
3475
3928
  presentUserCount: '{{count}} 人在线',
3476
- presentUserCountOne: '{{count}} 人在线',
3929
+ presentUserCount_one: '{{count}} 人在线',
3930
+ presentUserCount_other: '{{count}} 人在线',
3477
3931
  moreUserCount: '另有 {{count}} 人',
3478
- moreUserCountOne: '另有 {{count}} 人',
3932
+ moreUserCount_one: '另有 {{count}} 人',
3933
+ moreUserCount_other: '另有 {{count}} 人',
3479
3934
  userStatusTitle: '{{name}}({{status}})',
3480
3935
  statusActive: '活跃',
3481
3936
  statusIdle: '空闲',
@@ -3483,6 +3938,18 @@ const zh = {
3483
3938
  },
3484
3939
  wizard: {
3485
3940
  missingRequired: '请填写以下必填字段:{{fields}}',
3941
+ back: '上一步',
3942
+ submitting: '提交中…',
3943
+ stepFallback: '第 {{n}} 步',
3944
+ progressLabel: '进度',
3945
+ emptyStep: '此步骤未配置字段',
3946
+ },
3947
+ flowRunner: {
3948
+ title: '输入',
3949
+ submitting: '提交中…',
3950
+ saveAndContinue: '保存并继续',
3951
+ nextStep: '已保存 — 下一步',
3952
+ completed: '流程「{{flow}}」已完成',
3486
3953
  },
3487
3954
  appManagement: {
3488
3955
  title: '应用',
@@ -3533,5 +4000,49 @@ const zh = {
3533
4000
  bulkOperationFailed: '批量操作失败:{{reason}}',
3534
4001
  },
3535
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
+ },
3536
4047
  };
3537
4048
  export default zh;