@object-ui/i18n 17.3.0 → 17.6.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 (44) hide show
  1. package/CHANGELOG.md +1929 -1
  2. package/README.md +41 -12
  3. package/dist/i18n.d.ts +1 -1
  4. package/dist/i18n.js +1 -2
  5. package/dist/index.d.ts +23 -21
  6. package/dist/index.js +31 -21
  7. package/dist/locales/ar.d.ts +638 -369
  8. package/dist/locales/ar.js +744 -424
  9. package/dist/locales/de.d.ts +638 -369
  10. package/dist/locales/de.js +759 -446
  11. package/dist/locales/en.d.ts +673 -404
  12. package/dist/locales/en.js +899 -406
  13. package/dist/locales/es.d.ts +638 -369
  14. package/dist/locales/es.js +739 -427
  15. package/dist/locales/fr.d.ts +638 -369
  16. package/dist/locales/fr.js +738 -423
  17. package/dist/locales/index.d.ts +6476 -3786
  18. package/dist/locales/index.js +20 -20
  19. package/dist/locales/ja.d.ts +638 -369
  20. package/dist/locales/ja.js +732 -417
  21. package/dist/locales/ko.d.ts +638 -369
  22. package/dist/locales/ko.js +736 -424
  23. package/dist/locales/pt.d.ts +638 -369
  24. package/dist/locales/pt.js +737 -425
  25. package/dist/locales/ru.d.ts +638 -369
  26. package/dist/locales/ru.js +750 -424
  27. package/dist/locales/zh.d.ts +672 -403
  28. package/dist/locales/zh.js +720 -403
  29. package/dist/pickLocalized.d.ts +58 -0
  30. package/dist/pickLocalized.js +115 -7
  31. package/dist/provider.d.ts +84 -2
  32. package/dist/provider.js +305 -31
  33. package/dist/useDisplayLocale.d.ts +49 -0
  34. package/dist/useDisplayLocale.js +55 -0
  35. package/dist/useObjectLabel.d.ts +94 -14
  36. package/dist/useObjectLabel.js +134 -21
  37. package/dist/useSafeTranslation.js +51 -3
  38. package/dist/utils/index.d.ts +4 -3
  39. package/dist/utils/index.js +4 -3
  40. package/dist/utils/number-display.d.ts +32 -0
  41. package/dist/utils/number-display.js +32 -0
  42. package/dist/utils/spec-formatters.d.ts +39 -13
  43. package/dist/utils/spec-formatters.js +3 -3
  44. package/package.json +4 -3
@@ -2,6 +2,20 @@
2
2
  * 中文 (zh) - Chinese language pack for Object UI
3
3
  */
