@things-factory/figure-ui 10.1.48 → 10.1.50

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 (104) hide show
  1. package/client/graphql/v3-store.ts +2 -1
  2. package/client/modeller/figure-history-panel.ts +9 -1
  3. package/client/modeller/figure-v3-first-save.ts +98 -0
  4. package/client/modeller/figure-v3-links.ts +89 -26
  5. package/client/modeller/figure-v3-parts.ts +86 -10
  6. package/client/modeller/figure-v3-properties.ts +2 -1
  7. package/client/modeller/side-panel-styles.ts +8 -0
  8. package/client/modeller/v3-canvas.ts +86 -12
  9. package/client/modeller/v3-editor.ts +244 -37
  10. package/client/modeller/v3-fields.ts +15 -1
  11. package/client/modeller/v3-first-save.ts +34 -0
  12. package/client/modeller/v3-gizmo.ts +52 -3
  13. package/client/modeller/v3-joint-drag.ts +116 -0
  14. package/client/modeller/v3-joint-fan.ts +24 -11
  15. package/client/modeller/v3-keys.ts +12 -1
  16. package/client/modeller/v3-links.ts +72 -5
  17. package/client/modeller/v3-live.ts +11 -0
  18. package/client/modeller/v3-product-session.ts +4 -2
  19. package/client/modeller/v3-refusals.ts +21 -0
  20. package/client/modeller/v3-stage-model.ts +24 -0
  21. package/client/pages/figure-v3-modeller-page.ts +46 -7
  22. package/dist-client/graphql/v3-store.js +2 -1
  23. package/dist-client/graphql/v3-store.js.map +1 -1
  24. package/dist-client/modeller/figure-history-panel.js +9 -1
  25. package/dist-client/modeller/figure-history-panel.js.map +1 -1
  26. package/dist-client/modeller/figure-v3-first-save.d.ts +20 -0
  27. package/dist-client/modeller/figure-v3-first-save.js +118 -0
  28. package/dist-client/modeller/figure-v3-first-save.js.map +1 -0
  29. package/dist-client/modeller/figure-v3-links.d.ts +5 -0
  30. package/dist-client/modeller/figure-v3-links.js +81 -23
  31. package/dist-client/modeller/figure-v3-links.js.map +1 -1
  32. package/dist-client/modeller/figure-v3-parts.d.ts +13 -0
  33. package/dist-client/modeller/figure-v3-parts.js +81 -10
  34. package/dist-client/modeller/figure-v3-parts.js.map +1 -1
  35. package/dist-client/modeller/figure-v3-properties.js +2 -1
  36. package/dist-client/modeller/figure-v3-properties.js.map +1 -1
  37. package/dist-client/modeller/side-panel-styles.js +8 -0
  38. package/dist-client/modeller/side-panel-styles.js.map +1 -1
  39. package/dist-client/modeller/v3-canvas.d.ts +13 -0
  40. package/dist-client/modeller/v3-canvas.js +88 -12
  41. package/dist-client/modeller/v3-canvas.js.map +1 -1
  42. package/dist-client/modeller/v3-clips.d.ts +1 -1
  43. package/dist-client/modeller/v3-editor.d.ts +32 -1
  44. package/dist-client/modeller/v3-editor.js +245 -35
  45. package/dist-client/modeller/v3-editor.js.map +1 -1
  46. package/dist-client/modeller/v3-fields.d.ts +6 -0
  47. package/dist-client/modeller/v3-fields.js +14 -2
  48. package/dist-client/modeller/v3-fields.js.map +1 -1
  49. package/dist-client/modeller/v3-first-save.d.ts +17 -0
  50. package/dist-client/modeller/v3-first-save.js +27 -0
  51. package/dist-client/modeller/v3-first-save.js.map +1 -0
  52. package/dist-client/modeller/v3-gizmo.d.ts +18 -0
  53. package/dist-client/modeller/v3-gizmo.js +45 -2
  54. package/dist-client/modeller/v3-gizmo.js.map +1 -1
  55. package/dist-client/modeller/v3-joint-drag.d.ts +19 -0
  56. package/dist-client/modeller/v3-joint-drag.js +97 -0
  57. package/dist-client/modeller/v3-joint-drag.js.map +1 -0
  58. package/dist-client/modeller/v3-joint-fan.js +24 -11
  59. package/dist-client/modeller/v3-joint-fan.js.map +1 -1
  60. package/dist-client/modeller/v3-keys.d.ts +9 -1
  61. package/dist-client/modeller/v3-keys.js +3 -0
  62. package/dist-client/modeller/v3-keys.js.map +1 -1
  63. package/dist-client/modeller/v3-links.d.ts +45 -2
  64. package/dist-client/modeller/v3-links.js +52 -3
  65. package/dist-client/modeller/v3-links.js.map +1 -1
  66. package/dist-client/modeller/v3-live.d.ts +6 -0
  67. package/dist-client/modeller/v3-live.js +10 -0
  68. package/dist-client/modeller/v3-live.js.map +1 -1
  69. package/dist-client/modeller/v3-product-session.d.ts +4 -1
  70. package/dist-client/modeller/v3-product-session.js +2 -2
  71. package/dist-client/modeller/v3-product-session.js.map +1 -1
  72. package/dist-client/modeller/v3-refusals.d.ts +4 -0
  73. package/dist-client/modeller/v3-refusals.js +21 -0
  74. package/dist-client/modeller/v3-refusals.js.map +1 -0
  75. package/dist-client/modeller/v3-stage-model.d.ts +8 -0
  76. package/dist-client/modeller/v3-stage-model.js +26 -0
  77. package/dist-client/modeller/v3-stage-model.js.map +1 -1
  78. package/dist-client/pages/figure-v3-modeller-page.d.ts +4 -0
  79. package/dist-client/pages/figure-v3-modeller-page.js +45 -7
  80. package/dist-client/pages/figure-v3-modeller-page.js.map +1 -1
  81. package/dist-client/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +7 -5
  83. package/test/browser/build.mjs +62 -0
  84. package/test/browser/modeller-page.js +198 -0
  85. package/test/browser/modeller.check.mjs +334 -0
  86. package/test/browser/serve.mjs +43 -0
  87. package/test/joints.ts +33 -0
  88. package/test/v3-clips.test.ts +3 -2
  89. package/test/v3-controls.test.ts +3 -2
  90. package/test/v3-fields.test.ts +38 -1
  91. package/test/v3-first-save.test.ts +75 -0
  92. package/test/v3-gizmo.test.ts +40 -5
  93. package/test/v3-joint-drag.test.ts +93 -0
  94. package/test/v3-joint-fan.test.ts +16 -6
  95. package/test/v3-keys.test.ts +15 -2
  96. package/test/v3-links.test.ts +62 -14
  97. package/test/v3-live.test.ts +23 -4
  98. package/test/v3-maturity.test.ts +3 -7
  99. package/test/v3-refusals.test.ts +28 -0
  100. package/translations/en.json +43 -5
  101. package/translations/ja.json +42 -4
  102. package/translations/ko.json +42 -4
  103. package/translations/ms.json +42 -4
  104. package/translations/zh.json +42 -4
