@object-ui/i18n 15.0.0 → 16.1.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.
@@ -1,4 +1,11 @@
1
1
  declare const pt: {
2
+ capability: {
3
+ group: {
4
+ platform: string;
5
+ org: string;
6
+ other: string;
7
+ };
8
+ };
2
9
  lookup: {
3
10
  recentlyUsed: string;
4
11
  allResults: string;
@@ -69,6 +76,7 @@ declare const pt: {
69
76
  resultDialog: {
70
77
  defaultTitle: string;
71
78
  acknowledge: string;
79
+ copyAll: string;
72
80
  };
73
81
  };
74
82
  validation: {
@@ -1483,6 +1491,7 @@ declare const pt: {
1483
1491
  requiredError: string;
1484
1492
  cancel: string;
1485
1493
  confirm: string;
1494
+ uploading: string;
1486
1495
  defaultActionTitle: string;
1487
1496
  ok: string;
1488
1497
  lookupPlaceholder: string;
@@ -1,4 +1,12 @@
1
1
  const pt = {
2
+ // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
+ capability: {
4
+ group: {
5
+ platform: 'Plataforma',
6
+ org: 'Organização',
7
+ other: 'Outro',
8
+ },
9
+ },
2
10
  lookup: {
3
11
  recentlyUsed: 'Usados recentemente',
4
12
  allResults: 'Todos os resultados',
@@ -67,8 +75,9 @@ const pt = {
67
75
  },
68
76
  actions: {
69
77
  resultDialog: {
70
- defaultTitle: 'Save this value now',
71
- acknowledge: 'I have saved this',
78
+ defaultTitle: 'Guarde este valor agora',
79
+ acknowledge: 'Eu o salvei',
80
+ copyAll: 'Copiar tudo',
72
81
  },
73
82
  },
74
83
  validation: {
@@ -1483,6 +1492,7 @@ const pt = {
1483
1492
  requiredError: "{{label}} é obrigatório",
1484
1493
  cancel: "Cancelar",
1485
1494
  confirm: "Confirmar",
1495
+ uploading: "Enviando…",
1486
1496
  defaultActionTitle: "Ação",
1487
1497
  ok: "OK",
1488
1498
  lookupPlaceholder: "Colar ID do registro (UUID) para {{label}}",
@@ -1,4 +1,11 @@
1
1
  declare const ru: {
2
+ capability: {
3
+ group: {
4
+ platform: string;
5
+ org: string;
6
+ other: string;
7
+ };
8
+ };
2
9
  lookup: {
3
10
  recentlyUsed: string;
4
11
  allResults: string;
@@ -69,6 +76,7 @@ declare const ru: {
69
76
  resultDialog: {
70
77
  defaultTitle: string;
71
78
  acknowledge: string;
79
+ copyAll: string;
72
80
  };
73
81
  };
74
82
  validation: {
@@ -1483,6 +1491,7 @@ declare const ru: {
1483
1491
  requiredError: string;
1484
1492
  cancel: string;
1485
1493
  confirm: string;
1494
+ uploading: string;
1486
1495
  defaultActionTitle: string;
1487
1496
  ok: string;
1488
1497
  lookupPlaceholder: string;
@@ -1,4 +1,12 @@
1
1
  const ru = {
2
+ // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
+ capability: {
4
+ group: {
5
+ platform: 'Платформа',
6
+ org: 'Организация',
7
+ other: 'Другое',
8
+ },
9
+ },
2
10
  lookup: {
3
11
  recentlyUsed: 'Недавние',
4
12
  allResults: 'Все результаты',
@@ -67,8 +75,9 @@ const ru = {
67
75
  },
68
76
  actions: {
69
77
  resultDialog: {
70
- defaultTitle: 'Save this value now',
71
- acknowledge: 'I have saved this',
78
+ defaultTitle: 'Сохраните это значение сейчас',
79
+ acknowledge: 'Я сохранил(а) это',
80
+ copyAll: 'Копировать всё',
72
81
  },
73
82
  },
74
83
  validation: {
@@ -1483,6 +1492,7 @@ const ru = {
1483
1492
  requiredError: "{{label}} обязательно",
1484
1493
  cancel: "Отмена",
1485
1494
  confirm: "Подтвердить",
1495
+ uploading: "Загрузка…",
1486
1496
  defaultActionTitle: "Действие",
1487
1497
  ok: "ОК",
1488
1498
  lookupPlaceholder: "Вставить ID записи (UUID) для {{label}}",
@@ -2,6 +2,22 @@
2
2
  * 中文 (zh) - Chinese language pack for Object UI
3
3
  */
4
4
  declare const zh: {
5
+ readonly capability: {
6
+ readonly group: {
7
+ readonly platform: "平台";
8
+ readonly org: "组织";
9
+ readonly other: "其他";
10
+ };
11
+ readonly label: {
12
+ readonly manage_users: "管理用户";
13
+ readonly manage_org_users: "管理组织用户";
14
+ readonly manage_metadata: "管理元数据";
15
+ readonly manage_platform_settings: "管理平台设置";
16
+ readonly setup_access: "访问 Setup";
17
+ readonly setup_write: "保存设置";
18
+ readonly studio_access: "访问 Studio";
19
+ };
20
+ };
5
21
  readonly lookup: {
6
22
  readonly recentlyUsed: "最近使用";
7
23
  readonly allResults: "全部结果";
@@ -70,8 +86,9 @@ declare const zh: {
70
86
  };
71
87
  readonly actions: {
72
88
  readonly resultDialog: {
73
- readonly defaultTitle: "Save this value now";
74
- readonly acknowledge: "I have saved this";
89
+ readonly defaultTitle: "请立即保存此值";
90
+ readonly acknowledge: "我已保存";
91
+ readonly copyAll: "全部复制";
75
92
  };
76
93
  };
77
94
  readonly validation: {
@@ -407,6 +424,7 @@ declare const zh: {
407
424
  };
408
425
  };
409
426
  readonly showAll: "显示全部";
427
+ readonly refresh: "刷新";
410
428
  readonly pullToRefresh: "下拉刷新";
411
429
  readonly refreshing: "刷新中…";
412
430
  readonly share: "分享";
@@ -433,6 +451,11 @@ declare const zh: {
433
451
  readonly title: "由平台管理";
434
452
  readonly body: "当源记录上的操作运行时,这里的行会自动创建。下方列表是只读监控界面——行级操作(批准、撤回、重发等)在每一行上。";
435
453
  };
454
+ readonly systemWritable: {
455
+ readonly short: "平台架构";
456
+ readonly title: "平台定义,管理员可写";
457
+ readonly body: "此对象的架构由平台定义,但其数据行可在此处创建和编辑。谁可以写入由委派管理和记录级安全控制,而非此标记。";
458
+ };
436
459
  readonly appendOnly: {
437
460
  readonly short: "只读 · 审计日志";
438
461
  readonly title: "只读历史记录";
@@ -520,14 +543,6 @@ declare const zh: {
520
543
  readonly removeDependency: "移除依赖";
521
544
  readonly noCandidates: "无可用任务";
522
545
  readonly searchTasks: "搜索任务…";
523
- readonly qrcode: "移动端二维码";
524
- };
525
- readonly qr: {
526
- readonly title: "在手机上打开";
527
- readonly hint: "用手机扫码打开详情页";
528
- readonly copy: "复制链接";
529
- readonly copied: "已复制";
530
- readonly close: "关闭";
531
546
  };
532
547
  readonly delete: {
533
548
  readonly title: "删除此任务?";
@@ -551,6 +566,14 @@ declare const zh: {
551
566
  readonly confirm: "自动重新排程";
552
567
  readonly cancel: "保持不变";
553
568
  };
569
+ readonly autoScheduleDlg: {
570
+ readonly title: "自动排程";
571
+ readonly body: "将顺延 {count} 个任务以满足依赖约束,是否执行?";
572
+ readonly skipped: "另有 {count} 项因锁定/无权限跳过。";
573
+ readonly confirm: "执行";
574
+ readonly cancel: "取消";
575
+ readonly none: "依赖均满足,无需排程";
576
+ };
554
577
  readonly resource: {
555
578
  readonly header: "资源";
556
579
  readonly peak: "峰值";
@@ -1356,6 +1379,7 @@ declare const zh: {
1356
1379
  readonly publishOk: "已发布,对象已生效。";
1357
1380
  readonly seedWarn: "已发布,但部分示例数据未能载入。";
1358
1381
  readonly openBuiltApp: "打开应用";
1382
+ readonly designBuiltApp: "进入 Studio 继续完善";
1359
1383
  readonly previewDraft: "预览";
1360
1384
  readonly previewApp: "预览应用";
1361
1385
  readonly resizeSplit: "调整对话与预览的宽度";
@@ -1429,14 +1453,16 @@ declare const zh: {
1429
1453
  readonly identityImport: {
1430
1454
  readonly policyTitle: "导入用户的登录方式";
1431
1455
  readonly policy: {
1432
- readonly none: "不设密码(推荐)";
1456
+ readonly auto: "自动(推荐)";
1433
1457
  readonly invite: "发送邀请";
1434
1458
  readonly temporary: "临时密码";
1459
+ readonly none: "不设密码(仅身份)";
1435
1460
  };
1436
1461
  readonly policyHint: {
1437
- readonly none: "用户通过手机验证码、魔法链接或重置链接首次登录,之后自行设置密码。";
1438
- readonly invite: "为每个新建用户发送\"设置密码\"邮件(仅手机号的行发送邀请短信)。需要已配置邮件/短信服务。";
1462
+ readonly auto: "可触达的用户收到邀请(邮件或短信);无法触达的行生成一次性密码,仅在结果页显示一次。无论是否配置邮件/短信服务都可用。";
1463
+ readonly invite: "为每个新建用户发送\"设置密码\"邮件(仅手机号的行发送邀请短信)。需要已配置邮件/短信服务——无法触达的行会失败。";
1439
1464
  readonly temporary: "适用于未配置邮件/短信的部署:为每个新建用户生成一次性密码,仅在结果页显示一次,首次登录强制修改。";
1465
+ readonly none: "用户通过手机验证码、魔法链接或重置链接首次登录,之后自行设置密码。";
1440
1466
  };
1441
1467
  readonly passwordsNote: "临时密码——仅显示一次,不会被保存。请立即保存;用户首次登录时必须修改。";
1442
1468
  readonly passwordsMore: "更多条目已省略——请使用下载。";
@@ -1539,6 +1565,10 @@ declare const zh: {
1539
1565
  readonly parentField: "父级字段";
1540
1566
  readonly parentFieldHelp: "指向同一对象的父级字段,决定树的层级(仅自引用字段可选)。";
1541
1567
  readonly newView: "新视图";
1568
+ readonly viewName: "名称";
1569
+ readonly viewNameHelp: "机器标识(snake_case),根据标题自动生成,可自行修改。";
1570
+ readonly viewNameRequired: "请输入标识(小写字母、数字、下划线)。非拉丁标题不会自动生成。";
1571
+ readonly viewNameInvalid: "仅限小写字母、数字和下划线,且以字母或下划线开头。";
1542
1572
  readonly typeOptions: "类型选项";
1543
1573
  readonly groupByField: "分组字段";
1544
1574
  readonly groupByFieldHelp: "看板会按该字段的不同取值分列。";
@@ -1667,6 +1697,11 @@ declare const zh: {
1667
1697
  readonly signUpText: "注册";
1668
1698
  readonly signingIn: "正在登录…";
1669
1699
  readonly ssoHandoff: "继续前往 {{target}}";
1700
+ readonly devAdminHint: {
1701
+ readonly title: "开发实例";
1702
+ readonly body: "可使用内置的开发管理员登录:";
1703
+ readonly dismiss: "关闭";
1704
+ };
1670
1705
  readonly errors: {
1671
1706
  readonly invalidCredentials: "邮箱或密码错误,请重试。";
1672
1707
  readonly emailNotVerified: "请先验证您的邮箱后再登录。";
@@ -2140,6 +2175,7 @@ declare const zh: {
2140
2175
  readonly lookupHelpText: "请输入引用记录的 ID。可视化选择器即将上线。";
2141
2176
  readonly cancel: "取消";
2142
2177
  readonly confirm: "确认";
2178
+ readonly uploading: "上传中…";
2143
2179
  readonly defaultActionTitle: "操作";
2144
2180
  readonly ok: "确定";
2145
2181
  };
@@ -2,6 +2,25 @@
2
2
  * 中文 (zh) - Chinese language pack for Object UI
3
3
  */
4
4
  const zh = {
5
+ // objectui#2600 B5 — 能力选择器的作用域分组标题(能力标签本身来自
6
+ // sys_capability 注册表,这里只本地化分组标题这类 UI 字符串)。
7
+ capability: {
8
+ group: {
9
+ platform: '平台',
10
+ org: '组织',
11
+ other: '其他',
12
+ },
13
+ // 精选平台能力标签(objectui#2600 B5)。注册表 label 为英文,这里本地化。
14
+ label: {
15
+ manage_users: '管理用户',
16
+ manage_org_users: '管理组织用户',
17
+ manage_metadata: '管理元数据',
18
+ manage_platform_settings: '管理平台设置',
19
+ setup_access: '访问 Setup',
20
+ setup_write: '保存设置',
21
+ studio_access: '访问 Studio',
22
+ },
23
+ },
5
24
  lookup: {
6
25
  recentlyUsed: '最近使用',
7
26
  allResults: '全部结果',
@@ -70,8 +89,9 @@ const zh = {
70
89
  },
71
90
  actions: {
72
91
  resultDialog: {
73
- defaultTitle: 'Save this value now',
74
- acknowledge: 'I have saved this',
92
+ defaultTitle: '请立即保存此值',
93
+ acknowledge: '我已保存',
94
+ copyAll: '全部复制',
75
95
  },
76
96
  },
77
97
  validation: {
@@ -416,6 +436,7 @@ const zh = {
416
436
  },
417
437
  },
418
438
  showAll: '显示全部',
439
+ refresh: '刷新',
419
440
  pullToRefresh: '下拉刷新',
420
441
  refreshing: '刷新中…',
421
442
  share: '分享',
@@ -442,6 +463,11 @@ const zh = {
442
463
  title: '由平台管理',
443
464
  body: '当源记录上的操作运行时,这里的行会自动创建。下方列表是只读监控界面——行级操作(批准、撤回、重发等)在每一行上。',
444
465
  },
466
+ systemWritable: {
467
+ short: '平台架构',
468
+ title: '平台定义,管理员可写',
469
+ body: '此对象的架构由平台定义,但其数据行可在此处创建和编辑。谁可以写入由委派管理和记录级安全控制,而非此标记。',
470
+ },
445
471
  appendOnly: {
446
472
  short: '只读 · 审计日志',
447
473
  title: '只读历史记录',
@@ -529,14 +555,6 @@ const zh = {
529
555
  removeDependency: '移除依赖',
530
556
  noCandidates: '无可用任务',
531
557
  searchTasks: '搜索任务…',
532
- qrcode: '移动端二维码',
533
- },
534
- qr: {
535
- title: '在手机上打开',
536
- hint: '用手机扫码打开详情页',
537
- copy: '复制链接',
538
- copied: '已复制',
539
- close: '关闭',
540
558
  },
541
559
  delete: {
542
560
  title: '删除此任务?',
@@ -560,6 +578,14 @@ const zh = {
560
578
  confirm: '自动重新排程',
561
579
  cancel: '保持不变',
562
580
  },
581
+ autoScheduleDlg: {
582
+ title: '自动排程',
583
+ body: '将顺延 {count} 个任务以满足依赖约束,是否执行?',
584
+ skipped: '另有 {count} 项因锁定/无权限跳过。',
585
+ confirm: '执行',
586
+ cancel: '取消',
587
+ none: '依赖均满足,无需排程',
588
+ },
563
589
  resource: {
564
590
  header: '资源',
565
591
  peak: '峰值',
@@ -1382,6 +1408,7 @@ const zh = {
1382
1408
  publishOk: '已发布,对象已生效。',
1383
1409
  seedWarn: '已发布,但部分示例数据未能载入。',
1384
1410
  openBuiltApp: '打开应用',
1411
+ designBuiltApp: '进入 Studio 继续完善',
1385
1412
  previewDraft: '预览',
1386
1413
  previewApp: '预览应用',
1387
1414
  resizeSplit: '调整对话与预览的宽度',
@@ -1461,14 +1488,16 @@ const zh = {
1461
1488
  identityImport: {
1462
1489
  policyTitle: '导入用户的登录方式',
1463
1490
  policy: {
1464
- none: '不设密码(推荐)',
1491
+ auto: '自动(推荐)',
1465
1492
  invite: '发送邀请',
1466
1493
  temporary: '临时密码',
1494
+ none: '不设密码(仅身份)',
1467
1495
  },
1468
1496
  policyHint: {
1469
- none: '用户通过手机验证码、魔法链接或重置链接首次登录,之后自行设置密码。',
1470
- invite: '为每个新建用户发送"设置密码"邮件(仅手机号的行发送邀请短信)。需要已配置邮件/短信服务。',
1497
+ auto: '可触达的用户收到邀请(邮件或短信);无法触达的行生成一次性密码,仅在结果页显示一次。无论是否配置邮件/短信服务都可用。',
1498
+ invite: '为每个新建用户发送"设置密码"邮件(仅手机号的行发送邀请短信)。需要已配置邮件/短信服务——无法触达的行会失败。',
1471
1499
  temporary: '适用于未配置邮件/短信的部署:为每个新建用户生成一次性密码,仅在结果页显示一次,首次登录强制修改。',
1500
+ none: '用户通过手机验证码、魔法链接或重置链接首次登录,之后自行设置密码。',
1472
1501
  },
1473
1502
  passwordsNote: '临时密码——仅显示一次,不会被保存。请立即保存;用户首次登录时必须修改。',
1474
1503
  passwordsMore: '更多条目已省略——请使用下载。',
@@ -1571,6 +1600,10 @@ const zh = {
1571
1600
  parentField: '父级字段',
1572
1601
  parentFieldHelp: '指向同一对象的父级字段,决定树的层级(仅自引用字段可选)。',
1573
1602
  newView: '新视图',
1603
+ viewName: '名称',
1604
+ viewNameHelp: '机器标识(snake_case),根据标题自动生成,可自行修改。',
1605
+ viewNameRequired: '请输入标识(小写字母、数字、下划线)。非拉丁标题不会自动生成。',
1606
+ viewNameInvalid: '仅限小写字母、数字和下划线,且以字母或下划线开头。',
1574
1607
  typeOptions: '类型选项',
1575
1608
  groupByField: '分组字段',
1576
1609
  groupByFieldHelp: '看板会按该字段的不同取值分列。',
@@ -1699,6 +1732,11 @@ const zh = {
1699
1732
  signUpText: '注册',
1700
1733
  signingIn: '正在登录…',
1701
1734
  ssoHandoff: '继续前往 {{target}}',
1735
+ devAdminHint: {
1736
+ title: '开发实例',
1737
+ body: '可使用内置的开发管理员登录:',
1738
+ dismiss: '关闭',
1739
+ },
1702
1740
  errors: {
1703
1741
  invalidCredentials: '邮箱或密码错误,请重试。',
1704
1742
  emailNotVerified: '请先验证您的邮箱后再登录。',
@@ -2175,6 +2213,7 @@ const zh = {
2175
2213
  lookupHelpText: '请输入引用记录的 ID。可视化选择器即将上线。',
2176
2214
  cancel: '取消',
2177
2215
  confirm: '确认',
2216
+ uploading: '上传中…',
2178
2217
  defaultActionTitle: '操作',
2179
2218
  ok: '确定',
2180
2219
  },
@@ -204,6 +204,28 @@ export declare function useObjectLabel(): {
204
204
  * metadata's literal string; undefined when nothing resolves.
205
205
  */
206
206
  actionDescription: (objectName: string | undefined, actionName: string | undefined, fallback?: string) => string | undefined;
207
+ /**
208
+ * Resolve a translated copy of an action's post-success RESULT DIALOG
209
+ * (`title` / `description` / `acknowledge` + per-field labels).
210
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.resultDialog.*`,
211
+ * falling back to `{ns}.globalActions.{actionName}.resultDialog.*` when
212
+ * objectName is omitted, then to the metadata's literal strings.
213
+ *
214
+ * The `fields` translation node is keyed by the LITERAL result-field path
215
+ * from the action metadata (may contain dots, e.g. `"user.email"`), so it
216
+ * is fetched whole with `returnObjects` and indexed directly — never
217
+ * resolved through a dotted i18next key.
218
+ */
219
+ actionResultDialog: <T extends {
220
+ title?: string;
221
+ description?: string;
222
+ acknowledge?: string;
223
+ fields?: Array<{
224
+ path: string;
225
+ label?: string;
226
+ [key: string]: any;
227
+ }>;
228
+ }>(objectName: string | undefined, actionName: string | undefined, spec: T | undefined) => T | undefined;
207
229
  /**
208
230
  * Resolve translated action-PARAMETER text (label / placeholder / helpText).
209
231
  * Convention: `{ns}.objects.{objectName}._actions.{actionName}.params.{paramName}.{attr}`.
@@ -224,17 +246,211 @@ export declare function useObjectLabel(): {
224
246
  * may be rendered outside an i18n context.
225
247
  */
226
248
  export declare function useSafeFieldLabel(): {
227
- fieldLabel: (_objectName: string, _fieldName: string, fallback: string) => string;
228
- translateOptions: (_objectName: string, _fieldName: string, options: Array<{
249
+ /**
250
+ * Resolve translated object label, falling back to objectDef.label.
251
+ */
252
+ objectLabel: (objectDef: {
253
+ name: string;
254
+ label: string;
255
+ }) => string;
256
+ /**
257
+ * Resolve translated object description, falling back to objectDef.description.
258
+ */
259
+ objectDescription: (objectDef: {
260
+ name: string;
261
+ description?: string;
262
+ }) => string | undefined;
263
+ /**
264
+ * Resolve translated field label, falling back to the provided fallback string.
265
+ */
266
+ fieldLabel: (objectName: string, fieldName: string, fallback: string) => string;
267
+ /**
268
+ * Resolve a translated select option label for a given object field.
269
+ * Falls back to the provided fallback (usually the English option label).
270
+ */
271
+ fieldOptionLabel: (objectName: string, fieldName: string, optionValue: string, fallback: string) => string;
272
+ /**
273
+ * Translate all options for a given field, returning a new options array
274
+ * with translated labels. Pass the objectName and fieldName to look up
275
+ * translations; the original label is used as fallback.
276
+ */
277
+ translateOptions: (objectName: string, fieldName: string, options: Array<{
229
278
  value: string;
230
279
  label: string;
231
280
  [key: string]: any;
232
- }>) => {
233
- [key: string]: any;
281
+ }>) => Array<{
234
282
  value: string;
235
283
  label: string;
236
- }[];
237
- fieldOptionLabel: (_objectName: string, _fieldName: string, _optionValue: string, fallback: string) => string;
238
- sectionLabel: (_objectName: string, _sectionName: string, fallback: string) => string;
239
- actionLabel: (_objectName: string | undefined, _actionName: string, fallback: string) => string;
284
+ [key: string]: any;
285
+ }>;
286
+ /**
287
+ * Resolve translated app label, falling back to appDef.label.
288
+ * Looks up `{ns}.apps.{appName}.label` from loaded i18next resources.
289
+ */
290
+ appLabel: (appDef: {
291
+ name: string;
292
+ label?: string;
293
+ }) => string;
294
+ /**
295
+ * Resolve translated app description, falling back to appDef.description.
296
+ * Returns the translated value even when metadata has no description —
297
+ * translation-only descriptions (defined only in i18n bundles) are common
298
+ * in examples where the app metadata is English-only.
299
+ */
300
+ appDescription: (appDef: {
301
+ name: string;
302
+ description?: string;
303
+ }) => string | undefined;
304
+ /**
305
+ * Resolve translated label for a navigation group within an app.
306
+ * Convention: `{ns}.apps.{appName}.navigation.{groupId}.label`.
307
+ *
308
+ * Mirrors `objectLabel`/`dashboardLabel` so app metadata can keep
309
+ * English fallbacks while translation packs supply localised
310
+ * sidebar group labels (e.g. "Sales" → "销售") without explicit
311
+ * I18nLabel `{ key, defaultValue }` annotations.
312
+ */
313
+ navGroupLabel: (appName: string, groupId: string, fallback: string) => string;
314
+ /**
315
+ * Resolve translated dashboard label, falling back to dashboardDef.label.
316
+ * Convention: `{ns}.dashboards.{dashboardName}.label`.
317
+ */
318
+ dashboardLabel: (dashboardDef: {
319
+ name: string;
320
+ label?: string;
321
+ }) => string;
322
+ /**
323
+ * Resolve translated dashboard description, falling back to
324
+ * dashboardDef.description. Returns undefined when neither metadata nor
325
+ * translation provides one.
326
+ * Convention: `{ns}.dashboards.{dashboardName}.description`.
327
+ */
328
+ dashboardDescription: (dashboardDef: {
329
+ name: string;
330
+ description?: string;
331
+ }) => string | undefined;
332
+ /**
333
+ * Resolve translated dashboard header-action label.
334
+ * Convention: `{ns}.dashboards.{dashboardName}.actions.{actionKey}.label`.
335
+ * The actionKey is typically the action's `actionUrl` (e.g.
336
+ * `create_opportunity`) or its English label slugified.
337
+ */
338
+ dashboardActionLabel: (dashboardName: string, actionKey: string, fallback: string) => string;
339
+ /**
340
+ * Resolve translated widget title within a dashboard.
341
+ * Convention: `{ns}.dashboards.{dashboardName}.widgets.{widgetId}.title`.
342
+ */
343
+ widgetTitle: (dashboardName: string, widgetId: string, fallback: string) => string;
344
+ /**
345
+ * Resolve translated widget description within a dashboard.
346
+ * Convention: `{ns}.dashboards.{dashboardName}.widgets.{widgetId}.description`.
347
+ * Returns undefined when neither metadata nor translation provides one.
348
+ */
349
+ widgetDescription: (dashboardName: string, widgetId: string, fallback?: string) => string | undefined;
350
+ /**
351
+ * Resolve translated page label, falling back to pageDef.label.
352
+ * Convention: `{ns}.pages.{pageName}.label`.
353
+ */
354
+ pageLabel: (pageDef: {
355
+ name: string;
356
+ label?: string;
357
+ }) => string;
358
+ /**
359
+ * Resolve translated report label, falling back to reportDef.label.
360
+ * Convention: `{ns}.reports.{reportName}.label`.
361
+ */
362
+ reportLabel: (reportDef: {
363
+ name: string;
364
+ label?: string;
365
+ }) => string;
366
+ /**
367
+ * Resolve translated list-view label.
368
+ * Convention (per @objectstack/spec): `{ns}.objects.{objectName}._views.{viewName}.label`.
369
+ */
370
+ viewLabel: (objectName: string, viewName: string, fallback: string) => string;
371
+ /**
372
+ * Resolve translated list-view description.
373
+ * Convention: `{ns}.objects.{objectName}._views.{viewName}.description`.
374
+ */
375
+ viewDescription: (objectName: string, viewName: string, fallback?: string) => string | undefined;
376
+ /**
377
+ * Resolve translated list-view emptyState. Returns a {title, message}
378
+ * tuple with each field independently translated. Convention:
379
+ * `{ns}.objects.{objectName}._views.{viewName}.emptyState.title`
380
+ * `{ns}.objects.{objectName}._views.{viewName}.emptyState.message`
381
+ */
382
+ viewEmptyState: (objectName: string, viewName: string, fallback: {
383
+ title?: string;
384
+ message?: string;
385
+ icon?: string;
386
+ } | undefined) => {
387
+ title: string | undefined;
388
+ message: string | undefined;
389
+ icon?: string;
390
+ } | undefined;
391
+ /**
392
+ * Resolve translated form-section label.
393
+ * Convention: `{ns}.objects.{objectName}._sections.{sectionName}.label`.
394
+ */
395
+ sectionLabel: (objectName: string, sectionName: string, fallback: string) => string;
396
+ /**
397
+ * Resolve translated action label.
398
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.label`.
399
+ * Falls back to `{ns}.globalActions.{actionName}.label` when objectName is omitted.
400
+ */
401
+ actionLabel: (objectName: string | undefined, actionName: string, fallback: string) => string;
402
+ /**
403
+ * Resolve translated action confirmation prompt.
404
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.confirmText`.
405
+ * Returns undefined when no translation and no fallback exist.
406
+ */
407
+ actionConfirm: (objectName: string | undefined, actionName: string, fallback?: string) => string | undefined;
408
+ /**
409
+ * Resolve translated action success message.
410
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.successMessage`.
411
+ */
412
+ actionSuccess: (objectName: string | undefined, actionName: string, fallback?: string) => string | undefined;
413
+ /**
414
+ * Resolve translated action description (the explanatory line shown in the
415
+ * action's param dialog / sheet / drawer header).
416
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.description`.
417
+ * Falls back to `{ns}.globalActions.{actionName}.description`, then the
418
+ * metadata's literal string; undefined when nothing resolves.
419
+ */
420
+ actionDescription: (objectName: string | undefined, actionName: string | undefined, fallback?: string) => string | undefined;
421
+ /**
422
+ * Resolve a translated copy of an action's post-success RESULT DIALOG
423
+ * (`title` / `description` / `acknowledge` + per-field labels).
424
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.resultDialog.*`,
425
+ * falling back to `{ns}.globalActions.{actionName}.resultDialog.*` when
426
+ * objectName is omitted, then to the metadata's literal strings.
427
+ *
428
+ * The `fields` translation node is keyed by the LITERAL result-field path
429
+ * from the action metadata (may contain dots, e.g. `"user.email"`), so it
430
+ * is fetched whole with `returnObjects` and indexed directly — never
431
+ * resolved through a dotted i18next key.
432
+ */
433
+ actionResultDialog: <T extends {
434
+ title?: string;
435
+ description?: string;
436
+ acknowledge?: string;
437
+ fields?: Array<{
438
+ path: string;
439
+ label?: string;
440
+ [key: string]: any;
441
+ }>;
442
+ }>(objectName: string | undefined, actionName: string | undefined, spec: T | undefined) => T | undefined;
443
+ /**
444
+ * Resolve translated action-PARAMETER text (label / placeholder / helpText).
445
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.params.{paramName}.{attr}`.
446
+ * Falls back to the provided value (the metadata's literal string) when no
447
+ * translation exists, so untranslated params keep rendering as authored.
448
+ */
449
+ actionParamText: (objectName: string | undefined, actionName: string | undefined, paramName: string, attr: "label" | "placeholder" | "helpText", fallback?: string) => string | undefined;
450
+ /**
451
+ * Resolve a translated action-parameter SELECT OPTION label.
452
+ * Convention: `{ns}.objects.{objectName}._actions.{actionName}.params.{paramName}.options.{optionValue}`.
453
+ * Falls back to the provided (English metadata) label when untranslated.
454
+ */
455
+ actionParamOptionLabel: (objectName: string | undefined, actionName: string | undefined, paramName: string, optionValue: string, fallback: string) => string;
240
456
  };