@things-factory/figure-ui 10.1.95 → 10.1.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/modeller/editor.ts +16 -18
- package/client/modeller/figure-links.ts +5 -4
- package/client/modeller/figure-section-panel.ts +1 -5
- package/client/modeller/links.ts +49 -23
- package/dist-client/modeller/editor.d.ts +4 -4
- package/dist-client/modeller/editor.js +17 -19
- package/dist-client/modeller/editor.js.map +1 -1
- package/dist-client/modeller/figure-links.js +5 -4
- package/dist-client/modeller/figure-links.js.map +1 -1
- package/dist-client/modeller/figure-section-panel.js +1 -5
- package/dist-client/modeller/figure-section-panel.js.map +1 -1
- package/dist-client/modeller/links.d.ts +14 -4
- package/dist-client/modeller/links.js +51 -23
- package/dist-client/modeller/links.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/test/command-preview.test.ts +3 -3
- package/test/first-minute.test.ts +13 -6
- package/test/section-panel.test.ts +2 -2
- package/translations/en.json +18 -10
- package/translations/ja.json +18 -10
- package/translations/ko.json +18 -10
- package/translations/ms.json +18 -10
- package/translations/zh.json +18 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/figure-ui",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.96",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"@things-factory:registry": "https://registry.npmjs.org"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"@things-factory/figure-service": "^10.1.84",
|
|
45
45
|
"three": "^0.185.1"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "887215e06d3ecd3627209631dd8abcd4d88446d1"
|
|
48
48
|
}
|
|
@@ -116,13 +116,13 @@ test('detaching says what it would do: stays, what stays fastened to it, the cli
|
|
|
116
116
|
assert.equal(s.read().revision, 0)
|
|
117
117
|
const editor = read('../client/modeller/editor.ts')
|
|
118
118
|
assert.ok(editor.includes("const own = seen.moves.some(m => m.body === this.selected)"))
|
|
119
|
-
|
|
120
|
-
assert.
|
|
119
|
+
/* Staying where it is is as expected: nothing is said then (user 2026-10-01); a move, a child kept, a clip lost are. */
|
|
120
|
+
assert.ok(editor.includes(': /* It stays where it is: as expected, so nothing is said (user 2026-10-01). */ []'), 'nothing said when it stays')
|
|
121
121
|
const links = read('../client/modeller/figure-links.ts')
|
|
122
122
|
assert.equal(links.match(/\$\{this\.renderDetachWords\(\)\}/g)?.length, 2, 'beside both buttons that detach')
|
|
123
123
|
for (const lang of ['en', 'ja', 'ko', 'ms', 'zh']) {
|
|
124
124
|
const t = JSON.parse(read(`../translations/${lang}.json`))
|
|
125
|
-
for (const key of ['detach-
|
|
125
|
+
for (const key of ['detach-moves', 'detach-keeps-children', 'detach-clips', 'detach-refused']) assert.ok(t[`figure.text.${key}`], `${lang} ${key}`)
|
|
126
126
|
}
|
|
127
127
|
})
|
|
128
128
|
|
|
@@ -13,15 +13,22 @@ import { partSummaryOf } from '../client/modeller/links.js'
|
|
|
13
13
|
const read = (path: string) => readFileSync(new URL(path, import.meta.url), 'utf-8')
|
|
14
14
|
const say = (key: string, params: Record<string, string> = {}) => `${key}${Object.keys(params).length ? JSON.stringify(params) : ''}`
|
|
15
15
|
|
|
16
|
-
test('a selected part
|
|
16
|
+
test('a selected part at the head: its kind, and what its size follows only when it follows something (user 2026-10-01)', async () => {
|
|
17
|
+
const { particlesOf } = await import('../client/modeller/links.js')
|
|
18
|
+
const ko = JSON.parse(read('../translations/ko.json')) as Record<string, string>
|
|
19
|
+
const sayKo = (key: string, params: Record<string, string> = {}) => Object.entries(params).reduce((t, [k, v]) => t.split(`{${k}}`).join(v), ko[key] ?? key)
|
|
17
20
|
let a = addFigureBox(createFigureAsset('UX'), { id: 'box', size: { x: 100, y: 100, z: 100 }, position: { x: 0, y: 50, z: 0 } })
|
|
18
21
|
a = applyFigureAuthoring(a, { kind: 'declare-occupancy', proposal: proposeFigureOccupancy(a), placement: 'floor' })
|
|
19
|
-
|
|
22
|
+
/* As usual -- a size of its own, loose: nothing but what it is. */
|
|
23
|
+
assert.deepEqual(partSummaryOf(a, 'box', say), { kind: 'figure.label.primitive-cube', size: '' })
|
|
20
24
|
const only = applyFigureProposal(a, planFigureResize(a, { part: 'box', axes: ['x'] }).steps)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
assert.equal(partSummaryOf(only, 'box', sayKo).size, '너비는 모델 크기를 따라 바뀝니다.')
|
|
26
|
+
/* Another part's measure, said by name -- not 「규칙을 따름」. */
|
|
27
|
+
let two = addFigureBox(a, { id: 'bed', size: { x: 800, y: 50, z: 400 }, position: { x: 0, y: 25, z: 0 } })
|
|
28
|
+
two = applyFigureAuthoring(two, { kind: 'link-dimension', part: 'box', axis: 'y', source: { of: 'part', part: 'bed', axis: 'x' } } as never)
|
|
29
|
+
assert.equal(partSummaryOf(two, 'box', sayKo).size, '높이는 bed의 너비와 같습니다.')
|
|
30
|
+
assert.deepEqual([particlesOf('지름', 'ko'), particlesOf('높이', 'ko')], [{ topic: '지름은', with: '지름과' }, { topic: '높이는', with: '높이와' }])
|
|
31
|
+
assert.ok(!/규칙을 따름|규칙으로 결정됨|규칙이 정하는|도형을 따라감|크기 고정|붙임 없음/.test(JSON.stringify(ko)), 'the words nobody knew are gone')
|
|
25
32
|
})
|
|
26
33
|
|
|
27
34
|
test('a new figure asks what to start with -- a shape, a recipe, an AI draft where offered -- and adds nothing by itself', () => {
|
|
@@ -149,8 +149,8 @@ test('치는 동안의 값은 사본에 그려지고 원본은 그대로다 —
|
|
|
149
149
|
})
|
|
150
150
|
|
|
151
151
|
test('다각 단면에는 속 공간을 만들 수 없다고 그 자리에서 말한다', () => {
|
|
152
|
-
has
|
|
153
|
-
|
|
152
|
+
/* A drawn section has no inside control at all, rather than a line saying it cannot have one (user 2026-10-01). */
|
|
153
|
+
has(panel, /kind === 'rectangle' \|\| kind === 'ellipse' \? this\.renderCavity\(body, e\.axis\) : nothing/)
|
|
154
154
|
})
|
|
155
155
|
|
|
156
156
|
test('붙어 있는 것이 기대는 면을 없애는 편집은 거절되고, 그 면을 사람의 말로 부른다', () => {
|
package/translations/en.json
CHANGED
|
@@ -222,7 +222,6 @@
|
|
|
222
222
|
"figure.text.section-issue-too-few": "A section needs three points or more.",
|
|
223
223
|
"figure.text.section-issue-too-many": "A section can have up to {limit} points.",
|
|
224
224
|
"figure.text.section-issue-number": "Type a number.",
|
|
225
|
-
"figure.text.section-cavity-unavailable": "This outline cannot have an inside. An inside is made in a rectangle or circle section.",
|
|
226
225
|
"figure.text.section-corner-over": "The corner radius can be at most {max} mm.",
|
|
227
226
|
"figure.text.section-at-most": "at most {max} mm",
|
|
228
227
|
"figure.text.section-not-positive": "The thickness must be more than 0.",
|
|
@@ -546,7 +545,6 @@
|
|
|
546
545
|
"figure.text.overhang-side-low": "{axis} low side {mm} mm",
|
|
547
546
|
"figure.text.overhang-side-high": "{axis} high side {mm} mm",
|
|
548
547
|
"figure.button.fix-alignment": "change alignment and gap",
|
|
549
|
-
"figure.text.detach-stays": "Detached, it stays where it stands now; only its fastening to {from} goes.",
|
|
550
548
|
"figure.text.detach-moves": "Detached, it moves:",
|
|
551
549
|
"figure.text.detach-keeps-children": "Parts fastened to it ({parts}) stay fastened to it.",
|
|
552
550
|
"figure.text.detach-clips": "Detaching removes clips: {clips}. You will be asked when you detach.",
|
|
@@ -781,7 +779,6 @@
|
|
|
781
779
|
"figure.text.placement-intent-wall": "Wall placement: the back keeps its current distance from the wall (Z=0) as the size changes. Its place on the wall (X, Y) stays.",
|
|
782
780
|
"figure.text.placement-intent-center": "Centre placement: the centre stays where it is and only the size follows. Nothing is attached to a floor, ceiling or wall.",
|
|
783
781
|
"figure.label.resize-intent": "When the equipment is resized",
|
|
784
|
-
"figure.text.resize-intent": "Each direction shows its size now and what it follows. Choose the directions to follow below, and apply them with where the part stays.",
|
|
785
782
|
"figure.label.resize-diameter": "Diameter (X and Z)",
|
|
786
783
|
"figure.label.resize-x": "Width (X)",
|
|
787
784
|
"figure.label.resize-y": "Height (Y)",
|
|
@@ -807,7 +804,7 @@
|
|
|
807
804
|
"figure.text.resize-refused-dimension-rule": "A dimension of {part} already follows another rule. Change that rule directly in the advanced settings.",
|
|
808
805
|
"figure.text.resize-refused-position-rule": "The {axis} position of {part} is set by an input or an expression. Applying this replaces it with the {place} relation.",
|
|
809
806
|
"figure.text.resize-refused-no-face": "{part} has no flat face to attach to the {place}.",
|
|
810
|
-
"figure.text.axis-held-by-rule": "
|
|
807
|
+
"figure.text.axis-held-by-rule": "cannot be typed here",
|
|
811
808
|
"figure.label.room-only-inputs": "Used only to work out the placement space",
|
|
812
809
|
"figure.text.room-only-inputs": "These values do not move the part. The declared space is worked out from them.",
|
|
813
810
|
"figure.button.room-refit": "Work out the space again…",
|
|
@@ -844,7 +841,6 @@
|
|
|
844
841
|
"figure.button.resize-scoped-wall": "{scope}: follow size, attached to the wall",
|
|
845
842
|
"figure.button.resize-scoped-center": "{scope}: follow size, keeping the current centre",
|
|
846
843
|
"figure.text.resize-move": "(moves {mm} mm on {axis})",
|
|
847
|
-
"figure.text.axes-held-by-rule": "{group} {axes}: set by a rule, read-only",
|
|
848
844
|
"figure.text.held-by-rule": "A rule places this part.",
|
|
849
845
|
"figure.text.held-on-plane": "{face} kept on the {place} (gap {gap} mm)",
|
|
850
846
|
"figure.text.held-on-part": "Attached by its {face} to the {otherFace} of {other}",
|
|
@@ -873,10 +869,6 @@
|
|
|
873
869
|
"figure.text.empty-figure-next": "Add a part to see its size and placement.",
|
|
874
870
|
"figure.label.figure-info-later": "Figure information · you can set this later",
|
|
875
871
|
"figure.text.parts-panel-folded-narrow": "The screen is narrow, so the parts list is folded. The panel button in the toolbar opens it again.",
|
|
876
|
-
"figure.text.summary-follows": "{axes} follow the figure",
|
|
877
|
-
"figure.text.summary-ruled": "{axes} follow a rule",
|
|
878
|
-
"figure.text.summary-size-fixed": "Size fixed",
|
|
879
|
-
"figure.text.summary-free": "Placed by its own position · not attached",
|
|
880
872
|
"figure.text.ai-draft-request": "Please draft a new figure. The equipment: ",
|
|
881
873
|
"figure.text.start-no-recipes": "No recipes are available yet.",
|
|
882
874
|
"figure.label.start-placement": "Where does it go?",
|
|
@@ -959,5 +951,21 @@
|
|
|
959
951
|
"figure.text.fasten-past-edges": "It comes past the edges: {sides}",
|
|
960
952
|
"figure.text.fasten-sentence-meet": "{part}'s {face} set on {to}",
|
|
961
953
|
"figure.text.fasten-sentence-flush": "{part}'s {face} flush with {to}",
|
|
962
|
-
"figure.text.fasten-sentence-centre": "{part}'s centre on {to}"
|
|
954
|
+
"figure.text.fasten-sentence-centre": "{part}'s centre on {to}",
|
|
955
|
+
"figure.label.measure-x": "width",
|
|
956
|
+
"figure.label.measure-y": "height",
|
|
957
|
+
"figure.label.measure-z": "depth",
|
|
958
|
+
"figure.label.measure-diameter": "diameter",
|
|
959
|
+
"figure.text.summary-size-follows": "Its {axes} follows the model's size.",
|
|
960
|
+
"figure.text.summary-size-follows-plus": "Its {axes} is the model's size plus {plus} mm.",
|
|
961
|
+
"figure.text.summary-size-share": "Its {axes} is {pct}% of the model's {whole}.",
|
|
962
|
+
"figure.text.summary-size-share-plus": "Its {axes} is {pct}% of the model's {whole} plus {plus} mm.",
|
|
963
|
+
"figure.text.summary-size-part": "Its {axes} equals {other}'s {measure}.",
|
|
964
|
+
"figure.text.summary-size-part-plus": "Its {axes} is {other}'s {measureWord} plus {plus} mm.",
|
|
965
|
+
"figure.text.summary-size-part-share": "Its {axes} is {pct}% of {other}'s {measureWord}.",
|
|
966
|
+
"figure.text.summary-size-part-share-plus": "Its {axes} is {pct}% of {other}'s {measureWord} plus {plus} mm.",
|
|
967
|
+
"figure.text.summary-size-input": "Its {axes} follows {field}.",
|
|
968
|
+
"figure.text.summary-size-worked-out": "Its {axes} is worked out from other measures.",
|
|
969
|
+
"figure.text.held-by-fastening": "It is fastened: its place and turn are set in 붙이기.",
|
|
970
|
+
"figure.text.held-worked-out": "{group} are worked out from other values and cannot be typed here."
|
|
963
971
|
}
|
package/translations/ja.json
CHANGED
|
@@ -222,7 +222,6 @@
|
|
|
222
222
|
"figure.text.section-issue-too-few": "断面には三点以上が必要です。",
|
|
223
223
|
"figure.text.section-issue-too-many": "点は {limit} 個までです。",
|
|
224
224
|
"figure.text.section-issue-number": "数値を入力してください。",
|
|
225
|
-
"figure.text.section-cavity-unavailable": "この輪郭には内部の空間をつくれません。内部の空間は四角形と円の断面につくります。",
|
|
226
225
|
"figure.text.section-corner-over": "角の半径は {max} mm までです。",
|
|
227
226
|
"figure.text.section-at-most": "最大 {max} mm",
|
|
228
227
|
"figure.text.section-not-positive": "厚さは 0 より大きくしてください。",
|
|
@@ -546,7 +545,6 @@
|
|
|
546
545
|
"figure.text.overhang-side-low": "{axis} 低い側 {mm} mm",
|
|
547
546
|
"figure.text.overhang-side-high": "{axis} 高い側 {mm} mm",
|
|
548
547
|
"figure.button.fix-alignment": "位置合わせ・間隔を直す",
|
|
549
|
-
"figure.text.detach-stays": "外しても今の位置に残り、{from} との取り付けだけがなくなります。",
|
|
550
548
|
"figure.text.detach-moves": "外すと位置が変わります:",
|
|
551
549
|
"figure.text.detach-keeps-children": "この部品に取り付いた部品({parts})はそのまま取り付いています。",
|
|
552
550
|
"figure.text.detach-clips": "外すとクリップが削除されます: {clips}。外すときにもう一度確認します。",
|
|
@@ -781,7 +779,6 @@
|
|
|
781
779
|
"figure.text.placement-intent-wall": "壁配置: 背面は壁(Z=0)からの今の間隔を保ったまま、サイズに追従します。壁の上の位置(X・Y)はそのままです。",
|
|
782
780
|
"figure.text.placement-intent-center": "中心配置: 今の中心位置はそのままで、サイズだけ追従します。床・天井・壁には付けません。",
|
|
783
781
|
"figure.label.resize-intent": "この部品はサイズが変わると",
|
|
784
|
-
"figure.text.resize-intent": "方向ごとに今の寸法とサイズ追従があります。下で追従する方向を選び、付けておく場所と一緒に適用してください。",
|
|
785
782
|
"figure.label.resize-diameter": "直径 (X・Z)",
|
|
786
783
|
"figure.label.resize-x": "幅 (X)",
|
|
787
784
|
"figure.label.resize-y": "高さ (Y)",
|
|
@@ -807,7 +804,7 @@
|
|
|
807
804
|
"figure.text.resize-refused-dimension-rule": "{part} の寸法はすでに別の規則に従っています。詳細設定でその規則を直接変更してください。",
|
|
808
805
|
"figure.text.resize-refused-position-rule": "{part} の {axis} 位置は入力値か式で決まっています。適用するとその規則の代わりに{place}との関係が位置を決めます。",
|
|
809
806
|
"figure.text.resize-refused-no-face": "{part} には{place}に付ける平らな面がありません。",
|
|
810
|
-
"figure.text.axis-held-by-rule": "
|
|
807
|
+
"figure.text.axis-held-by-rule": "ここでは変更できない値です",
|
|
811
808
|
"figure.label.room-only-inputs": "配置空間の計算にだけ使用",
|
|
812
809
|
"figure.text.room-only-inputs": "この値は部品を動かしません。宣言した空間がこの値から計算されています。",
|
|
813
810
|
"figure.button.room-refit": "空間を計算し直す…",
|
|
@@ -844,7 +841,6 @@
|
|
|
844
841
|
"figure.button.resize-scoped-wall": "{scope}を壁に付けてサイズに追従",
|
|
845
842
|
"figure.button.resize-scoped-center": "{scope}を今の中心を保ってサイズに追従",
|
|
846
843
|
"figure.text.resize-move": "({axis} {mm} mm 移動)",
|
|
847
|
-
"figure.text.axes-held-by-rule": "{group} {axes}: 規則で決定 — 読み取り専用",
|
|
848
844
|
"figure.text.held-by-rule": "規則がこの部品の位置を決めます。",
|
|
849
845
|
"figure.text.held-on-plane": "{face}を{place}に保持中 (間隔 {gap} mm)",
|
|
850
846
|
"figure.text.held-on-part": "{other}の{otherFace}に{face}で取り付け",
|
|
@@ -873,10 +869,6 @@
|
|
|
873
869
|
"figure.text.empty-figure-next": "部品を追加するとサイズと配置を確認できます。",
|
|
874
870
|
"figure.label.figure-info-later": "モデル情報 · 後で決めてもかまいません",
|
|
875
871
|
"figure.text.parts-panel-folded-narrow": "画面が狭いため部品一覧を折りたたみました。ツールバーのパネルボタンで再び開けます。",
|
|
876
|
-
"figure.text.summary-follows": "{axes}は図形に追従",
|
|
877
|
-
"figure.text.summary-ruled": "{axes}は規則に従う",
|
|
878
|
-
"figure.text.summary-size-fixed": "サイズ固定",
|
|
879
|
-
"figure.text.summary-free": "自分の位置に配置 · 取り付けなし",
|
|
880
872
|
"figure.text.ai-draft-request": "新しい Figure の下書きを作ってください。作る設備: ",
|
|
881
873
|
"figure.text.start-no-recipes": "まだ部品セットがありません。",
|
|
882
874
|
"figure.label.start-placement": "どこに置く設備ですか?",
|
|
@@ -959,5 +951,21 @@
|
|
|
959
951
|
"figure.text.fasten-past-edges": "縁からはみ出しています: {sides}",
|
|
960
952
|
"figure.text.fasten-sentence-meet": "{part}の{face}を{to}に接して",
|
|
961
953
|
"figure.text.fasten-sentence-flush": "{part}の{face}を{to}と同じ面に",
|
|
962
|
-
"figure.text.fasten-sentence-centre": "{part}の中心を{to}の上に"
|
|
954
|
+
"figure.text.fasten-sentence-centre": "{part}の中心を{to}の上に",
|
|
955
|
+
"figure.label.measure-x": "幅",
|
|
956
|
+
"figure.label.measure-y": "高さ",
|
|
957
|
+
"figure.label.measure-z": "奥行き",
|
|
958
|
+
"figure.label.measure-diameter": "直径",
|
|
959
|
+
"figure.text.summary-size-follows": "{axes}はモデルの大きさに合わせて変わります。",
|
|
960
|
+
"figure.text.summary-size-follows-plus": "{axes}はモデルの大きさに {plus} mm を足した値です。",
|
|
961
|
+
"figure.text.summary-size-share": "{axes}はモデルの{whole}の {pct}% です。",
|
|
962
|
+
"figure.text.summary-size-share-plus": "{axes}はモデルの{whole}の {pct}% に {plus} mm を足した値です。",
|
|
963
|
+
"figure.text.summary-size-part": "{axes}は{other}の{measure}と同じです。",
|
|
964
|
+
"figure.text.summary-size-part-plus": "{axes}は{other}の{measureWord}に {plus} mm を足した値です。",
|
|
965
|
+
"figure.text.summary-size-part-share": "{axes}は{other}の{measureWord}の {pct}% です。",
|
|
966
|
+
"figure.text.summary-size-part-share-plus": "{axes}は{other}の{measureWord}の {pct}% に {plus} mm を足した値です。",
|
|
967
|
+
"figure.text.summary-size-input": "{axes}は{field}に従います。",
|
|
968
|
+
"figure.text.summary-size-worked-out": "{axes}は他の寸法から計算されます。",
|
|
969
|
+
"figure.text.held-by-fastening": "取り付けられているため、位置と回転は取り付けで決めます。",
|
|
970
|
+
"figure.text.held-worked-out": "{group}は他の値から計算されるため、ここでは変更できません。"
|
|
963
971
|
}
|
package/translations/ko.json
CHANGED
|
@@ -222,7 +222,6 @@
|
|
|
222
222
|
"figure.text.section-issue-too-few": "점이 세 개보다 적으면 단면이 되지 않습니다.",
|
|
223
223
|
"figure.text.section-issue-too-many": "점은 {limit}개까지 둘 수 있습니다.",
|
|
224
224
|
"figure.text.section-issue-number": "숫자를 입력해 주세요.",
|
|
225
|
-
"figure.text.section-cavity-unavailable": "이 윤곽에는 속 공간을 만들 수 없습니다. 속 공간은 사각형과 원 단면에 만듭니다.",
|
|
226
225
|
"figure.text.section-corner-over": "모서리 반지름은 {max} mm 까지입니다.",
|
|
227
226
|
"figure.text.section-at-most": "최대 {max} mm",
|
|
228
227
|
"figure.text.section-not-positive": "두께는 0 보다 커야 합니다.",
|
|
@@ -546,7 +545,6 @@
|
|
|
546
545
|
"figure.text.overhang-side-low": "{axis} 낮은 쪽 {mm} mm",
|
|
547
546
|
"figure.text.overhang-side-high": "{axis} 높은 쪽 {mm} mm",
|
|
548
547
|
"figure.button.fix-alignment": "정렬·간격 고치기",
|
|
549
|
-
"figure.text.detach-stays": "떼면 지금 자리에 그대로 남고, {from}과의 붙임만 없어집니다.",
|
|
550
548
|
"figure.text.detach-moves": "떼면 자리가 바뀝니다:",
|
|
551
549
|
"figure.text.detach-keeps-children": "이 부품에 붙은 부품({parts})은 그대로 이 부품에 붙어 있습니다.",
|
|
552
550
|
"figure.text.detach-clips": "떼면 클립이 지워집니다: {clips}. 뗄 때 다시 묻습니다.",
|
|
@@ -781,7 +779,6 @@
|
|
|
781
779
|
"figure.text.placement-intent-wall": "벽 배치: 뒷면을 벽(Z=0)에서 지금 간격 그대로 유지하며 크기를 따라갑니다. 벽 위의 위치(X·Y)는 그대로입니다.",
|
|
782
780
|
"figure.text.placement-intent-center": "중심 배치: 지금 중심 위치를 그대로 두고 크기만 따라갑니다. 바닥·천장·벽에 붙이지 않습니다.",
|
|
783
781
|
"figure.label.resize-intent": "이 부품은 크기가 바뀔 때",
|
|
784
|
-
"figure.text.resize-intent": "지금은 고정 크기입니다. 모델 크기가 바뀔 때 이 부품도 함께 바꿀지 정할 수 있습니다.",
|
|
785
782
|
"figure.label.resize-diameter": "지름 (X·Z 함께)",
|
|
786
783
|
"figure.label.resize-x": "너비 (X)",
|
|
787
784
|
"figure.label.resize-y": "높이 (Y)",
|
|
@@ -807,7 +804,7 @@
|
|
|
807
804
|
"figure.text.resize-refused-dimension-rule": "{part} 부품의 치수가 이미 다른 규칙을 따릅니다. 그 규칙을 세부 설정에서 직접 바꾸세요.",
|
|
808
805
|
"figure.text.resize-refused-position-rule": "{part} 부품의 {axis} 위치는 입력값이나 식으로 정해져 있습니다. 적용하면 그 규칙 대신 {place} 관계가 위치를 정합니다.",
|
|
809
806
|
"figure.text.resize-refused-no-face": "{part} 부품에는 {place}에 붙일 평평한 면이 없습니다.",
|
|
810
|
-
"figure.text.axis-held-by-rule": "
|
|
807
|
+
"figure.text.axis-held-by-rule": "여기서 고칠 수 없는 값입니다",
|
|
811
808
|
"figure.label.room-only-inputs": "배치 공간 계산에만 사용됨",
|
|
812
809
|
"figure.text.room-only-inputs": "이 값은 부품을 움직이지 않습니다. 선언한 공간이 이 값으로 계산되어 있습니다.",
|
|
813
810
|
"figure.button.room-refit": "공간 다시 계산…",
|
|
@@ -844,7 +841,6 @@
|
|
|
844
841
|
"figure.button.resize-scoped-wall": "{scope} 벽에 붙여 크기 따라가기",
|
|
845
842
|
"figure.button.resize-scoped-center": "{scope} 현재 중심을 유지하며 크기 따라가기",
|
|
846
843
|
"figure.text.resize-move": "({axis} {mm} mm 이동)",
|
|
847
|
-
"figure.text.axes-held-by-rule": "{group} {axes}: 규칙으로 결정됨 — 읽기 전용",
|
|
848
844
|
"figure.text.held-by-rule": "규칙이 이 부품의 자리를 정합니다.",
|
|
849
845
|
"figure.text.held-on-plane": "{face}을 {place}에 유지 중 (간격 {gap} mm)",
|
|
850
846
|
"figure.text.held-on-part": "{other}의 {otherFace}에 {face}으로 붙어 있음",
|
|
@@ -873,10 +869,6 @@
|
|
|
873
869
|
"figure.text.empty-figure-next": "부품을 추가하면 크기와 배치를 확인할 수 있습니다.",
|
|
874
870
|
"figure.label.figure-info-later": "모델 정보 · 나중에 정해도 됩니다",
|
|
875
871
|
"figure.text.parts-panel-folded-narrow": "화면이 좁아 부품 목록을 접었습니다. 도구 막대의 패널 버튼으로 다시 열 수 있습니다.",
|
|
876
|
-
"figure.text.summary-follows": "도형을 따라감: {axes}",
|
|
877
|
-
"figure.text.summary-ruled": "규칙을 따름: {axes}",
|
|
878
|
-
"figure.text.summary-size-fixed": "크기 고정",
|
|
879
|
-
"figure.text.summary-free": "제 위치에 놓임 · 붙임 없음",
|
|
880
872
|
"figure.text.ai-draft-request": "새 Figure 초안을 만들어 주세요. 만들려는 설비: ",
|
|
881
873
|
"figure.text.start-no-recipes": "아직 등록된 조각이 없습니다.",
|
|
882
874
|
"figure.label.start-placement": "어디에 두는 설비인가요?",
|
|
@@ -959,5 +951,21 @@
|
|
|
959
951
|
"figure.text.fasten-past-edges": "가장자리 밖으로 나와 있습니다: {sides}",
|
|
960
952
|
"figure.text.fasten-sentence-meet": "{part}의 {face}을 {to}에 맞닿게",
|
|
961
953
|
"figure.text.fasten-sentence-flush": "{part}의 {face}을 {to}과 같은 면으로",
|
|
962
|
-
"figure.text.fasten-sentence-centre": "{part}의 가운데를 {to} 위에"
|
|
954
|
+
"figure.text.fasten-sentence-centre": "{part}의 가운데를 {to} 위에",
|
|
955
|
+
"figure.label.measure-x": "너비",
|
|
956
|
+
"figure.label.measure-y": "높이",
|
|
957
|
+
"figure.label.measure-z": "깊이",
|
|
958
|
+
"figure.label.measure-diameter": "지름",
|
|
959
|
+
"figure.text.summary-size-follows": "{axes} 모델 크기를 따라 바뀝니다.",
|
|
960
|
+
"figure.text.summary-size-follows-plus": "{axes} 모델 크기에 {plus} mm를 더한 값입니다.",
|
|
961
|
+
"figure.text.summary-size-share": "{axes} 모델 {whole}의 {pct}%입니다.",
|
|
962
|
+
"figure.text.summary-size-share-plus": "{axes} 모델 {whole}의 {pct}%에 {plus} mm를 더한 값입니다.",
|
|
963
|
+
"figure.text.summary-size-part": "{axes} {other}의 {measure} 같습니다.",
|
|
964
|
+
"figure.text.summary-size-part-plus": "{axes} {other}의 {measureWord}에 {plus} mm를 더한 값입니다.",
|
|
965
|
+
"figure.text.summary-size-part-share": "{axes} {other}의 {measureWord}의 {pct}%입니다.",
|
|
966
|
+
"figure.text.summary-size-part-share-plus": "{axes} {other}의 {measureWord}의 {pct}%에 {plus} mm를 더한 값입니다.",
|
|
967
|
+
"figure.text.summary-size-input": "{axes} {field} 값을 따릅니다.",
|
|
968
|
+
"figure.text.summary-size-worked-out": "{axes} 다른 치수에서 계산됩니다.",
|
|
969
|
+
"figure.text.held-by-fastening": "붙어 있어서 위치와 회전은 붙이기에서 정합니다.",
|
|
970
|
+
"figure.text.held-worked-out": "{group}는 다른 값에서 계산되어 여기서 고칠 수 없습니다."
|
|
963
971
|
}
|
package/translations/ms.json
CHANGED
|
@@ -222,7 +222,6 @@
|
|
|
222
222
|
"figure.text.section-issue-too-few": "Keratan memerlukan tiga titik atau lebih.",
|
|
223
223
|
"figure.text.section-issue-too-many": "Keratan boleh mempunyai sehingga {limit} titik.",
|
|
224
224
|
"figure.text.section-issue-number": "Taip nombor.",
|
|
225
|
-
"figure.text.section-cavity-unavailable": "Garis luar ini tidak boleh mempunyai ruang dalam. Ruang dalam dibuat dalam keratan segi empat atau bulatan.",
|
|
226
225
|
"figure.text.section-corner-over": "Jejari sudut paling banyak {max} mm.",
|
|
227
226
|
"figure.text.section-at-most": "paling banyak {max} mm",
|
|
228
227
|
"figure.text.section-not-positive": "Ketebalan mesti lebih daripada 0.",
|
|
@@ -546,7 +545,6 @@
|
|
|
546
545
|
"figure.text.overhang-side-low": "{axis} sisi bawah {mm} mm",
|
|
547
546
|
"figure.text.overhang-side-high": "{axis} sisi atas {mm} mm",
|
|
548
547
|
"figure.button.fix-alignment": "ubah penjajaran dan jarak",
|
|
549
|
-
"figure.text.detach-stays": "Apabila ditanggalkan, ia kekal di tempatnya; hanya lekatannya pada {from} hilang.",
|
|
550
548
|
"figure.text.detach-moves": "Apabila ditanggalkan, ia bergerak:",
|
|
551
549
|
"figure.text.detach-keeps-children": "Bahagian yang dilekatkan padanya ({parts}) kekal dilekatkan.",
|
|
552
550
|
"figure.text.detach-clips": "Menanggalkan membuang klip: {clips}. Anda akan ditanya semasa menanggalkan.",
|
|
@@ -781,7 +779,6 @@
|
|
|
781
779
|
"figure.text.placement-intent-wall": "Letakan dinding: bahagian belakang mengekalkan jaraknya sekarang dari dinding (Z=0) apabila saiz berubah. Kedudukannya pada dinding (X, Y) kekal.",
|
|
782
780
|
"figure.text.placement-intent-center": "Letakan tengah: kedudukan tengah kekal dan hanya saiz yang mengikut. Tiada apa-apa dilekatkan pada lantai, siling atau dinding.",
|
|
783
781
|
"figure.label.resize-intent": "Apabila saiz berubah, bahagian ini",
|
|
784
|
-
"figure.text.resize-intent": "Setiap arah menunjukkan saiznya sekarang dan apa yang diikutinya. Pilih arah untuk diikuti di bawah, dan gunakannya bersama tempat bahagian kekal.",
|
|
785
782
|
"figure.label.resize-diameter": "Diameter (X dan Z)",
|
|
786
783
|
"figure.label.resize-x": "Lebar (X)",
|
|
787
784
|
"figure.label.resize-y": "Tinggi (Y)",
|
|
@@ -807,7 +804,7 @@
|
|
|
807
804
|
"figure.text.resize-refused-dimension-rule": "Satu dimensi {part} sudah mengikut peraturan lain. Ubah peraturan itu secara langsung dalam tetapan lanjutan.",
|
|
808
805
|
"figure.text.resize-refused-position-rule": "Kedudukan {axis} bagi {part} ditetapkan oleh input atau ungkapan. Jika digunakan, ia diganti dengan hubungan {place}.",
|
|
809
806
|
"figure.text.resize-refused-no-face": "{part} tiada muka rata untuk dilekatkan pada {place}.",
|
|
810
|
-
"figure.text.axis-held-by-rule": "
|
|
807
|
+
"figure.text.axis-held-by-rule": "tidak boleh diubah di sini",
|
|
811
808
|
"figure.label.room-only-inputs": "Digunakan hanya untuk mengira ruang letakan",
|
|
812
809
|
"figure.text.room-only-inputs": "Nilai ini tidak mengalihkan bahagian. Ruang yang diisytiharkan dikira daripadanya.",
|
|
813
810
|
"figure.button.room-refit": "Kira semula ruang…",
|
|
@@ -844,7 +841,6 @@
|
|
|
844
841
|
"figure.button.resize-scoped-wall": "{scope}: ikut saiz, dilekatkan pada dinding",
|
|
845
842
|
"figure.button.resize-scoped-center": "{scope}: ikut saiz, kekalkan tengah sekarang",
|
|
846
843
|
"figure.text.resize-move": "(bergerak {mm} mm pada {axis})",
|
|
847
|
-
"figure.text.axes-held-by-rule": "{group} {axes}: ditetapkan oleh peraturan, baca sahaja",
|
|
848
844
|
"figure.text.held-by-rule": "Satu peraturan meletakkan bahagian ini.",
|
|
849
845
|
"figure.text.held-on-plane": "{face} dikekalkan pada {place} (jarak {gap} mm)",
|
|
850
846
|
"figure.text.held-on-part": "Dilekatkan dengan {face} pada {otherFace} {other}",
|
|
@@ -873,10 +869,6 @@
|
|
|
873
869
|
"figure.text.empty-figure-next": "Tambah bahagian untuk melihat saiz dan letakannya.",
|
|
874
870
|
"figure.label.figure-info-later": "Maklumat rajah · boleh ditetapkan kemudian",
|
|
875
871
|
"figure.text.parts-panel-folded-narrow": "Skrin sempit, jadi senarai bahagian dilipat. Butang panel pada bar alat membukanya semula.",
|
|
876
|
-
"figure.text.summary-follows": "{axes} mengikut rajah",
|
|
877
|
-
"figure.text.summary-ruled": "{axes} mengikut peraturan",
|
|
878
|
-
"figure.text.summary-size-fixed": "Saiz tetap",
|
|
879
|
-
"figure.text.summary-free": "Diletakkan pada kedudukannya · tidak dilekatkan",
|
|
880
872
|
"figure.text.ai-draft-request": "Sila buat draf rajah baharu. Peralatannya: ",
|
|
881
873
|
"figure.text.start-no-recipes": "Belum ada resipi tersedia.",
|
|
882
874
|
"figure.label.start-placement": "Di mana ia diletakkan?",
|
|
@@ -959,5 +951,21 @@
|
|
|
959
951
|
"figure.text.fasten-past-edges": "Ia melepasi tepi: {sides}",
|
|
960
952
|
"figure.text.fasten-sentence-meet": "{face} {part} diletakkan pada {to}",
|
|
961
953
|
"figure.text.fasten-sentence-flush": "{face} {part} sama rata dengan {to}",
|
|
962
|
-
"figure.text.fasten-sentence-centre": "Tengah {part} pada {to}"
|
|
954
|
+
"figure.text.fasten-sentence-centre": "Tengah {part} pada {to}",
|
|
955
|
+
"figure.label.measure-x": "lebar",
|
|
956
|
+
"figure.label.measure-y": "tinggi",
|
|
957
|
+
"figure.label.measure-z": "dalam",
|
|
958
|
+
"figure.label.measure-diameter": "diameter",
|
|
959
|
+
"figure.text.summary-size-follows": "{axes} mengikut saiz model.",
|
|
960
|
+
"figure.text.summary-size-follows-plus": "{axes} ialah saiz model tambah {plus} mm.",
|
|
961
|
+
"figure.text.summary-size-share": "{axes} ialah {pct}% daripada {whole} model.",
|
|
962
|
+
"figure.text.summary-size-share-plus": "{axes} ialah {pct}% daripada {whole} model tambah {plus} mm.",
|
|
963
|
+
"figure.text.summary-size-part": "{axes} sama dengan {measure} {other}.",
|
|
964
|
+
"figure.text.summary-size-part-plus": "{axes} ialah {measureWord} {other} tambah {plus} mm.",
|
|
965
|
+
"figure.text.summary-size-part-share": "{axes} ialah {pct}% daripada {measureWord} {other}.",
|
|
966
|
+
"figure.text.summary-size-part-share-plus": "{axes} ialah {pct}% daripada {measureWord} {other} tambah {plus} mm.",
|
|
967
|
+
"figure.text.summary-size-input": "{axes} mengikut {field}.",
|
|
968
|
+
"figure.text.summary-size-worked-out": "{axes} dikira daripada ukuran lain.",
|
|
969
|
+
"figure.text.held-by-fastening": "Ia dipasang: kedudukan dan putaran ditetapkan dalam pemasangan.",
|
|
970
|
+
"figure.text.held-worked-out": "{group} dikira daripada nilai lain dan tidak boleh diubah di sini."
|
|
963
971
|
}
|
package/translations/zh.json
CHANGED
|
@@ -222,7 +222,6 @@
|
|
|
222
222
|
"figure.text.section-issue-too-few": "截面至少需要三个点。",
|
|
223
223
|
"figure.text.section-issue-too-many": "最多可有 {limit} 个点。",
|
|
224
224
|
"figure.text.section-issue-number": "请输入数字。",
|
|
225
|
-
"figure.text.section-cavity-unavailable": "此轮廓不能创建内部空间。内部空间只能在矩形和圆形截面中创建。",
|
|
226
225
|
"figure.text.section-corner-over": "圆角半径最大为 {max} mm。",
|
|
227
226
|
"figure.text.section-at-most": "最大 {max} mm",
|
|
228
227
|
"figure.text.section-not-positive": "厚度必须大于 0。",
|
|
@@ -546,7 +545,6 @@
|
|
|
546
545
|
"figure.text.overhang-side-low": "{axis} 低侧 {mm} mm",
|
|
547
546
|
"figure.text.overhang-side-high": "{axis} 高侧 {mm} mm",
|
|
548
547
|
"figure.button.fix-alignment": "修改对齐和间距",
|
|
549
|
-
"figure.text.detach-stays": "拆下后保持在当前位置,只去掉与 {from} 的附着。",
|
|
550
548
|
"figure.text.detach-moves": "拆下后位置会改变:",
|
|
551
549
|
"figure.text.detach-keeps-children": "附着在此部件上的部件({parts})仍附着在它上面。",
|
|
552
550
|
"figure.text.detach-clips": "拆下会删除片段:{clips}。拆下时会再次确认。",
|
|
@@ -781,7 +779,6 @@
|
|
|
781
779
|
"figure.text.placement-intent-wall": "墙面放置:尺寸变化时,背面与墙(Z=0)保持当前间距。在墙上的位置(X、Y)不变。",
|
|
782
780
|
"figure.text.placement-intent-center": "中心放置:中心位置保持不变,只跟随尺寸。不附着到地面、天花板或墙。",
|
|
783
781
|
"figure.label.resize-intent": "尺寸变化时,此部件",
|
|
784
|
-
"figure.text.resize-intent": "每个方向都显示当前尺寸和尺寸跟随。请在下方选择要跟随的方向,并连同附着位置一起应用。",
|
|
785
782
|
"figure.label.resize-diameter": "直径(X、Z)",
|
|
786
783
|
"figure.label.resize-x": "宽度(X)",
|
|
787
784
|
"figure.label.resize-y": "高度(Y)",
|
|
@@ -807,7 +804,7 @@
|
|
|
807
804
|
"figure.text.resize-refused-dimension-rule": "{part} 的尺寸已跟随其他规则。请在高级设置中直接修改该规则。",
|
|
808
805
|
"figure.text.resize-refused-position-rule": "{part} 的 {axis} 位置由输入值或表达式决定。应用后将改由与{place}的关系决定位置。",
|
|
809
806
|
"figure.text.resize-refused-no-face": "{part} 没有可附着到{place}的平面。",
|
|
810
|
-
"figure.text.axis-held-by-rule": "
|
|
807
|
+
"figure.text.axis-held-by-rule": "此处不能修改的值",
|
|
811
808
|
"figure.label.room-only-inputs": "仅用于计算放置空间",
|
|
812
809
|
"figure.text.room-only-inputs": "这些值不会移动部件。声明的空间由这些值计算得出。",
|
|
813
810
|
"figure.button.room-refit": "重新计算空间…",
|
|
@@ -844,7 +841,6 @@
|
|
|
844
841
|
"figure.button.resize-scoped-wall": "{scope}:附着墙面并跟随尺寸",
|
|
845
842
|
"figure.button.resize-scoped-center": "{scope}:保持当前中心并跟随尺寸",
|
|
846
843
|
"figure.text.resize-move": "({axis} 方向移动 {mm} mm)",
|
|
847
|
-
"figure.text.axes-held-by-rule": "{group} {axes}:由规则决定 — 只读",
|
|
848
844
|
"figure.text.held-by-rule": "由规则决定此部件的位置。",
|
|
849
845
|
"figure.text.held-on-plane": "{face}保持在{place}上(间距 {gap} mm)",
|
|
850
846
|
"figure.text.held-on-part": "以{face}附着在{other}的{otherFace}上",
|
|
@@ -873,10 +869,6 @@
|
|
|
873
869
|
"figure.text.empty-figure-next": "添加部件后即可查看尺寸和放置。",
|
|
874
870
|
"figure.label.figure-info-later": "模型信息 · 可以稍后设置",
|
|
875
871
|
"figure.text.parts-panel-folded-narrow": "屏幕较窄,已折叠部件列表。可用工具栏的面板按钮重新打开。",
|
|
876
|
-
"figure.text.summary-follows": "{axes}跟随图形",
|
|
877
|
-
"figure.text.summary-ruled": "{axes}遵循规则",
|
|
878
|
-
"figure.text.summary-size-fixed": "尺寸固定",
|
|
879
|
-
"figure.text.summary-free": "按自身位置放置 · 无附着",
|
|
880
872
|
"figure.text.ai-draft-request": "请起草一个新的 Figure。要做的设备:",
|
|
881
873
|
"figure.text.start-no-recipes": "尚无可用的部件组。",
|
|
882
874
|
"figure.label.start-placement": "这个设备放在哪里?",
|
|
@@ -959,5 +951,21 @@
|
|
|
959
951
|
"figure.text.fasten-past-edges": "超出边缘: {sides}",
|
|
960
952
|
"figure.text.fasten-sentence-meet": "{part}的{face}贴在{to}上",
|
|
961
953
|
"figure.text.fasten-sentence-flush": "{part}的{face}与{to}齐平",
|
|
962
|
-
"figure.text.fasten-sentence-centre": "{part}的中心在{to}上"
|
|
954
|
+
"figure.text.fasten-sentence-centre": "{part}的中心在{to}上",
|
|
955
|
+
"figure.label.measure-x": "宽度",
|
|
956
|
+
"figure.label.measure-y": "高度",
|
|
957
|
+
"figure.label.measure-z": "深度",
|
|
958
|
+
"figure.label.measure-diameter": "直径",
|
|
959
|
+
"figure.text.summary-size-follows": "{axes}随模型尺寸变化。",
|
|
960
|
+
"figure.text.summary-size-follows-plus": "{axes}为模型尺寸加 {plus} mm。",
|
|
961
|
+
"figure.text.summary-size-share": "{axes}为模型{whole}的 {pct}%。",
|
|
962
|
+
"figure.text.summary-size-share-plus": "{axes}为模型{whole}的 {pct}% 加 {plus} mm。",
|
|
963
|
+
"figure.text.summary-size-part": "{axes}与{other}的{measure}相同。",
|
|
964
|
+
"figure.text.summary-size-part-plus": "{axes}为{other}的{measureWord}加 {plus} mm。",
|
|
965
|
+
"figure.text.summary-size-part-share": "{axes}为{other}的{measureWord}的 {pct}%。",
|
|
966
|
+
"figure.text.summary-size-part-share-plus": "{axes}为{other}的{measureWord}的 {pct}% 加 {plus} mm。",
|
|
967
|
+
"figure.text.summary-size-input": "{axes}跟随{field}。",
|
|
968
|
+
"figure.text.summary-size-worked-out": "{axes}由其他尺寸计算得出。",
|
|
969
|
+
"figure.text.held-by-fastening": "已连接,位置和旋转在连接中设定。",
|
|
970
|
+
"figure.text.held-worked-out": "{group}由其他值计算得出,此处不能修改。"
|
|
963
971
|
}
|