@object-ui/i18n 11.3.0 → 11.4.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 +51 -0
- package/dist/locales/en.d.ts +42 -0
- package/dist/locales/en.js +42 -0
- package/dist/locales/index.d.ts +151 -0
- package/dist/locales/zh.d.ts +109 -0
- package/dist/locales/zh.js +118 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,56 @@
|
|
|
1
1
|
# @object-ui/i18n
|
|
2
2
|
|
|
3
|
+
## 11.4.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9cd9be1: fix(plugin-grid): make the import wizard's preview step readable — wider columns + friendlier validation errors
|
|
8
|
+
|
|
9
|
+
Two problems on the import wizard's 预览 (preview) step:
|
|
10
|
+
|
|
11
|
+
- **Cramped preview table.** With many mapped columns crammed into the fixed
|
|
12
|
+
dialog width, each header collapsed to one character per line (`关联排班计划`
|
|
13
|
+
stacked vertically) and became unreadable. Columns now get a `min-width` and
|
|
14
|
+
headers no longer wrap, so the preview area scrolls horizontally instead of
|
|
15
|
+
crushing every column.
|
|
16
|
+
|
|
17
|
+
- **Unreadable dry-run error messages.** A reference cell that couldn't resolve
|
|
18
|
+
rendered as `第 1 行: product: product: no os_tianshun_ehr_product matches "导管架"`
|
|
19
|
+
— the field named twice, an internal object api-name leaking through, all in
|
|
20
|
+
English. The server already tags each failure with a structured `code`, so we
|
|
21
|
+
now drive the message off that code (localized, with the offending value),
|
|
22
|
+
resolve the field's api-name to its label, and only fall back to the raw
|
|
23
|
+
server text — minus the duplicated prefix — for unrecognized codes. The same
|
|
24
|
+
row now reads `第 1 行: 产品:找不到匹配 "导管架" 的记录`.
|
|
25
|
+
|
|
26
|
+
- 790558b: fix(studio): make the Automations and Interfaces pillars authorable in a fresh package
|
|
27
|
+
|
|
28
|
+
Dogfooding a brand-new package end-to-end (design objects → automations →
|
|
29
|
+
interfaces → publish → use) surfaced two blocking dead-ends in the pillar
|
|
30
|
+
Studio, both now fixed:
|
|
31
|
+
|
|
32
|
+
- **Automations pillar had no way to create a flow.** For a package with zero
|
|
33
|
+
flows the rail rendered an endless "加载中…" (loading conflated with empty)
|
|
34
|
+
and offered no create affordance, so automations could never be authored.
|
|
35
|
+
It now tracks the list-loaded state (real empty state "还没有自动化 — 点「新建」开始")
|
|
36
|
+
and has a "+ 新建" inline creator that saves a minimal, valid `start → end`
|
|
37
|
+
autolaunched flow skeleton as a draft and opens it in the flow designer.
|
|
38
|
+
|
|
39
|
+
- **Interfaces nav items could not be bound to a target — and silently failed
|
|
40
|
+
to save.** Selecting a nav item showed no inspector, and the item shape the
|
|
41
|
+
editor produced (`{ label, object }`, no `id`/`type`) failed the app spec's
|
|
42
|
+
navigation union ("navigation.N: Invalid input"), so the draft never
|
|
43
|
+
persisted and the published app navigation stayed empty. The right panel now
|
|
44
|
+
renders a `StudioNavItemInspector` with a business-friendly object picker
|
|
45
|
+
(populated from the package's published ∪ draft objects) that emits a
|
|
46
|
+
spec-valid `ObjectNavItem` (`{ id, type:'object', objectName, label }`), and
|
|
47
|
+
the nav save drops still-unbound placeholders + backfills a snake_case id so
|
|
48
|
+
one blank item can't fail the whole save.
|
|
49
|
+
|
|
50
|
+
Also fills in the Home builder-cover i18n keys (`home.build.*`,
|
|
51
|
+
`home.template.*`) in `en`/`zh` so the "Build an app" / "Start with a template"
|
|
52
|
+
cards resolve real strings instead of falling back to defaults.
|
|
53
|
+
|
|
3
54
|
## 11.3.0
|
|
4
55
|
|
|
5
56
|
### Patch Changes
|
package/dist/locales/en.d.ts
CHANGED
|
@@ -161,6 +161,12 @@ declare const en: {
|
|
|
161
161
|
readonly refreshing: "Refreshing…";
|
|
162
162
|
readonly openRecord: "Open record";
|
|
163
163
|
readonly openMenu: "Open menu";
|
|
164
|
+
readonly bulkSelected: "{{count}} selected";
|
|
165
|
+
readonly bulkSelectedAllMatches: "{{count}} selected (all matches)";
|
|
166
|
+
readonly bulkClear: "Clear";
|
|
167
|
+
readonly bulkAllOnPage: "All {{count}} on this page are selected.";
|
|
168
|
+
readonly bulkSelectAllMatching: "Select all {{count}} matching";
|
|
169
|
+
readonly bulkAllMatchingSelected: "All {{count}} matching records are selected.";
|
|
164
170
|
readonly rowHeight: "Row height: {{mode}}";
|
|
165
171
|
readonly empty: "Empty";
|
|
166
172
|
readonly yes: "Yes";
|
|
@@ -231,6 +237,31 @@ declare const en: {
|
|
|
231
237
|
readonly requiredMark: "*";
|
|
232
238
|
readonly required: "Required";
|
|
233
239
|
readonly invalidType: "Invalid {{type}}";
|
|
240
|
+
readonly legacyReferenceBlocked: "Import blocked: {{fields}} are relation fields that need the server import route to resolve names into record IDs, and this connection doesn’t support it. Importing them as plain text would corrupt the data. Upgrade the backend/client, or unmap these columns and import them separately.";
|
|
241
|
+
};
|
|
242
|
+
readonly bulk: {
|
|
243
|
+
readonly confirmDefault: "This will apply to {{count}} record(s).";
|
|
244
|
+
readonly overLimit: "Selection ({{count}}) exceeds the action limit ({{limit}}). Reduce the selection to proceed.";
|
|
245
|
+
readonly affectedRecords: "Affected records ({{count}}):";
|
|
246
|
+
readonly rowFallback: "Row {{index}}";
|
|
247
|
+
readonly andMore: "… and {{count}} more";
|
|
248
|
+
readonly processed: "{{count}} / {{total}} processed";
|
|
249
|
+
readonly processedFailed: " · {{count}} failed";
|
|
250
|
+
readonly undonePrefix: "Undone — ";
|
|
251
|
+
readonly succeeded: "Succeeded {{count}} / {{total}}";
|
|
252
|
+
readonly resultFailed: " · Failed {{count}}";
|
|
253
|
+
readonly retry: "Retry";
|
|
254
|
+
readonly downloadErrorCsv: "Download error CSV";
|
|
255
|
+
readonly cancel: "Cancel";
|
|
256
|
+
readonly back: "Back";
|
|
257
|
+
readonly next: "Next";
|
|
258
|
+
readonly run: "Run";
|
|
259
|
+
readonly running: "Running…";
|
|
260
|
+
readonly undo: "Undo";
|
|
261
|
+
readonly undoing: "Undoing…";
|
|
262
|
+
readonly done: "Done";
|
|
263
|
+
readonly selectPlaceholder: "Select…";
|
|
264
|
+
readonly loading: "Loading…";
|
|
234
265
|
};
|
|
235
266
|
};
|
|
236
267
|
readonly calendar: {
|
|
@@ -305,6 +336,9 @@ declare const en: {
|
|
|
305
336
|
readonly addGroup: "Add group field";
|
|
306
337
|
readonly collapsedByDefault: "Collapsed by default";
|
|
307
338
|
readonly removeGroup: "Remove";
|
|
339
|
+
readonly inlineEditShort: "Edit inline";
|
|
340
|
+
readonly inlineEditLabel: "Edit records inline (click a cell to edit)";
|
|
341
|
+
readonly recordEditingTitle: "Record editing";
|
|
308
342
|
};
|
|
309
343
|
readonly kanban: {
|
|
310
344
|
readonly addCard: "Add card";
|
|
@@ -1634,6 +1668,14 @@ declare const en: {
|
|
|
1634
1668
|
readonly greetingEvening: "Good evening";
|
|
1635
1669
|
readonly greetingNight: "Working late";
|
|
1636
1670
|
readonly heroTagline: "Pick up where you left off, or explore something new.";
|
|
1671
|
+
readonly build: {
|
|
1672
|
+
readonly title: "Build an app";
|
|
1673
|
+
readonly subtitle: "Start from scratch — design objects, forms, automations and interfaces.";
|
|
1674
|
+
};
|
|
1675
|
+
readonly template: {
|
|
1676
|
+
readonly title: "Start with a template";
|
|
1677
|
+
readonly subtitle: "Install a template app from the marketplace and customize it.";
|
|
1678
|
+
};
|
|
1637
1679
|
readonly open: "Open";
|
|
1638
1680
|
readonly stats: {
|
|
1639
1681
|
readonly apps: "Applications";
|
package/dist/locales/en.js
CHANGED
|
@@ -161,6 +161,12 @@ const en = {
|
|
|
161
161
|
refreshing: 'Refreshing…',
|
|
162
162
|
openRecord: 'Open record',
|
|
163
163
|
openMenu: 'Open menu',
|
|
164
|
+
bulkSelected: '{{count}} selected',
|
|
165
|
+
bulkSelectedAllMatches: '{{count}} selected (all matches)',
|
|
166
|
+
bulkClear: 'Clear',
|
|
167
|
+
bulkAllOnPage: 'All {{count}} on this page are selected.',
|
|
168
|
+
bulkSelectAllMatching: 'Select all {{count}} matching',
|
|
169
|
+
bulkAllMatchingSelected: 'All {{count}} matching records are selected.',
|
|
164
170
|
rowHeight: 'Row height: {{mode}}',
|
|
165
171
|
empty: 'Empty',
|
|
166
172
|
yes: 'Yes',
|
|
@@ -231,6 +237,31 @@ const en = {
|
|
|
231
237
|
requiredMark: '*',
|
|
232
238
|
required: 'Required',
|
|
233
239
|
invalidType: 'Invalid {{type}}',
|
|
240
|
+
legacyReferenceBlocked: 'Import blocked: {{fields}} are relation fields that need the server import route to resolve names into record IDs, and this connection doesn\u2019t support it. Importing them as plain text would corrupt the data. Upgrade the backend/client, or unmap these columns and import them separately.',
|
|
241
|
+
},
|
|
242
|
+
bulk: {
|
|
243
|
+
confirmDefault: 'This will apply to {{count}} record(s).',
|
|
244
|
+
overLimit: 'Selection ({{count}}) exceeds the action limit ({{limit}}). Reduce the selection to proceed.',
|
|
245
|
+
affectedRecords: 'Affected records ({{count}}):',
|
|
246
|
+
rowFallback: 'Row {{index}}',
|
|
247
|
+
andMore: '\u2026 and {{count}} more',
|
|
248
|
+
processed: '{{count}} / {{total}} processed',
|
|
249
|
+
processedFailed: ' \u00b7 {{count}} failed',
|
|
250
|
+
undonePrefix: 'Undone \u2014 ',
|
|
251
|
+
succeeded: 'Succeeded {{count}} / {{total}}',
|
|
252
|
+
resultFailed: ' \u00b7 Failed {{count}}',
|
|
253
|
+
retry: 'Retry',
|
|
254
|
+
downloadErrorCsv: 'Download error CSV',
|
|
255
|
+
cancel: 'Cancel',
|
|
256
|
+
back: 'Back',
|
|
257
|
+
next: 'Next',
|
|
258
|
+
run: 'Run',
|
|
259
|
+
running: 'Running\u2026',
|
|
260
|
+
undo: 'Undo',
|
|
261
|
+
undoing: 'Undoing\u2026',
|
|
262
|
+
done: 'Done',
|
|
263
|
+
selectPlaceholder: 'Select\u2026',
|
|
264
|
+
loading: 'Loading\u2026',
|
|
234
265
|
},
|
|
235
266
|
},
|
|
236
267
|
calendar: {
|
|
@@ -305,6 +336,9 @@ const en = {
|
|
|
305
336
|
addGroup: 'Add group field',
|
|
306
337
|
collapsedByDefault: 'Collapsed by default',
|
|
307
338
|
removeGroup: 'Remove',
|
|
339
|
+
inlineEditShort: 'Edit inline',
|
|
340
|
+
inlineEditLabel: 'Edit records inline (click a cell to edit)',
|
|
341
|
+
recordEditingTitle: 'Record editing',
|
|
308
342
|
},
|
|
309
343
|
kanban: {
|
|
310
344
|
addCard: 'Add card',
|
|
@@ -1650,6 +1684,14 @@ const en = {
|
|
|
1650
1684
|
greetingEvening: 'Good evening',
|
|
1651
1685
|
greetingNight: 'Working late',
|
|
1652
1686
|
heroTagline: 'Pick up where you left off, or explore something new.',
|
|
1687
|
+
build: {
|
|
1688
|
+
title: 'Build an app',
|
|
1689
|
+
subtitle: 'Start from scratch — design objects, forms, automations and interfaces.',
|
|
1690
|
+
},
|
|
1691
|
+
template: {
|
|
1692
|
+
title: 'Start with a template',
|
|
1693
|
+
subtitle: 'Install a template app from the marketplace and customize it.',
|
|
1694
|
+
},
|
|
1653
1695
|
open: 'Open',
|
|
1654
1696
|
stats: {
|
|
1655
1697
|
apps: 'Applications',
|
package/dist/locales/index.d.ts
CHANGED
|
@@ -173,6 +173,12 @@ export declare const builtInLocales: {
|
|
|
173
173
|
readonly refreshing: "Refreshing…";
|
|
174
174
|
readonly openRecord: "Open record";
|
|
175
175
|
readonly openMenu: "Open menu";
|
|
176
|
+
readonly bulkSelected: "{{count}} selected";
|
|
177
|
+
readonly bulkSelectedAllMatches: "{{count}} selected (all matches)";
|
|
178
|
+
readonly bulkClear: "Clear";
|
|
179
|
+
readonly bulkAllOnPage: "All {{count}} on this page are selected.";
|
|
180
|
+
readonly bulkSelectAllMatching: "Select all {{count}} matching";
|
|
181
|
+
readonly bulkAllMatchingSelected: "All {{count}} matching records are selected.";
|
|
176
182
|
readonly rowHeight: "Row height: {{mode}}";
|
|
177
183
|
readonly empty: "Empty";
|
|
178
184
|
readonly yes: "Yes";
|
|
@@ -243,6 +249,31 @@ export declare const builtInLocales: {
|
|
|
243
249
|
readonly requiredMark: "*";
|
|
244
250
|
readonly required: "Required";
|
|
245
251
|
readonly invalidType: "Invalid {{type}}";
|
|
252
|
+
readonly legacyReferenceBlocked: "Import blocked: {{fields}} are relation fields that need the server import route to resolve names into record IDs, and this connection doesn’t support it. Importing them as plain text would corrupt the data. Upgrade the backend/client, or unmap these columns and import them separately.";
|
|
253
|
+
};
|
|
254
|
+
readonly bulk: {
|
|
255
|
+
readonly confirmDefault: "This will apply to {{count}} record(s).";
|
|
256
|
+
readonly overLimit: "Selection ({{count}}) exceeds the action limit ({{limit}}). Reduce the selection to proceed.";
|
|
257
|
+
readonly affectedRecords: "Affected records ({{count}}):";
|
|
258
|
+
readonly rowFallback: "Row {{index}}";
|
|
259
|
+
readonly andMore: "… and {{count}} more";
|
|
260
|
+
readonly processed: "{{count}} / {{total}} processed";
|
|
261
|
+
readonly processedFailed: " · {{count}} failed";
|
|
262
|
+
readonly undonePrefix: "Undone — ";
|
|
263
|
+
readonly succeeded: "Succeeded {{count}} / {{total}}";
|
|
264
|
+
readonly resultFailed: " · Failed {{count}}";
|
|
265
|
+
readonly retry: "Retry";
|
|
266
|
+
readonly downloadErrorCsv: "Download error CSV";
|
|
267
|
+
readonly cancel: "Cancel";
|
|
268
|
+
readonly back: "Back";
|
|
269
|
+
readonly next: "Next";
|
|
270
|
+
readonly run: "Run";
|
|
271
|
+
readonly running: "Running…";
|
|
272
|
+
readonly undo: "Undo";
|
|
273
|
+
readonly undoing: "Undoing…";
|
|
274
|
+
readonly done: "Done";
|
|
275
|
+
readonly selectPlaceholder: "Select…";
|
|
276
|
+
readonly loading: "Loading…";
|
|
246
277
|
};
|
|
247
278
|
};
|
|
248
279
|
readonly calendar: {
|
|
@@ -317,6 +348,9 @@ export declare const builtInLocales: {
|
|
|
317
348
|
readonly addGroup: "Add group field";
|
|
318
349
|
readonly collapsedByDefault: "Collapsed by default";
|
|
319
350
|
readonly removeGroup: "Remove";
|
|
351
|
+
readonly inlineEditShort: "Edit inline";
|
|
352
|
+
readonly inlineEditLabel: "Edit records inline (click a cell to edit)";
|
|
353
|
+
readonly recordEditingTitle: "Record editing";
|
|
320
354
|
};
|
|
321
355
|
readonly kanban: {
|
|
322
356
|
readonly addCard: "Add card";
|
|
@@ -1646,6 +1680,14 @@ export declare const builtInLocales: {
|
|
|
1646
1680
|
readonly greetingEvening: "Good evening";
|
|
1647
1681
|
readonly greetingNight: "Working late";
|
|
1648
1682
|
readonly heroTagline: "Pick up where you left off, or explore something new.";
|
|
1683
|
+
readonly build: {
|
|
1684
|
+
readonly title: "Build an app";
|
|
1685
|
+
readonly subtitle: "Start from scratch — design objects, forms, automations and interfaces.";
|
|
1686
|
+
};
|
|
1687
|
+
readonly template: {
|
|
1688
|
+
readonly title: "Start with a template";
|
|
1689
|
+
readonly subtitle: "Install a template app from the marketplace and customize it.";
|
|
1690
|
+
};
|
|
1649
1691
|
readonly open: "Open";
|
|
1650
1692
|
readonly stats: {
|
|
1651
1693
|
readonly apps: "Applications";
|
|
@@ -2475,6 +2517,12 @@ export declare const builtInLocales: {
|
|
|
2475
2517
|
readonly refreshing: "刷新中…";
|
|
2476
2518
|
readonly openRecord: "打开记录";
|
|
2477
2519
|
readonly openMenu: "更多操作";
|
|
2520
|
+
readonly bulkSelected: "已选择 {{count}} 项";
|
|
2521
|
+
readonly bulkSelectedAllMatches: "已选择全部 {{count}} 项(全部匹配)";
|
|
2522
|
+
readonly bulkClear: "清除";
|
|
2523
|
+
readonly bulkAllOnPage: "本页 {{count}} 项已全选。";
|
|
2524
|
+
readonly bulkSelectAllMatching: "选择全部 {{count}} 项匹配记录";
|
|
2525
|
+
readonly bulkAllMatchingSelected: "已选择全部 {{count}} 项匹配记录。";
|
|
2478
2526
|
readonly rowHeight: "行高: {{mode}}";
|
|
2479
2527
|
readonly empty: "空";
|
|
2480
2528
|
readonly yes: "是";
|
|
@@ -2545,6 +2593,98 @@ export declare const builtInLocales: {
|
|
|
2545
2593
|
readonly requiredMark: "*";
|
|
2546
2594
|
readonly required: "必填";
|
|
2547
2595
|
readonly invalidType: "{{type}} 格式无效";
|
|
2596
|
+
readonly legacyReferenceBlocked: "导入已阻止:{{fields}} 是关联字段,需要服务端导入接口把名称解析为记录 ID,而当前连接不支持。按纯文本导入会写坏数据。请升级后端/客户端,或取消这些列的映射后再导入。";
|
|
2597
|
+
readonly autoMatched: "自动匹配";
|
|
2598
|
+
readonly autoMatchedSummary: "已自动匹配 {{count}} 列 — 请在下方检查并调整。";
|
|
2599
|
+
readonly confidence: {
|
|
2600
|
+
readonly high: "高置信度";
|
|
2601
|
+
readonly medium: "中置信度";
|
|
2602
|
+
readonly low: "低置信度";
|
|
2603
|
+
};
|
|
2604
|
+
readonly downloadTemplate: "下载模板";
|
|
2605
|
+
readonly downloadTemplateHint: "获取带正确列的 CSV(必填字段标 *)。";
|
|
2606
|
+
readonly validate: "校验数据";
|
|
2607
|
+
readonly validateHint: "导入前在服务端逐行校验。";
|
|
2608
|
+
readonly validating: "校验中…";
|
|
2609
|
+
readonly validatePassed: "全部 {{ok}} 行均有效。";
|
|
2610
|
+
readonly validateFailed: "{{ok}} 条有效,{{errors}} 条有错误。";
|
|
2611
|
+
readonly errorCount: "{{count}} 个错误";
|
|
2612
|
+
readonly errorRowPrefix: "第 {{row}} 行:";
|
|
2613
|
+
readonly referenceNotFound: "找不到匹配 \"{{value}}\" 的记录";
|
|
2614
|
+
readonly referenceAmbiguous: "\"{{value}}\" 匹配到多条记录,请使用唯一值或记录 ID";
|
|
2615
|
+
readonly options: "导入选项";
|
|
2616
|
+
readonly writeMode: "当某行匹配到已有记录时";
|
|
2617
|
+
readonly writeModeOpt: {
|
|
2618
|
+
readonly insert: "始终新建";
|
|
2619
|
+
readonly update: "更新已有(无匹配则跳过)";
|
|
2620
|
+
readonly upsert: "匹配则更新,否则新建";
|
|
2621
|
+
};
|
|
2622
|
+
readonly matchFields: "匹配字段";
|
|
2623
|
+
readonly matchFieldsPlaceholder: "选择匹配字段…";
|
|
2624
|
+
readonly matchFieldsHint: "按这些字段将行匹配到已有记录。";
|
|
2625
|
+
readonly needMatchFields: "请至少选择一个匹配字段。";
|
|
2626
|
+
readonly optRunAutomations: "运行自动化与触发器";
|
|
2627
|
+
readonly optCreateOptions: "保留未知选项值";
|
|
2628
|
+
readonly optSkipBlankKey: "跳过匹配值为空的行";
|
|
2629
|
+
readonly optBackground: "后台导入";
|
|
2630
|
+
readonly optBackgroundHint: "(作为可撤销任务运行)";
|
|
2631
|
+
readonly createdCount: "新建 {{count}} 条";
|
|
2632
|
+
readonly updatedCount: "更新 {{count}} 条";
|
|
2633
|
+
readonly resultsTruncated: "显示前 {{count}} 行结果(共 {{total}} 行)。";
|
|
2634
|
+
readonly downloadFailed: "下载失败行";
|
|
2635
|
+
readonly cancelImport: "取消导入";
|
|
2636
|
+
readonly importCancelled: "导入已取消";
|
|
2637
|
+
readonly largeSampleNotice: "正在预览前 {{shown}}/{{total}} 行。";
|
|
2638
|
+
readonly asyncLargeHint: "文件较大,将在后台导入。";
|
|
2639
|
+
readonly asyncQueued: "已排队 — 正在准备导入…";
|
|
2640
|
+
readonly asyncProcessing: "正在导入第 {{processed}}/{{total}} 行… {{progress}}%";
|
|
2641
|
+
readonly history: "历史";
|
|
2642
|
+
readonly historyBack: "返回导入";
|
|
2643
|
+
readonly historyDescription: "此对象的近期导入记录。";
|
|
2644
|
+
readonly historyHint: "后台导入任务,最新在前。";
|
|
2645
|
+
readonly historyRefresh: "刷新";
|
|
2646
|
+
readonly historyLoading: "加载中…";
|
|
2647
|
+
readonly historyEmpty: "暂无导入记录。";
|
|
2648
|
+
readonly historyUnsupported: "此数据源不支持导入历史。";
|
|
2649
|
+
readonly historyColStatus: "状态";
|
|
2650
|
+
readonly historyColRows: "行数";
|
|
2651
|
+
readonly historyColResult: "结果";
|
|
2652
|
+
readonly historyColTime: "时间";
|
|
2653
|
+
readonly jobStatus: {
|
|
2654
|
+
readonly pending: "等待中";
|
|
2655
|
+
readonly running: "进行中";
|
|
2656
|
+
readonly succeeded: "成功";
|
|
2657
|
+
readonly failed: "失败";
|
|
2658
|
+
readonly cancelled: "已取消";
|
|
2659
|
+
};
|
|
2660
|
+
readonly undoImport: "撤销导入";
|
|
2661
|
+
readonly undoing: "撤销中…";
|
|
2662
|
+
readonly reverted: "已撤销";
|
|
2663
|
+
readonly undoConfirm: "撤销此次导入?它新建的记录将被删除,它更新的记录将恢复为之前的值。";
|
|
2664
|
+
};
|
|
2665
|
+
readonly bulk: {
|
|
2666
|
+
readonly confirmDefault: "此操作将应用于 {{count}} 条记录。";
|
|
2667
|
+
readonly overLimit: "所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。";
|
|
2668
|
+
readonly affectedRecords: "受影响的记录({{count}}):";
|
|
2669
|
+
readonly rowFallback: "第 {{index}} 行";
|
|
2670
|
+
readonly andMore: "……以及另外 {{count}} 条";
|
|
2671
|
+
readonly processed: "已处理 {{count}} / {{total}}";
|
|
2672
|
+
readonly processedFailed: " · {{count}} 条失败";
|
|
2673
|
+
readonly undonePrefix: "已撤销 — ";
|
|
2674
|
+
readonly succeeded: "成功 {{count}} / {{total}}";
|
|
2675
|
+
readonly resultFailed: " · 失败 {{count}}";
|
|
2676
|
+
readonly retry: "重试";
|
|
2677
|
+
readonly downloadErrorCsv: "下载错误 CSV";
|
|
2678
|
+
readonly cancel: "取消";
|
|
2679
|
+
readonly back: "上一步";
|
|
2680
|
+
readonly next: "下一步";
|
|
2681
|
+
readonly run: "执行";
|
|
2682
|
+
readonly running: "执行中…";
|
|
2683
|
+
readonly undo: "撤销";
|
|
2684
|
+
readonly undoing: "撤销中…";
|
|
2685
|
+
readonly done: "完成";
|
|
2686
|
+
readonly selectPlaceholder: "请选择…";
|
|
2687
|
+
readonly loading: "加载中…";
|
|
2548
2688
|
};
|
|
2549
2689
|
};
|
|
2550
2690
|
readonly calendar: {
|
|
@@ -2619,6 +2759,9 @@ export declare const builtInLocales: {
|
|
|
2619
2759
|
readonly addGroup: "添加分组字段";
|
|
2620
2760
|
readonly collapsedByDefault: "默认折叠";
|
|
2621
2761
|
readonly removeGroup: "删除";
|
|
2762
|
+
readonly inlineEditShort: "行内编辑";
|
|
2763
|
+
readonly inlineEditLabel: "行内编辑记录(点击单元格进行编辑)";
|
|
2764
|
+
readonly recordEditingTitle: "记录编辑";
|
|
2622
2765
|
};
|
|
2623
2766
|
readonly kanban: {
|
|
2624
2767
|
readonly addCard: "添加卡片";
|
|
@@ -3958,6 +4101,14 @@ export declare const builtInLocales: {
|
|
|
3958
4101
|
readonly greetingEvening: "晚上好";
|
|
3959
4102
|
readonly greetingNight: "夜深了";
|
|
3960
4103
|
readonly heroTagline: "从上次离开的地方继续,或者探索新的内容。";
|
|
4104
|
+
readonly build: {
|
|
4105
|
+
readonly title: "构建应用";
|
|
4106
|
+
readonly subtitle: "从零开始 — 设计对象、表单、自动化与界面。";
|
|
4107
|
+
};
|
|
4108
|
+
readonly template: {
|
|
4109
|
+
readonly title: "从模板开始";
|
|
4110
|
+
readonly subtitle: "从应用市场安装模板应用并按需定制。";
|
|
4111
|
+
};
|
|
3961
4112
|
readonly open: "打开";
|
|
3962
4113
|
readonly stats: {
|
|
3963
4114
|
readonly apps: "应用";
|
package/dist/locales/zh.d.ts
CHANGED
|
@@ -161,6 +161,12 @@ declare const zh: {
|
|
|
161
161
|
readonly refreshing: "刷新中…";
|
|
162
162
|
readonly openRecord: "打开记录";
|
|
163
163
|
readonly openMenu: "更多操作";
|
|
164
|
+
readonly bulkSelected: "已选择 {{count}} 项";
|
|
165
|
+
readonly bulkSelectedAllMatches: "已选择全部 {{count}} 项(全部匹配)";
|
|
166
|
+
readonly bulkClear: "清除";
|
|
167
|
+
readonly bulkAllOnPage: "本页 {{count}} 项已全选。";
|
|
168
|
+
readonly bulkSelectAllMatching: "选择全部 {{count}} 项匹配记录";
|
|
169
|
+
readonly bulkAllMatchingSelected: "已选择全部 {{count}} 项匹配记录。";
|
|
164
170
|
readonly rowHeight: "行高: {{mode}}";
|
|
165
171
|
readonly empty: "空";
|
|
166
172
|
readonly yes: "是";
|
|
@@ -231,6 +237,98 @@ declare const zh: {
|
|
|
231
237
|
readonly requiredMark: "*";
|
|
232
238
|
readonly required: "必填";
|
|
233
239
|
readonly invalidType: "{{type}} 格式无效";
|
|
240
|
+
readonly legacyReferenceBlocked: "导入已阻止:{{fields}} 是关联字段,需要服务端导入接口把名称解析为记录 ID,而当前连接不支持。按纯文本导入会写坏数据。请升级后端/客户端,或取消这些列的映射后再导入。";
|
|
241
|
+
readonly autoMatched: "自动匹配";
|
|
242
|
+
readonly autoMatchedSummary: "已自动匹配 {{count}} 列 — 请在下方检查并调整。";
|
|
243
|
+
readonly confidence: {
|
|
244
|
+
readonly high: "高置信度";
|
|
245
|
+
readonly medium: "中置信度";
|
|
246
|
+
readonly low: "低置信度";
|
|
247
|
+
};
|
|
248
|
+
readonly downloadTemplate: "下载模板";
|
|
249
|
+
readonly downloadTemplateHint: "获取带正确列的 CSV(必填字段标 *)。";
|
|
250
|
+
readonly validate: "校验数据";
|
|
251
|
+
readonly validateHint: "导入前在服务端逐行校验。";
|
|
252
|
+
readonly validating: "校验中…";
|
|
253
|
+
readonly validatePassed: "全部 {{ok}} 行均有效。";
|
|
254
|
+
readonly validateFailed: "{{ok}} 条有效,{{errors}} 条有错误。";
|
|
255
|
+
readonly errorCount: "{{count}} 个错误";
|
|
256
|
+
readonly errorRowPrefix: "第 {{row}} 行:";
|
|
257
|
+
readonly referenceNotFound: "找不到匹配 \"{{value}}\" 的记录";
|
|
258
|
+
readonly referenceAmbiguous: "\"{{value}}\" 匹配到多条记录,请使用唯一值或记录 ID";
|
|
259
|
+
readonly options: "导入选项";
|
|
260
|
+
readonly writeMode: "当某行匹配到已有记录时";
|
|
261
|
+
readonly writeModeOpt: {
|
|
262
|
+
readonly insert: "始终新建";
|
|
263
|
+
readonly update: "更新已有(无匹配则跳过)";
|
|
264
|
+
readonly upsert: "匹配则更新,否则新建";
|
|
265
|
+
};
|
|
266
|
+
readonly matchFields: "匹配字段";
|
|
267
|
+
readonly matchFieldsPlaceholder: "选择匹配字段…";
|
|
268
|
+
readonly matchFieldsHint: "按这些字段将行匹配到已有记录。";
|
|
269
|
+
readonly needMatchFields: "请至少选择一个匹配字段。";
|
|
270
|
+
readonly optRunAutomations: "运行自动化与触发器";
|
|
271
|
+
readonly optCreateOptions: "保留未知选项值";
|
|
272
|
+
readonly optSkipBlankKey: "跳过匹配值为空的行";
|
|
273
|
+
readonly optBackground: "后台导入";
|
|
274
|
+
readonly optBackgroundHint: "(作为可撤销任务运行)";
|
|
275
|
+
readonly createdCount: "新建 {{count}} 条";
|
|
276
|
+
readonly updatedCount: "更新 {{count}} 条";
|
|
277
|
+
readonly resultsTruncated: "显示前 {{count}} 行结果(共 {{total}} 行)。";
|
|
278
|
+
readonly downloadFailed: "下载失败行";
|
|
279
|
+
readonly cancelImport: "取消导入";
|
|
280
|
+
readonly importCancelled: "导入已取消";
|
|
281
|
+
readonly largeSampleNotice: "正在预览前 {{shown}}/{{total}} 行。";
|
|
282
|
+
readonly asyncLargeHint: "文件较大,将在后台导入。";
|
|
283
|
+
readonly asyncQueued: "已排队 — 正在准备导入…";
|
|
284
|
+
readonly asyncProcessing: "正在导入第 {{processed}}/{{total}} 行… {{progress}}%";
|
|
285
|
+
readonly history: "历史";
|
|
286
|
+
readonly historyBack: "返回导入";
|
|
287
|
+
readonly historyDescription: "此对象的近期导入记录。";
|
|
288
|
+
readonly historyHint: "后台导入任务,最新在前。";
|
|
289
|
+
readonly historyRefresh: "刷新";
|
|
290
|
+
readonly historyLoading: "加载中…";
|
|
291
|
+
readonly historyEmpty: "暂无导入记录。";
|
|
292
|
+
readonly historyUnsupported: "此数据源不支持导入历史。";
|
|
293
|
+
readonly historyColStatus: "状态";
|
|
294
|
+
readonly historyColRows: "行数";
|
|
295
|
+
readonly historyColResult: "结果";
|
|
296
|
+
readonly historyColTime: "时间";
|
|
297
|
+
readonly jobStatus: {
|
|
298
|
+
readonly pending: "等待中";
|
|
299
|
+
readonly running: "进行中";
|
|
300
|
+
readonly succeeded: "成功";
|
|
301
|
+
readonly failed: "失败";
|
|
302
|
+
readonly cancelled: "已取消";
|
|
303
|
+
};
|
|
304
|
+
readonly undoImport: "撤销导入";
|
|
305
|
+
readonly undoing: "撤销中…";
|
|
306
|
+
readonly reverted: "已撤销";
|
|
307
|
+
readonly undoConfirm: "撤销此次导入?它新建的记录将被删除,它更新的记录将恢复为之前的值。";
|
|
308
|
+
};
|
|
309
|
+
readonly bulk: {
|
|
310
|
+
readonly confirmDefault: "此操作将应用于 {{count}} 条记录。";
|
|
311
|
+
readonly overLimit: "所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。";
|
|
312
|
+
readonly affectedRecords: "受影响的记录({{count}}):";
|
|
313
|
+
readonly rowFallback: "第 {{index}} 行";
|
|
314
|
+
readonly andMore: "……以及另外 {{count}} 条";
|
|
315
|
+
readonly processed: "已处理 {{count}} / {{total}}";
|
|
316
|
+
readonly processedFailed: " · {{count}} 条失败";
|
|
317
|
+
readonly undonePrefix: "已撤销 — ";
|
|
318
|
+
readonly succeeded: "成功 {{count}} / {{total}}";
|
|
319
|
+
readonly resultFailed: " · 失败 {{count}}";
|
|
320
|
+
readonly retry: "重试";
|
|
321
|
+
readonly downloadErrorCsv: "下载错误 CSV";
|
|
322
|
+
readonly cancel: "取消";
|
|
323
|
+
readonly back: "上一步";
|
|
324
|
+
readonly next: "下一步";
|
|
325
|
+
readonly run: "执行";
|
|
326
|
+
readonly running: "执行中…";
|
|
327
|
+
readonly undo: "撤销";
|
|
328
|
+
readonly undoing: "撤销中…";
|
|
329
|
+
readonly done: "完成";
|
|
330
|
+
readonly selectPlaceholder: "请选择…";
|
|
331
|
+
readonly loading: "加载中…";
|
|
234
332
|
};
|
|
235
333
|
};
|
|
236
334
|
readonly calendar: {
|
|
@@ -305,6 +403,9 @@ declare const zh: {
|
|
|
305
403
|
readonly addGroup: "添加分组字段";
|
|
306
404
|
readonly collapsedByDefault: "默认折叠";
|
|
307
405
|
readonly removeGroup: "删除";
|
|
406
|
+
readonly inlineEditShort: "行内编辑";
|
|
407
|
+
readonly inlineEditLabel: "行内编辑记录(点击单元格进行编辑)";
|
|
408
|
+
readonly recordEditingTitle: "记录编辑";
|
|
308
409
|
};
|
|
309
410
|
readonly kanban: {
|
|
310
411
|
readonly addCard: "添加卡片";
|
|
@@ -1644,6 +1745,14 @@ declare const zh: {
|
|
|
1644
1745
|
readonly greetingEvening: "晚上好";
|
|
1645
1746
|
readonly greetingNight: "夜深了";
|
|
1646
1747
|
readonly heroTagline: "从上次离开的地方继续,或者探索新的内容。";
|
|
1748
|
+
readonly build: {
|
|
1749
|
+
readonly title: "构建应用";
|
|
1750
|
+
readonly subtitle: "从零开始 — 设计对象、表单、自动化与界面。";
|
|
1751
|
+
};
|
|
1752
|
+
readonly template: {
|
|
1753
|
+
readonly title: "从模板开始";
|
|
1754
|
+
readonly subtitle: "从应用市场安装模板应用并按需定制。";
|
|
1755
|
+
};
|
|
1647
1756
|
readonly open: "打开";
|
|
1648
1757
|
readonly stats: {
|
|
1649
1758
|
readonly apps: "应用";
|
package/dist/locales/zh.js
CHANGED
|
@@ -161,6 +161,12 @@ const zh = {
|
|
|
161
161
|
refreshing: '刷新中…',
|
|
162
162
|
openRecord: '打开记录',
|
|
163
163
|
openMenu: '更多操作',
|
|
164
|
+
bulkSelected: '已选择 {{count}} 项',
|
|
165
|
+
bulkSelectedAllMatches: '已选择全部 {{count}} 项(全部匹配)',
|
|
166
|
+
bulkClear: '清除',
|
|
167
|
+
bulkAllOnPage: '本页 {{count}} 项已全选。',
|
|
168
|
+
bulkSelectAllMatching: '选择全部 {{count}} 项匹配记录',
|
|
169
|
+
bulkAllMatchingSelected: '已选择全部 {{count}} 项匹配记录。',
|
|
164
170
|
rowHeight: '行高: {{mode}}',
|
|
165
171
|
empty: '空',
|
|
166
172
|
yes: '是',
|
|
@@ -231,6 +237,107 @@ const zh = {
|
|
|
231
237
|
requiredMark: '*',
|
|
232
238
|
required: '必填',
|
|
233
239
|
invalidType: '{{type}} 格式无效',
|
|
240
|
+
legacyReferenceBlocked: '导入已阻止:{{fields}} 是关联字段,需要服务端导入接口把名称解析为记录 ID,而当前连接不支持。按纯文本导入会写坏数据。请升级后端/客户端,或取消这些列的映射后再导入。',
|
|
241
|
+
// 自动匹配(Airtable 风格)
|
|
242
|
+
autoMatched: '自动匹配',
|
|
243
|
+
autoMatchedSummary: '已自动匹配 {{count}} 列 — 请在下方检查并调整。',
|
|
244
|
+
confidence: {
|
|
245
|
+
high: '高置信度',
|
|
246
|
+
medium: '中置信度',
|
|
247
|
+
low: '低置信度',
|
|
248
|
+
},
|
|
249
|
+
// 下载模板
|
|
250
|
+
downloadTemplate: '下载模板',
|
|
251
|
+
downloadTemplateHint: '获取带正确列的 CSV(必填字段标 *)。',
|
|
252
|
+
// 校验(服务端 dryRun 预检)
|
|
253
|
+
validate: '校验数据',
|
|
254
|
+
validateHint: '导入前在服务端逐行校验。',
|
|
255
|
+
validating: '校验中…',
|
|
256
|
+
validatePassed: '全部 {{ok}} 行均有效。',
|
|
257
|
+
validateFailed: '{{ok}} 条有效,{{errors}} 条有错误。',
|
|
258
|
+
errorCount: '{{count}} 个错误',
|
|
259
|
+
errorRowPrefix: '第 {{row}} 行:',
|
|
260
|
+
// 服务端结构化导入错误的友好文案
|
|
261
|
+
referenceNotFound: '找不到匹配 "{{value}}" 的记录',
|
|
262
|
+
referenceAmbiguous: '"{{value}}" 匹配到多条记录,请使用唯一值或记录 ID',
|
|
263
|
+
// 导入选项 / 写入模式
|
|
264
|
+
options: '导入选项',
|
|
265
|
+
writeMode: '当某行匹配到已有记录时',
|
|
266
|
+
writeModeOpt: {
|
|
267
|
+
insert: '始终新建',
|
|
268
|
+
update: '更新已有(无匹配则跳过)',
|
|
269
|
+
upsert: '匹配则更新,否则新建',
|
|
270
|
+
},
|
|
271
|
+
matchFields: '匹配字段',
|
|
272
|
+
matchFieldsPlaceholder: '选择匹配字段…',
|
|
273
|
+
matchFieldsHint: '按这些字段将行匹配到已有记录。',
|
|
274
|
+
needMatchFields: '请至少选择一个匹配字段。',
|
|
275
|
+
optRunAutomations: '运行自动化与触发器',
|
|
276
|
+
optCreateOptions: '保留未知选项值',
|
|
277
|
+
optSkipBlankKey: '跳过匹配值为空的行',
|
|
278
|
+
optBackground: '后台导入',
|
|
279
|
+
optBackgroundHint: '(作为可撤销任务运行)',
|
|
280
|
+
// 结果
|
|
281
|
+
createdCount: '新建 {{count}} 条',
|
|
282
|
+
updatedCount: '更新 {{count}} 条',
|
|
283
|
+
resultsTruncated: '显示前 {{count}} 行结果(共 {{total}} 行)。',
|
|
284
|
+
downloadFailed: '下载失败行',
|
|
285
|
+
cancelImport: '取消导入',
|
|
286
|
+
importCancelled: '导入已取消',
|
|
287
|
+
// 大文件 / 异步导入
|
|
288
|
+
largeSampleNotice: '正在预览前 {{shown}}/{{total}} 行。',
|
|
289
|
+
asyncLargeHint: '文件较大,将在后台导入。',
|
|
290
|
+
asyncQueued: '已排队 — 正在准备导入…',
|
|
291
|
+
asyncProcessing: '正在导入第 {{processed}}/{{total}} 行… {{progress}}%',
|
|
292
|
+
// 导入历史
|
|
293
|
+
history: '历史',
|
|
294
|
+
historyBack: '返回导入',
|
|
295
|
+
historyDescription: '此对象的近期导入记录。',
|
|
296
|
+
historyHint: '后台导入任务,最新在前。',
|
|
297
|
+
historyRefresh: '刷新',
|
|
298
|
+
historyLoading: '加载中…',
|
|
299
|
+
historyEmpty: '暂无导入记录。',
|
|
300
|
+
historyUnsupported: '此数据源不支持导入历史。',
|
|
301
|
+
historyColStatus: '状态',
|
|
302
|
+
historyColRows: '行数',
|
|
303
|
+
historyColResult: '结果',
|
|
304
|
+
historyColTime: '时间',
|
|
305
|
+
jobStatus: {
|
|
306
|
+
pending: '等待中',
|
|
307
|
+
running: '进行中',
|
|
308
|
+
succeeded: '成功',
|
|
309
|
+
failed: '失败',
|
|
310
|
+
cancelled: '已取消',
|
|
311
|
+
},
|
|
312
|
+
// 撤销 / 逻辑回滚
|
|
313
|
+
undoImport: '撤销导入',
|
|
314
|
+
undoing: '撤销中…',
|
|
315
|
+
reverted: '已撤销',
|
|
316
|
+
undoConfirm: '撤销此次导入?它新建的记录将被删除,它更新的记录将恢复为之前的值。',
|
|
317
|
+
},
|
|
318
|
+
bulk: {
|
|
319
|
+
confirmDefault: '此操作将应用于 {{count}} 条记录。',
|
|
320
|
+
overLimit: '所选记录({{count}})超过该动作的上限({{limit}})。请减少选择后再继续。',
|
|
321
|
+
affectedRecords: '受影响的记录({{count}}):',
|
|
322
|
+
rowFallback: '第 {{index}} 行',
|
|
323
|
+
andMore: '……以及另外 {{count}} 条',
|
|
324
|
+
processed: '已处理 {{count}} / {{total}}',
|
|
325
|
+
processedFailed: ' · {{count}} 条失败',
|
|
326
|
+
undonePrefix: '已撤销 — ',
|
|
327
|
+
succeeded: '成功 {{count}} / {{total}}',
|
|
328
|
+
resultFailed: ' · 失败 {{count}}',
|
|
329
|
+
retry: '重试',
|
|
330
|
+
downloadErrorCsv: '下载错误 CSV',
|
|
331
|
+
cancel: '取消',
|
|
332
|
+
back: '上一步',
|
|
333
|
+
next: '下一步',
|
|
334
|
+
run: '执行',
|
|
335
|
+
running: '执行中…',
|
|
336
|
+
undo: '撤销',
|
|
337
|
+
undoing: '撤销中…',
|
|
338
|
+
done: '完成',
|
|
339
|
+
selectPlaceholder: '请选择…',
|
|
340
|
+
loading: '加载中…',
|
|
234
341
|
},
|
|
235
342
|
},
|
|
236
343
|
calendar: {
|
|
@@ -305,6 +412,9 @@ const zh = {
|
|
|
305
412
|
addGroup: '添加分组字段',
|
|
306
413
|
collapsedByDefault: '默认折叠',
|
|
307
414
|
removeGroup: '删除',
|
|
415
|
+
inlineEditShort: '行内编辑',
|
|
416
|
+
inlineEditLabel: '行内编辑记录(点击单元格进行编辑)',
|
|
417
|
+
recordEditingTitle: '记录编辑',
|
|
308
418
|
},
|
|
309
419
|
kanban: {
|
|
310
420
|
addCard: '添加卡片',
|
|
@@ -1665,6 +1775,14 @@ const zh = {
|
|
|
1665
1775
|
greetingEvening: '晚上好',
|
|
1666
1776
|
greetingNight: '夜深了',
|
|
1667
1777
|
heroTagline: '从上次离开的地方继续,或者探索新的内容。',
|
|
1778
|
+
build: {
|
|
1779
|
+
title: '构建应用',
|
|
1780
|
+
subtitle: '从零开始 — 设计对象、表单、自动化与界面。',
|
|
1781
|
+
},
|
|
1782
|
+
template: {
|
|
1783
|
+
title: '从模板开始',
|
|
1784
|
+
subtitle: '从应用市场安装模板应用并按需定制。',
|
|
1785
|
+
},
|
|
1668
1786
|
open: '打开',
|
|
1669
1787
|
stats: {
|
|
1670
1788
|
apps: '应用',
|