@@ -25,6 +25,7 @@ import {
25
25
  v3ReportOf
26
26
  } from '../client/modeller/v3-maturity.ts'
27
27
  import { capacityFrom } from '../client/modeller/scene-budget.ts'
28
+ import { moving } from './joints.ts'
28
29
 
29
30
  const read = (path: string) => readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8')
30
31
  const verdict = read('../client/modeller/figure-v3-verdict.ts')
@@ -66,7 +67,7 @@ test('등급은 figure-model 의 v3ScoreOf 그대로다 — 목록과 이 탭이
66
67
  asset = addV3Box(asset, cube('a', 0))
67
68
  const one = v3ReportOf(asset)!
68
69
  assert.deepEqual(one.score, v3ScoreOf(asset))
69
- assert.deepEqual(V3_BUDGET_KEYS, one.score.budgets.map(b => b.key), '화면이 말을 찾는 키와 셈의 키가 같다')
70
+ assert.deepEqual(V3_BUDGET_KEYS.filter(k => k !== 'parts'), one.score.budgets.map(b => b.key), '화면이 말을 찾는 키와 셈의 키가 같다 — 등급을 안 정하면 부품 수 한도는 없다')
70
71
  })
71
72
 
72
73
  test('draw call 한도 3 은 없다 — 한 화면 166 대 목표에 견준다(수석 아키텍트 판정 09-24)', () => {
@@ -109,12 +110,7 @@ test('상태를 따라 움직이는 부품을 센다 — V2 의 「따로 움직
109
110
  asset = addV3Box(asset, cube('arm', 200))
110
111
  assert.equal(v3ReportOf(asset)!.score.budgets.find(b => b.key === 'independent')!.used, 0, '전제: 움직임이 없으면 0')
111
112
 
112
- asset = applyV3Authoring(asset, {
113
- kind: 'add-motion',
114
- part: 'arm',
115
- motion: { kind: 'turn', axis: 'y' },
116
- state: { id: 'arm.turn', unit: 'deg', min: 0, max: 90 }
117
- })
113
+ asset = moving(asset, 'arm', { kind: 'turn', axis: 'y', id: 'arm.turn', min: 0, max: 90 })
118
114
  assert.equal(v3ReportOf(asset)!.score.budgets.find(b => b.key === 'independent')!.used, 1, '도는 팔 하나')
119
115
  })
120
116
 
@@ -0,0 +1,28 @@
1
+ /*
2
+ * 크기 범위 거절을 사람의 말로 (사용자 2026-09-24: 「what is this warning message means?」 — 커널의 영어 원문이 떴다).
3
+ */
4
+ import { test } from 'node:test'
5
+ import assert from 'node:assert/strict'
6
+ import { readFileSync } from 'node:fs'
7
+ import { fileURLToPath } from 'node:url'
8
+
9
+ import { sizeRangeRefusalOf } from '../client/modeller/v3-refusals.ts'
10
+
11
+ const ko = JSON.parse(readFileSync(fileURLToPath(new URL('../translations/ko.json', import.meta.url)), 'utf8'))
12
+ const say = (key: string, params: Record<string, string>) => ko[key].replace(/\{(\w+)\}/g, (_: string, k: string) => params[k] ?? '')
13
+ const refusal = (message: string) => Object.assign(new Error(message), { code: 'INSTANCE_SIZE_RANGE' })
14
+
15
+ test('화성 트레이의 거절 — 축 · 숫자 · 부품 · 고치는 곳', () => {
16
+ const said = sizeRangeRefusalOf(refusal('INSTANCE_SIZE_RANGE: size.x: below 8.82353 mm a length goes to zero (cell); declare the smallest size at 8.82353 mm or more'), say)!
17
+ assert.ok(said.includes('X 축을') && said.includes('8.8 mm') && said.includes('cell 부품') && said.includes('다시 재기'), said)
18
+ assert.ok(!/declare|below/.test(said))
19
+ })
20
+
21
+ test('위쪽 끝도, 부품 이름이 없어도', () => {
22
+ const said = sizeRangeRefusalOf(refusal('INSTANCE_SIZE_RANGE: size.y: above 15000 mm the figure cannot be drawn; declare the largest size at 15000 mm or less'), say)!
23
+ assert.ok(said.includes('Y 축을') && said.includes('15,000 mm'), said)
24
+ })
25
+
26
+ test('다른 거절은 건드리지 않는다', () => {
27
+ assert.equal(sizeRangeRefusalOf(Object.assign(new Error('x'), { code: 'EDIT_TARGET' }), say), null)
28
+ })
@@ -59,7 +59,26 @@
59
59
  "figure.text.links-need-a-box": "size following works on box-shaped parts, fastening on boxes and cylinders.",
60
60
  "figure.text.scale-position-explained": "keeps this place as a share of the figure size — at twice the size it is twice as far.",
61
61
  "figure.text.repeat-member": "copy {index} of {count} made by repeating {name}.",
62
- "figure.text.instance-range-can-widen": "measured again after the parts changed: {ranges} mm.",
62
+ "figure.label.detail-none": "none",
63
+ "figure.label.repeat": "repeat",
64
+ "figure.text.repeat-fits-length": "as many copies as fit the figure’s length at this pitch.",
65
+ "figure.text.repeat-fixed-count": "a repeat of a fixed count; its pitch cannot be set yet.",
66
+ "figure.text.repeat-what-pitch-gives": "{count} at a length of {length} mm · placed up to {longest} mm long ({limit} in a row).",
67
+ "figure.text.repeat-pitch-too-small": "the pitch must be at least {min} mm: at the authored length of {length} mm it would make more than {limit}.",
68
+ "figure.text.gizmo-joint-places": "a joint places {part}. move it with its control in the motion tab.",
69
+ "figure.label.motion-continuous": "turn without end",
70
+ "figure.text.fasten-before-moving": "fasten it to another part or the floor first; then it can move.",
71
+ "figure.text.joint-range-holds-zero": "the range must hold 0, the rest pose.",
72
+ "figure.text.gizmo-joint-mimic": "the {joint} joint follows {leader}. move {leader}.",
73
+ "figure.text.gizmo-joint-fixed-turn": "the {joint} joint does not turn. give it a turn in the motion tab.",
74
+ "figure.text.gizmo-joint-turned-slide": "the {joint} joint only slides. use the move handle.",
75
+ "figure.text.gizmo-joint-origin-follows": "the {joint} joint's place follows another part. change it under fastening in the motion tab.",
76
+ "figure.text.gizmo-joint-off-axis": "the {joint} joint turns only about {axis}. use the {axis} rotate handle.",
77
+ "figure.text.gizmo-size-follows": "{part}'s {axis} size follows another measure. change it under sizes in the motion tab.",
78
+ "figure.text.gizmo-fastening-places": "{part} is fastened to a face of another part, which places it. detach it first to move it.",
79
+ "figure.text.instance-range-can-widen": "measured again with the parts as they are: {ranges} mm.",
80
+ "figure.text.size-range-too-small": "below {mm} mm on {axis} the {part} part has no length, yet the figure is declared to be placed smaller, so this change cannot be made. use \"measure again\" under the sizes it can be placed at.",
81
+ "figure.text.size-range-too-large": "above {mm} mm on {axis} the {part} part cannot be drawn, yet the figure is declared to be placed larger, so this change cannot be made. use \"measure again\" under the sizes it can be placed at.",
63
82
  "figure.text.mounting-face-needs-space": "declare the space first to choose one.",
64
83
  "figure.text.part-is-referenced": "'{part}' cannot be deleted: another part is fastened to it or follows its size. Undo that link first.",
65
84
  "figure.text.part-name-invalid": "'{name}' cannot be a part name. Start with a letter and use letters, digits, - and _.",
@@ -263,6 +282,7 @@
263
282
  "figure.label.released-versions": "released versions",
264
283
  "figure.label.repeat-axis": "axis it repeats along",
265
284
  "figure.label.repeat-count": "count",
285
+ "figure.label.repeat-gap": "pitch",
266
286
  "figure.label.repeat-pitch": "pitch",
267
287
  "figure.label.reuse-trend": "reuse trend",
268
288
  "figure.label.instance-count": "instance count",
@@ -320,7 +340,7 @@
320
340
  "figure.text.bound-by-triangles": "triangles reach the limit first ({per} per instance, {budget} per drawing).",
321
341
  "figure.text.budget-measured-on": "Measured on {gpu}, {on}. A figure standing still costs nothing — only what is on screen and redrawn counts.",
322
342
  "figure.text.budget-not-measured-yet": "this target has not been measured yet.",
323
- "figure.text.budgets-not-in-v3": "off-palette surfaces and the part-count limit are not in the V3 format, so they are not shown.",
343
+ "figure.text.budgets-not-in-v3": "off-palette surfaces are not in the V3 format, so they are not shown. the part-count limit shows once a detail level is set.",
324
344
  "figure.text.trend-chart-title": "drawing cost by instance count",
325
345
  "figure.text.trend-chart-lead": "flat lines stay the same as instances grow. instances of the same size share them.",
326
346
  "figure.text.trend-at-count": "at {n}",
@@ -364,6 +384,9 @@
364
384
  "figure.text.designate-in-properties": "nothing designated yet. select a part and set its role in the properties tab.",
365
385
  "figure.text.detail-level-explained": "S for signs and posts, M for most equipment, L for the large equipment a view centres on. the level sets the part limit.",
366
386
  "figure.text.discard-changes-and-start-new": "there are unsaved changes. discard them and start a new figure?",
387
+ "figure.text.leave-without-saving": "there are unsaved changes. discard them and leave?",
388
+ "figure.button.leave-without-saving": "discard and leave",
389
+ "figure.button.keep-editing": "keep editing",
367
390
  "figure.text.does-not-block": "does not block",
368
391
  "figure.text.emissive-explained": "how bright the surface itself is. 0 is unlit, and it does not light its surroundings.",
369
392
  "figure.text.enter-a-type-name": "enter a type name.",
@@ -505,7 +528,7 @@
505
528
  "figure.text.tools-explained": "from left: centre X, centre Z, to floor, mirror X, mirror Z, snap to grid.",
506
529
  "figure.text.triangle-count": "{count} triangles",
507
530
  "figure.text.two-keys-at-least": "add at least two keys.",
508
- "figure.text.type-name-already-taken": "the type name {type} is already in use. pick another one — it cannot be changed later.",
531
+ "figure.text.type-name-already-taken": "the type name {type} is already in use. pick another one.",
509
532
  "figure.text.type-name-cannot-change": "the type name cannot be changed after creation.",
510
533
  "figure.text.type-name-will-not-release": "this name cannot be released. use capitals, digits and single underscores, 3 to 32 characters (e.g. AGV_LIFTER).",
511
534
  "figure.text.unit-is-a-word-not-a-rule": "a display unit (e.g. mm, deg, %). it is not used in calculation.",
@@ -541,7 +564,7 @@
541
564
  "figure.label.facing-flush": "same plane",
542
565
  "figure.label.gap": "gap (mm)",
543
566
  "figure.label.align": "within the face",
544
- "figure.label.align-centre": "centre",
567
+ "figure.label.align-centre": "centred",
545
568
  "figure.label.align-min": "low edge",
546
569
  "figure.label.align-max": "high edge",
547
570
  "figure.button.fasten": "Fasten",
@@ -663,5 +686,20 @@
663
686
  "figure.label.group-figure": "Figure",
664
687
  "figure.label.group-standing": "Where it stands",
665
688
  "figure.label.group-catalog": "Catalogue",
666
- "figure.button.control-settings": "Name, range and time"
689
+ "figure.button.control-settings": "Name, range and time",
690
+ "figure.label.align-x": "left-right",
691
+ "figure.label.align-y": "up-down",
692
+ "figure.label.align-z": "front-back",
693
+ "figure.label.align-x-min": "level with left edge",
694
+ "figure.label.align-x-max": "level with right edge",
695
+ "figure.label.align-y-min": "level with bottom edge",
696
+ "figure.label.align-y-max": "level with top edge",
697
+ "figure.label.align-z-min": "level with back edge",
698
+ "figure.label.align-z-max": "level with front edge",
699
+ "figure.label.align-mm": "offset from centre (mm)",
700
+ "figure.label.motion-follow": "moves with",
701
+ "figure.label.motion-own-control": "its own control",
702
+ "figure.label.motion-multiplier": "multiplier",
703
+ "figure.label.motion-offset": "offset",
704
+ "figure.label.motion-follows": "moves with {joint} × {multiplier} + {offset}"
667
705
  }
