@things-factory/figure-ui 10.1.25 → 10.1.27

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.
Files changed (50) hide show
  1. package/client/graphql/index.ts +4 -1
  2. package/client/modeller/figure-animations.ts +229 -29
  3. package/client/modeller/figure-history-panel.ts +2 -2
  4. package/client/modeller/figure-inspector.ts +151 -5
  5. package/client/modeller/figure-preview.ts +5 -5
  6. package/client/modeller/figure-source.ts +33 -45
  7. package/client/modeller/figure-view.ts +20 -0
  8. package/client/modeller/joint-edits.ts +201 -0
  9. package/client/modeller/proposal-session.ts +8 -2
  10. package/client/pages/figure-modeller-page.ts +50 -15
  11. package/dist-client/graphql/index.js +4 -1
  12. package/dist-client/graphql/index.js.map +1 -1
  13. package/dist-client/modeller/figure-animations.d.ts +19 -0
  14. package/dist-client/modeller/figure-animations.js +206 -22
  15. package/dist-client/modeller/figure-animations.js.map +1 -1
  16. package/dist-client/modeller/figure-history-panel.js +2 -2
  17. package/dist-client/modeller/figure-history-panel.js.map +1 -1
  18. package/dist-client/modeller/figure-inspector.d.ts +11 -0
  19. package/dist-client/modeller/figure-inspector.js +124 -4
  20. package/dist-client/modeller/figure-inspector.js.map +1 -1
  21. package/dist-client/modeller/figure-preview.js +5 -5
  22. package/dist-client/modeller/figure-preview.js.map +1 -1
  23. package/dist-client/modeller/figure-source.d.ts +12 -1
  24. package/dist-client/modeller/figure-source.js +13 -40
  25. package/dist-client/modeller/figure-source.js.map +1 -1
  26. package/dist-client/modeller/figure-view.d.ts +16 -0
  27. package/dist-client/modeller/figure-view.js +15 -0
  28. package/dist-client/modeller/figure-view.js.map +1 -1
  29. package/dist-client/modeller/joint-edits.d.ts +29 -0
  30. package/dist-client/modeller/joint-edits.js +175 -0
  31. package/dist-client/modeller/joint-edits.js.map +1 -0
  32. package/dist-client/modeller/proposal-session.d.ts +5 -0
  33. package/dist-client/modeller/proposal-session.js +3 -2
  34. package/dist-client/modeller/proposal-session.js.map +1 -1
  35. package/dist-client/pages/figure-modeller-page.d.ts +2 -22
  36. package/dist-client/pages/figure-modeller-page.js +46 -15
  37. package/dist-client/pages/figure-modeller-page.js.map +1 -1
  38. package/dist-client/tsconfig.tsbuildinfo +1 -0
  39. package/dist-server/tsconfig.tsbuildinfo +1 -0
  40. package/package.json +3 -3
  41. package/test/ai-proposal-contract.test.ts +3 -2
  42. package/test/figure-source.test.ts +43 -57
  43. package/test/i18n-prefix-guard.test.ts +2 -3
  44. package/test/joint-edits.test.ts +130 -0
  45. package/test/preview-board-depth.test.ts +27 -0
  46. package/translations/en.json +119 -80
  47. package/translations/ja.json +208 -58
  48. package/translations/ko.json +139 -100
  49. package/translations/ms.json +206 -56
  50. package/translations/zh.json +207 -57
