@things-factory/figure-ui 10.1.153 → 10.1.155

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 (110) hide show
  1. package/client/modeller/canvas.ts +1 -1
  2. package/client/modeller/editor.ts +2 -2
  3. package/client/modeller/figure-capability-panel.ts +6 -24
  4. package/client/modeller/figure-carrier.ts +1 -1
  5. package/client/modeller/figure-clips.ts +1 -1
  6. package/client/modeller/figure-controls.ts +2 -2
  7. package/client/modeller/figure-face-mapping.ts +1 -1
  8. package/client/modeller/figure-links.ts +3 -2
  9. package/client/modeller/figure-material-panel.ts +1 -1
  10. package/client/modeller/figure-preview.ts +2 -2
  11. package/client/modeller/figure-properties.ts +1 -1
  12. package/client/modeller/figure-section-editor.ts +1 -1
  13. package/client/modeller/figure-section-panel.ts +1 -1
  14. package/client/modeller/figure-settings.ts +2 -2
  15. package/client/modeller/figure-verdict.ts +1 -1
  16. package/client/pages/figure-list-page.ts +7 -1
  17. package/client/viewparts/figure-detail-dock.ts +90 -41
  18. package/client/viewparts/figure-thumb.ts +2 -22
  19. package/dist-client/modeller/canvas.d.ts +1 -1
  20. package/dist-client/modeller/canvas.js +1 -1
  21. package/dist-client/modeller/canvas.js.map +1 -1
  22. package/dist-client/modeller/editor.js +2 -2
  23. package/dist-client/modeller/editor.js.map +1 -1
  24. package/dist-client/modeller/figure-capability-panel.d.ts +0 -3
  25. package/dist-client/modeller/figure-capability-panel.js +5 -18
  26. package/dist-client/modeller/figure-capability-panel.js.map +1 -1
  27. package/dist-client/modeller/figure-carrier.js +1 -1
  28. package/dist-client/modeller/figure-carrier.js.map +1 -1
  29. package/dist-client/modeller/figure-clips.js +1 -1
  30. package/dist-client/modeller/figure-clips.js.map +1 -1
  31. package/dist-client/modeller/figure-controls.js +2 -2
  32. package/dist-client/modeller/figure-controls.js.map +1 -1
  33. package/dist-client/modeller/figure-face-mapping.js +1 -1
  34. package/dist-client/modeller/figure-face-mapping.js.map +1 -1
  35. package/dist-client/modeller/figure-links.js +3 -2
  36. package/dist-client/modeller/figure-links.js.map +1 -1
  37. package/dist-client/modeller/figure-material-panel.js +1 -1
  38. package/dist-client/modeller/figure-material-panel.js.map +1 -1
  39. package/dist-client/modeller/figure-preview.d.ts +1 -1
  40. package/dist-client/modeller/figure-preview.js +2 -2
  41. package/dist-client/modeller/figure-preview.js.map +1 -1
  42. package/dist-client/modeller/figure-properties.js +1 -1
  43. package/dist-client/modeller/figure-properties.js.map +1 -1
  44. package/dist-client/modeller/figure-section-editor.js +1 -1
  45. package/dist-client/modeller/figure-section-editor.js.map +1 -1
  46. package/dist-client/modeller/figure-section-panel.js +1 -1
  47. package/dist-client/modeller/figure-section-panel.js.map +1 -1
  48. package/dist-client/modeller/figure-settings.d.ts +1 -1
  49. package/dist-client/modeller/figure-settings.js +1 -1
  50. package/dist-client/modeller/figure-settings.js.map +1 -1
  51. package/dist-client/modeller/figure-verdict.js +1 -1
  52. package/dist-client/modeller/figure-verdict.js.map +1 -1
  53. package/dist-client/pages/figure-list-page.d.ts +1 -0
  54. package/dist-client/pages/figure-list-page.js +11 -1
  55. package/dist-client/pages/figure-list-page.js.map +1 -1
  56. package/dist-client/tsconfig.tsbuildinfo +1 -1
  57. package/dist-client/viewparts/figure-detail-dock.d.ts +10 -1
  58. package/dist-client/viewparts/figure-detail-dock.js +93 -41
  59. package/dist-client/viewparts/figure-detail-dock.js.map +1 -1
  60. package/dist-client/viewparts/figure-thumb.d.ts +1 -0
  61. package/dist-client/viewparts/figure-thumb.js +2 -22
  62. package/dist-client/viewparts/figure-thumb.js.map +1 -1
  63. package/package.json +5 -4
  64. package/test/browser/detail-page.js +10 -2
  65. package/test/browser/product-page.check.mjs +1 -1
  66. package/test/browser/screen-page.js +1 -1
  67. package/test/browser/serve-detail.mjs +7 -2
  68. package/test/figure-controls-keys.test.ts +19 -0
  69. package/test/i18n-prefix-guard.test.ts +4 -1
  70. package/test/layout.test.ts +4 -3
  71. package/test/links.test.ts +5 -4
  72. package/test/properties.test.ts +2 -1
  73. package/test/refusals.test.ts +2 -1
  74. package/test/theme.test.ts +1 -1
  75. package/test/verdict.test.ts +2 -1
  76. package/test/words.ts +20 -0
  77. package/translations/en.json +2 -33
  78. package/translations/es.json +2 -33
  79. package/translations/ja.json +2 -33
  80. package/translations/ko.json +2 -33
  81. package/translations/ms.json +2 -33
  82. package/translations/zh.json +2 -33
  83. package/client/modeller/controls.ts +0 -54
  84. package/client/modeller/figure-view.ts +0 -151
  85. package/client/modeller/preview-model.ts +0 -89
  86. package/client/modeller/side-panel-styles.ts +0 -374
  87. package/client/viewparts/detail-motion.ts +0 -11
  88. package/client/viewparts/figure-asset-viewer.ts +0 -177
  89. package/dist-client/modeller/controls.d.ts +0 -28
  90. package/dist-client/modeller/controls.js +0 -28
  91. package/dist-client/modeller/controls.js.map +0 -1
  92. package/dist-client/modeller/figure-view.d.ts +0 -117
  93. package/dist-client/modeller/figure-view.js +0 -78
  94. package/dist-client/modeller/figure-view.js.map +0 -1
  95. package/dist-client/modeller/preview-model.d.ts +0 -54
  96. package/dist-client/modeller/preview-model.js +0 -79
  97. package/dist-client/modeller/preview-model.js.map +0 -1
  98. package/dist-client/modeller/side-panel-styles.d.ts +0 -27
  99. package/dist-client/modeller/side-panel-styles.js +0 -374
  100. package/dist-client/modeller/side-panel-styles.js.map +0 -1
  101. package/dist-client/viewparts/detail-motion.d.ts +0 -6
  102. package/dist-client/viewparts/detail-motion.js +0 -9
  103. package/dist-client/viewparts/detail-motion.js.map +0 -1
  104. package/dist-client/viewparts/figure-asset-viewer.d.ts +0 -31
  105. package/dist-client/viewparts/figure-asset-viewer.js +0 -198
  106. package/dist-client/viewparts/figure-asset-viewer.js.map +0 -1
  107. package/test/controls.test.ts +0 -60
  108. package/test/detail-motion.test.ts +0 -26
  109. package/test/preview.test.ts +0 -53
  110. package/test/view.test.ts +0 -13