@@ -57,7 +57,26 @@
57
57
  "figure.text.links-need-a-box": "サイズ追従は箱形、取り付けは箱形と円柱の部品で使えます。",
58
58
  "figure.text.scale-position-explained": "今の位置を図形サイズの割合として保ちます。2 倍のサイズなら 2 倍の距離に置かれます。",
59
59
  "figure.text.repeat-member": "{name} を {count} 個繰り返したうちの {index} 番目です。",
60
- "figure.text.instance-range-can-widen": "部品が変わったので測り直すと {ranges} mm です。",
60
+ "figure.label.detail-none": "なし",
61
+ "figure.label.repeat": "繰り返し",
62
+ "figure.text.repeat-fits-length": "図形の長さに合わせ、この間隔で入るだけ置かれます。",
63
+ "figure.text.repeat-fixed-count": "個数が固定された繰り返しのため、間隔はまだ変更できません。",
64
+ "figure.text.repeat-what-pitch-gives": "長さ {length} mm で {count} 個 · 最大 {longest} mm まで置けます (1 列 {limit} 個)。",
65
+ "figure.text.repeat-pitch-too-small": "pitch は {min} mm 以上にしてください。作成した長さ {length} mm で {limit} 個を超えるためです。",
66
+ "figure.text.gizmo-joint-places": "{part} は関節に付いていて、関節が位置を決めます。動きタブの操作値で動かしてください。",
67
+ "figure.label.motion-continuous": "無限回転",
68
+ "figure.text.fasten-before-moving": "先に他の部品か床に取り付けると、動きを付けられます。",
69
+ "figure.text.joint-range-holds-zero": "範囲に 0(基本姿勢)を含めてください。",
70
+ "figure.text.gizmo-joint-mimic": "{joint} 関節は {leader} に従います。{leader} を動かしてください。",
71
+ "figure.text.gizmo-joint-fixed-turn": "{joint} 関節は回りません。動きタブで回転を付けてください。",
72
+ "figure.text.gizmo-joint-turned-slide": "{joint} 関節はスライドのみです。移動ハンドルを使ってください。",
73
+ "figure.text.gizmo-joint-origin-follows": "{joint} 関節の位置は他の部品に従います。動きタブの取り付けで変えてください。",
74
+ "figure.text.gizmo-joint-off-axis": "{joint} 関節は {axis} 軸でのみ回ります。{axis} の回転ハンドルを使ってください。",
75
+ "figure.text.gizmo-size-follows": "{part} の {axis} 寸法は他の寸法に従います。動きタブの寸法で変えてください。",
76
+ "figure.text.gizmo-fastening-places": "{part} は他の部品の面に付いていて、その面が位置を決めます。動かすには先に外してください。",
77
+ "figure.text.instance-range-can-widen": "今の部品で測り直すと {ranges} mm です。",
78
+ "figure.text.size-range-too-small": "この図形は {axis} を {mm} mm より小さくすると {part} 部品の長さが 0 になりますが、それより小さく置けると宣言されているため、この変更はできません。「置けるサイズ」で測り直すと範囲が合います。",
79
+ "figure.text.size-range-too-large": "この図形は {axis} を {mm} mm より大きくすると {part} 部品を描けませんが、それより大きく置けると宣言されているため、この変更はできません。「置けるサイズ」で測り直すと範囲が合います。",
61
80
  "figure.text.mounting-face-needs-space": "先に空間を宣言すると選べます。",