@@ -1,5 +1,11 @@
1
1
  {
2
+ "figure.button.add-channel": "添加通道",
3
+ "figure.button.add-clip": "添加 clip",
4
+ "figure.button.add-key": "添加关键帧",
5
+ "figure.button.add-parameter": "添加参数",
6
+ "figure.button.apply-fix": "应用修正 · {part} {axis} 固定面: {from} → {to}",
2
7
  "figure.button.ask": "ask",
8
+ "figure.button.cancel": "取消",
3
9
  "figure.button.center-x": "centre X",
4
10
  "figure.button.center-z": "centre Z",
5
11
  "figure.button.close": "close",
@@ -11,8 +17,12 @@
11
17
  "figure.button.move-part-down": "move down",
12
18
  "figure.button.move-part-up": "move up",
13
19
  "figure.button.new-figure": "new figure",
20
+ "figure.button.pivot-clear": "部件中心",
21
+ "figure.button.pivot-set": "设置",
22
+ "figure.button.preview-fix": "预览修正 · {part} {axis} 固定面: {from} → {to}",
14
23
  "figure.button.redo": "重做",
15
24
  "figure.button.release-figure": "发布",
25
+ "figure.button.remove": "删除",
16
26
  "figure.button.remove-part": "delete",
17
27
  "figure.button.reset-view": "reset",
18
28
  "figure.button.revert": "回退",
@@ -22,11 +32,12 @@
22
32
  "figure.button.take-n-changes": "apply {n}",
23
33
  "figure.button.to-floor": "to floor",
24
34
  "figure.button.undo": "撤销",
25
- "figure.label.anchor": "抓住哪个面",
35
+ "figure.label.accepts": "接受的类型",
36
+ "figure.label.anchor": "固定面",
26
37
  "figure.label.anchor-advanced": "advanced proportional sizing",
27
- "figure.label.anchor-aspect-x": "只按 x 轴变大的比例变大 (保持比例)",
28
- "figure.label.anchor-aspect-y": "只按 y 轴变大的比例变大 (保持比例)",
29
- "figure.label.anchor-aspect-z": "只按 z 轴变大的比例变大 (保持比例)",
38
+ "figure.label.anchor-aspect-x": "仅随 x 轴放大 (保持比例)",
39
+ "figure.label.anchor-aspect-y": "仅随 y 轴放大 (保持比例)",
40
+ "figure.label.anchor-aspect-z": "仅随 z 轴放大 (保持比例)",
30
41
  "figure.label.anchor-auto": "自动 ({rule})",
31
42
  "figure.label.anchor-center": "留在中间,尺寸不变",
32
43
  "figure.label.anchor-choice-aspect-x": "keep X ratio",
@@ -42,16 +53,18 @@
42
53
  "figure.label.anchor-choice-min-z": "back face",
43
54
  "figure.label.anchor-choice-scale": "grow together",
44
55
  "figure.label.anchor-choice-span": "fill both faces",
45
- "figure.label.anchor-max": "贴在较大一侧的面",
46
- "figure.label.anchor-max-x": "贴在右面",
47
- "figure.label.anchor-max-y": "贴在上面",
48
- "figure.label.anchor-max-z": "贴在前面",
49
- "figure.label.anchor-min": "贴在较小一侧的面",
50
- "figure.label.anchor-min-x": "贴在左面",
51
- "figure.label.anchor-min-y": "贴在下面",
52
- "figure.label.anchor-min-z": "贴在后面",
53
- "figure.label.anchor-scale": "随箱体一起变大",
54
- "figure.label.anchor-span": "贴住两面,填满中间",
56
+ "figure.label.anchor-max": "贴在较大一侧的面上",
57
+ "figure.label.anchor-max-x": "贴在右侧面上",
58
+ "figure.label.anchor-max-y": "贴在顶面上",
59
+ "figure.label.anchor-max-z": "贴在前面上",
60
+ "figure.label.anchor-min": "贴在较小一侧的面上",
61
+ "figure.label.anchor-min-x": "贴在左侧面上",
62
+ "figure.label.anchor-min-y": "贴在底面上",
63
+ "figure.label.anchor-min-z": "贴在后面上",
64
+ "figure.label.anchor-scale": "随包围盒一起放大",
65
+ "figure.label.anchor-span": "贴住两侧面并填满中间",
66
+ "figure.label.animation": "动画",
67
+ "figure.label.assumed-drawing": "放置的图面",
55
68
  "figure.label.axis-consistency": "visual consistency",
56
69
  "figure.label.axis-consistency-short": "consistency",
57
70
  "figure.label.axis-depth": "depth",
@@ -59,6 +72,7 @@
59
72
  "figure.label.axis-detail-short": "fidelity",
60
73
  "figure.label.axis-height": "height",
61
74
  "figure.label.axis-labels": "axis labels",
75
+ "figure.label.axis-name": "{axis} 轴",
62
76
  "figure.label.axis-reactive": "state display",
63
77
  "figure.label.axis-reactive-short": "state",
64
78
  "figure.label.axis-readable": "recognisability",
@@ -74,9 +88,19 @@
74
88
  "figure.label.budget-surface": "surfaces outside the palette",
75
89
  "figure.label.budget-transparent": "transparent materials",
76
90
  "figure.label.budgets": "budgets",
77
- "figure.label.by-axis": "maturity by axis",
91
+ "figure.label.by-axis": "按项目的成熟度",
78
92
  "figure.label.candidate-review": "candidate review",
79
93
  "figure.label.cast-shadow": "cast shadow",
94
+ "figure.label.category": "分类",
95
+ "figure.label.ceiling-height": "天花板高度 (mm)",
96
+ "figure.label.channel-path": "移动内容",
97
+ "figure.label.channel-pivot": "旋转中心",
98
+ "figure.label.channel-target": "部件",
99
+ "figure.label.channel-target-joints": "关节",
100
+ "figure.label.channel-target-parts": "部件",
101
+ "figure.label.channels": "通道",
102
+ "figure.label.clip-name": "clip 名称",
103
+ "figure.label.clips": "动画 (随时间播放)",
80
104
  "figure.label.coordinate-ground": "coordinate ground",
81
105
  "figure.label.corner-round": "corner round",
82
106
  "figure.label.detail-L": "detailed",
@@ -99,7 +123,8 @@
99
123
  "figure.label.environment-studio": "studio",
100
124
  "figure.label.environment-sunny": "sunny",
101
125
  "figure.label.environment-warehouse": "warehouse",
102
- "figure.label.figure": "图形",
126
+ "figure.label.figure": "Figure",
127
+ "figure.label.figure-placement": "放置基准",
103
128
  "figure.label.figure-released": "已发布",
104
129
  "figure.label.figure-type": "类型",
105
130
  "figure.label.findings": "findings",
@@ -112,11 +137,31 @@
112
137
  "figure.label.hollow-floor": "floor thickness",
113
138
  "figure.label.hollow-wall": "wall thickness",
114
139
  "figure.label.intensity": "intensity",
140
+ "figure.label.interpolation-linear": "平滑",
141
+ "figure.label.interpolation-step": "阶梯",
142
+ "figure.label.joint": "关节",
143
+ "figure.label.joint-axis": "轴",
144
+ "figure.label.joint-limit-max": "最大",
145
+ "figure.label.joint-limit-min": "最小",
146
+ "figure.label.joint-limits-deg": "活动范围(度)",
147
+ "figure.label.joint-limits-mm": "活动范围(mm)",
148
+ "figure.label.joint-origin": "基准点",
149
+ "figure.label.joint-parent": "附着于",
150
+ "figure.label.joint-parent-none": "无(Figure 框架)",
151
+ "figure.label.joint-type": "运动",
152
+ "figure.label.joint-type-continuous": "连续旋转",
153
+ "figure.label.joint-type-none": "固定",
154
+ "figure.label.joint-type-prismatic": "直线移动",
155
+ "figure.label.joint-type-revolute": "旋转(范围内)",
156
+ "figure.label.joint-value": "关节值",
115
157
  "figure.label.keep-round": "section",
158
+ "figure.label.key-at": "时间 (秒)",
159
+ "figure.label.key-at-value": "值位置 (0–1)",
116
160
  "figure.label.key-light": "key light",
117
161
  "figure.label.maturity": "maturity",
118
162
  "figure.label.mode-edit": "edit",
119
163
  "figure.label.mode-preview": "preview",
164
+ "figure.label.motion-intent": "要移动什么?",
120
165
  "figure.label.name": "name",
121
166
  "figure.label.no-color-chosen": "no color set",
122
167
  "figure.label.none": "none",
@@ -135,13 +180,25 @@
135
180
  "figure.label.palette-purpose-warning": "warning signal · an attention-needed indicator",
136
181
  "figure.label.palette-role": "color role",
137
182
  "figure.label.palette-token": "palette token",
183
+ "figure.label.parameter-default": "默认值",
184
+ "figure.label.parameter-duration": "全程时间 (秒)",
185
+ "figure.label.parameter-name": "参数名称",
186
+ "figure.label.parameter-range": "范围",
187
+ "figure.label.parameters": "参数 (由值决定姿态)",
138
188
  "figure.label.part": "part",
139
189
  "figure.label.part-material": "material",
140
190
  "figure.label.part-position": "position (centre)",
141
191
  "figure.label.part-size": "size",
142
192
  "figure.label.parts": "parts",
193
+ "figure.label.path-rotation": "旋转",
194
+ "figure.label.path-scale": "缩放",
195
+ "figure.label.path-translation": "位移",
143
196
  "figure.label.placement": "position and size",
197
+ "figure.label.placement-ceiling": "天花板基准 (ceiling)",
198
+ "figure.label.placement-center": "中心基准 (center)",
199
+ "figure.label.placement-floor": "地面基准 (floor)",
144
200
  "figure.label.placement-limit": "布置上限",
201
+ "figure.label.playback-speed": "播放速度",
145
202
  "figure.label.preset": "preset",
146
203
  "figure.label.preset-ceramic": "ceramic",
147
204
  "figure.label.preset-default": "default",
@@ -150,6 +207,7 @@
150
207
  "figure.label.preset-plastic": "plastic",
151
208
  "figure.label.preset-rubber": "rubber",
152
209
  "figure.label.preset-wood": "wood",
210
+ "figure.label.preview-base": "基准",
153
211
  "figure.label.primitive-cube": "box",
154
212
  "figure.label.primitive-cylinder": "cylinder",
155
213
  "figure.label.primitive-polygon": "polygon",
@@ -158,14 +216,30 @@
158
216
  "figure.label.primitive-wall": "wall",
159
217
  "figure.label.properties": "properties",
160
218
  "figure.label.proposed": "proposed",
219
+ "figure.label.recipe-conveyor": "输送机滚轮持续转动",
220
+ "figure.label.recipe-gate": "门或闸门打开",
221
+ "figure.label.recipe-lift": "升降机改变高度",
222
+ "figure.label.recipe-pusher": "推杆移动到位",
161
223
  "figure.label.release": "发布",
162
224
  "figure.label.released-versions": "已发布版本",
163
225
  "figure.label.repeat-axis": "axis it repeats along",
226
+ "figure.label.repeat-count": "数量",
164
227
  "figure.label.repeat-pitch": "pitch",
165
228
  "figure.label.reuse-trend": "reuse trend",
229
+ "figure.label.role-in-capability": "在能力中的角色",
230
+ "figure.label.role-port-in": "输入端口",
231
+ "figure.label.role-port-out": "输出端口",
232
+ "figure.label.role-slot": "槽位",
166
233
  "figure.label.rotation-degrees": "rotation (degrees)",
234
+ "figure.label.rung-flow": "流经",
235
+ "figure.label.rung-hold": "承载",
236
+ "figure.label.rung-none": "仅绘制",
167
237
  "figure.label.same-as-off": "same as unlit",
168
238
  "figure.label.scene-floor": "floor",
239
+ "figure.label.scene-reference": "场景坐标基准",
240
+ "figure.label.scene-reference-floor": "地面基准 (floor)",
241
+ "figure.label.scene-reference-inverted": "天花板基准 (inverted)",
242
+ "figure.label.scene-reference-space": "中心基准 (space)",
169
243
  "figure.label.segments": "segments",
170
244
  "figure.label.shape": "shape",
171
245
  "figure.label.shape-detail": "shape detail",
@@ -176,26 +250,44 @@
176
250
  "figure.label.sizing-scale": "scales proportionally",
177
251
  "figure.label.sizing-stretch": "stretches on one axis",
178
252
  "figure.label.sky-color": "sky color",
253
+ "figure.label.slot-capacity": "容量",
254
+ "figure.label.slots-and-ports": "槽位和端口",
179
255
  "figure.label.state": "状态",
180
256
  "figure.label.status-colors": "lit colors (lamps · indicators)",
257
+ "figure.label.tab-capability": "能力",
181
258
  "figure.label.tab-environment": "环境",
259
+ "figure.label.tags": "标签",
182
260
  "figure.label.tools": "align",
183
261
  "figure.label.transparent": "transparent",
184
262
  "figure.label.triangles": "triangles",
185
263
  "figure.label.triangles-at-100": "triangles for 100",
186
264
  "figure.label.triangles-at-10k": "triangles at 10k instances",
187
265
  "figure.label.weight": "weight",
266
+ "figure.label.what-this-does": "此 Figure 的作用",
267
+ "figure.text.accepts-anything": "留空表示不限",
268
+ "figure.text.accepts-explained": "可放入此槽位的类型。用逗号分隔,留空表示不限。",
188
269
  "figure.text.add-a-shape": "click to add a part",
189
- "figure.text.all-lights-off": "both lights are off. only self-lit surfaces show; everything else goes black — this is how you check whether a lamp is lit.",
270
+ "figure.text.all-lights-off": "灯光全部关闭,只显示自发光的面。",
190
271
  "figure.text.already-released-edit-to-release-again": "已经发布。修改并保存会回到草稿,然后可以再次发布。",
191
- "figure.text.anchor-explained": "箱体变大时这个部件贴在哪里。相邻部件贴在不同的面上,变大时就会分开。",
192
- "figure.text.assistant-proposed-a-figure": "here is a proposal — the result is on the right.",
193
- "figure.text.axes-not-measurable-yet": "axes that cannot be measured yet are left off the chart — {axes}. the reason is listed below.",
194
- "figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a drawing.",
195
- "figure.text.bound-by-triangles": "triangles reach the limit first {per} per instance, against {budget} for a drawing.",
272
+ "figure.text.anchor-explained": "包围盒放大时此部件贴住的面。与相邻部件贴在不同的面上时,放大后两者之间会出现间隙。",
273
+ "figure.text.anchors-are-not-drawn": "槽位和端口不会绘制在图面上,只在编辑画面中显示。",
274
+ "figure.text.animated-parts-cost": "每个运动部件增加 1 draw call。",
275
+ "figure.text.animated-parts-over": "已超过上限。在一个图面上放置多个会使画面变慢。",
276
+ "figure.text.animation-empty-examples": "转动的滚轮 · 滑动的门扇 · 升降的升降机 · 闪烁的指示灯。",
277
+ "figure.text.animation-empty-what-it-is": "还没有动作。添加 clip 来移动部件。",
278
+ "figure.text.animation-needs-a-named-part": "请先添加部件。",
279
+ "figure.text.assistant-proposed-a-figure": "提案显示在右侧。",
280
+ "figure.text.axes-not-measurable-yet": "无法测量的项目已从图表中移除: {axes}。原因见下方。",
281
+ "figure.text.bound-by-drawCalls": "draw call 先达到上限 (每个 {per},每个图面 {budget})。",
282
+ "figure.text.bound-by-triangles": "三角形先达到上限 (每个 {per},每个图面 {budget})。",
196
283
  "figure.text.budget-not-measured-yet": "this target has not been measured yet.",
197
284
  "figure.text.cannot-release-now": "现在无法发布",
198
- "figure.text.canvas-appears-once-a-part-exists": "the canvas appears once the figure has a part.",
285
+ "figure.text.canvas-appears-once-a-part-exists": "从左侧「形状」中选择一个来添加第一个部件。",
286
+ "figure.text.capability-hand-written": "这是手动指定的能力,不属于上面的任何级别。将以下方的名称保存。",
287
+ "figure.text.capacity-from-repeat": "容量由重复设置和实例尺寸决定",
288
+ "figure.text.category-explained": "在组件面板中分组显示的依据。每个 Figure 只设一个。",
289
+ "figure.text.category-placeholder": "例: 输送机",
290
+ "figure.text.ceiling-height-explained": "在预览中悬挂天花板基准 Figure 的高度。",
199
291
  "figure.text.center-on-x": "move to the centre of the base box on X.",
200
292
  "figure.text.center-on-z": "move to the centre of the base box on Z.",
201
293
  "figure.text.change-added": "a new part",
@@ -207,50 +299,71 @@
207
299
  "figure.text.change-placement": "放置基准",
208
300
  "figure.text.change-removed": "a part being removed",
209
301
  "figure.text.change-styleKit": "the style kit",
302
+ "figure.text.channel-target-is-gone": "没有该部件。如果修改了部件名称,请在此重新选择。",
303
+ "figure.text.clip-is-time-running": "随时间播放。实例提供的值是播放速度。",
304
+ "figure.text.clip-name-is-how-it-is-driven": "实例通过此名称提供播放速度。",
305
+ "figure.text.clip-name-taken": "已存在同名 clip。请输入其他名称。",
306
+ "figure.text.clip-needs-a-channel": "请至少添加一个通道。",
307
+ "figure.text.clip-needs-a-name": "请输入名称。",
210
308
  "figure.text.collapse-parts-pane": "collapse the part list",
211
309
  "figure.text.collapse-properties-pane": "collapse the property pane",
212
- "figure.text.coordinate-ground-explained": "draws the origin and a grid on the floor",
310
+ "figure.text.coordinate-ground-explained": "在地面显示原点和网格",
213
311
  "figure.text.delete-figure-confirm": "delete {name}? drawings already using this type will no longer find it.",
214
- "figure.text.detail-level-explained": "declares how detailed this figure is meant to be. S simple suits signs and posts, M normal suits most equipment, L detailed suits the large equipment a view is built around. the level sets the part limit, and maturity checks whether the figure lives up to it.",
312
+ "figure.text.designate-in-properties": "还没有指定部件。请选择部件,在属性标签页中设置「在能力中的角色」。",
313
+ "figure.text.detail-level-explained": "S 用于标志和立柱,M 用于大多数设备,L 用于作为画面中心的大型设备。等级决定部件数量上限。",
215
314
  "figure.text.discard-changes-and-start-new": "有未保存的更改。放弃并新建吗?",
216
315
  "figure.text.does-not-block": "不影响发布的项",
217
- "figure.text.emissive-explained": "the surface lights itself. 0 means it is not a lamp. it does not spill onto its surroundings.",
218
- "figure.text.environment-explained": "sets what metal surfaces reflect. it does not change the shape.",
316
+ "figure.text.emissive-explained": "面本身的亮度。0 表示不发光,也不会照亮周围。",
317
+ "figure.text.enter-a-type-name": "请输入类型名称。",
318
+ "figure.text.environment-explained": "设置金属材质反射的环境。形状不会改变。",
219
319
  "figure.text.expand-parts-pane": "expand the part list",
220
320
  "figure.text.expand-properties-pane": "expand the property pane",
221
321
  "figure.text.figure-display-name": "display name",
322
+ "figure.text.figure-name-example": "例: 空中悬挂搬运车",
323
+ "figure.text.figure-type-example": "例: OHT, AGV_LIFTER",
324
+ "figure.text.figure-type-placeholder": "Figure 识别类型 (例: OHT)",
222
325
  "figure.text.find-by-this-tag": "find by this tag",
223
326
  "figure.text.fits-n-instances": "up to {n}",
224
- "figure.text.floor-explained": "overlaps the coordinate ground, so usually off",
225
- "figure.text.follow-camera-explained": "turn off to fix the shadow direction",
327
+ "figure.text.floor-explained": "与坐标底图重叠,通常关闭",
328
+ "figure.text.follow-camera-explained": "关闭后阴影方向固定",
226
329
  "figure.text.grade-decided-by": "what decided the grade",
227
- "figure.text.grade-explained": "the grade comes from how much of a declared limit is used, taking the one closest to its cap. averaging would hide a full limit behind the loose ones.",
330
+ "figure.text.grade-explained": "等级由最接近上限的那一项的使用率决定。",
228
331
  "figure.text.grade-scale-lead": "grade scale (limit used)",
229
332
  "figure.text.headroom-percent": "{percent}% headroom",
230
- "figure.text.hemisphere-light-explained": "even light from sky and ground. it lifts the shaded faces.",
333
+ "figure.text.hemisphere-light-explained": "来自天空和地面的均匀光线。可提亮阴影面。",
231
334
  "figure.text.hide-all-parts": "hide all",
232
335
  "figure.text.hide-this-part": "hide this part while you work. not saved",
233
- "figure.text.how-many-fit": "how many one drawing holds before the overhead shows",
336
+ "figure.text.how-many-fit": "一个图面上不致变慢可放置的数量",
234
337
  "figure.text.instances-unit": "instances",
338
+ "figure.text.interpolation-explained": "关键帧之间如何衔接。",
339
+ "figure.text.joint-channel-value-deg": "关键帧的值是关节角度(度)。",
340
+ "figure.text.joint-channel-value-mm": "关键帧的值是关节移动距离(mm)。",
341
+ "figure.text.joint-driven-by": "参数“{name}”驱动此关节。请在预览中确认。",
342
+ "figure.text.joint-explained": "所附着的部件移动时,此部件也随之移动。设置关节后,可确定此部件相对于所附着部件旋转的轴或滑动的方向,以及活动范围。关节的值由同时创建的参数提供。",
343
+ "figure.text.joint-limits-must-include-zero": "活动范围必须包含 0。当前绘制的姿势即为 0。",
344
+ "figure.text.joint-not-driven": "没有驱动此关节的参数。请在“动画”选项卡中添加参数。",
345
+ "figure.text.joint-value-beyond-limits": "超出关节的活动范围。",
235
346
  "figure.text.keep-round-cost": "1 draw call",
236
347
  "figure.text.keep-round-merged": "merged into a group",
237
348
  "figure.text.keep-round-off": "off",
238
349
  "figure.text.keep-round-on": "keep round",
350
+ "figure.text.keys-must-rise": "时间必须大于前一个关键帧。",
239
351
  "figure.text.limit-comes-from-level": "the detail level sets this limit.",
240
- "figure.text.maturity-blocked-no-binding": "the format has no way to connect a state value to a part yet, and the renderer does not read it.",
352
+ "figure.text.maturity-blocked-no-binding": "状态表现尚未测量。",
241
353
  "figure.text.maturity-blocked-no-parts": "nothing to measure — there are no parts.",
242
- "figure.text.maturity-consistency-because": "checks textures, segment presets and material count — what it takes to sit well with other assets and stay crisp when zoomed.",
354
+ "figure.text.maturity-consistency-because": "检查纹理使用、推荐分段数以及材质种类数量。",
243
355
  "figure.text.maturity-consistency-clean": "no issues",
244
356
  "figure.text.maturity-consistency-faults": "has issues",
245
- "figure.text.maturity-detail-because": "how much of the declared level you actually used.",
246
- "figure.text.maturity-readable-because": "how many distinct colour regions are visible from directly above, and how evenly. Viewpoint entropy (Vazquez et al.) computed over colour regions rather than faces — counting faces would reward raising the segment count alone.",
247
- "figure.text.maturity-reuse-because": "shapes saved because several parts share one. a low number is not a fault.",
357
+ "figure.text.maturity-detail-because": "所声明等级允许的部件数量中实际使用的比例。",
358
+ "figure.text.maturity-readable-because": "俯视时颜色不同的区域有多少,以及分布是否均匀。",
359
+ "figure.text.maturity-reuse-because": "多个部件共享同一形状而节省的形状数量。",
248
360
  "figure.text.maturity-scale-because": "measured against a drawing holding 500 assets.",
249
361
  "figure.text.mirror-explained": "adds a mirrored copy on the other side — for parts that come in pairs, like legs or arms.",
250
362
  "figure.text.mirror-would-overlap": "already centred — a mirror would land in the same place and overlap.",
251
363
  "figure.text.mode-edit-explained": "place and edit parts. always at the base size.",
252
364
  "figure.text.mode-preview-explained": "how it looks placed on a drawing. base size next to the enlarged ones.",
253
365
  "figure.text.more-segment-options": "advanced segment counts",
366
+ "figure.text.motion-intent-help": "先选择要移动的部件,再选择用途。生成的动作可在下方的高级编辑中调整。",
254
367
  "figure.text.must-fix-to-release": "需要修改的项",
255
368
  "figure.text.n-of-limit": "{used} / {limit}",
256
369
  "figure.text.n-parts-at-most": "up to {limit} parts",
@@ -259,49 +372,86 @@
259
372
  "figure.text.no-findings": "nothing to report.",
260
373
  "figure.text.not-measurable-yet": "not measurable",
261
374
  "figure.text.not-measured-yet": "not measured",
262
- "figure.text.nothing-released-yet": "还没有发布过。发布后会把当前的图形保留为一个版本。",
263
- "figure.text.on-by-default-explained": "the starting state when placed on a drawing. an instance switching it wins.",
375
+ "figure.text.nothing-released-yet": "还没有已发布的版本。",
376
+ "figure.text.on-by-default-explained": "放置到图面时的初始状态。实例上设置的值优先。",
264
377
  "figure.text.other-segment-count": "enter a value",
265
- "figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
378
+ "figure.text.palette-purpose-explained": "选择此部件在画面上承担的颜色角色。",
379
+ "figure.text.parameter-curve-is-the-value-axis": "关键帧放在值的位置上 (0 = 最小,1 = 最大)。全程时间另行输入。",
380
+ "figure.text.parameter-duration-empty-is-instant": "从最小移动到最大所需的秒数。留空则值改变时立即生效。",
381
+ "figure.text.parameter-is-a-value-not-a-timeline": "显示实例所给值对应的姿态 (例: 吊钩下降 1200mm)。",
382
+ "figure.text.parameter-key-within-span": "请输入 0 (最小) 到 1 (最大) 之间的关键帧值。",
383
+ "figure.text.parameter-name-is-how-a-value-arrives": "实例通过此名称提供值。",
384
+ "figure.text.parameter-needs-a-name": "请输入名称。",
266
385
  "figure.text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
267
386
  "figure.text.part-limit-reached-short": "level {level} allows {limit} parts. Raise the level or remove a part.",
387
+ "figure.text.part-name-cannot-be-empty": "请为部件命名。",
388
+ "figure.text.path-rotation-unit": "欧拉角 (度),与部件旋转使用相同基准。",
389
+ "figure.text.path-scale-unit": "缩放比例。1 为原始大小,0 时部件不可见。",
390
+ "figure.text.path-translation-unit": "相对部件所在位置的位移。0 表示保持原位。",
268
391
  "figure.text.pick-a-shape-above-to-start": "pick a shape above to add the first part.",
269
392
  "figure.text.picked-changes-do-not-validate": "the selected changes do not make a valid figure",
270
- "figure.text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
271
- "figure.text.preview-needs-a-part": "add a part and the drawing view appears here.",
272
- "figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
393
+ "figure.text.pivot-defaults-to-the-part-centre": "未设置时部件绕自身中心旋转。坐标以部件为基准。",
394
+ "figure.text.placement-explained": "设置 3D 场景中的基准面 (地面: AGV/输送机,天花板: OHT/吊车,中心: 传感器/无人机)。",
395
+ "figure.text.preview-blocked-by-errors": "由于格式错误无法显示预览。请在成熟度标签页查看原因。",
396
+ "figure.text.preview-needs-a-part": "添加部件后会显示放置到图面上的效果。",
397
+ "figure.text.proposal-feedback-note": "供下一次提案参考的备注 (仅限本次会话)",
273
398
  "figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
274
399
  "figure.text.put-on-floor": "drop it to the floor (Z=0).",
275
- "figure.text.release-needs-a-save-first": "有未保存的修改。发布的是已保存的内容,请先保存。",
400
+ "figure.text.range-needs-room": "最大值必须大于最小值。",
401
+ "figure.text.recipe-conveyor": "动画 · 实例提供播放速度",
402
+ "figure.text.recipe-gate": "参数 · 实例以 0~100 % 提供开启程度",
403
+ "figure.text.recipe-lift": "参数 · 实例以 0~100 mm 提供高度",
404
+ "figure.text.recipe-pusher": "参数 · 实例以 0~100 mm 提供行程",
405
+ "figure.text.release-check-fix": "发布检查修正方案 · {part} {axis} 固定面: {from} → {to}",
406
+ "figure.text.release-needs-a-save-first": "有未保存的更改。请先保存。",
276
407
  "figure.text.releasing": "正在发布…",
277
- "figure.text.renaming-a-part-breaks-bindings": "the name is a stored identifier — changing it breaks bindings on instances already placed.",
278
- "figure.text.repeat-edits-the-unit": "you author one unit even though several appear. the gizmo moves the whole run, while size and rotation apply to that one unit — the pitch is declared separately so the layout stays. a single copy cannot be edited on its own.",
279
- "figure.text.repeat-pitch-explained": "centre to centre distance. it does not depend on the part size, so widening or turning the part leaves the layout alone.",
408
+ "figure.text.renaming-a-part-breaks-bindings": "重命名会断开已放置实例上的绑定。",
409
+ "figure.text.repeat-count-capped": "最多 {limit} 个。每个副本增加 1 draw call。",
410
+ "figure.text.repeat-count-now": "按创作尺寸为 {count} ",
411
+ "figure.text.repeat-edits-the-unit": "重复的副本作为一个整体编辑。要单独修改某个副本,请将其作为独立部件添加。",
412
+ "figure.text.repeat-grows-with-instance": "实例沿此轴放大时数量增加。间距保持不变。",
413
+ "figure.text.repeat-keeps-count": "实例放大时数量不变,每个副本变大。",
414
+ "figure.text.repeat-pitch-explained": "从中心到下一个中心的距离。修改部件尺寸时保持不变。",
280
415
  "figure.text.report-appears-when-you-add-a-part": "weight and score appear once the figure has a part.",
281
416
  "figure.text.reuse-score-explained": "how much headroom is left in the declared limits. the one closest to its cap sets the score.",
282
- "figure.text.revert-to-version-confirm": "回退到第{version}版?当前正在编辑的内容会被该版本替换。",
283
- "figure.text.save-the-figure-before-releasing": "尚未保存。保存后即可发布。",
417
+ "figure.text.revert-to-version-confirm": "恢复到版本 {version}。正在编辑的内容将被该版本替换。是否继续?",
418
+ "figure.text.role-none-means-drawn": "都不选择时为仅绘制的部件",
419
+ "figure.text.rung-flow-note": "承载物品,并通过端口接收和送出。输送机 · 滑槽 · 分拣机",
420
+ "figure.text.rung-hold-note": "有放置物品的槽位。货架 · 托盘 · 工作台",
421
+ "figure.text.rung-none-note": "不接收物品。大多数 Figure 属于此类。",
422
+ "figure.text.save-new-figure-desc": "为此 Figure 设置唯一的类型代码和显示名称。",
423
+ "figure.text.save-the-figure-before-releasing": "此 Figure 尚未保存。保存后即可发布。",
284
424
  "figure.text.saving-figure": "saving",
425
+ "figure.text.scene-reference-explained": "预览中放置 Figure 的图面基准。Figure 自身的放置基准不变。",
285
426
  "figure.text.search-figure": "search by name, type, description, category or tag",
286
427
  "figure.text.select-a-part-to-edit": "select a part to edit it here.",
428
+ "figure.text.server-returned-no-data": "服务器响应中没有数据。请重试。",
287
429
  "figure.text.show-all-parts": "show all",
288
430
  "figure.text.show-this-part": "show this part again",
289
- "figure.text.sizing-costs-one-draw-call": "a part that does not scale proportionally cannot be merged with the others, so it costs one more draw call. that shows up in the group count under maturity.",
431
+ "figure.text.sizing-costs-one-draw-call": "非等比缩放的部件会增加 1 draw call",
290
432
  "figure.text.sizing-fixed-explained": "the size stays, only the position follows — like a motor or a gauge.",
291
- "figure.text.sizing-repeat-explained": "the count grows instead of the size. the shape is shared so vertices do not grow, but each copy costs one draw call.",
433
+ "figure.text.sizing-repeat-explained": "数量增加而不是尺寸变大。每个副本增加 1 draw call",
292
434
  "figure.text.sizing-scale-explained": "this part grows with the instance.",
293
435
  "figure.text.sizing-stretch-explained": "only one axis stretches — like a frame, a belt or a rail.",
436
+ "figure.text.slots-need-capability": "要指定槽位,请先选择「承载」或以上。",
294
437
  "figure.text.snap-explained": "rounds position and size to the grid — the same spacing you see on the canvas.",
438
+ "figure.text.source-changed-ask-again": "源数据已更改。请放弃候选,并在 AI 助手中重新请求。",
439
+ "figure.text.tags-explained": "用于搜索的标签。可用逗号分隔输入多个。",
440
+ "figure.text.tags-placeholder": "例: 出库, 自动, 2 层",
295
441
  "figure.text.thumbnail-not-made-yet": "no thumbnail yet",
296
- "figure.text.tools-explained": "Use alignment after setting position, size, and rotation. From left: centre X, centre Z, put on floor, mirror X, mirror Z, and snap to grid. Hover an icon to confirm its action.",
442
+ "figure.text.tools-explained": "从左起依次为: X 居中、Z 居中、贴地、X 镜像、Z 镜像、对齐网格。",
297
443
  "figure.text.triangle-count": "{count} triangles",
444
+ "figure.text.two-keys-at-least": "请至少添加两个关键帧。",
298
445
  "figure.text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
299
- "figure.text.type-name-cannot-change": "the type name is a stored identifier and cannot be changed after creation.",
446
+ "figure.text.type-name-cannot-change": "类型名称创建后无法更改。",
447
+ "figure.text.type-name-will-not-release": "此名称无法发布。请使用大写字母、数字和单个下划线,长度 3~32 个字符 (例: AGV_LIFTER)。",
448
+ "figure.text.unit-is-a-word-not-a-rule": "仅用于显示的单位 (例: mm · deg · %)。不用于数值计算。",
300
449
  "figure.text.unsaved-changes": "unsaved",
301
- "figure.text.version-number": "{version}",
302
- "figure.text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
450
+ "figure.text.version-number": "版本 {version}",
451
+ "figure.text.view-settings-are-not-saved": "这些设置不会保存。",
303
452
  "figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a drawing, sharing shape and material across every instance.",
304
- "figure.text.what-changed-in-this-release": "这一版有什么变化",
453
+ "figure.text.what-changed-in-this-release": "此版本的变更",
305
454
  "figure.title.figures": "figures",
306
- "figure.title.new-figure": "new figure"
455
+ "figure.title.new-figure": "new figure",
456
+ "figure.title.save-new-figure": "保存 Figure 草稿"
307
457
  }