@things-factory/figure-service 10.1.206 → 10.1.207
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/dist-server/service/figure/figure-context.js +0 -2
- package/dist-server/service/figure/figure-context.js.map +1 -1
- package/dist-server/service/figure/figure-format.d.ts +2 -2
- package/dist-server/service/figure/figure-format.js +11 -66
- package/dist-server/service/figure/figure-format.js.map +1 -1
- package/dist-server/service/figure/figure-propose-steps.d.ts +1 -1
- package/dist-server/service/figure/figure-propose-steps.js +3 -5
- package/dist-server/service/figure/figure-propose-steps.js.map +1 -1
- package/dist-server/service/figure/figure-type.js +1 -1
- package/dist-server/service/figure/figure-type.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/scripts/templates.test.mts +2 -3
- package/server/service/figure/figure-category-db.test.ts +2 -2
- package/server/service/figure/figure-context.test.ts +1 -1
- package/server/service/figure/figure-context.ts +0 -2
- package/server/service/figure/figure-deprecation-db.test.ts +2 -2
- package/server/service/figure/figure-format.test.ts +25 -105
- package/server/service/figure/figure-format.ts +14 -69
- package/server/service/figure/figure-inspect-db.test.ts +6 -5
- package/server/service/figure/figure-llm-smoke.test.ts +1 -1
- package/server/service/figure/figure-namespace-db.test.ts +2 -2
- package/server/service/figure/figure-propose-steps.test.ts +15 -20
- package/server/service/figure/figure-propose-steps.ts +3 -5
- package/server/service/figure/figure-public-db.test.ts +2 -2
- package/server/service/figure/figure-release-check.test.ts +2 -2
- package/server/service/figure/figure-release-record-db.test.ts +7 -6
- package/server/service/figure/figure-release-size-db.test.ts +2 -2
- package/server/service/figure/figure-tools.test.ts +2 -2
- package/server/service/figure/figure-type.ts +1 -1
- package/translations/en.json +4 -16
- package/translations/es.json +4 -16
- package/translations/ja.json +4 -16
- package/translations/ko.json +4 -16
- package/translations/ms.json +4 -16
- package/translations/zh.json +4 -16
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* the step the kernel refuses, and the gate findings the steps bring in, go back to the model; after three attempts
|
|
6
6
|
* the proposer says it could not make it, and nothing half made comes back.
|
|
7
7
|
*/
|
|
8
|
-
import { FIGURE_PROPOSAL_GRAMMAR, addFigureBox, applyFigureAuthoring, applyFigureProposal, createFigureAsset, inspectFigureAsset
|
|
8
|
+
import { FIGURE_PROPOSAL_GRAMMAR, addFigureBox, applyFigureAuthoring, applyFigureProposal, createFigureAsset, inspectFigureAsset } from '@hatiolab/figure-model'
|
|
9
9
|
import { AIAnswerNotJSON, type AIClient } from '@things-factory/ai-client-base'
|
|
10
10
|
|
|
11
11
|
import { ProposeFigureFailure, WORKED_EXAMPLE, judgeFigureAnswer, proposalFailureForPerson, proposeFigureSteps, rulesPromptFigure } from './figure-propose-steps'
|
|
@@ -38,10 +38,10 @@ const liftTable = [
|
|
|
38
38
|
{ kind: 'attach', part: 'base', to: { plane: 'mounting-plane' } },
|
|
39
39
|
{ kind: 'attach', part: 'column', to: { part: 'base', face: 'top' } },
|
|
40
40
|
{ kind: 'attach', part: 'top', to: { part: 'column', face: 'top' } },
|
|
41
|
-
{ kind: 'set-material', target: 'top', material: { token: 'palette.accent' }, palette: { 'palette.accent': '#d08a2c' } }
|
|
42
|
-
{ kind: 'fit-room', placement: 'floor' }
|
|
41
|
+
{ kind: 'set-material', target: 'top', material: { token: 'palette.accent' }, palette: { 'palette.accent': '#d08a2c' } }
|
|
43
42
|
]
|
|
44
|
-
|
|
43
|
+
/* The table's top named as the face it is mounted on: a finding the draft has, its face 740 mm off the plane. */
|
|
44
|
+
const offFace = [...liftTable, { kind: 'set-mounting-face', part: 'top', face: 'top' }]
|
|
45
45
|
const wrongFace = liftTable.map((s, i) => (i === 4 ? { ...s, face: 'left' } : s))
|
|
46
46
|
|
|
47
47
|
describe('the model is told the kernel\'s commands and the open draft', () => {
|
|
@@ -74,7 +74,6 @@ describe('the model is told the kernel\'s commands and the open draft', () => {
|
|
|
74
74
|
expect(judged.source!.appearance.map(a => a.target)).toEqual(['frame', 'support', 'roller'])
|
|
75
75
|
const kinds = WORKED_EXAMPLE.map(step => step.kind)
|
|
76
76
|
expect(kinds).toContain('make-repeat')
|
|
77
|
-
expect(kinds.at(-1)).toBe('fit-room')
|
|
78
77
|
expect(WORKED_EXAMPLE.filter(step => step.kind === 'attach' && 'plane' in (step as any).to).every(step => !('facing' in step))).toBe(true)
|
|
79
78
|
})
|
|
80
79
|
|
|
@@ -117,15 +116,9 @@ describe('the steps are held to the kernel and the gate', () => {
|
|
|
117
116
|
expect(said).toMatch(/SCHEMA: steps\[4\]: attach: column: face is a word attach does not take/)
|
|
118
117
|
})
|
|
119
118
|
|
|
120
|
-
it('a new figure must come out whole: a list that leaves the room undeclared is sent back', async () => {
|
|
121
|
-
const client = stubClient([{ steps: withoutRoom }, { steps: liftTable }])
|
|
122
|
-
const made = await proposeFigureSteps({ client, prompt: '리프트 테이블', name: 'Lift table' })
|
|
123
|
-
expect(made.attempts).toBe(2)
|
|
124
|
-
expect(client.sent[1]!.at(-1)!.content).toMatch(/OCCUPANCY_UNDECLARED/)
|
|
125
|
-
})
|
|
126
|
-
|
|
127
119
|
it('a revision is not blamed for what the draft already had', async () => {
|
|
128
|
-
const draft = applyFigureProposal(createFigureAsset('Lift table'),
|
|
120
|
+
const draft = applyFigureProposal(createFigureAsset('Lift table'), offFace as any)
|
|
121
|
+
expect(inspectFigureAsset(draft).violations.map(v => v.code)).toEqual(['PARTS_OFF_PLACEMENT_FACE'])
|
|
129
122
|
const client = stubClient([{ steps: [{ kind: 'rename', name: 'Lift' }] }])
|
|
130
123
|
const made = await proposeFigureSteps({ client, prompt: '이름', base: draft })
|
|
131
124
|
expect(made.attempts).toBe(1)
|
|
@@ -227,28 +220,30 @@ describe('reference pictures go with the task', () => {
|
|
|
227
220
|
|
|
228
221
|
/*
|
|
229
222
|
A revision is not blamed for a finding the draft already had -- but the same finding made worse is the answer's.
|
|
230
|
-
Matching by code, part and axis alone excused a part pushed further out of the declared room
|
|
223
|
+
Matching by code, part and axis alone excused a part pushed further out of the declared room; the room is computed
|
|
224
|
+
now (ADR-0145), and a mounting face further off its plane is the same case.
|
|
231
225
|
*/
|
|
232
226
|
describe('a finding the draft had is excused only while it is no worse', () => {
|
|
233
227
|
const outside = (() => {
|
|
234
228
|
let asset = addFigureBox(createFigureAsset('Mixer'), { id: 'body', size: { x: 300, y: 400, z: 300 }, position: { x: 0, y: 200, z: 0 } })
|
|
235
|
-
asset = applyFigureAuthoring(asset, { kind: '
|
|
236
|
-
|
|
229
|
+
asset = applyFigureAuthoring(asset, { kind: 'set-placement', placement: 'floor' })
|
|
230
|
+
asset = addFigureBox(asset, { id: 'sign', size: { x: 100, y: 100, z: 40 }, position: { x: 300, y: 250, z: 0 } })
|
|
231
|
+
return applyFigureAuthoring(asset, { kind: 'set-mounting-face', part: 'sign', face: 'bottom' })
|
|
237
232
|
})()
|
|
238
233
|
|
|
239
234
|
it('the draft has the finding to begin with', () => {
|
|
240
|
-
expect(inspectFigureAsset(outside).violations.map(v => `${v.code} ${v.part} ${v.axis} ${v.mm}`)).toEqual(['
|
|
235
|
+
expect(inspectFigureAsset(outside).violations.map(v => `${v.code} ${v.part} ${v.axis} ${v.mm}`)).toEqual(['PARTS_OFF_PLACEMENT_FACE sign y 200'])
|
|
241
236
|
})
|
|
242
237
|
|
|
243
238
|
it('left as it was, or made smaller, it is excused', () => {
|
|
244
239
|
expect(judgeFigureAnswer(outside, { steps: [{ kind: 'rename', name: 'Mixer 2' }] }, true).reasons).toEqual([])
|
|
245
|
-
expect(judgeFigureAnswer(outside, { steps: [{ kind: 'nudge-part', part: 'sign', by: {
|
|
240
|
+
expect(judgeFigureAnswer(outside, { steps: [{ kind: 'nudge-part', part: 'sign', by: { y: -20 } }] }, true).reasons).toEqual([])
|
|
246
241
|
})
|
|
247
242
|
|
|
248
243
|
it('pushed further out, it is sent back as the answer\'s', () => {
|
|
249
|
-
const judged = judgeFigureAnswer(outside, { steps: [{ kind: 'nudge-part', part: 'sign', by: {
|
|
244
|
+
const judged = judgeFigureAnswer(outside, { steps: [{ kind: 'nudge-part', part: 'sign', by: { y: 100 } }] }, true)
|
|
250
245
|
expect(judged.source).toBeUndefined()
|
|
251
|
-
expect(judged.reasons).toEqual([expect.stringMatching(/^
|
|
246
|
+
expect(judged.reasons).toEqual([expect.stringMatching(/^PARTS_OFF_PLACEMENT_FACE \(sign\): .*worse than the 200 mm the figure already had/)])
|
|
252
247
|
})
|
|
253
248
|
})
|
|
254
249
|
|
|
@@ -92,8 +92,7 @@ export const WORKED_EXAMPLE: FigureProposalStep[] = [
|
|
|
92
92
|
{ kind: 'add-part', part: { id: 'roller', kind: 'box', dimensions: { width: 60, height: 60, depth: 560 } } },
|
|
93
93
|
{ kind: 'attach', part: 'roller', to: { part: 'frame', face: 'top' } },
|
|
94
94
|
{ kind: 'make-repeat', part: 'roller', axis: 'x', pitch: 160 },
|
|
95
|
-
{ kind: 'set-material', target: 'frame', material: { token: 'palette.frame' }, palette: { 'palette.frame': '#5b6770' } }
|
|
96
|
-
{ kind: 'fit-room', placement: 'floor' }
|
|
95
|
+
{ kind: 'set-material', target: 'frame', material: { token: 'palette.frame' }, palette: { 'palette.frame': '#5b6770' } }
|
|
97
96
|
] as FigureProposalStep[]
|
|
98
97
|
|
|
99
98
|
/** The rules and the words, all from figure-model's constants. */
|
|
@@ -114,8 +113,7 @@ export function rulesPromptFigure(): string {
|
|
|
114
113
|
'{ kind: "set-material", target, material: { token }, palette: { [token]: "#rrggbb" } }.',
|
|
115
114
|
'When the request says a measure is the same as, matches or follows another part or the figure, write link-dimension:',
|
|
116
115
|
'a copied number stays the same when the other one is resized.',
|
|
117
|
-
'Declare the sizes the figure may be placed at before any measure follows the figure.
|
|
118
|
-
'their fastenings or motions changed.',
|
|
116
|
+
'Declare the sizes the figure may be placed at before any measure follows the figure.',
|
|
119
117
|
'When revising, write only the commands the request needs. Everything not touched stays as it is.',
|
|
120
118
|
'',
|
|
121
119
|
'The commands (shape, then what it means):',
|
|
@@ -216,7 +214,7 @@ function partsAtRefusedStep(base: FigureAsset, steps: FigureProposalStep[], erro
|
|
|
216
214
|
/**
|
|
217
215
|
* Applies an answer on a copy of the base and returns the figure, or the reasons it was not accepted: the step the
|
|
218
216
|
* kernel refused, or the gate findings the steps brought in. When revising, a finding the draft already had is not the
|
|
219
|
-
* answer's; a new figure has none to excuse, so it must come out whole
|
|
217
|
+
* answer's; a new figure has none to excuse, so it must come out whole.
|
|
220
218
|
*/
|
|
221
219
|
export function judgeFigureAnswer(
|
|
222
220
|
base: FigureAsset,
|
|
@@ -12,7 +12,7 @@ const shell = require('@things-factory/shell')
|
|
|
12
12
|
const authBase = require('@things-factory/auth-base')
|
|
13
13
|
const settingBase = require('@things-factory/setting-base')
|
|
14
14
|
const attachmentBase = require('@things-factory/attachment-base')
|
|
15
|
-
const { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring,
|
|
15
|
+
const { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring, readFigurePackage } = require('@hatiolab/figure-model')
|
|
16
16
|
|
|
17
17
|
let dataSource: DataSource | null = null
|
|
18
18
|
let Figure: any
|
|
@@ -65,7 +65,7 @@ afterAll(async () => {
|
|
|
65
65
|
const releasable = (label = 'Mixer') => {
|
|
66
66
|
let a = addFigureBox(createFigureAsset(label), { id: 'body', size: { x: 100, y: 100, z: 100 }, position: { x: 0, y: 50, z: 0 } })
|
|
67
67
|
a = applyFigureAuthoring(a, { kind: 'attach', part: 'body', to: { plane: 'mounting-plane' } })
|
|
68
|
-
return serializeFigureAsset(applyFigureAuthoring(a, { kind: '
|
|
68
|
+
return serializeFigureAsset(applyFigureAuthoring(a, { kind: 'set-placement', placement: 'floor' }))
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
let seq = 0
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
* reader's words, and their findings join the gate's -- a blocking one blocks, a said one does not; a check that
|
|
4
4
|
* throws blocks by name rather than being skipped; one taken off is gone.
|
|
5
5
|
*/
|
|
6
|
-
import { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring
|
|
6
|
+
import { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring } from '@hatiolab/figure-model'
|
|
7
7
|
|
|
8
8
|
import { inspectSource, registerFigureReleaseCheck } from './figure-format'
|
|
9
9
|
|
|
10
10
|
const source = () => {
|
|
11
11
|
let asset = addFigureBox(createFigureAsset('Mixer'), { id: 'body', size: { x: 100, y: 100, z: 100 }, position: { x: 0, y: 50, z: 0 } })
|
|
12
12
|
asset = applyFigureAuthoring(asset, { kind: 'attach', part: 'body', to: { plane: 'mounting-plane' } })
|
|
13
|
-
return serializeFigureAsset(applyFigureAuthoring(asset, { kind: '
|
|
13
|
+
return serializeFigureAsset(applyFigureAuthoring(asset, { kind: 'set-placement', placement: 'floor' }))
|
|
14
14
|
}
|
|
15
15
|
const codes = (inspection: { findings: { code: string; blocking: boolean }[] }) => inspection.findings.map(f => [f.code, f.blocking])
|
|
16
16
|
|
|
@@ -8,7 +8,7 @@ const { DataSource: TypeOrmDataSource } = require('typeorm')
|
|
|
8
8
|
const shell = require('@things-factory/shell')
|
|
9
9
|
const authBase = require('@things-factory/auth-base')
|
|
10
10
|
const settingBase = require('@things-factory/setting-base')
|
|
11
|
-
const { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring,
|
|
11
|
+
const { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring, palletizerRobotFigure, FIGURE_KERNEL_VERSION } = require('@hatiolab/figure-model')
|
|
12
12
|
|
|
13
13
|
let FigureNamespace: any
|
|
14
14
|
let dataSource: DataSource | null = null
|
|
@@ -69,7 +69,7 @@ async function release(extra: Record<string, unknown>) {
|
|
|
69
69
|
|
|
70
70
|
describe('a release record on its history row', () => {
|
|
71
71
|
it('keeps the format and the changes as they were', async () => {
|
|
72
|
-
const changes = [{ code: '
|
|
72
|
+
const changes = [{ code: 'size-changed', blocking: false, values: { before: 'x -50…50', after: 'x -150…150' }, detail: 'size changed' }]
|
|
73
73
|
const row = await release({ __releaseFormat: 'figure-asset-1', __releaseChanges: changes })
|
|
74
74
|
expect(row.assetFormat).toBe('figure-asset-1')
|
|
75
75
|
expect(JSON.parse(row.changes)).toEqual(changes)
|
|
@@ -90,9 +90,9 @@ describe('releaseFigure records it', () => {
|
|
|
90
90
|
const releasable = (width: number) => {
|
|
91
91
|
let a = addFigureBox(createFigureAsset('Mixer'), { id: 'body', size: { x: width, y: 100, z: 100 }, position: { x: 0, y: 50, z: 0 } })
|
|
92
92
|
a = applyFigureAuthoring(a, { kind: 'attach', part: 'body', to: { plane: 'mounting-plane' } })
|
|
93
|
-
return serializeFigureAsset(applyFigureAuthoring(a, { kind: '
|
|
93
|
+
return serializeFigureAsset(applyFigureAuthoring(a, { kind: 'set-placement', placement: 'floor' }))
|
|
94
94
|
}
|
|
95
|
-
it('first release: [], the second: the wider
|
|
95
|
+
it('first release: [], the second: the wider body', async () => {
|
|
96
96
|
const domain = await namespaced(await dataSource!.getRepository(shell.Domain).save({ name: 'release-door', subdomain: 'release-door' }))
|
|
97
97
|
const tx = dataSource!.manager
|
|
98
98
|
const context = { state: { domain, user: undefined, tx } }
|
|
@@ -106,9 +106,10 @@ describe('releaseFigure records it', () => {
|
|
|
106
106
|
/* Each release names the kernel that measured it (ADR-0109 C1). */
|
|
107
107
|
expect(rows.map((r: any) => r.kernelVersion)).toEqual([FIGURE_KERNEL_VERSION, FIGURE_KERNEL_VERSION])
|
|
108
108
|
const codes = JSON.parse(rows[1].changes).map((c: any) => c.code)
|
|
109
|
-
expect(codes).
|
|
109
|
+
expect(codes).toEqual(expect.arrayContaining(['size-changed', 'motion-range-changed']))
|
|
110
110
|
/* What each release measured, and its plan from above, are on its own row. */
|
|
111
|
-
|
|
111
|
+
const box = { x: { min: -50, max: 50 }, y: { min: 0, max: 100 }, z: { min: -50, max: 50 } }
|
|
112
|
+
expect(JSON.parse(rows[0].metrics)).toEqual({ body: box, motionRange: box })
|
|
112
113
|
expect(JSON.parse(rows[1].topView).shapes.map((s: any) => s.id)).toEqual(['body'])
|
|
113
114
|
})
|
|
114
115
|
})
|
|
@@ -12,7 +12,7 @@ const JSZip = require('jszip')
|
|
|
12
12
|
const shell = require('@things-factory/shell')
|
|
13
13
|
const authBase = require('@things-factory/auth-base')
|
|
14
14
|
const settingBase = require('@things-factory/setting-base')
|
|
15
|
-
const { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring,
|
|
15
|
+
const { createFigureAsset, addFigureBox, serializeFigureAsset, applyFigureAuthoring, readFigurePackage } = require('@hatiolab/figure-model')
|
|
16
16
|
|
|
17
17
|
let dataSource: DataSource | null = null
|
|
18
18
|
let Figure: any
|
|
@@ -73,7 +73,7 @@ const buttonBox = () => {
|
|
|
73
73
|
a = applyFigureAuthoring(a, { kind: 'follow-size', part: 'box' })
|
|
74
74
|
a = applyFigureAuthoring(a, { kind: 'set-cavity', part: 'box', cavity: { wall: 10, start: { closed: 10 }, end: 'open' } })
|
|
75
75
|
a = applyFigureAuthoring(a, { kind: 'declare-instance-size', range: { y: { min: 50, max: 400 } }, replace: true })
|
|
76
|
-
return serializeFigureAsset(applyFigureAuthoring(a, { kind: '
|
|
76
|
+
return serializeFigureAsset(applyFigureAuthoring(a, { kind: 'set-placement', placement: 'floor' }))
|
|
77
77
|
}
|
|
78
78
|
const sizeOf = (source: string | object, axis: 'x' | 'y' | 'z') => {
|
|
79
79
|
const asset = typeof source === 'string' ? JSON.parse(source) : source
|
|
@@ -42,11 +42,11 @@ function stubRepository(rows: any[]) {
|
|
|
42
42
|
const MINE = { id: 'domain-mine' }
|
|
43
43
|
const THEIRS = { id: 'domain-theirs' }
|
|
44
44
|
|
|
45
|
-
/** A stored figure: one body on the floor
|
|
45
|
+
/** A stored figure: one body on the floor. */
|
|
46
46
|
const SOURCE = (() => {
|
|
47
47
|
const model = require('@hatiolab/figure-model')
|
|
48
48
|
let asset = model.addFigureBox(model.createFigureAsset('Mixer'), { id: 'body', size: { x: 300, y: 400, z: 300 }, position: { x: 0, y: 200, z: 0 } })
|
|
49
|
-
asset = model.applyFigureAuthoring(asset, { kind: '
|
|
49
|
+
asset = model.applyFigureAuthoring(asset, { kind: 'set-placement', placement: 'floor' })
|
|
50
50
|
return asset
|
|
51
51
|
})()
|
|
52
52
|
|
|
@@ -176,7 +176,7 @@ export class FigureRevertResult {
|
|
|
176
176
|
*/
|
|
177
177
|
@ObjectType({ description: 'One finding from the release gate.' })
|
|
178
178
|
export class FigureGateFinding {
|
|
179
|
-
@Field({ description: 'Stable code of the gate finding, for example
|
|
179
|
+
@Field({ description: 'Stable code of the gate finding, for example parts-off-placement-face or parts-split-on-resize.' })
|
|
180
180
|
code: string
|
|
181
181
|
|
|
182
182
|
@Field({ description: 'Human-readable message.' })
|
package/translations/en.json
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"error.figure-proposal-failed": "The figure could not be made.",
|
|
3
3
|
"error.figure-release-does-not-compile": "the released source of {type} (version {version}) does not compile. open it in the modeller, fix it and release it again before it draws on a board.",
|
|
4
|
-
"figure.gate.occupancy-empty-axis.message": "The space the figure takes is empty on {axis}.",
|
|
5
|
-
"figure.gate.occupancy-undeclared.how": "Use \"fit to parts\" to set the space the figure takes from the parts as they are now.",
|
|
6
|
-
"figure.gate.occupancy-undeclared.how-no-parts": "Add a shape first, then use \"fit to parts\" to set the space the figure takes from it.",
|
|
7
|
-
"figure.gate.occupancy-undeclared.message": "The space this figure takes is not set yet.",
|
|
8
|
-
"figure.gate.occupancy-undeclared.why": "The space a figure takes sets the scale it is placed at on a board.",
|
|
9
|
-
"figure.gate.part-outside-occupancy.how": "Use \"fit to parts\" to fit the space the figure takes to the parts again, or move '{part}' {mm} mm inward on {axis}.",
|
|
10
|
-
"figure.gate.part-outside-occupancy.message": "'{part}' goes {mm} mm past the space the figure takes on {axis}.",
|
|
11
|
-
"figure.gate.part-outside-occupancy.why": "The space the figure takes sets the scale it is placed at. What lies past it is left out of that scale, so on a board this part lands outside the place given to the figure.",
|
|
12
4
|
"figure.gate.parts-off-placement-face.how": "Move '{part}' {mm} mm on Y so the face meets the plane, or choose a different mounting face.",
|
|
13
5
|
"figure.gate.parts-off-placement-face.message": "The mounting face of '{part}' is {mm} mm off the plane the figure stands on.",
|
|
14
6
|
"figure.gate.parts-off-placement-face.why": "The figure is declared to stand on that face. If the face does not reach the plane, the figure floats on the board by that much, and whatever is placed on it floats too.",
|
|
@@ -21,9 +13,6 @@
|
|
|
21
13
|
"figure.gate.placement-face-tilted.how": "Choose a mounting face parallel to the plane, or turn '{part}' upright.",
|
|
22
14
|
"figure.gate.placement-face-tilted.message": "The mounting face of '{part}' is tilted {degrees}° from the plane the figure stands on.",
|
|
23
15
|
"figure.gate.placement-face-tilted.why": "A tilted face cannot lie on the plane, so how the figure stands is not settled.",
|
|
24
|
-
"figure.gate.state-range-sampled.how": "To cover the whole range, re-author what could not be proven.",
|
|
25
|
-
"figure.gate.state-range-sampled.message": "The whole range of sizes and motion could not be proven, so {states} combinations of size and pose were checked.",
|
|
26
|
-
"figure.gate.state-range-sampled.why": "Between the combinations that were checked, a part may still go past the space the figure takes.",
|
|
27
16
|
"figure.gate.type-is-placeholder.how": "Set the type in the type field, then publish.",
|
|
28
17
|
"figure.gate.type-is-placeholder.message": "'{type}' is a temporary type given when the figure was first saved.",
|
|
29
18
|
"figure.gate.type-is-placeholder.why": "Boards call a figure by its type, and it cannot change once the figure is published.",
|
|
@@ -66,8 +55,10 @@
|
|
|
66
55
|
"figure.gate.contract.capability-gone.why": "Scenes attach behaviour by this name. Placed instances lose what it did.",
|
|
67
56
|
"figure.gate.contract.capability-added.message": "The capability '{name}' is new.",
|
|
68
57
|
"figure.gate.contract.capability-added.why": "It adds what the figure can do. Placed instances stand as they are.",
|
|
69
|
-
"figure.gate.contract.
|
|
70
|
-
"figure.gate.contract.
|
|
58
|
+
"figure.gate.contract.size-changed.message": "The figure's size changed: {before} → {after}.",
|
|
59
|
+
"figure.gate.contract.size-changed.why": "A board gives the figure a box of this size. One that moves to this release sees its box change.",
|
|
60
|
+
"figure.gate.contract.motion-range-changed.message": "The room the figure sweeps as it moves changed: {before} → {after}.",
|
|
61
|
+
"figure.gate.contract.motion-range-changed.why": "It is what the figure reaches when it moves. One that moves to this release sees it reach differently.",
|
|
71
62
|
"figure.gate.contract.contact-face-changed.message": "The face the figure is mounted by changed.",
|
|
72
63
|
"figure.gate.contract.contact-face-changed.why": "A consumer that moves to this release sees it stand on the new face.",
|
|
73
64
|
"figure.gate.contract.public-input-gone.message": "'{input}' is no longer set on a board.",
|
|
@@ -94,9 +85,6 @@
|
|
|
94
85
|
"figure.gate.contract.joint-list-unread.message": "The last release's joint list could not be read, so its joints were not compared: {reason}",
|
|
95
86
|
"figure.gate.contract.joint-list-unread.why": "Whether this release changes what a controller's values move has not been checked. The last release was made by a kernel that did not measure joints.",
|
|
96
87
|
"error.figure-release-not-found": "{type} has no release {version}. its latest release is {latest}.",
|
|
97
|
-
"figure.gate.origin-off-centre.message": "The origin is off the middle of the declared room: {off}.",
|
|
98
|
-
"figure.gate.origin-off-centre.why": "A drawing that places figures by the middle of their room puts this one that far from where it is drawn.",
|
|
99
|
-
"figure.gate.origin-off-centre.how": "Keep it when the figure is fastened there, as a door at its hinge. Move the origin to the middle to place it by its room.",
|
|
100
88
|
"figure.gate.off-mounting-plane.floor.clear.message": "'{part}' is {mm} mm above the floor.",
|
|
101
89
|
"figure.gate.off-mounting-plane.floor.through.message": "'{part}' goes {mm} mm below the floor.",
|
|
102
90
|
"figure.gate.off-mounting-plane.floor.beyond.message": "Every part is below the floor.",
|
package/translations/es.json
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"error.figure-proposal-failed": "No se pudo crear la figura.",
|
|
3
3
|
"error.figure-release-does-not-compile": "el código fuente publicado de {type} (versión {version}) no compila. Ábralo en el modelador, corríjalo y vuelva a publicarlo para que se dibuje en un tablero.",
|
|
4
|
-
"figure.gate.occupancy-empty-axis.message": "El espacio declarado está vacío en {axis}.",
|
|
5
|
-
"figure.gate.occupancy-undeclared.how": "Use «ajustar a las piezas» para declarar el espacio a partir de las piezas tal como están ahora.",
|
|
6
|
-
"figure.gate.occupancy-undeclared.how-no-parts": "Añada primero una forma y luego use «ajustar a las piezas» para declarar el espacio a partir de ella.",
|
|
7
|
-
"figure.gate.occupancy-undeclared.message": "Esta figura no ha declarado el espacio que ocupa.",
|
|
8
|
-
"figure.gate.occupancy-undeclared.why": "Sin un espacio declarado no se puede fijar la escala con la que se coloca una figura.",
|
|
9
|
-
"figure.gate.part-outside-occupancy.how": "Use «ajustar a las piezas» para volver a declarar el espacio a partir de las piezas, o mueva '{part}' {mm} mm hacia dentro en {axis}.",
|
|
10
|
-
"figure.gate.part-outside-occupancy.message": "'{part}' sobrepasa {mm} mm el espacio declarado en {axis}.",
|
|
11
|
-
"figure.gate.part-outside-occupancy.why": "El espacio declarado fija la escala con la que se coloca una figura. Lo que queda fuera no entra en esa escala, así que en un tablero esta pieza queda fuera del lugar asignado a la figura.",
|
|
12
4
|
"figure.gate.parts-off-placement-face.how": "Mueva '{part}' {mm} mm en Y para que la cara toque el plano, o elija otra cara de montaje.",
|
|
13
5
|
"figure.gate.parts-off-placement-face.message": "La cara de montaje de '{part}' está a {mm} mm del plano sobre el que se apoya la figura.",
|
|
14
6
|
"figure.gate.parts-off-placement-face.why": "La figura está declarada para apoyarse sobre esa cara. Si la cara no llega al plano, la figura flota esa distancia en el tablero, y lo que se coloque sobre ella también flota.",
|
|
@@ -21,9 +13,6 @@
|
|
|
21
13
|
"figure.gate.placement-face-tilted.how": "Elija una cara de montaje paralela al plano o ponga '{part}' en posición vertical.",
|
|
22
14
|
"figure.gate.placement-face-tilted.message": "La cara de montaje de '{part}' está inclinada {degrees}° respecto al plano sobre el que se apoya la figura.",
|
|
23
15
|
"figure.gate.placement-face-tilted.why": "Una cara inclinada no puede apoyarse sobre el plano, por lo que no queda definida la postura de la figura.",
|
|
24
|
-
"figure.gate.state-range-sampled.how": "Para cubrir todo el rango, vuelva a diseñar lo que no se pudo demostrar.",
|
|
25
|
-
"figure.gate.state-range-sampled.message": "No se pudo demostrar todo el rango de tamaños y movimientos, así que se comprobaron {states} combinaciones de tamaño y postura.",
|
|
26
|
-
"figure.gate.state-range-sampled.why": "Entre las combinaciones comprobadas, una pieza aún podría sobrepasar el espacio declarado.",
|
|
27
16
|
"figure.gate.type-is-placeholder.how": "Defina el tipo en el campo de tipo y luego publique.",
|
|
28
17
|
"figure.gate.type-is-placeholder.message": "'{type}' es un tipo provisional asignado cuando se guardó la figura por primera vez.",
|
|
29
18
|
"figure.gate.type-is-placeholder.why": "Los tableros llaman a una figura por su tipo, y no se puede cambiar una vez publicada la figura.",
|
|
@@ -66,8 +55,10 @@
|
|
|
66
55
|
"figure.gate.contract.capability-gone.why": "Las escenas asocian comportamientos mediante este nombre. Las instancias colocadas pierden lo que hacía.",
|
|
67
56
|
"figure.gate.contract.capability-added.message": "La capacidad '{name}' es nuevo.",
|
|
68
57
|
"figure.gate.contract.capability-added.why": "Amplía lo que puede hacer la figura. Las instancias colocadas se quedan como están.",
|
|
69
|
-
"figure.gate.contract.
|
|
70
|
-
"figure.gate.contract.
|
|
58
|
+
"figure.gate.contract.size-changed.message": "El tamaño de la figura cambió: {before} → {after}.",
|
|
59
|
+
"figure.gate.contract.size-changed.why": "Un tablero le da a la figura una caja de este tamaño. Al pasar a esta versión, su caja cambia.",
|
|
60
|
+
"figure.gate.contract.motion-range-changed.message": "El espacio que la figura recorre al moverse cambió: {before} → {after}.",
|
|
61
|
+
"figure.gate.contract.motion-range-changed.why": "Es lo que la figura alcanza al moverse. Al pasar a esta versión, alcanza otro espacio.",
|
|
71
62
|
"figure.gate.contract.contact-face-changed.message": "Cambió la cara por la que se monta la figura.",
|
|
72
63
|
"figure.gate.contract.contact-face-changed.why": "Quien pase a esta publicación verá que se apoya sobre la nueva cara.",
|
|
73
64
|
"figure.gate.contract.public-input-gone.message": "'{input}' ya no se define en un tablero.",
|
|
@@ -94,9 +85,6 @@
|
|
|
94
85
|
"figure.gate.contract.joint-list-unread.message": "No se pudo leer la lista de articulaciones de la última publicación, por lo que no se compararon sus articulaciones: {reason}",
|
|
95
86
|
"figure.gate.contract.joint-list-unread.why": "No se ha comprobado si esta publicación cambia lo que mueven los valores de un controlador. La última publicación se generó con un núcleo que no medía las articulaciones.",
|
|
96
87
|
"error.figure-release-not-found": "{type} no tiene la publicación {version}. Su última publicación es {latest}.",
|
|
97
|
-
"figure.gate.origin-off-centre.message": "El origen está desplazado del centro del espacio declarado: {off}.",
|
|
98
|
-
"figure.gate.origin-off-centre.why": "Un plano que coloca las figuras por el centro de su espacio sitúa esta a esa distancia de donde está dibujada.",
|
|
99
|
-
"figure.gate.origin-off-centre.how": "Manténgalo si la figura se fija en ese punto, como una puerta por su bisagra. Mueva el origen al centro para colocarla por su espacio.",
|
|
100
88
|
"figure.gate.off-mounting-plane.floor.clear.message": "'{part}' está {mm} mm por encima del suelo.",
|
|
101
89
|
"figure.gate.off-mounting-plane.floor.through.message": "'{part}' baja {mm} mm por debajo del suelo.",
|
|
102
90
|
"figure.gate.off-mounting-plane.floor.beyond.message": "Todas las piezas están por debajo del suelo.",
|
package/translations/ja.json
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"error.figure-proposal-failed": "フィギュアを作成できませんでした。",
|
|
3
3
|
"error.figure-release-does-not-compile": "{type} のリリース版(バージョン {version})のソースがコンパイルできません。モデラーで開いて修正し、もう一度リリースするとボードに表示されます。",
|
|
4
|
-
"figure.gate.occupancy-empty-axis.message": "空間宣言の {axis} が空です。",
|
|
5
|
-
"figure.gate.occupancy-undeclared.how": "「部品に合わせる」を使うと、現在の部品から空間を宣言します。",
|
|
6
|
-
"figure.gate.occupancy-undeclared.how-no-parts": "先に形状を追加し、「部品に合わせる」でそこから空間を宣言してください。",
|
|
7
|
-
"figure.gate.occupancy-undeclared.message": "この Figure は占める空間をまだ宣言していません。",
|
|
8
|
-
"figure.gate.occupancy-undeclared.why": "空間宣言がないと、Figure を配置するときの縮尺を決められません。",
|
|
9
|
-
"figure.gate.part-outside-occupancy.how": "「部品に合わせる」で部品から空間を宣言し直すか、'{part}' を {axis} 方向に {mm} mm 内側へ移動してください。",
|
|
10
|
-
"figure.gate.part-outside-occupancy.message": "'{part}' が {axis} 方向で空間宣言を {mm} mm はみ出しています。",
|
|
11
|
-
"figure.gate.part-outside-occupancy.why": "空間宣言が Figure を配置するときの縮尺を決めます。はみ出した分はその縮尺に含まれないため、ボード上でこの部品は Figure に与えられた場所の外に出ます。",
|
|
12
4
|
"figure.gate.parts-off-placement-face.how": "面が平面に接するよう '{part}' を Y 方向に {mm} mm 移動するか、別の取付面を選んでください。",
|
|
13
5
|
"figure.gate.parts-off-placement-face.message": "'{part}' の取付面が、Figure が置かれる平面から {mm} mm 離れています。",
|
|
14
6
|
"figure.gate.parts-off-placement-face.why": "Figure はその面で置かれると宣言されています。面が平面に届かないと、ボード上で Figure がその分だけ浮き、その上に置かれたものも浮きます。",
|
|
@@ -21,9 +13,6 @@
|
|
|
21
13
|
"figure.gate.placement-face-tilted.how": "平面と平行な取付面を選ぶか、'{part}' をまっすぐに立ててください。",
|
|
22
14
|
"figure.gate.placement-face-tilted.message": "'{part}' の取付面が、Figure が置かれる平面から {degrees}° 傾いています。",
|
|
23
15
|
"figure.gate.placement-face-tilted.why": "傾いた面は平面に接することができないため、Figure の置かれ方が定まりません。",
|
|
24
|
-
"figure.gate.state-range-sampled.how": "範囲全体を保証するには、証明できなかった項目を作り直してください。",
|
|
25
|
-
"figure.gate.state-range-sampled.message": "サイズと動きの範囲全体を証明できなかったため、サイズと姿勢の組み合わせ {states} 個を検査しました。",
|
|
26
|
-
"figure.gate.state-range-sampled.why": "検査した組み合わせの間で、部品が空間宣言をはみ出す可能性があります。",
|
|
27
16
|
"figure.gate.type-is-placeholder.how": "タイプ欄でタイプを設定してからリリースしてください。",
|
|
28
17
|
"figure.gate.type-is-placeholder.message": "'{type}' は Figure を最初に保存したときに付けられた仮のタイプです。",
|
|
29
18
|
"figure.gate.type-is-placeholder.why": "ボードはタイプで Figure を呼び出し、リリース後は変更できません。",
|
|
@@ -66,8 +55,10 @@
|
|
|
66
55
|
"figure.gate.contract.capability-gone.why": "シーンはこの名前で動作を付けます。配置済みのインスタンスはその動作を失います。",
|
|
67
56
|
"figure.gate.contract.capability-added.message": "'{name}' 能力が新しく追加されました。",
|
|
68
57
|
"figure.gate.contract.capability-added.why": "Figure ができることが増えます。配置済みのインスタンスはそのままです。",
|
|
69
|
-
"figure.gate.contract.
|
|
70
|
-
"figure.gate.contract.
|
|
58
|
+
"figure.gate.contract.size-changed.message": "図形のサイズが変わりました: {before} → {after}。",
|
|
59
|
+
"figure.gate.contract.size-changed.why": "ボードはこのサイズの箱で図形を置きます。このリリースに移ると箱が変わります。",
|
|
60
|
+
"figure.gate.contract.motion-range-changed.message": "動くときに通る空間が変わりました: {before} → {after}。",
|
|
61
|
+
"figure.gate.contract.motion-range-changed.why": "図形が動いて届く範囲です。このリリースに移ると届く範囲が変わります。",
|
|
71
62
|
"figure.gate.contract.contact-face-changed.message": "Figure を取り付ける面が変わりました。",
|
|
72
63
|
"figure.gate.contract.contact-face-changed.why": "このリリースに移行した利用側では、新しい面で置かれます。",
|
|
73
64
|
"figure.gate.contract.public-input-gone.message": "'{input}' はボードで設定できなくなりました。",
|
|
@@ -94,9 +85,6 @@
|
|
|
94
85
|
"figure.gate.contract.joint-list-unread.message": "直前のリリースの関節一覧を読み込めなかったため、関節を比較しませんでした: {reason}",
|
|
95
86
|
"figure.gate.contract.joint-list-unread.why": "このリリースによってコントローラーの値が動かすものが変わるかどうかは確認されていません。直前のリリースは関節を測定しないカーネルで作成されました。",
|
|
96
87
|
"error.figure-release-not-found": "{type} にはリリース {version} がありません。最新のリリースは {latest} です。",
|
|
97
|
-
"figure.gate.origin-off-centre.message": "原点が宣言された空間の中央からずれています: {off}。",
|
|
98
|
-
"figure.gate.origin-off-centre.why": "空間の中央で Figure を配置する図面では、描画した位置からその分だけ離れて配置されます。",
|
|
99
|
-
"figure.gate.origin-off-centre.how": "ドアの蝶番のように、Figure をそこで取り付ける場合はそのままにしてください。空間の中央で配置するには、原点を中央に移動してください。",
|
|
100
88
|
"figure.gate.off-mounting-plane.floor.clear.message": "'{part}' が床から {mm} mm 浮いています。",
|
|
101
89
|
"figure.gate.off-mounting-plane.floor.through.message": "'{part}' が床の下に {mm} mm 入り込んでいます。",
|
|
102
90
|
"figure.gate.off-mounting-plane.floor.beyond.message": "すべての部品が床の下にあります。",
|
package/translations/ko.json
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"error.figure-proposal-failed": "도형을 만들지 못했습니다.",
|
|
3
3
|
"error.figure-release-does-not-compile": "{type} 의 발행판({version})이 지금 컴파일되지 않습니다. 저작 화면에서 열어 수정한 후 다시 발행해야 보드에 나옵니다.",
|
|
4
|
-
"figure.gate.occupancy-empty-axis.message": "차지하는 공간의 {axis} 가 비어 있습니다.",
|
|
5
|
-
"figure.gate.occupancy-undeclared.how": "「부품에 맞추기」를 누르면 지금 부품으로 차지하는 공간을 정합니다.",
|
|
6
|
-
"figure.gate.occupancy-undeclared.how-no-parts": "먼저 도형을 추가한 뒤, 「부품에 맞추기」로 차지하는 공간을 정하세요.",
|
|
7
|
-
"figure.gate.occupancy-undeclared.message": "이 도형은 차지하는 공간을 아직 정하지 않았습니다.",
|
|
8
|
-
"figure.gate.occupancy-undeclared.why": "도면에 놓일 때의 배율은 차지하는 공간으로 정합니다.",
|
|
9
|
-
"figure.gate.part-outside-occupancy.how": "「부품에 맞추기」로 차지하는 공간을 지금 부품에 다시 맞추거나, '{part}' 부품을 {axis} 로 {mm}mm 안으로 옮기세요.",
|
|
10
|
-
"figure.gate.part-outside-occupancy.message": "도형이 차지하는 공간을 '{part}' 부품이 {axis} 로 {mm}mm 넘습니다.",
|
|
11
|
-
"figure.gate.part-outside-occupancy.why": "도면에 놓일 때의 배율은 차지하는 공간으로 정합니다. 넘은 만큼은 그 배율에 들어가지 않아서, 도면에서 이 부품이 도형에 주어진 자리 밖으로 나갑니다.",
|
|
12
4
|
"figure.gate.parts-off-placement-face.how": "'{part}' 부품을 Y 로 {mm}mm 옮겨 그 면을 평면에 맞추거나, 장착면을 다른 면으로 다시 정하세요.",
|
|
13
5
|
"figure.gate.parts-off-placement-face.message": "장착면으로 정한 '{part}' 부품의 면이 놓이는 평면에서 {mm}mm 떨어져 있습니다.",
|
|
14
6
|
"figure.gate.parts-off-placement-face.why": "도형은 그 면으로 놓인다고 선언돼 있습니다. 닿지 않으면 도면에서 그만큼 떠 보이고, 자리에 놓인 물건도 함께 뜹니다.",
|
|
@@ -21,9 +13,6 @@
|
|
|
21
13
|
"figure.gate.placement-face-tilted.how": "평면과 나란한 면을 장착면으로 다시 정하거나, '{part}' 부품을 바로 세우세요.",
|
|
22
14
|
"figure.gate.placement-face-tilted.message": "장착면으로 정한 '{part}' 부품의 면이 놓이는 평면에서 {degrees}° 기울어 있습니다.",
|
|
23
15
|
"figure.gate.placement-face-tilted.why": "기운 면은 평면에 닿을 수 없어서, 도형이 어떤 자세로 놓이는지 정해지지 않습니다.",
|
|
24
|
-
"figure.gate.state-range-sampled.how": "범위 전체를 보장하려면 증명하지 못한 항목을 다시 저작하세요.",
|
|
25
|
-
"figure.gate.state-range-sampled.message": "크기와 움직임의 범위 전체를 증명하지 못해 크기·자세 조합 {states}개만 검사했습니다.",
|
|
26
|
-
"figure.gate.state-range-sampled.why": "검사한 조합 사이에서 부품이 도형이 차지하는 공간 밖으로 나갈 수 있습니다.",
|
|
27
16
|
"figure.gate.type-is-placeholder.how": "타입 항목에 도형 타입을 지정한 후 발행해 주세요.",
|
|
28
17
|
"figure.gate.type-is-placeholder.message": "'{type}' 타입은 처음 저장할 때 붙은 임시 타입입니다.",
|
|
29
18
|
"figure.gate.type-is-placeholder.why": "보드는 이 타입으로 도형을 부르고, 발행한 뒤에는 바꿀 수 없습니다.",
|
|
@@ -66,8 +55,10 @@
|
|
|
66
55
|
"figure.gate.contract.capability-gone.why": "씬이 이 이름으로 동작을 붙입니다. 놓인 인스턴스가 그 동작을 잃습니다.",
|
|
67
56
|
"figure.gate.contract.capability-added.message": "'{name}' 능력이 새로 생겼습니다.",
|
|
68
57
|
"figure.gate.contract.capability-added.why": "사용 가능한 기능이 추가됩니다. 기존 인스턴스의 상태는 유지됩니다.",
|
|
69
|
-
"figure.gate.contract.
|
|
70
|
-
"figure.gate.contract.
|
|
58
|
+
"figure.gate.contract.size-changed.message": "도형의 크기가 바뀌었습니다: {before} → {after}.",
|
|
59
|
+
"figure.gate.contract.size-changed.why": "보드는 이 크기의 상자로 도형을 놓습니다. 이 발행본으로 옮기면 상자가 바뀝니다.",
|
|
60
|
+
"figure.gate.contract.motion-range-changed.message": "움직일 때 쓸어 가는 공간이 바뀌었습니다: {before} → {after}.",
|
|
61
|
+
"figure.gate.contract.motion-range-changed.why": "도형이 움직이며 닿는 곳입니다. 이 발행본으로 옮기면 닿는 곳이 달라집니다.",
|
|
71
62
|
"figure.gate.contract.contact-face-changed.message": "도형이 붙는 면이 바뀌었습니다.",
|
|
72
63
|
"figure.gate.contract.contact-face-changed.why": "이 발행본을 적용하면 새로운 접촉면을 기준으로 배치됩니다.",
|
|
73
64
|
"figure.gate.contract.public-input-gone.message": "'{input}' 값은 이제 보드에서 정할 수 없습니다.",
|
|
@@ -94,9 +85,6 @@
|
|
|
94
85
|
"figure.gate.contract.joint-list-unread.message": "직전 발행본의 관절 목록을 읽지 못해 관절을 비교하지 않았습니다: {reason}",
|
|
95
86
|
"figure.gate.contract.joint-list-unread.why": "이 발행이 컨트롤러의 값이 움직이는 것을 바꾸는지는 확인하지 않았습니다. 직전 발행본은 관절을 재지 않던 커널로 발행되었습니다.",
|
|
96
87
|
"error.figure-release-not-found": "{type} 에는 {version} 번 발행판이 없습니다. 최신 발행판은 {latest} 번입니다.",
|
|
97
|
-
"figure.gate.origin-off-centre.message": "원점이 차지 공간 가운데에서 비켜 있습니다: {off}.",
|
|
98
|
-
"figure.gate.origin-off-centre.why": "공간 가운데로 도형을 놓는 도면에서는 그린 자리에서 그만큼 떨어져 놓입니다.",
|
|
99
|
-
"figure.gate.origin-off-centre.how": "문의 경첩처럼 붙이는 자리라면 그대로 둡니다. 공간 가운데로 놓이게 하려면 원점을 가운데로 옮깁니다.",
|
|
100
88
|
"figure.gate.off-mounting-plane.floor.clear.message": "'{part}' 부품이 바닥에서 {mm}mm 떠 있습니다.",
|
|
101
89
|
"figure.gate.off-mounting-plane.floor.through.message": "'{part}' 부품이 바닥 아래로 {mm}mm 내려가 있습니다.",
|
|
102
90
|
"figure.gate.off-mounting-plane.floor.beyond.message": "모든 부품이 바닥 아래에 있습니다.",
|
package/translations/ms.json
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"error.figure-proposal-failed": "Figura tidak dapat dibuat.",
|
|
3
3
|
"error.figure-release-does-not-compile": "sumber terbitan {type} (versi {version}) tidak dapat dikompil. buka dalam pemodel, betulkan dan terbitkan semula sebelum ia dilukis pada papan.",
|
|
4
|
-
"figure.gate.occupancy-empty-axis.message": "Ruang yang diisytiharkan kosong pada {axis}.",
|
|
5
|
-
"figure.gate.occupancy-undeclared.how": "Gunakan \"padankan dengan bahagian\" untuk mengisytiharkan ruang daripada bahagian seperti sekarang.",
|
|
6
|
-
"figure.gate.occupancy-undeclared.how-no-parts": "Tambah bentuk dahulu, kemudian gunakan \"padankan dengan bahagian\" untuk mengisytiharkan ruang daripadanya.",
|
|
7
|
-
"figure.gate.occupancy-undeclared.message": "Figure ini belum mengisytiharkan ruang yang diambilnya.",
|
|
8
|
-
"figure.gate.occupancy-undeclared.why": "Tanpa ruang yang diisytiharkan, skala figure apabila diletakkan tidak dapat ditetapkan.",
|
|
9
|
-
"figure.gate.part-outside-occupancy.how": "Gunakan \"padankan dengan bahagian\" untuk mengisytiharkan semula ruang daripada bahagian, atau alihkan '{part}' {mm} mm ke dalam pada {axis}.",
|
|
10
|
-
"figure.gate.part-outside-occupancy.message": "'{part}' melepasi ruang yang diisytiharkan sebanyak {mm} mm pada {axis}.",
|
|
11
|
-
"figure.gate.part-outside-occupancy.why": "Ruang yang diisytiharkan menetapkan skala figure apabila diletakkan. Apa yang melepasinya tidak termasuk dalam skala itu, jadi pada papan bahagian ini berada di luar tempat yang diberikan kepada figure.",
|
|
12
4
|
"figure.gate.parts-off-placement-face.how": "Alihkan '{part}' {mm} mm pada Y supaya muka itu bertemu satah, atau pilih muka pemasangan lain.",
|
|
13
5
|
"figure.gate.parts-off-placement-face.message": "Muka pemasangan '{part}' berada {mm} mm dari satah tempat figure berdiri.",
|
|
14
6
|
"figure.gate.parts-off-placement-face.why": "Figure diisytiharkan berdiri pada muka itu. Jika muka tidak mencapai satah, figure terapung di atas papan sebanyak itu, dan apa sahaja yang diletakkan padanya turut terapung.",
|
|
@@ -21,9 +13,6 @@
|
|
|
21
13
|
"figure.gate.placement-face-tilted.how": "Pilih muka pemasangan yang selari dengan satah, atau tegakkan '{part}'.",
|
|
22
14
|
"figure.gate.placement-face-tilted.message": "Muka pemasangan '{part}' condong {degrees}° dari satah tempat figure berdiri.",
|
|
23
15
|
"figure.gate.placement-face-tilted.why": "Muka yang condong tidak boleh terletak pada satah, jadi cara figure berdiri tidak dapat ditentukan.",
|
|
24
|
-
"figure.gate.state-range-sampled.how": "Untuk merangkumi keseluruhan julat, karang semula apa yang tidak dapat dibuktikan.",
|
|
25
|
-
"figure.gate.state-range-sampled.message": "Keseluruhan julat saiz dan gerakan tidak dapat dibuktikan, jadi {states} gabungan saiz dan postur telah disemak.",
|
|
26
|
-
"figure.gate.state-range-sampled.why": "Di antara gabungan yang disemak, sesuatu bahagian mungkin masih melepasi ruang yang diisytiharkan.",
|
|
27
16
|
"figure.gate.type-is-placeholder.how": "Tetapkan jenis dalam medan jenis, kemudian terbitkan.",
|
|
28
17
|
"figure.gate.type-is-placeholder.message": "'{type}' ialah jenis sementara yang diberikan semasa figure mula-mula disimpan.",
|
|
29
18
|
"figure.gate.type-is-placeholder.why": "Papan memanggil figure melalui jenisnya, dan ia tidak boleh diubah setelah figure diterbitkan.",
|
|
@@ -66,8 +55,10 @@
|
|
|
66
55
|
"figure.gate.contract.capability-gone.why": "Adegan melampirkan tingkah laku melalui nama ini. Instans yang diletakkan kehilangan apa yang dilakukannya.",
|
|
67
56
|
"figure.gate.contract.capability-added.message": "Keupayaan '{name}' adalah baharu.",
|
|
68
57
|
"figure.gate.contract.capability-added.why": "Ia menambah apa yang boleh dilakukan oleh figure. Instans yang diletakkan kekal seperti sedia ada.",
|
|
69
|
-
"figure.gate.contract.
|
|
70
|
-
"figure.gate.contract.
|
|
58
|
+
"figure.gate.contract.size-changed.message": "Saiz rajah telah berubah: {before} → {after}.",
|
|
59
|
+
"figure.gate.contract.size-changed.why": "Papan meletakkan rajah dalam kotak bersaiz ini. Selepas berpindah ke keluaran ini, kotaknya berubah.",
|
|
60
|
+
"figure.gate.contract.motion-range-changed.message": "Ruang yang dilalui rajah semasa bergerak telah berubah: {before} → {after}.",
|
|
61
|
+
"figure.gate.contract.motion-range-changed.why": "Ini ialah ruang yang dicapai rajah semasa bergerak. Selepas berpindah ke keluaran ini, capaiannya berubah.",
|
|
71
62
|
"figure.gate.contract.contact-face-changed.message": "Muka pemasangan figure telah berubah.",
|
|
72
63
|
"figure.gate.contract.contact-face-changed.why": "Pengguna yang beralih ke terbitan ini melihatnya berdiri pada muka baharu.",
|
|
73
64
|
"figure.gate.contract.public-input-gone.message": "'{input}' tidak lagi ditetapkan pada papan.",
|
|
@@ -94,9 +85,6 @@
|
|
|
94
85
|
"figure.gate.contract.joint-list-unread.message": "Senarai sendi terbitan terakhir tidak dapat dibaca, jadi sendinya tidak dibandingkan: {reason}",
|
|
95
86
|
"figure.gate.contract.joint-list-unread.why": "Sama ada terbitan ini mengubah apa yang digerakkan oleh nilai pengawal belum disemak. Terbitan terakhir dibuat oleh kernel yang tidak mengukur sendi.",
|
|
96
87
|
"error.figure-release-not-found": "{type} tiada terbitan {version}. terbitan terkininya ialah {latest}.",
|
|
97
|
-
"figure.gate.origin-off-centre.message": "Titik asal tidak berada di tengah ruang yang diisytiharkan: {off}.",
|
|
98
|
-
"figure.gate.origin-off-centre.why": "Lukisan yang meletakkan figure mengikut tengah ruangnya meletakkan figure ini sejauh itu dari tempat ia dilukis.",
|
|
99
|
-
"figure.gate.origin-off-centre.how": "Kekalkan jika figure dilekatkan di situ, seperti pintu pada engselnya. Alihkan titik asal ke tengah untuk meletakkannya mengikut ruangnya.",
|
|
100
88
|
"figure.gate.off-mounting-plane.floor.clear.message": "'{part}' berada {mm} mm di atas lantai.",
|
|
101
89
|
"figure.gate.off-mounting-plane.floor.through.message": "'{part}' turun {mm} mm di bawah lantai.",
|
|
102
90
|
"figure.gate.off-mounting-plane.floor.beyond.message": "Semua bahagian berada di bawah lantai.",
|
package/translations/zh.json
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"error.figure-proposal-failed": "无法生成该图形。",
|
|
3
3
|
"error.figure-release-does-not-compile": "{type} 的发布源(版本 {version})无法编译。请在建模器中打开、修正并重新发布,之后才能在看板上绘制。",
|
|
4
|
-
"figure.gate.occupancy-empty-axis.message": "声明的空间在 {axis} 上为空。",
|
|
5
|
-
"figure.gate.occupancy-undeclared.how": "使用「适配部件」按当前部件声明空间。",
|
|
6
|
-
"figure.gate.occupancy-undeclared.how-no-parts": "请先添加形状,然后使用「适配部件」据此声明空间。",
|
|
7
|
-
"figure.gate.occupancy-undeclared.message": "此图形尚未声明其占用的空间。",
|
|
8
|
-
"figure.gate.occupancy-undeclared.why": "没有声明的空间,就无法确定图形放置时的比例。",
|
|
9
|
-
"figure.gate.part-outside-occupancy.how": "使用「适配部件」按部件重新声明空间,或将 '{part}' 在 {axis} 上向内移动 {mm} mm。",
|
|
10
|
-
"figure.gate.part-outside-occupancy.message": "'{part}' 在 {axis} 上超出声明的空间 {mm} mm。",
|
|
11
|
-
"figure.gate.part-outside-occupancy.why": "声明的空间决定图形放置时的比例。超出的部分不计入该比例,因此在看板上此部件会落在分配给图形的位置之外。",
|
|
12
4
|
"figure.gate.parts-off-placement-face.how": "将 '{part}' 沿 Y 移动 {mm} mm 使该面贴合平面,或选择其他安装面。",
|
|
13
5
|
"figure.gate.parts-off-placement-face.message": "'{part}' 的安装面距离图形所立的平面 {mm} mm。",
|
|
14
6
|
"figure.gate.parts-off-placement-face.why": "图形声明以该面立于平面上。如果该面接触不到平面,图形在看板上会悬空相应距离,放在其上的物体也会一起悬空。",
|
|
@@ -21,9 +13,6 @@
|
|
|
21
13
|
"figure.gate.placement-face-tilted.how": "选择与平面平行的安装面,或将 '{part}' 摆正。",
|
|
22
14
|
"figure.gate.placement-face-tilted.message": "'{part}' 的安装面与图形所立的平面倾斜 {degrees}°。",
|
|
23
15
|
"figure.gate.placement-face-tilted.why": "倾斜的面无法贴合平面,因此图形的放置姿态无法确定。",
|
|
24
|
-
"figure.gate.state-range-sampled.how": "要覆盖整个范围,请重新编辑无法证明的项目。",
|
|
25
|
-
"figure.gate.state-range-sampled.message": "无法证明尺寸和运动的整个范围,因此只检查了 {states} 个尺寸与姿态组合。",
|
|
26
|
-
"figure.gate.state-range-sampled.why": "在已检查的组合之间,部件仍可能超出声明的空间。",
|
|
27
16
|
"figure.gate.type-is-placeholder.how": "在类型字段中设置类型,然后发布。",
|
|
28
17
|
"figure.gate.type-is-placeholder.message": "'{type}' 是图形首次保存时赋予的临时类型。",
|
|
29
18
|
"figure.gate.type-is-placeholder.why": "看板按类型调用图形,图形发布后类型不能更改。",
|
|
@@ -66,8 +55,10 @@
|
|
|
66
55
|
"figure.gate.contract.capability-gone.why": "场景按此名称附加行为。已放置的实例将失去该行为。",
|
|
67
56
|
"figure.gate.contract.capability-added.message": "能力 '{name}' 是新增的。",
|
|
68
57
|
"figure.gate.contract.capability-added.why": "它增加了图形能做的事。已放置的实例保持原样。",
|
|
69
|
-
"figure.gate.contract.
|
|
70
|
-
"figure.gate.contract.
|
|
58
|
+
"figure.gate.contract.size-changed.message": "图形的尺寸已更改: {before} → {after}。",
|
|
59
|
+
"figure.gate.contract.size-changed.why": "看板按此尺寸的框放置图形。迁移到此版本后框会改变。",
|
|
60
|
+
"figure.gate.contract.motion-range-changed.message": "运动时扫过的空间已更改: {before} → {after}。",
|
|
61
|
+
"figure.gate.contract.motion-range-changed.why": "这是图形运动时能到达的范围。迁移到此版本后到达范围会改变。",
|
|
71
62
|
"figure.gate.contract.contact-face-changed.message": "图形的安装面发生了变化。",
|
|
72
63
|
"figure.gate.contract.contact-face-changed.why": "切换到此发布版本的使用方会看到它立于新的面上。",
|
|
73
64
|
"figure.gate.contract.public-input-gone.message": "'{input}' 不再在看板上设置。",
|
|
@@ -94,9 +85,6 @@
|
|
|
94
85
|
"figure.gate.contract.joint-list-unread.message": "无法读取上一个发布版本的关节列表,因此未比较关节:{reason}",
|
|
95
86
|
"figure.gate.contract.joint-list-unread.why": "尚未检查此次发布是否改变控制器的值所移动的对象。上一个发布版本由不测量关节的内核生成。",
|
|
96
87
|
"error.figure-release-not-found": "{type} 没有发布版本 {version}。其最新发布版本为 {latest}。",
|
|
97
|
-
"figure.gate.origin-off-centre.message": "原点偏离声明空间的中心:{off}。",
|
|
98
|
-
"figure.gate.origin-off-centre.why": "在按空间中心放置图形的图纸中,此图形会偏离绘制位置相应距离。",
|
|
99
|
-
"figure.gate.origin-off-centre.how": "如果图形固定在该处(如门的铰链),请保持不变。若要按空间放置,请将原点移到中心。",
|
|
100
88
|
"figure.gate.off-mounting-plane.floor.clear.message": "'{part}' 离地面 {mm} mm,悬在空中。",
|
|
101
89
|
"figure.gate.off-mounting-plane.floor.through.message": "'{part}' 低于地面 {mm} mm。",
|
|
102
90
|
"figure.gate.off-mounting-plane.floor.beyond.message": "所有部件都在地面以下。",
|