62
81
  "figure.text.part-is-referenced": "'{part}' には他の部品が取り付けられているか、そのサイズに従っているため削除できません。先にその連結を外してください。",
63
82
  "figure.text.part-name-invalid": "'{name}' は部品名に使えません。英字で始め、英字・数字・-・_ のみ使えます。",
@@ -261,6 +280,7 @@
261
280
  "figure.label.released-versions": "発行済みバージョン",
262
281
  "figure.label.repeat-axis": "axis it repeats along",
263
282
  "figure.label.repeat-count": "個数",
283
+ "figure.label.repeat-gap": "pitch",
264
284
  "figure.label.repeat-pitch": "pitch",
265
285
  "figure.label.reuse-trend": "reuse trend",
266
286
  "figure.label.instance-count": "インスタンス数",
@@ -318,7 +338,7 @@
318
338
  "figure.text.bound-by-triangles": "三角形が先に上限に達します (1 個あたり {per}、図面あたり {budget})。",
319
339
  "figure.text.budget-measured-on": "{gpu} で {on} に測定した値です。静止している図形は負荷になりません — 画面に見えて再描画されるものだけを数えます。",
320
340
  "figure.text.budget-not-measured-yet": "this target has not been measured yet.",
321
- "figure.text.budgets-not-in-v3": "パレット外の表面と部品数の上限は V3 形式にない項目のため表示しません。",
341
+ "figure.text.budgets-not-in-v3": "パレット外の表面は V3 形式にない項目のため表示しません。部品数の上限は詳細度を決めると表示されます。",
322
342
  "figure.text.trend-chart-title": "インスタンス数による描画コスト",
323
343
  "figure.text.trend-chart-lead": "平らな線はインスタンスが増えても変わらない値です。同じサイズのインスタンスが共有します。",
324
344
  "figure.text.trend-at-count": "{n}個のとき",
@@ -362,6 +382,9 @@
362
382
  "figure.text.designate-in-properties": "まだ指定された部品がありません。部品を選び、プロパティタブで「能力での役割」を指定してください。",
363
383
  "figure.text.detail-level-explained": "S は標識・柱、M はほとんどの設備、L は画面の中心となる大きな設備に使います。等級で部品数の上限が決まります。",
364
384
  "figure.text.discard-changes-and-start-new": "保存していない変更があります。破棄して新しく始めますか?",
385
+ "figure.text.leave-without-saving": "保存していない変更があります。破棄して移動しますか?",
386
+ "figure.button.leave-without-saving": "破棄して移動",
387
+ "figure.button.keep-editing": "編集を続ける",
365
388
  "figure.text.does-not-block": "止めないもの",
366
389
  "figure.text.emissive-explained": "面そのものの明るさです。0 なら光らず、周囲は照らしません。",
367
390
  "figure.text.enter-a-type-name": "タイプ名を入力してください。",
@@ -537,7 +560,7 @@
537
560
  "figure.label.facing-flush": "same plane",
538
561
  "figure.label.gap": "gap (mm)",
539
562
  "figure.label.align": "within the face",
540
- "figure.label.align-centre": "centre",
563
+ "figure.label.align-centre": "中央",
541
564
  "figure.label.align-min": "low edge",
542
565
  "figure.label.align-max": "high edge",
543
566
  "figure.button.fasten": "Fasten",
@@ -663,5 +686,20 @@
663
686
  "figure.label.group-figure": "図形",
664
687
  "figure.label.group-standing": "置き方",
665
688
  "figure.label.group-catalog": "一覧情報",