4
4
  const zh = {
5
+ // objectui#4467 — the impersonation banner (app-shell ImpersonationBanner).
6
+ // Raised by `session.impersonatedBy`, so it survives SPA reboots; it names
7
+ // BOTH parties because the audit trail attributes the work to the impersonated
8
+ // user, and the exit states its own failure rather than appearing to succeed.
9
+ impersonation: {
10
+ banner: {
11
+ message: '您正在以 {{user}} 的身份操作 —— 所有操作都会记录为该用户。',
12
+ startedBy: '由管理员 {{admin}} 发起。',
13
+ stop: '结束模拟登录',
14
+ stopping: '正在结束…',
15
+ stopFailed: '无法结束模拟登录:{{reason}}',
16
+ notRestored: '服务器接受了请求,但没有恢复您的管理员会话 —— 您仍在以 {{user}} 的身份操作。请退出登录后重新登录以结束。',
17
+ },
18
+ },
5
19
  // objectui#2600 B5 — 能力选择器的作用域分组标题(能力标签本身来自
6
20
  // sys_capability 注册表,这里只本地化分组标题这类 UI 字符串)。
7
21
  capability: {
@@ -21,6 +35,28 @@ const zh = {
21
35
  studio_access: '访问 Studio',
22
36
  },
23
37
  },
38
+ // objectui#3546 切片六 —— 权限集记录上六个授权面的只读摘要与 Studio 深链
39
+ // (ADR-0056 P1,plugin-detail 的 PermissionFacetLink)。
40
+ // 用词取自本仓权限集设计器(metadata-admin i18n 表):个对象 / 行级策略 /
41
+ // 标签页 / 委派管理范围 —— 与点进去的那个界面一致。
42
+ // 中文无单复数,四个计数 key 的 `_one` 与基础 key 同值(设计如此,不是漏改)。
43
+ perm: {
44
+ facet: {
45
+ none: '无',
46
+ more: '+{{count}} 更多',
47
+ objects: '{{count}} 个对象',
48
+ objects_one: '{{count}} 个对象',
49
+ fields: '{{count}} 条字段规则',
50
+ fields_one: '{{count}} 条字段规则',
51
+ rls: '{{count}} 条 RLS 策略',
52
+ rls_one: '{{count}} 条 RLS 策略',
53
+ tabs: '{{count}} 条标签页规则',
54
+ tabs_one: '{{count}} 条标签页规则',
55
+ adminScope: '已配置委派管理范围',
56
+ designInStudio: '在 Studio 中设计 →',
57
+ designInStudioHint: '在 Studio 中设计',
58
+ },
59
+ },
24
60
  lookup: {
25
61
  recentlyUsed: '最近使用',
26
62
  allResults: '全部结果',
@@ -49,13 +85,13 @@ const zh = {
49
85
  retry: '重试',
50
86
  },
51
87
  common: {
52
- loading: '加载中...',
88
+ loading: '加载中…',
53
89
  save: '保存',
90
+ discard: '放弃',
54
91
  cancel: '取消',
55
92
  delete: '删除',
56
93
  edit: '编辑',
57
94
  create: '新建',
58
- search: '搜索',
59
95
  filter: '筛选',
60
96
  reset: '重置',
61
97
  confirm: '确认',
@@ -81,7 +117,7 @@ const zh = {
81
117
  required: '必填',
82
118
  optional: '选填',
83
119
  selectOption: '请选择',
84
- select: '选择...',
120
+ select: '选择…',
85
121
  openChat: '打开聊天',
86
122
  closeChat: '关闭聊天',
87
123
  closePanel: '关闭面板',
@@ -90,6 +126,11 @@ const zh = {
90
126
  itemCountOne: '{{count}} 项',
91
127
  toggleSidebar: '切换侧边栏',
92
128
  package: '软件包',
129
+ done: '完成',
130
+ editInStudio: '在 Studio 中编辑',
131
+ record: '记录',
132
+ retry: '重试',
133
+ printDialogHint: '打开浏览器打印对话框(不是导出 PDF)',
93
134
  },
94
135
  actions: {
95
136
  decisionOutput: {
@@ -128,6 +169,9 @@ const zh = {
128
169
  unsavedChanges: '您有未保存的更改,确定要离开吗?',
129
170
  discardTitle: '放弃更改?',
130
171
  discardMessage: '您有未保存的更改。如果现在关闭此表单,您的编辑将会丢失。',
172
+ // objectui#4024 — the create/edit dialog's `sr-only` accessible
173
+ // description, used when the form declares no `description` of its own.
174
+ dialogDescriptionFallback: '填写表单字段,然后提交或取消。',
131
175
  keepEditing: '继续编辑',
132
176
  discard: '放弃',
133
177
  conflictTitle: '保存冲突',
@@ -189,7 +233,7 @@ const zh = {
189
233
  richText: {
190
234
  format: '格式: {{format}}',
191
235
  basicEditorHint: '富文本编辑器(基础)',
192
- placeholder: '请输入文字...',
236
+ placeholder: '请输入文字…',
193
237
  },
194
238
  options: {
195
239
  empty: '暂无可选项',
@@ -225,6 +269,17 @@ const zh = {
225
269
  tags: {
226
270
  placeholder: '输入后回车添加…',
227
271
  },
272
+ // objectui#4028 — `AddressField`'s five sub-labels. These were English
273
+ // string literals with no key, and this pack is the one the issue was
274
+ // reported against: a zh-CN console showed five English words in the
275
+ // middle of an otherwise fully translated address form.
276
+ address: {
277
+ street: '街道地址',
278
+ city: '城市',
279
+ state: '省 / 州',
280
+ postalCode: '邮政编码',
281
+ country: '国家 / 地区',
282
+ },
228
283
  textarea: {
229
284
  characterCount: '已输入 {{count}} 个字符,最多 {{max}} 个',
230
285
  charactersRemaining: '还可输入 {{count}} 个字符',
@@ -255,7 +310,7 @@ const zh = {
255
310
  saveAll: '全部保存 ({{count}})',
256
311
  addRecord: '添加记录',
257
312
  open: '打开',
258
- search: '搜索...',
313
+ search: '搜索…',
259
314
  modified: '{{count}} 行已修改',
260
315
  saveFailed: '保存失败',
261
316
  selected: '已选择 {{count}} 项',
@@ -268,7 +323,7 @@ const zh = {
268
323
  delete: '删除',
269
324
  export: '导出',
270
325
  exportAs: '导出为 {{format}}',
271
- loading: '加载数据中...',
326
+ loading: '加载数据中…',
272
327
  errorLoading: '数据加载失败',
273
328
  pullToRefresh: '下拉刷新',
274
329
  refreshing: '刷新中…',
@@ -285,6 +340,22 @@ const zh = {
285
340
  yes: '是',
286
341
  no: '否',
287
342
  systemFields: '系统字段',
343
+ // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
344
+ // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
345
+ // pack controls its own separator and word order.
346
+ summary: {
347
+ pattern: '{{label}}:{{value}}',
348
+ count: '计数',
349
+ countEmpty: '空值',
350
+ countFilled: '非空',
351
+ countUnique: '去重',
352
+ percentEmpty: '空值',
353
+ percentFilled: '非空',
354
+ sum: '合计',
355
+ avg: '平均值',
356
+ min: '最小值',
357
+ max: '最大值',
358
+ },
288
359
  toolbar: {
289
360
  densityMode: '密度',
290
361
  densityCompact: '紧凑',
@@ -485,7 +556,7 @@ const zh = {
485
556
  moreEvents: '+{{count}} 更多',
486
557
  },
487
558
  list: {
488
- loading: '正在加载记录...',
559
+ loading: '正在加载记录…',
489
560
  recordCount: '{{count}} 条记录',
490
561
  recordCountOne: '{{count}} 条记录',
491
562
  addRecord: '添加记录',
@@ -497,7 +568,8 @@ const zh = {
497
568
  sort: '排序',
498
569
  sortRecords: '排序记录',
499
570
  sortByIdSuffix: '(按 ID)',
500
- sortRelationalHint: '指向其他记录的列未列出:它们只能按存储的 ID 排序,而不是单元格中显示的名称。若要按该名称排序,请添加一个存放该名称的公式字段。',
571
+ sortRelationalHint: '指向其他记录的列未列出:它们只能按存储的 ID 排序,而不是单元格中显示的名称。若要按该名称排序,请把该名称反规范化到本对象上,做成一个在来源变更时写入的存储字段,再按它排序。不要用公式字段:公式字段是虚拟的,不会为它存储任何列,服务端会拒绝按它排序。',
572
+ resetSortToDefault: '恢复视图默认排序',
501
573
  group: '分组',
502
574
  groupBy: '分组依据',
503
575
  export: '导出',
@@ -522,6 +594,8 @@ const zh = {
522
594
  loadErrorUnauthorizedMessage: '登录状态已过期或已退出。请重新登录后查看这些记录。',
523
595
  loadErrorRejectedTitle: '该视图的查询被拒绝',
524
596
  loadErrorRejectedMessage: '服务器无法处理该视图的筛选条件或查询参数。清除筛选条件通常即可恢复;如果视图本身就是这样保存的,需要管理员修正。',
597
+ loadErrorApiDisabledTitle: '该对象未开放 API 访问',
598
+ loadErrorApiDisabledMessage: '此页面无法加载记录,因为该对象未通过 API 开放。这是对象自身的设置,而不是权限问题 —— 需要管理员为其启用 API 访问,此页面才能正常工作。',
525
599
  retry: '重试',
526
600
  managedBy: {
527
601
  system: {
@@ -596,8 +670,11 @@ const zh = {
596
670
  deleteCard: '删除卡片',
597
671
  deleteColumn: '删除列',
598
672
  noCards: '暂无卡片',
599
- cardTitlePlaceholder: '输入卡片标题...',
673
+ cardTitlePlaceholder: '输入卡片标题…',
600
674
  uncategorized: '未分类',
675
+ columns: '列',
676
+ requiredFieldsTitle: '填写必填字段',
677
+ requiredFieldsDescription: '此次移动会使以下字段成为必填项。填写后即可继续。',
601
678
  },
602
679
  timeline: {
603
680
  bucket: {
@@ -610,6 +687,13 @@ const zh = {
610
687
  noDate: '无日期',
611
688
  unassigned: '未分配',
612
689
  },
690
+ scale: {
691
+ week: '第 {{n}} 周',
692
+ quarter: '{{year}}年第{{quarter}}季度',
693
+ },
694
+ gantt: {
695
+ rowLabel: '条目',
696
+ },
613
697
  },
614
698
  gantt: {
615
699
  column: {
@@ -636,6 +720,7 @@ const zh = {
636
720
  exportPng: '导出 PNG',
637
721
  exportPdf: '导出 PDF',
638
722
  saveLayout: '保存布局',
723
+ refresh: '刷新',
639
724
  undo: '撤销',
640
725
  redo: '重做',
641
726
  },
@@ -683,6 +768,18 @@ const zh = {
683
768
  ff: '完成 → 完成',
684
769
  sf: '开始 → 完成',
685
770
  },
771
+ linkEnd: {
772
+ start: '开始',
773
+ end: '结束',
774
+ },
775
+ link: {
776
+ rejected: {
777
+ self: "任务不能依赖自身。",
778
+ locked: "该行已锁定,无法新增依赖。",
779
+ group: "汇总行不能作为依赖目标,请改为连接其下的具体任务。",
780
+ cycle: "该连接会形成循环依赖。",
781
+ },
782
+ },
686
783
  conflict: {
687
784
  title: '排程冲突',
688
785
  body: '此次移动与依赖约束冲突。是否自动重新排程 {{count}} 个受影响的任务?',
@@ -691,8 +788,8 @@ const zh = {
691
788
  },
692
789
  autoScheduleDlg: {
693
790
  title: '自动排程',
694
- body: '将顺延 {count} 个任务以满足依赖约束,是否执行?',
695
- skipped: '另有 {count} 项因锁定/无权限跳过。',
791
+ body: '将顺延 {{count}} 个任务以满足依赖约束,是否执行?',
792
+ skipped: '另有 {{count}} 项因锁定/无权限跳过。',
696
793
  confirm: '执行',
697
794
  cancel: '取消',
698
795
  none: '依赖均满足,无需排程',
@@ -745,8 +842,8 @@ const zh = {
745
842
  readonlyTooltip: '系统视图 — 由代码定义,只读。',
746
843
  },
747
844
  designer: {
748
- undo: 'Undo',
749
- redo: 'Redo',
845
+ undo: '撤销',
846
+ redo: '重做',
750
847
  },
751
848
  detail: {
752
849
  back: '返回',
@@ -762,6 +859,8 @@ const zh = {
762
859
  writeStrippedTitle: '已保存,但部分字段未生效',
763
860
  writeStrippedReadonly: '以下字段为只读,未生效:{{fields}}',
764
861
  writeStrippedByState: '以下字段在记录当前状态下不可编辑,未生效:{{fields}}',
862
+ writeStrippedPrimaryKey: '以下字段是记录的标识符,保存时无法修改,未生效:{{fields}}',
863
+ writeStrippedUnknownReason: '以下字段未被服务端写入:{{fields}}',
765
864
  approvalPendingEditable: '审批中 · 可编辑',
766
865
  approvalPendingTooltip: '该记录有待审批的请求,但当前审批节点仍允许编辑',
767
866
  approvalProgress: '审批 — 已通过 {{got}} / 共需 {{need}}',
@@ -774,6 +873,13 @@ const zh = {
774
873
  cancelApprovalTooltipUnlocked: '撤回当前的待审批请求',
775
874
  cancelApprovalFailed: '撤回审批失败',
776
875
  cancelApprovalUnavailable: '当前数据源不支持撤回审批',
876
+ pathLabel: '记录路径',
877
+ pathStageCompleted: '{{stage}},已完成',
878
+ pathStageCurrent: '{{stage}},当前阶段',
879
+ pathStageUpcoming: '{{stage}},未开始',
880
+ pathStageLostCurrent: '{{stage}},已失败,当前阶段',
881
+ pathStageLostUpcoming: '{{stage}},已失败,未到达',
882
+ pathStageWonUpcoming: '{{stage}},目标阶段,未到达',
777
883
  linkCopied: '链接已复制到剪贴板',
778
884
  linkCopyFailed: '复制链接失败',
779
885
  cancel: '取消',
@@ -789,6 +895,7 @@ const zh = {
789
895
  concurrentUpdateReload: '加载最新',
790
896
  concurrentUpdateOverwrite: '仍然覆盖',
791
897
  concurrentUpdateCancel: '取消',
898
+ concurrentUpdateRecordLabel: '此记录',
792
899
  openInNewTab: '在新标签页打开',
793
900
  share: '分享',
794
901
  duplicate: '复制',
@@ -818,16 +925,19 @@ const zh = {
818
925
  relatedRecords: '{{count}} 条记录',
819
926
  relatedRecordOne: '{{count}} 条记录',
820
927
  noRelatedRecords: '暂无相关记录',
821
- loading: '加载中...',
928
+ loading: '加载中…',
822
929
  copyToClipboard: '复制到剪贴板',
823
930
  copied: '已复制!',
824
931
  deleteConfirmation: '确定要删除此记录吗?',
932
+ deleted: '记录已删除',
825
933
  editRecord: '编辑记录',
826
934
  viewAll: '查看全部',
827
935
  new: '新建',
936
+ add: '添加',
828
937
  emptyValue: '—',
829
938
  activity: '活动',
830
939
  history: '历史',
940
+ historyEmpty: '暂无历史记录',
831
941
  editRow: '编辑',
832
942
  deleteRow: '删除',
833
943
  deleteRowConfirmation: '确定要删除此记录吗?',
@@ -837,7 +947,7 @@ const zh = {
837
947
  nextPage: '下一页',
838
948
  pageOf: '第 {{current}} 页,共 {{total}} 页',
839
949
  sortBy: '排序',
840
- filterPlaceholder: '筛选...',
950
+ filterPlaceholder: '筛选…',
841
951
  highlightFields: '关键字段',
842
952
  // Comments
843
953
  comments: '评论',
@@ -879,6 +989,10 @@ const zh = {
879
989
  attachmentDownloadDenied: '您无权下载此附件。',
880
990
  attachmentAuthRequired: '请登录后再下载此附件。',
881
991
  attachmentPermissionDenied: '您没有执行此操作的权限。',
992
+ attachmentsAccessDenied: '您没有访问这些附件的权限。',
993
+ attachmentsLoadFailed: '无法加载此记录的附件。',
994
+ attachmentsApiUnavailable: '此对象上的附件列表不可用。',
995
+ retryLoadAttachments: '重试',
882
996
  // Diff
883
997
  unifiedDiff: '统一视图',
884
998
  sideBySideDiff: '并排视图',
@@ -908,6 +1022,9 @@ const zh = {
908
1022
  nextRecordKey: '下一条记录 (→)',
909
1023
  lastRecord: '最后一条记录 (End)',
910
1024
  noRecords: '无记录',
1025
+ // objectui#3863 — base key. zh has a single plural category (`other`), so this
1026
+ // slot is unreachable here and equals `_other` for key-set parity.
1027
+ showEmptyRelated: '+ {{count}} 个为空',
911
1028
  showEmptyRelated_one: '+ {{count}} 个为空',
912
1029
  showEmptyRelated_other: '+ {{count}} 个为空',
913
1030
  searchWhileNavigating: '导航时搜索',
@@ -922,6 +1039,7 @@ const zh = {
922
1039
  loadMore: '加载更多',
923
1040
  edited: '(已编辑)',
924
1041
  via: '通过 {{source}}',
1042
+ viewSource: '查看来源',
925
1043
  // Replies
926
1044
  replyCount: '{{count}} 条回复',
927
1045
  replyCountPlural: '{{count}} 条回复',
@@ -942,7 +1060,8 @@ const zh = {
942
1060
  },
943
1061
  chart: {
944
1062
  noData: '暂无图表数据',
945
- loading: '图表加载中...',
1063
+ loading: '图表加载中…',
1064
+ nullCategory: '(未指定)',
946
1065
  },
947
1066
  report: {
948
1067
  total: '总计',
@@ -967,111 +1086,7 @@ const zh = {
967
1086
  first: '首个',
968
1087
  },
969
1088
  editor: {
970
- breadcrumb: '配置',
971
- basic: '基础',
972
- title: '标题',
973
- titlePlaceholder: '例如:按季度的销售管道',
974
- description: '描述',
975
- descriptionPlaceholder: '此报表展示什么?',
976
- type: '报表类型',
977
- typeTabular: '表格 — 平铺列表',
978
- typeSummary: '汇总 — 分组带合计',
979
- typeMatrix: '矩阵 — 行列透视',
980
- typeJoined: '拼接 — 多块组合',
981
- typeHelp: '选择最贴合需求的布局方式。',
982
- data: '数据',
983
- objectName: '数据源',
984
- objectNamePlaceholder: '例如:opportunity',
985
- objectNameHelp: '此报表应查询哪个对象?',
986
- limit: '行数上限',
987
- limitPlaceholder: '例如:100',
988
- columns: '列',
989
- columnsHint: '选择要展示的字段。汇总或矩阵报表可添加聚合(求和、计数…)。',
990
- filters: '筛选',
991
- filtersHint: '限定参与报表的数据行。',
992
- filtersComplex: '此报表使用了高级筛选条件,此处无法编辑。保存时将原样保留。',
993
- groupBy: '分组',
994
- groupByHint: '按字段分组并计算小计。',
995
- rows: '行',
996
- rowsHint: '按这些字段对行分组。',
997
- columnsAxis: '列',
998
- columnsAxisHint: '将这些字段透视到顶部。',
999
- values: '度量',
1000
- valuesHint: '每个单元格里展示的数字。选择一个或多个字段并设置聚合方式(求和、计数…)。',
1001
- grouping: '分组',
1002
- addGrouping: '添加分组',
1003
- dateGranularity: '日期粒度',
1004
- dateGranularityNone: '(使用原始值)',
1005
- day: '日',
1006
- week: '周',
1007
- month: '月',
1008
- quarter: '季度',
1009
- year: '年',
1010
- sortAsc: '升序',
1011
- sortDesc: '降序',
1012
- chart: '图表',
1013
- chartHint: '在表格旁可选展示的可视化。',
1014
- chartType: '图表类型',
1015
- chartTitle: '图表标题',
1016
- chartTitlePlaceholder: '默认使用报表标题',
1017
- chartXAxis: 'X 轴(类别)',
1018
- chartYAxis: 'Y 轴(数值)',
1019
- chartShowLegend: '显示图例',
1020
- chartShowDataLabels: '显示数据标签',
1021
- chartNone: '(无图表)',
1022
- chartBar: '柱状图',
1023
- chartLine: '折线图',
1024
- chartArea: '面积图',
1025
- chartPie: '饼图',
1026
- chartDonut: '环形图',
1027
- chartFunnel: '漏斗图',
1028
- validationNeedsObject: '请先选择数据源,再添加列。',
1029
- validationMatrixNeedsRowsCols: '矩阵报表至少需要一个行字段和一个列字段。',
1030
- validationSummaryNeedsRows: '汇总报表至少需要一个分组字段。',
1031
- blocks: '区块',
1032
- blocksHint: '每个区块都是独立的表格或图表。区块筛选会与报表筛选合并(AND)。',
1033
- addBlock: '添加区块',
1034
- removeBlock: '删除区块',
1035
- blockName: '区块名称',
1036
- blockNamePlaceholder: '唯一的区块名',
1037
- blockLabel: '显示标题',
1038
- blockLabelPlaceholder: '显示在区块上方',
1039
- blockDescription: '说明',
1040
- blockDescriptionPlaceholder: '该区块的可选说明',
1041
- validationJoinedNeedsBlocks: '组合报表至少需要一个区块。',
1042
- validationBlockNameRequired: '每个区块都必须有非空的名称。',
1043
- validationBlockNameDuplicate: '区块名称在报表内必须唯一。',
1044
- validationBlockNeedsColumns: '每个区块至少需要一列。',
1045
- noneOption: '(无)',
1046
- addCondition: '添加条件',
1047
- combineLogic: '组合方式',
1048
- opContains: '包含',
1049
- opIsEmpty: '为空',
1050
- opIsNotEmpty: '不为空',
1051
- formatAuto: '自动',
1052
- formatCurrency: '货币',
1053
- formatPercent: '百分比',
1054
- formatInteger: '整数',
1055
- formatDate: '日期',
1056
- formatDatetime: '日期 + 时间',
1057
- columnLabelPlaceholder: '自定义标签',
1058
- aggregateColumn: '聚合',
1059
- formatColumn: '格式',
1060
- addColumns: '添加字段',
1061
- searchFields: '搜索字段…',
1062
- noMatchingFields: '没有匹配的字段。',
1063
- noFieldsAvailable: '暂无可用字段。',
1064
- columnsCount: '已选择 {n} 个列',
1065
- columnsEmpty: '尚未选择任何列。',
1066
- fieldPickerTitle: '选择字段',
1067
- fieldPickerDescription: '可选择一个或多个字段添加到报表,输入关键字可快速筛选。',
1068
- fieldPickerChangeTitle: '更换字段',
1069
- fieldPickerAddGroupingTitle: '添加分组',
1070
- fieldPickerEmpty: '(请选择字段)',
1071
- fieldPickerSelected: '已选 {n} 个',
1072
- fieldPickerClear: '清空选择',
1073
- fieldPickerAdd: '添加',
1074
- fieldPickerAddN: '添加 {n} 个',
1089
+ panelTitle: '编辑报表',
1075
1090
  },
1076
1091
  },
1077
1092
  map: {
@@ -1081,66 +1096,6 @@ const zh = {
1081
1096
  invalidCoordinates: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1082
1097
  invalidCoordinatesPlural: '{{count}} 条记录因坐标缺失或无效已从地图中排除。',
1083
1098
  },
1084
- workflow: {
1085
- draft: '草稿',
1086
- active: '活跃',
1087
- paused: '已暂停',
1088
- completed: '已完成',
1089
- cancelled: '已取消',
1090
- save: '保存',
1091
- publish: '发布',
1092
- addNode: '添加节点',
1093
- workflowFlow: '工作流程',
1094
- properties: '属性',
1095
- connections: '连接',
1096
- quickConnect: '快速连接',
1097
- fromPlaceholder: '从...',
1098
- toPlaceholder: '到...',
1099
- connect: '连接',
1100
- label: '标签',
1101
- type: '类型',
1102
- description: '描述',
1103
- assignee: '负责人',
1104
- assigneeType: '负责人类型',
1105
- user: '用户',
1106
- role: '角色',
1107
- group: '组',
1108
- expression: '表达式',
1109
- timeoutMinutes: '超时时间(分钟)',
1110
- selectNodeToEdit: '选择节点以编辑其属性',
1111
- workflowTitle: '工作流标题',
1112
- newWorkflow: '新工作流',
1113
- outConnections: '{{count}} 个输出',
1114
- start: '开始',
1115
- end: '结束',
1116
- task: '任务',
1117
- userTask: '用户任务',
1118
- serviceTask: '服务任务',
1119
- scriptTask: '脚本任务',
1120
- approval: '审批',
1121
- condition: '条件',
1122
- parallelGateway: '并行网关',
1123
- joinGateway: '合并网关',
1124
- boundaryEvent: '边界事件',
1125
- delay: '延迟',
1126
- notification: '通知',
1127
- webhook: 'Webhook',
1128
- allowConcurrency: '允许(并发执行)',
1129
- forbidConcurrency: '禁止(跳过新任务)',
1130
- replaceConcurrency: '替换(取消现有任务)',
1131
- queueConcurrency: '排队(等待当前完成)',
1132
- conditionEvent: '条件',
1133
- manualEvent: '手动',
1134
- webhookEvent: 'Webhook',
1135
- timerEvent: '定时器',
1136
- signalEvent: '信号',
1137
- versionHistory: '版本历史',
1138
- importBpmn: '导入 BPMN',
1139
- exportBpmn: '导出 BPMN',
1140
- undo: '撤销',
1141
- redo: '重做',
1142
- resetZoom: '重置缩放',
1143
- },
1144
1099
  dashboard: {
1145
1100
  addWidget: '添加组件',
1146
1101
  removeWidget: '移除组件',
@@ -1151,11 +1106,111 @@ const zh = {
1151
1106
  noDataAvailable: '暂无数据',
1152
1107
  noDataSourceFor: '没有可用的数据源:',
1153
1108
  noRows: '暂无数据行',
1109
+ loading: '加载中…',
1154
1110
  pickMeasures: '请为该数据集组件选择度量(值)。',
1155
1111
  datasetUnsupported: '当前数据源不支持数据集查询。',
1156
1112
  details: '明细',
1157
1113
  exportCsv: '导出 CSV',
1158
1114
  openInList: '在列表中打开',
1115
+ config: {
1116
+ breadcrumb: {
1117
+ dashboard: '仪表盘',
1118
+ configuration: '配置',
1119
+ widget: '组件',
1120
+ chart: '图表',
1121
+ table: '表格',
1122
+ pivotTable: '透视表',
1123
+ },
1124
+ section: {
1125
+ general: '基本',
1126
+ layout: '布局',
1127
+ data: '数据',
1128
+ dataBinding: '数据绑定',
1129
+ appearance: '外观',
1130
+ },
1131
+ field: {
1132
+ title: '标题',
1133
+ description: '描述',
1134
+ columns: '列数',
1135
+ gap: '间距',
1136
+ rowHeight: '行高 (px)',
1137
+ autoRefresh: '自动刷新',
1138
+ showDescription: '显示描述',
1139
+ theme: '主题',
1140
+ widgetType: '组件类型',
1141
+ colorVariant: '颜色',
1142
+ dataset: '数据集',
1143
+ dimensions: '维度',
1144
+ values: '度量值',
1145
+ width: '宽度 (列数)',
1146
+ height: '高度 (行数)',
1147
+ },
1148
+ placeholder: {
1149
+ dashboardTitle: '仪表盘标题',
1150
+ dashboardDescription: '显示在标题下方的简短说明',
1151
+ widgetTitle: '组件标题',
1152
+ widgetDescription: '组件描述',
1153
+ datasetName: '数据集名称',
1154
+ selectDataset: '选择数据集…',
1155
+ searchDatasets: '搜索数据集…',
1156
+ addDimension: '添加维度…',
1157
+ addMeasure: '添加度量…',
1158
+ searchMembers: '搜索…',
1159
+ },
1160
+ empty: {
1161
+ datasets: '未找到数据集。',
1162
+ dimensions: '未选择维度。',
1163
+ measures: '未选择度量。',
1164
+ nothingToAdd: '没有可添加的项。',
1165
+ },
1166
+ help: {
1167
+ dataset: '该组件绑定的语义层数据集 (ADR-0021)。',
1168
+ dimensions: '按这些数据集维度对度量值进行分组/拆分。',
1169
+ dimensionsPivot: '分组/拆分字段。最后一个维度将横向展开为列。',
1170
+ values: '要展示的数据集度量 (至少一个)。',
1171
+ },
1172
+ action: {
1173
+ add: '添加',
1174
+ remove: '移除 {{name}}',
1175
+ },
1176
+ refresh: {
1177
+ off: '关闭',
1178
+ every30s: '每 30 秒',
1179
+ every1m: '每 1 分钟',
1180
+ every5m: '每 5 分钟',
1181
+ every15m: '每 15 分钟',
1182
+ every30m: '每 30 分钟',
1183
+ every1h: '每 1 小时',
1184
+ },
1185
+ themeOption: {
1186
+ light: '浅色',
1187
+ dark: '深色',
1188
+ auto: '自动',
1189
+ },
1190
+ widgetType: {
1191
+ metric: '指标',
1192
+ bar: '柱状图',
1193
+ horizontalBar: '条形图',
1194
+ line: '折线图',
1195
+ pie: '饼图',
1196
+ donut: '环形图',
1197
+ area: '面积图',
1198
+ scatter: '散点图',
1199
+ funnel: '漏斗图',
1200
+ table: '表格',
1201
+ pivot: '透视表',
1202
+ },
1203
+ color: {
1204
+ default: '默认',
1205
+ blue: '蓝色',
1206
+ teal: '青色',
1207
+ orange: '橙色',
1208
+ purple: '紫色',
1209
+ success: '成功',
1210
+ warning: '警告',
1211
+ danger: '危险',
1212
+ },
1213
+ },
1159
1214
  trend: {
1160
1215
  vsLastQuarter: '较上季度',
1161
1216
  vsLastMonth: '较上月',
@@ -1188,24 +1243,6 @@ const zh = {
1188
1243
  },
1189
1244
  },
1190
1245
  },
1191
- configPanel: {
1192
- save: '保存',
1193
- discard: '丢弃',
1194
- close: '关闭',
1195
- layout: '布局',
1196
- columns: '列数',
1197
- gap: '间距',
1198
- rowHeight: '行高',
1199
- data: '数据',
1200
- refreshInterval: '刷新间隔',
1201
- appearance: '外观',
1202
- title: '标题',
1203
- showDescription: '显示描述',
1204
- theme: '主题',
1205
- configuration: '配置',
1206
- general: '基本',
1207
- advanced: '高级',
1208
- },
1209
1246
  appDesigner: {
1210
1247
  createApp: '创建应用',
1211
1248
  editApp: '编辑应用',
@@ -1256,8 +1293,6 @@ const zh = {
1256
1293
  showSort: '显示排序',
1257
1294
  appearance: '外观',
1258
1295
  rowHeight: '行高',
1259
- stripedRows: '斑马纹',
1260
- bordered: '边框',
1261
1296
  livePreview: '实时预览',
1262
1297
  stepBasicDesc: '名称、标题和布局',
1263
1298
  stepObjectsDesc: '选择业务对象',
@@ -1371,7 +1406,6 @@ const zh = {
1371
1406
  unique: '唯一',
1372
1407
  readOnly: '只读',
1373
1408
  hidden: '隐藏',
1374
- indexed: '索引',
1375
1409
  externalId: '外部 ID',
1376
1410
  trackHistory: '追踪历史',
1377
1411
  defaultValue: '默认值',
@@ -1400,8 +1434,9 @@ const zh = {
1400
1434
  },
1401
1435
  },
1402
1436
  console: {
1437
+ saveAdvisoryTitle: '已保存 — 编辑检查提出了 {{count}} 条建议',
1403
1438
  title: 'ObjectStack 控制台',
1404
- initializing: '正在初始化应用程序...',
1439
+ initializing: '正在初始化应用程序…',
1405
1440
  search: '搜索…',
1406
1441
  breadcrumb: {
1407
1442
  dashboards: '仪表盘',
@@ -1432,6 +1467,31 @@ const zh = {
1432
1467
  Other: '其他',
1433
1468
  },
1434
1469
  },
1470
+ // objectui#4024 — the single-namespace settings screen. Its sibling
1471
+ // `settingsHub` above already resolved through this pack; the view was the
1472
+ // one file still carrying English literals.
1473
+ settingsView: {
1474
+ backToHub: '全部设置',
1475
+ back: '返回',
1476
+ noNamespace: '未选择命名空间。',
1477
+ loadError: '加载设置失败',
1478
+ saved: '设置已保存',
1479
+ saveFailed: '保存失败',
1480
+ lockedByEnv: '已被环境变量锁定:{{key}}',
1481
+ lockedByEnvNoKey: '已被环境变量锁定',
1482
+ actionSucceeded: '操作成功',
1483
+ actionFailed: '操作失败',
1484
+ discard: '放弃',
1485
+ saveChanges: '保存更改',
1486
+ unsavedCount: '{{count}} 项未保存的更改',
1487
+ unsavedCount_one: '{{count}} 项未保存的更改',
1488
+ unsavedCount_other: '{{count}} 项未保存的更改',
1489
+ cryptoRefusalTitle: '此部署无法加密机密信息',
1490
+ cryptoRefusalSubjectSuffix: '被声明为加密字段,因此未写入任何内容。',
1491
+ cryptoRefusalNoSubject: '声明为加密的值被拒绝,因此未写入任何内容。',
1492
+ cryptoRefusalToast: '无法加密机密信息:{{subject}}',
1493
+ cryptoRefusalToastNoSubject: '无法加密机密信息',
1494
+ },
1435
1495
  loadingSteps: {
1436
1496
  connecting: '正在连接数据源',
1437
1497
  loadingConfig: '正在加载配置',
@@ -1462,6 +1522,7 @@ const zh = {
1462
1522
  general: '通用',
1463
1523
  navigation: '导航',
1464
1524
  dataViews: '数据视图',
1525
+ aiChat: 'AI 助手',
1465
1526
  preferences: '偏好设置',
1466
1527
  },
1467
1528
  openCommandPalette: '打开命令面板',
@@ -1472,11 +1533,13 @@ const zh = {
1472
1533
  createRecord: '新建记录',
1473
1534
  refreshData: '刷新数据',
1474
1535
  editRecord: '编辑选中记录',
1536
+ newChat: '新建对话',
1537
+ toggleChatsList: '切换对话列表',
1475
1538
  toggleDarkMode: '切换深色模式',
1476
1539
  },
1477
1540
  commandPalette: {
1478
1541
  title: '命令面板',
1479
- placeholder: '输入命令或搜索...',
1542
+ placeholder: '输入命令或搜索…',
1480
1543
  noResults: '未找到结果。',
1481
1544
  searching: '搜索中…',
1482
1545
  records: '记录',
@@ -1496,6 +1559,13 @@ const zh = {
1496
1559
  createApp: '创建新应用',
1497
1560
  },
1498
1561
  ai: {
1562
+ pendingDrafts: {
1563
+ count: '有 {{count}} 项改动尚未发布——用户还看不到。',
1564
+ publish: '发布',
1565
+ published: '全部待发布改动已生效。',
1566
+ failed: '发布失败。',
1567
+ publishedWithFindings: '已发布,但运行时探针发现问题:{{detail}}',
1568
+ },
1499
1569
  usage: {
1500
1570
  title: 'AI 用量',
1501
1571
  meterBuild: 'AI 搭建',
@@ -1518,7 +1588,7 @@ const zh = {
1518
1588
  shareTitle: '分享此对话',
1519
1589
  shareDisabledTitle: '开始对话后即可分享',
1520
1590
  newChat: '新对话',
1521
- searchChats: '搜索对话...',
1591
+ searchChats: '搜索对话…',
1522
1592
  noChatsYet: '暂无对话',
1523
1593
  noChatsDescription: '开始新的对话后会显示在这里。',
1524
1594
  noMatchingChats: '没有匹配的对话。',
@@ -1527,18 +1597,18 @@ const zh = {
1527
1597
  deleteConversation: '删除对话',
1528
1598
  saveRename: '保存重命名',
1529
1599
  cancelRename: '取消重命名',
1530
- loadingHistory: '正在加载对话历史...',
1600
+ loadingHistory: '正在加载对话历史…',
1531
1601
  conversationReady: '对话已就绪',
1532
1602
  preparingConversation: '正在准备新对话',
1533
1603
  offlineDemoMode: '离线演示模式 — 无法获取助手列表',
1534
1604
  sendFailedRateLimited: '发送过于频繁,请稍候再试。你的消息已保留在输入框中。',
1535
1605
  sendFailedGeneric: '消息发送失败,请重试。你的消息已保留在输入框中。',
1536
- askAgent: '向 {{agent}} 提问...',
1606
+ askAgent: '向 {{agent}} 提问…',
1537
1607
  assistant: '助手',
1538
1608
  liveCanvas: '草稿预览 · {{app}}',
1539
1609
  liveCanvasUnlisted: '运行预览 · {{app}}(未发布 · 仅自己可见)',
1540
- loadingAgents: '正在加载助手...',
1541
- askAnything: '输入你的问题...',
1610
+ loadingAgents: '正在加载助手…',
1611
+ askAnything: '输入你的问题…',
1542
1612
  emptyTitle: '开始对话',
1543
1613
  emptyDescription: '可以直接提问,助手会结合当前应用上下文提供帮助。',
1544
1614
  switchAssistant: '切换助手',
@@ -1606,6 +1676,11 @@ const zh = {
1606
1676
  changesConfirmed: '已确认',
1607
1677
  changesConfirm: '确认修改',
1608
1678
  changesConfirmHint: '回复以确认或调整该改动。',
1679
+ changesApplying: '应用中…',
1680
+ changesApplied: '已生效',
1681
+ changesDrafted: '已暂存为草稿',
1682
+ changesFailed: '未生效',
1683
+ discussing: '正在讨论:{{target}}',
1609
1684
  changesConfirmMessage: '确认修改,应用你刚才提议的改动。',
1610
1685
  changeVerb: {
1611
1686
  createObject: '新建对象',
@@ -1653,6 +1728,57 @@ const zh = {
1653
1728
  addAutomation: '加一个自动化 —— 审批、状态流转或通知。',
1654
1729
  },
1655
1730
  },
1731
+ // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
1732
+ // connection banner and plan/publish cards, the ChatDock chrome, and the
1733
+ // conversation-list date buckets. `group.*` is the template-key family
1734
+ // `console.ai.group.${key}` (ConversationsSidebar), enumerated from the
1735
+ // ConversationGroupKey union — all five members, no wildcard.
1736
+ collapseToDock: '收起到侧边栏',
1737
+ switchApp: '切换应用',
1738
+ switchAppLabel: '按应用查看搭建对话',
1739
+ newApp: '新建应用',
1740
+ connectionWaiting: '正在等待服务器…',
1741
+ connectionStalled: '仍在处理…',
1742
+ connectionOffline: '连接已断开 — 正在重新连接…',
1743
+ designingPlan: '正在设计你的应用…',
1744
+ designingPlanHint: {
1745
+ data: '正在梳理你要跟踪的数据…',
1746
+ objects: '正在设计对象及其字段…',
1747
+ relations: '正在关联相关记录…',
1748
+ lookups: '正在设置关系与关联查找…',
1749
+ views: '正在规划界面与视图…',
1750
+ forms: '正在排布表单与列表…',
1751
+ defaults: '正在添加合理的默认值与校验…',
1752
+ dashboard: '正在勾画用于跟踪的仪表盘…',
1753
+ review: '正在复核整体结构是否自洽…',
1754
+ finalize: '正在汇总方案…',
1755
+ },
1756
+ planBuilding: '正在搭建…',
1757
+ planBuilt: '已搭建',
1758
+ planDeferred: '尚未搭建',
1759
+ planReady: '方案已就绪。现在就开始搭建,或者告诉我需要调整什么。',
1760
+ published: '已发布',
1761
+ publishFailed: '发布失败',
1762
+ unavailableTitle: 'AI 助手不可用',
1763
+ unavailableDescription: '当前部署未启用 AI 助手。其他功能一切正常。',
1764
+ unavailableError: '无法连接 AI 服务。它可能暂时离线 — 请重试,或返回首页。',
1765
+ unavailableRetry: '重试',
1766
+ unavailableHome: '返回首页',
1767
+ dock: {
1768
+ title: '助手',
1769
+ description: 'AI 助手对话',
1770
+ resize: '调整对话宽度',
1771
+ collapse: '收起对话',
1772
+ maximize: '以完整页面打开',
1773
+ open: '打开助手',
1774
+ },
1775
+ group: {
1776
+ today: '今天',
1777
+ yesterday: '昨天',
1778
+ previous7Days: '过去 7 天',
1779
+ previous30Days: '过去 30 天',
1780
+ older: '更早',
1781
+ },
1656
1782
  },
1657
1783
  errors: {
1658
1784
  somethingWentWrong: '出错了',
@@ -1661,6 +1787,12 @@ const zh = {
1661
1787
  goHome: '返回首页',
1662
1788
  errorDetails: '错误详情(仅开发模式)',
1663
1789
  },
1790
+ // objectui#3546 slice four — the console's catch-all route (AppContent `RouteNotFound`).
1791
+ notFound: {
1792
+ title: '页面不存在',
1793
+ description: '你访问的链接与该应用中的任何视图都不匹配。',
1794
+ back: '返回',
1795
+ },
1664
1796
  theme: {
1665
1797
  toggle: '切换主题',
1666
1798
  light: '浅色',
@@ -1696,6 +1828,8 @@ const zh = {
1696
1828
  },
1697
1829
  objectView: {
1698
1830
  systemViewReadonly: '系统视图由代码定义,只读。',
1831
+ cannotEditMetaView: '该视图为内置视图,由代码定义,无法修改。',
1832
+ cannotDeleteMetaView: '该视图为内置视图,由代码定义,无法删除。',
1699
1833
  expandToPage: '以完整页面打开',
1700
1834
  objectNotFound: '未找到对象',
1701
1835
  objectNotFoundDescription: '对象"{{objectName}}"在当前配置中不存在。',
@@ -1703,64 +1837,18 @@ const zh = {
1703
1837
  filterOrNotSavable: '该筛选条件之间使用「或」,保存到视图暂不支持这种结构。它仍会作用于当前列表 —— 取消「或」分组后才能保存到视图。',
1704
1838
  filterNestedNotSavable: '该筛选使用了嵌套条件分组,保存到视图不支持这种结构。请改为单层条件列表后再保存到视图。',
1705
1839
  allRecords: '所有记录',
1706
- exitDesignMode: '退出设计模式',
1707
- enterDesignMode: '进入设计模式',
1708
- metadataInspector: '元数据检查器',
1709
- editView: '编辑视图',
1710
- addView: '添加视图',
1711
- designTools: '设计工具',
1712
1840
  new: '新建',
1713
1841
  import: '导入',
1714
1842
  importTitle: '从 CSV 文件导入',
1715
1843
  importedToast: '成功导入 {{count}} 行。',
1716
1844
  importedWithSkipped: '已导入 {{ok}} 行;跳过 {{skipped}} 行。',
1717
1845
  configureView: '配置视图',
1718
- closePanel: '关闭面板',
1719
- showAdvancedSettings: '显示高级设置',
1720
- showFewerSettings: '显示精简设置',
1721
- page: '页面',
1722
- pageConfigHint: '工具栏、导航与视图外壳设置',
1723
- listConfigHint: '此列表类型的数据渲染、列与外观',
1724
- general: '常规',
1725
- generalHint: '视图标题、描述和类型',
1726
1846
  toolbar: '工具栏',
1727
- toolbarHint: '搜索、筛选、排序、分组和密度切换',
1728
1847
  toolbarEnabledCount: '已启用 {{count}}/{{total}} 项',
1729
- navigationSection: '导航',
1730
- navigationHint: '行点击行为和详情视图设置',
1731
- records: '记录',
1732
- recordsHint: '选择模式、添加记录和内联编辑',
1733
- exportPrint: '导出与打印',
1734
- exportPrintHint: '导出格式、打印和记录数显示',
1735
- showAllFields: '全部显示',
1736
- hideAllFields: '全部隐藏',
1737
- searchFields: '搜索字段...',
1848
+ searchFields: '搜索字段…',
1738
1849
  title: '标题',
1739
- description: '描述',
1740
- data: '数据',
1741
- source: '数据源',
1742
- columns: '列',
1743
- filterBy: '筛选条件',
1744
- sortBy: '排序条件',
1745
- appearance: '外观',
1746
- showDescription: '显示描述',
1747
1850
  viewType: '视图类型',
1748
- userFilters: '用户筛选器',
1749
- enableSearch: '启用搜索',
1750
- enableFilter: '启用筛选',
1751
- enableSort: '启用排序',
1752
- enableHideFields: '启用隐藏字段',
1753
- enableGroup: '启用分组',
1754
- enableColor: '启用颜色',
1755
- enableDensity: '启用密度',
1756
- userActions: '用户操作',
1757
- addRecordViaForm: '通过表单添加记录',
1758
- advanced: '高级',
1759
- allowExport: '允许导出',
1760
1851
  recordCount: '{{count}} 条记录',
1761
- noDescription: '无描述',
1762
- none: '无',
1763
- columnsConfigured: '{{count}} 列',
1764
1852
  save: '保存',
1765
1853
  discard: '丢弃',
1766
1854
  createView: '创建视图',
@@ -1797,7 +1885,6 @@ const zh = {
1797
1885
  viewNameHelp: '机器标识(snake_case),根据标题自动生成,可自行修改。',
1798
1886
  viewNameRequired: '请输入标识(小写字母、数字、下划线)。非拉丁标题不会自动生成。',
1799
1887
  viewNameInvalid: '仅限小写字母、数字和下划线,且以字母或下划线开头。',
1800
- typeOptions: '类型选项',
1801
1888
  groupByField: '分组字段',
1802
1889
  groupByFieldHelp: '看板会按该字段的不同取值分列。',
1803
1890
  startDateField: '开始日期字段',
@@ -1812,9 +1899,8 @@ const zh = {
1812
1899
  longitudeFieldHelp: '提供经度坐标的字段(仅地理坐标字段可选)。',
1813
1900
  imageField: '图片字段',
1814
1901
  imageFieldHelp: '画廊封面来自该图片或附件字段。',
1815
- dateField: '日期字段',
1816
- selectField: '选择字段...',
1817
- selectOption: '选择...',
1902
+ selectField: '选择字段…',
1903
+ selectOption: '选择…',
1818
1904
  noEligibleFieldForType: '没有符合条件的字段。请先在对象上添加该类型字段。',
1819
1905
  viewTypeUnavailable: '该对象缺少所需的“{{field}}”字段。',
1820
1906
  viewTypeUnavailableShort: '当前对象不支持。',
@@ -1829,82 +1915,11 @@ const zh = {
1829
1915
  xAxisFieldHelp: '用于分类或时间维度的字段。',
1830
1916
  yAxisField: 'Y 轴字段',
1831
1917
  yAxisFieldHelp: '用于数值聚合的字段。',
1832
- gridOptionsHint: '网格视图使用上方配置的列。',
1833
1918
  groupBy: '分组依据',
1834
- prefixField: '前缀字段',
1835
- fields: '字段',
1836
- fieldsVisible: '{{count}} 个可见',
1837
- sortsCount: '{{count}} 个排序',
1838
- filtersCount: '{{count}} 个筛选',
1839
1919
  endDateField: '结束日期字段',
1840
- color: '颜色',
1841
- fieldTextColor: '字段文字颜色',
1842
- rowHeight: '行高',
1843
- wrapHeaders: '自动换行标题',
1844
- showFieldDescriptions: '显示字段描述',
1845
- collapseAllByDefault: '默认全部折叠',
1846
- striped: '斑马纹行',
1847
- bordered: '边框单元格',
1848
- inlineEdit: '内联编辑记录',
1849
- addDeleteRecordsInline: '内联添加/删除记录',
1850
- clickIntoRecordDetails: '点击进入记录详情',
1851
- navigationMode: '导航模式',
1852
- navigationWidth: '导航宽度',
1853
- navigationWidthHint: '适用于抽屉、弹窗和分屏导航模式',
1854
- openNewTab: '在新标签页打开',
1855
- openNewTabHint: '适用于页面和新窗口导航模式',
1856
- selectionMode: '选择模式',
1857
- selectionNone: '无',
1858
- selectionSingle: '单选',
1859
- selectionMultiple: '多选',
1860
- pageSize: '每页记录数',
1861
- pageSizeOptions: '每页选项',
1862
- exportFormats: '导出格式',
1863
- exportMaxRecords: '最大记录数',
1864
- exportIncludeHeaders: '包含表头',
1865
- exportFileNamePrefix: '文件名前缀',
1866
- searchableFields: '可搜索字段',
1867
- filterableFields: '可筛选字段',
1868
- resizableColumns: '可调整列宽',
1869
- densityCompact: '紧凑',
1870
- densityComfortable: '舒适',
1871
- densitySpacious: '宽松',
1872
- densityMode: '密度模式',
1873
- hiddenFields: '隐藏字段',
1874
- rowActions: '行操作',
1875
- bulkActions: '批量操作',
1876
- sharing: '共享',
1877
- sharingEnabled: '启用共享',
1878
- sharingVisibility: '可见性',
1879
- addRecordEnabled: '启用添加记录',
1880
- addRecordPosition: '位置',
1881
- addRecordMode: '模式',
1882
- addRecordFormView: '表单视图',
1883
- conditionalFormatting: '条件格式',
1884
- addRule: '添加规则',
1885
- quickFilters: '快速筛选',
1886
- addQuickFilter: '添加快速筛选',
1887
- ufElements: '元素类型',
1888
- ufDropdown: '下拉菜单',
1889
1920
  ufTabs: '标签页',
1890
- ufToggle: '开关',
1891
- ufAddField: '+ 添加筛选字段...',
1892
- ufNoFields: '无可用字段',
1893
- ufAddTab: '+ 添加标签页',
1894
- ufTabLabel: '标签',
1921
+ ufAddField: '+ 添加筛选字段…',
1895
1922
  ufShowAllRecords: '显示"全部记录"标签页',
1896
- ufAllowAddTab: '允许添加标签页',
1897
- showRecordCount: '显示记录计数',
1898
- allowPrinting: '允许打印',
1899
- virtualScroll: '虚拟滚动',
1900
- emptyStateTitle: '空状态标题',
1901
- emptyStateMessage: '空状态消息',
1902
- emptyStateIcon: '空状态图标',
1903
- ariaLabel: 'ARIA 标签',
1904
- ariaDescribedBy: 'ARIA 描述',
1905
- ariaLive: 'ARIA 实时区域',
1906
- accessibility: '无障碍',
1907
- viewTabs: '视图标签',
1908
1923
  },
1909
1924
  localeSwitcher: {
1910
1925
  label: '语言',
@@ -1920,7 +1935,7 @@ const zh = {
1920
1935
  passwordPlaceholder: '输入您的密码',
1921
1936
  forgotPasswordText: '忘记密码?',
1922
1937
  submitButton: '登录',
1923
- submittingButton: '登录中...',
1938
+ submittingButton: '登录中…',
1924
1939
  noAccountText: '还没有账户?',
1925
1940
  signUpText: '注册',
1926
1941
  signingIn: '正在登录…',
@@ -1935,6 +1950,18 @@ const zh = {
1935
1950
  emailNotVerified: '请先验证您的邮箱后再登录。',
1936
1951
  oauthCallbackFailed: '单点登录未能完成——登录链接已过期或已被使用,请重新发起登录。',
1937
1952
  },
1953
+ // objectui#3546 slice three — phone/OTP sign-in. `{seconds}` is LoginForm's own
1954
+ // literal `.replace()` hole, not i18next interpolation: keep the single braces.
1955
+ emailOrPhoneLabel: '邮箱或手机号',
1956
+ emailOrPhonePlaceholder: 'name@example.com 或 +1 555 000 0000',
1957
+ phoneLabel: '手机号',
1958
+ phonePlaceholder: '+1 555 000 0000',
1959
+ otpCodeLabel: '验证码',
1960
+ otpCodePlaceholder: '6 位验证码',
1961
+ sendOtpButton: '获取验证码',
1962
+ resendOtpCountdownText: '{seconds} 秒后可重新发送',
1963
+ usePhoneOtpText: '使用验证码登录',
1964
+ usePasswordSignInText: '改用密码登录',
1938
1965
  },
1939
1966
  register: {
1940
1967
  title: '创建账户',
@@ -1950,7 +1977,7 @@ const zh = {
1950
1977
  passwordMismatchError: '两次输入的密码不一致',
1951
1978
  passwordTooShortError: '密码至少需要8个字符',
1952
1979
  submitButton: '创建账户',
1953
- submittingButton: '创建中...',
1980
+ submittingButton: '创建中…',
1954
1981
  hasAccountText: '已有账户?',
1955
1982
  signInText: '登录',
1956
1983
  errors: {
@@ -1971,12 +1998,26 @@ const zh = {
1971
1998
  emailLabel: '邮箱',
1972
1999
  emailPlaceholder: 'name@example.com',
1973
2000
  submitButton: '发送重置链接',
1974
- submittingButton: '发送中...',
2001
+ submittingButton: '发送中…',
1975
2002
  successTitle: '请查看您的邮箱',
1976
- successDescription: '我们已将密码重置链接发送至 {{email}},请检查您的收件箱。',
2003
+ successDescription: '我们已将密码重置链接发送至 {email},请检查您的收件箱。',
1977
2004
  backToSignInText: '返回登录',
1978
2005
  rememberPasswordText: '记住密码了?',
1979
2006
  signInText: '登录',
2007
+ // objectui#3546 slice three — the SMS reset branch of the same form.
2008
+ phoneLabel: '手机号',
2009
+ phonePlaceholder: '+1 555 000 0000',
2010
+ otpCodeLabel: '验证码',
2011
+ otpCodePlaceholder: '6 位验证码',
2012
+ sendOtpButton: '获取验证码',
2013
+ resendOtpCountdownText: '{seconds} 秒后可重新发送',
2014
+ newPasswordLabel: '新密码',
2015
+ newPasswordPlaceholder: '输入新密码',
2016
+ resetButton: '重置密码',
2017
+ usePhoneResetText: '通过短信验证码重置',
2018
+ useEmailResetText: '改用邮箱重置',
2019
+ phoneSuccessTitle: '密码已重置',
2020
+ phoneSuccessDescription: '您的密码已重置,现在可以使用新密码登录了。',
1980
2021
  },
1981
2022
  setPassword: {
1982
2023
  title: '设置一个备用密码',
@@ -2029,6 +2070,8 @@ const zh = {
2029
2070
  backToLogin: '返回登录',
2030
2071
  checkSpam: '没有收到邮件?请检查垃圾邮件文件夹或联系支持。',
2031
2072
  or: '或',
2073
+ // objectui#3546 slice three.
2074
+ resendUnavailable: '此环境可能未配置邮件发送服务。如果问题持续存在,请联系支持。',
2032
2075
  },
2033
2076
  setup: {
2034
2077
  welcomeTitle: '欢迎使用 ObjectStack',
@@ -2067,6 +2110,9 @@ const zh = {
2067
2110
  invalidDescription: 'URL 中未提供设备代码。',
2068
2111
  loading: '加载中…',
2069
2112
  cancel: '取消',
2113
+ // objectui#3546 slice three — device-authorization plugin switched off.
2114
+ disabledTitle: '未启用设备授权',
2115
+ disabledDescription: '此部署未启用设备授权,因此无法在此批准该设备。',
2070
2116
  },
2071
2117
  shell: {
2072
2118
  tenantHostHint: '您正在登录此工作区',
@@ -2106,6 +2152,29 @@ const zh = {
2106
2152
  },
2107
2153
  },
2108
2154
  },
2155
+ // objectui#3546 slice three — the /oauth/consent screen.
2156
+ oauth: {
2157
+ consent: {
2158
+ title: '{{appName}} 请求访问您的账户',
2159
+ request: '{{appName}} 正在请求授权{{suffix}}。',
2160
+ unknownApp: '某个应用',
2161
+ willAllow: '此应用将能够:',
2162
+ scope: {
2163
+ openid: '确认您的身份',
2164
+ profile: '读取您的基本资料(姓名、头像)',
2165
+ email: '读取您的邮箱地址',
2166
+ offlineAccess: '保持登录状态(刷新访问权限)',
2167
+ },
2168
+ deny: '拒绝',
2169
+ authorize: '授权',
2170
+ submitting: '授权中…',
2171
+ granted: '已授予访问权限',
2172
+ denied: '访问被拒绝',
2173
+ noRedirect: '服务器未返回跳转地址。',
2174
+ failed: '授权失败',
2175
+ footer: '您可以随时在账户设置中撤销访问权限。',
2176
+ },
2177
+ },
2109
2178
  profile: {
2110
2179
  title: '个人资料',
2111
2180
  subtitle: '管理您的账户设置',
@@ -2167,6 +2236,8 @@ const zh = {
2167
2236
  invite: '邀请成员',
2168
2237
  members: '成员',
2169
2238
  settings: '工作区设置',
2239
+ multiOrgDisabled: '此实例已禁用创建新组织。',
2240
+ createFailed: '创建工作区失败',
2170
2241
  },
2171
2242
  help: {
2172
2243
  keyboardShortcuts: '键盘快捷键',
@@ -2187,7 +2258,7 @@ const zh = {
2187
2258
  area: '区域',
2188
2259
  scope: '范围',
2189
2260
  packageManagement: '软件包管理',
2190
- searchNavigation: '搜索导航...',
2261
+ searchNavigation: '搜索导航…',
2191
2262
  recent: '最近使用',
2192
2263
  favorites: '收藏',
2193
2264
  starred: '已收藏',
@@ -2203,8 +2274,8 @@ const zh = {
2203
2274
  switchObject: '切换对象',
2204
2275
  connection: {
2205
2276
  connected: '已连接',
2206
- connecting: '连接中...',
2207
- reconnecting: '正在重新连接...',
2277
+ connecting: '连接中…',
2278
+ reconnecting: '正在重新连接…',
2208
2279
  disconnected: '已断开连接',
2209
2280
  error: '连接错误',
2210
2281
  },
@@ -2236,10 +2307,12 @@ const zh = {
2236
2307
  build: {
2237
2308
  title: '构建应用',
2238
2309
  subtitle: '从零开始 — 设计对象、表单、自动化与界面。',
2310
+ noCapability: '此工作区不提供构建应用功能 — 它需要「管理元数据」权限,而你的账号没有该权限。',
2239
2311
  },
2240
2312
  template: {
2241
2313
  title: '从模板开始',
2242
2314
  subtitle: '从应用市场安装模板应用并按需定制。',
2315
+ marketplaceDisabled: '本运行时未配置应用市场,因此这里没有可安装的模板。',
2243
2316
  },
2244
2317
  open: '打开',
2245
2318
  stats: {
@@ -2247,7 +2320,7 @@ const zh = {
2247
2320
  starred: '收藏',
2248
2321
  recent: '最近访问',
2249
2322
  },
2250
- loading: '正在加载工作区...',
2323
+ loading: '正在加载工作区…',
2251
2324
  recent: '最近使用',
2252
2325
  starred: '收藏',
2253
2326
  welcome: '用 AI 搭建你的业务系统',
@@ -2270,6 +2343,13 @@ const zh = {
2270
2343
  publishing: '发布中…',
2271
2344
  published: '已发布!更改已生效。',
2272
2345
  publishFailed: '发布失败',
2346
+ // objectui#3546 切片六 —— usePublishAllDrafts 其余几条 toast。
2347
+ // seedWarn 与 console.ai.seedWarn 同串,直接沿用该键既有译文。
2348
+ nothing: '没有需要发布的内容。',
2349
+ probeWarn: '已发布,但验证发现了问题。',
2350
+ seedWarn: '已发布,但部分示例数据未能载入。',
2351
+ publishedVerified: '已发布并验证 —— {{count}} 行示例数据已生效。',
2352
+ capabilityWarn: '编写检查:{{count}} 个能力引用无法解析。',
2273
2353
  },
2274
2354
  createFirstApp: '手动创建应用',
2275
2355
  systemSettings: '系统设置',
@@ -2327,6 +2407,9 @@ const zh = {
2327
2407
  roles: '角色',
2328
2408
  configuration: '配置',
2329
2409
  createApp: '创建应用',
2410
+ administration: '管理',
2411
+ datasources: '数据源',
2412
+ documentation: '文档',
2330
2413
  },
2331
2414
  activityFeed: {
2332
2415
  title: '最近动态',
@@ -2374,6 +2457,7 @@ const zh = {
2374
2457
  empty: {
2375
2458
  objectNotFound: '未找到对象',
2376
2459
  objectNotFoundDescription: '对象 “{{name}}” 的定义不存在。请检查配置或返回选择有效的对象。',
2460
+ interfacePageSourceMissing: '此界面页引用了 “{{name}}”,但该来源不可用。',
2377
2461
  recordNotFound: '未找到记录',
2378
2462
  recordNotFoundDescription: '您查找的记录不存在或已被删除。',
2379
2463
  pageNotFound: '未找到页面',
@@ -2384,6 +2468,11 @@ const zh = {
2384
2468
  reportNotFoundDescription: '未找到报表 “{{name}}”,可能已被删除或重命名。',
2385
2469
  noAppsConfigured: '尚未配置应用',
2386
2470
  noAppsConfiguredDescription: '当前没有任何已注册的应用。请创建您的第一个应用,或前往系统设置进行配置。',
2471
+ appNotAvailable: '应用不可用',
2472
+ appNotAvailableDescription: '此应用尚不可用 —— 可能仍在发布中。请稍后重试。',
2473
+ appAccessDenied: '你没有访问此应用的权限',
2474
+ appAccessDeniedDescription: '此应用存在,但你的账号未获授权打开它。请联系管理员为你开通访问权限。',
2475
+ appAccessDeniedHome: '返回首页',
2387
2476
  createFirstApp: '创建您的第一个应用',
2388
2477
  systemSettings: '系统设置',
2389
2478
  back: '返回',
@@ -2424,22 +2513,40 @@ const zh = {
2424
2513
  detailChangedKeys: '其他变更:',
2425
2514
  confirmNote: '发布将一次性(原子地)发布此包全部 {{count}} 个待发布草稿。',
2426
2515
  publishConfirm: '全部发布',
2516
+ // [objectui#5418] Pre-publish security-posture findings, shown next to
2517
+ // the confirm button so a refusal the door would issue is read BEFORE
2518
+ // the click rather than as a toast after the batch rolled back.
2519
+ securityBlockTitle: '发布会被拒绝 —— 有 {{count}} 项需要先做出决定',
2520
+ securityBlockWhere: '请在对象的“设置 → 记录共享模型”中修改后重新发布。',
2521
+ },
2522
+ // ADR-0045 — the materialized-but-unlisted app banner
2523
+ // (UnpublishedAppBar.tsx), sibling of draftBar above.
2524
+ unpublishedBar: {
2525
+ message: '未发布的应用 —— 功能完整,但只有构建者能看到。发布后即可让您的用户看到。',
2526
+ publish: '发布',
2527
+ publishing: '发布中…',
2528
+ published: '已发布!应用现在对您的用户可见。',
2529
+ publishFailed: '发布失败',
2530
+ },
2531
+ // ADR-0067 — the append-only build/revert timeline (CommitTimeline.tsx);
2532
+ // `button` is the banner's entry point into it.
2533
+ history: {
2534
+ button: '历史',
2535
+ title: '构建历史',
2536
+ description: '此应用的每一次变更,最新的在最前。撤销任一步骤即可回退 —— 无需确认发布。',
2537
+ loadFailed: '无法加载历史记录:',
2538
+ loadFailedUnavailable: '提交存储暂时不可达 —— 本次读取并未发生,因此不显示任何历史记录。请稍后重试。',
2539
+ loading: '正在加载历史记录…',
2540
+ empty: '此应用暂无历史记录。',
2541
+ revertLabel: '已撤销一处变更',
2542
+ applyLabel: '构建变更',
2543
+ revert: '撤销',
2544
+ items: '项',
2545
+ revertAction: '撤销',
2546
+ reverted: '已撤销 —— 该变更已还原。',
2547
+ revertFailed: '撤销失败',
2548
+ revertUnavailable: '提交存储暂时不可达 —— 此次撤销可能尚未生效。请重新打开历史记录确认后再重试。',
2427
2549
  },
2428
- },
2429
- renderer: {
2430
- noPageSchema: '未提供页面 schema',
2431
- noFormSchema: '未提供表单 schema',
2432
- noDashboardSchema: '未提供仪表板 schema',
2433
- pageRendering: '页面渲染中:{{name}}',
2434
- dashboardRendering: '仪表板渲染中:{{name}}',
2435
- formRenderingMode: '正在以 {{mode}} 模式渲染表单',
2436
- formRenderingFor: '记录 {{id}}',
2437
- createRecord: '新建记录',
2438
- editRecord: '编辑记录',
2439
- page: '页面',
2440
- dashboard: '仪表板',
2441
- save: '保存',
2442
- cancel: '取消',
2443
2550
  },
2444
2551
  actionDialog: {
2445
2552
  title: '操作参数',
@@ -2491,7 +2598,7 @@ const zh = {
2491
2598
  deleteFailed: '删除视图失败',
2492
2599
  },
2493
2600
  dashboardActions: {
2494
- pdfPreparing: '正在准备 PDF 导出…',
2601
+ printDialogOpening: '正在打开浏览器打印对话框(不是导出 PDF)',
2495
2602
  exportFailed: '导出失败:{{message}}',
2496
2603
  forecastSoon: '预测视图即将上线',
2497
2604
  },
@@ -2526,6 +2633,143 @@ const zh = {
2526
2633
  emptyDescription: '创建您的第一个工作区以开始使用。',
2527
2634
  noMatches: '没有匹配的工作区。',
2528
2635
  },
2636
+ organization: {
2637
+ roles: {
2638
+ owner: '所有者',
2639
+ admin: '管理员',
2640
+ delegatedAdmin: '受托管理员',
2641
+ member: '成员',
2642
+ },
2643
+ errors: {
2644
+ notAllowedToInvite: '您无权邀请用户加入该组织。',
2645
+ notAllowedToInviteWithRole: '您无权以该角色邀请用户。',
2646
+ alreadyInvited: '该用户已被邀请加入本组织。',
2647
+ organizationExists: '该组织已存在。',
2648
+ slugTaken: '该标识已被占用。',
2649
+ notAllowedToCreate: '您无权创建新组织。',
2650
+ notTheRecipient: '您不是该邀请的收件人。',
2651
+ invitationNotFound: '该邀请已失效或已过期。',
2652
+ unknown: '出了点问题,请重试。',
2653
+ },
2654
+ backToList: '返回组织列表',
2655
+ notFound: '未找到组织',
2656
+ notFoundDescription: '该组织不存在,或您没有访问权限。',
2657
+ tabs: {
2658
+ members: '成员',
2659
+ invitations: '邀请',
2660
+ settings: '设置',
2661
+ },
2662
+ members: {
2663
+ title: '成员',
2664
+ inviteMember: '邀请成员',
2665
+ inviteRestrictedNote: '只有组织管理员可以邀请成员。',
2666
+ removeMember: '移除成员',
2667
+ removeConfirmTitle: '移除成员?',
2668
+ removeConfirmDescription: '将把 {{name}} 从该组织中移除,其访问权限会立即失效。',
2669
+ removeConfirmAction: '移除',
2670
+ memberRemoved: '成员已移除',
2671
+ removeFailed: '移除成员失败',
2672
+ roleUpdated: '角色已更新',
2673
+ roleUpdateFailed: '更新角色失败',
2674
+ memberActions: '成员操作',
2675
+ loadFailed: '加载成员失败',
2676
+ },
2677
+ invitations: {
2678
+ title: '邀请',
2679
+ empty: '暂无邀请。',
2680
+ expiresAt: '过期时间',
2681
+ linkCopied: '邀请链接已复制',
2682
+ copyFailed: '复制链接失败',
2683
+ canceled: '邀请已取消',
2684
+ cancelFailed: '取消邀请失败',
2685
+ cancelTitle: '取消邀请?',
2686
+ cancelDescription: '将撤销发给 {{email}} 的邀请。',
2687
+ cancelAction: '取消邀请',
2688
+ inviteTitle: '邀请成员',
2689
+ inviteDescription: '对方将收到加入该组织的邀请。',
2690
+ emailLabel: '邮箱',
2691
+ roleLabel: '角色',
2692
+ placementLabel: '任职安排(可选)',
2693
+ placementDescription: '在邀请被接受时生效。仅列出您有权分派的业务单元和岗位。',
2694
+ businessUnitLabel: '业务单元',
2695
+ businessUnitPlaceholder: '不指定任职',
2696
+ positionsLabel: '岗位',
2697
+ sendInvite: '发送邀请',
2698
+ sentTitle: '邀请已创建',
2699
+ sentDescription: '请将下方链接发送给受邀人。对方需要登录后才能接受。',
2700
+ linkLabel: '接受链接',
2701
+ invitedAs: '{{email}} 已以 {{role}} 身份受邀',
2702
+ copyLinkLabel: '复制邀请链接',
2703
+ loadFailed: '加载邀请失败',
2704
+ inviteFailed: '邀请成员失败',
2705
+ status: {
2706
+ all: '全部',
2707
+ pending: '等待中',
2708
+ accepted: '已接受',
2709
+ rejected: '已拒绝',
2710
+ canceled: '已取消',
2711
+ },
2712
+ },
2713
+ settings: {
2714
+ generalTitle: '常规',
2715
+ generalDescription: '更新组织信息。',
2716
+ readOnlyNote: '只有所有者可以修改设置。',
2717
+ nameLabel: '组织名称',
2718
+ slugLabel: '标识',
2719
+ logoLabel: 'Logo',
2720
+ logoUpload: '上传',
2721
+ logoReplace: '更换',
2722
+ logoClear: '移除',
2723
+ logoUploaded: 'Logo 已上传,保存后生效',
2724
+ logoUploadFailed: '上传 Logo 失败',
2725
+ save: '保存更改',
2726
+ saved: '设置已保存',
2727
+ saveFailed: '保存设置失败',
2728
+ leaveTitle: '退出组织',
2729
+ leaveDescription: '退出后您将失去对该组织的访问权限。',
2730
+ leaveAction: '退出',
2731
+ leaveConfirmTitle: '退出组织?',
2732
+ leaveConfirmDescription: '确定要退出 {{name}} 吗?您的访问权限会立即失效。',
2733
+ leaveConfirmAction: '退出',
2734
+ leftOrg: '您已退出该组织',
2735
+ leaveFailed: '退出组织失败',
2736
+ dangerZone: '危险操作',
2737
+ deleteTitle: '删除组织',
2738
+ deleteDescription: '永久删除该组织及其全部数据。',
2739
+ deleteAction: '删除',
2740
+ deleteConfirmTitle: '删除组织?',
2741
+ deleteConfirmDescription: '此操作不可撤销,所有数据将被永久删除。请输入组织标识以确认。',
2742
+ deleteConfirmSlugLabel: '输入“{{slug}}”以确认',
2743
+ deleteConfirmAction: '删除组织',
2744
+ deleted: '组织已删除',
2745
+ deleteFailed: '删除组织失败',
2746
+ },
2747
+ accept: {
2748
+ title: '您收到一份邀请',
2749
+ description: '您受邀以 {{role}} 身份加入 {{orgName}}。',
2750
+ errorTitle: '邀请不可用',
2751
+ goToOrgs: '前往组织列表',
2752
+ loading: '正在加载邀请…',
2753
+ organization: '组织',
2754
+ role: '角色',
2755
+ expiresAt: '过期时间',
2756
+ accept: '接受邀请',
2757
+ accepted: '邀请已接受',
2758
+ acceptFailed: '接受邀请失败',
2759
+ decline: '拒绝',
2760
+ declined: '邀请已拒绝',
2761
+ declineFailed: '拒绝邀请失败',
2762
+ },
2763
+ current: {
2764
+ label: '当前组织',
2765
+ },
2766
+ switcher: {
2767
+ label: '切换组织',
2768
+ groupLabel: '当前工作组织',
2769
+ groupHint: '新建记录将归属该组织。视图会显示您所有组织的数据。',
2770
+ manageMembers: '管理成员',
2771
+ },
2772
+ },
2529
2773
  notifications: {
2530
2774
  regionLabel: '通知',
2531
2775
  empty: '暂无通知',
@@ -2542,6 +2786,9 @@ const zh = {
2542
2786
  viewApprovals: '查看审批',
2543
2787
  noPendingApprovals: '暂无待审批事项',
2544
2788
  openApprovalsInbox: '打开审批中心',
2789
+ badgeTotal: '共 {{total}} 项',
2790
+ badgeNotifications: '{{unread}} 条通知',
2791
+ badgeApprovals: '{{approvals}} 条待审批',
2545
2792
  },
2546
2793
  publicForm: {
2547
2794
  submit: '提交',
@@ -2563,52 +2810,6 @@ const zh = {
2563
2810
  consentRequired: '请先勾选同意隐私政策。',
2564
2811
  rateLimited: '请再花点时间核对一下您的填写内容,再点击提交。',
2565
2812
  redirectBlocked: '提交成功,但出于安全考虑,跳转链接已被阻止。',
2566
- demo: {
2567
- contactTitle: '联系我们',
2568
- contactDescription: '告诉我们您的项目需求,销售代表将在一个工作日内与您联系。',
2569
- supportTitle: '提交支持请求',
2570
- supportDescription: '描述您遇到的问题,我们的团队会在一个工作日内回复。',
2571
- thankYouSalesTitle: '已收到您的信息,感谢联系!',
2572
- thankYouSalesMessage: '我们的销售代表将在一个工作日内与您取得联系。',
2573
- thankYouSupportTitle: '您的请求已进入处理队列。',
2574
- thankYouSupportMessage: '支持工程师将尽快跟进。如需补充截图,请保留此页面。',
2575
- field: {
2576
- firstName: '名字',
2577
- lastName: '姓氏',
2578
- email: '工作邮箱',
2579
- phone: '电话',
2580
- jobTitle: '职位',
2581
- company: '公司',
2582
- website: '官网',
2583
- industry: '行业',
2584
- companySize: '公司规模',
2585
- howCanWeHelp: '我们可以为您做些什么?',
2586
- subject: '主题',
2587
- description: '问题描述',
2588
- issueType: '问题类型',
2589
- priority: '优先级',
2590
- },
2591
- industry: {
2592
- technology: '科技',
2593
- software: '软件 / SaaS',
2594
- finance: '金融',
2595
- healthcare: '医疗健康',
2596
- retail: '零售',
2597
- other: '其他',
2598
- },
2599
- issueType: {
2600
- question: '咨询',
2601
- problem: '问题',
2602
- bug: '缺陷',
2603
- feature_request: '功能建议',
2604
- },
2605
- priority: {
2606
- low: '低',
2607
- medium: '中',
2608
- high: '高',
2609
- critical: '紧急',
2610
- },
2611
- },
2612
2813
  },
2613
2814
  connectAgent: {
2614
2815
  disabled: {
@@ -2720,6 +2921,7 @@ const zh = {
2720
2921
  retry: '重试',
2721
2922
  errors: {
2722
2923
  expired: '请求在获批前已过期,请重新开始。',
2924
+ accessDenied: '连接请求已被拒绝,请重新开始。',
2723
2925
  bindFailed: '绑定失败。',
2724
2926
  deviceCodeFailed: '设备码请求失败。',
2725
2927
  },
@@ -2776,10 +2978,16 @@ const zh = {
2776
2978
  installedBadge: '已安装 v{{version}}',
2777
2979
  load: {
2778
2980
  failed: '应用市场加载失败',
2779
- failedHint: '本运行时默认指向公共 ObjectStack 云端。请检查运行时是否在线,或通过 <code>OS_CLOUD_URL</code> 指向自托管控制面。',
2981
+ failedHintConfigured: '本运行时通过 {{url}} 上的控制面访问应用市场。请检查该地址是否在线、能否从本运行时访问。',
2982
+ failedHintSameOrigin: '本运行时自己提供应用市场目录。请检查运行时是否在线。',
2780
2983
  packageFailed: '应用加载失败',
2781
2984
  notFound: '未找到。',
2782
2985
  },
2986
+ disabled: {
2987
+ title: '应用市场已关闭',
2988
+ description: '本运行时未配置应用市场,因此这里没有可浏览或安装的内容。',
2989
+ hint: '当运行时以 <code>OS_CLOUD_URL=off</code>(或 <code>none</code>、<code>local</code>、<code>disabled</code>)启动时,这就是预期状态。如需开启应用市场,请把 <code>OS_CLOUD_URL</code> 指向一个控制面并重启运行时。',
2990
+ },
2783
2991
  detail: {
2784
2992
  homepage: '主页',
2785
2993
  installedV: '已安装 · v{{version}}',
@@ -2815,6 +3023,7 @@ const zh = {
2815
3023
  dismiss: '关闭',
2816
3024
  openOnCloud: '在云端打开',
2817
3025
  backHome: '返回首页',
3026
+ updateTo: '更新',
2818
3027
  },
2819
3028
  install: {
2820
3029
  dialogTitle: '安装 {{name}}',
@@ -2831,6 +3040,37 @@ const zh = {
2831
3040
  localManifestConflict: '{{message}}\n提示:本地已有应用占用此 manifest_id,请先从 objectstack.config.ts 中移除。',
2832
3041
  localUnauthorized: '请先登录本运行时再试。',
2833
3042
  localMarketplaceUnavailable: '本运行时未配置 OS_CLOUD_URL,无法访问应用市场目录。',
3043
+ updateTo: '更新 → v{{version}}',
3044
+ installedVersion: '已安装 v{{version}}',
3045
+ },
3046
+ // objectui#3546 — the MarketplacePage "Your organization" strip.
3047
+ org: {
3048
+ heading: '你的组织',
3049
+ install: '安装',
3050
+ installed: '已安装 {{name}}',
3051
+ installedBadge: '已安装',
3052
+ installing: '安装中…',
3053
+ },
3054
+ // ADR-0025 PD4 §3.5/§3.11 — the pre-install consent panel
3055
+ // (PluginDisclosure.tsx). `runtime` is a CLOSED enum: spec
3056
+ // PluginRuntimeSchema = z.enum(['node', 'sandbox', 'worker']).
3057
+ disclosure: {
3058
+ containsCode: '此软件包包含代码',
3059
+ reviewed: '已审核并批准',
3060
+ unreviewed: '尚未审核',
3061
+ signed: '已签名',
3062
+ grantsIntro: '安装后,此软件包将获得以下权限:',
3063
+ services: '平台服务',
3064
+ hooks: '生命周期钩子',
3065
+ network: '网络访问',
3066
+ fs: '文件系统访问',
3067
+ noPermissions: '不请求任何特殊权限。',
3068
+ acknowledge: '我了解此软件包会运行代码,并将获得上述权限。',
3069
+ runtime: {
3070
+ node: '进程内 · 完全信任',
3071
+ sandbox: '沙箱隔离',
3072
+ worker: '进程外',
3073
+ },
2834
3074
  },
2835
3075
  // ADR-0090 D5/D9 — 安装时建议:包声明 isDefault 的权限集建议绑定到
2836
3076
  // everyone/guest 岗位,由管理员在此确认,服务端绝不自动绑定。
@@ -2998,12 +3238,19 @@ const zh = {
2998
3238
  submittedAgo: '提交于{{when}}',
2999
3239
  completedAt: '完成于{{when}}',
3000
3240
  waitingOn: '等待以下审批人',
3241
+ approverNameSeparator: '、',
3242
+ approverUnstaffed: '{{seat}}(暂无在岗人员)',
3001
3243
  history: '审批动态',
3002
3244
  noActions: '暂无操作记录。',
3003
3245
  actSubmit: '提交',
3004
3246
  actApprove: '通过',
3005
3247
  actReject: '拒绝',
3006
3248
  actRecall: '撤回',
3249
+ overrideActionLabel: '越权{{action}}',
3250
+ overrideNotice: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,尚未表态的审批人都会被跳过。此决定将记录为管理员越权。',
3251
+ overrideNoticeWho: '你在该步骤没有审批人席位。继续将使用管理员越权:该步骤会立即结案,并跳过尚未表态的审批人 —— {{who}}。此决定将记录为管理员越权。',
3252
+ viaOverrideChip: '管理员越权',
3253
+ viaOverrideHint: '操作者在该步骤没有审批人席位 —— 经管理员越权通道进入。',
3007
3254
  rawData: '原始数据(JSON)',
3008
3255
  copy: '复制',
3009
3256
  copied: '已复制',
@@ -3072,10 +3319,15 @@ const zh = {
3072
3319
  noResults: '无结果',
3073
3320
  searchField: '搜索 {{label}}…',
3074
3321
  enterId: '输入 {{label}} ID',
3322
+ addValue: '输入值后按回车',
3323
+ removeValue: '移除 {{value}}',
3324
+ rangeStart: '起始值',
3325
+ rangeEnd: '结束值',
3075
3326
  operators: {
3076
3327
  equals: '等于',
3077
3328
  notEquals: '不等于',
3078
3329
  contains: '包含',
3330
+ containsCaseInsensitive: '包含(忽略大小写)',
3079
3331
  notContains: '不包含',
3080
3332
  isEmpty: '为空',
3081
3333
  isNotEmpty: '不为空',
@@ -3088,6 +3340,12 @@ const zh = {
3088
3340
  between: '介于',
3089
3341
  in: '属于',
3090
3342
  notIn: '不属于',
3343
+ startsWith: '以…开头',
3344
+ endsWith: '以…结尾',
3345
+ isNull: '为 null',
3346
+ isNotNull: '不为 null',
3347
+ exists: '已设置',
3348
+ notExists: '未设置',
3091
3349
  },
3092
3350
  },
3093
3351
  sortBuilder: {
@@ -3133,5 +3391,64 @@ const zh = {
3133
3391
  statusIdle: '空闲',
3134
3392
  statusAway: '离开',
3135
3393
  },
3394
+ wizard: {
3395
+ missingRequired: '请填写以下必填字段:{{fields}}',
3396
+ },
3397
+ flowRunner: {
3398
+ title: '输入',
3399
+ submitting: '提交中…',
3400
+ saveAndContinue: '保存并继续',
3401
+ nextStep: '已保存 — 下一步',
3402
+ completed: '流程「{{flow}}」已完成',
3403
+ },
3404
+ appManagement: {
3405
+ title: '应用',
3406
+ subtitle: '管理所有已配置的应用',
3407
+ newApp: '新建应用',
3408
+ searchLabel: '搜索应用',
3409
+ searchPlaceholder: '搜索应用…',
3410
+ selectedCount: '已选择 {{n}} 个',
3411
+ bulkEnable: '启用',
3412
+ bulkDisable: '停用',
3413
+ selectAll: '全选({{n}})',
3414
+ empty: '未找到应用。',
3415
+ defaultBadge: '默认',
3416
+ active: '已启用',
3417
+ inactive: '已停用',
3418
+ selectApp: '选择 {{name}}',
3419
+ openApp: '打开应用',
3420
+ openAppNamed: '打开 {{name}}',
3421
+ editApp: '编辑应用',
3422
+ editAppNamed: '编辑 {{name}}',
3423
+ editWithAi: '用 AI 编辑',
3424
+ editWithAiNamed: '用 AI 编辑 {{name}}',
3425
+ enableApp: '启用应用',
3426
+ disableApp: '停用应用',
3427
+ enableAppNamed: '启用 {{name}}',
3428
+ disableAppNamed: '停用 {{name}}',
3429
+ setDefault: '设为默认',
3430
+ setDefaultNamed: '将 {{name}} 设为默认',
3431
+ deleteApp: '删除应用',
3432
+ deleteAppNamed: '删除 {{name}}',
3433
+ confirmDelete: '再次点击以确认删除',
3434
+ confirmDeleteNamed: '确认删除 {{name}}',
3435
+ toast: {
3436
+ noClient: '无法连接到元数据服务',
3437
+ unknownError: '未知错误',
3438
+ appEnabled: '{{name}} 已启用',
3439
+ appDisabled: '{{name}} 已停用',
3440
+ toggleFailed: '切换应用状态失败:{{reason}}',
3441
+ setDefaultDone: '{{name}} 已设为默认',
3442
+ setDefaultFailed: '设置默认应用失败:{{reason}}',
3443
+ appDeleted: '{{name}} 已删除',
3444
+ deleteFailed: '删除应用失败:{{reason}}',
3445
+ bulkEnabled: '已启用 {{n}} 个应用',
3446
+ bulkDisabled: '已停用 {{n}} 个应用',
3447
+ bulkFailed: '{{n}} 个失败:{{details}}',
3448
+ bulkFailureEntry: '{{name}}({{reason}})',
3449
+ bulkFailureJoiner: ';',
3450
+ bulkOperationFailed: '批量操作失败:{{reason}}',
3451
+ },
3452
+ },
3136
3453
  };
3137
3454
  export default zh;