@arronqzy/i18n 0.1.4 → 0.1.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arronqzy/i18n",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Shared Chinese/English i18n for Abuilder (React + Vue)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -27,6 +27,19 @@ export const enUS = {
27
27
  add: "Add",
28
28
  remove: "Remove",
29
29
  loading: "Loading…",
30
+ loadingWorkspace: "Loading workspace…",
31
+ savingWorkspace: "Saving workspace…",
32
+ syncingWorkspace: "Syncing workspace…",
33
+ deletingWorkspace: "Deleting workspace…",
34
+ importingPanel: "Importing panel…",
35
+ importingBlueprint: "Importing blueprint…",
36
+ exportingPanel: "Exporting…",
37
+ uploadingFile: "Processing file…",
38
+ loadingBlueprint: "Loading blueprint…",
39
+ savingBlueprint: "Saving blueprint…",
40
+ syncingBlueprint: "Syncing blueprint…",
41
+ openingPreview: "Opening preview…",
42
+ fileTooLarge: "File is too large (max {max}). Compress it and try again.",
30
43
  colorPickerAria: "{label} color picker",
31
44
  hintAria: "{label} hint",
32
45
  secondsAgo: "{sec}s ago",
@@ -112,6 +125,9 @@ export const enUS = {
112
125
  fontSmall: "Font: small",
113
126
  fontMedium: "Font: medium",
114
127
  fontLarge: "Font: large",
128
+ outputScale: "Output scale",
129
+ outputScaleHint:
130
+ "On: fonts and content scale as the preview fills the screen. Off: blocks still fill the screen, but content stays original size to avoid distortion",
115
131
  productName: "Product name",
116
132
  productNamePlaceholder: "Enter the current build product name",
117
133
  uploadTitleIcon: "Upload title icon",
@@ -164,6 +180,7 @@ export const enUS = {
164
180
  funnel: "Funnel chart",
165
181
  text: "Text",
166
182
  geometry: "Geometry",
183
+ scene3d: "3D",
167
184
  grid: "Grid layout",
168
185
  image: "Image",
169
186
  video: "Video",
@@ -238,14 +255,17 @@ export const enUS = {
238
255
  sectionVideo: "Video",
239
256
  sectionImage: "Image",
240
257
  sectionGeometry: "Geometry",
258
+ sectionScene3d: "3D scene",
241
259
  sectionGrid: "Grid layout",
242
260
  sectionGridChildSpan: "Grid child span",
243
261
  sectionReference: "Reference",
244
262
  groupBgFill: "Background fill",
245
- groupBgLayout: "Background layout",
263
+ groupBgLayout: "Background image & layout",
246
264
  groupBorderGeometry: "Border geometry",
247
265
  groupBorderVisual: "Border appearance",
266
+ groupNodeMore: "Rotate & layer",
248
267
  groupBasicDisplay: "Basic display",
268
+ groupChartDisplayMore: "Gradient & render",
249
269
  groupTooltip: "Tooltip",
250
270
  groupData: "Data",
251
271
  groupAxes: "Axes",
@@ -264,6 +284,75 @@ export const enUS = {
264
284
  groupImageSource: "Image source",
265
285
  groupDisplayMode: "Display mode",
266
286
  groupBasicShape: "Basic shape",
287
+ groupScene3dModels: "Models",
288
+ groupScene3dPurpose: "Scene purpose",
289
+ groupScene3dCamera: "Camera (preview initial)",
290
+ groupScene3dInteraction: "Interaction",
291
+ groupScene3dModelAnim: "Model animation",
292
+ groupScene3dCameraAnim: "Camera animation",
293
+ scene3dPlaceholder: "Upload GLB/GLTF 3D models",
294
+ scene3dUploadModels: "Upload models",
295
+ scene3dNoModels: "No models uploaded",
296
+ scene3dObjectNames: "Object names",
297
+ scene3dObjectCount: "{n} objects",
298
+ scene3dSearchObject: "Search objects",
299
+ scene3dHideObject: "Hide",
300
+ scene3dShowObject: "Show",
301
+ scene3dSoloObject: "Solo",
302
+ scene3dSoloOff: "Exit solo",
303
+ scene3dObjectTag: "Bubble tag",
304
+ scene3dHideShort: "Hide",
305
+ scene3dShowShort: "Show",
306
+ scene3dSoloShort: "Solo",
307
+ scene3dTagShort: "Tag",
308
+ scene3dObjectTagHtml: "HTML content",
309
+ scene3dObjectTagPlaceholder: "Enter HTML; it updates on the model live",
310
+ scene3dObjectTagAnchor: "Anchor",
311
+ scene3dNoObjectNames: "No object names parsed yet",
312
+ scene3dCameraPos: "Position",
313
+ scene3dCameraTarget: "Target",
314
+ scene3dCameraFov: "FOV",
315
+ scene3dCameraEditDesc: "Hold C and drag in edit mode to set the preview initial camera",
316
+ scene3dCameraEditHint: "C + mouse: adjust camera",
317
+ scene3dHoldCHint: "Hold C to adjust camera",
318
+ scene3dEnableMouseControl: "Allow mouse control in preview",
319
+ scene3dEnableMouseControlHint: "Orbit/zoom with mouse when previewing",
320
+ scene3dAutoRotate: "Auto rotate",
321
+ scene3dPurposeProduct: "Product showcase",
322
+ scene3dPurposeTwin: "Digital twin",
323
+ scene3dPurposeSandbox: "Interactive sandbox",
324
+ scene3dPurposeHint: "Applies lighting, ground and interaction defaults; you can still tweak them",
325
+ scene3dEnvironment: "Environment",
326
+ scene3dContactShadows: "Contact shadows",
327
+ scene3dShowGrid: "Ground grid",
328
+ scene3dClickToFocus: "Click to focus",
329
+ scene3dHighlightHover: "Highlight on hover",
330
+ scene3dAnimModel: "Model",
331
+ scene3dAnimObjectName: "Object name",
332
+ scene3dSelectObject: "Select object",
333
+ scene3dAnimAxis: "Axis",
334
+ scene3dAnimPivot: "Pivot",
335
+ scene3dAnimDirection: "Direction",
336
+ scene3dAnimAngle: "Angle (deg)",
337
+ scene3dAnimDuration: "Duration (s)",
338
+ scene3dAnimLoop: "Loop",
339
+ scene3dCameraAnimDefault: "Orbit shot",
340
+ scene3dCameraAnimPushIn: "Push-in shot",
341
+ scene3dCameraAnimPullBack: "Pull-back shot",
342
+ scene3dCameraAnimTruckLeft: "Truck-left shot",
343
+ scene3dCameraAnimCraneUp: "Crane-up shot",
344
+ scene3dCameraAnimOffset: "Offset",
345
+ scene3dCameraAnimSpeed: "Rotation speed (deg/s)",
346
+ scene3dCameraAnimDuration: "Duration {sec}s",
347
+ scene3dDirClockwise: "Clockwise",
348
+ scene3dDirCounter: "Counter-clockwise",
349
+ scene3dPivot_center: "Center",
350
+ scene3dPivot_left: "Left",
351
+ scene3dPivot_right: "Right",
352
+ scene3dPivot_front: "Front",
353
+ scene3dPivot_back: "Back",
354
+ scene3dPivot_top: "Top",
355
+ scene3dPivot_bottom: "Bottom",
267
356
  groupCanvasScript: "Advanced (Canvas script)",
268
357
  groupSketchOverlay: "Sketch overlay",
269
358
  groupGridParams: "Grid parameters",
@@ -351,6 +440,7 @@ export const enUS = {
351
440
  gaugeValue: "Gauge value",
352
441
  barWidth: "Bar width",
353
442
  barWidthPx: "Bar width (px)",
443
+ barWidthAuto: "Auto",
354
444
  smooth: "Smooth curve",
355
445
  pieInnerRadius: "Inner radius",
356
446
  pieInnerRadiusPct: "Inner radius (%)",
@@ -436,6 +526,8 @@ export const enUS = {
436
526
  collapseHighFreq: "Collapse frequent options",
437
527
  expandAxisPointer: "Expand axis pointer options",
438
528
  collapseAxisPointer: "Collapse axis pointer options",
529
+ expandGroup: "Expand {title}",
530
+ collapseGroup: "Collapse {title}",
439
531
  textHtml: "Text content (HTML)",
440
532
  fontFamily: "Font family",
441
533
  fontFamilyPlaceholder: "e.g. Inter, PingFang SC, Microsoft YaHei",
@@ -447,9 +539,11 @@ export const enUS = {
447
539
  selectTextAlign: "Select alignment",
448
540
  alignLeft: "Left",
449
541
  alignCenter: "Center",
542
+ alignMiddle: "True center",
450
543
  alignRight: "Right",
451
544
  alignJustify: "Justify",
452
545
  lineHeight: "Line height",
546
+ lineHeightAuto: "Auto",
453
547
  textColor: "Text color",
454
548
  allowCanvasInput: "Allow direct input on canvas (on by default)",
455
549
  audioUrl: "Audio URL",
@@ -530,6 +624,7 @@ export const enUS = {
530
624
  doubleClickText: "Double-click to enter text",
531
625
  slotOccupied: "Slot {n} (occupied)",
532
626
  slotEmpty: "Slot {n} (empty)",
627
+ gridDropHint: "Drop a node here",
533
628
  configureAudioFirst: "Configure an audio source first",
534
629
  clickPause: "Click to pause",
535
630
  clickPlay: "Click to play",
@@ -587,7 +682,7 @@ export const enUS = {
587
682
  groupTableColumnDetail: "Column detail · {name}",
588
683
  groupTableDataHint:
589
684
  "Prefer Scope binding; you can also paste static JSON. Dynamic wins when non-empty; otherwise fall back to static; if both empty, show empty state.",
590
- groupTableAppearanceHint: "Header, stripes, row height, and base colors.",
685
+ groupTableAppearanceHint: "Header, stripes, row height, body background, and base colors.",
591
686
  groupTableColumns: "2. Columns (order & width)",
592
687
  groupTableColumnsHint:
593
688
  "Use up/down to reorder columns; edit width on the right. Select a column to configure field and widget below.",
@@ -638,7 +733,12 @@ export const enUS = {
638
733
  tableRowHeightHint: "Used by virtual scroll sizing; 28–48 is typical.",
639
734
  tableStyleColor: "Table text color",
640
735
  tableStyleFontSize: "Table font size",
736
+ tableBodyBg: "Table body background",
737
+ tableBodyBgHint: "Background of the table content area. Transparent lets the canvas or nodes behind show through; the header keeps its own background.",
738
+ tableBgTransparent: "Transparent background",
739
+ tableBgTransparentHint: "Background is transparent; no solid fill.",
641
740
  tableHeaderBg: "Header background",
741
+ tableHeaderBgHint: "Header background. Transparent lets the canvas or table body show through.",
642
742
  tableHeaderFontSize: "Header font size",
643
743
  tableColumns: "Columns",
644
744
  tableColumnsHint: "Which fields to show, header labels, widths, and cell widgets (text/tag/…).",
@@ -666,7 +766,7 @@ export const enUS = {
666
766
  tableTooltipTemplateHint:
667
767
  "Same placeholders as the display template (based on the mapped value); leave empty to use the final cell text.",
668
768
  tableWidgetProps: "Widget options",
669
- tableWidgetPropsHint: "Configure link URL, image source, progress max, etc. per widget.",
769
+ tableWidgetPropsHint: "Configure text style, plus link URL, image source, progress max, etc. per widget.",
670
770
  tableImageUrlMode: "Image URL source",
671
771
  tableImageUrlModeHint:
672
772
  "Field: use a row field as URL; Static: paste/upload/Scope template; Prefix: CDN prefix + field; Template: build with {value}/{row.xxx}.",
@@ -776,7 +876,7 @@ export const enUS = {
776
876
  "Restyle a cell when a condition matches, e.g. highlight when score > 80. Field can be empty to use this column.",
777
877
  tableAddCellStyleRule: "Add style rule",
778
878
  tableRowStyleRules: "Conditional row styles",
779
- tableRowStyleRulesHint: "Color a whole row when it matches, e.g. status = bad.",
879
+ tableRowStyleRulesHint: "Change a row's background when it matches. Set it to transparent to show the table body or canvas behind.",
780
880
  tableAddRowStyleRule: "Add row style",
781
881
  tableNoRowStyleRules: "No row style rules",
782
882
  tableConditionOp: "When",
@@ -801,7 +901,7 @@ export const enUS = {
801
901
  tableDisplayValueHint:
802
902
  "Text when matched. Templates: {current}/{value} = raw cell value, {row.field} = other columns.",
803
903
  tableBgColor: "Background",
804
- tableBgColorHint: "Background when the rule matches (#hex or rgba).",
904
+ tableBgColorHint: "Background when the rule matches (#hex, rgba, or transparent).",
805
905
  tableEmpty: "No data",
806
906
  tableColName: "Name",
807
907
  tableColStatus: "Status",
@@ -859,6 +959,7 @@ export const enUS = {
859
959
  nodeConfigLocked: "This node is locked; config fields are read-only.",
860
960
  nodeConfigLayerLocked: "This node's layer is locked; config fields are read-only.",
861
961
  readImageFailed: "Failed to read image",
962
+ readModelFailed: "Failed to read 3D model",
862
963
  readAudioFailed: "Failed to read audio",
863
964
  readVideoFailed: "Failed to read video",
864
965
  readRecordAudioFailed: "Failed to read recording",
@@ -933,6 +1034,7 @@ export const enUS = {
933
1034
  audio: "Audio",
934
1035
  reference: "Reference",
935
1036
  geometry: "Geometry",
1037
+ scene3d: "3D Scene",
936
1038
  table: "Table",
937
1039
  },
938
1040
  workspace: {
@@ -959,6 +1061,8 @@ export const enUS = {
959
1061
  previewNoNodes: "This workspace has no view nodes to preview",
960
1062
  previewHint: "Click Sync or Create workspace in the editor before previewing",
961
1063
  previewDocTitle: "Preview",
1064
+ currentBadge: "Current",
1065
+ previewingBadge: "Previewing",
962
1066
  },
963
1067
  layers: {
964
1068
  title: "Layers",
@@ -1192,6 +1296,7 @@ export const enUS = {
1192
1296
  typeAnd: "AND",
1193
1297
  typeLifecycle: "Lifecycle",
1194
1298
  typeView: "View",
1299
+ typeEvent: "Event",
1195
1300
  typeFetch: "Fetch",
1196
1301
  typeJson: "JSON",
1197
1302
  typeClock: "Clock",
@@ -1206,6 +1311,8 @@ export const enUS = {
1206
1311
  summaryNoView: "No view nodes linked",
1207
1312
  summaryViewOne: "View node {id}",
1208
1313
  summaryViewMany: "{count} view nodes linked",
1314
+ summaryEventNoView: "{events} · no view nodes linked",
1315
+ summaryEvent: "{events} · {count} view node(s)",
1209
1316
  summaryAnd: "Output when both inputs are true",
1210
1317
  phaseCreated: "Created (created)",
1211
1318
  phaseBeforeMount: "Before mount (beforeMount)",
@@ -1216,11 +1323,18 @@ export const enUS = {
1216
1323
  phaseActivated: "Activated (activated)",
1217
1324
  phaseDeactivated: "Deactivated (deactivated)",
1218
1325
  phaseBlueprintActivated: "Blueprint activated (blueprintActivated)",
1326
+ eventClick: "Click",
1327
+ eventDblclick: "Double click",
1328
+ eventContextmenu: "Context menu",
1329
+ eventMouseenter: "Mouse enter",
1330
+ eventMouseleave: "Mouse leave",
1219
1331
  dragToMove: "Drag to move",
1220
1332
  signalSentCount: "Signals sent",
1221
1333
  signalIn: "True/false signal input",
1222
1334
  signalOut: "True/false signal output",
1223
1335
  lifecycleOut: "Emit true/false when lifecycle matches",
1336
+ eventIn: "Connect a lifecycle node to register events in that phase",
1337
+ eventOut: "Emit true when a bound view event fires",
1224
1338
  andInA: "Input A (OR across edges)",
1225
1339
  andInB: "Input B (OR across edges)",
1226
1340
  andOut: "Emit true when both inputs are true",
@@ -1235,6 +1349,7 @@ export const enUS = {
1235
1349
  roleJson: "JSON node",
1236
1350
  roleLogic: "Logic node",
1237
1351
  roleClock: "Clock node",
1352
+ roleEvent: "Event node",
1238
1353
  roleView: "View node",
1239
1354
  nodeName: "Node name",
1240
1355
  configType: "Config type",
@@ -1245,10 +1360,18 @@ export const enUS = {
1245
1360
  configFetch: "Fetch",
1246
1361
  configJson: "JSON node",
1247
1362
  configClock: "Clock",
1363
+ configEvent: "Event config",
1248
1364
  configView: "View node config",
1249
1365
  linkedViewNodes: "Linked view nodes",
1250
1366
  selectViewNode: "Select view nodes",
1251
1367
  viewMultiHint: "Multi-select view canvas nodes; configure the blueprint node here. Edit view props in the view panel.",
1368
+ eventViewHint: "Pick view canvas nodes to listen to. Connect a lifecycle node on the left first; listeners register only after that phase fires.",
1369
+ eventListen: "Listen to events",
1370
+ eventNoInput: "The left input must all come from lifecycle nodes: events register in that lifecycle phase.",
1371
+ eventInputMissing: "No lifecycle node is connected. Connect a lifecycle node to the left input; events register only after that phase fires.",
1372
+ eventInputNotLifecycle: "Every input must be a lifecycle node. Remove Fetch, logic, or other non-lifecycle connections, or these events will not register.",
1373
+ eventConnectNeedLifecycle: "Event node inputs must all be lifecycle nodes. This node cannot connect to the left input.",
1374
+ eventHint: "Events register only after the connected lifecycle phase has fired. Then, when a linked view node fires a selected event, this node emits true downstream. The value is { event, node, eventType }: event snapshot, triggering node, and event type.",
1252
1375
  linkedViewCount: "{count} view node(s) linked: {names}",
1253
1376
  noViewOnCanvas: "No nodes on the view canvas",
1254
1377
  searchViewNodes: "Search view nodes…",
@@ -1272,7 +1395,22 @@ export const enUS = {
1272
1395
  taskChain: "Task chain",
1273
1396
  allowFalsePropagateDefault: "Allow false-signal propagation: by default false blocks the chain; when on, false signals and errors continue downstream.",
1274
1397
  fetchTitle: "Fetch",
1275
- fetchHint: "On a true signal, send an HTTP request; optionally import Swagger and pick a URL from the endpoint list.",
1398
+ fetchHint: "On a true signal, send an HTTP request. URL / headers / body / Base URL can use {scope?...} to read upstream data.",
1399
+ fetchScopeTitle: "Upstream scope",
1400
+ fetchScopeHint:
1401
+ "One upstream node: {scope?.value}, {scope?.id}, {scope?.name}, {scope?.type}. Multiple upstream nodes are keyed by node id, e.g. {scope?.node_abc?.value}. value is the output; other fields are node details. Header templates can live in JSON string values, or the whole field can be {scope?.value?.headers}.",
1402
+ fetchScopeEmpty: "No upstream edges yet. Connect a node to use scope templates for its output and details.",
1403
+ fetchScopePending: "Upstream has not run yet, so value is empty; id / name / type are already available.",
1404
+ fetchScopeResolvedUrl: "Resolved URL",
1405
+ fetchScopeResolvedHeaders: "Resolved headers",
1406
+ fetchScopeResolvedBody: "Resolved body",
1407
+ fetchScopeUnresolved: "URL is empty after template evaluation. Make sure upstream has run and the path is correct.",
1408
+ fetchHeadersHint:
1409
+ "Enter a JSON object, e.g. {\"Authorization\":\"Bearer {scope?.value?.token}\"}. You can also set the whole field to {scope?.value?.headers} to use an upstream object as headers.",
1410
+ fetchBodyHint:
1411
+ "Text starting with { or [ is parsed as JSON. Use {scope?...} to insert upstream data: inside a string it is text; at a value position it becomes a JSON literal. The result must be valid JSON.",
1412
+ fetchHeadersInvalidJson: "Headers are not valid JSON: {error}",
1413
+ fetchBodyInvalidJson: "Request body is not valid JSON: {error}",
1276
1414
  swaggerUrlOptional: "Swagger document URL (optional)",
1277
1415
  abortParse: "Abort parsing",
1278
1416
  abortSwaggerAria: "Abort Swagger parsing",
@@ -27,6 +27,19 @@ export const zhCN = {
27
27
  add: "新增",
28
28
  remove: "移除",
29
29
  loading: "加载中…",
30
+ loadingWorkspace: "正在加载工作区…",
31
+ savingWorkspace: "正在保存工作区…",
32
+ syncingWorkspace: "正在同步工作区…",
33
+ deletingWorkspace: "正在删除工作区…",
34
+ importingPanel: "正在导入面板…",
35
+ importingBlueprint: "正在导入蓝图…",
36
+ exportingPanel: "正在导出…",
37
+ uploadingFile: "正在处理文件…",
38
+ loadingBlueprint: "正在加载蓝图…",
39
+ savingBlueprint: "正在保存蓝图…",
40
+ syncingBlueprint: "正在同步蓝图…",
41
+ openingPreview: "正在打开预览…",
42
+ fileTooLarge: "文件过大(最大 {max}),请压缩后再试。",
30
43
  colorPickerAria: "{label}调色盘",
31
44
  hintAria: "{label}说明",
32
45
  secondsAgo: "{sec}秒前",
@@ -111,6 +124,8 @@ export const zhCN = {
111
124
  fontSmall: "字体:小",
112
125
  fontMedium: "字体:中",
113
126
  fontLarge: "字体:大",
127
+ outputScale: "产出缩放",
128
+ outputScaleHint: "开启后预览撑满时字体和内容一起缩放;关闭后块仍撑满全屏,但内容保持原尺寸以免失真",
114
129
  productName: "产物名称",
115
130
  productNamePlaceholder: "请输入当前构建产物名称",
116
131
  uploadTitleIcon: "上传 title 图标",
@@ -163,6 +178,7 @@ export const zhCN = {
163
178
  funnel: "漏斗图",
164
179
  text: "文本",
165
180
  geometry: "几何",
181
+ scene3d: "三维",
166
182
  grid: "网格布局",
167
183
  image: "图片",
168
184
  video: "视频",
@@ -237,14 +253,17 @@ export const zhCN = {
237
253
  sectionVideo: "视频配置",
238
254
  sectionImage: "图片配置",
239
255
  sectionGeometry: "几何配置",
256
+ sectionScene3d: "三维场景配置",
240
257
  sectionGrid: "网格布局配置",
241
258
  sectionGridChildSpan: "网格子节点占位",
242
259
  sectionReference: "引用组件配置",
243
260
  groupBgFill: "背景填充",
244
- groupBgLayout: "背景布局",
261
+ groupBgLayout: "背景图片与布局",
245
262
  groupBorderGeometry: "边框几何",
246
263
  groupBorderVisual: "边框视觉",
264
+ groupNodeMore: "旋转与层级",
247
265
  groupBasicDisplay: "基础显示",
266
+ groupChartDisplayMore: "渐变与渲染",
248
267
  groupTooltip: "提示框 Tooltip",
249
268
  groupData: "数据",
250
269
  groupAxes: "坐标轴",
@@ -263,6 +282,75 @@ export const zhCN = {
263
282
  groupImageSource: "图片来源",
264
283
  groupDisplayMode: "显示方式",
265
284
  groupBasicShape: "基础形状",
285
+ groupScene3dModels: "模型资源",
286
+ groupScene3dPurpose: "场景用途",
287
+ groupScene3dCamera: "相机(预览初始)",
288
+ groupScene3dInteraction: "交互",
289
+ groupScene3dModelAnim: "模型动画",
290
+ groupScene3dCameraAnim: "相机动画",
291
+ scene3dPlaceholder: "请上传 GLB/GLTF 等三维模型",
292
+ scene3dUploadModels: "上传模型",
293
+ scene3dNoModels: "尚未上传模型",
294
+ scene3dObjectNames: "节点名称",
295
+ scene3dObjectCount: "{n} 个节点",
296
+ scene3dSearchObject: "搜索节点",
297
+ scene3dHideObject: "隐藏",
298
+ scene3dShowObject: "显示",
299
+ scene3dSoloObject: "单独显示",
300
+ scene3dSoloOff: "取消单独显示",
301
+ scene3dObjectTag: "气泡标签",
302
+ scene3dHideShort: "隐",
303
+ scene3dShowShort: "显",
304
+ scene3dSoloShort: "独",
305
+ scene3dTagShort: "标",
306
+ scene3dObjectTagHtml: "HTML 内容",
307
+ scene3dObjectTagPlaceholder: "输入 HTML,会实时显示在模型上",
308
+ scene3dObjectTagAnchor: "出现位置",
309
+ scene3dNoObjectNames: "尚未解析到节点 name",
310
+ scene3dCameraPos: "位置",
311
+ scene3dCameraTarget: "目标",
312
+ scene3dCameraFov: "视野 FOV",
313
+ scene3dCameraEditDesc: "编辑模式下按住 C 并拖拽可调整相机,保存后即作为预览初始视角",
314
+ scene3dCameraEditHint: "C + 鼠标:调整相机",
315
+ scene3dHoldCHint: "按住 C 可调整相机",
316
+ scene3dEnableMouseControl: "预览允许鼠标操控",
317
+ scene3dEnableMouseControlHint: "开启后预览页可用鼠标旋转/缩放场景",
318
+ scene3dAutoRotate: "自动旋转",
319
+ scene3dPurposeProduct: "产品展示",
320
+ scene3dPurposeTwin: "数字孪生",
321
+ scene3dPurposeSandbox: "交互沙盘",
322
+ scene3dPurposeHint: "会套用对应的灯光、地面与交互默认值,仍可再微调",
323
+ scene3dEnvironment: "环境光",
324
+ scene3dContactShadows: "接触阴影",
325
+ scene3dShowGrid: "地面网格",
326
+ scene3dClickToFocus: "点击模型聚焦",
327
+ scene3dHighlightHover: "悬停高亮",
328
+ scene3dAnimModel: "模型",
329
+ scene3dAnimObjectName: "节点 name",
330
+ scene3dSelectObject: "选择节点",
331
+ scene3dAnimAxis: "旋转轴",
332
+ scene3dAnimPivot: "旋转基点",
333
+ scene3dAnimDirection: "方向",
334
+ scene3dAnimAngle: "角度(度)",
335
+ scene3dAnimDuration: "时长(秒)",
336
+ scene3dAnimLoop: "循环",
337
+ scene3dCameraAnimDefault: "环绕镜头",
338
+ scene3dCameraAnimPushIn: "推近镜头",
339
+ scene3dCameraAnimPullBack: "拉远镜头",
340
+ scene3dCameraAnimTruckLeft: "横移镜头",
341
+ scene3dCameraAnimCraneUp: "升降镜头",
342
+ scene3dCameraAnimOffset: "位移",
343
+ scene3dCameraAnimSpeed: "旋转速度(度/秒)",
344
+ scene3dCameraAnimDuration: "时长 {sec}s",
345
+ scene3dDirClockwise: "顺时针",
346
+ scene3dDirCounter: "逆时针",
347
+ scene3dPivot_center: "中心",
348
+ scene3dPivot_left: "左侧",
349
+ scene3dPivot_right: "右侧",
350
+ scene3dPivot_front: "前方",
351
+ scene3dPivot_back: "后方",
352
+ scene3dPivot_top: "顶部",
353
+ scene3dPivot_bottom: "底部",
266
354
  groupCanvasScript: "高级(Canvas 脚本)",
267
355
  groupSketchOverlay: "手绘叠加",
268
356
  groupGridParams: "网格参数",
@@ -350,6 +438,7 @@ export const zhCN = {
350
438
  gaugeValue: "仪表盘值",
351
439
  barWidth: "柱宽",
352
440
  barWidthPx: "柱宽(px)",
441
+ barWidthAuto: "自动",
353
442
  smooth: "平滑曲线",
354
443
  pieInnerRadius: "内半径",
355
444
  pieInnerRadiusPct: "内半径(%)",
@@ -435,6 +524,8 @@ export const zhCN = {
435
524
  collapseHighFreq: "收起高频项",
436
525
  expandAxisPointer: "展开轴指示器项",
437
526
  collapseAxisPointer: "收起轴指示器项",
527
+ expandGroup: "展开{title}",
528
+ collapseGroup: "收起{title}",
438
529
  textHtml: "文本内容(HTML)",
439
530
  fontFamily: "字体",
440
531
  fontFamilyPlaceholder: "如:Inter, PingFang SC, Microsoft YaHei",
@@ -446,9 +537,11 @@ export const zhCN = {
446
537
  selectTextAlign: "选择对齐方式",
447
538
  alignLeft: "左对齐",
448
539
  alignCenter: "居中",
540
+ alignMiddle: "居正中心",
449
541
  alignRight: "右对齐",
450
542
  alignJustify: "两端对齐",
451
543
  lineHeight: "行高",
544
+ lineHeightAuto: "自动",
452
545
  textColor: "文字颜色",
453
546
  allowCanvasInput: "允许在画布内直接输入(默认开启)",
454
547
  audioUrl: "音频 URL",
@@ -529,6 +622,7 @@ export const zhCN = {
529
622
  doubleClickText: "双击输入文本",
530
623
  slotOccupied: "槽位 {n}(已占用)",
531
624
  slotEmpty: "槽位 {n}(空)",
625
+ gridDropHint: "拖入节点",
532
626
  configureAudioFirst: "请先配置音频源",
533
627
  clickPause: "点击暂停",
534
628
  clickPlay: "点击播放",
@@ -586,7 +680,7 @@ export const zhCN = {
586
680
  groupTableColumnDetail: "列详情 · {name}",
587
681
  groupTableDataHint:
588
682
  "优先用蓝图 Scope 绑定数据;也可粘贴静态 JSON。动态有数据时用动态,动态为空则回退静态;都没有则显示暂无数据。",
589
- groupTableAppearanceHint: "控制表头、斑马纹、行高与基础颜色。",
683
+ groupTableAppearanceHint: "控制表头、斑马纹、行高、主体背景与基础颜色。",
590
684
  groupTableColumns: "2. 列(顺序与宽度)",
591
685
  groupTableColumnsHint:
592
686
  "用上下箭头调整列顺序;右侧改列宽。点选一列后在下方编辑字段与展示方式。",
@@ -637,7 +731,12 @@ export const zhCN = {
637
731
  tableRowHeightHint: "虚拟滚动按此高度估算;建议 28–48。",
638
732
  tableStyleColor: "表格文字色",
639
733
  tableStyleFontSize: "表格字号",
734
+ tableBodyBg: "表格主体背景",
735
+ tableBodyBgHint: "表格内容区背景。开启透明后可露出画布或下层节点;表头仍用自己的背景色。",
736
+ tableBgTransparent: "背景透明",
737
+ tableBgTransparentHint: "当前为透明,不再铺实色底。",
640
738
  tableHeaderBg: "表头背景色",
739
+ tableHeaderBgHint: "表头背景。开启透明后可露出画布或表格主体。",
641
740
  tableHeaderFontSize: "表头字号",
642
741
  tableColumns: "列配置",
643
742
  tableColumnsHint: "定义展示哪些字段、表头文案、宽度,以及单元格用文本/标签等哪种展示方式。",
@@ -665,7 +764,7 @@ export const zhCN = {
665
764
  tableTooltipTemplateHint:
666
765
  "与显示模版相同占位符(基于映射后的值);留空则使用单元格最终显示文案。",
667
766
  tableWidgetProps: "组件参数",
668
- tableWidgetPropsHint: "按展示方式配置链接地址、图片来源、进度最大值等。",
767
+ tableWidgetPropsHint: "按展示方式配置文字样式,以及链接地址、图片来源、进度最大值等。",
669
768
  tableImageUrlMode: "图片地址来源",
670
769
  tableImageUrlModeHint:
671
770
  "列字段:用行里的字段当 URL;固定地址:粘贴/上传/Scope 模版;前缀拼接:CDN 前缀 + 字段;模版:用 {value}/{row.xxx} 拼出完整地址。",
@@ -775,7 +874,7 @@ export const zhCN = {
775
874
  "当单元格满足条件时改背景色等。例如分数大于 80 时高亮。可指定字段,留空则用当前列字段。",
776
875
  tableAddCellStyleRule: "添加样式规则",
777
876
  tableRowStyleRules: "整行条件样式",
778
- tableRowStyleRulesHint: "当整行满足条件时给该行上色。例如 status 等于 bad 时整行标红。",
877
+ tableRowStyleRulesHint: "当整行满足条件时改背景。可设为透明,让该行透出表格主体或画布。",
779
878
  tableAddRowStyleRule: "添加行样式",
780
879
  tableNoRowStyleRules: "暂无行样式规则",
781
880
  tableConditionOp: "当满足",
@@ -800,7 +899,7 @@ export const zhCN = {
800
899
  tableDisplayValueHint:
801
900
  "条件命中后的显示文案,支持模版:{current}/{value} 为原始值,{row.字段名} 为同行其它字段。",
802
901
  tableBgColor: "背景色",
803
- tableBgColorHint: "条件命中后应用的背景色,支持 #hexrgba",
902
+ tableBgColorHint: "条件命中后应用的背景色,支持 #hexrgba,也可设为透明。",
804
903
  tableEmpty: "暂无数据",
805
904
  tableColName: "名称", tableColStatus: "状态",
806
905
  tableColScore: "分数",
@@ -857,6 +956,7 @@ export const zhCN = {
857
956
  nodeConfigLocked: "当前节点已锁定,配置项不可编辑。",
858
957
  nodeConfigLayerLocked: "当前节点所在图层已锁定,配置项不可编辑。",
859
958
  readImageFailed: "读取图片失败",
959
+ readModelFailed: "读取三维模型失败",
860
960
  readAudioFailed: "读取音频失败",
861
961
  readVideoFailed: "读取视频失败",
862
962
  readRecordAudioFailed: "录音读取失败",
@@ -931,6 +1031,7 @@ export const zhCN = {
931
1031
  audio: "音频",
932
1032
  reference: "引用组件",
933
1033
  geometry: "几何",
1034
+ scene3d: "三维",
934
1035
  table: "表格",
935
1036
  },
936
1037
  workspace: {
@@ -957,6 +1058,8 @@ export const zhCN = {
957
1058
  previewNoNodes: "当前工作区没有可预览的视图节点",
958
1059
  previewHint: "请先在编辑器中点击「同步」或「创建工作区」后再预览",
959
1060
  previewDocTitle: "预览",
1061
+ currentBadge: "当前",
1062
+ previewingBadge: "预览中",
960
1063
  },
961
1064
  layers: {
962
1065
  title: "图层",
@@ -1190,6 +1293,7 @@ export const zhCN = {
1190
1293
  typeAnd: "并运算",
1191
1294
  typeLifecycle: "生命周期",
1192
1295
  typeView: "视图",
1296
+ typeEvent: "事件",
1193
1297
  typeFetch: "数据源获取",
1194
1298
  typeJson: "JSON 节点",
1195
1299
  typeClock: "时钟",
@@ -1204,6 +1308,8 @@ export const zhCN = {
1204
1308
  summaryNoView: "未关联视图节点",
1205
1309
  summaryViewOne: "视图节点 {id}",
1206
1310
  summaryViewMany: "已关联 {count} 个视图节点",
1311
+ summaryEventNoView: "{events} · 未关联视图节点",
1312
+ summaryEvent: "{events} · {count} 个视图节点",
1207
1313
  summaryAnd: "两路输入均为真时输出",
1208
1314
  phaseCreated: "已创建 (created)",
1209
1315
  phaseBeforeMount: "挂载前 (beforeMount)",
@@ -1214,11 +1320,18 @@ export const zhCN = {
1214
1320
  phaseActivated: "已激活 (activated)",
1215
1321
  phaseDeactivated: "已停用 (deactivated)",
1216
1322
  phaseBlueprintActivated: "蓝图激活 (blueprintActivated)",
1323
+ eventClick: "单击 (click)",
1324
+ eventDblclick: "双击 (dblclick)",
1325
+ eventContextmenu: "右键 (contextmenu)",
1326
+ eventMouseenter: "移入 (mouseenter)",
1327
+ eventMouseleave: "移出 (mouseleave)",
1217
1328
  dragToMove: "拖拽移动",
1218
1329
  signalSentCount: "已发送信号次数",
1219
1330
  signalIn: "真/假信号输入",
1220
1331
  signalOut: "真/假信号输出",
1221
1332
  lifecycleOut: "生命周期满足时输出真/假信号",
1333
+ eventIn: "接入生命周期后,在该阶段注册事件",
1334
+ eventOut: "视图事件触发时输出真信号",
1222
1335
  andInA: "输入 A(多连线为或)",
1223
1336
  andInB: "输入 B(多连线为或)",
1224
1337
  andOut: "两路均为真时输出真信号",
@@ -1233,6 +1346,7 @@ export const zhCN = {
1233
1346
  roleJson: "JSON 节点",
1234
1347
  roleLogic: "逻辑节点",
1235
1348
  roleClock: "时钟节点",
1349
+ roleEvent: "事件节点",
1236
1350
  roleView: "视图节点",
1237
1351
  nodeName: "节点名称",
1238
1352
  configType: "配置类型",
@@ -1243,10 +1357,18 @@ export const zhCN = {
1243
1357
  configFetch: "数据源获取",
1244
1358
  configJson: "JSON 节点",
1245
1359
  configClock: "时钟",
1360
+ configEvent: "事件配置",
1246
1361
  configView: "视图节点配置",
1247
1362
  linkedViewNodes: "关联视图节点",
1248
1363
  selectViewNode: "选择视图节点",
1249
1364
  viewMultiHint: "可多选视图画布节点;关联后仍在此配置蓝图节点,视图属性请在视图面板中编辑。",
1365
+ eventViewHint: "选择要监听的视图画布节点。需先从左侧接入生命周期节点;对应阶段触发后才会注册监听。",
1366
+ eventListen: "监听事件",
1367
+ eventNoInput: "左侧输入必须全部连接生命周期节点,表示在对应生命周期阶段注册这些事件。",
1368
+ eventInputMissing: "尚未接入生命周期节点。请从生命周期节点连到左侧输入口,对应阶段触发后才会注册事件。",
1369
+ eventInputNotLifecycle: "输入端必须全部是生命周期节点。请去掉 Fetch、逻辑等非生命周期连线,否则这些事件不会注册。",
1370
+ eventConnectNeedLifecycle: "事件节点的输入必须全部是生命周期节点,不能从当前节点连入。",
1371
+ eventHint: "接入的生命周期阶段触发后才会注册。之后当关联的视图节点发生所选事件时,向下游发出真信号。输出值为 { event, node, eventType }:触发事件快照、触发节点、事件类型。",
1250
1372
  linkedViewCount: "已关联 {count} 个视图节点:{names}",
1251
1373
  noViewOnCanvas: "视图画布暂无节点",
1252
1374
  searchViewNodes: "搜索视图节点…",
@@ -1270,7 +1392,22 @@ export const zhCN = {
1270
1392
  taskChain: "任务链执行",
1271
1393
  allowFalsePropagateDefault: "允许假信号传递:默认假信号会阻塞任务链;开启后继续向下游传递假信号与错误信息。",
1272
1394
  fetchTitle: "数据源获取 (Fetch)",
1273
- fetchHint: "收到真信号后发起 HTTP 请求;可导入 Swagger 文档后从接口列表联想选择 URL",
1395
+ fetchHint: "收到真信号后发起 HTTP 请求。URL / 请求头 / 请求体 / Base URL 可用 {scope?...} 引用上游数据。",
1396
+ fetchScopeTitle: "上游输入 Scope",
1397
+ fetchScopeHint:
1398
+ "单路上游:{scope?.value}、{scope?.id}、{scope?.name}、{scope?.type}。多路上游按节点 id 取值,例如 {scope?.node_abc?.value}。value 为上游输出,其余为节点详情。请求头可把模板写在 JSON 字符串值内,也可整段写成 {scope?.value?.headers}。",
1399
+ fetchScopeEmpty: "暂无上游连线。连接上游后可用 scope 模板引用其输出与节点信息。",
1400
+ fetchScopePending: "上游尚未执行,value 暂空;id / name / type 已可引用。",
1401
+ fetchScopeResolvedUrl: "解析后的 URL",
1402
+ fetchScopeResolvedHeaders: "解析后的请求头",
1403
+ fetchScopeResolvedBody: "解析后的请求体",
1404
+ fetchScopeUnresolved: "模板解析后请求 URL 为空,请确认上游已执行且路径正确",
1405
+ fetchHeadersHint:
1406
+ "填写 JSON 对象,例如 {\"Authorization\":\"Bearer {scope?.value?.token}\"}。也可整段写成 {scope?.value?.headers},用上游输出的对象作为请求头。",
1407
+ fetchBodyHint:
1408
+ "以 { 或 [ 开头时按 JSON 解析。可用 {scope?...} 插入上游数据:写在字符串内当作文本,写在值位置则插入 JSON 字面量。解析后必须是合法 JSON。",
1409
+ fetchHeadersInvalidJson: "请求头不是有效 JSON:{error}",
1410
+ fetchBodyInvalidJson: "请求体不是有效 JSON:{error}",
1274
1411
  swaggerUrlOptional: "Swagger 文档 URL(可选)",
1275
1412
  abortParse: "中止解析",
1276
1413
  abortSwaggerAria: "中止 Swagger 解析",