666
- "figure.button.control-settings": "名前・範囲・時間"
689
+ "figure.button.control-settings": "名前・範囲・時間",
690
+ "figure.label.align-x": "左右の位置",
691
+ "figure.label.align-y": "上下の位置",
692
+ "figure.label.align-z": "前後の位置",
693
+ "figure.label.align-x-min": "左端に揃える",
694
+ "figure.label.align-x-max": "右端に揃える",
695
+ "figure.label.align-y-min": "下端に揃える",
696
+ "figure.label.align-y-max": "上端に揃える",
697
+ "figure.label.align-z-min": "後端に揃える",
698
+ "figure.label.align-z-max": "前端に揃える",
699
+ "figure.label.align-mm": "中央からの距離 (mm)",
700
+ "figure.label.motion-follow": "連動",
701
+ "figure.label.motion-own-control": "自分の操作値",
702
+ "figure.label.motion-multiplier": "倍率",
703
+ "figure.label.motion-offset": "オフセット",
704
+ "figure.label.motion-follows": "{joint} に連動 × {multiplier} + {offset}"
667
705
  }
@@ -59,7 +59,26 @@
59
59
  "figure.text.links-need-a-box": "크기 따르기는 상자 모양, 붙이기는 상자·원기둥 부품에서 씁니다.",
60
60
  "figure.text.scale-position-explained": "지금 자리를 도형 크기의 몫으로 둡니다. 두 배 크기면 두 배 거리에 놓입니다.",
61
61
  "figure.text.repeat-member": "{name} 되풀이 {count}개 중 {index}번째입니다.",
62
- "figure.text.instance-range-can-widen": "부품이 바뀌어 다시 재면 {ranges} mm 입니다.",
62
+ "figure.label.detail-none": "없음",
63
+ "figure.label.repeat": "되풀이",
64
+ "figure.text.repeat-fits-length": "도형 길이에 맞춰 이 간격으로 들어가는 만큼 놓입니다.",
65
+ "figure.text.repeat-fixed-count": "개수가 고정된 되풀이라 간격은 아직 바꿀 수 없습니다.",
66
+ "figure.text.repeat-what-pitch-gives": "길이 {length} mm 에서 {count}개 · 최대 길이 {longest} mm 까지 놓입니다 (한 줄 {limit}개).",
67
+ "figure.text.repeat-pitch-too-small": "pitch 는 {min} mm 이상이어야 합니다. 저작한 길이 {length} mm 에서 {limit}개를 넘기 때문입니다.",
68
+ "figure.text.gizmo-joint-places": "{part} 부품은 관절에 달려 있어 관절이 자리를 정합니다. 움직임 탭의 조작값으로 움직이세요.",
69
+ "figure.label.motion-continuous": "끝없이 회전",
70
+ "figure.text.fasten-before-moving": "먼저 다른 부품이나 바닥에 붙여야 움직임을 줄 수 있습니다.",
71
+ "figure.text.joint-range-holds-zero": "범위에 0이 들어가야 합니다. 0이 기본 자세입니다.",
72
+ "figure.text.gizmo-joint-mimic": "{joint} 관절은 {leader} 관절을 따라 움직입니다. {leader}을(를) 움직이세요.",
73
+ "figure.text.gizmo-joint-fixed-turn": "{joint} 관절은 돌지 않습니다. 돌리려면 움직임 탭에서 회전을 주세요.",
74
+ "figure.text.gizmo-joint-turned-slide": "{joint} 관절은 미끄러지기만 합니다. 이동 손잡이로 움직이세요.",
75
+ "figure.text.gizmo-joint-origin-follows": "{joint} 관절의 자리는 다른 부품을 따라 정해집니다. 움직임 탭의 붙이기에서 바꾸세요.",
76
+ "figure.text.gizmo-joint-off-axis": "{joint} 관절은 {axis}축으로만 돕니다. {axis} 회전 손잡이를 쓰세요.",
77
+ "figure.text.gizmo-size-follows": "{part}의 {axis} 치수는 다른 치수를 따라 정해집니다. 움직임 탭의 치수에서 바꾸세요.",
78
+ "figure.text.gizmo-fastening-places": "{part} 부품은 다른 부품의 면에 붙어 있어 그 면이 자리를 정합니다. 옮기려면 먼저 떼세요.",
79
+ "figure.text.instance-range-can-widen": "지금 부품으로 다시 재면 {ranges} mm 입니다.",
80
+ "figure.text.size-range-too-small": "이 도형은 {axis} 축을 {mm} mm 보다 작게 하면 {part} 부품의 길이가 0 이 되는데, 그보다 작게 놓일 수 있다고 선언되어 있어 이 변경을 할 수 없습니다. 「놓일 수 있는 크기」에서 다시 재기를 누르면 범위가 맞춰집니다.",
81
+ "figure.text.size-range-too-large": "이 도형은 {axis} 축을 {mm} mm 보다 크게 하면 {part} 부품을 그릴 수 없는데, 그보다 크게 놓일 수 있다고 선언되어 있어 이 변경을 할 수 없습니다. 「놓일 수 있는 크기」에서 다시 재기를 누르면 범위가 맞춰집니다.",
63
82
  "figure.text.mounting-face-needs-space": "공간을 먼저 선언해야 고를 수 있습니다.",
64
83
  "figure.text.part-is-referenced": "'{part}' 에 다른 부품이 붙어 있거나 그 크기를 따르고 있어 지울 수 없습니다. 그 연결을 먼저 푸세요.",
65
84
  "figure.text.part-name-invalid": "'{name}' 은 부품 이름으로 쓸 수 없습니다. 영문자로 시작하고 영문자·숫자·-·_ 만 씁니다.",
@@ -263,6 +282,7 @@
263
282
  "figure.label.released-versions": "발행된 버전",
264
283
  "figure.label.repeat-axis": "늘어나는 축",
265
284
  "figure.label.repeat-count": "개수",
285
+ "figure.label.repeat-gap": "pitch",
266
286
  "figure.label.repeat-pitch": "한 칸 (피치)",
267
287
  "figure.label.reuse-trend": "재사용 추이",
268
288
  "figure.label.instance-count": "인스턴스 수",
@@ -320,7 +340,7 @@
320
340
  "figure.text.bound-by-triangles": "삼각형이 먼저 한도에 도달합니다 (1개당 {per}, 도면당 {budget}).",
321
341
  "figure.text.budget-measured-on": "{gpu} 에서 {on} 에 잰 값입니다. 가만히 서 있는 도형은 값을 치르지 않습니다 — 화면에 보이고 다시 그려지는 것만 셉니다.",
322
342
  "figure.text.budget-not-measured-yet": "아직 실측 전 목표치입니다.",
323
- "figure.text.budgets-not-in-v3": "팔레트 외 표면과 부품 수 한도는 V3 형식에 없는 항목이라 표시하지 않습니다.",
343
+ "figure.text.budgets-not-in-v3": "팔레트 외 표면 한도는 V3 형식에 없는 항목이라 표시하지 않습니다. 부품 수 한도는 디테일 등급을 정하면 보입니다.",
324
344
  "figure.text.trend-chart-title": "인스턴스 수에 따른 그리는 비용",
325
345
  "figure.text.trend-chart-lead": "평평한 선은 인스턴스가 늘어도 그대로인 값입니다. 같은 크기의 인스턴스가 공유합니다.",
