@object-ui/i18n 16.1.0 → 17.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.
- package/CHANGELOG.md +1133 -0
- package/dist/locales/ar.d.ts +825 -2
- package/dist/locales/ar.js +829 -5
- package/dist/locales/de.d.ts +823 -2
- package/dist/locales/de.js +827 -5
- package/dist/locales/en.d.ts +380 -6
- package/dist/locales/en.js +395 -8
- package/dist/locales/es.d.ts +823 -2
- package/dist/locales/es.js +827 -5
- package/dist/locales/fr.d.ts +825 -2
- package/dist/locales/fr.js +829 -5
- package/dist/locales/index.d.ts +7322 -76
- package/dist/locales/ja.d.ts +823 -2
- package/dist/locales/ja.js +827 -5
- package/dist/locales/ko.d.ts +823 -2
- package/dist/locales/ko.js +827 -5
- package/dist/locales/pt.d.ts +825 -2
- package/dist/locales/pt.js +829 -5
- package/dist/locales/ru.d.ts +825 -2
- package/dist/locales/ru.js +829 -5
- package/dist/locales/zh.d.ts +301 -5
- package/dist/locales/zh.js +303 -5
- package/dist/useObjectLabel.d.ts +24 -12
- package/dist/useObjectLabel.js +50 -41
- 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,15 @@ const zh = {
|
|
|
642
728
|
editInlineHint: '双击编辑',
|
|
643
729
|
lockedByApproval: '审批中已锁定',
|
|
644
730
|
lockedTooltip: '该记录有待审批的请求,编辑已被锁定',
|
|
731
|
+
writeStrippedTitle: '部分字段未保存',
|
|
732
|
+
writeStrippedReadonly: '以下字段为只读,未保存:{{fields}}',
|
|
733
|
+
writeStrippedByState: '以下字段在记录当前状态下不可编辑,未保存:{{fields}}',
|
|
734
|
+
approvalPendingEditable: '审批中 · 可编辑',
|
|
735
|
+
approvalPendingTooltip: '该记录有待审批的请求,但当前审批节点仍允许编辑',
|
|
645
736
|
cancelApproval: '撤回审批',
|
|
646
737
|
cancelApprovalInFlight: '撤回中…',
|
|
647
738
|
cancelApprovalTooltip: '撤回当前的待审批请求以解除记录锁定',
|
|
739
|
+
cancelApprovalTooltipUnlocked: '撤回当前的待审批请求',
|
|
648
740
|
cancelApprovalFailed: '撤回审批失败',
|
|
649
741
|
cancelApprovalUnavailable: '当前数据源不支持撤回审批',
|
|
650
742
|
linkCopied: '链接已复制到剪贴板',
|
|
@@ -731,6 +823,18 @@ const zh = {
|
|
|
731
823
|
attachmentCount: '{{count}} 个附件',
|
|
732
824
|
attachmentCountPlural: '{{count}} 个附件',
|
|
733
825
|
removeAttachment: '移除附件',
|
|
826
|
+
// Record Attachments panel (enable.files, objectstack#4358)
|
|
827
|
+
attachments: '附件',
|
|
828
|
+
uploadAttachment: '上传',
|
|
829
|
+
loadingAttachments: '正在加载附件…',
|
|
830
|
+
noAttachments: '暂无附件。上传一个文件开始吧。',
|
|
831
|
+
downloadAttachment: '下载',
|
|
832
|
+
deleteAttachment: '删除附件',
|
|
833
|
+
attachmentDeleteDenied: '只有上传者或可编辑此记录的用户才能删除此附件。',
|
|
834
|
+
attachmentParentAccessDenied: '您无权为此记录添加附件。',
|
|
835
|
+
attachmentDownloadDenied: '您无权下载此附件。',
|
|
836
|
+
attachmentAuthRequired: '请登录后再下载此附件。',
|
|
837
|
+
attachmentPermissionDenied: '您没有执行此操作的权限。',
|
|
734
838
|
// Diff
|
|
735
839
|
unifiedDiff: '统一视图',
|
|
736
840
|
sideBySideDiff: '并排视图',
|
|
@@ -1150,6 +1254,7 @@ const zh = {
|
|
|
1150
1254
|
navTypeGroup: '分组',
|
|
1151
1255
|
navTypeSeparator: '分隔线',
|
|
1152
1256
|
navTypeAction: '操作',
|
|
1257
|
+
navTypeComponent: '组件',
|
|
1153
1258
|
navEditIcon: '编辑图标',
|
|
1154
1259
|
navToggleVisible: '切换可见性',
|
|
1155
1260
|
navHidden: '已隐藏',
|
|
@@ -1266,6 +1371,23 @@ const zh = {
|
|
|
1266
1371
|
dragToReorder: '拖动以重新排序',
|
|
1267
1372
|
favorites: '收藏',
|
|
1268
1373
|
},
|
|
1374
|
+
settingsHub: {
|
|
1375
|
+
title: '设置',
|
|
1376
|
+
subtitle: '配置工作区、集成与功能开关。',
|
|
1377
|
+
loadError: '加载设置失败',
|
|
1378
|
+
empty: '尚未注册任何设置。插件可通过 SettingsService 注册设置清单。',
|
|
1379
|
+
settingsCount: '{{n}} 项设置',
|
|
1380
|
+
beta: 'Beta',
|
|
1381
|
+
// 分类小标题,按 manifest 的 `category` 值取键;未知(插件自定义)分类回退到原始字符串。
|
|
1382
|
+
categories: {
|
|
1383
|
+
Workspace: '工作区',
|
|
1384
|
+
Communication: '通讯',
|
|
1385
|
+
Security: '安全',
|
|
1386
|
+
Infrastructure: '基础设施',
|
|
1387
|
+
Beta: 'Beta',
|
|
1388
|
+
Other: '其他',
|
|
1389
|
+
},
|
|
1390
|
+
},
|
|
1269
1391
|
loadingSteps: {
|
|
1270
1392
|
connecting: '正在连接数据源',
|
|
1271
1393
|
loadingConfig: '正在加载配置',
|
|
@@ -1302,6 +1424,7 @@ const zh = {
|
|
|
1302
1424
|
toggleDarkMode: '切换深色模式',
|
|
1303
1425
|
},
|
|
1304
1426
|
commandPalette: {
|
|
1427
|
+
title: '命令面板',
|
|
1305
1428
|
placeholder: '输入命令或搜索...',
|
|
1306
1429
|
noResults: '未找到结果。',
|
|
1307
1430
|
searching: '搜索中…',
|
|
@@ -1428,6 +1551,21 @@ const zh = {
|
|
|
1428
1551
|
planApproveMessage: '确认,开始搭建。',
|
|
1429
1552
|
planApproveDefaultsMessage: '确认搭建,未决问题按你的合理假设和默认处理。',
|
|
1430
1553
|
planAnswerMessage: '关于「{{question}}」,我选择「{{option}}」。',
|
|
1554
|
+
changesTitle: '确认改动',
|
|
1555
|
+
changesConfirmed: '已确认',
|
|
1556
|
+
changesConfirm: '确认修改',
|
|
1557
|
+
changesConfirmHint: '回复以确认或调整该改动。',
|
|
1558
|
+
changesConfirmMessage: '确认修改,应用你刚才提议的改动。',
|
|
1559
|
+
changeVerb: {
|
|
1560
|
+
createObject: '新建对象',
|
|
1561
|
+
addField: '新增字段',
|
|
1562
|
+
modifyField: '修改字段',
|
|
1563
|
+
deleteField: '删除字段',
|
|
1564
|
+
createMetadata: '新建',
|
|
1565
|
+
updateMetadata: '修改',
|
|
1566
|
+
createSeed: '生成示例数据',
|
|
1567
|
+
createPackage: '新建应用包',
|
|
1568
|
+
},
|
|
1431
1569
|
justNow: '刚刚',
|
|
1432
1570
|
minutesAgo: '{{count}} 分钟前',
|
|
1433
1571
|
hoursAgo: '{{count}} 小时前',
|
|
@@ -1449,6 +1587,8 @@ const zh = {
|
|
|
1449
1587
|
buildCrm: '帮我搭建一个 CRM:客户、联系人、商机,并建立它们之间的关系。',
|
|
1450
1588
|
buildApp: '做一个项目管理应用:项目、任务、成员。',
|
|
1451
1589
|
buildFlow: '设计一个工单系统:工单、优先级、状态流转。',
|
|
1590
|
+
buildInventory: '做一个库存管理应用:商品、库存量、供应商,以及低库存预警。',
|
|
1591
|
+
buildRecruiting: '做一个招聘跟踪应用:候选人、在招岗位、面试阶段和面试记录。',
|
|
1452
1592
|
},
|
|
1453
1593
|
generic: {
|
|
1454
1594
|
help: '你可以帮我做什么?',
|
|
@@ -1878,6 +2018,40 @@ const zh = {
|
|
|
1878
2018
|
shell: {
|
|
1879
2019
|
tenantHostHint: '您正在登录此工作区',
|
|
1880
2020
|
},
|
|
2021
|
+
layout: {
|
|
2022
|
+
headline: '更快地构建强大的业务应用。',
|
|
2023
|
+
subhead: '面向企业数据管理、工作流与分析的统一平台。',
|
|
2024
|
+
},
|
|
2025
|
+
remediation: {
|
|
2026
|
+
signOut: '改为退出登录',
|
|
2027
|
+
password: {
|
|
2028
|
+
title: '您的密码已过期',
|
|
2029
|
+
fallbackMessage: '请设置新密码后继续。',
|
|
2030
|
+
current: '当前密码',
|
|
2031
|
+
next: '新密码',
|
|
2032
|
+
confirm: '确认新密码',
|
|
2033
|
+
submit: '修改密码并继续',
|
|
2034
|
+
submitting: '正在更新…',
|
|
2035
|
+
mismatch: '两次输入的新密码不一致。',
|
|
2036
|
+
failed: '无法修改密码。',
|
|
2037
|
+
},
|
|
2038
|
+
mfa: {
|
|
2039
|
+
title: '设置双重验证',
|
|
2040
|
+
fallbackMessage: '您的组织要求使用身份验证器应用后方可继续。',
|
|
2041
|
+
confirmPassword: '确认您的密码',
|
|
2042
|
+
continue: '继续',
|
|
2043
|
+
preparing: '正在准备…',
|
|
2044
|
+
enrollFailed: '无法开始绑定。',
|
|
2045
|
+
scanTitle: '使用身份验证器扫码',
|
|
2046
|
+
scanBody: '使用 Google Authenticator、1Password、Authy 等应用扫描此二维码,然后输入 6 位验证码。',
|
|
2047
|
+
backupTitle: '保存您的备用码',
|
|
2048
|
+
backupBody: '请妥善保管——设备丢失时每个备用码可使用一次。',
|
|
2049
|
+
codeLabel: '6 位验证码',
|
|
2050
|
+
verify: '验证并继续',
|
|
2051
|
+
verifying: '正在验证…',
|
|
2052
|
+
invalidCode: '验证码无效,请重试。',
|
|
2053
|
+
},
|
|
2054
|
+
},
|
|
1881
2055
|
},
|
|
1882
2056
|
profile: {
|
|
1883
2057
|
title: '个人资料',
|
|
@@ -1942,6 +2116,7 @@ const zh = {
|
|
|
1942
2116
|
settings: '工作区设置',
|
|
1943
2117
|
},
|
|
1944
2118
|
help: {
|
|
2119
|
+
keyboardShortcuts: '键盘快捷键',
|
|
1945
2120
|
onThisPage: '本页目录',
|
|
1946
2121
|
appDocs: '本应用文档',
|
|
1947
2122
|
allDocs: '全部文档',
|
|
@@ -1972,6 +2147,7 @@ const zh = {
|
|
|
1972
2147
|
offline: '离线',
|
|
1973
2148
|
usersOnline: '当前在线用户',
|
|
1974
2149
|
switchView: '切换视图',
|
|
2150
|
+
switchObject: '切换对象',
|
|
1975
2151
|
connection: {
|
|
1976
2152
|
connected: '已连接',
|
|
1977
2153
|
connecting: '连接中...',
|
|
@@ -1991,6 +2167,14 @@ const zh = {
|
|
|
1991
2167
|
subtitle: '您的工作区仪表盘',
|
|
1992
2168
|
nav: '首页',
|
|
1993
2169
|
allApps: '全部应用',
|
|
2170
|
+
yourApps: '我的应用',
|
|
2171
|
+
showMoreApps: '更多',
|
|
2172
|
+
showLess: '收起',
|
|
2173
|
+
continueEmpty: '你打开过的内容会显示在这里。',
|
|
2174
|
+
actionCenter: {
|
|
2175
|
+
title: '待办事项',
|
|
2176
|
+
empty: '全部处理完毕',
|
|
2177
|
+
},
|
|
1994
2178
|
greetingMorning: '早上好',
|
|
1995
2179
|
greetingAfternoon: '下午好',
|
|
1996
2180
|
greetingEvening: '晚上好',
|
|
@@ -2209,8 +2393,8 @@ const zh = {
|
|
|
2209
2393
|
description: '请填写以下信息以继续操作。',
|
|
2210
2394
|
selectPlaceholder: '请选择 {{label}}',
|
|
2211
2395
|
requiredError: '{{label}} 为必填项',
|
|
2212
|
-
lookupPlaceholder: '
|
|
2213
|
-
lookupHelpText: '
|
|
2396
|
+
lookupPlaceholder: '{{label}} 的记录 ID',
|
|
2397
|
+
lookupHelpText: '该参数未配置引用对象,无法使用记录选择器。请直接填写记录 ID,或联系管理员修正该动作参数。',
|
|
2214
2398
|
cancel: '取消',
|
|
2215
2399
|
confirm: '确认',
|
|
2216
2400
|
uploading: '上传中…',
|
|
@@ -2297,6 +2481,10 @@ const zh = {
|
|
|
2297
2481
|
filterAll: '全部',
|
|
2298
2482
|
markAllRead: '全部标记为已读',
|
|
2299
2483
|
viewAll: '查看全部通知',
|
|
2484
|
+
groupCount: '{{count}} 条通知',
|
|
2485
|
+
groupUnread: '{{count}} 条未读',
|
|
2486
|
+
groupMarkRead: '标记已读',
|
|
2487
|
+
groupMarkReadTitle: '将此类通知全部标记为已读',
|
|
2300
2488
|
approvalsPending: '{{count}} 条待审批',
|
|
2301
2489
|
viewApprovals: '查看审批',
|
|
2302
2490
|
noPendingApprovals: '暂无待审批事项',
|
|
@@ -2409,6 +2597,93 @@ const zh = {
|
|
|
2409
2597
|
done: '完成——隐藏',
|
|
2410
2598
|
},
|
|
2411
2599
|
},
|
|
2600
|
+
excelImport: {
|
|
2601
|
+
noImportableFields: '该对象没有可导入的字段。',
|
|
2602
|
+
schemaReadFailed: '无法读取对象结构。',
|
|
2603
|
+
imported: '已把 {{count}} 行真实数据导入「{{object}}」。',
|
|
2604
|
+
importFrom: '把真实数据导入自',
|
|
2605
|
+
into: '到',
|
|
2606
|
+
opening: '打开中…',
|
|
2607
|
+
importAction: '导入',
|
|
2608
|
+
dismiss: '忽略',
|
|
2609
|
+
},
|
|
2610
|
+
cloudOnboarding: {
|
|
2611
|
+
hintCreate: '创建你的第一个环境——一个独立的工作区,有自己的网址、数据库和套餐。应用的搭建在里面进行。',
|
|
2612
|
+
hintReady: '你的生产环境已就绪。打开它来搭建和运行应用——这些都在环境内部进行。',
|
|
2613
|
+
createEnvironment: '创建你的环境',
|
|
2614
|
+
openProduction: '打开生产环境',
|
|
2615
|
+
manageEnvironments: '管理环境',
|
|
2616
|
+
},
|
|
2617
|
+
aiModelStatus: {
|
|
2618
|
+
summary: '构建 / 提问使用 {{conversational}}({{conversationalSource}});结构化使用 {{structured}}({{structuredSource}})。',
|
|
2619
|
+
summaryRouting: '路由策略:免费方案 → {{free}},付费方案 → {{paid}}。',
|
|
2620
|
+
modelUnknown: '未知',
|
|
2621
|
+
sourceUnknown: '适配器未上报',
|
|
2622
|
+
rowConversational: 'Build / Ask 模型',
|
|
2623
|
+
rowStructured: '结构化(蓝图 / 种子)',
|
|
2624
|
+
rowReasoning: '推理强度',
|
|
2625
|
+
readFailed: '无法读取有效 AI 模型。该环境可能未运行 AI 服务,或你没有 ai:read 权限。',
|
|
2626
|
+
readFailedWithStatus: '无法读取有效 AI 模型(HTTP {{status}})。该环境可能未运行 AI 服务,或你没有 ai:read 权限。',
|
|
2627
|
+
overridesInEffect: '生效的 env 覆盖:',
|
|
2628
|
+
noOverrides: '无 —— 跑的是部署代码的默认值。',
|
|
2629
|
+
adapter: '适配器:',
|
|
2630
|
+
sourceCodeDefault: '代码默认(无 env 覆盖)',
|
|
2631
|
+
sourceInherits: '与 build/ask 相同',
|
|
2632
|
+
sourcePinned: '被 {{source}} 钉住',
|
|
2633
|
+
},
|
|
2634
|
+
chatbotError: {
|
|
2635
|
+
title: '响应失败',
|
|
2636
|
+
fallbackDetail: '出了点问题,请重试。',
|
|
2637
|
+
details: '详情',
|
|
2638
|
+
hide: '隐藏',
|
|
2639
|
+
retry: '重试',
|
|
2640
|
+
},
|
|
2641
|
+
chatbotQuota: {
|
|
2642
|
+
title: '需要升级',
|
|
2643
|
+
fallbackMessage: 'AI 额度已用完。',
|
|
2644
|
+
buyCredits: '购买额度包',
|
|
2645
|
+
upgradePlan: '升级方案',
|
|
2646
|
+
},
|
|
2647
|
+
environment: {
|
|
2648
|
+
addEnvironment: '新建环境',
|
|
2649
|
+
setUpProduction: '创建你的生产环境',
|
|
2650
|
+
addDevelopment: '新建开发环境',
|
|
2651
|
+
},
|
|
2652
|
+
cloudConnection: {
|
|
2653
|
+
checking: '正在检查连接…',
|
|
2654
|
+
retry: '重试',
|
|
2655
|
+
errors: {
|
|
2656
|
+
expired: '请求在获批前已过期,请重新开始。',
|
|
2657
|
+
bindFailed: '绑定失败。',
|
|
2658
|
+
deviceCodeFailed: '设备码请求失败。',
|
|
2659
|
+
},
|
|
2660
|
+
waiting: {
|
|
2661
|
+
popupOpened: '请在刚打开的窗口中批准此连接——本页面会自动更新。',
|
|
2662
|
+
polling: '正在等待云端控制台批准…',
|
|
2663
|
+
openApproval: '打开批准页面',
|
|
2664
|
+
copy: '复制',
|
|
2665
|
+
copied: '已复制',
|
|
2666
|
+
codePrefilled: '批准页面已自动填入该代码。',
|
|
2667
|
+
openItHere: '窗口没有出现?点此打开',
|
|
2668
|
+
cancel: '取消',
|
|
2669
|
+
},
|
|
2670
|
+
bound: {
|
|
2671
|
+
title: '已连接到 ObjectStack 云',
|
|
2672
|
+
runtime: '运行时',
|
|
2673
|
+
organization: '组织',
|
|
2674
|
+
approvedBy: '批准人',
|
|
2675
|
+
runtimeId: '运行时 ID',
|
|
2676
|
+
environment: '环境',
|
|
2677
|
+
since: '连接于',
|
|
2678
|
+
privatePackages: '组织的私有包现已显示在应用市场的「你的组织」分类下。',
|
|
2679
|
+
disconnect: '断开连接',
|
|
2680
|
+
},
|
|
2681
|
+
unbound: {
|
|
2682
|
+
title: '未连接',
|
|
2683
|
+
body: '将此运行时连接到 ObjectStack 控制平面,即可浏览并安装组织的私有包。只需在云账户中点击一次批准——无需在本页面输入任何 ID 或凭据。',
|
|
2684
|
+
connect: '连接',
|
|
2685
|
+
},
|
|
2686
|
+
},
|
|
2412
2687
|
marketplace: {
|
|
2413
2688
|
title: '应用市场',
|
|
2414
2689
|
subtitle: '浏览已通过审核、发布到 ObjectStack 目录中的应用。点击应用查看详情并安装到你的某个环境中。',
|
|
@@ -2543,6 +2818,14 @@ const zh = {
|
|
|
2543
2818
|
yearsAgo: '{{count}} 年前',
|
|
2544
2819
|
},
|
|
2545
2820
|
},
|
|
2821
|
+
approvals: {
|
|
2822
|
+
approve: '批准',
|
|
2823
|
+
reject: '驳回',
|
|
2824
|
+
comment: '审批意见(可选)',
|
|
2825
|
+
approveSuccess: '已批准',
|
|
2826
|
+
rejectSuccess: '已驳回',
|
|
2827
|
+
rejectConfirm: '确定驳回该审批请求吗?',
|
|
2828
|
+
},
|
|
2546
2829
|
approvalsInbox: {
|
|
2547
2830
|
loadMore: '加载更多',
|
|
2548
2831
|
loadingMore: '加载中…',
|
|
@@ -2567,13 +2850,28 @@ const zh = {
|
|
|
2567
2850
|
slaRemaining: 'SLA 剩余 {{dur}}',
|
|
2568
2851
|
slaOverdue: 'SLA 已超期 {{dur}}',
|
|
2569
2852
|
actReassign: '转签',
|
|
2853
|
+
reassignFromTo: '从 {{from}} 转给 {{to}}',
|
|
2570
2854
|
actRemind: '催办',
|
|
2571
2855
|
actRequestInfo: '要求补充材料',
|
|
2572
2856
|
actComment: '评论',
|
|
2573
2857
|
stepProgress: '审批步骤',
|
|
2574
2858
|
prevRequest: '上一条',
|
|
2575
2859
|
nextRequest: '下一条',
|
|
2576
|
-
positionOf: '第 {{index}} / {{total}}
|
|
2860
|
+
positionOf: '第 {{index}} / {{total}} 条请求',
|
|
2861
|
+
progressApprovals: '审批进度 — {{got}} / {{need}}',
|
|
2862
|
+
progressGroups: '会签进度 — {{got}} / {{need}} 组',
|
|
2863
|
+
progressEligible: '{{count}} 位可审批人',
|
|
2864
|
+
progressBar: '决策进度',
|
|
2865
|
+
declaredActions: '操作',
|
|
2866
|
+
attachmentChip: '附件',
|
|
2867
|
+
attachmentOpenFailed: '无法打开附件,请重试',
|
|
2868
|
+
approveOneTitle: '通过“{{title}}”?',
|
|
2869
|
+
approveOneBody: '将以你的身份通过该请求。如需填写审批意见或附件,请打开该请求处理。',
|
|
2870
|
+
flowOrigin: '流程发起',
|
|
2871
|
+
sortBy: '排序',
|
|
2872
|
+
sortRecent: '最新优先',
|
|
2873
|
+
sortOldest: '最早优先',
|
|
2874
|
+
sortAmount: '金额(从高到低)',
|
|
2577
2875
|
quickPhrase1: '同意,符合要求。',
|
|
2578
2876
|
quickPhrase2: '有条件同意,请关注执行情况。',
|
|
2579
2877
|
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
|