@object-ui/i18n 13.2.0 → 14.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.
@@ -105,6 +105,9 @@ const ru = {
105
105
  deleteSuccess: "{{object}} удалён",
106
106
  },
107
107
  fields: {
108
+ relativeDate: {
109
+ overdue: "Просрочено на {{count}} дн.",
110
+ },
108
111
  richText: {
109
112
  format: "Формат: {{format}}",
110
113
  basicEditorHint: "Редактор форматированного текста (базовый)",
@@ -280,6 +283,31 @@ const ru = {
280
283
  addGroup: "Добавить поле группировки",
281
284
  collapsedByDefault: "Свёрнуто по умолчанию",
282
285
  removeGroup: "Удалить",
286
+ inlineEditShort: "Встроенное редактирование",
287
+ inlineEditLabel: "Редактировать записи в таблице (щёлкните ячейку для редактирования)",
288
+ recordEditingTitle: "Редактирование записей",
289
+ },
290
+ managedByBadge: {
291
+ config: {
292
+ short: "Конфигурация",
293
+ title: "Конфигурация администратора",
294
+ body: "Эти строки определяют поведение платформы во время выполнения. Создавайте их здесь; создаваемые данные времени выполнения хранятся в отдельной таблице.",
295
+ },
296
+ system: {
297
+ short: "Управляется системой",
298
+ title: "Управляется платформой",
299
+ body: "Строки создаются автоматически при выполнении действий над исходной записью. Список — это панель мониторинга только для чтения; действия на уровне строк (Утвердить, Отозвать, Отправить повторно и т. д.) находятся у каждой строки.",
300
+ },
301
+ appendOnly: {
302
+ short: "Только чтение · Журнал аудита",
303
+ title: "Историческая запись только для чтения",
304
+ body: "Неизменяемый журнал аудита. Строки нельзя создавать, изменять или удалять из интерфейса — платформа записывает их при наступлении событий. Используйте экспорт для проверки соответствия.",
305
+ },
306
+ betterAuth: {
307
+ short: "Идентификация",
308
+ title: "Управляется поставщиком удостоверений",
309
+ body: "Схема этого объекта принадлежит {{provider}}. Прямые изменения обходят хеширование паролей, проверку сессий, двухфакторные проверки и хуки аудита. Управляйте этими записями через процессы входа, приглашения и безопасности вашего поставщика аутентификации.",
310
+ },
283
311
  },
284
312
  kanban: {
285
313
  addCard: "Добавить карточку",
@@ -1222,6 +1250,43 @@ const ru = {
1222
1250
  tenantHostHint: "Вы входите в это рабочее пространство",
1223
1251
  },
1224
1252
  },
1253
+ profile: {
1254
+ title: "Профиль",
1255
+ subtitle: "Управляйте настройками своей учётной записи",
1256
+ saving: "Сохранение…",
1257
+ avatar: {
1258
+ upload: "Загрузить",
1259
+ replace: "Заменить",
1260
+ remove: "Удалить",
1261
+ },
1262
+ info: {
1263
+ title: "Личная информация",
1264
+ description: "Обновите имя и просмотрите данные учётной записи",
1265
+ saved: "Профиль успешно обновлён.",
1266
+ name: "Имя",
1267
+ email: "Эл. почта",
1268
+ emailImmutable: "Адрес электронной почты изменить нельзя.",
1269
+ role: "Роль",
1270
+ save: "Сохранить изменения",
1271
+ },
1272
+ password: {
1273
+ changeTitle: "Изменить пароль",
1274
+ setTitle: "Задать локальный пароль",
1275
+ changeDescription: "Обновите пароль, который вы используете для входа в эту среду.",
1276
+ setDescription: "Вы вошли через единый вход (SSO). Задайте локальный пароль, чтобы также входить в эту среду по электронной почте и паролю.",
1277
+ current: "Текущий пароль",
1278
+ new: "Новый пароль",
1279
+ password: "Пароль",
1280
+ confirm: "Подтвердите пароль",
1281
+ tooShort: "Пароль должен содержать не менее 8 символов",
1282
+ mismatch: "Пароли не совпадают",
1283
+ enterCurrent: "Введите текущий пароль",
1284
+ changed: "Пароль изменён.",
1285
+ localSet: "Локальный пароль задан. Теперь вы можете входить в эту среду по электронной почте и паролю.",
1286
+ changeAction: "Изменить пароль",
1287
+ setAction: "Задать пароль",
1288
+ },
1289
+ },
1225
1290
  errors: {
1226
1291
  networkError: "Ошибка сети. Проверьте подключение к интернету.",
1227
1292
  serverError: "Ошибка сервера. Попробуйте позже.",
@@ -112,6 +112,9 @@ declare const zh: {
112
112
  readonly deleteSuccess: "{{object}}删除成功";
113
113
  };
114
114
  readonly fields: {
115
+ readonly relativeDate: {
116
+ readonly overdue: "逾期 {{count}} 天";
117
+ };
115
118
  readonly richText: {
116
119
  readonly format: "格式: {{format}}";
117
120
  readonly basicEditorHint: "富文本编辑器(基础)";
@@ -254,6 +257,7 @@ declare const zh: {
254
257
  };
255
258
  readonly downloadTemplate: "下载模板";
256
259
  readonly downloadTemplateHint: "获取带正确列的 CSV(必填字段标 *)。";
260
+ readonly templateFileName: "{{object}}-导入模板";
257
261
  readonly validate: "校验数据";
258
262
  readonly validateHint: "导入前在服务端逐行校验。";
259
263
  readonly validating: "校验中…";
@@ -418,6 +422,28 @@ declare const zh: {
418
422
  readonly inlineEditLabel: "行内编辑记录(点击单元格进行编辑)";
419
423
  readonly recordEditingTitle: "记录编辑";
420
424
  };
425
+ readonly managedByBadge: {
426
+ readonly config: {
427
+ readonly short: "管理配置";
428
+ readonly title: "管理员配置";
429
+ readonly body: "这些记录定义平台的运行时行为。请在此处编写配置;其产生的运行时数据存放在单独的表中。";
430
+ };
431
+ readonly system: {
432
+ readonly short: "系统管理";
433
+ readonly title: "由平台管理";
434
+ readonly body: "当源记录上的操作运行时,这里的行会自动创建。下方列表是只读监控界面——行级操作(批准、撤回、重发等)在每一行上。";
435
+ };
436
+ readonly appendOnly: {
437
+ readonly short: "只读 · 审计日志";
438
+ readonly title: "只读历史记录";
439
+ readonly body: "不可变审计日志。行由平台在事件发生时写入,不能在界面上创建、编辑或删除。可使用导出功能下载以供合规审查。";
440
+ };
441
+ readonly betterAuth: {
442
+ readonly short: "身份";
443
+ readonly title: "由身份提供方管理";
444
+ readonly body: "此对象的架构由 {{provider}} 管理。直接编辑会绕过密码哈希、会话校验、两步验证检查和审计钩子。请通过身份认证提供方的登录、邀请和安全流程管理这些记录。";
445
+ };
446
+ };
421
447
  readonly kanban: {
422
448
  readonly addCard: "添加卡片";
423
449
  readonly addColumn: "添加列";
@@ -477,7 +503,7 @@ declare const zh: {
477
503
  readonly row: {
478
504
  readonly expand: "展开";
479
505
  readonly collapse: "收起";
480
- readonly locate: "在甘特图上定位";
506
+ readonly open: "打开详情";
481
507
  };
482
508
  readonly aria: {
483
509
  readonly taskList: "任务列表";
@@ -493,6 +519,25 @@ declare const zh: {
493
519
  readonly addSuccessor: "添加后置任务…";
494
520
  readonly removeDependency: "移除依赖";
495
521
  readonly noCandidates: "无可用任务";
522
+ 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
+ };
532
+ readonly delete: {
533
+ readonly title: "删除此任务?";
534
+ readonly body: "\"{{title}}\" 将被永久删除,此操作无法撤销。";
535
+ readonly cancel: "取消";
536
+ readonly confirm: "删除";
537
+ readonly deleting: "删除中…";
538
+ };
539
+ readonly drawer: {
540
+ readonly fallbackTitle: "任务详情";
496
541
  };
497
542
  readonly linkType: {
498
543
  readonly fs: "完成 → 开始";
@@ -514,6 +559,8 @@ declare const zh: {
514
559
  };
515
560
  readonly readOnly: "只读";
516
561
  readonly readOnlyHint: "此视图已禁用编辑。";
562
+ readonly lockedHint: "无编辑权限";
563
+ readonly writeFailed: "保存失败,已恢复修改前状态";
517
564
  };
518
565
  readonly view: {
519
566
  readonly editViewConfig: "编辑视图配置";
@@ -634,8 +681,10 @@ declare const zh: {
634
681
  readonly daysAgo: "{{count}}天前";
635
682
  readonly systemActor: "系统";
636
683
  readonly unknownUser: "未知用户";
637
- readonly createdBy: "创建于";
638
- readonly updatedBy: "更新于";
684
+ readonly createdBy: "创建人";
685
+ readonly updatedBy: "更新人";
686
+ readonly created: "创建于";
687
+ readonly updated: "更新于";
639
688
  readonly dropFilesToUpload: "拖拽文件到此处或点击上传";
640
689
  readonly attachmentCount: "{{count}} 个附件";
641
690
  readonly attachmentCountPlural: "{{count}} 个附件";
@@ -917,6 +966,29 @@ declare const zh: {
917
966
  readonly vsYesterday: "较昨日";
918
967
  readonly vsPreviousPeriod: "较上期";
919
968
  };
969
+ readonly filters: {
970
+ readonly label: "仪表盘过滤器";
971
+ readonly dateRange: "日期范围";
972
+ readonly allTime: "全部时间";
973
+ readonly custom: "自定义…";
974
+ readonly all: "全部";
975
+ readonly reset: "重置";
976
+ readonly range: {
977
+ readonly today: "今天";
978
+ readonly yesterday: "昨天";
979
+ readonly this_week: "本周";
980
+ readonly last_week: "上周";
981
+ readonly this_month: "本月";
982
+ readonly last_month: "上月";
983
+ readonly this_quarter: "本季度";
984
+ readonly last_quarter: "上季度";
985
+ readonly this_year: "今年";
986
+ readonly last_year: "去年";
987
+ readonly last_7_days: "近 7 天";
988
+ readonly last_30_days: "近 30 天";
989
+ readonly last_90_days: "近 90 天";
990
+ };
991
+ };
920
992
  };
921
993
  readonly configPanel: {
922
994
  readonly save: "保存";
@@ -1200,6 +1272,19 @@ declare const zh: {
1200
1272
  readonly createApp: "创建新应用";
1201
1273
  };
1202
1274
  readonly ai: {
1275
+ readonly usage: {
1276
+ readonly title: "AI 用量";
1277
+ readonly meterBuild: "AI 搭建";
1278
+ readonly meterAsk: "数据问询";
1279
+ readonly statusOk: "额度充足";
1280
+ readonly statusLow: "即将用完";
1281
+ readonly statusFull: "额度已用完";
1282
+ readonly resetsDaily: "今晚重置";
1283
+ readonly resetsMonthly: "下个周期重置";
1284
+ readonly ctaUpgrade: "升级以继续使用";
1285
+ readonly ctaTopUp: "购买额度包以继续";
1286
+ readonly ariaLabel: "AI 用量:{{status}}";
1287
+ };
1203
1288
  readonly workspaceTitle: "AI 工作区";
1204
1289
  readonly workspaceSubtitle: "提问、查看并继续历史对话";
1205
1290
  readonly openChats: "打开对话列表";
@@ -1226,6 +1311,8 @@ declare const zh: {
1226
1311
  readonly sendFailedGeneric: "消息发送失败,请重试。你的消息已保留在输入框中。";
1227
1312
  readonly askAgent: "向 {{agent}} 提问...";
1228
1313
  readonly assistant: "助手";
1314
+ readonly liveCanvas: "草稿预览 · {{app}}";
1315
+ readonly liveCanvasUnlisted: "运行预览 · {{app}}(未发布 · 仅自己可见)";
1229
1316
  readonly loadingAgents: "正在加载助手...";
1230
1317
  readonly askAnything: "输入你的问题...";
1231
1318
  readonly emptyTitle: "开始对话";
@@ -1241,6 +1328,11 @@ declare const zh: {
1241
1328
  readonly title: "向你的数据提问";
1242
1329
  readonly description: "针对你的记录提问 —— 在你有权访问的数据范围内进行计数、列举和汇总。";
1243
1330
  };
1331
+ readonly editApp: {
1332
+ readonly title: "正在编辑「{{app}}」";
1333
+ readonly titleGeneric: "编辑此应用";
1334
+ readonly description: "想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或自动化,或调整已有内容。";
1335
+ };
1244
1336
  };
1245
1337
  readonly clearConversation: "清空";
1246
1338
  readonly sendHint: "发送";
@@ -1265,6 +1357,7 @@ declare const zh: {
1265
1357
  readonly seedWarn: "已发布,但部分示例数据未能载入。";
1266
1358
  readonly openBuiltApp: "打开应用";
1267
1359
  readonly previewDraft: "预览";
1360
+ readonly previewApp: "预览应用";
1268
1361
  readonly resizeSplit: "调整对话与预览的宽度";
1269
1362
  readonly hideChats: "隐藏对话列表";
1270
1363
  readonly showChats: "显示对话列表";
@@ -1303,6 +1396,12 @@ declare const zh: {
1303
1396
  readonly availableObjects: "列出可用的数据对象。";
1304
1397
  readonly recentActivity: "总结我的最近动态。";
1305
1398
  };
1399
+ readonly editApp: {
1400
+ readonly addField: "给某个对象加一个字段。";
1401
+ readonly addObject: "新增一个对象,并关联到已有对象。";
1402
+ readonly addDashboard: "加一个展示关键指标的仪表盘。";
1403
+ readonly addAutomation: "加一个自动化 —— 审批、状态流转或通知。";
1404
+ };
1306
1405
  };
1307
1406
  };
1308
1407
  readonly errors: {
@@ -1571,6 +1670,7 @@ declare const zh: {
1571
1670
  readonly errors: {
1572
1671
  readonly invalidCredentials: "邮箱或密码错误,请重试。";
1573
1672
  readonly emailNotVerified: "请先验证您的邮箱后再登录。";
1673
+ readonly oauthCallbackFailed: "单点登录未能完成——登录链接已过期或已被使用,请重新发起登录。";
1574
1674
  };
1575
1675
  };
1576
1676
  readonly register: {
@@ -1709,6 +1809,43 @@ declare const zh: {
1709
1809
  readonly tenantHostHint: "您正在登录此工作区";
1710
1810
  };
1711
1811
  };
1812
+ readonly profile: {
1813
+ readonly title: "个人资料";
1814
+ readonly subtitle: "管理您的账户设置";
1815
+ readonly saving: "保存中…";
1816
+ readonly avatar: {
1817
+ readonly upload: "上传";
1818
+ readonly replace: "更换";
1819
+ readonly remove: "移除";
1820
+ };
1821
+ readonly info: {
1822
+ readonly title: "个人信息";
1823
+ readonly description: "更新您的姓名并查看账户详情";
1824
+ readonly saved: "个人资料已更新。";
1825
+ readonly name: "姓名";
1826
+ readonly email: "邮箱";
1827
+ readonly emailImmutable: "邮箱不可修改。";
1828
+ readonly role: "角色";
1829
+ readonly save: "保存更改";
1830
+ };
1831
+ readonly password: {
1832
+ readonly changeTitle: "修改密码";
1833
+ readonly setTitle: "设置本地密码";
1834
+ readonly changeDescription: "更新您在此环境登录所用的密码。";
1835
+ readonly setDescription: "您通过单点登录进入。设置本地密码后,也可以在此环境使用邮箱和密码登录。";
1836
+ readonly current: "当前密码";
1837
+ readonly new: "新密码";
1838
+ readonly password: "密码";
1839
+ readonly confirm: "确认密码";
1840
+ readonly tooShort: "密码长度至少为 8 个字符";
1841
+ readonly mismatch: "两次输入的密码不一致";
1842
+ readonly enterCurrent: "请输入当前密码";
1843
+ readonly changed: "密码已修改。";
1844
+ readonly localSet: "本地密码已设置。现在您可以在此环境使用邮箱和密码登录。";
1845
+ readonly changeAction: "修改密码";
1846
+ readonly setAction: "设置密码";
1847
+ };
1848
+ };
1712
1849
  readonly errors: {
1713
1850
  readonly networkError: "网络错误,请检查网络连接。";
1714
1851
  readonly serverError: "服务器错误,请稍后重试。";
@@ -2033,6 +2170,8 @@ declare const zh: {
2033
2170
  readonly deleteFailed: "删除 {{label}} 失败";
2034
2171
  readonly noRecordId: "未提供记录 ID";
2035
2172
  readonly deleteConfirm: "确定要删除此记录吗?";
2173
+ readonly resetPackageSetConfirm: "该权限集随已安装的软件包发布,无法删除。删除操作将丢弃环境定制并把它重置为发布基线。是否继续?";
2174
+ readonly resetPackageSetSuccess: "权限集已重置为发布基线";
2036
2175
  readonly bulkDeleteSuccess: "已删除 {{count}} 条 {{label}} 记录";
2037
2176
  readonly bulkDeletePartial: "成功 {{succeeded}} 条,失败 {{failed}} 条";
2038
2177
  };
@@ -112,6 +112,9 @@ const zh = {
112
112
  deleteSuccess: '{{object}}删除成功',
113
113
  },
114
114
  fields: {
115
+ relativeDate: {
116
+ overdue: '逾期 {{count}} 天',
117
+ },
115
118
  richText: {
116
119
  format: '格式: {{format}}',
117
120
  basicEditorHint: '富文本编辑器(基础)',
@@ -256,6 +259,7 @@ const zh = {
256
259
  // 下载模板
257
260
  downloadTemplate: '下载模板',
258
261
  downloadTemplateHint: '获取带正确列的 CSV(必填字段标 *)。',
262
+ templateFileName: '{{object}}-导入模板',
259
263
  // 校验(服务端 dryRun 预检)
260
264
  validate: '校验数据',
261
265
  validateHint: '导入前在服务端逐行校验。',
@@ -427,6 +431,28 @@ const zh = {
427
431
  inlineEditLabel: '行内编辑记录(点击单元格进行编辑)',
428
432
  recordEditingTitle: '记录编辑',
429
433
  },
434
+ managedByBadge: {
435
+ config: {
436
+ short: '管理配置',
437
+ title: '管理员配置',
438
+ body: '这些记录定义平台的运行时行为。请在此处编写配置;其产生的运行时数据存放在单独的表中。',
439
+ },
440
+ system: {
441
+ short: '系统管理',
442
+ title: '由平台管理',
443
+ body: '当源记录上的操作运行时,这里的行会自动创建。下方列表是只读监控界面——行级操作(批准、撤回、重发等)在每一行上。',
444
+ },
445
+ appendOnly: {
446
+ short: '只读 · 审计日志',
447
+ title: '只读历史记录',
448
+ body: '不可变审计日志。行由平台在事件发生时写入,不能在界面上创建、编辑或删除。可使用导出功能下载以供合规审查。',
449
+ },
450
+ betterAuth: {
451
+ short: '身份',
452
+ title: '由身份提供方管理',
453
+ body: '此对象的架构由 {{provider}} 管理。直接编辑会绕过密码哈希、会话校验、两步验证检查和审计钩子。请通过身份认证提供方的登录、邀请和安全流程管理这些记录。',
454
+ },
455
+ },
430
456
  kanban: {
431
457
  addCard: '添加卡片',
432
458
  addColumn: '添加列',
@@ -486,7 +512,7 @@ const zh = {
486
512
  row: {
487
513
  expand: '展开',
488
514
  collapse: '收起',
489
- locate: '在甘特图上定位',
515
+ open: '打开详情',
490
516
  },
491
517
  aria: {
492
518
  taskList: '任务列表',
@@ -502,6 +528,25 @@ const zh = {
502
528
  addSuccessor: '添加后置任务…',
503
529
  removeDependency: '移除依赖',
504
530
  noCandidates: '无可用任务',
531
+ searchTasks: '搜索任务…',
532
+ qrcode: '移动端二维码',
533
+ },
534
+ qr: {
535
+ title: '在手机上打开',
536
+ hint: '用手机扫码打开详情页',
537
+ copy: '复制链接',
538
+ copied: '已复制',
539
+ close: '关闭',
540
+ },
541
+ delete: {
542
+ title: '删除此任务?',
543
+ body: '"{{title}}" 将被永久删除,此操作无法撤销。',
544
+ cancel: '取消',
545
+ confirm: '删除',
546
+ deleting: '删除中…',
547
+ },
548
+ drawer: {
549
+ fallbackTitle: '任务详情',
505
550
  },
506
551
  linkType: {
507
552
  fs: '完成 → 开始',
@@ -523,6 +568,8 @@ const zh = {
523
568
  },
524
569
  readOnly: '只读',
525
570
  readOnlyHint: '此视图已禁用编辑。',
571
+ lockedHint: '无编辑权限',
572
+ writeFailed: '保存失败,已恢复修改前状态',
526
573
  },
527
574
  view: {
528
575
  editViewConfig: '编辑视图配置',
@@ -646,9 +693,13 @@ const zh = {
646
693
  // Activity feed actors
647
694
  systemActor: '系统',
648
695
  unknownUser: '未知用户',
649
- // Record meta footer (audit provenance)
650
- createdBy: '创建于',
651
- updatedBy: '更新于',
696
+ // Record meta footer (audit provenance)。createdBy/updatedBy 后面跟的是
697
+ // 操作者("创建人 Dev Admin · 5 分钟前");created/updated 是无操作者时的
698
+ // 兜底("创建于 5 分钟前")。旧文案把"创建于"用在了操作者位置,属误译。
699
+ createdBy: '创建人',
700
+ updatedBy: '更新人',
701
+ created: '创建于',
702
+ updated: '更新于',
652
703
  // Attachments
653
704
  dropFilesToUpload: '拖拽文件到此处或点击上传',
654
705
  attachmentCount: '{{count}} 个附件',
@@ -939,6 +990,29 @@ const zh = {
939
990
  vsYesterday: '较昨日',
940
991
  vsPreviousPeriod: '较上期',
941
992
  },
993
+ filters: {
994
+ label: '仪表盘过滤器',
995
+ dateRange: '日期范围',
996
+ allTime: '全部时间',
997
+ custom: '自定义…',
998
+ all: '全部',
999
+ reset: '重置',
1000
+ range: {
1001
+ today: '今天',
1002
+ yesterday: '昨天',
1003
+ this_week: '本周',
1004
+ last_week: '上周',
1005
+ this_month: '本月',
1006
+ last_month: '上月',
1007
+ this_quarter: '本季度',
1008
+ last_quarter: '上季度',
1009
+ this_year: '今年',
1010
+ last_year: '去年',
1011
+ last_7_days: '近 7 天',
1012
+ last_30_days: '近 30 天',
1013
+ last_90_days: '近 90 天',
1014
+ },
1015
+ },
942
1016
  },
943
1017
  configPanel: {
944
1018
  save: '保存',
@@ -1222,6 +1296,19 @@ const zh = {
1222
1296
  createApp: '创建新应用',
1223
1297
  },
1224
1298
  ai: {
1299
+ usage: {
1300
+ title: 'AI 用量',
1301
+ meterBuild: 'AI 搭建',
1302
+ meterAsk: '数据问询',
1303
+ statusOk: '额度充足',
1304
+ statusLow: '即将用完',
1305
+ statusFull: '额度已用完',
1306
+ resetsDaily: '今晚重置',
1307
+ resetsMonthly: '下个周期重置',
1308
+ ctaUpgrade: '升级以继续使用',
1309
+ ctaTopUp: '购买额度包以继续',
1310
+ ariaLabel: 'AI 用量:{{status}}',
1311
+ },
1225
1312
  workspaceTitle: 'AI 工作区',
1226
1313
  workspaceSubtitle: '提问、查看并继续历史对话',
1227
1314
  openChats: '打开对话列表',
@@ -1248,6 +1335,8 @@ const zh = {
1248
1335
  sendFailedGeneric: '消息发送失败,请重试。你的消息已保留在输入框中。',
1249
1336
  askAgent: '向 {{agent}} 提问...',
1250
1337
  assistant: '助手',
1338
+ liveCanvas: '草稿预览 · {{app}}',
1339
+ liveCanvasUnlisted: '运行预览 · {{app}}(未发布 · 仅自己可见)',
1251
1340
  loadingAgents: '正在加载助手...',
1252
1341
  askAnything: '输入你的问题...',
1253
1342
  emptyTitle: '开始对话',
@@ -1263,6 +1352,11 @@ const zh = {
1263
1352
  title: '向你的数据提问',
1264
1353
  description: '针对你的记录提问 —— 在你有权访问的数据范围内进行计数、列举和汇总。',
1265
1354
  },
1355
+ editApp: {
1356
+ title: '正在编辑「{{app}}」',
1357
+ titleGeneric: '编辑此应用',
1358
+ description: '想改点什么?我会就地修改这个应用 —— 加字段、对象、视图或自动化,或调整已有内容。',
1359
+ },
1266
1360
  },
1267
1361
  clearConversation: '清空',
1268
1362
  sendHint: '发送',
@@ -1289,6 +1383,7 @@ const zh = {
1289
1383
  seedWarn: '已发布,但部分示例数据未能载入。',
1290
1384
  openBuiltApp: '打开应用',
1291
1385
  previewDraft: '预览',
1386
+ previewApp: '预览应用',
1292
1387
  resizeSplit: '调整对话与预览的宽度',
1293
1388
  hideChats: '隐藏对话列表',
1294
1389
  showChats: '显示对话列表',
@@ -1333,6 +1428,12 @@ const zh = {
1333
1428
  availableObjects: '列出可用的数据对象。',
1334
1429
  recentActivity: '总结我的最近动态。',
1335
1430
  },
1431
+ editApp: {
1432
+ addField: '给某个对象加一个字段。',
1433
+ addObject: '新增一个对象,并关联到已有对象。',
1434
+ addDashboard: '加一个展示关键指标的仪表盘。',
1435
+ addAutomation: '加一个自动化 —— 审批、状态流转或通知。',
1436
+ },
1336
1437
  },
1337
1438
  },
1338
1439
  errors: {
@@ -1601,6 +1702,7 @@ const zh = {
1601
1702
  errors: {
1602
1703
  invalidCredentials: '邮箱或密码错误,请重试。',
1603
1704
  emailNotVerified: '请先验证您的邮箱后再登录。',
1705
+ oauthCallbackFailed: '单点登录未能完成——登录链接已过期或已被使用,请重新发起登录。',
1604
1706
  },
1605
1707
  },
1606
1708
  register: {
@@ -1739,6 +1841,43 @@ const zh = {
1739
1841
  tenantHostHint: '您正在登录此工作区',
1740
1842
  },
1741
1843
  },
1844
+ profile: {
1845
+ title: '个人资料',
1846
+ subtitle: '管理您的账户设置',
1847
+ saving: '保存中…',
1848
+ avatar: {
1849
+ upload: '上传',
1850
+ replace: '更换',
1851
+ remove: '移除',
1852
+ },
1853
+ info: {
1854
+ title: '个人信息',
1855
+ description: '更新您的姓名并查看账户详情',
1856
+ saved: '个人资料已更新。',
1857
+ name: '姓名',
1858
+ email: '邮箱',
1859
+ emailImmutable: '邮箱不可修改。',
1860
+ role: '角色',
1861
+ save: '保存更改',
1862
+ },
1863
+ password: {
1864
+ changeTitle: '修改密码',
1865
+ setTitle: '设置本地密码',
1866
+ changeDescription: '更新您在此环境登录所用的密码。',
1867
+ setDescription: '您通过单点登录进入。设置本地密码后,也可以在此环境使用邮箱和密码登录。',
1868
+ current: '当前密码',
1869
+ new: '新密码',
1870
+ password: '密码',
1871
+ confirm: '确认密码',
1872
+ tooShort: '密码长度至少为 8 个字符',
1873
+ mismatch: '两次输入的密码不一致',
1874
+ enterCurrent: '请输入当前密码',
1875
+ changed: '密码已修改。',
1876
+ localSet: '本地密码已设置。现在您可以在此环境使用邮箱和密码登录。',
1877
+ changeAction: '修改密码',
1878
+ setAction: '设置密码',
1879
+ },
1880
+ },
1742
1881
  errors: {
1743
1882
  networkError: '网络错误,请检查网络连接。',
1744
1883
  serverError: '服务器错误,请稍后重试。',
@@ -2066,6 +2205,8 @@ const zh = {
2066
2205
  deleteFailed: '删除 {{label}} 失败',
2067
2206
  noRecordId: '未提供记录 ID',
2068
2207
  deleteConfirm: '确定要删除此记录吗?',
2208
+ resetPackageSetConfirm: '该权限集随已安装的软件包发布,无法删除。删除操作将丢弃环境定制并把它重置为发布基线。是否继续?',
2209
+ resetPackageSetSuccess: '权限集已重置为发布基线',
2069
2210
  bulkDeleteSuccess: '已删除 {{count}} 条 {{label}} 记录',
2070
2211
  bulkDeletePartial: '成功 {{succeeded}} 条,失败 {{failed}} 条',
2071
2212
  },
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * Accepts a plain string (passed through) or an i18n object keyed by language
5
5
  * code — e.g. `{ en: 'Pricing', 'zh-CN': '定价', zh: '定价', default: 'Pricing' }`.
6
- * Resolution order: exact language -> base language (`zh-CN` -> `zh`) -> `default`
7
- * -> `en` -> first value. Unlike a `default`/`en`-only resolver this is genuinely
6
+ * Resolution order: exact language -> base language (`zh-CN` -> `zh`) -> any
7
+ * region-qualified key sharing the base (`zh` -> `zh-CN`) -> `default` -> `en`
8
+ * -> first value. Unlike a `default`/`en`-only resolver this is genuinely
8
9
  * locale-aware, so server-driven metadata (page text, action param labels) can
9
10
  * carry inline translations instead of rendering "[object Object]" or English.
10
11
  *
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * Accepts a plain string (passed through) or an i18n object keyed by language
5
5
  * code — e.g. `{ en: 'Pricing', 'zh-CN': '定价', zh: '定价', default: 'Pricing' }`.
6
- * Resolution order: exact language -> base language (`zh-CN` -> `zh`) -> `default`
7
- * -> `en` -> first value. Unlike a `default`/`en`-only resolver this is genuinely
6
+ * Resolution order: exact language -> base language (`zh-CN` -> `zh`) -> any
7
+ * region-qualified key sharing the base (`zh` -> `zh-CN`) -> `default` -> `en`
8
+ * -> first value. Unlike a `default`/`en`-only resolver this is genuinely
8
9
  * locale-aware, so server-driven metadata (page text, action param labels) can
9
10
  * carry inline translations instead of rendering "[object Object]" or English.
10
11
  *
@@ -22,8 +23,12 @@ export function pickLocalized(value, language) {
22
23
  const o = value;
23
24
  const lang = (language || 'en').trim();
24
25
  const base = lang.split('-')[0];
26
+ // Runtime language is often a bare base code ('zh') while metadata authors
27
+ // write full BCP-47 tags ('zh-CN') — upgrade to any key sharing the base.
28
+ const regional = Object.keys(o).find((k) => k.split('-')[0] === base && typeof o[k] === 'string');
25
29
  const pick = o[lang] ??
26
30
  o[base] ??
31
+ (regional !== undefined ? o[regional] : undefined) ??
27
32
  o.default ??
28
33
  o.en ??
29
34
  Object.values(o).find((v) => typeof v === 'string');
@@ -236,4 +236,5 @@ export declare function useSafeFieldLabel(): {
236
236
  }[];
237
237
  fieldOptionLabel: (_objectName: string, _fieldName: string, _optionValue: string, fallback: string) => string;
238
238
  sectionLabel: (_objectName: string, _sectionName: string, fallback: string) => string;
239
+ actionLabel: (_objectName: string | undefined, _actionName: string, fallback: string) => string;
239
240
  };
@@ -394,6 +394,7 @@ const SAFE_FIELD_LABEL_FALLBACK = {
394
394
  translateOptions: (_objectName, _fieldName, options) => options,
395
395
  fieldOptionLabel: (_objectName, _fieldName, _optionValue, fallback) => fallback,
396
396
  sectionLabel: (_objectName, _sectionName, fallback) => fallback,
397
+ actionLabel: (_objectName, _actionName, fallback) => fallback,
397
398
  };
398
399
  /**
399
400
  * Safe wrapper for useObjectLabel that falls back to identity functions