326
346
  "figure.text.trend-at-count": "{n}개일 때",
@@ -364,6 +384,9 @@
364
384
  "figure.text.designate-in-properties": "아직 지정된 부품이 없습니다. 부품을 선택하고 속성 탭에서 「능력에서의 역할」을 지정하세요.",
365
385
  "figure.text.detail-level-explained": "S 는 표지·기둥, M 은 대부분의 설비, L 은 화면의 중심이 되는 큰 설비에 씁니다. 등급에 따라 부품 수 한도가 정해집니다.",
366
386
  "figure.text.discard-changes-and-start-new": "저장하지 않은 변경이 있습니다. 버리고 새로 시작할까요?",
387
+ "figure.text.leave-without-saving": "저장하지 않은 변경이 있습니다. 버리고 나갈까요?",
388
+ "figure.button.leave-without-saving": "버리고 나가기",
389
+ "figure.button.keep-editing": "계속 편집",
367
390
  "figure.text.does-not-block": "막지는 않는 것",
368
391
  "figure.text.emissive-explained": "면 자체의 밝기입니다. 0 이면 빛나지 않고, 주변은 밝히지 않습니다.",
369
392
  "figure.text.enter-a-type-name": "타입 이름을 입력하세요.",
@@ -505,7 +528,7 @@
505
528
  "figure.text.tools-explained": "왼쪽부터 X 가운데, Z 가운데, 바닥에 붙이기, X 대칭, Z 대칭, 눈금 맞춤입니다.",
506
529
  "figure.text.triangle-count": "삼각형 {count}개",
507
530
  "figure.text.two-keys-at-least": "키를 두 개 이상 추가하세요.",
508
- "figure.text.type-name-already-taken": "타입 이름 {type} 은 이미 쓰이고 있습니다. 나중에 바꿀 수 없으니 다른 이름을 정해 주세요.",
531
+ "figure.text.type-name-already-taken": "타입 이름 {type} 은 이미 쓰이고 있습니다. 다른 이름을 정해 주세요.",
509
532
  "figure.text.type-name-cannot-change": "타입 이름은 만든 뒤에 바꿀 수 없습니다.",
510
533
  "figure.text.type-name-will-not-release": "이 이름으로는 발행할 수 없습니다. 영문 대문자·숫자·밑줄(연속 불가)로 3~32자를 입력하세요(예: AGV_LIFTER).",
511
534
  "figure.text.unit-is-a-word-not-a-rule": "표시용 단위입니다 (예: mm · deg · %). 값 계산에는 쓰지 않습니다.",
@@ -663,5 +686,20 @@
663
686
  "figure.label.group-figure": "도형",
664
687
  "figure.label.group-standing": "놓이는 자리",
665
688
  "figure.label.group-catalog": "목록 정보",
666
- "figure.button.control-settings": "이름 · 범위 · 시간"
689
+ "figure.button.control-settings": "이름 · 범위 · 시간",
690
+ "figure.label.align-x": "좌우 자리",
691
+ "figure.label.align-y": "위아래 자리",
692
+ "figure.label.align-z": "앞뒤 자리",
693
+ "figure.label.align-x-min": "왼쪽 끝 맞춤",
694
+ "figure.label.align-x-max": "오른쪽 끝 맞춤",
695
+ "figure.label.align-y-min": "아래 끝 맞춤",
696
+ "figure.label.align-y-max": "위 끝 맞춤",
697
+ "figure.label.align-z-min": "뒤 끝 맞춤",
698
+ "figure.label.align-z-max": "앞 끝 맞춤",
699
+ "figure.label.align-mm": "가운데서 거리 (mm)",
700
+ "figure.label.motion-follow": "따라 움직임",
701
+ "figure.label.motion-own-control": "제 조작값으로",
702
+ "figure.label.motion-multiplier": "배율",
703
+ "figure.label.motion-offset": "더하기",
704
+ "figure.label.motion-follows": "따라 움직임: {joint} × {multiplier} + {offset}"
667
705
  }
@@ -57,7 +57,26 @@
57
57
  "figure.text.links-need-a-box": "ikut saiz untuk bahagian berbentuk kotak, pasangan untuk kotak dan silinder.",
58
58
  "figure.text.scale-position-explained": "menyimpan kedudukan ini sebagai bahagian saiz figura — pada saiz dua kali, jaraknya dua kali.",
59
59
  "figure.text.repeat-member": "salinan ke-{index} daripada {count} yang dibuat dengan mengulang {name}.",
60
- "figure.text.instance-range-can-widen": "diukur semula selepas bahagian berubah: {ranges} mm.",
60
+ "figure.label.detail-none": "tiada",
61
+ "figure.label.repeat": "ulangan",
62
+ "figure.text.repeat-fits-length": "seberapa banyak salinan yang muat pada panjang figura dengan jarak ini.",
63
+ "figure.text.repeat-fixed-count": "ulangan dengan bilangan tetap; jaraknya belum boleh ditetapkan.",
64
+ "figure.text.repeat-what-pitch-gives": "{count} pada panjang {length} mm · boleh diletakkan sehingga {longest} mm ({limit} sebaris).",
65
+ "figure.text.repeat-pitch-too-small": "pitch mesti sekurang-kurangnya {min} mm: pada panjang asal {length} mm ia akan melebihi {limit}.",
66
+ "figure.text.gizmo-joint-places": "sendi menentukan kedudukan {part}. gerakkannya dengan kawalannya di tab gerakan.",
67
+ "figure.label.motion-continuous": "putaran tanpa henti",
68
+ "figure.text.fasten-before-moving": "lekatkan pada bahagian lain atau lantai dahulu; kemudian ia boleh bergerak.",
69
+ "figure.text.joint-range-holds-zero": "julat mesti mengandungi 0, pose rehat.",
70
+ "figure.text.gizmo-joint-mimic": "sendi {joint} mengikut {leader}. gerakkan {leader}.",
71
+ "figure.text.gizmo-joint-fixed-turn": "sendi {joint} tidak berputar. berikan putaran di tab gerakan.",
72
+ "figure.text.gizmo-joint-turned-slide": "sendi {joint} hanya menggelongsor. gunakan pemegang alih.",
73
+ "figure.text.gizmo-joint-origin-follows": "kedudukan sendi {joint} mengikut bahagian lain. ubahnya di bawah pelekatan dalam tab gerakan.",
74
+ "figure.text.gizmo-joint-off-axis": "sendi {joint} hanya berputar pada paksi {axis}. gunakan pemegang putar {axis}.",
75
+ "figure.text.gizmo-size-follows": "saiz {axis} {part} mengikut ukuran lain. ubahnya di bawah saiz dalam tab gerakan.",
76
+ "figure.text.gizmo-fastening-places": "{part} dilekatkan pada muka bahagian lain, yang menentukan kedudukannya. tanggalkan dahulu untuk menggerakkannya.",
77
+ "figure.text.instance-range-can-widen": "diukur semula dengan bahagian semasa: {ranges} mm.",
78
+ "figure.text.size-range-too-small": "di bawah {mm} mm pada {axis} bahagian {part} tiada panjang, namun figura diisytiharkan boleh diletakkan lebih kecil, jadi perubahan ini tidak boleh dibuat. gunakan \"ukur semula\" di bawah saiz yang boleh diletakkan.",
79
+ "figure.text.size-range-too-large": "di atas {mm} mm pada {axis} bahagian {part} tidak boleh dilukis, namun figura diisytiharkan boleh diletakkan lebih besar, jadi perubahan ini tidak boleh dibuat. gunakan \"ukur semula\" di bawah saiz yang boleh diletakkan.",
61
80
  "figure.text.mounting-face-needs-space": "isytiharkan ruang dahulu untuk memilih.",