@@ -8,6 +8,7 @@ import { test } from 'node:test'
8
8
  import assert from 'node:assert/strict'
9
9
  import { readFileSync } from 'node:fs'
10
10
  import { fileURLToPath } from 'node:url'
11
+ import { wordsOf } from './words.ts'
11
12
 
12
13
  const read = (path: string) => readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8')
13
14
  const editor = read('../client/modeller/editor.ts')
@@ -20,7 +21,7 @@ test('띠 — 칸 접기 · 되돌리기 · 전체 보기 · 저장 상태 ·
20
21
  const said = [editor, ...['pane-fold', 'refusal-teller', 'command-preview-controller'].map(name => read(`../client/modeller/${name}.ts`))].join('\n')
21
22
  const keys = [...said.matchAll(/'(figure\.[a-z.-]*[a-z])'/g)].map(m => m[1])
22
23
  for (const lang of ['ko', 'en', 'ja', 'zh', 'ms', 'es']) {
23
- const table = JSON.parse(read(`../translations/${lang}.json`))
24
+ const table = wordsOf(lang)
24
25
  for (const key of keys) assert.ok(table[key], `${lang}: ${key}`)
25
26
  }
26
27
  })
@@ -28,7 +29,7 @@ test('띠 — 칸 접기 · 되돌리기 · 전체 보기 · 저장 상태 ·
28
29
  /* User 2026-10-01: 「맞추기 아이콘 … 무엇을 하는 것인지 모르겠다」 -- words, and what moves the part apart from what makes one. */
29
30
  test('맞추기는 글자 단추로 — 옮기는 넷(가운데 X·Z, 면에 대기, 눈금)과 새 부품을 만드는 대칭 복사를 다른 줄에 둔다', () => {
30
31
  /* The two rows and their buttons in words are the browser check's (test/browser/screen.check.mjs); here, the words. */
31
- const ko = JSON.parse(readFileSync(fileURLToPath(new URL('../translations/ko.json', import.meta.url)), 'utf8')) as Record<string, string>
32
+ const ko = wordsOf('ko') as Record<string, string>
32
33
  assert.deepEqual(
33
34
  ['center-x', 'center-z', 'align-to-floor', 'snap', 'mirror-x'].map(k => ko[`figure.button.${k}`]),
34
35
  ['X 가운데로', 'Z 가운데로', '바닥에 내려놓기', '눈금에 맞추기', 'X 반대편에']
@@ -39,5 +40,5 @@ test('맞추기는 글자 단추로 — 옮기는 넷(가운데 X·Z, 면에 대
39
40
  test('불러오는 동안 빈 무대에 「도형을 추가해…」가 깜빡이지 않고, 좁은 화면 알림은 이 브라우저에서 한 번', () => {
40
41
  /* A new figure's start card says how to begin; an empty stage otherwise is one loading, or with every part hidden. The bare stage and the notice said once are the browser check's (test/browser/screen.check.mjs). */
41
42
  for (const lang of ['ko', 'en', 'ja', 'zh', 'ms', 'es'])
42
- assert.equal((JSON.parse(read(`../translations/${lang}.json`)) as Record<string, string>)['figure.text.add-a-shape-to-start'], undefined, lang)
43
+ assert.equal((wordsOf(lang) as Record<string, string>)['figure.text.add-a-shape-to-start'], undefined, lang)
43
44
  })
@@ -86,7 +86,7 @@ test('세 칸의 말은 다섯 말 모두에 있다', () => {
86
86
  const links = read('../client/modeller/figure-links.ts')
87
87
  const keys = [...links.matchAll(/'(figure\.[a-z.-]*[a-z])'/g)].map(m => m[1])
88
88
  for (const lang of ['ko', 'en', 'ja', 'zh', 'ms', 'es']) {
89
- const table = JSON.parse(read(`../translations/${lang}.json`))
89
+ const table = wordsOf(lang)
90
90
  for (const key of [...keys, 'figure.text.follow-would-loop', 'figure.text.fasten-would-loop', 'figure.label.motion-slide', 'figure.label.motion-turn', 'figure.label.place-grip', 'figure.label.place-seat'])
91
91
  assert.ok(table[key], `${lang}: ${key}`)
92
92
  }
@@ -562,7 +562,7 @@ test('벽 배치 — 장착 평면은 Z = 0, 등으로 붙이고 가로질러 X
562
562
  })
563
563
 
564
564
  test('부품 칸의 두 제목이 같은 말이 아니다 — 자리 숫자는 「위치와 크기」, 붙이기 칸은 「붙이기」 (09-26)', () => {
565
- const ko = JSON.parse(read('../translations/ko.json'))
565
+ const ko = wordsOf('ko')
566
566
  assert.notEqual(ko['figure.label.placement'], ko['figure.label.group-placement-size'])
567
567
  assert.equal(ko['figure.label.placement'], '붙이기')
568
568
  })
@@ -604,7 +604,7 @@ test('팔레트의 문틀은 문 크기로 서고, 세 축 모두 크기를 따
604
604
 
605
605
  /* 크기를 따라감 한 번 — 치수 칸의 단추 하나, 크기를 대신 정했으면 한 줄로 말한다 (ADR 판정 Q1, 09-26). */
606
606
  test('치수 칸 — 「도형 크기를 따라감」 단추는 follow-size 한 번, 다 따르면 사라진다; 크기를 대신 정하면 한 줄', () => {
607
- const ko = JSON.parse(read('../translations/ko.json'))
607
+ const ko = wordsOf('ko')
608
608
  assert.match(ko['figure.text.size-declared-to-follow'], /\{x\} × \{y\} × \{z\} mm/)
609
609
  })
610
610
 
@@ -616,7 +616,7 @@ test('팔레트의 통은 통의 크기로 서고, 세 축 모두 크기를 따
616
616
  const asset = add(createFigureAsset('Tote'), paletteRecipe('hollow-box' as never, 'tote'))
617
617
  assert.deepEqual(followableAxes(asset, 'tote'), ['x', 'y', 'z'])
618
618
  assert.deepEqual(gizmoReachOf(asset as never, 'tote').sizes, ['tote.dimension.width', 'tote.dimension.height', 'tote.dimension.depth'])
619
- const ko = JSON.parse(read('../translations/ko.json'))
619
+ const ko = wordsOf('ko')
620
620
  assert.equal(ko['figure.label.face-inside-bottom'], '안쪽 바닥')
621
621
  })
622
622
 
@@ -625,6 +625,7 @@ test('팔레트의 통은 통의 크기로 서고, 세 축 모두 크기를 따
625
625
  * as fastened by its bottom, and fastening again from there broke its turning in place.
626
626
  */
627
627
  import { fasteningOf } from '../client/modeller/links.ts'
628
+ import { wordsOf } from './words.ts'
628
629
 
629
630
  test('붙이기 칸은 부품 제 붙임으로 열린다 — 가운데로 붙은 롤러는 가운데 · 상대 · 간격 그대로', () => {
630
631
  let asset = addFigureBox(createFigureAsset('Rollers'), { id: 'bed', size: { x: 2000, y: 400, z: 600 }, position: { x: 0, y: 200, z: 0 } })
@@ -15,6 +15,7 @@ import { tagsOf, figureFigureFacts } from '../client/modeller/figure-facts.ts'
15
15
  import { occupancyFromParts } from '../client/modeller/occupancy.ts'
16
16
  import { offeredMountingOf } from '../client/modeller/mounting-part.ts'
17
17
  import { revisionOf } from './revision-of.ts'
18
+ import { wordsOf } from './words.ts'
18
19
 
19
20
  const read = (path: string) => readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8')
20
21
  const probe = () => {
@@ -72,7 +73,7 @@ test('속성 탭의 말은 다섯 말 모두에 있다', () => {
72
73
  for (const face of ['left', 'right', 'bottom', 'top', 'back', 'front']) keys.push(`figure.label.face-${face}`)
73
74
  for (const one of ['floor', 'ceiling', 'center']) keys.push(`figure.label.placement-${one}`)
74
75
  for (const lang of ['ko', 'en', 'ja', 'zh', 'ms', 'es']) {
75
- const table = JSON.parse(read(`../translations/${lang}.json`))
76
+ const table = wordsOf(lang)
76
77
  for (const key of keys) assert.ok(table[key], `${lang}: ${key}`)
77
78
  }
78
79
  })
@@ -28,8 +28,9 @@ import {
28
28
  repeatPitchRefusalOf,
29
29
  sizeRangeRefusalOf
30
30
  } from '../client/modeller/refusals.ts'
31
+ import { wordsOf } from './words.ts'
31
32
 
32
- const ko = JSON.parse(readFileSync(fileURLToPath(new URL('../translations/ko.json', import.meta.url)), 'utf8'))
33
+ const ko = wordsOf('ko')
33
34
  const say = (key: string, params: Record<string, string>) => {
34
35
  assert.ok(key in ko, `no words for ${key}`)
35
36
  return ko[key].replace(/\{(\w+)\}/g, (_: string, k: string) => params[k] ?? '')
@@ -10,7 +10,7 @@ import assert from 'node:assert/strict'
10
10
  import { readFileSync } from 'node:fs'
11
11
  import { fileURLToPath } from 'node:url'
12
12
 
13
- import { DEFAULT_VIEW, WORKBENCH } from '../client/modeller/figure-view.ts'
13
+ import { DEFAULT_VIEW, WORKBENCH } from '@things-factory/figure-viewer/dist-client/figure-view.js'
14
14
 
15
15
  const read = (path: string) => readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8')
16
16
  const editor = read('../client/modeller/editor.ts')
@@ -18,6 +18,7 @@ import { budgetOf, figureReportOf, verdictMeasureOf } from '../client/modeller/m
18
18
  import { newestAnswer, type FigureOutcome } from '../client/modeller/newest-answer.ts'
19
19
  import { capacityFrom, SCENE_BUDGET } from '../client/modeller/scene-budget.ts'
20
20
  import { moving } from './joints.ts'
21
+ import { wordsOf } from './words.ts'
21
22
 
22
23
  const read = (path: string) => readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8')
23
24
  const verdict = read('../client/modeller/figure-verdict.ts')
@@ -74,7 +75,7 @@ test('판정 탭의 말은 다섯 말 모두에 있다 — 없으면 키가 그
74
75
  const keys = [...(verdict + maturity).matchAll(/'(figure\.[a-z.-]*[a-z])'/g)].map(m => m[1])
75
76
  assert.ok(keys.includes('figure.text.verdict-asking'), '전제: 삼항 안의 키도 센다')
76
77
  for (const lang of ['ko', 'en', 'ja', 'zh', 'ms', 'es']) {
77
- const table = JSON.parse(read(`../translations/${lang}.json`))
78
+ const table = wordsOf(lang)
78
79
  for (const key of keys) assert.ok(table[key], `${lang}: ${key}`)
79
80
  }
80
81
  })
package/test/words.ts ADDED
@@ -0,0 +1,20 @@
1
+ /*
2
+ * The words a figure-ui screen is drawn with, as the app loads them: shell's translations, those of
3
+ * @things-factory/figure-viewer, whose components (preview, facts, side panel) figure-ui uses, and figure-ui's own.
4
+ * Keys the viewer says moved there with it, and a key both packages say lives in shell (2026-10-12); a test that asks
5
+ * whether a key is in "the translations" asks this.
6
+ */
7
+ import { readFileSync } from 'node:fs'
8
+ import { createRequire } from 'node:module'
9
+ import { dirname, join } from 'node:path'
10
+ import { fileURLToPath } from 'node:url'
11
+
12
+ const own = (lang: string) => JSON.parse(readFileSync(fileURLToPath(new URL(`../translations/${lang}.json`, import.meta.url)), 'utf8'))
13
+ const viewerDir = dirname(createRequire(import.meta.url).resolve('@things-factory/figure-viewer/package.json'))
14
+ const viewer = (lang: string) => JSON.parse(readFileSync(join(viewerDir, 'translations', `${lang}.json`), 'utf8'))
15
+ const shellDir = dirname(createRequire(import.meta.url).resolve('@things-factory/shell/package.json'))
16
+ const shell = (lang: string) => JSON.parse(readFileSync(join(shellDir, 'translations', `${lang}.json`), 'utf8'))
17
+
18
+ export function wordsOf(lang: string): Record<string, string> {
19
+ return { ...shell(lang), ...viewer(lang), ...own(lang) }
20
+ }
@@ -15,8 +15,6 @@
15
15
  "figure.button.fix-position": "fix here",
16
16
  "figure.button.scale-position": "in proportion",
17
17
  "figure.button.remeasure-range": "measure again",
18
- "figure.label.sizing-rule": "when the size changes",
19
- "figure.label.sizing-uniform": "one ratio (geometric mean of the three axes)",
20
18
  "figure.button.scale-uniformly": "grow by one ratio",
21
19
  "figure.text.sizing-uniform-proposed": "this figure has joints. growing it by one ratio keeps the joints together at any size.",
22
20
  "figure.text.sizing-uniform-explained": "grows the whole figure by the geometric mean of the three sizes a board gives it. the feet stay on the floor; room left above the figure stays empty.",
@@ -121,7 +119,6 @@
121
119
  "figure.label.budgets": "budgets",
122
120
  "figure.label.by-axis": "maturity by item",
123
121
  "figure.label.cast-shadow": "cast shadow",
124
- "figure.label.category": "category",
125
122
  "figure.label.ceiling-height": "ceiling height (mm)",
126
123
  "figure.label.clip-name": "clip name",
127
124
  "figure.label.clips": "animation (plays over time)",
@@ -148,7 +145,6 @@
148
145
  "figure.label.environment-sunny": "sunny",
149
146
  "figure.label.environment-warehouse": "warehouse",
150
147
  "figure.label.figure": "figure",
151
- "figure.label.figure-placement": "placement",
152
148
  "figure.label.figure-released": "released",
153
149
  "figure.label.figure-type": "type",
154
150
  "figure.label.findings": "findings",
@@ -158,7 +154,6 @@
158
154
  "figure.label.hemisphere-light": "hemisphere light",
159
155
  "figure.label.history": "history",
160
156
  "figure.label.intensity": "intensity",
161
- "figure.label.joint": "joint",
162
157
  "figure.label.joint-axis": "axis",
163
158
  "figure.label.joint-limit-max": "max",
164
159
  "figure.label.joint-limit-min": "min",
@@ -176,7 +171,6 @@
176
171
  "figure.label.key-at": "at (s)",
177
172
  "figure.label.key-at-value": "at (0–1)",
178
173
  "figure.label.key-light": "key light",
179
- "figure.label.maturity": "maturity",
180
174
  "figure.label.mode-edit": "edit",
181
175
  "figure.label.mode-preview": "preview",
182
176
  "figure.label.motion-intent": "what should move?",
@@ -312,11 +306,6 @@
312
306
  "figure.label.face-inside-right": "inside right",
313
307
  "figure.label.face-inside-back": "inside back",
314
308
  "figure.label.face-inside-front": "inside front",
315
- "figure.label.placement": "fastening",
316
- "figure.label.placement-ceiling": "ceiling-based (ceiling)",
317
- "figure.label.placement-center": "center-based (center)",
318
- "figure.label.placement-floor": "floor-based (floor)",
319
- "figure.label.placement-limit": "placement limit",
320
309
  "figure.label.playback-speed": "speed",
321
310
  "figure.label.preset": "preset",
322
311
  "figure.label.preset-ceramic": "ceramic",
@@ -344,9 +333,6 @@
344
333
  "figure.label.reuse-trend": "reuse trend",
345
334
  "figure.label.instance-count": "instance count",
346
335
  "figure.label.rotation-degrees": "rotation (degrees)",
347
- "figure.label.rung-flow": "things flow through",
348
- "figure.label.rung-hold": "holds things",
349
- "figure.label.rung-none": "draws only",
350
336
  "figure.label.same-as-off": "same as unlit",
351
337
  "figure.label.scene-floor": "floor",
352
338
  "figure.label.scene-reference": "scene reference",
@@ -362,14 +348,12 @@
362
348
  "figure.label.status-colors": "lit colors (lamps · indicators)",
363
349
  "figure.label.tab-capability": "capability",
364
350
  "figure.label.tab-environment": "environment",
365
- "figure.label.tags": "tags",
366
351
  "figure.label.tools": "align",
367
352
  "figure.label.transparent": "transparent",
368
353
  "figure.label.triangles": "triangles",
369
354
  "figure.label.unit-none": "no unit",
370
355
  "figure.label.unit-type-it": "type it…",
371
356
  "figure.label.weight": "drawing cost",
372
- "figure.label.what-this-does": "what this figure does",
373
357
  "figure.text.accepts-anything": "empty means anything",
374
358
  "figure.text.accepts-explained": "types allowed in this slot. separate with commas; leave empty for no limit.",
375
359
  "figure.text.add-a-shape": "click to add a part",
@@ -475,7 +459,6 @@
475
459
  "figure.text.no-figure-yet": "no figures yet",
476
460
  "figure.text.no-findings": "nothing to report.",
477
461
  "figure.text.not-measurable-yet": "not measurable",
478
- "figure.text.not-measured-yet": "not measured",
479
462
  "figure.text.nothing-released-yet": "nothing released yet.",
480
463
  "figure.text.on-by-default-explained": "the starting state when placed on a drawing. a value set on the instance takes priority.",
481
464
  "figure.text.other-segment-count": "enter a value",
@@ -486,7 +469,6 @@
486
469
  "figure.text.placement-explained": "sets the anchor plane in 3D scene (floor: AGV/conveyor, ceiling: OHT/hoist, center: sensor/drone).",
487
470
  "figure.text.pose-as-default-explained": "Writes the pose you have set as the parameters’ defaults, so the figure stands like this when nobody gives it a value.",
488
471
  "figure.text.preview-blocked-by-errors": "cannot show the preview because of format errors. see the maturity tab for the reason.",
489
- "figure.text.preview-needs-a-part": "add a part to see how it looks placed on a drawing.",
490
472
  "figure.text.put-on-floor": "Moves the part once so its bottom is on the floor (Y=0). It does not stay there when the size changes; for that, use “Follow size, attached to the floor”.",
491
473
  "figure.text.range-needs-room": "the maximum must be above the minimum.",
492
474
  "figure.text.release-needs-a-save-first": "there are unsaved changes. save first.",
@@ -533,7 +515,6 @@
533
515
  "figure.label.follows-nothing": "fixed",
534
516
  "figure.label.follows-instance": "instance size",
535
517
  "figure.label.follows-instance-share": "in proportion to size",
536
- "figure.label.instance-range": "sizes it can be placed at",
537
518
  "figure.label.follows-part": "another part",
538
519
  "figure.label.times": "times",
539
520
  "figure.label.plus": "plus (mm)",
@@ -588,7 +569,6 @@
588
569
  "figure.label.face-top": "top",
589
570
  "figure.label.face-back": "back",
590
571
  "figure.label.face-front": "front",
591
- "figure.label.motion": "Motion",
592
572
  "figure.text.motion-explained": "How this part moves. Added on top of its fastening, never instead of it.",
593
573
  "figure.label.motion-none": "does not move",
594
574
  "figure.label.motion-slide": "slide",
@@ -627,11 +607,7 @@
627
607
  "figure.label.design-inputs": "design inputs",
628
608
  "figure.text.release-blocked": "Release is blocked — {count}",
629
609
  "figure.text.release-ready": "Ready to release",
630
- "figure.label.places": "Places",
631
610
  "figure.text.places-need-a-box": "A place sits on a face of a box-shaped part.",
632
- "figure.label.place-grip": "Grip",
633
- "figure.label.place-seat": "Seat",
634
- "figure.label.place-holds": "up to {count}",
635
611
  "figure.button.remove-place": "Remove place",
636
612
  "figure.text.place-explained": "Where a board sets or holds things on this part. When the part moves, what it holds moves with it.",
637
613
  "figure.text.place-needs-holding": "This figure does not declare that it holds things, so a board hands nothing to its places.",
@@ -758,7 +734,6 @@
758
734
  "figure.button.follow-size-in-proportion": "make every part follow",
759
735
  "figure.text.proportion-kept": "keeps its own number: {what}",
760
736
  "figure.text.preview-clamped": "{axis} {asked} → {used}",
761
- "figure.label.placement-wall": "wall (wall)",
762
737
  "figure.text.placement-plane-refused": "{parts} cannot go on a {placement} by the face fastened to the mounting plane. detach it or fasten it by its {faces} first.",
763
738
  "figure.label.face-centre": "centre",
764
739
  "figure.label.budget-moving": "parts recomputed every frame",
@@ -995,13 +970,6 @@
995
970
  "figure.label.detail-saved": "Saved model",
996
971
  "figure.text.detail-unreleased": "Not released yet. Showing the saved draft.",
997
972
  "figure.button.detail-edit": "Open editor",
998
- "figure.label.detail-size": "Placement size",
999
- "figure.button.detail-reset": "Reset size and pose",
1000
- "figure.text.detail-transient": "Try sizes and motion here. The saved model stays unchanged.",
1001
- "figure.text.detail-no-motion": "No motion is defined.",
1002
- "figure.text.detail-playing": "Playing",
1003
- "figure.label.detail-summary": "Drawing cost of the selected model",
1004
- "figure.text.detail-paused": "Paused",
1005
973
  "figure.button.download-package": "download package",
1006
974
  "figure.label.group-carrier": "Carrier",
1007
975
  "figure.label.carrier-type": "Carrier type",
@@ -1055,5 +1023,6 @@
1055
1023
  "figure.label.slot-preset-param-upperElevation": "upper tier elevation (mm)",
1056
1024
  "figure.label.slot-preset-param-rows": "rows",
1057
1025
  "figure.label.slot-preset-param-cols": "columns",
1058
- "figure.label.slot-preset-param-stackLimit": "stack limit"
1026
+ "figure.label.slot-preset-param-stackLimit": "stack limit",
1027
+ "figure.label.placement": "fastening"
1059
1028
  }
@@ -15,8 +15,6 @@
15
15
  "figure.button.fix-position": "fijar aquí",
16
16
  "figure.button.scale-position": "en proporción",
17
17
  "figure.button.remeasure-range": "volver a medir",
18
- "figure.label.sizing-rule": "al cambiar el tamaño",
19
- "figure.label.sizing-uniform": "una sola proporción (media geométrica de los tres ejes)",
20
18
  "figure.button.scale-uniformly": "escalar con una sola proporción",
21
19
  "figure.text.sizing-uniform-proposed": "esta figura tiene articulaciones. escalarla con una sola proporción mantiene unidas las articulaciones en cualquier tamaño.",
22
20
  "figure.text.sizing-uniform-explained": "escala toda la figura según la media geométrica de los tres tamaños que le asigna un tablero. los pies quedan en el suelo; el espacio que sobra encima de la figura queda vacío.",
@@ -121,7 +119,6 @@
121
119
  "figure.label.budgets": "límites",
122
120
  "figure.label.by-axis": "madurez por elemento",
123
121
  "figure.label.cast-shadow": "proyectar sombra",
124
- "figure.label.category": "categoría",
125
122
  "figure.label.ceiling-height": "altura del techo (mm)",
126
123
  "figure.label.clip-name": "nombre del clip",
127
124
  "figure.label.clips": "animación (se reproduce en el tiempo)",
@@ -148,7 +145,6 @@
148
145
  "figure.label.environment-sunny": "soleado",
149
146
  "figure.label.environment-warehouse": "almacén",
150
147
  "figure.label.figure": "figura",
151
- "figure.label.figure-placement": "colocación",
152
148
  "figure.label.figure-released": "publicada",
153
149
  "figure.label.figure-type": "tipo",
154
150
  "figure.label.findings": "observaciones",
@@ -158,7 +154,6 @@
158
154
  "figure.label.hemisphere-light": "luz hemisférica",
159
155
  "figure.label.history": "historial",
160
156
  "figure.label.intensity": "intensidad",
161
- "figure.label.joint": "articulación",
162
157
  "figure.label.joint-axis": "eje",
163
158
  "figure.label.joint-limit-max": "máx.",
164
159
  "figure.label.joint-limit-min": "mín.",
@@ -176,7 +171,6 @@
176
171
  "figure.label.key-at": "en (s)",
177
172
  "figure.label.key-at-value": "en (0–1)",
178
173
  "figure.label.key-light": "luz principal",
179
- "figure.label.maturity": "madurez",
180
174
  "figure.label.mode-edit": "editar",
181
175
  "figure.label.mode-preview": "vista previa",
182
176
  "figure.label.motion-intent": "¿qué debe moverse?",
@@ -312,11 +306,6 @@
312
306
  "figure.label.face-inside-right": "interior derecho",
313
307
  "figure.label.face-inside-back": "interior trasero",
314
308
  "figure.label.face-inside-front": "interior delantero",
315
- "figure.label.placement": "sujeción",
316
- "figure.label.placement-ceiling": "basado en el techo (ceiling)",
317
- "figure.label.placement-center": "basado en el centro (center)",
318
- "figure.label.placement-floor": "basado en el suelo (floor)",
319
- "figure.label.placement-limit": "límite de colocación",
320
309
  "figure.label.playback-speed": "velocidad",
321
310
  "figure.label.preset": "ajuste predefinido",
322
311
  "figure.label.preset-ceramic": "cerámica",
@@ -344,9 +333,6 @@
344
333
  "figure.label.reuse-trend": "tendencia de reutilización",
345
334
  "figure.label.instance-count": "número de instancias",
346
335
  "figure.label.rotation-degrees": "rotación (grados)",
347
- "figure.label.rung-flow": "los objetos fluyen a través",
348
- "figure.label.rung-hold": "contiene objetos",
349
- "figure.label.rung-none": "solo dibuja",
350
336
  "figure.label.same-as-off": "igual que apagado",
351
337
  "figure.label.scene-floor": "suelo",
352
338
  "figure.label.scene-reference": "referencia de la escena",
@@ -362,14 +348,12 @@
362
348
  "figure.label.status-colors": "colores encendidos (lámparas · indicadores)",
363
349
  "figure.label.tab-capability": "capacidad",
364
350
  "figure.label.tab-environment": "entorno",
365
- "figure.label.tags": "etiquetas",
366
351
  "figure.label.tools": "alinear",
367
352
  "figure.label.transparent": "transparente",
368
353
  "figure.label.triangles": "triángulos",
369
354
  "figure.label.unit-none": "sin unidad",
370
355
  "figure.label.unit-type-it": "escribirla…",
371
356
  "figure.label.weight": "coste de dibujo",
372
- "figure.label.what-this-does": "qué hace esta figura",
373
357
  "figure.text.accepts-anything": "vacío significa cualquiera",
374
358
  "figure.text.accepts-explained": "tipos permitidos en esta ranura. sepárelos con comas; déjelo vacío para no limitar.",
375
359
  "figure.text.add-a-shape": "haga clic para añadir una pieza",
@@ -475,7 +459,6 @@
475
459
  "figure.text.no-figure-yet": "aún no hay figuras",
476
460
  "figure.text.no-findings": "nada que señalar.",
477
461
  "figure.text.not-measurable-yet": "no medible",
478
- "figure.text.not-measured-yet": "no medido",
479
462
  "figure.text.nothing-released-yet": "aún no hay nada publicado.",
480
463
  "figure.text.on-by-default-explained": "el estado inicial al colocarla en un plano. un valor definido en la instancia tiene prioridad.",
481
464
  "figure.text.other-segment-count": "introduzca un valor",
@@ -486,7 +469,6 @@
486
469
  "figure.text.placement-explained": "define el plano de anclaje en la escena 3D (suelo: AGV/transportador, techo: OHT/polipasto, centro: sensor/dron).",
487
470
  "figure.text.pose-as-default-explained": "Escribe la postura que ha definido como valores predeterminados de los parámetros, para que la figura quede así cuando nadie le dé un valor.",
488
471
  "figure.text.preview-blocked-by-errors": "no se puede mostrar la vista previa por errores de formato. consulte el motivo en la pestaña de madurez.",
489
- "figure.text.preview-needs-a-part": "añada una pieza para ver cómo se ve colocada en un plano.",
490
472
  "figure.text.put-on-floor": "Mueve la pieza una vez para que su base quede en el suelo (Y=0). No se mantiene ahí cuando cambia el tamaño; para ello, use “Seguir el tamaño, unida al suelo”.",
491
473
  "figure.text.range-needs-room": "el máximo debe ser mayor que el mínimo.",
492
474
  "figure.text.release-needs-a-save-first": "hay cambios sin guardar. guarde primero.",
@@ -533,7 +515,6 @@
533
515
  "figure.label.follows-nothing": "fijo",
534
516
  "figure.label.follows-instance": "tamaño de la instancia",
535
517
  "figure.label.follows-instance-share": "en proporción al tamaño",
536
- "figure.label.instance-range": "tamaños en que se puede colocar",
537
518
  "figure.label.follows-part": "otra pieza",
538
519
  "figure.label.times": "veces",
539
520
  "figure.label.plus": "más (mm)",
@@ -588,7 +569,6 @@
588
569
  "figure.label.face-top": "superior",
589
570
  "figure.label.face-back": "trasera",
590
571
  "figure.label.face-front": "delantera",
591
- "figure.label.motion": "Movimiento",
592
572
  "figure.text.motion-explained": "Cómo se mueve esta pieza. Se añade sobre su sujeción, nunca en su lugar.",
593
573
  "figure.label.motion-none": "no se mueve",
594
574
  "figure.label.motion-slide": "deslizamiento",
@@ -627,11 +607,7 @@
627
607
  "figure.label.design-inputs": "entradas de diseño",
628
608
  "figure.text.release-blocked": "La publicación está bloqueada: {count}",
629
609
  "figure.text.release-ready": "Lista para publicar",
630
- "figure.label.places": "Lugares",
631
610
  "figure.text.places-need-a-box": "Un lugar se sitúa en una cara de una pieza con forma de caja.",
632
- "figure.label.place-grip": "Agarre",
633
- "figure.label.place-seat": "Asiento",
634
- "figure.label.place-holds": "hasta {count}",
635
611
  "figure.button.remove-place": "Quitar lugar",
636
612
  "figure.text.place-explained": "Dónde un tablero coloca o sujeta objetos en esta pieza. Cuando la pieza se mueve, lo que sujeta se mueve con ella.",
637
613
  "figure.text.place-needs-holding": "Esta figura no declara que contenga objetos, por lo que un tablero no entrega nada a sus lugares.",
@@ -758,7 +734,6 @@
758
734
  "figure.button.follow-size-in-proportion": "hacer que sigan todas las piezas",
759
735
  "figure.text.proportion-kept": "mantiene su propio número: {what}",
760
736
  "figure.text.preview-clamped": "{axis} {asked} → {used}",
761
- "figure.label.placement-wall": "pared (wall)",
762
737
  "figure.text.placement-plane-refused": "{parts} no puede ir en {placement} por la cara sujeta al plano de montaje. sepárela o sujétela primero por sus caras {faces}.",
763
738
  "figure.label.face-centre": "centro",
764
739
  "figure.label.budget-moving": "piezas recalculadas en cada fotograma",
@@ -995,13 +970,6 @@
995
970
  "figure.label.detail-saved": "Modelo guardado",
996
971
  "figure.text.detail-unreleased": "Aún no publicada. Se muestra el borrador guardado.",
997
972
  "figure.button.detail-edit": "Abrir editor",
998
- "figure.label.detail-size": "Tamaño de colocación",
999
- "figure.button.detail-reset": "Restablecer tamaño y postura",
1000
- "figure.text.detail-transient": "Pruebe aquí tamaños y movimientos. El modelo guardado no cambia.",
1001
- "figure.text.detail-no-motion": "No hay ningún movimiento definido.",
1002
- "figure.text.detail-playing": "Reproduciendo",
1003
- "figure.label.detail-summary": "Coste de dibujo del modelo seleccionado",
1004
- "figure.text.detail-paused": "En pausa",
1005
973
  "figure.button.download-package": "descargar paquete",
1006
974
  "figure.label.group-carrier": "Portador",
1007
975
  "figure.label.carrier-type": "Tipo de portador",
@@ -1055,5 +1023,6 @@
1055
1023
  "figure.label.slot-preset-param-upperElevation": "altura del nivel superior (mm)",
1056
1024
  "figure.label.slot-preset-param-rows": "filas",
1057
1025
  "figure.label.slot-preset-param-cols": "columnas",
1058
- "figure.label.slot-preset-param-stackLimit": "límite de apilado"
1026
+ "figure.label.slot-preset-param-stackLimit": "límite de apilado",
1027
+ "figure.label.placement": "sujeción"
1059
1028
  }
@@ -15,8 +15,6 @@
15
15
  "figure.button.fix-position": "ここに固定",
16
16
  "figure.button.scale-position": "サイズに比例",
17
17
  "figure.button.remeasure-range": "測り直す",
18
- "figure.label.sizing-rule": "when the size changes",
19
- "figure.label.sizing-uniform": "一つの比率 (3 軸の幾何平均)",
20
18
  "figure.button.scale-uniformly": "一つの比率で拡大",
21
19
  "figure.text.sizing-uniform-proposed": "関節のある図形です。一つの比率で拡大すると、どのサイズでも関節が離れません。",
22
20
  "figure.text.sizing-uniform-explained": "ボードが与えた 3 軸サイズの幾何平均の比率で図形全体を拡大します。足は床に置き、箱の上の余りは空けたままにします。",
@@ -121,7 +119,6 @@
121
119
  "figure.label.budgets": "budgets",
122
120
  "figure.label.by-axis": "項目別の成熟度",
123
121
  "figure.label.cast-shadow": "cast shadow",
124
- "figure.label.category": "分類",
125
122
  "figure.label.ceiling-height": "天井高さ (mm)",
126
123
  "figure.label.clip-name": "clip 名",
127
124
  "figure.label.clips": "アニメーション (時間に沿って再生)",
@@ -148,7 +145,6 @@
148
145
  "figure.label.environment-sunny": "sunny",
149
146
  "figure.label.environment-warehouse": "warehouse",
150
147
  "figure.label.figure": "Figure",
151
- "figure.label.figure-placement": "配置基準",
152
148
  "figure.label.figure-released": "公開済み",
153
149
  "figure.label.figure-type": "タイプ",
154
150
  "figure.label.findings": "findings",
@@ -158,7 +154,6 @@
158
154
  "figure.label.hemisphere-light": "hemisphere light",
159
155
  "figure.label.history": "履歴",
160
156
  "figure.label.intensity": "intensity",
161
- "figure.label.joint": "関節",
162
157
  "figure.label.joint-axis": "軸",
163
158
  "figure.label.joint-limit-max": "最大",
164
159
  "figure.label.joint-limit-min": "最小",
@@ -176,7 +171,6 @@
176
171
  "figure.label.key-at": "時刻 (秒)",
177
172
  "figure.label.key-at-value": "値の位置 (0〜1)",
178
173
  "figure.label.key-light": "key light",
179
- "figure.label.maturity": "maturity",
180
174
  "figure.label.mode-edit": "edit",
181
175
  "figure.label.mode-preview": "preview",
182
176
  "figure.label.motion-intent": "何を動かしますか?",
@@ -312,11 +306,6 @@
312
306
  "figure.label.face-inside-right": "inside right",
313
307
  "figure.label.face-inside-back": "inside back",
314
308
  "figure.label.face-inside-front": "inside front",
315
- "figure.label.placement": "取り付け",
316
- "figure.label.placement-ceiling": "天井基準 (ceiling)",
317
- "figure.label.placement-center": "中心基準 (center)",
318
- "figure.label.placement-floor": "床基準 (floor)",
319
- "figure.label.placement-limit": "配置上限",
320
309
  "figure.label.playback-speed": "再生速度",
321
310
  "figure.label.preset": "preset",
322
311
  "figure.label.preset-ceramic": "ceramic",
@@ -344,9 +333,6 @@
344
333
  "figure.label.reuse-trend": "reuse trend",
345
334
  "figure.label.instance-count": "インスタンス数",
346
335
  "figure.label.rotation-degrees": "rotation (degrees)",
347
- "figure.label.rung-flow": "流れる",
348
- "figure.label.rung-hold": "載せる",
349
- "figure.label.rung-none": "描くだけ",
350
336
  "figure.label.same-as-off": "same as unlit",
351
337
  "figure.label.scene-floor": "floor",
352
338
  "figure.label.scene-reference": "シーン座標の基準",
@@ -362,14 +348,12 @@
362
348
  "figure.label.status-colors": "lit colors (lamps · indicators)",
363
349
  "figure.label.tab-capability": "能力",
364
350
  "figure.label.tab-environment": "環境",
365
- "figure.label.tags": "タグ",
366
351
  "figure.label.tools": "align",
367
352
  "figure.label.transparent": "transparent",
368
353
  "figure.label.triangles": "triangles",
369
354
  "figure.label.unit-none": "単位なし",
370
355
  "figure.label.unit-type-it": "直接入力…",
371
356
  "figure.label.weight": "描画コスト",
372
- "figure.label.what-this-does": "この Figure の役割",
373
357
  "figure.text.accepts-anything": "空欄なら何でも可",
374
358
  "figure.text.accepts-explained": "このスロットに置けるタイプです。カンマで区切り、空欄なら制限はありません。",
375
359
  "figure.text.add-a-shape": "click to add a part",
@@ -475,7 +459,6 @@
475
459
  "figure.text.no-figure-yet": "no figures yet",
476
460
  "figure.text.no-findings": "nothing to report.",
477
461
  "figure.text.not-measurable-yet": "not measurable",
478
- "figure.text.not-measured-yet": "not measured",
479
462
  "figure.text.nothing-released-yet": "まだ発行したバージョンがありません。",
480
463
  "figure.text.on-by-default-explained": "図面に置いたときの最初の状態です。インスタンスで切り替えた値が優先されます。",
481
464
  "figure.text.other-segment-count": "enter a value",
@@ -486,7 +469,6 @@
486
469
  "figure.text.placement-explained": "3D シーンでの基準面を決めます (床: AGV/コンベヤ、天井: OHT/ホイスト、中心: センサー/ドローン)。",
487
470
  "figure.text.pose-as-default-explained": "今の姿勢をパラメータの既定値として書き込みます。値が与えられないとき、この姿勢で立ちます。",
488
471
  "figure.text.preview-blocked-by-errors": "形式エラーのためプレビューを表示できません。成熟度タブで理由を確認してください。",
489
- "figure.text.preview-needs-a-part": "部品を追加すると、図面に置いたときの姿が表示されます。",
490
472
  "figure.text.put-on-floor": "今の位置だけ底面を床(Y=0)に合わせます。サイズが変わると追従しません。付けたままにするには「床に付けてサイズに追従」を使ってください。",
491
473
  "figure.text.range-needs-room": "最大は最小より大きくする必要があります。",
492
474
  "figure.text.release-needs-a-save-first": "保存していない変更があります。先に保存してください。",
@@ -533,7 +515,6 @@
533
515
  "figure.label.follows-nothing": "fixed",
534
516
  "figure.label.follows-instance": "instance size",
535
517
  "figure.label.follows-instance-share": "サイズに比例",
536
- "figure.label.instance-range": "置けるサイズ",
537
518
  "figure.label.follows-part": "another part",
538
519
  "figure.label.times": "times",
539
520
  "figure.label.plus": "plus (mm)",
@@ -588,7 +569,6 @@
588
569
  "figure.label.face-top": "top",
589
570
  "figure.label.face-back": "back",
590
571
  "figure.label.face-front": "front",
591
- "figure.label.motion": "Motion",
592
572
  "figure.text.motion-explained": "How this part moves. Added on top of its fastening, never instead of it.",
593
573
  "figure.label.motion-none": "does not move",
594
574
  "figure.label.motion-slide": "slide",
@@ -627,11 +607,7 @@
627
607
  "figure.label.design-inputs": "design inputs",
628
608
  "figure.text.release-blocked": "Release is blocked — {count}",
629
609
  "figure.text.release-ready": "Ready to release",
630
- "figure.label.places": "置き場所",
631
610
  "figure.text.places-need-a-box": "置き場所は箱形の部品の面に置きます。",
632
- "figure.label.place-grip": "つかむ場所",
633
- "figure.label.place-seat": "載せる場所",
634
- "figure.label.place-holds": "{count}個まで",
635
611
  "figure.button.remove-place": "置き場所を削除",
636
612
  "figure.text.place-explained": "ボード上で物をこの部品のどの面に載せるか、つかむかを決めます。部品が動くと物も一緒に動きます。",
637
613
  "figure.text.place-needs-holding": "この図形は物を保持すると宣言していないため、置き場所を作ってもボードは物を渡しません。",
@@ -758,7 +734,6 @@
758
734
  "figure.button.follow-size-in-proportion": "すべての部品を追従させる",
759
735
  "figure.text.proportion-kept": "固有の数値のまま: {what}",
760
736
  "figure.text.preview-clamped": "{axis} {asked} → {used}",
761
- "figure.label.placement-wall": "壁基準 (wall)",
762
737
  "figure.text.placement-plane-refused": "{parts} は取付平面に付いている面では {placement} に付けられません。外すか {faces} 面で付け直してから変更してください。",
763
738
  "figure.label.face-centre": "中心",
764
739
  "figure.label.budget-moving": "毎フレーム再計算する部品",
@@ -995,13 +970,6 @@
995
970
  "figure.label.detail-saved": "保存版",
996
971
  "figure.text.detail-unreleased": "まだ公開されていません。保存された下書きを表示します。",
997
972
  "figure.button.detail-edit": "編集画面を開く",
998
- "figure.label.detail-size": "配置サイズ",
999
- "figure.button.detail-reset": "基準サイズと姿勢に戻す",
1000
- "figure.text.detail-transient": "サイズと動きはここでのみ試します。保存されたモデルは変更されません。",
1001
- "figure.text.detail-no-motion": "登録された動きがありません。",
1002
- "figure.text.detail-playing": "再生中",
1003
- "figure.label.detail-summary": "選択したモデルの描画コスト",
1004
- "figure.text.detail-paused": "一時停止",
1005
973
  "figure.button.download-package": "パッケージをダウンロード",
1006
974
  "figure.label.group-carrier": "キャリア",
1007
975
  "figure.label.carrier-type": "キャリアタイプ",
@@ -1055,5 +1023,6 @@
1055
1023
  "figure.label.slot-preset-param-upperElevation": "上段の高さ (mm)",
1056
1024
  "figure.label.slot-preset-param-rows": "行",
1057
1025
  "figure.label.slot-preset-param-cols": "列",
1058
- "figure.label.slot-preset-param-stackLimit": "段積み数"
1026
+ "figure.label.slot-preset-param-stackLimit": "段積み数",
1027
+ "figure.label.placement": "取り付け"
1059
1028
  }