@things-factory/figure-ui 10.1.48 → 10.1.49
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/figure-v3-parts.ts +85 -10
- package/client/modeller/side-panel-styles.ts +8 -0
- package/client/modeller/v3-canvas.ts +25 -5
- package/client/modeller/v3-editor.ts +159 -22
- package/client/modeller/v3-fields.ts +15 -1
- package/client/modeller/v3-stage-model.ts +24 -0
- package/dist-client/modeller/figure-v3-parts.d.ts +13 -0
- package/dist-client/modeller/figure-v3-parts.js +80 -10
- package/dist-client/modeller/figure-v3-parts.js.map +1 -1
- package/dist-client/modeller/side-panel-styles.js +8 -0
- package/dist-client/modeller/side-panel-styles.js.map +1 -1
- package/dist-client/modeller/v3-canvas.d.ts +2 -0
- package/dist-client/modeller/v3-canvas.js +27 -5
- package/dist-client/modeller/v3-canvas.js.map +1 -1
- package/dist-client/modeller/v3-clips.d.ts +1 -1
- package/dist-client/modeller/v3-editor.d.ts +19 -0
- package/dist-client/modeller/v3-editor.js +160 -20
- package/dist-client/modeller/v3-editor.js.map +1 -1
- package/dist-client/modeller/v3-fields.d.ts +6 -0
- package/dist-client/modeller/v3-fields.js +14 -2
- package/dist-client/modeller/v3-fields.js.map +1 -1
- package/dist-client/modeller/v3-stage-model.d.ts +8 -0
- package/dist-client/modeller/v3-stage-model.js +26 -0
- package/dist-client/modeller/v3-stage-model.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/test/v3-fields.test.ts +37 -1
- package/test/v3-gizmo.test.ts +3 -1
- package/test/v3-maturity.test.ts +1 -1
- package/translations/en.json +11 -1
- package/translations/ja.json +11 -1
- package/translations/ko.json +11 -1
- package/translations/ms.json +11 -1
- package/translations/zh.json +11 -1
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.49",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"@things-factory:registry": "https://registry.npmjs.org"
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"clean": "npm run clean:server && npm run clean:client"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@hatiolab/figure-model": "^0.1.
|
|
30
|
-
"@hatiolab/things-scene": "^10.1.
|
|
29
|
+
"@hatiolab/figure-model": "^0.1.55",
|
|
30
|
+
"@hatiolab/things-scene": "^10.1.33",
|
|
31
31
|
"@material/web": "^2.0.0",
|
|
32
32
|
"@operato/data-grist": "^10.0.0",
|
|
33
33
|
"@operato/graphql": "^10.0.0",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@operato/shell": "^10.0.0",
|
|
38
38
|
"@operato/styles": "^10.0.0",
|
|
39
39
|
"@operato/utils": "^10.0.0",
|
|
40
|
-
"@things-factory/figure-service": "^10.1.
|
|
40
|
+
"@things-factory/figure-service": "^10.1.49",
|
|
41
41
|
"three": "^0.185.1"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "f9b29dcbdfecbfdd72e33bbcf74aea05331da75f"
|
|
44
44
|
}
|
package/test/v3-fields.test.ts
CHANGED
|
@@ -7,7 +7,7 @@ import assert from 'node:assert/strict'
|
|
|
7
7
|
import { readFileSync } from 'node:fs'
|
|
8
8
|
import { fileURLToPath } from 'node:url'
|
|
9
9
|
|
|
10
|
-
import { groupFields, partLabelOf, repeatOf } from '../client/modeller/v3-fields.ts'
|
|
10
|
+
import { groupFields, ownerOf, partLabelOf, repeatOf } from '../client/modeller/v3-fields.ts'
|
|
11
11
|
|
|
12
12
|
const f = (id: string, value = 1, unit = 'mm') => ({ id, unit, value, role: 'design' })
|
|
13
13
|
|
|
@@ -69,3 +69,39 @@ test('되풀이한 부품의 속성 이름 칸도 사람의 이름이고, 몇
|
|
|
69
69
|
assert.ok(editor.includes('?disabled=${unavailable || !!repeatOf(this.selected, view.geometry)}'), '복사본에는 바꿀 제 이름이 없다')
|
|
70
70
|
})
|
|
71
71
|
|
|
72
|
+
test('편집기는 저작한 부품 단위로 고르고 보인다 — 되풀이는 한 부품, 캔버스에서는 복사본 모두가 골라진다', () => {
|
|
73
|
+
assert.equal(ownerOf('["roller.repeat",14,"roller.value"]'), 'roller')
|
|
74
|
+
assert.equal(ownerOf('deck'), 'deck')
|
|
75
|
+
assert.deepEqual(repeatOf('roller', [{ id: '["roller.repeat",0,"roller.value"]' }, { id: '["roller.repeat",1,"roller.value"]' }, { id: 'deck' }]), { name: 'roller', count: 2, index: 0 })
|
|
76
|
+
const read = (path: string) => readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8')
|
|
77
|
+
const canvas = read('../client/modeller/v3-canvas.ts')
|
|
78
|
+
assert.ok(canvas.includes('.filter(([name]) => ownerOf(name) === this.selected)'), '사용자 2026-09-24: 「why repeatable parts are not selected?」')
|
|
79
|
+
const editor = read('../client/modeller/v3-editor.ts')
|
|
80
|
+
assert.ok(editor.includes('this.selected = id ? ownerOf(id) : id'), '캔버스에서 복사본을 누르면 그 되풀이를 고른다')
|
|
81
|
+
assert.ok(editor.includes('.parts=${this.partRows(view.geometry)}'), '목록은 저작한 부품 한 줄씩')
|
|
82
|
+
assert.ok(editor.includes("this.session!.command({ kind: 'set-repeat', part: this.selected, pitch })"), 'pitch 는 명령으로 정한다')
|
|
83
|
+
const parts = read('../client/modeller/figure-v3-parts.ts')
|
|
84
|
+
assert.ok(parts.includes('?disabled=${this.locked || full}'), '등급 한도에 이르면 팔레트가 잠긴다(V2)')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
test('pitch 는 한 곳에서 하나의 값이고, 늘 set-repeat 로 바꿔 최대 길이가 따라온다', () => {
|
|
88
|
+
const editor = readFileSync(fileURLToPath(new URL('../client/modeller/v3-editor.ts', import.meta.url)), 'utf8')
|
|
89
|
+
assert.ok(editor.includes("groupFields(own, this.selected)"), '사용자 2026-09-24: 되풀이의 간격과 형상 치수의 repeat · pitch 가 같은 값으로 두 번 떴다')
|
|
90
|
+
assert.ok(editor.includes("!i.id.startsWith(this.selected + '.repeat.')"))
|
|
91
|
+
const pitch = editor.slice(editor.indexOf(' private setPitch('), editor.indexOf(' /** Choose a part,'))
|
|
92
|
+
assert.ok(pitch.includes("this.session!.command({ kind: 'set-repeat', part: this.selected, pitch })"), '늘 명령으로 — 최대 길이가 따라온다')
|
|
93
|
+
assert.ok(!pitch.includes('changeField'))
|
|
94
|
+
for (const lang of ['ko', 'en', 'ja', 'zh', 'ms']) {
|
|
95
|
+
const table = JSON.parse(readFileSync(fileURLToPath(new URL(`../translations/${lang}.json`, import.meta.url)), 'utf8'))
|
|
96
|
+
assert.equal(table['figure.label.repeat-gap'], 'pitch', lang)
|
|
97
|
+
assert.ok(['{length}', '{count}', '{longest}', '{limit}'].every(k => table['figure.text.repeat-what-pitch-gives']?.includes(k)), lang)
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
test('기즈모로 끈 변환 부품은 규칙을 지킨 채 옮겨지고, 관절·붙이기가 정하는 부품은 까닭을 말한다 — 튕겨 돌아가지 않는다', () => {
|
|
102
|
+
const editor = readFileSync(fileURLToPath(new URL('../client/modeller/v3-editor.ts', import.meta.url)), 'utf8')
|
|
103
|
+
const moved = editor.slice(editor.indexOf(' private transformed('), editor.indexOf(' /** 맞추기'))
|
|
104
|
+
assert.ok(moved.includes("this.session!.command({ kind: 'nudge-part', part: id,"), '사용자 2026-09-24: 「기즈모 컨트롤도 전혀 작동이 안되는군」')
|
|
105
|
+
assert.ok(moved.includes("'figure.text.gizmo-joint-places'") && moved.includes("'figure.text.gizmo-fastening-places'") && moved.includes("'figure.text.gizmo-size-worked-out'"))
|
|
106
|
+
})
|
|
107
|
+
|
package/test/v3-gizmo.test.ts
CHANGED
|
@@ -78,7 +78,9 @@ test('끈 것은 세션의 한 걸음이다 — 한 번의 되돌리기로 돌
|
|
|
78
78
|
const workspace = createV3EditorWorkspace() as unknown as Record<string, Function>
|
|
79
79
|
assert.ok(typeof workspace.apply === 'function')
|
|
80
80
|
const editor = read('../client/modeller/v3-editor.ts')
|
|
81
|
-
|
|
81
|
+
const moved = editor.slice(editor.indexOf(' private transformed('), editor.indexOf(' /** 맞추기'))
|
|
82
|
+
assert.ok(moved.includes('this.run(() => this.session!.apply(changes))'), 'one apply, one step')
|
|
83
|
+
assert.ok(moved.includes("this.session!.command({ kind: 'nudge-part'"), 'a nudge is one command, one step')
|
|
82
84
|
})
|
|
83
85
|
|
|
84
86
|
test('캔버스 — 기즈모 · W E R · 스냅은 씬의 편집 모드가 한다, V2 처럼', () => {
|
package/test/v3-maturity.test.ts
CHANGED
|
@@ -66,7 +66,7 @@ test('등급은 figure-model 의 v3ScoreOf 그대로다 — 목록과 이 탭이
|
|
|
66
66
|
asset = addV3Box(asset, cube('a', 0))
|
|
67
67
|
const one = v3ReportOf(asset)!
|
|
68
68
|
assert.deepEqual(one.score, v3ScoreOf(asset))
|
|
69
|
-
assert.deepEqual(V3_BUDGET_KEYS, one.score.budgets.map(b => b.key), '화면이 말을 찾는 키와 셈의 키가 같다')
|
|
69
|
+
assert.deepEqual(V3_BUDGET_KEYS.filter(k => k !== 'parts'), one.score.budgets.map(b => b.key), '화면이 말을 찾는 키와 셈의 키가 같다 — 등급을 안 정하면 부품 수 한도는 없다')
|
|
70
70
|
})
|
|
71
71
|
|
|
72
72
|
test('draw call 한도 3 은 없다 — 한 화면 166 대 목표에 견준다(수석 아키텍트 판정 09-24)', () => {
|
package/translations/en.json
CHANGED
|
@@ -59,6 +59,15 @@
|
|
|
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.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.text.gizmo-fastening-places": "{part} is fastened to a face of another part, which places it. detach it first to move it.",
|
|
70
|
+
"figure.text.gizmo-size-worked-out": "the size of {part} is worked out, so the gizmo cannot change it. set it to fixed under dimensions.",
|
|
62
71
|
"figure.text.instance-range-can-widen": "measured again after the parts changed: {ranges} mm.",
|
|
63
72
|
"figure.text.mounting-face-needs-space": "declare the space first to choose one.",
|
|
64
73
|
"figure.text.part-is-referenced": "'{part}' cannot be deleted: another part is fastened to it or follows its size. Undo that link first.",
|
|
@@ -263,6 +272,7 @@
|
|
|
263
272
|
"figure.label.released-versions": "released versions",
|
|
264
273
|
"figure.label.repeat-axis": "axis it repeats along",
|
|
265
274
|
"figure.label.repeat-count": "count",
|
|
275
|
+
"figure.label.repeat-gap": "pitch",
|
|
266
276
|
"figure.label.repeat-pitch": "pitch",
|
|
267
277
|
"figure.label.reuse-trend": "reuse trend",
|
|
268
278
|
"figure.label.instance-count": "instance count",
|
|
@@ -320,7 +330,7 @@
|
|
|
320
330
|
"figure.text.bound-by-triangles": "triangles reach the limit first ({per} per instance, {budget} per drawing).",
|
|
321
331
|
"figure.text.budget-measured-on": "Measured on {gpu}, {on}. A figure standing still costs nothing — only what is on screen and redrawn counts.",
|
|
322
332
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
323
|
-
"figure.text.budgets-not-in-v3": "off-palette surfaces
|
|
333
|
+
"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
334
|
"figure.text.trend-chart-title": "drawing cost by instance count",
|
|
325
335
|
"figure.text.trend-chart-lead": "flat lines stay the same as instances grow. instances of the same size share them.",
|
|
326
336
|
"figure.text.trend-at-count": "at {n}",
|
package/translations/ja.json
CHANGED
|
@@ -57,6 +57,15 @@
|
|
|
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.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.text.gizmo-fastening-places": "{part} は他の部品の面に付いていて、その面が位置を決めます。動かすには先に外してください。",
|
|
68
|
+
"figure.text.gizmo-size-worked-out": "{part} のサイズは式で決まっているため、ギズモでは変えられません。寸法欄で固定にしてください。",
|
|
60
69
|
"figure.text.instance-range-can-widen": "部品が変わったので測り直すと {ranges} mm です。",
|
|
61
70
|
"figure.text.mounting-face-needs-space": "先に空間を宣言すると選べます。",
|
|
62
71
|
"figure.text.part-is-referenced": "'{part}' には他の部品が取り付けられているか、そのサイズに従っているため削除できません。先にその連結を外してください。",
|
|
@@ -261,6 +270,7 @@
|
|
|
261
270
|
"figure.label.released-versions": "発行済みバージョン",
|
|
262
271
|
"figure.label.repeat-axis": "axis it repeats along",
|
|
263
272
|
"figure.label.repeat-count": "個数",
|
|
273
|
+
"figure.label.repeat-gap": "pitch",
|
|
264
274
|
"figure.label.repeat-pitch": "pitch",
|
|
265
275
|
"figure.label.reuse-trend": "reuse trend",
|
|
266
276
|
"figure.label.instance-count": "インスタンス数",
|
|
@@ -318,7 +328,7 @@
|
|
|
318
328
|
"figure.text.bound-by-triangles": "三角形が先に上限に達します (1 個あたり {per}、図面あたり {budget})。",
|
|
319
329
|
"figure.text.budget-measured-on": "{gpu} で {on} に測定した値です。静止している図形は負荷になりません — 画面に見えて再描画されるものだけを数えます。",
|
|
320
330
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
321
|
-
"figure.text.budgets-not-in-v3": "
|
|
331
|
+
"figure.text.budgets-not-in-v3": "パレット外の表面は V3 形式にない項目のため表示しません。部品数の上限は詳細度を決めると表示されます。",
|
|
322
332
|
"figure.text.trend-chart-title": "インスタンス数による描画コスト",
|
|
323
333
|
"figure.text.trend-chart-lead": "平らな線はインスタンスが増えても変わらない値です。同じサイズのインスタンスが共有します。",
|
|
324
334
|
"figure.text.trend-at-count": "{n}個のとき",
|
package/translations/ko.json
CHANGED
|
@@ -59,6 +59,15 @@
|
|
|
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.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.text.gizmo-fastening-places": "{part} 부품은 다른 부품의 면에 붙어 있어 그 면이 자리를 정합니다. 옮기려면 먼저 떼세요.",
|
|
70
|
+
"figure.text.gizmo-size-worked-out": "{part} 부품의 크기는 식으로 정해져 있어 기즈모로 바꿀 수 없습니다. 치수 칸에서 고정으로 바꾸면 됩니다.",
|
|
62
71
|
"figure.text.instance-range-can-widen": "부품이 바뀌어 다시 재면 {ranges} mm 입니다.",
|
|
63
72
|
"figure.text.mounting-face-needs-space": "공간을 먼저 선언해야 고를 수 있습니다.",
|
|
64
73
|
"figure.text.part-is-referenced": "'{part}' 에 다른 부품이 붙어 있거나 그 크기를 따르고 있어 지울 수 없습니다. 그 연결을 먼저 푸세요.",
|
|
@@ -263,6 +272,7 @@
|
|
|
263
272
|
"figure.label.released-versions": "발행된 버전",
|
|
264
273
|
"figure.label.repeat-axis": "늘어나는 축",
|
|
265
274
|
"figure.label.repeat-count": "개수",
|
|
275
|
+
"figure.label.repeat-gap": "pitch",
|
|
266
276
|
"figure.label.repeat-pitch": "한 칸 (피치)",
|
|
267
277
|
"figure.label.reuse-trend": "재사용 추이",
|
|
268
278
|
"figure.label.instance-count": "인스턴스 수",
|
|
@@ -320,7 +330,7 @@
|
|
|
320
330
|
"figure.text.bound-by-triangles": "삼각형이 먼저 한도에 도달합니다 (1개당 {per}, 도면당 {budget}).",
|
|
321
331
|
"figure.text.budget-measured-on": "{gpu} 에서 {on} 에 잰 값입니다. 가만히 서 있는 도형은 값을 치르지 않습니다 — 화면에 보이고 다시 그려지는 것만 셉니다.",
|
|
322
332
|
"figure.text.budget-not-measured-yet": "아직 실측 전 목표치입니다.",
|
|
323
|
-
"figure.text.budgets-not-in-v3": "팔레트 외
|
|
333
|
+
"figure.text.budgets-not-in-v3": "팔레트 외 표면 한도는 V3 형식에 없는 항목이라 표시하지 않습니다. 부품 수 한도는 디테일 등급을 정하면 보입니다.",
|
|
324
334
|
"figure.text.trend-chart-title": "인스턴스 수에 따른 그리는 비용",
|
|
325
335
|
"figure.text.trend-chart-lead": "평평한 선은 인스턴스가 늘어도 그대로인 값입니다. 같은 크기의 인스턴스가 공유합니다.",
|
|
326
336
|
"figure.text.trend-at-count": "{n}개일 때",
|
package/translations/ms.json
CHANGED
|
@@ -57,6 +57,15 @@
|
|
|
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.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.text.gizmo-fastening-places": "{part} dilekatkan pada muka bahagian lain, yang menentukan kedudukannya. tanggalkan dahulu untuk menggerakkannya.",
|
|
68
|
+
"figure.text.gizmo-size-worked-out": "saiz {part} dikira melalui formula, jadi gizmo tidak dapat mengubahnya. tetapkan kepada tetap di bawah dimensi.",
|
|
60
69
|
"figure.text.instance-range-can-widen": "diukur semula selepas bahagian berubah: {ranges} mm.",
|
|
61
70
|
"figure.text.mounting-face-needs-space": "isytiharkan ruang dahulu untuk memilih.",
|
|
62
71
|
"figure.text.part-is-referenced": "'{part}' tidak boleh dipadam: bahagian lain dipasang padanya atau mengikut saiznya. Leraikan pautan itu dahulu.",
|
|
@@ -261,6 +270,7 @@
|
|
|
261
270
|
"figure.label.released-versions": "versi yang diterbitkan",
|
|
262
271
|
"figure.label.repeat-axis": "axis it repeats along",
|
|
263
272
|
"figure.label.repeat-count": "bilangan",
|
|
273
|
+
"figure.label.repeat-gap": "pitch",
|
|
264
274
|
"figure.label.repeat-pitch": "pitch",
|
|
265
275
|
"figure.label.reuse-trend": "reuse trend",
|
|
266
276
|
"figure.label.instance-count": "bilangan instans",
|
|
@@ -318,7 +328,7 @@
|
|
|
318
328
|
"figure.text.bound-by-triangles": "segi tiga mencapai had dahulu ({per} setiap satu, {budget} setiap lukisan).",
|
|
319
329
|
"figure.text.budget-measured-on": "Diukur pada {gpu}, {on}. Figura yang diam tidak menelan kos — hanya yang kelihatan dan dilukis semula dikira.",
|
|
320
330
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
321
|
-
"figure.text.budgets-not-in-v3": "permukaan luar palet
|
|
331
|
+
"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
332
|
"figure.text.trend-chart-title": "kos lukisan mengikut bilangan instans",
|
|
323
333
|
"figure.text.trend-chart-lead": "garis mendatar kekal sama apabila instans bertambah. instans yang sama saiz berkongsinya.",
|
|
324
334
|
"figure.text.trend-at-count": "pada {n}",
|
package/translations/zh.json
CHANGED
|
@@ -57,6 +57,15 @@
|
|
|
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.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.text.gizmo-fastening-places": "{part} 贴在另一个部件的面上,由该面决定位置。要移动请先分离。",
|
|
68
|
+
"figure.text.gizmo-size-worked-out": "{part} 的尺寸由公式决定,无法用控件修改。请在尺寸栏改为固定。",
|
|
60
69
|
"figure.text.instance-range-can-widen": "部件已变更,重新测量为 {ranges} mm。",
|
|
61
70
|
"figure.text.mounting-face-needs-space": "请先声明空间,然后才能选择。",
|
|
62
71
|
"figure.text.part-is-referenced": "无法删除 '{part}':有其他部件固定在它上面或跟随它的尺寸。请先解除该连接。",
|
|
@@ -261,6 +270,7 @@
|
|
|
261
270
|
"figure.label.released-versions": "已发布版本",
|
|
262
271
|
"figure.label.repeat-axis": "axis it repeats along",
|
|
263
272
|
"figure.label.repeat-count": "数量",
|
|
273
|
+
"figure.label.repeat-gap": "pitch",
|
|
264
274
|
"figure.label.repeat-pitch": "pitch",
|
|
265
275
|
"figure.label.reuse-trend": "reuse trend",
|
|
266
276
|
"figure.label.instance-count": "实例数",
|
|
@@ -318,7 +328,7 @@
|
|
|
318
328
|
"figure.text.bound-by-triangles": "三角形先达到上限 (每个 {per},每个图面 {budget})。",
|
|
319
329
|
"figure.text.budget-measured-on": "于 {on} 在 {gpu} 上实测。静止的图形不产生开销 — 只计算屏幕上被重绘的部分。",
|
|
320
330
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
321
|
-
"figure.text.budgets-not-in-v3": "
|
|
331
|
+
"figure.text.budgets-not-in-v3": "调色板外表面不属于 V3 格式,因此不显示。设置细节等级后会显示部件数限额。",
|
|
322
332
|
"figure.text.trend-chart-title": "按实例数的绘制成本",
|
|
323
333
|
"figure.text.trend-chart-lead": "平线表示实例增加时保持不变的值,同尺寸的实例共享这些值。",
|
|
324
334
|
"figure.text.trend-at-count": "{n} 个时",
|