62
81
  "figure.text.part-is-referenced": "'{part}' tidak boleh dipadam: bahagian lain dipasang padanya atau mengikut saiznya. Leraikan pautan itu dahulu.",
63
82
  "figure.text.part-name-invalid": "'{name}' tidak boleh menjadi nama bahagian. Mulakan dengan huruf dan gunakan huruf, digit, - dan _.",
@@ -261,6 +280,7 @@
261
280
  "figure.label.released-versions": "versi yang diterbitkan",
262
281
  "figure.label.repeat-axis": "axis it repeats along",
263
282
  "figure.label.repeat-count": "bilangan",
283
+ "figure.label.repeat-gap": "pitch",
264
284
  "figure.label.repeat-pitch": "pitch",
265
285
  "figure.label.reuse-trend": "reuse trend",
266
286
  "figure.label.instance-count": "bilangan instans",
@@ -318,7 +338,7 @@
318
338
  "figure.text.bound-by-triangles": "segi tiga mencapai had dahulu ({per} setiap satu, {budget} setiap lukisan).",
319
339
  "figure.text.budget-measured-on": "Diukur pada {gpu}, {on}. Figura yang diam tidak menelan kos — hanya yang kelihatan dan dilukis semula dikira.",
320
340
  "figure.text.budget-not-measured-yet": "this target has not been measured yet.",
321
- "figure.text.budgets-not-in-v3": "permukaan luar palet dan had bilangan bahagian tiada dalam format V3, jadi tidak dipaparkan.",
341
+ "figure.text.budgets-not-in-v3": "permukaan luar palet tiada dalam format V3, jadi tidak dipaparkan. had bilangan bahagian dipaparkan apabila tahap perincian ditetapkan.",
322
342
  "figure.text.trend-chart-title": "kos lukisan mengikut bilangan instans",
323
343
  "figure.text.trend-chart-lead": "garis mendatar kekal sama apabila instans bertambah. instans yang sama saiz berkongsinya.",
324
344
  "figure.text.trend-at-count": "pada {n}",
@@ -362,6 +382,9 @@
362
382
  "figure.text.designate-in-properties": "belum ada yang ditetapkan. pilih bahagian dan tetapkan peranannya dalam tab sifat.",
363
383
  "figure.text.detail-level-explained": "S untuk papan tanda dan tiang, M untuk kebanyakan peralatan, L untuk peralatan besar yang menjadi tumpuan. tahap menentukan had bahagian.",
364
384
  "figure.text.discard-changes-and-start-new": "ada perubahan belum disimpan. buang dan mulakan yang baharu?",
385
+ "figure.text.leave-without-saving": "ada perubahan yang belum disimpan. buang dan keluar?",
386
+ "figure.button.leave-without-saving": "buang dan keluar",
387
+ "figure.button.keep-editing": "teruskan menyunting",
365
388
  "figure.text.does-not-block": "tidak menghalang",
366
389
  "figure.text.emissive-explained": "kecerahan permukaan itu sendiri. 0 bermaksud tidak bercahaya, dan ia tidak menerangi sekeliling.",
367
390
  "figure.text.enter-a-type-name": "masukkan nama jenis.",
@@ -537,7 +560,7 @@
537
560
  "figure.label.facing-flush": "same plane",
538
561
  "figure.label.gap": "gap (mm)",
539
562
  "figure.label.align": "within the face",
540
- "figure.label.align-centre": "centre",
563
+ "figure.label.align-centre": "di tengah",
541
564
  "figure.label.align-min": "low edge",
542
565
  "figure.label.align-max": "high edge",
543
566
  "figure.button.fasten": "Fasten",
@@ -663,5 +686,20 @@
663
686
  "figure.label.group-figure": "Rajah",
664
687
  "figure.label.group-standing": "Kedudukan letak",
665
688
  "figure.label.group-catalog": "Maklumat katalog",
666
- "figure.button.control-settings": "Nama, julat dan masa"
689
+ "figure.button.control-settings": "Nama, julat dan masa",
690
+ "figure.label.align-x": "kiri-kanan",
691
+ "figure.label.align-y": "atas-bawah",
692
+ "figure.label.align-z": "depan-belakang",
693
+ "figure.label.align-x-min": "rata tepi kiri",
694
+ "figure.label.align-x-max": "rata tepi kanan",
695
+ "figure.label.align-y-min": "rata tepi bawah",
696
+ "figure.label.align-y-max": "rata tepi atas",
697
+ "figure.label.align-z-min": "rata tepi belakang",
698
+ "figure.label.align-z-max": "rata tepi depan",
699
+ "figure.label.align-mm": "jarak dari tengah (mm)",
700
+ "figure.label.motion-follow": "bergerak bersama",
701
+ "figure.label.motion-own-control": "kawalan sendiri",
702
+ "figure.label.motion-multiplier": "pendarab",
703
+ "figure.label.motion-offset": "ofset",
704
+ "figure.label.motion-follows": "bergerak bersama {joint} × {multiplier} + {offset}"
667
705
  }
@@ -57,7 +57,26 @@
57
57
  "figure.text.links-need-a-box": "尺寸跟随适用于盒形部件,固定适用于盒形和圆柱部件。",
58
58
  "figure.text.scale-position-explained": "把当前位置保持为图形尺寸的比例——尺寸加倍,距离也加倍。",
59
59
  "figure.text.repeat-member": "重复 {name} 得到的 {count} 个中的第 {index} 个。",
