@object-ui/i18n 16.1.0 → 17.2.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.
- package/CHANGELOG.md +1197 -0
- package/dist/locales/ar.d.ts +841 -2
- package/dist/locales/ar.js +846 -5
- package/dist/locales/de.d.ts +839 -2
- package/dist/locales/de.js +844 -5
- package/dist/locales/en.d.ts +396 -6
- package/dist/locales/en.js +413 -8
- package/dist/locales/es.d.ts +839 -2
- package/dist/locales/es.js +844 -5
- package/dist/locales/fr.d.ts +841 -2
- package/dist/locales/fr.js +846 -5
- package/dist/locales/index.d.ts +7433 -27
- package/dist/locales/ja.d.ts +839 -2
- package/dist/locales/ja.js +844 -5
- package/dist/locales/ko.d.ts +839 -2
- package/dist/locales/ko.js +844 -5
- package/dist/locales/pt.d.ts +841 -2
- package/dist/locales/pt.js +846 -5
- package/dist/locales/ru.d.ts +841 -2
- package/dist/locales/ru.js +846 -5
- package/dist/locales/zh.d.ts +317 -5
- package/dist/locales/zh.js +319 -5
- package/dist/useObjectLabel.d.ts +24 -12
- package/dist/useObjectLabel.js +71 -45
- package/dist/useSafeTranslation.d.ts +2 -0
- package/dist/useSafeTranslation.js +7 -2
- package/package.json +3 -3
package/dist/locales/zh.js
CHANGED
|
@@ -88,6 +88,10 @@ const zh = {
|
|
|
88
88
|
package: '软件包',
|
|
89
89
|
},
|
|
90
90
|
actions: {
|
|
91
|
+
decisionOutput: {
|
|
92
|
+
help: '作为决策输出传递给流程。',
|
|
93
|
+
helpMultiValue: '作为决策输出传递给流程。多个值请用逗号分隔。',
|
|
94
|
+
},
|
|
91
95
|
resultDialog: {
|
|
92
96
|
defaultTitle: '请立即保存此值',
|
|
93
97
|
acknowledge: '我已保存',
|
|
@@ -108,6 +112,8 @@ const zh = {
|
|
|
108
112
|
type: '{{field}}必须是有效的{{type}}',
|
|
109
113
|
},
|
|
110
114
|
form: {
|
|
115
|
+
noPermissionToSave: '您没有权限保存这条记录。',
|
|
116
|
+
submitFailed: '保存失败,请重试。',
|
|
111
117
|
addItem: '添加项目',
|
|
112
118
|
removeItem: '移除项目',
|
|
113
119
|
fieldRequired: '此字段为必填项',
|
|
@@ -119,11 +125,13 @@ const zh = {
|
|
|
119
125
|
discardMessage: '您有未保存的更改。如果现在关闭此表单,您的编辑将会丢失。',
|
|
120
126
|
keepEditing: '继续编辑',
|
|
121
127
|
discard: '放弃',
|
|
128
|
+
conflictTitle: '保存冲突',
|
|
129
|
+
conflictMessage: '您编辑期间,这条记录已被其他人修改。覆盖保存将用您的内容替换对方的修改。',
|
|
130
|
+
conflictLatestVersion: '对方保存时间:{{time}}',
|
|
131
|
+
conflictOverwrite: '覆盖保存',
|
|
122
132
|
stepOf: '第{{current}}步,共{{total}}步',
|
|
123
133
|
createTitle: '新建{{object}}',
|
|
124
134
|
editTitle: '编辑{{object}}',
|
|
125
|
-
createDescription: '向数据库添加新的{{object}}。',
|
|
126
|
-
editDescription: '更新{{object}}的详情',
|
|
127
135
|
saveRecord: '保存',
|
|
128
136
|
create: '创建',
|
|
129
137
|
update: '更新',
|
|
@@ -135,11 +143,67 @@ const zh = {
|
|
|
135
143
|
relativeDate: {
|
|
136
144
|
overdue: '逾期 {{count}} 天',
|
|
137
145
|
},
|
|
146
|
+
file: {
|
|
147
|
+
dragDropHere: '拖拽文件到此处',
|
|
148
|
+
dropFilesHere: '松开以上传',
|
|
149
|
+
browseHint: '或点击浏览',
|
|
150
|
+
browseHintCamera: '或点击浏览 • 使用下方相机按钮',
|
|
151
|
+
takePhoto: '拍照',
|
|
152
|
+
takeSelfie: '自拍',
|
|
153
|
+
cameraCapture: '拍摄',
|
|
154
|
+
uploading: '上传中…',
|
|
155
|
+
uploadingPct: '上传中…({{pct}}%)',
|
|
156
|
+
fileFallback: '文件',
|
|
157
|
+
upload: '上传',
|
|
158
|
+
remove: '移除 {{name}}',
|
|
159
|
+
exceedsMaxSize: '“{{name}}” 超过大小上限({{max}} MB)',
|
|
160
|
+
uploadFailed: '上传 “{{name}}” 失败:{{error}}',
|
|
161
|
+
},
|
|
162
|
+
image: {
|
|
163
|
+
upload: '上传图片',
|
|
164
|
+
addMore: '添加更多图片',
|
|
165
|
+
uploading: '上传中…',
|
|
166
|
+
imageAlt: '图片 {{index}}',
|
|
167
|
+
crop: '裁剪图片 {{index}}',
|
|
168
|
+
remove: '移除图片 {{index}}',
|
|
169
|
+
enlarge: '放大 {{name}}',
|
|
170
|
+
preview: '图片预览',
|
|
171
|
+
previous: '上一张',
|
|
172
|
+
next: '下一张',
|
|
173
|
+
counter: '{{current}} / {{total}}',
|
|
174
|
+
},
|
|
138
175
|
richText: {
|
|
139
176
|
format: '格式: {{format}}',
|
|
140
177
|
basicEditorHint: '富文本编辑器(基础)',
|
|
141
178
|
placeholder: '请输入文字...',
|
|
142
179
|
},
|
|
180
|
+
objectRef: {
|
|
181
|
+
loading: '正在加载对象…',
|
|
182
|
+
placeholder: '请选择对象',
|
|
183
|
+
search: '搜索对象…',
|
|
184
|
+
empty: '未找到对象',
|
|
185
|
+
},
|
|
186
|
+
recipient: {
|
|
187
|
+
selectTypeFirst: '请先选择接收方类型。',
|
|
188
|
+
loading: '加载中…',
|
|
189
|
+
search: '搜索…',
|
|
190
|
+
empty: '无匹配项',
|
|
191
|
+
select: '请选择接收方',
|
|
192
|
+
selectUser: '请选择用户',
|
|
193
|
+
selectTeam: '请选择团队',
|
|
194
|
+
selectBusinessUnit: '请选择业务单元',
|
|
195
|
+
selectPosition: '请选择岗位',
|
|
196
|
+
selectUnitAndSubordinates: '请选择业务单元',
|
|
197
|
+
},
|
|
198
|
+
filterCondition: {
|
|
199
|
+
selectObjectFirst: '请先选择对象。',
|
|
200
|
+
noCriteria: '未设置条件 —— 该规则不共享任何记录',
|
|
201
|
+
criteriaRequired: '请至少添加一个条件。没有条件的规则会共享该对象的全部记录,因此无法保存。',
|
|
202
|
+
invalidJson: 'JSON 无效 —— 修正之前该规则不会匹配任何记录。',
|
|
203
|
+
jsonOnly: '该条件只能以 JSON 方式编辑',
|
|
204
|
+
editAsJson: '以 JSON 编辑',
|
|
205
|
+
useVisualBuilder: '使用可视化构建器',
|
|
206
|
+
},
|
|
143
207
|
},
|
|
144
208
|
table: {
|
|
145
209
|
rowsPerPage: '每页行数',
|
|
@@ -206,6 +270,7 @@ const zh = {
|
|
|
206
270
|
},
|
|
207
271
|
import: {
|
|
208
272
|
title: '导入{{object}}',
|
|
273
|
+
notAllowed: '该对象未开放导入。',
|
|
209
274
|
stepUpload: '上传',
|
|
210
275
|
stepMapping: '字段映射',
|
|
211
276
|
stepPreview: '预览',
|
|
@@ -265,6 +330,10 @@ const zh = {
|
|
|
265
330
|
importNRows: '导入 {{count}} 行',
|
|
266
331
|
importingProgress: '导入中…',
|
|
267
332
|
requiredMark: '*',
|
|
333
|
+
optTreatHistorical: '作为历史数据导入',
|
|
334
|
+
optTreatHistoricalHint: '(按原样导入已完结的记录——跳过状态机校验,保留原始时间戳与作者,而不是记为当前时间)',
|
|
335
|
+
missingRequiredHint: '无法继续——以下必填字段未映射:{{fields}}。请在文件中添加对应的列,或返回上一步重新上传包含该列的文件。',
|
|
336
|
+
legacyFallbackNotice: '已通过兼容模式导入:当前连接不支持服务端导入接口,因此所有值均以文本写入,未做服务端类型转换。请升级后端/客户端以获得完整的导入支持(类型转换与关联查找)。',
|
|
268
337
|
required: '必填',
|
|
269
338
|
invalidType: '{{type}} 格式无效',
|
|
270
339
|
legacyReferenceBlocked: '导入已阻止:{{fields}} 是关联字段,需要服务端导入接口把名称解析为记录 ID,而当前连接不支持。按纯文本导入会写坏数据。请升级后端/客户端,或取消这些列的映射后再导入。',
|
|
@@ -291,6 +360,12 @@ const zh = {
|
|
|
291
360
|
// 服务端结构化导入错误的友好文案
|
|
292
361
|
referenceNotFound: '找不到匹配 "{{value}}" 的记录',
|
|
293
362
|
referenceAmbiguous: '"{{value}}" 匹配到多条记录,请使用唯一值或记录 ID',
|
|
363
|
+
invalidBoolean: '"{{value}}" 不是有效的是/否值',
|
|
364
|
+
invalidNumber: '"{{value}}" 不是有效的数字',
|
|
365
|
+
invalidDate: '"{{value}}" 不是有效的日期',
|
|
366
|
+
invalidOption: '"{{value}}" 不在允许的选项范围内',
|
|
367
|
+
requiredValue: '此字段为必填项',
|
|
368
|
+
matchAmbiguous: '匹配到多条已有记录,请使用唯一值或记录 ID',
|
|
294
369
|
// 导入选项 / 写入模式
|
|
295
370
|
options: '导入选项',
|
|
296
371
|
writeMode: '当某行匹配到已有记录时',
|
|
@@ -303,6 +378,7 @@ const zh = {
|
|
|
303
378
|
matchFieldsPlaceholder: '选择匹配字段…',
|
|
304
379
|
matchFieldsHint: '按这些字段将行匹配到已有记录。',
|
|
305
380
|
needMatchFields: '请至少选择一个匹配字段。',
|
|
381
|
+
matchOnlyField: '(仅匹配)',
|
|
306
382
|
optRunAutomations: '运行自动化与触发器',
|
|
307
383
|
optCreateOptions: '保留未知选项值',
|
|
308
384
|
optSkipBlankKey: '跳过匹配值为空的行',
|
|
@@ -350,6 +426,7 @@ const zh = {
|
|
|
350
426
|
confirmDefault: '此操作将应用于 {{count}} 条记录。',
|
|
351
427
|
overLimit: '所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。',
|
|
352
428
|
affectedRecords: '受影响的记录({{count}}):',
|
|
429
|
+
skippedIneligible: '{{count}} 条所选记录不符合该动作的条件,将被跳过。',
|
|
353
430
|
rowFallback: '第 {{index}} 行',
|
|
354
431
|
andMore: '……以及另外 {{count}} 条',
|
|
355
432
|
processed: '已处理 {{count}} / {{total}}',
|
|
@@ -394,6 +471,8 @@ const zh = {
|
|
|
394
471
|
filterRecords: '筛选记录',
|
|
395
472
|
sort: '排序',
|
|
396
473
|
sortRecords: '排序记录',
|
|
474
|
+
sortByIdSuffix: '(按 ID)',
|
|
475
|
+
sortRelationalHint: '指向其他记录的列未列出:它们只能按存储的 ID 排序,而不是单元格中显示的名称。若要按该名称排序,请添加一个存放该名称的公式字段。',
|
|
397
476
|
group: '分组',
|
|
398
477
|
groupBy: '分组依据',
|
|
399
478
|
export: '导出',
|
|
@@ -412,6 +491,12 @@ const zh = {
|
|
|
412
491
|
noMatchesMessage: '没有符合当前筛选或搜索条件的记录,试试调整或清除它们。',
|
|
413
492
|
loadErrorTitle: '无法加载记录',
|
|
414
493
|
loadErrorMessage: '加载数据时出错。请检查网络连接后重试。',
|
|
494
|
+
loadErrorForbiddenTitle: '无权访问',
|
|
495
|
+
loadErrorForbiddenMessage: '你没有查看这些记录的权限。如需访问,请联系管理员。',
|
|
496
|
+
loadErrorUnauthorizedTitle: '需要登录',
|
|
497
|
+
loadErrorUnauthorizedMessage: '登录状态已过期或已退出。请重新登录后查看这些记录。',
|
|
498
|
+
loadErrorRejectedTitle: '该视图的查询被拒绝',
|
|
499
|
+
loadErrorRejectedMessage: '服务器无法处理该视图的筛选条件或查询参数。清除筛选条件通常即可恢复;如果视图本身就是这样保存的,需要管理员修正。',
|
|
415
500
|
retry: '重试',
|
|
416
501
|
managedBy: {
|
|
417
502
|
system: {
|
|
@@ -487,6 +572,7 @@ const zh = {
|
|
|
487
572
|
deleteColumn: '删除列',
|
|
488
573
|
noCards: '暂无卡片',
|
|
489
574
|
cardTitlePlaceholder: '输入卡片标题...',
|
|
575
|
+
uncategorized: '未分类',
|
|
490
576
|
},
|
|
491
577
|
timeline: {
|
|
492
578
|
bucket: {
|
|
@@ -642,9 +728,18 @@ const zh = {
|
|
|
642
728
|
editInlineHint: '双击编辑',
|
|
643
729
|
lockedByApproval: '审批中已锁定',
|
|
644
730
|
lockedTooltip: '该记录有待审批的请求,编辑已被锁定',
|
|
731
|
+
writeStrippedTitle: '部分字段未保存',
|
|
732
|
+
writeStrippedReadonly: '以下字段为只读,未保存:{{fields}}',
|
|
733
|
+
writeStrippedByState: '以下字段在记录当前状态下不可编辑,未保存:{{fields}}',
|
|
734
|
+
approvalPendingEditable: '审批中 · 可编辑',
|
|
735
|
+
approvalPendingTooltip: '该记录有待审批的请求,但当前审批节点仍允许编辑',
|
|
736
|
+
approvalProgress: '审批 — 已通过 {{got}} / 共需 {{need}}',
|
|
737
|
+
approvalProgressGroups: '会签 — 已完成 {{got}} / 共 {{need}} 个组',
|
|
738
|
+
approvalProgressLabel: '审批进度',
|
|
645
739
|
cancelApproval: '撤回审批',
|
|
646
740
|
cancelApprovalInFlight: '撤回中…',
|
|
647
741
|
cancelApprovalTooltip: '撤回当前的待审批请求以解除记录锁定',
|
|
742
|
+
cancelApprovalTooltipUnlocked: '撤回当前的待审批请求',
|
|
648
743
|
cancelApprovalFailed: '撤回审批失败',
|
|
649
744
|
cancelApprovalUnavailable: '当前数据源不支持撤回审批',
|
|
650
745
|
linkCopied: '链接已复制到剪贴板',
|
|
@@ -731,6 +826,18 @@ const zh = {
|
|
|
731
826
|
attachmentCount: '{{count}} 个附件',
|
|
732
827
|
attachmentCountPlural: '{{count}} 个附件',
|
|
733
828
|
removeAttachment: '移除附件',
|
|
829
|
+
// Record Attachments panel (enable.files, objectstack#4358)
|
|
830
|
+
attachments: '附件',
|
|
831
|
+
uploadAttachment: '上传',
|
|
832
|
+
loadingAttachments: '正在加载附件…',
|
|
833
|
+
noAttachments: '暂无附件。上传一个文件开始吧。',
|
|
834
|
+
downloadAttachment: '下载',
|
|
835
|
+
deleteAttachment: '删除附件',
|
|
836
|
+
attachmentDeleteDenied: '只有上传者或可编辑此记录的用户才能删除此附件。',
|
|
837
|
+
attachmentParentAccessDenied: '您无权为此记录添加附件。',
|
|
838
|
+
attachmentDownloadDenied: '您无权下载此附件。',
|
|
839
|
+
attachmentAuthRequired: '请登录后再下载此附件。',
|
|
840
|
+
attachmentPermissionDenied: '您没有执行此操作的权限。',
|
|
734
841
|
// Diff
|
|
735
842
|
unifiedDiff: '统一视图',
|
|
736
843
|
sideBySideDiff: '并排视图',
|
|
@@ -1150,6 +1257,7 @@ const zh = {
|
|
|
1150
1257
|
navTypeGroup: '分组',
|
|
1151
1258
|
navTypeSeparator: '分隔线',
|
|
1152
1259
|
navTypeAction: '操作',
|
|
1260
|
+
navTypeComponent: '组件',
|
|
1153
1261
|
navEditIcon: '编辑图标',
|
|
1154
1262
|
navToggleVisible: '切换可见性',
|
|
1155
1263
|
navHidden: '已隐藏',
|
|
@@ -1266,6 +1374,23 @@ const zh = {
|
|
|
1266
1374
|
dragToReorder: '拖动以重新排序',
|
|
1267
1375
|
favorites: '收藏',
|
|
1268
1376
|
},
|
|
1377
|
+
settingsHub: {
|
|
1378
|
+
title: '设置',
|
|
1379
|
+
subtitle: '配置工作区、集成与功能开关。',
|
|
1380
|
+
loadError: '加载设置失败',
|
|
1381
|
+
empty: '尚未注册任何设置。插件可通过 SettingsService 注册设置清单。',
|
|
1382
|
+
settingsCount: '{{n}} 项设置',
|
|
1383
|
+
beta: 'Beta',
|
|
1384
|
+
// 分类小标题,按 manifest 的 `category` 值取键;未知(插件自定义)分类回退到原始字符串。
|
|
1385
|
+
categories: {
|
|
1386
|
+
Workspace: '工作区',
|
|
1387
|
+
Communication: '通讯',
|
|
1388
|
+
Security: '安全',
|
|
1389
|
+
Infrastructure: '基础设施',
|
|
1390
|
+
Beta: 'Beta',
|
|
1391
|
+
Other: '其他',
|
|
1392
|
+
},
|
|
1393
|
+
},
|
|
1269
1394
|
loadingSteps: {
|
|
1270
1395
|
connecting: '正在连接数据源',
|
|
1271
1396
|
loadingConfig: '正在加载配置',
|
|
@@ -1302,6 +1427,7 @@ const zh = {
|
|
|
1302
1427
|
toggleDarkMode: '切换深色模式',
|
|
1303
1428
|
},
|
|
1304
1429
|
commandPalette: {
|
|
1430
|
+
title: '命令面板',
|
|
1305
1431
|
placeholder: '输入命令或搜索...',
|
|
1306
1432
|
noResults: '未找到结果。',
|
|
1307
1433
|
searching: '搜索中…',
|
|
@@ -1428,6 +1554,21 @@ const zh = {
|
|
|
1428
1554
|
planApproveMessage: '确认,开始搭建。',
|
|
1429
1555
|
planApproveDefaultsMessage: '确认搭建,未决问题按你的合理假设和默认处理。',
|
|
1430
1556
|
planAnswerMessage: '关于「{{question}}」,我选择「{{option}}」。',
|
|
1557
|
+
changesTitle: '确认改动',
|
|
1558
|
+
changesConfirmed: '已确认',
|
|
1559
|
+
changesConfirm: '确认修改',
|
|
1560
|
+
changesConfirmHint: '回复以确认或调整该改动。',
|
|
1561
|
+
changesConfirmMessage: '确认修改,应用你刚才提议的改动。',
|
|
1562
|
+
changeVerb: {
|
|
1563
|
+
createObject: '新建对象',
|
|
1564
|
+
addField: '新增字段',
|
|
1565
|
+
modifyField: '修改字段',
|
|
1566
|
+
deleteField: '删除字段',
|
|
1567
|
+
createMetadata: '新建',
|
|
1568
|
+
updateMetadata: '修改',
|
|
1569
|
+
createSeed: '生成示例数据',
|
|
1570
|
+
createPackage: '新建应用包',
|
|
1571
|
+
},
|
|
1431
1572
|
justNow: '刚刚',
|
|
1432
1573
|
minutesAgo: '{{count}} 分钟前',
|
|
1433
1574
|
hoursAgo: '{{count}} 小时前',
|
|
@@ -1449,6 +1590,8 @@ const zh = {
|
|
|
1449
1590
|
buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,并建立它们之间的关系。',
|
|
1450
1591
|
buildApp: '做一个项目管理应用:项目、任务、成员。',
|
|
1451
1592
|
buildFlow: '设计一个工单系统:工单、优先级、状态流转。',
|
|
1593
|
+
buildInventory: '做一个库存管理应用:商品、库存量、供应商,以及低库存预警。',
|
|
1594
|
+
buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段和面试记录。',
|
|
1452
1595
|
},
|
|
1453
1596
|
generic: {
|
|
1454
1597
|
help: '你可以帮我做什么?',
|
|
@@ -1878,6 +2021,40 @@ const zh = {
|
|
|
1878
2021
|
shell: {
|
|
1879
2022
|
tenantHostHint: '您正在登录此工作区',
|
|
1880
2023
|
},
|
|
2024
|
+
layout: {
|
|
2025
|
+
headline: '更快地构建强大的业务应用。',
|
|
2026
|
+
subhead: '面向企业数据管理、工作流与分析的统一平台。',
|
|
2027
|
+
},
|
|
2028
|
+
remediation: {
|
|
2029
|
+
signOut: '改为退出登录',
|
|
2030
|
+
password: {
|
|
2031
|
+
title: '您的密码已过期',
|
|
2032
|
+
fallbackMessage: '请设置新密码后继续。',
|
|
2033
|
+
current: '当前密码',
|
|
2034
|
+
next: '新密码',
|
|
2035
|
+
confirm: '确认新密码',
|
|
2036
|
+
submit: '修改密码并继续',
|
|
2037
|
+
submitting: '正在更新…',
|
|
2038
|
+
mismatch: '两次输入的新密码不一致。',
|
|
2039
|
+
failed: '无法修改密码。',
|
|
2040
|
+
},
|
|
2041
|
+
mfa: {
|
|
2042
|
+
title: '设置双重验证',
|
|
2043
|
+
fallbackMessage: '您的组织要求使用身份验证器应用后方可继续。',
|
|
2044
|
+
confirmPassword: '确认您的密码',
|
|
2045
|
+
continue: '继续',
|
|
2046
|
+
preparing: '正在准备…',
|
|
2047
|
+
enrollFailed: '无法开始绑定。',
|
|
2048
|
+
scanTitle: '使用身份验证器扫码',
|
|
2049
|
+
scanBody: '使用 Google Authenticator、1Password、Authy 等应用扫描此二维码,然后输入 6 位验证码。',
|
|
2050
|
+
backupTitle: '保存您的备用码',
|
|
2051
|
+
backupBody: '请妥善保管——设备丢失时每个备用码可使用一次。',
|
|
2052
|
+
codeLabel: '6 位验证码',
|
|
2053
|
+
verify: '验证并继续',
|
|
2054
|
+
verifying: '正在验证…',
|
|
2055
|
+
invalidCode: '验证码无效,请重试。',
|
|
2056
|
+
},
|
|
2057
|
+
},
|
|
1881
2058
|
},
|
|
1882
2059
|
profile: {
|
|
1883
2060
|
title: '个人资料',
|
|
@@ -1942,6 +2119,7 @@ const zh = {
|
|
|
1942
2119
|
settings: '工作区设置',
|
|
1943
2120
|
},
|
|
1944
2121
|
help: {
|
|
2122
|
+
keyboardShortcuts: '键盘快捷键',
|
|
1945
2123
|
onThisPage: '本页目录',
|
|
1946
2124
|
appDocs: '本应用文档',
|
|
1947
2125
|
allDocs: '全部文档',
|
|
@@ -1972,6 +2150,7 @@ const zh = {
|
|
|
1972
2150
|
offline: '离线',
|
|
1973
2151
|
usersOnline: '当前在线用户',
|
|
1974
2152
|
switchView: '切换视图',
|
|
2153
|
+
switchObject: '切换对象',
|
|
1975
2154
|
connection: {
|
|
1976
2155
|
connected: '已连接',
|
|
1977
2156
|
connecting: '连接中...',
|
|
@@ -1991,6 +2170,14 @@ const zh = {
|
|
|
1991
2170
|
subtitle: '您的工作区仪表盘',
|
|
1992
2171
|
nav: '首页',
|
|
1993
2172
|
allApps: '全部应用',
|
|
2173
|
+
yourApps: '我的应用',
|
|
2174
|
+
showMoreApps: '更多',
|
|
2175
|
+
showLess: '收起',
|
|
2176
|
+
continueEmpty: '你打开过的内容会显示在这里。',
|
|
2177
|
+
actionCenter: {
|
|
2178
|
+
title: '待办事项',
|
|
2179
|
+
empty: '全部处理完毕',
|
|
2180
|
+
},
|
|
1994
2181
|
greetingMorning: '早上好',
|
|
1995
2182
|
greetingAfternoon: '下午好',
|
|
1996
2183
|
greetingEvening: '晚上好',
|
|
@@ -2209,8 +2396,8 @@ const zh = {
|
|
|
2209
2396
|
description: '请填写以下信息以继续操作。',
|
|
2210
2397
|
selectPlaceholder: '请选择 {{label}}',
|
|
2211
2398
|
requiredError: '{{label}} 为必填项',
|
|
2212
|
-
lookupPlaceholder: '
|
|
2213
|
-
lookupHelpText: '
|
|
2399
|
+
lookupPlaceholder: '{{label}} 的记录 ID',
|
|
2400
|
+
lookupHelpText: '该参数未配置引用对象,无法使用记录选择器。请直接填写记录 ID,或联系管理员修正该动作参数。',
|
|
2214
2401
|
cancel: '取消',
|
|
2215
2402
|
confirm: '确认',
|
|
2216
2403
|
uploading: '上传中…',
|
|
@@ -2297,6 +2484,10 @@ const zh = {
|
|
|
2297
2484
|
filterAll: '全部',
|
|
2298
2485
|
markAllRead: '全部标记为已读',
|
|
2299
2486
|
viewAll: '查看全部通知',
|
|
2487
|
+
groupCount: '{{count}} 条通知',
|
|
2488
|
+
groupUnread: '{{count}} 条未读',
|
|
2489
|
+
groupMarkRead: '标记已读',
|
|
2490
|
+
groupMarkReadTitle: '将此类通知全部标记为已读',
|
|
2300
2491
|
approvalsPending: '{{count}} 条待审批',
|
|
2301
2492
|
viewApprovals: '查看审批',
|
|
2302
2493
|
noPendingApprovals: '暂无待审批事项',
|
|
@@ -2409,6 +2600,106 @@ const zh = {
|
|
|
2409
2600
|
done: '完成——隐藏',
|
|
2410
2601
|
},
|
|
2411
2602
|
},
|
|
2603
|
+
excelImport: {
|
|
2604
|
+
noImportableFields: '该对象没有可导入的字段。',
|
|
2605
|
+
schemaReadFailed: '无法读取对象结构。',
|
|
2606
|
+
imported: '已把 {{count}} 行真实数据导入「{{object}}」。',
|
|
2607
|
+
importFrom: '把真实数据导入自',
|
|
2608
|
+
into: '到',
|
|
2609
|
+
opening: '打开中…',
|
|
2610
|
+
importAction: '导入',
|
|
2611
|
+
dismiss: '忽略',
|
|
2612
|
+
},
|
|
2613
|
+
cloudOnboarding: {
|
|
2614
|
+
hintCreate: '创建你的第一个环境——一个独立的工作区,有自己的网址、数据库和套餐。应用的搭建在里面进行。',
|
|
2615
|
+
hintReady: '你的生产环境已就绪。打开它来搭建和运行应用——这些都在环境内部进行。',
|
|
2616
|
+
createEnvironment: '创建你的环境',
|
|
2617
|
+
openProduction: '打开生产环境',
|
|
2618
|
+
manageEnvironments: '管理环境',
|
|
2619
|
+
},
|
|
2620
|
+
aiModelStatus: {
|
|
2621
|
+
summary: '构建 / 提问使用 {{conversational}}({{conversationalSource}});结构化使用 {{structured}}({{structuredSource}})。',
|
|
2622
|
+
summaryRouting: '路由策略:免费方案 → {{free}},付费方案 → {{paid}}。',
|
|
2623
|
+
modelUnknown: '未知',
|
|
2624
|
+
sourceUnknown: '适配器未上报',
|
|
2625
|
+
rowConversational: 'Build / Ask 模型',
|
|
2626
|
+
rowStructured: '结构化(蓝图 / 种子)',
|
|
2627
|
+
rowReasoning: '推理强度',
|
|
2628
|
+
readFailed: '无法读取有效 AI 模型。该环境可能未运行 AI 服务,或你没有 ai:read 权限。',
|
|
2629
|
+
readFailedWithStatus: '无法读取有效 AI 模型(HTTP {{status}})。该环境可能未运行 AI 服务,或你没有 ai:read 权限。',
|
|
2630
|
+
overridesInEffect: '生效的 env 覆盖:',
|
|
2631
|
+
noOverrides: '无 —— 跑的是部署代码的默认值。',
|
|
2632
|
+
adapter: '适配器:',
|
|
2633
|
+
sourceCodeDefault: '代码默认(无 env 覆盖)',
|
|
2634
|
+
sourceInherits: '与 build/ask 相同',
|
|
2635
|
+
sourcePinned: '被 {{source}} 钉住',
|
|
2636
|
+
},
|
|
2637
|
+
chatbotError: {
|
|
2638
|
+
title: '响应失败',
|
|
2639
|
+
fallbackDetail: '出了点问题,请重试。',
|
|
2640
|
+
details: '详情',
|
|
2641
|
+
hide: '隐藏',
|
|
2642
|
+
retry: '重试',
|
|
2643
|
+
},
|
|
2644
|
+
chatbotQuota: {
|
|
2645
|
+
title: '需要升级',
|
|
2646
|
+
fallbackMessage: 'AI 额度已用完。',
|
|
2647
|
+
buyCredits: '购买额度包',
|
|
2648
|
+
upgradePlan: '升级方案',
|
|
2649
|
+
},
|
|
2650
|
+
environment: {
|
|
2651
|
+
addEnvironment: '新建环境',
|
|
2652
|
+
setUpProduction: '创建你的生产环境',
|
|
2653
|
+
addDevelopment: '新建开发环境',
|
|
2654
|
+
entitlement: {
|
|
2655
|
+
productionLimitTitle: '你已经有生产环境了',
|
|
2656
|
+
productionLimitBody: '每个组织只包含一个生产环境。如果还需要,可以新建一个组织,或者联系我们了解企业版方案。',
|
|
2657
|
+
planLockedTitle: '开发环境是付费功能',
|
|
2658
|
+
planLockedBody: '{{plan}}包含一个生产环境。升级后即可添加开发环境 —— 先在开发环境里搭建,确认无误再发布到生产环境。',
|
|
2659
|
+
limitTitle: '开发环境数量已达上限',
|
|
2660
|
+
limitBody: '容量随 AI 席位增长。增加一个 AI 席位,或归档一个不再使用的开发环境来腾出名额。',
|
|
2661
|
+
limitBodyWithCount: '开发环境已使用 {{used}}/{{limit}} 个。容量随 AI 席位增长 —— 增加一个 AI 席位,或归档一个不再使用的开发环境来腾出名额。',
|
|
2662
|
+
freePlan: '免费版',
|
|
2663
|
+
namedPlan: '{{plan}} 版',
|
|
2664
|
+
upgradeCta: '升级套餐',
|
|
2665
|
+
contactSalesCta: '联系销售',
|
|
2666
|
+
},
|
|
2667
|
+
},
|
|
2668
|
+
cloudConnection: {
|
|
2669
|
+
checking: '正在检查连接…',
|
|
2670
|
+
retry: '重试',
|
|
2671
|
+
errors: {
|
|
2672
|
+
expired: '请求在获批前已过期,请重新开始。',
|
|
2673
|
+
bindFailed: '绑定失败。',
|
|
2674
|
+
deviceCodeFailed: '设备码请求失败。',
|
|
2675
|
+
},
|
|
2676
|
+
waiting: {
|
|
2677
|
+
popupOpened: '请在刚打开的窗口中批准此连接——本页面会自动更新。',
|
|
2678
|
+
polling: '正在等待云端控制台批准…',
|
|
2679
|
+
openApproval: '打开批准页面',
|
|
2680
|
+
copy: '复制',
|
|
2681
|
+
copied: '已复制',
|
|
2682
|
+
codePrefilled: '批准页面已自动填入该代码。',
|
|
2683
|
+
openItHere: '窗口没有出现?点此打开',
|
|
2684
|
+
cancel: '取消',
|
|
2685
|
+
},
|
|
2686
|
+
bound: {
|
|
2687
|
+
title: '已连接到 ObjectStack 云',
|
|
2688
|
+
runtime: '运行时',
|
|
2689
|
+
organization: '组织',
|
|
2690
|
+
approvedBy: '批准人',
|
|
2691
|
+
runtimeId: '运行时 ID',
|
|
2692
|
+
environment: '环境',
|
|
2693
|
+
since: '连接于',
|
|
2694
|
+
privatePackages: '组织的私有包现已显示在应用市场的「你的组织」分类下。',
|
|
2695
|
+
disconnect: '断开连接',
|
|
2696
|
+
},
|
|
2697
|
+
unbound: {
|
|
2698
|
+
title: '未连接',
|
|
2699
|
+
body: '将此运行时连接到 ObjectStack 控制平面,即可浏览并安装组织的私有包。只需在云账户中点击一次批准——无需在本页面输入任何 ID 或凭据。',
|
|
2700
|
+
connect: '连接',
|
|
2701
|
+
},
|
|
2702
|
+
},
|
|
2412
2703
|
marketplace: {
|
|
2413
2704
|
title: '应用市场',
|
|
2414
2705
|
subtitle: '浏览已通过审核、发布到 ObjectStack 目录中的应用。点击应用查看详情并安装到你的某个环境中。',
|
|
@@ -2543,6 +2834,14 @@ const zh = {
|
|
|
2543
2834
|
yearsAgo: '{{count}} 年前',
|
|
2544
2835
|
},
|
|
2545
2836
|
},
|
|
2837
|
+
approvals: {
|
|
2838
|
+
approve: '批准',
|
|
2839
|
+
reject: '驳回',
|
|
2840
|
+
comment: '审批意见(可选)',
|
|
2841
|
+
approveSuccess: '已批准',
|
|
2842
|
+
rejectSuccess: '已驳回',
|
|
2843
|
+
rejectConfirm: '确定驳回该审批请求吗?',
|
|
2844
|
+
},
|
|
2546
2845
|
approvalsInbox: {
|
|
2547
2846
|
loadMore: '加载更多',
|
|
2548
2847
|
loadingMore: '加载中…',
|
|
@@ -2567,13 +2866,28 @@ const zh = {
|
|
|
2567
2866
|
slaRemaining: 'SLA 剩余 {{dur}}',
|
|
2568
2867
|
slaOverdue: 'SLA 已超期 {{dur}}',
|
|
2569
2868
|
actReassign: '转签',
|
|
2869
|
+
reassignFromTo: '从 {{from}} 转给 {{to}}',
|
|
2570
2870
|
actRemind: '催办',
|
|
2571
2871
|
actRequestInfo: '要求补充材料',
|
|
2572
2872
|
actComment: '评论',
|
|
2573
2873
|
stepProgress: '审批步骤',
|
|
2574
2874
|
prevRequest: '上一条',
|
|
2575
2875
|
nextRequest: '下一条',
|
|
2576
|
-
positionOf: '第 {{index}} / {{total}}
|
|
2876
|
+
positionOf: '第 {{index}} / {{total}} 条请求',
|
|
2877
|
+
progressApprovals: '审批进度 — {{got}} / {{need}}',
|
|
2878
|
+
progressGroups: '会签进度 — {{got}} / {{need}} 组',
|
|
2879
|
+
progressEligible: '{{count}} 位可审批人',
|
|
2880
|
+
progressBar: '决策进度',
|
|
2881
|
+
declaredActions: '操作',
|
|
2882
|
+
attachmentChip: '附件',
|
|
2883
|
+
attachmentOpenFailed: '无法打开附件,请重试',
|
|
2884
|
+
approveOneTitle: '通过“{{title}}”?',
|
|
2885
|
+
approveOneBody: '将以你的身份通过该请求。如需填写审批意见或附件,请打开该请求处理。',
|
|
2886
|
+
flowOrigin: '流程发起',
|
|
2887
|
+
sortBy: '排序',
|
|
2888
|
+
sortRecent: '最新优先',
|
|
2889
|
+
sortOldest: '最早优先',
|
|
2890
|
+
sortAmount: '金额(从高到低)',
|
|
2577
2891
|
quickPhrase1: '同意,符合要求。',
|
|
2578
2892
|
quickPhrase2: '有条件同意,请关注执行情况。',
|
|
2579
2893
|
quickPhrase3: '请补充相关材料后重新提交。',
|
package/dist/useObjectLabel.d.ts
CHANGED
|
@@ -181,19 +181,24 @@ export declare function useObjectLabel(): {
|
|
|
181
181
|
sectionLabel: (objectName: string, sectionName: string, fallback: string) => string;
|
|
182
182
|
/**
|
|
183
183
|
* Resolve translated action label.
|
|
184
|
-
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.label
|
|
185
|
-
*
|
|
184
|
+
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.label`,
|
|
185
|
+
* falling back to `{ns}.globalActions.{actionName}.label` — both when
|
|
186
|
+
* objectName is omitted AND when the object-scoped key misses (so a
|
|
187
|
+
* globalAction surfaced on a record-detail action bar still resolves;
|
|
188
|
+
* objectui#3372).
|
|
186
189
|
*/
|
|
187
190
|
actionLabel: (objectName: string | undefined, actionName: string, fallback: string) => string;
|
|
188
191
|
/**
|
|
189
192
|
* Resolve translated action confirmation prompt.
|
|
190
|
-
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.confirmText
|
|
193
|
+
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.confirmText`,
|
|
194
|
+
* falling back to `{ns}.globalActions.{actionName}.confirmText`.
|
|
191
195
|
* Returns undefined when no translation and no fallback exist.
|
|
192
196
|
*/
|
|
193
197
|
actionConfirm: (objectName: string | undefined, actionName: string, fallback?: string) => string | undefined;
|
|
194
198
|
/**
|
|
195
199
|
* Resolve translated action success message.
|
|
196
|
-
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.successMessage
|
|
200
|
+
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.successMessage`,
|
|
201
|
+
* falling back to `{ns}.globalActions.{actionName}.successMessage`.
|
|
197
202
|
*/
|
|
198
203
|
actionSuccess: (objectName: string | undefined, actionName: string, fallback?: string) => string | undefined;
|
|
199
204
|
/**
|
|
@@ -208,8 +213,9 @@ export declare function useObjectLabel(): {
|
|
|
208
213
|
* Resolve a translated copy of an action's post-success RESULT DIALOG
|
|
209
214
|
* (`title` / `description` / `acknowledge` + per-field labels).
|
|
210
215
|
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.resultDialog.*`,
|
|
211
|
-
* falling back to `{ns}.globalActions.{actionName}.resultDialog.*` when
|
|
212
|
-
* objectName is omitted, then to the
|
|
216
|
+
* falling back to `{ns}.globalActions.{actionName}.resultDialog.*` (when
|
|
217
|
+
* objectName is omitted OR the object-scoped key misses), then to the
|
|
218
|
+
* metadata's literal strings.
|
|
213
219
|
*
|
|
214
220
|
* The `fields` translation node is keyed by the LITERAL result-field path
|
|
215
221
|
* from the action metadata (may contain dots, e.g. `"user.email"`), so it
|
|
@@ -395,19 +401,24 @@ export declare function useSafeFieldLabel(): {
|
|
|
395
401
|
sectionLabel: (objectName: string, sectionName: string, fallback: string) => string;
|
|
396
402
|
/**
|
|
397
403
|
* Resolve translated action label.
|
|
398
|
-
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.label
|
|
399
|
-
*
|
|
404
|
+
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.label`,
|
|
405
|
+
* falling back to `{ns}.globalActions.{actionName}.label` — both when
|
|
406
|
+
* objectName is omitted AND when the object-scoped key misses (so a
|
|
407
|
+
* globalAction surfaced on a record-detail action bar still resolves;
|
|
408
|
+
* objectui#3372).
|
|
400
409
|
*/
|
|
401
410
|
actionLabel: (objectName: string | undefined, actionName: string, fallback: string) => string;
|
|
402
411
|
/**
|
|
403
412
|
* Resolve translated action confirmation prompt.
|
|
404
|
-
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.confirmText
|
|
413
|
+
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.confirmText`,
|
|
414
|
+
* falling back to `{ns}.globalActions.{actionName}.confirmText`.
|
|
405
415
|
* Returns undefined when no translation and no fallback exist.
|
|
406
416
|
*/
|
|
407
417
|
actionConfirm: (objectName: string | undefined, actionName: string, fallback?: string) => string | undefined;
|
|
408
418
|
/**
|
|
409
419
|
* Resolve translated action success message.
|
|
410
|
-
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.successMessage
|
|
420
|
+
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.successMessage`,
|
|
421
|
+
* falling back to `{ns}.globalActions.{actionName}.successMessage`.
|
|
411
422
|
*/
|
|
412
423
|
actionSuccess: (objectName: string | undefined, actionName: string, fallback?: string) => string | undefined;
|
|
413
424
|
/**
|
|
@@ -422,8 +433,9 @@ export declare function useSafeFieldLabel(): {
|
|
|
422
433
|
* Resolve a translated copy of an action's post-success RESULT DIALOG
|
|
423
434
|
* (`title` / `description` / `acknowledge` + per-field labels).
|
|
424
435
|
* Convention: `{ns}.objects.{objectName}._actions.{actionName}.resultDialog.*`,
|
|
425
|
-
* falling back to `{ns}.globalActions.{actionName}.resultDialog.*` when
|
|
426
|
-
* objectName is omitted, then to the
|
|
436
|
+
* falling back to `{ns}.globalActions.{actionName}.resultDialog.*` (when
|
|
437
|
+
* objectName is omitted OR the object-scoped key misses), then to the
|
|
438
|
+
* metadata's literal strings.
|
|
427
439
|
*
|
|
428
440
|
* The `fields` translation node is keyed by the LITERAL result-field path
|
|
429
441
|
* from the action metadata (may contain dots, e.g. `"user.email"`), so it
|