@things-factory/figure-ui 10.1.22 → 10.1.24
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-canvas.ts +5 -5
- package/client/modeller/figure-inspector.ts +2 -2
- package/client/modeller/figure-preview.ts +7 -7
- package/client/modeller/figure-settings.ts +4 -4
- package/client/modeller/figure-thumbnail.ts +1 -1
- package/client/modeller/figure-view.ts +6 -6
- package/client/modeller/part-edits.ts +1 -1
- package/client/modeller/scene-budget.ts +1 -1
- package/client/pages/figure-list-page.ts +1 -1
- package/client/pages/figure-modeller-page.ts +4 -4
- package/client/types.ts +2 -2
- package/dist-client/modeller/figure-canvas.d.ts +1 -1
- package/dist-client/modeller/figure-canvas.js +5 -5
- package/dist-client/modeller/figure-canvas.js.map +1 -1
- package/dist-client/modeller/figure-inspector.d.ts +1 -1
- package/dist-client/modeller/figure-inspector.js +2 -2
- package/dist-client/modeller/figure-inspector.js.map +1 -1
- package/dist-client/modeller/figure-preview.d.ts +3 -3
- package/dist-client/modeller/figure-preview.js +5 -5
- package/dist-client/modeller/figure-preview.js.map +1 -1
- package/dist-client/modeller/figure-settings.js +4 -4
- package/dist-client/modeller/figure-settings.js.map +1 -1
- package/dist-client/modeller/figure-thumbnail.js +1 -1
- package/dist-client/modeller/figure-thumbnail.js.map +1 -1
- package/dist-client/modeller/figure-view.d.ts +6 -6
- package/dist-client/modeller/figure-view.js.map +1 -1
- package/dist-client/modeller/part-edits.js +1 -1
- package/dist-client/modeller/part-edits.js.map +1 -1
- package/dist-client/modeller/scene-budget.d.ts +1 -1
- package/dist-client/modeller/scene-budget.js +1 -1
- package/dist-client/modeller/scene-budget.js.map +1 -1
- package/dist-client/pages/figure-list-page.js +1 -1
- package/dist-client/pages/figure-list-page.js.map +1 -1
- package/dist-client/pages/figure-modeller-page.d.ts +3 -3
- package/dist-client/pages/figure-modeller-page.js +4 -4
- package/dist-client/pages/figure-modeller-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/types.d.ts +2 -2
- package/dist-client/types.js.map +1 -1
- package/package.json +3 -3
- package/test/figure-source.test.ts +3 -3
- package/test/i18n-prefix-guard.test.ts +19 -1
- package/translations/en.json +25 -14
- package/translations/ja.json +8 -8
- package/translations/ko.json +13 -13
- package/translations/ms.json +8 -8
- package/translations/zh.json +8 -8
package/dist-client/types.d.ts
CHANGED
|
@@ -77,8 +77,8 @@ export interface NewFigure {
|
|
|
77
77
|
/**
|
|
78
78
|
* 수정.
|
|
79
79
|
*
|
|
80
|
-
* `type` 이 없다 — 저장되는 식별자라 고칠 수 없다. 배치된
|
|
81
|
-
* 찾으므로, 바꾸면 그
|
|
80
|
+
* `type` 이 없다 — 저장되는 식별자라 고칠 수 없다. 배치된 도면이 그 이름으로 타입을
|
|
81
|
+
* 찾으므로, 바꾸면 그 도면이 빈 화면이 된다.
|
|
82
82
|
*/
|
|
83
83
|
export interface FigurePatch {
|
|
84
84
|
name?: string;
|
package/dist-client/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../client/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 화면이 다루는 모양.\n *\n * 정본 형식(`FigureSource`)의 타입은 **여기서 다시 정의하지 않는다** —\n * `@hatiolab/figure-model` 에서 가져온다. 두 벌이면 갈리고, 갈리면 화면이 서버가\n * 거절할 것을 만들어 낸다.\n */\nexport type { FigureSource, FigureBlueprint, FigurePart, ErrorCode, ViolationCode } from '@hatiolab/figure-model'\n\n/** 서버가 돌려주는 Figure 한 벌. `source` 는 저작면에서만 받는다. */\nexport interface Figure {\n id: string\n /** 컴포넌트 타입 이름. **만든 뒤에 고칠 수 없다.** */\n type: string\n name: string\n description?: string\n /** 분류 하나 — 팔레트에서 묶어 보이는 기준. */\n category?: string\n /** 태그 여럿 — 분류로는 못 하는 찾기. */\n tags?: string[]\n state?: 'draft' | 'released'\n /** 재활용 점수 0~100. 서버가 정본에서 계산한다 — 화면이 보내는 값이 아니다. */\n score?: number\n triangles?: number\n groups?: number\n thumbnail?: string\n thumbnailUpdatedAt?: string\n updatedAt?: string\n updater?: { id: string; name: string }\n /** `FigureSource` JSON 문자열. 목록 질의에는 실려 오지 않는다. */\n source?: string\n properties?: string\n version?: number\n}\n\n/**\n * 발행된 판 하나.\n *\n * 저작 중 저장은 여기 오지 않는다 — 판본은 발행에서만 생긴다.\n */\nexport interface FigureVersion {\n version: number\n /** 발행하며 남긴 말. */\n comment?: string\n state?: 'draft' | 'released'\n updatedAt?: string\n updater?: { id: string; name: string }\n score?: number\n triangles?: number\n groups?: number\n}\n\nexport interface FigureListResult {\n items: Figure[]\n total: number\n}\n\n/**\n * 새 Figure.\n *\n * `score`·`triangles`·`groups` 가 없다 — **서버가 정본에서 계산한다.** 화면이 보내면\n * 거짓이 들어오고 목록이 실물과 다른 것을 보여 준다.\n */\nexport interface NewFigure {\n type: string\n name: string\n description?: string\n category?: string\n tags?: string[]\n source: string\n properties?: string\n state?: 'draft' | 'released'\n thumbnail?: string\n}\n\n/**\n * 수정.\n *\n * `type` 이 없다 — 저장되는 식별자라 고칠 수 없다. 배치된
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../client/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 화면이 다루는 모양.\n *\n * 정본 형식(`FigureSource`)의 타입은 **여기서 다시 정의하지 않는다** —\n * `@hatiolab/figure-model` 에서 가져온다. 두 벌이면 갈리고, 갈리면 화면이 서버가\n * 거절할 것을 만들어 낸다.\n */\nexport type { FigureSource, FigureBlueprint, FigurePart, ErrorCode, ViolationCode } from '@hatiolab/figure-model'\n\n/** 서버가 돌려주는 Figure 한 벌. `source` 는 저작면에서만 받는다. */\nexport interface Figure {\n id: string\n /** 컴포넌트 타입 이름. **만든 뒤에 고칠 수 없다.** */\n type: string\n name: string\n description?: string\n /** 분류 하나 — 팔레트에서 묶어 보이는 기준. */\n category?: string\n /** 태그 여럿 — 분류로는 못 하는 찾기. */\n tags?: string[]\n state?: 'draft' | 'released'\n /** 재활용 점수 0~100. 서버가 정본에서 계산한다 — 화면이 보내는 값이 아니다. */\n score?: number\n triangles?: number\n groups?: number\n thumbnail?: string\n thumbnailUpdatedAt?: string\n updatedAt?: string\n updater?: { id: string; name: string }\n /** `FigureSource` JSON 문자열. 목록 질의에는 실려 오지 않는다. */\n source?: string\n properties?: string\n version?: number\n}\n\n/**\n * 발행된 판 하나.\n *\n * 저작 중 저장은 여기 오지 않는다 — 판본은 발행에서만 생긴다.\n */\nexport interface FigureVersion {\n version: number\n /** 발행하며 남긴 말. */\n comment?: string\n state?: 'draft' | 'released'\n updatedAt?: string\n updater?: { id: string; name: string }\n score?: number\n triangles?: number\n groups?: number\n}\n\nexport interface FigureListResult {\n items: Figure[]\n total: number\n}\n\n/**\n * 새 Figure.\n *\n * `score`·`triangles`·`groups` 가 없다 — **서버가 정본에서 계산한다.** 화면이 보내면\n * 거짓이 들어오고 목록이 실물과 다른 것을 보여 준다.\n */\nexport interface NewFigure {\n type: string\n name: string\n description?: string\n category?: string\n tags?: string[]\n source: string\n properties?: string\n state?: 'draft' | 'released'\n thumbnail?: string\n}\n\n/**\n * 수정.\n *\n * `type` 이 없다 — 저장되는 식별자라 고칠 수 없다. 배치된 도면이 그 이름으로 타입을\n * 찾으므로, 바꾸면 그 도면이 빈 화면이 된다.\n */\nexport interface FigurePatch {\n name?: string\n description?: string\n category?: string\n /** 빈 배열은 「전부 지운다」, 안 주는 것은 「건드리지 않는다」. */\n tags?: string[]\n source?: string\n properties?: string\n state?: 'draft' | 'released'\n thumbnail?: string\n}\n\n/** 검증 결과 한 줄. 코드는 figure-model 의 것을 그대로 쓴다. */\nexport interface FigureFinding {\n code: string\n message: string\n at?: string\n}\n\n/**\n * 저작 보조가 낸 후보.\n *\n * **정본이 아니다.** 저작자가 보고 받아야 정본이 된다 — 서버는 저장하지 않고\n * 돌려주기만 한다.\n */\nexport interface FigureProposal {\n /** 후보 정본. JSON 문자열이다 — 화면이 파싱한다. */\n source: string\n score: number\n grade: string\n triangles: number\n /** 재질 묶음 = 인스턴스 하나가 무는 draw call. */\n groups: number\n /** Rule-based review of measurable design concerns; it is not an aesthetic verdict. */\n quality: {\n status: 'ready' | 'review'\n summary: string\n findings: Array<{ dimension: string; code: string; message: string }>\n visualRegions: number\n visualCoverage: number\n visualReadability: number\n }\n /** 형식은 맞으나 정책을 넘은 것. 막지 않는다 — 저작자가 정한다. */\n violations: FigureFinding[]\n /** 몇 번 만에 됐나. 진단용이다. */\n attempts: number\n}\n\n/** 사람이 후보를 수락하거나 버릴 때 직접 남긴 현재 저작 세션의 참고 신호. */\nexport interface ProposalFeedback {\n outcome: 'accepted' | 'discarded'\n selectedChanges: number\n totalChanges: number\n note?: string\n grade?: string\n quality?: { status?: 'ready' | 'review'; findingCodes?: string[] }\n}\n\n/**\n * 발행 판정 한 줄.\n *\n * `FigureFinding` 과 달리 **`blocking` 이 있다.** 저장 쪽 발견은 정의상 막지 않는 것들이고,\n * 발행 판정은 막는 것과 알리는 것을 함께 내므로 어느 쪽인지를 값이 스스로 말한다 — 코드를 보고\n * 화면이 다시 분류하면 규칙이 두 벌이 된다.\n */\n/** One reversible anchor edit the sizing gate has measured against this exact source. */\nexport interface FigureGateFix {\n findingWay: string\n part: string\n axis: 'x' | 'y' | 'z'\n from?: string\n to: 'min' | 'center' | 'max' | 'span'\n resolved: number\n /** All blocking sizing cases clear after this exact edit was remeasured server-side. */\n safe: boolean\n}\n\nexport interface FigureGateFinding {\n code: string\n message: string\n /** 왜 그것이 문제인가 — 사람이 무엇을 보게 되나. */\n why?: string\n /** 무엇을 바꾸면 되나 — 부품 이름과 값으로. */\n how?: string\n /** 갈라진 부품 이름들, 또는 정본 안의 경로. */\n at?: string\n /** Candidate edits; the UI must preview and explicitly apply these, never auto-save them. */\n fixes?: FigureGateFix[]\n blocking: boolean\n}\n\n/** 발행해도 되나. `blocked` 면 서버가 거절한다. */\nexport interface FigureInspection {\n blocked: boolean\n findings: FigureGateFinding[]\n}\n"]}
|
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.24",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"@things-factory:registry": "https://registry.npmjs.org"
|
|
@@ -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.24",
|
|
41
41
|
"three": "^0.185.1"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "0d88a504e0ffa63cd91279b88c6998d4bf1b3d86"
|
|
44
44
|
}
|
|
@@ -541,11 +541,11 @@ describe('미리보기가 높이를 씬에게 맡긴다', () => {
|
|
|
541
541
|
|
|
542
542
|
/*
|
|
543
543
|
배치 기준을 높이로 옮기는 규칙은 씬이 갖는다 — `FigureRealObject.effectiveZPos` 가 청사진의
|
|
544
|
-
`placement` 와 레이어의 `heights` 로 정한다(ADR-0045). 미리보기는
|
|
545
|
-
말하는 자리이므로
|
|
544
|
+
`placement` 와 레이어의 `heights` 로 정한다(ADR-0045). 미리보기는 「도면에 놓았을 때」를
|
|
545
|
+
말하는 자리이므로 도면과 같은 길로 세워야 한다.
|
|
546
546
|
|
|
547
547
|
이 화면이 규칙을 한 벌 더 들고 있었다. 그러면 씬의 규칙이 바뀌어도 이 화면만 옛 답을 내고,
|
|
548
|
-
저작자는
|
|
548
|
+
저작자는 도면에 놓고 나서야 다르다는 것을 안다.
|
|
549
549
|
*/
|
|
550
550
|
it('인스턴스에 zPos 를 적지 않는다 — 적으면 적은 값이 이긴다', () => {
|
|
551
551
|
const at = preview.indexOf('const components = PREVIEW_WAYS.map')
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 없다 — 내가 적은 값이 아니라 이긴 값이 뜬다.
|
|
8
8
|
*
|
|
9
9
|
* 실제로 그랬다. figure 앱의 발행 단추가 「배포」로 떴다(draft-ui 의 `button.release` 가 이겼다).
|
|
10
|
-
* 그때 figure 의 266개 키 중 아홉이 **다른 뜻으로** 겹쳐 있었다 — 모델러가 자기 부품을 board 의
|
|
10
|
+
* 그때 figure 의 266개 키 중 아홉이 **다른 뜻으로** 겹쳐 있었다 — 모델러가 자기 부품을 `board-ui` 의
|
|
11
11
|
* 낱말인 「품목」이라 부르고 있었고 아무것도 그것을 말해 주지 않았다.
|
|
12
12
|
*
|
|
13
13
|
* ── 규약 ────────────────────────────────────────────────────────────────────
|
|
@@ -159,6 +159,24 @@ test('★ 애니메이션 탭이 그 통에서 찾는다 — 이름은 label,
|
|
|
159
159
|
assert.ok(source.includes("'figure.text.path-' + channel.path + '-unit'"), '단위 설명을 text 통에서 찾지 않는다')
|
|
160
160
|
})
|
|
161
161
|
|
|
162
|
+
/*
|
|
163
|
+
대체 언어(`fallbackLng`)는 **en** 이다 — 클라이언트(`@operato/i18n` 의 config)와 서버
|
|
164
|
+
(`i18n-base` 의 미들웨어) 양쪽 다.
|
|
165
|
+
|
|
166
|
+
그래서 ja·ms·zh 에 키가 없으면 화면에 **영어가** 뜬다. 낱말이 빠진 것은 맞지만 화면이
|
|
167
|
+
깨진 것은 아니다. **en 에 없으면 그때 키가 그대로 뜬다** — 대체할 곳이 없다.
|
|
168
|
+
|
|
169
|
+
한 번 그렇게 났다. 움직임 탭의 레시피 문구 열하나가 ko 에만 있어서, 한국어 아닌 사용자는
|
|
170
|
+
단추에 `figure.label.recipe-lift` 를 보고 있었다. 세는 자리가 ja·ms·zh 였으면 111 이
|
|
171
|
+
나왔을 텐데, **화면에 키를 띄우는 것은 그 열하나뿐**이다.
|
|
172
|
+
*/
|
|
173
|
+
test('★ ko 의 키가 en 에 다 있다 — en 이 대체 언어라 여기가 비면 키가 그대로 뜬다', () => {
|
|
174
|
+
const EN = JSON.parse(readFileSync(join(TRANSLATIONS, 'en.json'), 'utf-8')) as Record<string, string>
|
|
175
|
+
const raw = Object.keys(KO).filter(key => !(key in EN))
|
|
176
|
+
|
|
177
|
+
assert.deepEqual(raw, [], `대체할 곳이 없어 화면에 키로 뜬다:\n ${raw.join('\n ')}`)
|
|
178
|
+
})
|
|
179
|
+
|
|
162
180
|
test('★ 이 가드가 실제로 읽고 있다 — 0이면 검사가 죽은 것이다', () => {
|
|
163
181
|
assert.ok(Object.keys(KO).length > 250, `읽은 키가 ${Object.keys(KO).length}개다`)
|
|
164
182
|
assert.ok(FILES.length > 10, `읽은 화면이 ${FILES.length}개다`)
|
package/translations/en.json
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"figure.label.anchor-scale": "grows with the box",
|
|
63
63
|
"figure.label.anchor-span": "touches both faces, fills between",
|
|
64
64
|
"figure.label.animation": "animation",
|
|
65
|
-
"figure.label.assumed-
|
|
65
|
+
"figure.label.assumed-drawing": "the drawing it goes on",
|
|
66
66
|
"figure.label.axis-consistency": "visual consistency",
|
|
67
67
|
"figure.label.axis-consistency-short": "consistency",
|
|
68
68
|
"figure.label.axis-depth": "depth",
|
|
@@ -140,6 +140,7 @@
|
|
|
140
140
|
"figure.label.maturity": "maturity",
|
|
141
141
|
"figure.label.mode-edit": "edit",
|
|
142
142
|
"figure.label.mode-preview": "preview",
|
|
143
|
+
"figure.label.motion-intent": "what should move?",
|
|
143
144
|
"figure.label.name": "name",
|
|
144
145
|
"figure.label.no-color-chosen": "no color set",
|
|
145
146
|
"figure.label.none": "none",
|
|
@@ -191,6 +192,10 @@
|
|
|
191
192
|
"figure.label.primitive-wall": "wall",
|
|
192
193
|
"figure.label.properties": "properties",
|
|
193
194
|
"figure.label.proposed": "proposed",
|
|
195
|
+
"figure.label.recipe-conveyor": "conveyor rollers keep turning",
|
|
196
|
+
"figure.label.recipe-gate": "a door or gate opens",
|
|
197
|
+
"figure.label.recipe-lift": "a lift changes height",
|
|
198
|
+
"figure.label.recipe-pusher": "a pusher moves into place",
|
|
194
199
|
"figure.label.release": "release",
|
|
195
200
|
"figure.label.released-versions": "released versions",
|
|
196
201
|
"figure.label.repeat-axis": "axis it repeats along",
|
|
@@ -241,17 +246,17 @@
|
|
|
241
246
|
"figure.text.all-lights-off": "both lights are off. only self-lit surfaces show; everything else goes black — this is how you check whether a lamp is lit.",
|
|
242
247
|
"figure.text.already-released-edit-to-release-again": "already released. edit and save to go back to draft, then release again.",
|
|
243
248
|
"figure.text.anchor-explained": "where this part stays as the box grows. Two touching parts on different faces drift apart as it grows.",
|
|
244
|
-
"figure.text.anchors-are-not-drawn": "a slot is where things are placed, a port is where things enter and leave. neither is drawn on a
|
|
249
|
+
"figure.text.anchors-are-not-drawn": "a slot is where things are placed, a port is where things enter and leave. neither is drawn on a drawing; the editor shows their positions",
|
|
245
250
|
"figure.text.animated-parts-cost": "A moving part is drawn on its own — one more draw call each, and a matrix update every frame.",
|
|
246
|
-
"figure.text.animated-parts-over": "Over the limit. Nothing is blocked, but many of these on one
|
|
251
|
+
"figure.text.animated-parts-over": "Over the limit. Nothing is blocked, but many of these on one drawing will cost frames.",
|
|
247
252
|
"figure.text.animation-empty-examples": "A turning roller · a sliding door leaf · a rising lift · a blinking beacon.",
|
|
248
253
|
"figure.text.animation-empty-what-it-is": "This figure does not move yet. A clip is one set of motion across several parts — a door opening is the two leaves sliding apart, not two separate things.",
|
|
249
254
|
"figure.text.animation-is-driven-by-a-fact": "Motion comes in two kinds: animation, where time runs, and parameters, where the value an instance gives is the pose.",
|
|
250
255
|
"figure.text.animation-needs-a-named-part": "Add a part first. A channel names the part it moves.",
|
|
251
256
|
"figure.text.assistant-proposed-a-figure": "here is a proposal — the result is on the right.",
|
|
252
257
|
"figure.text.axes-not-measurable-yet": "axes that cannot be measured yet are left off the chart — {axes}. the reason is listed below.",
|
|
253
|
-
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a
|
|
254
|
-
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a
|
|
258
|
+
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
259
|
+
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
255
260
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
256
261
|
"figure.text.cannot-release-now": "cannot be released yet",
|
|
257
262
|
"figure.text.canvas-appears-once-a-part-exists": "the editing area where you place and move parts. pick one from shapes on the left to start.",
|
|
@@ -280,7 +285,7 @@
|
|
|
280
285
|
"figure.text.collapse-parts-pane": "collapse the part list",
|
|
281
286
|
"figure.text.collapse-properties-pane": "collapse the property pane",
|
|
282
287
|
"figure.text.coordinate-ground-explained": "draws the origin and a grid on the floor",
|
|
283
|
-
"figure.text.delete-figure-confirm": "delete {name}?
|
|
288
|
+
"figure.text.delete-figure-confirm": "delete {name}? drawings already using this type will no longer find it.",
|
|
284
289
|
"figure.text.designate-in-properties": "nothing designated yet. select a part and set its role in the properties tab",
|
|
285
290
|
"figure.text.detail-level-explained": "declares how detailed this figure is meant to be. S simple suits signs and posts, M normal suits most equipment, L detailed suits the large equipment a view is built around. the level sets the part limit, and maturity checks whether the figure lives up to it.",
|
|
286
291
|
"figure.text.discard-changes-and-start-new": "there are unsaved changes. discard them and start a new figure?",
|
|
@@ -302,7 +307,7 @@
|
|
|
302
307
|
"figure.text.hemisphere-light-explained": "even light from sky and ground. it lifts the shaded faces.",
|
|
303
308
|
"figure.text.hide-all-parts": "hide all",
|
|
304
309
|
"figure.text.hide-this-part": "hide this part while you work. not saved",
|
|
305
|
-
"figure.text.how-many-fit": "how many fit on one
|
|
310
|
+
"figure.text.how-many-fit": "how many fit on one drawing before it slows down",
|
|
306
311
|
"figure.text.instances-unit": "instances",
|
|
307
312
|
"figure.text.interpolation-explained": "How the gap between keys is filled.",
|
|
308
313
|
"figure.text.keep-round-cost": "1 draw call",
|
|
@@ -319,12 +324,13 @@
|
|
|
319
324
|
"figure.text.maturity-detail-because": "how much of the declared level you actually used.",
|
|
320
325
|
"figure.text.maturity-readable-because": "how many distinct colour regions are visible from directly above, and how evenly. Viewpoint entropy (Vazquez et al.) computed over colour regions rather than faces — counting faces would reward raising the segment count alone.",
|
|
321
326
|
"figure.text.maturity-reuse-because": "shapes saved because several parts share one. a low number is not a fault.",
|
|
322
|
-
"figure.text.maturity-scale-because": "measured against a
|
|
327
|
+
"figure.text.maturity-scale-because": "measured against a drawing holding 500 assets.",
|
|
323
328
|
"figure.text.mirror-explained": "adds a mirrored copy on the other side — for parts that come in pairs, like legs or arms.",
|
|
324
329
|
"figure.text.mirror-would-overlap": "already centred — a mirror would land in the same place and overlap.",
|
|
325
330
|
"figure.text.mode-edit-explained": "place and edit parts. always at the base size.",
|
|
326
|
-
"figure.text.mode-preview-explained": "how it looks placed on a
|
|
331
|
+
"figure.text.mode-preview-explained": "how it looks placed on a drawing. base size next to the enlarged ones.",
|
|
327
332
|
"figure.text.more-segment-options": "advanced segment counts",
|
|
333
|
+
"figure.text.motion-intent-help": "pick the part to move, then what it is for. the motion it makes can be adjusted in the advanced editor below.",
|
|
328
334
|
"figure.text.must-fix-to-release": "fix these first",
|
|
329
335
|
"figure.text.n-of-limit": "{used} / {limit}",
|
|
330
336
|
"figure.text.n-parts-at-most": "up to {limit} parts",
|
|
@@ -334,7 +340,7 @@
|
|
|
334
340
|
"figure.text.not-measurable-yet": "not measurable",
|
|
335
341
|
"figure.text.not-measured-yet": "not measured",
|
|
336
342
|
"figure.text.nothing-released-yet": "nothing released yet. releasing keeps the figure as it is now, as a version.",
|
|
337
|
-
"figure.text.on-by-default-explained": "the starting state when placed on a
|
|
343
|
+
"figure.text.on-by-default-explained": "the starting state when placed on a drawing. an instance switching it wins.",
|
|
338
344
|
"figure.text.other-segment-count": "enter a value",
|
|
339
345
|
"figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
|
|
340
346
|
"figure.text.parameter-curve-is-the-value-axis": "The curve’s time axis is the value axis. Its start is the range minimum and its end the maximum, and that end time is how long a full move takes.",
|
|
@@ -343,6 +349,7 @@
|
|
|
343
349
|
"figure.text.parameter-needs-a-name": "Without a name a value has nowhere to land.",
|
|
344
350
|
"figure.text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
|
|
345
351
|
"figure.text.part-limit-reached-short": "level {level} allows {limit} parts. Raise the level or remove a part.",
|
|
352
|
+
"figure.text.part-name-cannot-be-empty": "give the part a name.",
|
|
346
353
|
"figure.text.path-rotation-unit": "Euler degrees — the same convention as the part's own rotation.",
|
|
347
354
|
"figure.text.path-scale-unit": "A ratio. 1 is full size; 0 makes the part vanish.",
|
|
348
355
|
"figure.text.path-translation-unit": "Offset from where the part sits. 0 leaves it in place.",
|
|
@@ -351,11 +358,15 @@
|
|
|
351
358
|
"figure.text.pivot-defaults-to-the-part-centre": "Left unset, the part turns about its own centre. Coordinates are local to the part.",
|
|
352
359
|
"figure.text.placement-explained": "sets the anchor plane in 3D scene (floor: AGV/conveyor, ceiling: OHT/hoist, center: sensor/drone).",
|
|
353
360
|
"figure.text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
|
|
354
|
-
"figure.text.preview-needs-a-part": "shows how it looks placed on a
|
|
361
|
+
"figure.text.preview-needs-a-part": "shows how it looks placed on a drawing. appears once you make a part.",
|
|
355
362
|
"figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
|
|
356
363
|
"figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
|
|
357
364
|
"figure.text.put-on-floor": "drop it to the floor (Z=0).",
|
|
358
365
|
"figure.text.range-needs-room": "The maximum must be above the minimum; equal leaves no room to move.",
|
|
366
|
+
"figure.text.recipe-conveyor": "animation · an instance gives it a speed",
|
|
367
|
+
"figure.text.recipe-gate": "parameter · an instance gives how far open, 0 to 100 %",
|
|
368
|
+
"figure.text.recipe-lift": "parameter · an instance gives the height, 0 to 100 mm",
|
|
369
|
+
"figure.text.recipe-pusher": "parameter · an instance gives the travel, 0 to 100 mm",
|
|
359
370
|
"figure.text.release-needs-a-save-first": "there are unsaved changes. a release publishes what was saved, so save first.",
|
|
360
371
|
"figure.text.releasing": "releasing…",
|
|
361
372
|
"figure.text.renaming-a-part-breaks-bindings": "the name is a stored identifier — changing it breaks bindings on instances already placed.",
|
|
@@ -365,7 +376,7 @@
|
|
|
365
376
|
"figure.text.repeat-grows-with-instance": "the count grows as the instance grows on this axis. the pitch stays",
|
|
366
377
|
"figure.text.repeat-keeps-count": "the count stays and each copy grows, because this axis anchors to scale",
|
|
367
378
|
"figure.text.repeat-pitch-explained": "centre to centre distance. it does not depend on the part size, so widening or turning the part leaves the layout alone.",
|
|
368
|
-
"figure.text.report-appears-when-you-add-a-part": "shows triangles, draw calls, and how many fit on one
|
|
379
|
+
"figure.text.report-appears-when-you-add-a-part": "shows triangles, draw calls, and how many fit on one drawing. measured once you make a part.",
|
|
369
380
|
"figure.text.reuse-score-explained": "how much headroom is left in the declared limits. the one closest to its cap sets the score.",
|
|
370
381
|
"figure.text.revert-to-version-confirm": "revert to v{version}? what you are working on will be replaced by that version.",
|
|
371
382
|
"figure.text.role-none-means-drawn": "with none checked this is just a drawn part",
|
|
@@ -375,7 +386,7 @@
|
|
|
375
386
|
"figure.text.save-new-figure-desc": "Set the unique type code and display name for this figure.",
|
|
376
387
|
"figure.text.save-the-figure-before-releasing": "this figure has not been saved yet. save it and you can release it.",
|
|
377
388
|
"figure.text.saving-figure": "saving",
|
|
378
|
-
"figure.text.scene-reference-explained": "which kind of
|
|
389
|
+
"figure.text.scene-reference-explained": "which kind of drawing you are looking at this on. Not the same as the figure's own placement — put a ceiling figure on a floor-based drawing and the drawing stays put while the figure hangs at ceiling height.",
|
|
379
390
|
"figure.text.search-figure": "search by name, type, description, category or tag",
|
|
380
391
|
"figure.text.select-a-part-to-edit": "select a part to edit it here.",
|
|
381
392
|
"figure.text.show-all-parts": "show all",
|
|
@@ -399,7 +410,7 @@
|
|
|
399
410
|
"figure.text.unsaved-changes": "unsaved",
|
|
400
411
|
"figure.text.version-number": "v{version}",
|
|
401
412
|
"figure.text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
|
|
402
|
-
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a
|
|
413
|
+
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a drawing, sharing shape and material across every instance.",
|
|
403
414
|
"figure.text.what-changed-in-this-release": "what changed in this release",
|
|
404
415
|
"figure.title.figures": "figures",
|
|
405
416
|
"figure.title.new-figure": "new figure",
|
package/translations/ja.json
CHANGED
|
@@ -191,8 +191,8 @@
|
|
|
191
191
|
"figure.text.anchor-explained": "箱が大きくなるとき、この部品がどこにくっついているかです。接している部品と違う面にくっついていると、大きくなるにつれて離れます。",
|
|
192
192
|
"figure.text.assistant-proposed-a-figure": "here is a proposal — the result is on the right.",
|
|
193
193
|
"figure.text.axes-not-measurable-yet": "axes that cannot be measured yet are left off the chart — {axes}. the reason is listed below.",
|
|
194
|
-
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a
|
|
195
|
-
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a
|
|
194
|
+
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
195
|
+
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
196
196
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
197
197
|
"figure.text.cannot-release-now": "今は公開できません",
|
|
198
198
|
"figure.text.canvas-appears-once-a-part-exists": "the canvas appears once the figure has a part.",
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
"figure.text.collapse-parts-pane": "collapse the part list",
|
|
211
211
|
"figure.text.collapse-properties-pane": "collapse the property pane",
|
|
212
212
|
"figure.text.coordinate-ground-explained": "draws the origin and a grid on the floor",
|
|
213
|
-
"figure.text.delete-figure-confirm": "delete {name}?
|
|
213
|
+
"figure.text.delete-figure-confirm": "delete {name}? drawings already using this type will no longer find it.",
|
|
214
214
|
"figure.text.detail-level-explained": "declares how detailed this figure is meant to be. S simple suits signs and posts, M normal suits most equipment, L detailed suits the large equipment a view is built around. the level sets the part limit, and maturity checks whether the figure lives up to it.",
|
|
215
215
|
"figure.text.discard-changes-and-start-new": "保存していない変更があります。破棄して新しく始めますか?",
|
|
216
216
|
"figure.text.does-not-block": "止めないもの",
|
|
@@ -245,11 +245,11 @@
|
|
|
245
245
|
"figure.text.maturity-detail-because": "how much of the declared level you actually used.",
|
|
246
246
|
"figure.text.maturity-readable-because": "how many distinct colour regions are visible from directly above, and how evenly. Viewpoint entropy (Vazquez et al.) computed over colour regions rather than faces — counting faces would reward raising the segment count alone.",
|
|
247
247
|
"figure.text.maturity-reuse-because": "shapes saved because several parts share one. a low number is not a fault.",
|
|
248
|
-
"figure.text.maturity-scale-because": "measured against a
|
|
248
|
+
"figure.text.maturity-scale-because": "measured against a drawing holding 500 assets.",
|
|
249
249
|
"figure.text.mirror-explained": "adds a mirrored copy on the other side — for parts that come in pairs, like legs or arms.",
|
|
250
250
|
"figure.text.mirror-would-overlap": "already centred — a mirror would land in the same place and overlap.",
|
|
251
251
|
"figure.text.mode-edit-explained": "place and edit parts. always at the base size.",
|
|
252
|
-
"figure.text.mode-preview-explained": "how it looks placed on a
|
|
252
|
+
"figure.text.mode-preview-explained": "how it looks placed on a drawing. base size next to the enlarged ones.",
|
|
253
253
|
"figure.text.more-segment-options": "advanced segment counts",
|
|
254
254
|
"figure.text.must-fix-to-release": "直すべきもの",
|
|
255
255
|
"figure.text.n-of-limit": "{used} / {limit}",
|
|
@@ -260,7 +260,7 @@
|
|
|
260
260
|
"figure.text.not-measurable-yet": "not measurable",
|
|
261
261
|
"figure.text.not-measured-yet": "not measured",
|
|
262
262
|
"figure.text.nothing-released-yet": "まだ公開した版がありません。公開すると、その時点のフィギュアが版として残ります。",
|
|
263
|
-
"figure.text.on-by-default-explained": "the starting state when placed on a
|
|
263
|
+
"figure.text.on-by-default-explained": "the starting state when placed on a drawing. an instance switching it wins.",
|
|
264
264
|
"figure.text.other-segment-count": "enter a value",
|
|
265
265
|
"figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
|
|
266
266
|
"figure.text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
"figure.text.pick-a-shape-above-to-start": "pick a shape above to add the first part.",
|
|
269
269
|
"figure.text.picked-changes-do-not-validate": "the selected changes do not make a valid figure",
|
|
270
270
|
"figure.text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
|
|
271
|
-
"figure.text.preview-needs-a-part": "add a part and the
|
|
271
|
+
"figure.text.preview-needs-a-part": "add a part and the drawing view appears here.",
|
|
272
272
|
"figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
|
|
273
273
|
"figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
|
|
274
274
|
"figure.text.put-on-floor": "drop it to the floor (Z=0).",
|
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
"figure.text.unsaved-changes": "unsaved",
|
|
301
301
|
"figure.text.version-number": "第{version}版",
|
|
302
302
|
"figure.text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
|
|
303
|
-
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a
|
|
303
|
+
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a drawing, sharing shape and material across every instance.",
|
|
304
304
|
"figure.text.what-changed-in-this-release": "この版で何が変わったか",
|
|
305
305
|
"figure.title.figures": "figures",
|
|
306
306
|
"figure.title.new-figure": "new figure"
|
package/translations/ko.json
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"figure.label.anchor-scale": "상자와 함께 커진다",
|
|
63
63
|
"figure.label.anchor-span": "양쪽 면에 닿아 사이를 채운다",
|
|
64
64
|
"figure.label.animation": "애니메이션",
|
|
65
|
-
"figure.label.assumed-
|
|
65
|
+
"figure.label.assumed-drawing": "놓이는 도면",
|
|
66
66
|
"figure.label.axis-consistency": "표현 일관성",
|
|
67
67
|
"figure.label.axis-consistency-short": "일관성",
|
|
68
68
|
"figure.label.axis-depth": "높이",
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
"figure.text.all-lights-off": "빛이 둘 다 꺼져 있습니다. 스스로 빛나는 면만 보이고 나머지는 까맣게 나옵니다 — 램프가 켜졌는지 확인할 때 쓰는 상태입니다.",
|
|
247
247
|
"figure.text.already-released-edit-to-release-again": "이미 발행되어 있습니다. 고쳐서 저장하면 초안으로 돌아가고, 그때 다시 발행할 수 있습니다.",
|
|
248
248
|
"figure.text.anchor-explained": "상자가 커질 때 이 부품이 어디에 붙어 있을지입니다. 맞댄 부품과 다른 면에 붙어 있으면 커질 때 사이가 벌어집니다.",
|
|
249
|
-
"figure.text.anchors-are-not-drawn": "자리는 물건을 놓는 곳, 문은 물건이 들어오고 나가는 곳이다. 둘 다
|
|
249
|
+
"figure.text.anchors-are-not-drawn": "자리는 물건을 놓는 곳, 문은 물건이 들어오고 나가는 곳이다. 둘 다 도면에서 그려지지 않고 위치는 저작 화면에서만 표시된다",
|
|
250
250
|
"figure.text.animated-parts-cost": "움직이는 부품은 따로 그려집니다 — 부품마다 draw call 이 하나 늘고 프레임마다 갱신이 늘어납니다.",
|
|
251
251
|
"figure.text.animated-parts-over": "한도를 넘었습니다. 막지는 않지만 여럿 놓을 때 이 도형이 프레임을 많이 씁니다.",
|
|
252
252
|
"figure.text.animation-empty-examples": "도는 롤러 · 미끄러지는 문짝 · 오르내리는 리프트 · 깜빡이는 표시등.",
|
|
@@ -285,7 +285,7 @@
|
|
|
285
285
|
"figure.text.collapse-parts-pane": "부품 목록 접기",
|
|
286
286
|
"figure.text.collapse-properties-pane": "속성 칸 접기",
|
|
287
287
|
"figure.text.coordinate-ground-explained": "원점과 눈금을 바닥에 그린다",
|
|
288
|
-
"figure.text.delete-figure-confirm": "{name} 을 삭제하시겠습니까? 이 타입을 쓰고 있는
|
|
288
|
+
"figure.text.delete-figure-confirm": "{name} 을 삭제하시겠습니까? 이 타입을 쓰고 있는 도면은 더 이상 찾지 못합니다.",
|
|
289
289
|
"figure.text.designate-in-properties": "아직 지정된 부품이 없다. 부품을 선택하고 속성 탭에서 「능력에서 맡는 자리」를 지정한다",
|
|
290
290
|
"figure.text.detail-level-explained": "이 형상을 얼마나 상세하게 만들 것인지 밝히는 값입니다. S 단순은 표지나 기둥처럼 형태가 단순한 것, M 보통은 대부분의 설비, L 상세는 화면의 주역이 되는 큰 설비에 씁니다. 밝힌 등급이 부품 수 한도를 정하고, 성숙도가 그 등급에 걸맞게 만들어졌는지 봅니다.",
|
|
291
291
|
"figure.text.discard-changes-and-start-new": "저장하지 않은 변경이 있습니다. 버리고 새로 시작할까요?",
|
|
@@ -328,7 +328,7 @@
|
|
|
328
328
|
"figure.text.mirror-explained": "반대쪽에 대칭으로 하나 더 만듭니다. 다리나 팔처럼 짝이 있는 부품에 씁니다.",
|
|
329
329
|
"figure.text.mirror-would-overlap": "이미 가운데에 있어 대칭이 제자리입니다. 겹친 부품이 생깁니다.",
|
|
330
330
|
"figure.text.mode-edit-explained": "부품을 놓고 고칩니다. 늘 기준 크기입니다.",
|
|
331
|
-
"figure.text.mode-preview-explained": "
|
|
331
|
+
"figure.text.mode-preview-explained": "도면에 놓았을 때의 모습입니다. 기준 크기와 늘린 것을 나란히 놓습니다.",
|
|
332
332
|
"figure.text.more-segment-options": "고급 분할 수",
|
|
333
333
|
"figure.text.motion-intent-help": "움직일 부품을 고른 뒤 목적을 선택하세요. 만들어진 동작은 아래 고급 편집에서 조정할 수 있습니다.",
|
|
334
334
|
"figure.text.must-fix-to-release": "고쳐야 하는 것",
|
|
@@ -340,7 +340,7 @@
|
|
|
340
340
|
"figure.text.not-measurable-yet": "측정 불가",
|
|
341
341
|
"figure.text.not-measured-yet": "미측정",
|
|
342
342
|
"figure.text.nothing-released-yet": "아직 발행한 판이 없습니다. 발행하면 그때의 도형이 판으로 남습니다.",
|
|
343
|
-
"figure.text.on-by-default-explained": "
|
|
343
|
+
"figure.text.on-by-default-explained": "도면에 놓았을 때의 처음 상태입니다. 인스턴스가 켜고 끄면 그것이 이깁니다.",
|
|
344
344
|
"figure.text.other-segment-count": "직접 입력",
|
|
345
345
|
"figure.text.palette-purpose-explained": "색 이름이 아니라 이 부품이 화면에서 맡을 역할을 고릅니다.",
|
|
346
346
|
"figure.text.parameter-curve-is-the-value-axis": "곡선의 시각 축이 값의 구간입니다. 처음이 범위의 최소, 끝이 최대이고, 끝 시각이 곧 전 구간을 움직이는 데 걸리는 시간입니다.",
|
|
@@ -358,15 +358,15 @@
|
|
|
358
358
|
"figure.text.pivot-defaults-to-the-part-centre": "적지 않으면 부품 제 중심입니다. 부품 기준 좌표입니다.",
|
|
359
359
|
"figure.text.placement-explained": "3D 씬에서 객체의 기준면을 정합니다 (바닥: AGV/컨베이어, 천정: OHT/호이스트, 중심: 센서/드론).",
|
|
360
360
|
"figure.text.preview-blocked-by-errors": "형식을 어겨서 세울 수 없습니다. 성숙도 탭에 사유가 있습니다.",
|
|
361
|
-
"figure.text.preview-needs-a-part": "
|
|
361
|
+
"figure.text.preview-needs-a-part": "도면에 놓았을 때의 모습을 표시합니다. 부품을 만들면 표시됩니다.",
|
|
362
362
|
"figure.text.proposal-feedback-note": "다음 제안에 반영할 메모 (현재 세션에만 사용)",
|
|
363
363
|
"figure.text.proposal-feedback-placeholder": "예: 실루엣은 유지하되 포트가 더 잘 보이게",
|
|
364
364
|
"figure.text.put-on-floor": "바닥(Z=0)에 붙입니다.",
|
|
365
365
|
"figure.text.range-needs-room": "최대가 최소보다 커야 합니다. 같으면 움직일 자리가 없습니다.",
|
|
366
|
-
"figure.text.recipe-conveyor": "
|
|
367
|
-
"figure.text.recipe-gate": "
|
|
368
|
-
"figure.text.recipe-lift": "
|
|
369
|
-
"figure.text.recipe-pusher": "
|
|
366
|
+
"figure.text.recipe-conveyor": "애니메이션 · 인스턴스가 배속을 줍니다",
|
|
367
|
+
"figure.text.recipe-gate": "파라미터 · 인스턴스가 열림 정도를 0~100 % 로 줍니다",
|
|
368
|
+
"figure.text.recipe-lift": "파라미터 · 인스턴스가 높이를 0~100 mm 로 줍니다",
|
|
369
|
+
"figure.text.recipe-pusher": "파라미터 · 인스턴스가 이동 거리를 0~100 mm 로 줍니다",
|
|
370
370
|
"figure.text.release-needs-a-save-first": "저장하지 않은 변경이 있습니다. 발행은 저장된 것을 내보내므로, 먼저 저장하세요.",
|
|
371
371
|
"figure.text.releasing": "발행하고 있습니다…",
|
|
372
372
|
"figure.text.renaming-a-part-breaks-bindings": "이름은 저장되는 식별자입니다. 바꾸면 이미 배치된 인스턴스의 바인딩이 끊깁니다.",
|
|
@@ -383,10 +383,10 @@
|
|
|
383
383
|
"figure.text.rung-flow-note": "담는 것에 더해 문으로 받고 보낸다. 컨베이어 · 슈트 · 소터",
|
|
384
384
|
"figure.text.rung-hold-note": "물건을 놓을 자리를 갖는다. 랙 · 팔레트 · 작업대",
|
|
385
385
|
"figure.text.rung-none-note": "물건을 받지 않는다. 대부분의 도형이 여기에 해당한다",
|
|
386
|
-
"figure.text.save-new-figure-desc": "
|
|
386
|
+
"figure.text.save-new-figure-desc": "도면과 캔버스에서 식별할 고유 타입 코드와 이름을 정합니다.",
|
|
387
387
|
"figure.text.save-the-figure-before-releasing": "아직 저장되지 않은 도형입니다. 저장하면 발행할 수 있습니다.",
|
|
388
388
|
"figure.text.saving-figure": "저장 중",
|
|
389
|
-
"figure.text.scene-reference-explained": "어떤
|
|
389
|
+
"figure.text.scene-reference-explained": "어떤 도면에 놓인 것으로 보고 있는지 정합니다. 도형의 배치 기준과 다릅니다 — 바닥 기준 도면에 천정 기반 도형을 놓으면 도면은 그대로이고 도형이 천장 높이에 매달립니다.",
|
|
390
390
|
"figure.text.search-figure": "이름 · 타입 · 설명 · 분류 · 태그로 찾기",
|
|
391
391
|
"figure.text.select-a-part-to-edit": "부품을 선택하면 여기에서 편집합니다.",
|
|
392
392
|
"figure.text.show-all-parts": "모두 보이기",
|
|
@@ -410,7 +410,7 @@
|
|
|
410
410
|
"figure.text.unsaved-changes": "저장 안 됨",
|
|
411
411
|
"figure.text.version-number": "{version}판",
|
|
412
412
|
"figure.text.view-settings-are-not-saved": "여기 설정은 저장되지 않습니다. 보기 편한 상태를 만드는 곳이고, 자산에는 딸려 가지 않습니다.",
|
|
413
|
-
"figure.text.what-a-figure-is": "Figure 는 직접 저작한 3D 컴포넌트입니다. 단순한 도형을 조합해 만들면
|
|
413
|
+
"figure.text.what-a-figure-is": "Figure 는 직접 저작한 3D 컴포넌트입니다. 단순한 도형을 조합해 만들면 도면에 배치할 수 있는 컴포넌트가 되고, 여러 개를 배치해도 형상과 재질을 공유합니다.",
|
|
414
414
|
"figure.text.what-changed-in-this-release": "이번 판에서 무엇이 달라졌는지",
|
|
415
415
|
"figure.title.figures": "Figure",
|
|
416
416
|
"figure.title.new-figure": "새 Figure",
|
package/translations/ms.json
CHANGED
|
@@ -191,8 +191,8 @@
|
|
|
191
191
|
"figure.text.anchor-explained": "di mana bahagian ini melekat apabila kotak membesar. Dua bahagian bersentuhan pada permukaan berbeza akan terpisah apabila membesar.",
|
|
192
192
|
"figure.text.assistant-proposed-a-figure": "here is a proposal — the result is on the right.",
|
|
193
193
|
"figure.text.axes-not-measurable-yet": "axes that cannot be measured yet are left off the chart — {axes}. the reason is listed below.",
|
|
194
|
-
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a
|
|
195
|
-
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a
|
|
194
|
+
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
195
|
+
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
196
196
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
197
197
|
"figure.text.cannot-release-now": "belum boleh diterbitkan",
|
|
198
198
|
"figure.text.canvas-appears-once-a-part-exists": "the canvas appears once the figure has a part.",
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
"figure.text.collapse-parts-pane": "collapse the part list",
|
|
211
211
|
"figure.text.collapse-properties-pane": "collapse the property pane",
|
|
212
212
|
"figure.text.coordinate-ground-explained": "draws the origin and a grid on the floor",
|
|
213
|
-
"figure.text.delete-figure-confirm": "delete {name}?
|
|
213
|
+
"figure.text.delete-figure-confirm": "delete {name}? drawings already using this type will no longer find it.",
|
|
214
214
|
"figure.text.detail-level-explained": "declares how detailed this figure is meant to be. S simple suits signs and posts, M normal suits most equipment, L detailed suits the large equipment a view is built around. the level sets the part limit, and maturity checks whether the figure lives up to it.",
|
|
215
215
|
"figure.text.discard-changes-and-start-new": "ada perubahan belum disimpan. buang dan mulakan yang baharu?",
|
|
216
216
|
"figure.text.does-not-block": "tidak menghalang",
|
|
@@ -245,11 +245,11 @@
|
|
|
245
245
|
"figure.text.maturity-detail-because": "how much of the declared level you actually used.",
|
|
246
246
|
"figure.text.maturity-readable-because": "how many distinct colour regions are visible from directly above, and how evenly. Viewpoint entropy (Vazquez et al.) computed over colour regions rather than faces — counting faces would reward raising the segment count alone.",
|
|
247
247
|
"figure.text.maturity-reuse-because": "shapes saved because several parts share one. a low number is not a fault.",
|
|
248
|
-
"figure.text.maturity-scale-because": "measured against a
|
|
248
|
+
"figure.text.maturity-scale-because": "measured against a drawing holding 500 assets.",
|
|
249
249
|
"figure.text.mirror-explained": "adds a mirrored copy on the other side — for parts that come in pairs, like legs or arms.",
|
|
250
250
|
"figure.text.mirror-would-overlap": "already centred — a mirror would land in the same place and overlap.",
|
|
251
251
|
"figure.text.mode-edit-explained": "place and edit parts. always at the base size.",
|
|
252
|
-
"figure.text.mode-preview-explained": "how it looks placed on a
|
|
252
|
+
"figure.text.mode-preview-explained": "how it looks placed on a drawing. base size next to the enlarged ones.",
|
|
253
253
|
"figure.text.more-segment-options": "advanced segment counts",
|
|
254
254
|
"figure.text.must-fix-to-release": "perbaiki dahulu",
|
|
255
255
|
"figure.text.n-of-limit": "{used} / {limit}",
|
|
@@ -260,7 +260,7 @@
|
|
|
260
260
|
"figure.text.not-measurable-yet": "not measurable",
|
|
261
261
|
"figure.text.not-measured-yet": "not measured",
|
|
262
262
|
"figure.text.nothing-released-yet": "belum ada versi diterbitkan. penerbitan menyimpan figura seperti sekarang sebagai satu versi.",
|
|
263
|
-
"figure.text.on-by-default-explained": "the starting state when placed on a
|
|
263
|
+
"figure.text.on-by-default-explained": "the starting state when placed on a drawing. an instance switching it wins.",
|
|
264
264
|
"figure.text.other-segment-count": "enter a value",
|
|
265
265
|
"figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
|
|
266
266
|
"figure.text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
"figure.text.pick-a-shape-above-to-start": "pick a shape above to add the first part.",
|
|
269
269
|
"figure.text.picked-changes-do-not-validate": "the selected changes do not make a valid figure",
|
|
270
270
|
"figure.text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
|
|
271
|
-
"figure.text.preview-needs-a-part": "add a part and the
|
|
271
|
+
"figure.text.preview-needs-a-part": "add a part and the drawing view appears here.",
|
|
272
272
|
"figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
|
|
273
273
|
"figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
|
|
274
274
|
"figure.text.put-on-floor": "drop it to the floor (Z=0).",
|
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
"figure.text.unsaved-changes": "unsaved",
|
|
301
301
|
"figure.text.version-number": "v{version}",
|
|
302
302
|
"figure.text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
|
|
303
|
-
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a
|
|
303
|
+
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a drawing, sharing shape and material across every instance.",
|
|
304
304
|
"figure.text.what-changed-in-this-release": "apa yang berubah dalam versi ini",
|
|
305
305
|
"figure.title.figures": "figures",
|
|
306
306
|
"figure.title.new-figure": "new figure"
|
package/translations/zh.json
CHANGED
|
@@ -191,8 +191,8 @@
|
|
|
191
191
|
"figure.text.anchor-explained": "箱体变大时这个部件贴在哪里。相邻部件贴在不同的面上,变大时就会分开。",
|
|
192
192
|
"figure.text.assistant-proposed-a-figure": "here is a proposal — the result is on the right.",
|
|
193
193
|
"figure.text.axes-not-measurable-yet": "axes that cannot be measured yet are left off the chart — {axes}. the reason is listed below.",
|
|
194
|
-
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a
|
|
195
|
-
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a
|
|
194
|
+
"figure.text.bound-by-drawCalls": "draw calls reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
195
|
+
"figure.text.bound-by-triangles": "triangles reach the limit first — {per} per instance, against {budget} for a drawing.",
|
|
196
196
|
"figure.text.budget-not-measured-yet": "this target has not been measured yet.",
|
|
197
197
|
"figure.text.cannot-release-now": "现在无法发布",
|
|
198
198
|
"figure.text.canvas-appears-once-a-part-exists": "the canvas appears once the figure has a part.",
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
"figure.text.collapse-parts-pane": "collapse the part list",
|
|
211
211
|
"figure.text.collapse-properties-pane": "collapse the property pane",
|
|
212
212
|
"figure.text.coordinate-ground-explained": "draws the origin and a grid on the floor",
|
|
213
|
-
"figure.text.delete-figure-confirm": "delete {name}?
|
|
213
|
+
"figure.text.delete-figure-confirm": "delete {name}? drawings already using this type will no longer find it.",
|
|
214
214
|
"figure.text.detail-level-explained": "declares how detailed this figure is meant to be. S simple suits signs and posts, M normal suits most equipment, L detailed suits the large equipment a view is built around. the level sets the part limit, and maturity checks whether the figure lives up to it.",
|
|
215
215
|
"figure.text.discard-changes-and-start-new": "有未保存的更改。放弃并新建吗?",
|
|
216
216
|
"figure.text.does-not-block": "不影响发布的项",
|
|
@@ -245,11 +245,11 @@
|
|
|
245
245
|
"figure.text.maturity-detail-because": "how much of the declared level you actually used.",
|
|
246
246
|
"figure.text.maturity-readable-because": "how many distinct colour regions are visible from directly above, and how evenly. Viewpoint entropy (Vazquez et al.) computed over colour regions rather than faces — counting faces would reward raising the segment count alone.",
|
|
247
247
|
"figure.text.maturity-reuse-because": "shapes saved because several parts share one. a low number is not a fault.",
|
|
248
|
-
"figure.text.maturity-scale-because": "measured against a
|
|
248
|
+
"figure.text.maturity-scale-because": "measured against a drawing holding 500 assets.",
|
|
249
249
|
"figure.text.mirror-explained": "adds a mirrored copy on the other side — for parts that come in pairs, like legs or arms.",
|
|
250
250
|
"figure.text.mirror-would-overlap": "already centred — a mirror would land in the same place and overlap.",
|
|
251
251
|
"figure.text.mode-edit-explained": "place and edit parts. always at the base size.",
|
|
252
|
-
"figure.text.mode-preview-explained": "how it looks placed on a
|
|
252
|
+
"figure.text.mode-preview-explained": "how it looks placed on a drawing. base size next to the enlarged ones.",
|
|
253
253
|
"figure.text.more-segment-options": "advanced segment counts",
|
|
254
254
|
"figure.text.must-fix-to-release": "需要修改的项",
|
|
255
255
|
"figure.text.n-of-limit": "{used} / {limit}",
|
|
@@ -260,7 +260,7 @@
|
|
|
260
260
|
"figure.text.not-measurable-yet": "not measurable",
|
|
261
261
|
"figure.text.not-measured-yet": "not measured",
|
|
262
262
|
"figure.text.nothing-released-yet": "还没有发布过。发布后会把当前的图形保留为一个版本。",
|
|
263
|
-
"figure.text.on-by-default-explained": "the starting state when placed on a
|
|
263
|
+
"figure.text.on-by-default-explained": "the starting state when placed on a drawing. an instance switching it wins.",
|
|
264
264
|
"figure.text.other-segment-count": "enter a value",
|
|
265
265
|
"figure.text.palette-purpose-explained": "Choose the visual role this part plays, not an implementation color name.",
|
|
266
266
|
"figure.text.part-limit-reached": "the detail level allows no more parts — raise the level or remove a part.",
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
"figure.text.pick-a-shape-above-to-start": "pick a shape above to add the first part.",
|
|
269
269
|
"figure.text.picked-changes-do-not-validate": "the selected changes do not make a valid figure",
|
|
270
270
|
"figure.text.preview-blocked-by-errors": "cannot build — the figure breaks the format. the maturity tab has the reason.",
|
|
271
|
-
"figure.text.preview-needs-a-part": "add a part and the
|
|
271
|
+
"figure.text.preview-needs-a-part": "add a part and the drawing view appears here.",
|
|
272
272
|
"figure.text.proposal-feedback-note": "Optional note for the next suggestion (this session only)",
|
|
273
273
|
"figure.text.proposal-feedback-placeholder": "e.g. keep the silhouette, but make the port easier to read",
|
|
274
274
|
"figure.text.put-on-floor": "drop it to the floor (Z=0).",
|
|
@@ -300,7 +300,7 @@
|
|
|
300
300
|
"figure.text.unsaved-changes": "unsaved",
|
|
301
301
|
"figure.text.version-number": "第{version}版",
|
|
302
302
|
"figure.text.view-settings-are-not-saved": "these settings are not saved. they make the view comfortable to work in and do not travel with the asset.",
|
|
303
|
-
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a
|
|
303
|
+
"figure.text.what-a-figure-is": "a Figure is a 3D component you author. Compose it from simple shapes and it becomes a component you can place on a drawing, sharing shape and material across every instance.",
|
|
304
304
|
"figure.text.what-changed-in-this-release": "这一版有什么变化",
|
|
305
305
|
"figure.title.figures": "figures",
|
|
306
306
|
"figure.title.new-figure": "new figure"
|