60
- "figure.text.instance-range-can-widen": "部件已变更,重新测量为 {ranges} mm。",
60
+ "figure.label.detail-none": "无",
61
+ "figure.label.repeat": "重复",
62
+ "figure.text.repeat-fits-length": "按此间距沿图形长度放入尽可能多的副本。",
63
+ "figure.text.repeat-fixed-count": "这是固定数量的重复,暂时无法更改间距。",
64
+ "figure.text.repeat-what-pitch-gives": "长度 {length} mm 时 {count} 个 · 最长可放到 {longest} mm (一排 {limit} 个)。",
65
+ "figure.text.repeat-pitch-too-small": "pitch 须不小于 {min} mm:在原始长度 {length} mm 下会超过 {limit} 个。",
66
+ "figure.text.gizmo-joint-places": "{part} 由关节决定位置。请用运动标签中的控制值移动它。",
67
+ "figure.label.motion-continuous": "无限旋转",
68
+ "figure.text.fasten-before-moving": "请先将其固定到其他部件或地面上,然后才能添加运动。",
69
+ "figure.text.joint-range-holds-zero": "范围必须包含 0(默认姿态)。",
70
+ "figure.text.gizmo-joint-mimic": "{joint} 关节跟随 {leader}。请移动 {leader}。",
71
+ "figure.text.gizmo-joint-fixed-turn": "{joint} 关节不会旋转。请在运动标签中添加旋转。",
72
+ "figure.text.gizmo-joint-turned-slide": "{joint} 关节只能滑动。请使用移动手柄。",
73
+ "figure.text.gizmo-joint-origin-follows": "{joint} 关节的位置跟随其他部件。请在运动标签的固定中修改。",
74
+ "figure.text.gizmo-joint-off-axis": "{joint} 关节只绕 {axis} 轴旋转。请使用 {axis} 旋转手柄。",
75
+ "figure.text.gizmo-size-follows": "{part} 的 {axis} 尺寸跟随其他尺寸。请在运动标签的尺寸中修改。",
76
+ "figure.text.gizmo-fastening-places": "{part} 贴在另一个部件的面上,由该面决定位置。要移动请先分离。",
77
+ "figure.text.instance-range-can-widen": "按当前部件重新测量为 {ranges} mm。",
78
+ "figure.text.size-range-too-small": "此图形的 {axis} 小于 {mm} mm 时 {part} 部件长度为 0,但声明可以放得更小,因此无法进行此更改。请在「可放置的尺寸」中重新测量。",
79
+ "figure.text.size-range-too-large": "此图形的 {axis} 大于 {mm} mm 时无法绘制 {part} 部件,但声明可以放得更大,因此无法进行此更改。请在「可放置的尺寸」中重新测量。",
61
80
  "figure.text.mounting-face-needs-space": "请先声明空间,然后才能选择。",
62
81
  "figure.text.part-is-referenced": "无法删除 '{part}':有其他部件固定在它上面或跟随它的尺寸。请先解除该连接。",
63
82
  "figure.text.part-name-invalid": "'{name}' 不能作为部件名称。请以字母开头,只使用字母、数字、- 和 _。",
@@ -261,6 +280,7 @@
261
280
  "figure.label.released-versions": "已发布版本",
262
281
  "figure.label.repeat-axis": "axis it repeats along",
263
282
  "figure.label.repeat-count": "数量",
283
+ "figure.label.repeat-gap": "pitch",
264
284
  "figure.label.repeat-pitch": "pitch",
265
285
  "figure.label.reuse-trend": "reuse trend",
266
286
  "figure.label.instance-count": "实例数",
@@ -318,7 +338,7 @@
318
338
  "figure.text.bound-by-triangles": "三角形先达到上限 (每个 {per},每个图面 {budget})。",
319
339
  "figure.text.budget-measured-on": "于 {on} 在 {gpu} 上实测。静止的图形不产生开销 — 只计算屏幕上被重绘的部分。",
320
340
  "figure.text.budget-not-measured-yet": "this target has not been measured yet.",
321
- "figure.text.budgets-not-in-v3": "调色板外表面和部件数限额不属于 V3 格式,因此不显示。",
341
+ "figure.text.budgets-not-in-v3": "调色板外表面不属于 V3 格式,因此不显示。设置细节等级后会显示部件数限额。",
322
342
  "figure.text.trend-chart-title": "按实例数的绘制成本",
323
343
  "figure.text.trend-chart-lead": "平线表示实例增加时保持不变的值,同尺寸的实例共享这些值。",
324
344
  "figure.text.trend-at-count": "{n} 个时",
@@ -362,6 +382,9 @@
362
382
  "figure.text.designate-in-properties": "还没有指定部件。请选择部件,在属性标签页中设置「在能力中的角色」。",
363
383
  "figure.text.detail-level-explained": "S 用于标志和立柱,M 用于大多数设备,L 用于作为画面中心的大型设备。等级决定部件数量上限。",
364
384
  "figure.text.discard-changes-and-start-new": "有未保存的更改。放弃并新建吗?",
385
+ "figure.text.leave-without-saving": "有未保存的更改。放弃并离开吗?",
386
+ "figure.button.leave-without-saving": "放弃并离开",
387
+ "figure.button.keep-editing": "继续编辑",
365
388
  "figure.text.does-not-block": "不影响发布的项",
366
389
  "figure.text.emissive-explained": "面本身的亮度。0 表示不发光,也不会照亮周围。",
367
390
  "figure.text.enter-a-type-name": "请输入类型名称。",
@@ -537,7 +560,7 @@
537
560
  "figure.label.facing-flush": "same plane",
538
561
  "figure.label.gap": "gap (mm)",
539
562
  "figure.label.align": "within the face",
540
- "figure.label.align-centre": "centre",
563
+ "figure.label.align-centre": "居中",
541
564
  "figure.label.align-min": "low edge",
542
565
  "figure.label.align-max": "high edge",
543
566
  "figure.button.fasten": "Fasten",
@@ -663,5 +686,20 @@
663
686
  "figure.label.group-figure": "图形",
664
687
  "figure.label.group-standing": "放置方式",
665
688
  "figure.label.group-catalog": "目录信息",
666
- "figure.button.control-settings": "名称 · 范围 · 时间"
689
+ "figure.button.control-settings": "名称 · 范围 · 时间",
690
+ "figure.label.align-x": "左右位置",
691
+ "figure.label.align-y": "上下位置",
692
+ "figure.label.align-z": "前后位置",
693
+ "figure.label.align-x-min": "对齐左边缘",
694
+ "figure.label.align-x-max": "对齐右边缘",
695
+ "figure.label.align-y-min": "对齐下边缘",
696
+ "figure.label.align-y-max": "对齐上边缘",
697
+ "figure.label.align-z-min": "对齐后边缘",
698
+ "figure.label.align-z-max": "对齐前边缘",
699
+ "figure.label.align-mm": "距中心 (mm)",
700
+ "figure.label.motion-follow": "跟随",
701
+ "figure.label.motion-own-control": "自身控制值",
702
+ "figure.label.motion-multiplier": "倍率",
703
+ "figure.label.motion-offset": "偏移",
704
+ "figure.label.motion-follows": "跟随 {joint} × {multiplier} + {offset}"
667
705
  }