From a3a14088147d15ec8390fa64f3fb2eccb2cfd162 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 08:47:49 +0000 Subject: [PATCH 01/22] i18n node messages: skip a missing nodes entry only in temporary catalog projects Outside an I18N_ROOT test project a missing packages/nodes/src/index.ts now fails extract and check instead of silently dropping the definition copy. --- scripts/i18n-node-messages.ts | 23 +++++++++++++++++++---- scripts/i18n.test.ts | 8 ++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/scripts/i18n-node-messages.ts b/scripts/i18n-node-messages.ts index df728afb53..9925075e45 100644 --- a/scripts/i18n-node-messages.ts +++ b/scripts/i18n-node-messages.ts @@ -7,7 +7,7 @@ import { writeFileSync, } from 'node:fs' import { tmpdir } from 'node:os' -import { dirname, join, resolve } from 'node:path' +import { dirname, join, relative, resolve } from 'node:path' import { fileURLToPath } from 'node:url' import type { MessageDescriptor } from '@lingui/core' import { @@ -150,15 +150,30 @@ export function renderDefinitionMessages(descriptors: MessageDescriptor[]): stri ].join('\n') } +/** + * Only the tests' temporary catalog projects (`I18N_ROOT`) lack the built-in + * nodes; in a real checkout a missing entry means the definitions moved, and + * skipping would silently let their copy fall out of the catalogs. + */ +export function hasNodeDefinitions( + entry = NODES_ENTRY, + temporaryRoot = Boolean(process.env.I18N_ROOT), +): boolean { + if (existsSync(entry)) return true + if (temporaryRoot) return false + throw new Error( + `${relative(ROOT, entry)} is missing; update NODES_ENTRY in scripts/i18n-node-messages.ts`, + ) +} + export async function writeDefinitionMessages(): Promise { - // A checkout without the built-in nodes has no definition copy. - if (!existsSync(NODES_ENTRY)) return + if (!hasNodeDefinitions()) return mkdirSync(dirname(DEFINITION_MESSAGES_PATH), { recursive: true }) writeFileSync(DEFINITION_MESSAGES_PATH, renderDefinitionMessages(await definitionDescriptors())) } export async function checkDefinitionMessages(): Promise { - if (!existsSync(NODES_ENTRY)) return [] + if (!hasNodeDefinitions()) return [] const expected = renderDefinitionMessages(await definitionDescriptors()) const current = existsSync(DEFINITION_MESSAGES_PATH) ? readFileSync(DEFINITION_MESSAGES_PATH, 'utf8') diff --git a/scripts/i18n.test.ts b/scripts/i18n.test.ts index 5e352277ab..d1513e45a6 100644 --- a/scripts/i18n.test.ts +++ b/scripts/i18n.test.ts @@ -14,6 +14,7 @@ import { type TranslationProvider, validateTranslation, } from './i18n' +import { hasNodeDefinitions } from './i18n-node-messages' test('AI review notes cannot inject physical PO lines', () => { const escaped = escapePoCommentValue('Check wording.\nmsgid "injected"\r\nmsgstr "value"') @@ -275,3 +276,10 @@ test('translation validation applies the checked-in glossary', () => { }), ).toContain('expected glossary term "天花板" for "ceiling"') }) + +test('a missing nodes entry skips the definition check only in a temporary catalog project', () => { + const missing = join(tmpdir(), 'pascal-no-nodes', 'packages/nodes/src/index.ts') + expect(hasNodeDefinitions(missing, true)).toBe(false) + expect(() => hasNodeDefinitions(missing, false)).toThrow(/is missing/) + expect(hasNodeDefinitions()).toBe(true) +}) From 9e38fe45b658e1629cdbe2ddf564e97882c18228 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 09:11:37 +0000 Subject: [PATCH 02/22] core: floorFootprintNaming parts behind floorFootprintName, and formatList floorFootprintName keeps its English for MCP and agents; the editor words the same parts (named, " floor", Shared floor, Floor area) in the UI language. formatList joins names with the locale's separators. --- packages/core/src/i18n/format.ts | 9 +++++ packages/core/src/i18n/index.ts | 1 + packages/core/src/index.ts | 6 ++- .../core/src/lib/floor-footprint-name.test.ts | 20 +++++++++- packages/core/src/lib/floor-footprint-name.ts | 37 +++++++++++++++++-- 5 files changed, 67 insertions(+), 6 deletions(-) diff --git a/packages/core/src/i18n/format.ts b/packages/core/src/i18n/format.ts index 85c974d391..8a5e0a10fc 100644 --- a/packages/core/src/i18n/format.ts +++ b/packages/core/src/i18n/format.ts @@ -92,6 +92,15 @@ export function formatNumber(value: number, options: NumberFormatOptions = {}): } } +/** Names in a sentence ("Kitchen, Hall"), with the locale's separators. */ +export function formatList(items: readonly string[], locale = 'en'): string { + try { + return new Intl.ListFormat([locale, 'en'], { type: 'conjunction' }).format(items) + } catch { + return items.join(', ') + } +} + export function formatLength( meters: number, unit: LengthUnit, diff --git a/packages/core/src/i18n/index.ts b/packages/core/src/i18n/index.ts index e1c81ca903..cb2dd96444 100644 --- a/packages/core/src/i18n/index.ts +++ b/packages/core/src/i18n/index.ts @@ -1,6 +1,7 @@ export type { MessageDescriptor } from '@lingui/core' export { formatLength, + formatList, formatNumber, type LengthUnit, levelDisplayNumber, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 8b1903787a..6ad560d496 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -186,7 +186,11 @@ export { staleFinishScripts, } from './lib/finish-script' export { floorConstructionLift, liftedManualSlab } from './lib/floor-construction-lift' -export { floorFootprintName } from './lib/floor-footprint-name' +export { + type FloorFootprintNaming, + floorFootprintName, + floorFootprintNaming, +} from './lib/floor-footprint-name' export { automaticFloorHeight, floorFootprintSupportClass, diff --git a/packages/core/src/lib/floor-footprint-name.test.ts b/packages/core/src/lib/floor-footprint-name.test.ts index ba7de3e483..d93e5a6eb2 100644 --- a/packages/core/src/lib/floor-footprint-name.test.ts +++ b/packages/core/src/lib/floor-footprint-name.test.ts @@ -1,6 +1,6 @@ import { expect, test } from 'bun:test' import { type AnyNode, SlabNode, ZoneNode } from '../schema' -import { floorFootprintName } from './floor-footprint-name' +import { floorFootprintName, floorFootprintNaming } from './floor-footprint-name' const square = (x: number, size: number): [number, number][] => [ [x, 0], @@ -47,3 +47,21 @@ test('footprints never read as levels: Shared floor, then the largest room, then const unnamed = { ...annex, zoneIds: [blank.id] } expect(floorFootprintName({ ...nodes, [blank.id]: blank }, unnamed)).toBe('Floor area') }) + +test('the naming parts let a UI word the footprint names in its own language', () => { + const kitchen = room('zone_kitchen', square(0, 6), 'Kitchen') + const hall = room('zone_hall', square(6, 2), 'Hall') + const nine = room('zone_nine', square(20, 3), 'Room 9') + const upper = room('zone_upper', square(30, 3), 'Upper floor') + const house = plate('slab_house', square(0, 8), [kitchen.id, hall.id]) + const annex = plate('slab_annex', square(20, 4), [nine.id]) + const deck = plate('slab_deck', square(30, 4), [upper.id]) + const pad = plate('slab_pad', square(40, 2), [], 'Garden foundation') + const bare = plate('slab_bare', square(50, 2)) + const nodes = scene(kitchen, hall, nine, upper, house, annex, deck, pad, bare) + expect(floorFootprintNaming(nodes, house)).toEqual({ kind: 'shared' }) + expect(floorFootprintNaming(nodes, annex)).toEqual({ kind: 'room', room: 'Room 9' }) + expect(floorFootprintNaming(nodes, deck)).toEqual({ kind: 'named', name: 'Upper floor' }) + expect(floorFootprintNaming(nodes, pad)).toEqual({ kind: 'named', name: 'Garden foundation' }) + expect(floorFootprintNaming(nodes, bare)).toEqual({ kind: 'area' }) +}) diff --git a/packages/core/src/lib/floor-footprint-name.ts b/packages/core/src/lib/floor-footprint-name.ts index 8936d689a8..e685ff3bc2 100644 --- a/packages/core/src/lib/floor-footprint-name.ts +++ b/packages/core/src/lib/floor-footprint-name.ts @@ -19,8 +19,36 @@ export function floorFootprintName( nodes: Readonly>, plate: SlabNode, ): string { + const naming = floorFootprintNaming(nodes, plate) + switch (naming.kind) { + case 'named': + return naming.name + case 'room': + return `${naming.room} floor` + case 'shared': + return 'Shared floor' + case 'area': + return 'Floor area' + } +} + +/** + * How `floorFootprintName` arrives at its name, so a UI can word it in its + * language: `named` is the plate's own name (or a room name that already + * ends in "floor") and shows as is; `room` is " floor". + */ +export type FloorFootprintNaming = + | { kind: 'named'; name: string } + | { kind: 'room'; room: string } + | { kind: 'shared' } + | { kind: 'area' } + +export function floorFootprintNaming( + nodes: Readonly>, + plate: SlabNode, +): FloorFootprintNaming { const own = plate.name?.trim() - if (own && !GENERATED_NAME.test(own)) return own + if (own && !GENERATED_NAME.test(own)) return { kind: 'named', name: own } const rooms = (plate.zoneIds ?? []) .flatMap((id) => { const zone = nodes[id] @@ -34,7 +62,7 @@ export function floorFootprintName( !rooms.some((room) => room.floor?.footprint) && isLargestFootprint(nodes, plate) ) - return 'Shared floor' + return { kind: 'shared' } const key = rooms.find((room) => room.floor?.footprint)?.floor?.footprint const creatorId = key && floorFootprintCreatorId(key) const creator = creatorId ? nodes[creatorId] : undefined @@ -49,8 +77,9 @@ export function floorFootprintName( ? creator.name?.trim() : undefined const named = creatorName || rooms.map((room) => room.name?.trim()).find(Boolean) - if (!named) return rooms.some((room) => room.floor?.footprint) ? 'Shared floor' : 'Floor area' - return /\bfloor$/i.test(named) ? named : `${named} floor` + if (!named) + return rooms.some((room) => room.floor?.footprint) ? { kind: 'shared' } : { kind: 'area' } + return /\bfloor$/i.test(named) ? { kind: 'named', name: named } : { kind: 'room', room: named } } function isLargestFootprint(nodes: Readonly>, plate: SlabNode) { From b230f97c2908dca2f618ff8371399ac19c343e8e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 09:11:37 +0000 Subject: [PATCH 03/22] i18n: translate the auto inspector's definition copy at display time Group and action labels, the field names prettified from keys and enum options get editor.inspector.* IDs (slug + hash), shared across kinds; the definition-messages generator emits them for every built-in kind. --- .../ui/panels/multi-parametric-inspector.tsx | 12 ++++---- .../ui/panels/parametric-field-control.tsx | 21 +++++++------ .../ui/panels/parametric-inspector.tsx | 21 +++++++------ packages/editor/src/i18n/node-messages.ts | 30 +++++++++++++++++++ scripts/i18n-node-messages.ts | 19 ++++++++++++ 5 files changed, 79 insertions(+), 24 deletions(-) diff --git a/packages/editor/src/components/ui/panels/multi-parametric-inspector.tsx b/packages/editor/src/components/ui/panels/multi-parametric-inspector.tsx index 5332732a2e..407bc0a80e 100644 --- a/packages/editor/src/components/ui/panels/multi-parametric-inspector.tsx +++ b/packages/editor/src/components/ui/panels/multi-parametric-inspector.tsx @@ -6,7 +6,7 @@ import { nodeRegistry, type ParamField, type ParametricDescriptor, - useScene, + useScene, usePascalI18n, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { useCallback, useMemo } from 'react' @@ -32,8 +32,10 @@ import { getTypeDisplay } from './node-display' import { ParametricFieldControl } from './parametric-field-control' import { PanelWrapper } from './panel-wrapper' import { formatSelectionBreakdown } from './selection-breakdown' +import { inspectorGroupDescriptor } from '../../../i18n/node-messages' export function MultiParametricInspector({ footer }: { footer?: React.ReactNode }) { + const i18n = usePascalI18n() const selectedIds = useViewer((s) => s.selection.selectedIds) const setSelection = useViewer((s) => s.setSelection) const nodeIds = useScene( @@ -62,16 +64,14 @@ export function MultiParametricInspector({ footer }: { footer?: React.ReactNode if (nodeIds.length < 2 || !nodeType || !parametrics) return null - const display = getTypeDisplay(nodeType) + const display = getTypeDisplay(nodeType, i18n) const title = matchedGroup ? `${matchedGroup.label} · ${breakdown}` : breakdown || display.label return ( {matchedGroup && (
- {matchedGroup.label} (session only). Plain click reselects all members. Not saved with the - project. -
+ {i18n._({ id: 'editor.panels.multiParametricInspector.labelSessionOnlyPlainClickReselects', message: '{label} (session only). Plain click reselects all members. Not saved with the project.', values: { label: matchedGroup.label } })} )} {parametrics.groups.map((group, gi) => ( {hasKindControls ? ( diff --git a/packages/editor/src/components/ui/panels/parametric-field-control.tsx b/packages/editor/src/components/ui/panels/parametric-field-control.tsx index 271f5e8374..d06c6a6e98 100644 --- a/packages/editor/src/components/ui/panels/parametric-field-control.tsx +++ b/packages/editor/src/components/ui/panels/parametric-field-control.tsx @@ -1,10 +1,12 @@ 'use client' +import { usePascalI18n } from '@pascal-app/core' import type { AnyNode, ParamField } from '@pascal-app/core' import { SegmentedControl } from '../controls/segmented-control' import { SliderControl } from '../controls/slider-control' import { ToggleControl } from '../controls/toggle-control' -import { precisionForStep, prettifyEnumValue, prettifyKey } from './parametric-field-utils' +import { inspectorFieldDescriptor, inspectorOptionDescriptor } from '../../../i18n/node-messages' +import { precisionForStep } from './parametric-field-utils' interface ParametricFieldControlProps { field: ParamField @@ -21,6 +23,7 @@ export function ParametricFieldControl({ onChange, onCommit, }: ParametricFieldControlProps) { + const i18n = usePascalI18n() const key = String(field.key) switch (field.kind) { @@ -30,7 +33,7 @@ export function ParametricFieldControl({ const precision = precisionForStep(step) return ( { const patch = { [key]: next } as Partial @@ -73,14 +76,14 @@ export function ParametricFieldControl({ ({ label: prettifyEnumValue(opt), value: opt }))} + options={field.options.map((opt) => ({ label: i18n._(inspectorOptionDescriptor(opt)), value: opt }))} value={str} /> ) } return (
- {prettifyKey(key)} + {i18n._(inspectorFieldDescriptor(key))} @@ -110,7 +113,7 @@ export function ParametricFieldControl({ } return (
- {prettifyKey(key)} + {i18n._(inspectorFieldDescriptor(key))}
apply(e.target.value)} type="text" - value={mixed ? 'Mixed' : str} + value={mixed ? i18n._({ id: 'editor.panels.mixed', message: 'Mixed' }) : str} />
diff --git a/packages/editor/src/components/ui/panels/parametric-inspector.tsx b/packages/editor/src/components/ui/panels/parametric-inspector.tsx index 468741fd8a..266b268095 100644 --- a/packages/editor/src/components/ui/panels/parametric-inspector.tsx +++ b/packages/editor/src/components/ui/panels/parametric-inspector.tsx @@ -8,7 +8,7 @@ import { type ParamAction, type ParamField, useScene, - type ZoneNode, + type ZoneNode, usePascalI18n, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { Icon } from '@iconify/react' @@ -24,6 +24,7 @@ import { ActionButton, ActionGroup } from '../controls/action-button' import { PanelSection } from '../controls/panel-section' import { ParametricFieldControl } from './parametric-field-control' import { InspectorFooterContext, PanelWrapper } from './panel-wrapper' +import { inspectorActionDescriptor, inspectorGroupDescriptor, nodeLabel } from '../../../i18n/node-messages' /** * Auto-derived right-panel inspector for any registry-backed node. @@ -46,6 +47,7 @@ export function ParametricInspector({ nodeId, onClose, }: { footer?: React.ReactNode; nodeId?: AnyNodeId; onClose?: () => void } = {}) { + const i18n = usePascalI18n() const selectedIdFromSelection = useViewer((s) => s.selection.selectedIds[0]) as | AnyNodeId | undefined @@ -127,7 +129,7 @@ export function ParametricInspector({ } const presentation = def.presentation - const title = presentation?.label ?? nodeType ?? '' + const title = presentation?.label && nodeType ? nodeLabel(nodeType, presentation.label, i18n) : (nodeType ?? '') const iconNode = renderIcon(presentation?.icon) const canMove = !!def.capabilities.movable const canDelete = def.capabilities.deletable !== false @@ -149,7 +151,7 @@ export function ParametricInspector({ {group.fields.map((field, fi) => ( )} {(canMove || canDelete || (parametrics.actions && parametrics.actions.length > 0)) && ( - + {canMove && ( - } label="Move" onClick={handleMove} /> + } label={i18n._({ id: 'editor.panels.parametricInspector.move', message: 'Move' })} onClick={handleMove} /> )} {parametrics.actions?.map((action, i) => ( @@ -181,13 +183,13 @@ export function ParametricInspector({ } - label="Delete" + label={i18n._({ id: 'editor.panels.parametricInspector.delete', message: 'Delete' })} onClick={() => handleDelete(false)} /> } - label="Delete with contents" + label={i18n._({ id: 'editor.panels.parametricInspector.deleteWithContents', message: 'Delete with contents' })} onClick={() => handleDelete(true)} /> @@ -195,7 +197,7 @@ export function ParametricInspector({ } - label="Delete" + label={i18n._({ id: 'editor.panels.parametricInspector.delete', message: 'Delete' })} onClick={() => handleDelete()} /> ))} @@ -212,6 +214,7 @@ export function ParametricInspector({ // from re-rendering it. The click handler re-reads the live node so the // handler always acts on current state. function ParamActionButton({ action, nodeId }: { action: ParamAction; nodeId: AnyNodeId }) { + const i18n = usePascalI18n() const disabled = useScene((s) => { if (!action.enabledIf) return false const n = s.nodes[nodeId] @@ -225,7 +228,7 @@ function ParamActionButton({ action, nodeId }: { action: ParamAction; n ) : undefined } - label={action.label} + label={i18n._(inspectorActionDescriptor(action.label))} onClick={() => { const live = useScene.getState().nodes[nodeId] if (live) action.onClick(live as AnyNode) diff --git a/packages/editor/src/i18n/node-messages.ts b/packages/editor/src/i18n/node-messages.ts index 9652de72a5..fe284acd7f 100644 --- a/packages/editor/src/i18n/node-messages.ts +++ b/packages/editor/src/i18n/node-messages.ts @@ -1,4 +1,5 @@ import type { MessageDescriptor, PascalI18n } from '@pascal-app/core' +import { prettifyEnumValue, prettifyKey } from '../components/ui/panels/parametric-field-utils' /** * Display copy that node definitions carry (presentation labels, tool hints) @@ -120,6 +121,35 @@ export function toolHintKeyDescriptor(key: string): MessageDescriptor | undefine return { id: `editor.toolHint.key.${messageSlug(key)}.${messageHash(message)}`, message } } +/** + * Auto-inspector copy (`def.parametrics`): group and action labels, and the + * field names and enum options it prettifies from keys. Shared across kinds, + * so "Dimensions" or "Height" is translated once. + */ +function inspectorMessage(scope: 'action' | 'field' | 'group' | 'option', english: string) { + const message = literal(english) + return { + id: `editor.inspector.${scope}.${messageSlug(english)}.${messageHash(message)}`, + message, + } +} + +export function inspectorGroupDescriptor(label: string): MessageDescriptor { + return inspectorMessage('group', label) +} + +export function inspectorActionDescriptor(label: string): MessageDescriptor { + return inspectorMessage('action', label) +} + +export function inspectorFieldDescriptor(key: string): MessageDescriptor { + return inspectorMessage('field', prettifyKey(key)) +} + +export function inspectorOptionDescriptor(value: string): MessageDescriptor { + return inspectorMessage('option', prettifyEnumValue(value)) +} + export function nodeLabel(kind: string, english: string, i18n: PascalI18n): string { return i18n._(nodeLabelDescriptor(kind, english)) } diff --git a/scripts/i18n-node-messages.ts b/scripts/i18n-node-messages.ts index 9925075e45..df9c352f80 100644 --- a/scripts/i18n-node-messages.ts +++ b/scripts/i18n-node-messages.ts @@ -12,6 +12,10 @@ import { fileURLToPath } from 'node:url' import type { MessageDescriptor } from '@lingui/core' import { HINT_KEY_NAMES, + inspectorActionDescriptor, + inspectorFieldDescriptor, + inspectorGroupDescriptor, + inspectorOptionDescriptor, nodeDescriptionDescriptor, nodeLabelDescriptor, toolHintChipDescriptor, @@ -46,6 +50,10 @@ type Definition = { presentation?: { label?: string; description?: string } toolHints?: Hint[] affordanceHints?: Record + parametrics?: { + groups?: { label?: string; fields?: { key?: string; kind?: string; options?: string[] }[] }[] + actions?: { label?: string }[] + } } type Manifest = { @@ -111,6 +119,17 @@ function descriptorsOf(definitions: Definition[]): MessageDescriptor[] { for (const hints of Object.values(definition.affordanceHints ?? {})) { for (const hint of hints) addHint(hint) } + for (const group of definition.parametrics?.groups ?? []) { + if (group.label) add(inspectorGroupDescriptor(group.label)) + for (const field of group.fields ?? []) { + if (field.kind === 'custom' || !field.key) continue + add(inspectorFieldDescriptor(field.key)) + for (const option of field.options ?? []) add(inspectorOptionDescriptor(option)) + } + } + for (const action of definition.parametrics?.actions ?? []) { + if (action.label) add(inspectorActionDescriptor(action.label)) + } } for (const key of HINT_KEY_NAMES) add(toolHintKeyDescriptor(key)) return [...byId.values()].sort((a, b) => a.id.localeCompare(b.id)) From 1ee189e5954db8049e72dab6887c4d13dc4b7dd2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 09:11:37 +0000 Subject: [PATCH 04/22] i18n: migrate the properties and inspector panels Room, floor & foundation, floor opening, reference, multi-selection and mobile panels, and the wall, curtain wall, slab, ceiling, door, window, roof, roof segment, glazing, stair, stair segment, site, unit, zone quantities and system check inspectors. Floor footprint names, level names and room-name suggestions show in the UI language; English plural helpers become ICU plurals and split sentences become whole messages. --- .../collections/collections-popover.tsx | 22 +- .../ui/panels/floor-foundation-panel.tsx | 139 +++++-- .../ui/panels/floor-opening-panel.tsx | 72 ++-- .../ui/panels/mobile-panel-sheet.tsx | 4 +- .../ui/panels/mobile-selection-bar.tsx | 14 +- .../ui/panels/multi-height-mode.tsx | 15 +- .../ui/panels/multi-selection-panel.tsx | 121 ++++-- .../src/components/ui/panels/node-display.ts | 56 +-- .../components/ui/panels/panel-manager.tsx | 8 +- .../components/ui/panels/panel-wrapper.tsx | 15 +- .../components/ui/panels/reference-panel.tsx | 86 +++-- .../ui/panels/room-construction-rows.tsx | 228 +++++++---- .../ui/panels/room-openings-field.tsx | 23 +- .../src/components/ui/panels/room-panel.tsx | 159 +++++--- .../src/components/ui/panels/shape-choice.tsx | 8 +- .../components/ui/panels/wall-region-list.tsx | 9 +- .../panels/site-panel/slab-tree-node.tsx | 8 +- .../editor/src/i18n/floor-footprint-name.ts | 29 ++ packages/editor/src/i18n/message-slot.tsx | 25 ++ packages/editor/src/index.tsx | 1 + .../editor/src/lib/floor-footprints.test.ts | 3 +- .../src/lib/floor-foundation-support.test.ts | 10 +- packages/editor/src/lib/room-built-on.test.ts | 38 +- packages/editor/src/lib/room-built-on.ts | 22 +- .../editor/src/lib/room-name-catalog.test.ts | 8 + packages/editor/src/lib/room-name-messages.ts | 101 +++++ packages/nodes/src/ceiling/panel.tsx | 118 ++++-- packages/nodes/src/door/panel.tsx | 293 +++++++++----- packages/nodes/src/item/panel.tsx | 71 +++- packages/nodes/src/roof-segment/panel.tsx | 188 ++++++--- packages/nodes/src/roof/barrel-panel.tsx | 15 +- .../nodes/src/roof/glazing-panel-editor.tsx | 82 +++- packages/nodes/src/roof/glazing-panel.tsx | 126 ++++-- packages/nodes/src/roof/panel.tsx | 191 ++++++--- .../nodes/src/shared/system-check-panel.tsx | 144 +++++-- packages/nodes/src/site/panel.tsx | 175 ++++++--- packages/nodes/src/slab/panel.tsx | 130 +++++-- packages/nodes/src/stair-segment/panel.tsx | 135 +++++-- packages/nodes/src/stair/panel.tsx | 339 +++++++++++----- packages/nodes/src/unit/unit-panel.tsx | 81 ++-- .../nodes/src/wall/curtain-wall-panel.tsx | 362 ++++++++++++++---- packages/nodes/src/wall/panel.tsx | 298 +++++++++----- packages/nodes/src/window/panel.tsx | 228 +++++++---- packages/nodes/src/zone/quantities-panel.tsx | 52 ++- 44 files changed, 3073 insertions(+), 1179 deletions(-) create mode 100644 packages/editor/src/i18n/floor-footprint-name.ts create mode 100644 packages/editor/src/i18n/message-slot.tsx create mode 100644 packages/editor/src/lib/room-name-messages.ts diff --git a/packages/editor/src/components/ui/panels/collections/collections-popover.tsx b/packages/editor/src/components/ui/panels/collections/collections-popover.tsx index b8d7fa48c3..aeb12c3b31 100644 --- a/packages/editor/src/components/ui/panels/collections/collections-popover.tsx +++ b/packages/editor/src/components/ui/panels/collections/collections-popover.tsx @@ -1,7 +1,7 @@ 'use client' import type { AnyNodeId, CollectionId } from '@pascal-app/core' -import { useScene } from '@pascal-app/core' +import { useScene, usePascalI18n } from '@pascal-app/core' import { Check, ChevronDown, @@ -36,6 +36,7 @@ interface CollectionsPopoverProps { } export function CollectionsPopover({ nodeIds, children }: CollectionsPopoverProps) { + const i18n = usePascalI18n() const collections = useScene((s) => s.collections) const nodes = useScene((s) => s.nodes) const createCollection = useScene((s) => s.createCollection) @@ -102,7 +103,7 @@ export function CollectionsPopover({ nodeIds, children }: CollectionsPopoverProp
- Collections + {i18n._({ id: 'editor.panels.collections.collectionsPopover.collections', message: 'Collections' })}
@@ -132,7 +133,7 @@ export function CollectionsPopover({ nodeIds, children }: CollectionsPopoverProp setCreateName('') } }} - placeholder="Collection name…" + placeholder={i18n._({ id: 'editor.panels.collections.collectionsPopover.collectionName', message: 'Collection name…' })} value={createName} /> @@ -314,14 +314,14 @@ export function CollectionsPopover({ nodeIds, children }: CollectionsPopoverProp }} > - Rename + {i18n._({ id: 'editor.panels.collections.collectionsPopover.rename', message: 'Rename' })} setDeletingId(collection.id)} variant="destructive" > - Delete + {i18n._({ id: 'editor.panels.collections.collectionsPopover.delete', message: 'Delete' })} diff --git a/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx b/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx index 9ad351a7e7..53acb636c9 100644 --- a/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx +++ b/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx @@ -4,19 +4,22 @@ import { type AnyNode, type AnyNodeId, type FloorFoundationPatch, - floorFootprintName, floorFootprintSupportClass, upperFloorHeightControl, - getLevelDisplayName, getLevelElevations, getStoredLevelHeight, type LevelNode, MIN_GROUND_FLOOR_THICKNESS, MIN_SLAB_THICKNESS, + type PascalI18n, type SlabNode, + useLocale, + usePascalI18n, useScene, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' +import { localizedFloorFootprintName } from '../../../i18n/floor-footprint-name' +import { localizedLevelName } from '../../../i18n/level-name' import { useRef, useState } from 'react' import { applyFloorFoundation, @@ -78,6 +81,7 @@ export function FloorSection({ thickness: number thicknessLabel: string }) { + const i18n = usePascalI18n() const base = 100 const foundation = !supported && raised ? Math.min(40, 14 + foundationHeight * 30) : 0 const band = Math.max(7, Math.min(16, thickness * 60)) @@ -98,32 +102,67 @@ export function FloorSection({ const left = 64 const right = 164 const labels: { y: number; text: string; key: string }[] = [ - { key: 'top', y: bandTop - 9, text: 'Floor top' }, + { + key: 'top', + y: bandTop - 9, + text: i18n._({ id: 'editor.panels.floorFoundationPanel.section.floorTop', message: 'Floor top' }), + }, { key: 'plate', y: bandTop + band / 2, - text: supported ? `Floor plate · ${thicknessLabel}` : `Slab · ${thicknessLabel}`, + text: supported + ? i18n._({ + id: 'editor.panels.floorFoundationPanel.section.floorPlate', + message: 'Floor plate · {thickness}', + values: { thickness: thicknessLabel }, + }) + : i18n._({ + id: 'editor.panels.floorFoundationPanel.section.slab', + message: 'Slab · {thickness}', + values: { thickness: thicknessLabel }, + }), }, ...(foundation ? [ { key: 'foundation', y: bandBottom + foundation / 2, - text: foundationLabel ? `Foundation · ${foundationLabel}` : 'Foundation', + text: foundationLabel + ? i18n._({ + id: 'editor.panels.floorFoundationPanel.section.foundationKind', + message: 'Foundation · {foundation}', + values: { foundation: foundationLabel }, + }) + : i18n._({ id: 'editor.panels.floorFoundationPanel.section.foundation', message: 'Foundation' }), }, ] : []), - { key: 'base', y: base + 9, text: supported ? 'Walls below' : 'Ground' }, + { + key: 'base', + y: base + 9, + text: supported + ? i18n._({ id: 'editor.panels.floorFoundationPanel.section.wallsBelow', message: 'Walls below' }) + : i18n._({ id: 'editor.panels.floorFoundationPanel.section.ground', message: 'Ground' }), + }, ] return (
- Not to scale + {i18n._({ id: 'editor.panels.floorFoundationPanel.notToScale', message: 'Not to scale' })}
) @@ -271,15 +310,29 @@ type Notice = { together: { ids: string[]; patch: FloorFoundationPatch; lower: boolean } | null } -export function moveTogetherLabel(count: number, lower: boolean) { - const verb = lower ? 'Lower' : 'Raise' - return count === 2 ? `${verb} both` : `${verb} all ${count}` +export function moveTogetherLabel(count: number, lower: boolean, i18n: PascalI18n) { + const values = { count } + return lower + ? i18n._({ + id: 'editor.panels.floorFoundationPanel.lowerTogether', + message: '{count, plural, =2 {Lower both} other {Lower all #}}', + values, + }) + : i18n._({ + id: 'editor.panels.floorFoundationPanel.raiseTogether', + message: '{count, plural, =2 {Raise both} other {Raise all #}}', + values, + }) } /** "Floor plate · Ground floor", upstairs "Floor plate · Floor 1 · rests on Ground floor". */ -export function floorPlateKicker(nodes: Record, plate: SlabNode): string { +export function floorPlateKicker( + nodes: Record, + plate: SlabNode, + i18n: PascalI18n, + locale: string, +): string { const level = plate.parentId ? nodes[plate.parentId] : undefined - const levelName = level?.type === 'level' ? ` · ${getLevelDisplayName(level)}` : '' // A supported floor rests on the storey right below it. let below: LevelNode | null = null if (level?.type === 'level' && floorFootprintSupportClass(nodes, plate) === 'supported') @@ -291,8 +344,20 @@ export function floorPlateKicker(nodes: Record, plate: SlabNode (!below || node.level > below.level) ) below = node - const restsOn = below ? ` · rests on ${getLevelDisplayName(below)}` : '' - return `Floor plate${levelName}${restsOn}` + if (level?.type !== 'level') + return i18n._({ id: 'editor.panels.floorFoundationPanel.kicker', message: 'Floor plate' }) + const levelName = localizedLevelName(level, i18n, locale) + return below + ? i18n._({ + id: 'editor.panels.floorFoundationPanel.kickerRestsOn', + message: 'Floor plate · {level} · rests on {below}', + values: { level: levelName, below: localizedLevelName(below, i18n, locale) }, + }) + : i18n._({ + id: 'editor.panels.floorFoundationPanel.kickerLevel', + message: 'Floor plate · {level}', + values: { level: levelName }, + }) } /** @@ -311,7 +376,6 @@ export function floorFoundationModel(nodes: Record, plate: Slab : 0 return { upper, - kicker: floorPlateKicker(nodes, plate), preset: upper ? ('ground' as const) : footprintPreset(nodes, plate), /** Upstairs: the floor top (level-local). On the ground: the foundation height. */ height, @@ -332,6 +396,8 @@ export function floorFoundationModel(nodes: Record, plate: Slab * the building live and lands as one undo step. */ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClose: () => void }) { + const i18n = usePascalI18n() + const locale = useLocale() const nodes = useScene((state) => state.nodes) const unit = useViewer((s) => s.unit) const metricNotation = useViewer((s) => s.metricNotation) @@ -341,7 +407,8 @@ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClos const plate = nodes[node.id as AnyNodeId] if (plate?.type !== 'slab' || plate.plateRole !== 'base') return null const length = (meters: number) => formatLinearMeasurement(meters, unit, metricNotation) - const { upper, kicker, preset, height, floorTop, minHeight, minThickness, underFloor, thickFloor } = + const kicker = floorPlateKicker(nodes, plate, i18n, locale) + const { upper, preset, height, floorTop, minHeight, minThickness, underFloor, thickFloor } = floorFoundationModel(nodes, plate) const level = plate.parentId ? nodes[plate.parentId as AnyNodeId] : undefined const maxHeight = level?.type === 'level' ? getStoredLevelHeight(level) - 0.5 : 3 @@ -389,7 +456,7 @@ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClos icon="/icons/floor.webp" kicker={kicker} onClose={onClose} - title={floorFootprintName(nodes, plate)} + title={localizedFloorFootprintName(nodes, plate, i18n)} >

- {upper ? 'Floor plate' : 'Slab'} + {upper ? i18n._({ id: 'editor.panels.floorFoundationPanel.floorPlate', message: 'Floor plate' }) : i18n._({ id: 'editor.panels.floorFoundationPanel.slab', message: 'Slab' })}

{upper ? ( -
+
previewHeight(underside + next)} @@ -426,10 +493,10 @@ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClos />
) : ( -
+
{ @@ -454,13 +521,13 @@ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClos )} {upper && (

- Floor top +{length(floorTop)} + {i18n._({ id: 'editor.panels.floorFoundationPanel.floorTop', message: 'Floor top +' })}{length(floorTop)}

)} {underFloor && (
-

Under the floor

+

{i18n._({ id: 'editor.panels.floorFoundationPanel.underTheFloor', message: 'Under the floor' })}

{ if (next === preset) return @@ -481,17 +548,17 @@ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClos report(applyFloorFoundation(plate.id, patch), patch) }} options={[ - { label: 'On the ground', value: 'ground' }, - { label: 'Raised on a foundation', value: 'raised' }, + { label: i18n._({ id: 'editor.panels.floorFoundationPanel.onTheGround', message: 'On the ground' }), value: 'ground' }, + { label: i18n._({ id: 'editor.panels.floorFoundationPanel.raisedOnAFoundation', message: 'Raised on a foundation' }), value: 'raised' }, ]} value={preset} /> {preset === 'raised' && ( <> -
+
)}

- Floor top {length(floorTop)} + {i18n._({ id: 'editor.panels.floorFoundationPanel.floorTop2', message: 'Floor top' })}{' '}{length(floorTop)}

)} @@ -540,7 +607,7 @@ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClos type="button" variant="outline" > - {moveTogetherLabel(notice.together.ids.length, notice.together.lower)} + {moveTogetherLabel(notice.together.ids.length, notice.together.lower, i18n)} )}
diff --git a/packages/editor/src/components/ui/panels/floor-opening-panel.tsx b/packages/editor/src/components/ui/panels/floor-opening-panel.tsx index cef08a9534..b85eb2acce 100644 --- a/packages/editor/src/components/ui/panels/floor-opening-panel.tsx +++ b/packages/editor/src/components/ui/panels/floor-opening-panel.tsx @@ -5,8 +5,8 @@ import { adjacentLevelId, area, floorOpeningHints, - getLevelDisplayName, - useScene, + useScene, usePascalI18n, + useLocale, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { @@ -18,6 +18,8 @@ import { formatAreaLabel } from '../../../lib/measurements' import { Button } from '../primitives/button' import { Switch } from '../primitives/switch' import { PanelWrapper } from './panel-wrapper' +import { localizedLevelName } from '../../../i18n/level-name' +import { nodeLabel } from '../../../i18n/node-messages' /** * A floor (or ceiling) opening: where it is, what it cuts, and the switch for @@ -27,6 +29,8 @@ import { PanelWrapper } from './panel-wrapper' * handles in the scene. Done and Delete return to the room. */ export function FloorOpeningPanel({ openingId }: { openingId: string }) { + const i18n = usePascalI18n() + const locale = useLocale() const nodes = useScene((state) => state.nodes) const unit = useViewer((s) => s.unit) const readOnly = useScene((state) => state.readOnly) @@ -35,7 +39,7 @@ export function FloorOpeningPanel({ openingId }: { openingId: string }) { const onCeiling = opening.drawnOn === 'ceiling' const zoneId = openingRoom(nodes, opening) const zone = zoneId ? nodes[zoneId as AnyNodeId] : undefined - const roomName = zone?.type === 'zone' ? zone.name?.trim() || 'Room' : null + const roomName = zone?.type === 'zone' ? zone.name?.trim() || nodeLabel('zone', 'Zone', i18n) : null const level = opening.parentId ? nodes[opening.parentId as AnyNodeId] : undefined const adjacentId = opening.parentId ? adjacentLevelId(nodes, opening.parentId, onCeiling ? 1 : -1) @@ -47,19 +51,35 @@ export function FloorOpeningPanel({ openingId }: { openingId: string }) { !!opening.ownerId && nodes[opening.ownerId as AnyNodeId]?.type === opening.source const hints = floorOpeningHints(nodes, opening) - const title = opening.source === 'stair' - ? 'Stair opening' - : opening.source === 'elevator' - ? 'Elevator opening' - : onCeiling ? 'Ceiling opening' : 'Floor opening' - const kicker = [ - 'Opening', - roomName ? `in ${roomName}` : null, - level?.type === 'level' ? getLevelDisplayName(level) : null, - ] - .filter(Boolean) - .join(' · ') - const switchLabel = onCeiling ? 'Also cut the floor above' : 'Also cut the ceiling below' + const title = i18n._({ + id: 'editor.panels.floorOpeningPanel.title', + message: + '{source, select, stair {Stair opening} elevator {Elevator opening} ceiling {Ceiling opening} other {Floor opening}}', + values: { source: opening.source === 'stair' || opening.source === 'elevator' ? opening.source : onCeiling ? 'ceiling' : 'floor' }, + }) + const levelName = level?.type === 'level' ? localizedLevelName(level, i18n, locale) : null + const kicker = roomName + ? levelName + ? i18n._({ + id: 'editor.panels.floorOpeningPanel.kickerRoomLevel', + message: 'Opening · in {room} · {level}', + values: { room: roomName, level: levelName }, + }) + : i18n._({ + id: 'editor.panels.floorOpeningPanel.kickerRoom', + message: 'Opening · in {room}', + values: { room: roomName }, + }) + : levelName + ? i18n._({ + id: 'editor.panels.floorOpeningPanel.kickerLevel', + message: 'Opening · {level}', + values: { level: levelName }, + }) + : i18n._({ id: 'editor.panels.floorOpeningPanel.kicker', message: 'Opening' }) + const switchLabel = onCeiling + ? i18n._({ id: 'editor.panels.floorOpeningPanel.alsoCutTheFloorAbove', message: 'Also cut the floor above' }) + : i18n._({ id: 'editor.panels.floorOpeningPanel.alsoCutTheCeilingBelow', message: 'Also cut the ceiling below' }) const setAdjacent = (next: boolean) => useScene.getState().updateNode(opening.id, { cutsAdjacent: next }) @@ -73,7 +93,7 @@ export function FloorOpeningPanel({ openingId }: { openingId: string }) {

{formatAreaLabel(area([{ outer: opening.polygon, holes: [] }]), unit, 2)} - {owned ? ' · Shape follows its owner.' : ' · Drag its corners to change the shape.'} + {owned ? i18n._({ id: 'editor.panels.floorOpeningPanel.shapeFollowsItsOwner', message: ' · Shape follows its owner.' }) : i18n._({ id: 'editor.panels.floorOpeningPanel.dragItsCornersToChangeThe', message: ' · Drag its corners to change the shape.' })}

{owned && ( )} {hosted ? (

- A hatch in the mezzanine: it cuts only the mezzanine’s floor. + {i18n._({ id: 'editor.panels.floorOpeningPanel.aHatchInTheMezzanineIt', message: 'A hatch in the mezzanine: it cuts only the mezzanine’s floor.' })}

) : owned ? null : (
diff --git a/packages/editor/src/components/ui/panels/mobile-panel-sheet.tsx b/packages/editor/src/components/ui/panels/mobile-panel-sheet.tsx index 92c086096b..16434304d1 100644 --- a/packages/editor/src/components/ui/panels/mobile-panel-sheet.tsx +++ b/packages/editor/src/components/ui/panels/mobile-panel-sheet.tsx @@ -1,5 +1,6 @@ 'use client' +import { usePascalI18n } from '@pascal-app/core' import { X } from 'lucide-react' import { AnimatePresence, motion } from 'motion/react' import { type ReactNode, useEffect, useState } from 'react' @@ -19,6 +20,7 @@ const HEIGHT_VH = 50 const DRAG_CLOSE_THRESHOLD_PX = 120 export function MobilePanelSheet({ open, onClose, icon, title, children }: MobilePanelSheetProps) { + const i18n = usePascalI18n() const [mounted, setMounted] = useState(false) const setMobilePanelSheetHeight = useEditor((s) => s.setMobilePanelSheetHeight) @@ -88,7 +90,7 @@ export function MobilePanelSheet({ open, onClose, icon, title, children }: Mobil
)}
diff --git a/packages/editor/src/components/ui/panels/node-display.ts b/packages/editor/src/components/ui/panels/node-display.ts index e5b1227c10..1a07c4967c 100644 --- a/packages/editor/src/components/ui/panels/node-display.ts +++ b/packages/editor/src/components/ui/panels/node-display.ts @@ -1,36 +1,41 @@ -import { type AnyNode, scriptImages } from '@pascal-app/core' +import { type AnyNode, type MessageDescriptor, type PascalI18n, scriptImages } from '@pascal-app/core' export type NodeDisplay = { icon: string label: string } -const TYPE_DEFAULTS: Record = { - item: { icon: '/icons/item.webp', label: 'Item' }, - wall: { icon: '/icons/wall.webp', label: 'Wall' }, - door: { icon: '/icons/door.webp', label: 'Door' }, - window: { icon: '/icons/window.webp', label: 'Window' }, - slab: { icon: '/icons/floor.webp', label: 'Slab' }, - ceiling: { icon: '/icons/ceiling.webp', label: 'Ceiling' }, - column: { icon: '/icons/column.webp', label: 'Column' }, - elevator: { icon: '/icons/elevator.webp', label: 'Elevator' }, - fence: { icon: '/icons/fence.webp', label: 'Fence' }, - roof: { icon: '/icons/roof.webp', label: 'Roof' }, - 'roof-segment': { icon: '/icons/roof.webp', label: 'Roof segment' }, - stair: { icon: '/icons/stairs.webp', label: 'Stair' }, - 'stair-segment': { icon: '/icons/stairs.webp', label: 'Stair segment' }, - scan: { icon: '/icons/mesh.webp', label: '3D Scan' }, - guide: { icon: '/icons/floorplan.webp', label: 'Guide image' }, - zone: { icon: '/icons/zone.webp', label: 'Zone' }, +const TYPE_DEFAULTS: Record = { + item: { icon: '/icons/item.webp', label: /* i18n */ { id: 'editor.nodeDisplay.item', message: 'Item' } }, + wall: { icon: '/icons/wall.webp', label: /* i18n */ { id: 'editor.nodeDisplay.wall', message: 'Wall' } }, + door: { icon: '/icons/door.webp', label: /* i18n */ { id: 'editor.nodeDisplay.door', message: 'Door' } }, + window: { icon: '/icons/window.webp', label: /* i18n */ { id: 'editor.nodeDisplay.window', message: 'Window' } }, + slab: { icon: '/icons/floor.webp', label: /* i18n */ { id: 'editor.nodeDisplay.slab', message: 'Slab' } }, + ceiling: { icon: '/icons/ceiling.webp', label: /* i18n */ { id: 'editor.nodeDisplay.ceiling', message: 'Ceiling' } }, + column: { icon: '/icons/column.webp', label: /* i18n */ { id: 'editor.nodeDisplay.column', message: 'Column' } }, + elevator: { icon: '/icons/elevator.webp', label: /* i18n */ { id: 'editor.nodeDisplay.elevator', message: 'Elevator' } }, + fence: { icon: '/icons/fence.webp', label: /* i18n */ { id: 'editor.nodeDisplay.fence', message: 'Fence' } }, + roof: { icon: '/icons/roof.webp', label: /* i18n */ { id: 'editor.nodeDisplay.roof', message: 'Roof' } }, + 'roof-segment': { icon: '/icons/roof.webp', label: /* i18n */ { id: 'editor.nodeDisplay.roofSegment', message: 'Roof segment' } }, + stair: { icon: '/icons/stairs.webp', label: /* i18n */ { id: 'editor.nodeDisplay.stair', message: 'Stair' } }, + 'stair-segment': { icon: '/icons/stairs.webp', label: /* i18n */ { id: 'editor.nodeDisplay.stairSegment', message: 'Stair segment' } }, + scan: { icon: '/icons/mesh.webp', label: /* i18n */ { id: 'editor.nodeDisplay.scan', message: '3D Scan' } }, + guide: { icon: '/icons/floorplan.webp', label: /* i18n */ { id: 'editor.nodeDisplay.guide', message: 'Guide image' } }, + zone: { icon: '/icons/zone.webp', label: /* i18n */ { id: 'editor.nodeDisplay.zone', message: 'Zone' } }, } -export function getTypeDisplay(type: string): NodeDisplay { - return TYPE_DEFAULTS[type] ?? { icon: '/icons/select.webp', label: type } +export function getTypeDisplay(type: string, i18n: PascalI18n): NodeDisplay { + const known = TYPE_DEFAULTS[type] + return known ? { icon: known.icon, label: i18n._(known.label) } : { icon: '/icons/select.webp', label: type } } -export function getNodeDisplay(node: AnyNode | null | undefined): NodeDisplay { - if (!node) return { icon: '/icons/select.webp', label: 'Selection' } - const fallback = TYPE_DEFAULTS[node.type] ?? { icon: '/icons/select.webp', label: node.type } +export function getNodeDisplay(node: AnyNode | null | undefined, i18n: PascalI18n): NodeDisplay { + if (!node) + return { + icon: '/icons/select.webp', + label: i18n._({ id: 'editor.nodeDisplay.selection', message: 'Selection' }), + } + const fallback = getTypeDisplay(node.type, i18n) const scripted = scriptImages(node)?.thumbnail // Item nodes carry an asset with its own thumbnail/name if (node.type === 'item') { @@ -40,7 +45,10 @@ export function getNodeDisplay(node: AnyNode | null | undefined): NodeDisplay { } } if (node.type === 'zone' && node.spaceRole === 'room') { - return { icon: '/icons/kitchen.webp', label: node.name || 'Room' } + return { + icon: '/icons/kitchen.webp', + label: node.name || i18n._({ id: 'editor.nodeDisplay.room', message: 'Room' }), + } } return { icon: scripted ?? fallback.icon, diff --git a/packages/editor/src/components/ui/panels/panel-manager.tsx b/packages/editor/src/components/ui/panels/panel-manager.tsx index b3074393b6..fcb5d4caea 100644 --- a/packages/editor/src/components/ui/panels/panel-manager.tsx +++ b/packages/editor/src/components/ui/panels/panel-manager.tsx @@ -19,7 +19,7 @@ import { type StairSegmentNode, useScene, type WallNode, - type WindowNode, + type WindowNode, usePascalI18n, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { useCallback, useEffect, useMemo, useState } from 'react' @@ -107,6 +107,7 @@ function MobilePanelLayer({ panel: React.ReactNode isReference: boolean }) { + const i18n = usePascalI18n() const setSelection = useViewer((s) => s.setSelection) const setSelectedReferenceId = useEditor((s) => s.setSelectedReferenceId) const setMovingNode = useEditor((s) => s.setMovingNode) @@ -146,7 +147,7 @@ function MobilePanelLayer({ if (!(node || isReference)) return null - const display = getNodeDisplay(node) + const display = getNodeDisplay(node, i18n) return ( <> @@ -180,8 +181,9 @@ function MobileMultiPanelLayer({ panel: React.ReactNode type: string | null }) { + const i18n = usePascalI18n() const [isSheetOpen, setIsSheetOpen] = useState(false) - const display = type ? getTypeDisplay(type) : { icon: '/icons/select.webp', label: 'Selection' } + const display = type ? getTypeDisplay(type, i18n) : { icon: '/icons/select.webp', label: i18n._({ id: 'editor.panels.panelManager.selection', message: 'Selection' }) } const title = breakdown || display.label useEffect(() => { diff --git a/packages/editor/src/components/ui/panels/panel-wrapper.tsx b/packages/editor/src/components/ui/panels/panel-wrapper.tsx index 316ebb2c91..4f2eaba75b 100644 --- a/packages/editor/src/components/ui/panels/panel-wrapper.tsx +++ b/packages/editor/src/components/ui/panels/panel-wrapper.tsx @@ -8,7 +8,7 @@ import { type IconRef, type InspectorExtension, useRegistryVersion, - useScene, + useScene, usePascalI18n, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { ChevronDown, ChevronLeft, GripHorizontal, RotateCcw, X } from 'lucide-react' @@ -119,6 +119,7 @@ export function PanelWrapper({ className, width = 320, // default width }: PanelWrapperProps) { + const i18n = usePascalI18n() const isMobile = useIsMobile() const inStack = useInRightStack() const contextFooter = useContext(InspectorFooterContext) @@ -404,7 +405,7 @@ export function PanelWrapper({ const isActive = !collapsed && activeExtensionId === extension.id return (
) @@ -279,6 +307,7 @@ export function DrawnFloorRow({ zoneId }: { zoneId: string }) { * right here. */ export function BuiltOnField({ zoneId }: { zoneId: string }) { + const i18n = usePascalI18n() const nodes = useScene((scene) => scene.nodes) const model = useMemo(() => roomBuiltOn(nodes, zoneId), [nodes, zoneId]) const [error, setError] = useState(null) @@ -289,16 +318,16 @@ export function BuiltOnField({ zoneId }: { zoneId: string }) { } return (
- + @@ -311,13 +340,13 @@ export function BuiltOnField({ zoneId }: { zoneId: string }) { if (choice.plateId !== model.current.plateId) choose(choice.key) }} > - {choice.name} + {floorChoiceName(nodes, choice, i18n)} {choice.plateId === model.current.plateId && } ))} choose('new')}> - + New floor + {i18n._({ id: 'editor.panels.roomConstructionRows.newFloor', message: '+ New floor' })} @@ -356,6 +385,7 @@ export function roomInsideHeight( * rather than naming the footprint next to it. */ function SitsOn({ zoneId, noFloor }: { zoneId: string; noFloor: boolean }) { + const i18n = usePascalI18n() const unit = useViewer((s) => s.unit) const metricNotation = useViewer((s) => s.metricNotation) const summary = useScene( @@ -365,30 +395,33 @@ function SitsOn({ zoneId, noFloor }: { zoneId: string; noFloor: boolean }) { if (plate.plateRole !== 'base') return { id: plate.id as string, - name: plate.name?.trim() || 'Slab', + name: plate.name?.trim() || nodeLabel('slab', 'Slab', i18n), drawn: true, lift: 0, supported: false, } return { id: plate.id as string, - name: floorFootprintName(scene.nodes, plate), + name: localizedFloorFootprintName(scene.nodes, plate, i18n), drawn: false, ...footprintStanding(scene.nodes, plate), } }), ) + const lift = formatLinearMeasurement(Math.abs(summary.lift), unit, metricNotation) const preset = summary.drawn - ? 'Drawn slab' + ? i18n._({ id: 'editor.panels.roomConstructionRows.drawnSlab', message: 'Drawn slab' }) : Math.abs(summary.lift) > 0.005 - ? `${summary.lift > 0 ? 'Raised' : 'Lowered'} ${formatLinearMeasurement(Math.abs(summary.lift), unit, metricNotation)}` + ? summary.lift > 0 + ? i18n._({ id: 'editor.panels.roomConstructionRows.raised', message: 'Raised {lift}', values: { lift } }) + : i18n._({ id: 'editor.panels.roomConstructionRows.lowered', message: 'Lowered {lift}', values: { lift } }) : summary.supported - ? 'On the walls below' - : 'On the ground' + ? i18n._({ id: 'editor.panels.roomConstructionRows.onTheWallsBelow', message: 'On the walls below' }) + : i18n._({ id: 'editor.panels.roomConstructionRows.onTheGround', message: 'On the ground' }) if (noFloor) return ( - No floor + {i18n._({ id: 'editor.panels.roomConstructionRows.noFloor', message: 'No floor' })} ) if (!summary.id) return null @@ -400,7 +433,16 @@ function SitsOn({ zoneId, noFloor }: { zoneId: string; noFloor: boolean }) { type="button" > - Sits on: {summary.name} · {preset} + {messageWithSlot( + i18n, + /* i18n */ { + id: 'editor.panels.roomConstructionRows.sitsOnPreset', + message: 'Sits on: {name} · {preset}', + values: { preset }, + }, + 'name', + {summary.name}, + )} @@ -414,6 +456,7 @@ function SitsOn({ zoneId, noFloor }: { zoneId: string; noFloor: boolean }) { * no footprint height or foundation, and says so. */ export function RoomFloorConstructionField({ zoneId }: { zoneId: string }) { + const i18n = usePascalI18n() const owner = useScene( useShallow((scene) => { // Several drawn slabs show in the room: no one thickness to edit here. @@ -440,7 +483,7 @@ export function RoomFloorConstructionField({ zoneId }: { zoneId: string }) {
{owner.drawn && (

- A drawn slab: set its thickness and finishes here. It has no footprint height or - foundation. + {i18n._({ id: 'editor.panels.roomConstructionRows.aDrawnSlabSetItsThickness', message: 'A drawn slab: set its thickness and finishes here. It has no footprint height or foundation.' })}

)} {error && ( @@ -505,6 +547,8 @@ function sharingRoomNames( * with its switch, and its settings a chevron away. Then Add mezzanine. */ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { + const i18n = usePascalI18n() + const locale = useLocale() const zoneId = room.zoneId const state = useScene((scene) => roomConstructionState(scene.nodes, zoneId)) const nodes = useScene((scene) => scene.nodes) @@ -514,7 +558,10 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { const [message, setMessage] = useState<{ text: string; conflict: boolean } | null>(null) if (!state) return null const length = (meters: number) => formatLinearMeasurement(meters, unit, metricNotation) - const report = (result: RoomConstructionResult, unchanged = 'Nothing to change.') => + const report = ( + result: RoomConstructionResult, + unchanged = i18n._({ id: 'editor.panels.roomConstructionRows.nothingToChange', message: 'Nothing to change.' }), + ) => setMessage( result.status === 'conflict' ? { text: result.message, conflict: true } @@ -525,14 +572,14 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { const toggle = (part: RoomConstructionPart) => () => setExpanded((current) => (current === part ? null : part)) const drawnFloor = roomDrawnFloor(nodes, zoneId) - const partSwitch = (part: RoomConstructionPart, label: string) => { + const partSwitch = (part: RoomConstructionPart) => { const { state: presence, actions } = state[part] if (part === 'walls') { const walls = wallsSwitch(state) return ( span]:translate-x-2!', @@ -561,7 +608,7 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { data-drawn-floor-switch > {!actions.add && ( - {DRAWN_FLOOR_SWITCH_HINT} + {i18n._({ + id: 'editor.panels.roomConstructionRows.drawnFloorSwitchHint', + message: 'This floor is a drawn slab: select it to edit or delete it.', + })} )} @@ -580,7 +630,11 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { const on = presence !== 'absent' return ( @@ -595,17 +649,40 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { const builtOn = roomBuiltOn(nodes, zoneId) const floorMeta = state.floor.state === 'partial' - ? `Partial · ${Math.round(state.floor.coverage * 100)}% covered` + ? i18n._({ + id: 'editor.panels.roomConstructionRows.partialCovered', + message: 'Partial · {coverage, number, percent} covered', + values: { coverage: state.floor.coverage }, + }) : drawnSlab?.type === 'slab' - ? `Drawn slab at ${length(drawnSlab.elevation)}` + ? i18n._({ + id: 'editor.panels.roomConstructionRows.drawnSlabAt', + message: 'Drawn slab at {height}', + values: { height: length(drawnSlab.elevation) }, + }) : builtOn && builtOn.current.key !== null ? separateFloorSummary( - { ...builtOn, offset: separateFloorOffset(nodes, zoneId) }, + { + current: { name: floorChoiceName(nodes, builtOn.current, i18n) }, + shared: builtOn.shared && { name: floorChoiceName(nodes, builtOn.shared, i18n) }, + offset: separateFloorOffset(nodes, zoneId), + }, length, + i18n, ) : Math.abs(floorElevation) < 0.005 - ? 'At floor level' - : `${length(Math.abs(floorElevation))} ${floorElevation > 0 ? 'up' : 'down'}` + ? i18n._({ id: 'editor.panels.roomConstructionRows.atFloorLevel', message: 'At floor level' }) + : floorElevation > 0 + ? i18n._({ + id: 'editor.panels.roomConstructionRows.floorUp', + message: '{distance} up', + values: { distance: length(Math.abs(floorElevation)) }, + }) + : i18n._({ + id: 'editor.panels.roomConstructionRows.floorDown', + message: '{distance} down', + values: { distance: length(Math.abs(floorElevation)) }, + }) // A room on its own floor moves within its plate's range (on the ground, its foundation's). const ownBounds = ownFloorElevationBounds(nodes, zoneId) const floorBase = ownBounds ? roomFloorBase(nodes, zoneId) : 0 @@ -619,27 +696,40 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { const shared = sharingRoomNames(nodes, zoneId, state.walls.sharedWallIds) const wallsMeta = state.walls.state === 'partial' - ? `Partial · ${count(wallIds.length, 'wall')}, ${count(openSides, 'open side')}` - : count(wallIds.length, 'wall') + ? i18n._({ + id: 'editor.panels.roomConstructionRows.partialWalls', + message: + 'Partial · {walls, plural, one {# wall} other {# walls}}, {openSides, plural, one {# open side} other {# open sides}}', + values: { walls: wallIds.length, openSides }, + }) + : i18n._({ + id: 'editor.panels.roomConstructionRows.wallCount', + message: '{walls, plural, one {# wall} other {# walls}}', + values: { walls: wallIds.length }, + }) const locked = roomOutsideFacesLocked(nodes, wallIds) const ceilingHeight = state.ceiling.ceilingId ? roomInsideHeight(room, nodes).ceiling : null const ceilingMeta = state.ceiling.state === 'partial' - ? 'Hand-drawn ceiling' + ? i18n._({ id: 'editor.panels.roomConstructionRows.handDrawnCeiling', message: 'Hand-drawn ceiling' }) : ceilingHeight !== null - ? `At ${length(ceilingHeight)}` - : 'Flat, at wall height' + ? i18n._({ + id: 'editor.panels.roomConstructionRows.ceilingAt', + message: 'At {height}', + values: { height: length(ceilingHeight) }, + }) + : i18n._({ id: 'editor.panels.roomConstructionRows.flatAtWallHeight', message: 'Flat, at wall height' }) return (
-

Built with

+

{i18n._({ id: 'editor.panels.roomConstructionRows.builtWith', message: 'Built with' })}

} @@ -656,44 +746,54 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { - + {wallIds.length} {state.walls.state === 'partial' && state.walls.actions.add && ( - + )} {shared.length > 0 && (

- Turning walls off keeps the ones shared with {[...new Set(shared)].join(', ')}. + {i18n._({ + id: 'editor.panels.roomConstructionRows.sharedWallsNote', + message: 'Turning walls off keeps the ones shared with {rooms}.', + values: { rooms: formatList([...new Set(shared)], locale) }, + })}

)} {locked !== null && (
- Keep outside dimensions + {i18n._({ id: 'editor.panels.roomConstructionRows.keepOutsideDimensions', message: 'Keep outside dimensions' })} - Walls thicken inward, so the building's outer size stays the same. + {i18n._({ id: 'editor.panels.roomConstructionRows.wallsThickenInwardSoTheBuilding', message: 'Walls thicken inward, so the building\'s outer size stays the same.' })} report(next ? lockRoomOutsideFaces(zoneId) : unlockRoomOutsideFaces(wallIds)) @@ -703,40 +803,40 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { )} {ceilingHeight !== null && ( - + {length(ceilingHeight)} )} {state.ceiling.ceilingId && ( - + )} {state.ceiling.ceilingId && } {(state.ceiling.actions.useExisting || state.ceiling.actions.replace) && (
- Hand-drawn ceiling + {i18n._({ id: 'editor.panels.roomConstructionRows.handDrawnCeiling', message: 'Hand-drawn ceiling' })} {state.ceiling.actions.useExisting && ( )} {state.ceiling.actions.replace && ( @@ -745,7 +845,7 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { onClick={() => report(replaceRoomCeiling(zoneId))} type="button" > - Replace + {i18n._({ id: 'editor.panels.roomConstructionRows.replace', message: 'Replace' })} )}
@@ -766,7 +866,7 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { startMezzanineDraft(zoneId, shape)} />
diff --git a/packages/editor/src/components/ui/panels/room-openings-field.tsx b/packages/editor/src/components/ui/panels/room-openings-field.tsx index f4bf5a75ab..b5e3b025b2 100644 --- a/packages/editor/src/components/ui/panels/room-openings-field.tsx +++ b/packages/editor/src/components/ui/panels/room-openings-field.tsx @@ -1,6 +1,6 @@ 'use client' -import { area, useScene } from '@pascal-app/core' +import { area, useScene, usePascalI18n } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { useMemo } from 'react' import { @@ -31,6 +31,7 @@ export function RoomOpeningsField({ zoneId: string surface: OpeningSurface }) { + const i18n = usePascalI18n() const nodes = useScene((scene) => scene.nodes) const unit = useViewer((s) => s.unit) const readOnly = useScene((scene) => scene.readOnly) @@ -43,7 +44,7 @@ export function RoomOpeningsField({ startOpeningDraft(zoneId, surface, shape)} /> ) @@ -57,21 +58,21 @@ export function RoomOpeningsField({ if (!editing) return (
- {openings.length ? count(openings.length) : 'No openings'} + {openings.length ? count(openings.length) : i18n._({ id: 'editor.panels.roomOpeningsField.noOpenings', message: 'No openings' })}
) return (
{openings.length === 0 ? ( -

No openings yet. Cut one for a stair void or a hatch.

+

{i18n._({ id: 'editor.panels.roomOpeningsField.noOpeningsYetCutOneFor', message: 'No openings yet. Cut one for a stair void or a hatch.' })}

) : ( openings.map((opening, index) => (
diff --git a/packages/editor/src/components/ui/panels/room-panel.tsx b/packages/editor/src/components/ui/panels/room-panel.tsx index 334c571cd3..4304832c0d 100644 --- a/packages/editor/src/components/ui/panels/room-panel.tsx +++ b/packages/editor/src/components/ui/panels/room-panel.tsx @@ -4,10 +4,11 @@ import { type AnyNode, type AnyNodeId, area, - getLevelDisplayName, runAsSingleSceneHistoryStep, useScene, - type ZoneNode, + type ZoneNode, usePascalI18n, + type PascalI18n, + useLocale, } from '@pascal-app/core' import { setRoomFloorScript } from '@pascal-app/core/agent-operations' import { useViewer } from '@pascal-app/viewer' @@ -54,22 +55,39 @@ import { roomInsideHeight, } from './room-construction-rows' import { type RoomNameOption, roomNameOptions } from './room-name-options' +import { localizedLevelName } from '../../../i18n/level-name' +import { localizedRoomNameSections } from '../../../lib/room-name-messages' /** "Room · Ground floor", "Mezzanine · in Kitchen", "Room · not enclosed". */ export function roomKicker( nodes: Record, zoneId: string, + i18n: PascalI18n, + locale: string, options: { mezzanine?: boolean; open?: boolean } = {}, ): string { const zone = nodes[zoneId] if (options.mezzanine && zone?.type === 'zone') { const host = zone.hostZoneId ? nodes[zone.hostZoneId] : undefined const hostName = host?.type === 'zone' ? host.name?.trim() : '' - return hostName ? `Mezzanine · in ${hostName}` : 'Mezzanine' + return hostName + ? i18n._({ + id: 'editor.panels.roomPanel.kickerMezzanineIn', + message: 'Mezzanine · in {room}', + values: { room: hostName }, + }) + : i18n._({ id: 'editor.panels.roomPanel.mezzanine', message: 'Mezzanine' }) } - if (options.open) return 'Room · not enclosed' + if (options.open) + return i18n._({ id: 'editor.panels.roomPanel.kickerNotEnclosed', message: 'Room · not enclosed' }) const level = zone?.parentId ? nodes[zone.parentId] : undefined - return level?.type === 'level' ? `Room · ${getLevelDisplayName(level)}` : 'Room' + return level?.type === 'level' + ? i18n._({ + id: 'editor.panels.roomPanel.kickerLevel', + message: 'Room · {level}', + values: { level: localizedLevelName(level, i18n, locale) }, + }) + : i18n._({ id: 'editor.panels.roomPanel.room', message: 'Room' }) } export function RoomPanel({ @@ -79,8 +97,15 @@ export function RoomPanel({ room: RoomSelectionRecord onClose?: () => void }) { + const i18n = usePascalI18n() + const locale = useLocale() const nodes = useScene((state) => state.nodes) - const sections = useMemo(() => roomNameSections(nodes, room.zoneId), [nodes, room.zoneId]) + const catalogVersion = i18n.getVersion() + const sections = useMemo( + () => localizedRoomNameSections(roomNameSections(nodes, room.zoneId), i18n), + // biome-ignore lint/correctness/useExhaustiveDependencies: re-translate on a catalog change + [i18n, catalogVersion, nodes, room.zoneId], + ) const name = useScene((state) => state.nodes[room.zoneId as AnyNodeId]?.name ?? '') const visible = useInteractionScope( (state) => resolveOverlayPolicy(state.scope).conflictingControls === 'shown', @@ -89,9 +114,9 @@ export function RoomPanel({ const mezzanine = !!room.mezzanine return ( @@ -125,17 +150,24 @@ export function RoomPanel({ * needs no closed outline — its name, its unit, deleting it. */ export function OpenRoomPanel({ zoneId, onClose }: { zoneId: string; onClose: () => void }) { + const i18n = usePascalI18n() + const locale = useLocale() const nodes = useScene((state) => state.nodes) - const sections = useMemo(() => roomNameSections(nodes, zoneId), [nodes, zoneId]) + const catalogVersion = i18n.getVersion() + const sections = useMemo( + () => localizedRoomNameSections(roomNameSections(nodes, zoneId), i18n), + // biome-ignore lint/correctness/useExhaustiveDependencies: re-translate on a catalog change + [i18n, catalogVersion, nodes, zoneId], + ) const name = useScene((state) => state.nodes[zoneId as AnyNodeId]?.name ?? '') const unit = useViewer((s) => s.unit) const zone = nodes[zoneId as AnyNodeId] if (zone?.type !== 'zone') return null return ( @@ -151,8 +183,7 @@ export function OpenRoomPanel({ zoneId, onClose }: { zoneId: string; onClose: () >

- {formatAreaLabel(area([{ outer: zone.polygon, holes: zone.holes }]), unit, 2)} · Close - its walls to build its floor and ceiling. + {formatAreaLabel(area([{ outer: zone.polygon, holes: zone.holes }]), unit, 2)}{' '}{i18n._({ id: 'editor.panels.roomPanel.closeItsWallsToBuildIts', message: '· Close its walls to build its floor and ceiling.' })}

@@ -170,16 +201,17 @@ export function OpenRoomPanel({ zoneId, onClose }: { zoneId: string; onClose: () /** "Unit: Flat A ›" — which unit the room belongs to; change it, add it to one, or take it out. */ export function RoomUnitRow({ zoneId }: { zoneId: string }) { + const i18n = usePascalI18n() const nodes = useScene((scene) => scene.nodes) const { buildingId, units, current } = useMemo(() => zoneUnits(nodes, zoneId), [nodes, zoneId]) if (!buildingId) return null return (
- Unit + {i18n._({ id: 'editor.panels.roomPanel.unit', message: 'Unit' })} @@ -207,17 +239,17 @@ export function RoomUnitRow({ zoneId }: { zoneId: string }) { className="size-2 shrink-0 rounded-full" style={{ backgroundColor: unit.color }} /> - {unit.name || 'Unit'} + {unit.name || i18n._({ id: 'editor.panels.roomPanel.unit', message: 'Unit' })} {unit.id === current?.id && } ))} {units.length > 0 && } addZoneToNewUnit(zoneId as ZoneNode['id'])}> - New unit + {i18n._({ id: 'editor.panels.roomPanel.newUnit', message: 'New unit' })} {current && ( assignZoneToUnit(zoneId as ZoneNode['id'], null)}> - Remove from {current.name || 'unit'} + {i18n._({ id: 'editor.panels.roomPanel.removeFrom', message: 'Remove from' })}{' '}{current.name || i18n._({ id: 'editor.panels.roomPanel.unit2', message: 'unit' })} )} @@ -231,6 +263,7 @@ export function RoomUnitRow({ zoneId }: { zoneId: string }) { * with its code to read and a way to take it off, back to the floor's own finish. */ function RoomFloorScriptRow({ zoneId }: { zoneId: string }) { + const i18n = usePascalI18n() const sha = useScene((scene) => { const zone = scene.nodes[zoneId as AnyNodeId] return zone?.type === 'zone' ? zone.floor?.script?.script : undefined @@ -238,12 +271,16 @@ function RoomFloorScriptRow({ zoneId }: { zoneId: string }) { const [code, setCode] = useState<{ sha: string; text: string } | null>(null) const [open, setOpen] = useState(false) if (!sha) return null + const unreadable = i18n._({ + id: 'editor.panels.scriptUnreadable', + message: 'The script could not be read.', + }) const toggleCode = () => { setOpen((shown) => !shown) if (code?.sha === sha) return finishScriptCode(sha).then( - (text) => setCode({ sha, text: text ?? 'The script could not be read.' }), - () => setCode({ sha, text: 'The script could not be read.' }), + (text) => setCode({ sha, text: text ?? unreadable }), + () => setCode({ sha, text: unreadable }), ) } const remove = () => { @@ -260,27 +297,27 @@ function RoomFloorScriptRow({ zoneId }: { zoneId: string }) { return (
- Scripted finish + {i18n._({ id: 'editor.panels.roomPanel.scriptedFinish', message: 'Scripted finish' })}
{open && (
-          {code?.sha === sha ? code.text : 'Loading…'}
+          {code?.sha === sha ? code.text : i18n._({ id: 'editor.panels.roomPanel.loading', message: 'Loading…' })}
         
)}
@@ -323,6 +360,7 @@ function ringPerimeter(ring: readonly (readonly [number, number])[]) { /** Area, perimeter and inside height, in the user's units. */ function RoomStats({ room }: { room: RoomSelectionRecord }) { + const i18n = usePascalI18n() const unit = useViewer((s) => s.unit) const metricNotation = useViewer((s) => s.metricNotation) const nodes = useScene((scene) => scene.nodes) @@ -333,10 +371,10 @@ function RoomStats({ room }: { room: RoomSelectionRecord }) { : 0 const { height } = roomInsideHeight(room, nodes) const stats = [ - { label: 'Area', value: formatAreaLabel(room.area, unit, 2) }, - { label: 'Perimeter', value: formatLinearMeasurement(perimeter, unit, metricNotation) }, + { label: i18n._({ id: 'editor.panels.roomPanel.area', message: 'Area' }), value: formatAreaLabel(room.area, unit, 2) }, + { label: i18n._({ id: 'editor.panels.roomPanel.perimeter', message: 'Perimeter' }), value: formatLinearMeasurement(perimeter, unit, metricNotation) }, { - label: 'Height', + label: i18n._({ id: 'editor.panels.roomPanel.height', message: 'Height' }), value: height === null ? '—' : formatLinearMeasurement(height, unit, metricNotation), }, ] @@ -363,6 +401,7 @@ function RoomStats({ room }: { room: RoomSelectionRecord }) { * it when there is headroom. No walls of its own, so no walls row. */ function MezzanineRows({ room }: { room: RoomSelectionRecord }) { + const i18n = usePascalI18n() const zoneId = room.zoneId const nodes = useScene((scene) => scene.nodes) const unit = useViewer((s) => s.unit) @@ -385,12 +424,12 @@ function MezzanineRows({ room }: { room: RoomSelectionRecord }) { setExpanded((current) => (current === part ? null : part)) return (
-

Built with

+

{i18n._({ id: 'editor.panels.roomPanel.builtWith', message: 'Built with' })}

- Add stairs + {i18n._({ id: 'editor.panels.roomPanel.addStairs', message: 'Add stairs' })} } expanded={false} icon="/icons/stairs.webp" - label="Stairs" + label={i18n._({ id: 'editor.panels.roomPanel.stairs', message: 'Stairs' })} meta="Up from the floor below" on onToggleExpanded={() => {}} @@ -424,22 +463,26 @@ function MezzanineRows({ room }: { room: RoomSelectionRecord }) { {hasCeiling ? ( - + ) : undefined} @@ -459,6 +502,7 @@ function MezzanineRows({ room }: { room: RoomSelectionRecord }) { * the label tint, never a finish (finishes are painted). */ function RoomColorDot({ zoneId }: { zoneId: string }) { + const i18n = usePascalI18n() const color = useScene((state) => { const zone = state.nodes[zoneId as AnyNodeId] return zone?.type === 'zone' ? zone.color : undefined @@ -466,7 +510,7 @@ function RoomColorDot({ zoneId }: { zoneId: string }) { return ( useScene.getState().updateNode(zoneId as AnyNodeId, { color: next })} side="bottom" /> @@ -492,6 +536,7 @@ function RoomName({ sections: readonly RoomNameSection[] mezzanine: boolean }) { + const i18n = usePascalI18n() const nodes = useScene((state) => state.nodes) const [value, setValue] = useState(name) const [open, setOpen] = useState(false) @@ -624,10 +669,9 @@ function RoomName({ ) : used > 0 ? ( - {used} on this level - + {i18n._({ id: 'editor.panels.roomPanel.usedOnThisLevel', message: '{used} on this level', values: { used } })} ) : null}
) @@ -645,19 +689,27 @@ function RoomName({ )} data-guide-target="room-name" data-room-name-combobox - title={name.trim() ? `${name.trim()} · Rename` : 'Rename'} + title={ + name.trim() + ? i18n._({ + id: 'editor.panels.roomPanel.renameNamed', + message: '{name} · Rename', + values: { name: name.trim() }, + }) + : i18n._({ id: 'editor.panels.roomPanel.rename', message: 'Rename' }) + } > ))}
diff --git a/packages/editor/src/components/ui/panels/wall-region-list.tsx b/packages/editor/src/components/ui/panels/wall-region-list.tsx index 420f2dccbb..7969151015 100644 --- a/packages/editor/src/components/ui/panels/wall-region-list.tsx +++ b/packages/editor/src/components/ui/panels/wall-region-list.tsx @@ -4,7 +4,7 @@ import { type AnyNodeId, useLiveNodeOverrides, useScene, - type WallFaceRegion, + type WallFaceRegion, usePascalI18n, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { Trash2 } from 'lucide-react' @@ -25,6 +25,7 @@ const ROW_ACTION_CLASS = /** The wall panel's "Paint regions" section: one row per region, select or delete. */ export function WallPaintRegionList({ wallId }: { wallId: string }) { + const i18n = usePascalI18n() const nodes = useScene((state) => state.nodes) const materials = useScene((state) => state.materials) const unit = useViewer((state) => state.unit) @@ -48,7 +49,7 @@ export function WallPaintRegionList({ wallId }: { wallId: string }) { return ( // Focus inside this list still lets Delete target the active region.
- +
{rows.map((row) => { const isActive = active?.wallId === wallId && active.regionId === row.id @@ -85,13 +86,13 @@ export function WallPaintRegionList({ wallId }: { wallId: string }) {
{Number.isFinite(maxHeight) && (
- Limited by the level to {formatLinearMeasurement(maxHeight, unit, metricNotation)} — - raise the level height for a taller ceiling. + {i18n._({ + id: 'node.ceiling.panel.limitedByTheLevelTo', + message: 'Limited by the level to', + })}{' '} + {formatLinearMeasurement(maxHeight, unit, metricNotation)}{' '} + {i18n._({ + id: 'node.ceiling.panel.raiseTheLevelHeightForA', + message: '— raise the level height for a taller ceiling.', + })}
)}
- +
- Area + {i18n._({ id: 'node.ceiling.panel.area', message: 'Area' })} {area.toFixed(2)} m²
- + {node.holes && node.holes.length > 0 ? (
{node.holes.map((hole, index) => { @@ -336,7 +382,10 @@ export function CeilingPanel() { editingHole?.nodeId === selectedId && editingHole?.holeIndex === index const source = node.holeMetadata?.[index]?.source ?? 'manual' const isAutoHole = source !== 'manual' - const autoLabel = source === 'elevator' ? 'Auto elevator cutout' : 'Auto stair cutout' + const autoLabel = + source === 'elevator' + ? i18n._({ id: 'node.cutout.autoElevator', message: 'Auto elevator cutout' }) + : i18n._({ id: 'node.cutout.autoStair', message: 'Auto stair cutout' }) return (
- Hole {index + 1} {isEditing && '(Editing)'} + {i18n._({ id: 'node.ceiling.panel.hole', message: 'Hole' })} {index + 1}{' '} + {isEditing && + i18n._({ id: 'node.ceiling.panel.editing', message: '(Editing)' })}

- {holeArea.toFixed(2)} m² · {hole.length} pts ·{' '} - {isAutoHole ? autoLabel : 'Manual'} + {holeArea.toFixed(2)} m² · {hole.length}{' '} + {i18n._({ id: 'node.ceiling.panel.pts', message: 'pts ·' })}{' '} + {isAutoHole + ? autoLabel + : i18n._({ id: 'node.ceiling.panel.manual', message: 'Manual' })}

{isEditing ? ( { useInteractionScope .getState() @@ -374,7 +428,7 @@ export function CeilingPanel() { /> ) : isAutoHole ? (
- Auto + {i18n._({ id: 'node.ceiling.panel.auto', message: 'Auto' })}
) : canEditHoles ? ( <> @@ -400,7 +454,9 @@ export function CeilingPanel() { })}
) : ( -
No holes
+
+ {i18n._({ id: 'node.ceiling.panel.noHoles', message: 'No holes' })} +
)}
@@ -409,7 +465,7 @@ export function CeilingPanel() { startOpeningDraft(roomZoneId, 'ceiling', shape)} /> ) : ( @@ -417,7 +473,7 @@ export function CeilingPanel() { className="w-full" disabled={!canEditHoles || editingHole?.nodeId === selectedId} icon={} - label="Add Hole" + label={i18n._({ id: 'node.ceiling.panel.addHole', message: 'Add Hole' })} onClick={handleAddHole} /> )} @@ -425,7 +481,11 @@ export function CeilingPanel() { - } label="Move" onClick={handleMove} /> + } + label={i18n._({ id: 'node.ceiling.panel.move', message: 'Move' })} + onClick={handleMove} + /> ) diff --git a/packages/nodes/src/door/panel.tsx b/packages/nodes/src/door/panel.tsx index 1eec365ddc..c9391141d5 100644 --- a/packages/nodes/src/door/panel.tsx +++ b/packages/nodes/src/door/panel.tsx @@ -4,8 +4,10 @@ import { type AnyNode, type AnyNodeId, type DoorNode, + type MessageDescriptor, scriptImages, useInteractive, + usePascalI18n, useScene, } from '@pascal-app/core' import { @@ -38,12 +40,34 @@ import { openingPropertyPreviewHost } from '../shared/opening-property-preview-h import { scaleHandleHeight } from './door-math' import { doorTypeOptions } from './placement' +/** The type cards' names; `doorTypeOptions` keeps English for the placement chips. */ +const DOOR_TYPE_LABELS: Record = { + hinged: /* i18n */ { id: 'node.door.type.hinged', message: 'Hinged' }, + double: /* i18n */ { id: 'node.door.type.double', message: 'Double' }, + french: /* i18n */ { id: 'node.door.type.french', message: 'French' }, + folding: /* i18n */ { id: 'node.door.type.folding', message: 'Folding' }, + pocket: /* i18n */ { id: 'node.door.type.pocket', message: 'Pocket' }, + barn: /* i18n */ { id: 'node.door.type.barn', message: 'Barn' }, + sliding: /* i18n */ { id: 'node.door.type.sliding', message: 'Sliding' }, + 'garage-sectional': /* i18n */ { id: 'node.door.type.garageSectional', message: 'Sectional' }, + 'garage-rollup': /* i18n */ { id: 'node.door.type.garageRollup', message: 'Roll-up' }, + 'garage-tiltup': /* i18n */ { id: 'node.door.type.garageTiltup', message: 'Tilt-up' }, +} + const garageDoorTypeOptions = [ - { label: 'Sectional', value: 'garage-sectional', available: true }, - { label: 'Roll-up', value: 'garage-rollup', available: true }, - { label: 'Tilt-up', value: 'garage-tiltup', available: true }, + { + value: 'garage-sectional', + available: true, + }, + { + value: 'garage-rollup', + available: true, + }, + { + value: 'garage-tiltup', + available: true, + }, ] satisfies { - label: string value: DoorNode['doorType'] available: boolean }[] @@ -64,6 +88,7 @@ function isSameDoorValue(current: unknown, next: unknown): boolean { } export default function DoorPanel() { + const i18n = usePascalI18n() const selectedId = useViewer((s) => s.selection.selectedIds[0]) const setSelection = useViewer((s) => s.setSelection) const deleteNode = useScene((s) => s.deleteNode) @@ -259,11 +284,11 @@ export default function DoorPanel() { {!scripted && ( - +
@@ -290,9 +315,15 @@ export default function DoorPanel() { ) } options={[ - { label: 'Door', value: 'door' }, - { label: 'Opening', value: 'opening' }, - { label: 'Garage', value: 'garage' }, + { label: i18n._({ id: 'node.door.panel.door', message: 'Door' }), value: 'door' }, + { + label: i18n._({ id: 'node.door.panel.opening', message: 'Opening' }), + value: 'opening', + }, + { + label: i18n._({ id: 'node.door.panel.garage', message: 'Garage' }), + value: 'garage', + }, ]} value={typeMode} /> @@ -317,7 +348,9 @@ export default function DoorPanel() { type="button" > - {option.label} + + {i18n._(DOOR_TYPE_LABELS[option.value])} + ) })} @@ -327,7 +360,7 @@ export default function DoorPanel() { )} {!scripted && !isOpening && !isGarageDoor && ( - +
{DOOR_STYLES.map((style) => (
@@ -382,11 +421,11 @@ export default function DoorPanel() {
{showFoldSection && ( - +
- Panels + {i18n._({ id: 'node.door.panel.panels', message: 'Panels' })} handleUpdate({ leafCount: v === '2' ? 2 : 4 })} @@ -399,7 +438,7 @@ export default function DoorPanel() {
handleUpdate({ operationState: v / 100 })} @@ -413,24 +452,31 @@ export default function DoorPanel() { )} {showSlideSection && ( - +
- {doorType === 'pocket' ? 'Pocket' : doorType === 'barn' ? 'Rail' : 'Panel'} + {doorType === 'pocket' + ? i18n._({ id: 'node.door.panel.pocket', message: 'Pocket' }) + : doorType === 'barn' + ? i18n._({ id: 'node.door.panel.rail', message: 'Rail' }) + : i18n._({ id: 'node.door.panel.panel', message: 'Panel' })} handleUpdate({ slideDirection: v })} options={[ - { label: 'Left', value: 'left' }, - { label: 'Right', value: 'right' }, + { label: i18n._({ id: 'node.door.panel.left', message: 'Left' }), value: 'left' }, + { + label: i18n._({ id: 'node.door.panel.right', message: 'Right' }), + value: 'right', + }, ]} value={node.slideDirection ?? 'left'} />
handleUpdate({ operationState: v / 100 })} @@ -444,9 +490,9 @@ export default function DoorPanel() { )} {showGarageSection && ( - + handleUpdate({ operationState: v / 100 })} @@ -458,7 +504,7 @@ export default function DoorPanel() { /> {isSectionalGarageDoor && ( handleUpdate({ garagePanelCount: Math.round(v) })} @@ -474,14 +520,17 @@ export default function DoorPanel() { {scripted && } {!scripted && ( - + {limits && (

- Size is limited to the wall, including clearance for the opening frame. + {i18n._({ + id: 'node.door.panel.sizeIsLimitedToTheWall', + message: 'Size is limited to the wall, including clearance for the opening frame.', + })}

)} previewDoorUpdate('width', v)} @@ -495,7 +544,7 @@ export default function DoorPanel() { value={node.width} /> preview?.preview(heightUpdates(v))} @@ -512,7 +561,7 @@ export default function DoorPanel() { )} {showDoorShapeSection && ( - +
@@ -530,9 +579,15 @@ export default function DoorPanel() { }) } options={[ - { label: 'Rect', value: 'rectangle' }, - { label: 'Rounded', value: 'rounded' }, - { label: 'Arch', value: 'arch' }, + { + label: i18n._({ id: 'node.door.panel.rect', message: 'Rect' }), + value: 'rectangle', + }, + { + label: i18n._({ id: 'node.door.panel.rounded', message: 'Rounded' }), + value: 'rounded', + }, + { label: i18n._({ id: 'node.door.panel.arch', message: 'Arch' }), value: 'arch' }, ]} value={doorShape} /> @@ -545,15 +600,18 @@ export default function DoorPanel() { handleUpdate({ openingRadiusMode: v as DoorNode['openingRadiusMode'] }) } options={[ - { label: 'All', value: 'all' }, - { label: 'Individual', value: 'individual' }, + { label: i18n._({ id: 'node.door.panel.all', message: 'All' }), value: 'all' }, + { + label: i18n._({ id: 'node.door.panel.individual', message: 'Individual' }), + value: 'individual', + }, ]} value={openingRadiusMode} />
{openingRadiusMode === 'all' ? ( previewDoorUpdate('cornerRadius', v)} @@ -569,8 +627,8 @@ export default function DoorPanel() { ) : ( <> {[ - ['Top Left', 0], - ['Top Right', 1], + [i18n._({ id: 'node.cornerRadius.topLeft', message: 'Top Left' }), 0], + [i18n._({ id: 'node.cornerRadius.topRight', message: 'Top Right' }), 1], ].map(([label, index]) => ( )} previewDoorUpdate('openingRevealRadius', v)} @@ -608,7 +666,7 @@ export default function DoorPanel() { )} {doorShape === 'arch' && ( previewDoorUpdate('archHeight', v)} @@ -626,7 +684,9 @@ export default function DoorPanel() { )} {showOpeningShapeSection && ( - +
@@ -639,9 +699,15 @@ export default function DoorPanel() { }) } options={[ - { label: 'Rect', value: 'rectangle' }, - { label: 'Rounded', value: 'rounded' }, - { label: 'Arch', value: 'arch' }, + { + label: i18n._({ id: 'node.door.panel.rect', message: 'Rect' }), + value: 'rectangle', + }, + { + label: i18n._({ id: 'node.door.panel.rounded', message: 'Rounded' }), + value: 'rounded', + }, + { label: i18n._({ id: 'node.door.panel.arch', message: 'Arch' }), value: 'arch' }, ]} value={openingShape} /> @@ -654,15 +720,18 @@ export default function DoorPanel() { handleUpdate({ openingRadiusMode: v as DoorNode['openingRadiusMode'] }) } options={[ - { label: 'All', value: 'all' }, - { label: 'Individual', value: 'individual' }, + { label: i18n._({ id: 'node.door.panel.all', message: 'All' }), value: 'all' }, + { + label: i18n._({ id: 'node.door.panel.individual', message: 'Individual' }), + value: 'individual', + }, ]} value={openingRadiusMode} />
{openingRadiusMode === 'all' ? ( previewDoorUpdate('cornerRadius', v)} @@ -678,8 +747,8 @@ export default function DoorPanel() { ) : ( <> {[ - ['Top Left', 0], - ['Top Right', 1], + [i18n._({ id: 'node.cornerRadius.topLeft', message: 'Top Left' }), 0], + [i18n._({ id: 'node.cornerRadius.topRight', message: 'Top Right' }), 1], ].map(([label, index]) => ( )} previewDoorUpdate('openingRevealRadius', v)} @@ -717,7 +786,7 @@ export default function DoorPanel() { )} {openingShape === 'arch' && ( previewDoorUpdate('archHeight', v)} @@ -737,9 +806,9 @@ export default function DoorPanel() { {!isCutoutOnly && !scripted && ( <> {showFrameSection && ( - + handleUpdate({ frameThickness: v })} @@ -749,7 +818,7 @@ export default function DoorPanel() { value={node.frameThickness} /> handleUpdate({ frameDepth: v })} @@ -762,9 +831,11 @@ export default function DoorPanel() { )} {showContentPaddingSection && ( - + handleUpdate({ contentPadding: [v, node.contentPadding[1]] })} @@ -774,7 +845,7 @@ export default function DoorPanel() { value={node.contentPadding[0]} /> handleUpdate({ contentPadding: [node.contentPadding[0], v] })} @@ -787,18 +858,24 @@ export default function DoorPanel() { )} {showSwingSection && ( - +
{supportsHingeSide && (
- Hinges Side + {i18n._({ id: 'node.door.panel.hingesSide', message: 'Hinges Side' })} handleUpdate({ hingesSide: v })} options={[ - { label: 'Left', value: 'left' }, - { label: 'Right', value: 'right' }, + { + label: i18n._({ id: 'node.door.panel.left', message: 'Left' }), + value: 'left', + }, + { + label: i18n._({ id: 'node.door.panel.right', message: 'Right' }), + value: 'right', + }, ]} value={node.hingesSide} /> @@ -806,13 +883,19 @@ export default function DoorPanel() { )}
- Direction + {i18n._({ id: 'node.door.panel.direction', message: 'Direction' })} handleUpdate({ swingDirection: v })} options={[ - { label: 'Inward', value: 'inward' }, - { label: 'Outward', value: 'outward' }, + { + label: i18n._({ id: 'node.door.panel.inward', message: 'Inward' }), + value: 'inward', + }, + { + label: i18n._({ id: 'node.door.panel.outward', message: 'Outward' }), + value: 'outward', + }, ]} value={node.swingDirection} /> @@ -822,16 +905,19 @@ export default function DoorPanel() { )} {showThresholdSection && ( - + handleUpdate({ threshold: checked })} /> {node.threshold && (
handleUpdate({ thresholdHeight: v })} @@ -846,18 +932,18 @@ export default function DoorPanel() { )} {showHandleSection && ( - + {isSwingDoor && ( handleUpdate({ handle: checked })} /> )} {(node.handle || !isSwingDoor) && (
handleUpdate({ handleHeight: v })} @@ -869,13 +955,19 @@ export default function DoorPanel() { {supportsHandleSide && (
- Handle Side + {i18n._({ id: 'node.door.panel.handleSide', message: 'Handle Side' })} handleUpdate({ handleSide: v })} options={[ - { label: 'Left', value: 'left' }, - { label: 'Right', value: 'right' }, + { + label: i18n._({ id: 'node.door.panel.left', message: 'Left' }), + value: 'left', + }, + { + label: i18n._({ id: 'node.door.panel.right', message: 'Right' }), + value: 'right', + }, ]} value={node.handleSide} /> @@ -887,21 +979,21 @@ export default function DoorPanel() { )} {showHardwareSection && ( - + handleUpdate({ doorCloser: checked })} /> handleUpdate({ panicBar: checked })} /> {node.panicBar && (
handleUpdate({ panicBarHeight: v })} @@ -916,7 +1008,7 @@ export default function DoorPanel() { )} {showSegmentsSection && ( - + {node.segments.map((seg, i) => { const numCols = seg.columnRatios.length const colSum = seg.columnRatios.reduce((a, b) => a + b, 0) @@ -925,7 +1017,7 @@ export default function DoorPanel() {
- Segment {i + 1} + {i18n._({ id: 'node.door.panel.segment', message: 'Segment' })} {i + 1}
@@ -937,15 +1029,24 @@ export default function DoorPanel() { handleUpdate({ segments: updated }) }} options={[ - { label: 'Panel', value: 'panel' }, - { label: 'Glass', value: 'glass' }, - { label: 'Empty', value: 'empty' }, + { + label: i18n._({ id: 'node.door.panel.panel', message: 'Panel' }), + value: 'panel', + }, + { + label: i18n._({ id: 'node.door.panel.glass', message: 'Glass' }), + value: 'glass', + }, + { + label: i18n._({ id: 'node.door.panel.empty', message: 'Empty' }), + value: 'empty', + }, ]} value={seg.type} /> setSegmentHeightRatio(i, v / 100)} @@ -956,7 +1057,7 @@ export default function DoorPanel() { /> { @@ -987,7 +1088,7 @@ export default function DoorPanel() { /> ))} { @@ -1007,7 +1108,7 @@ export default function DoorPanel() { {seg.type === 'panel' && (
{ @@ -1022,7 +1123,7 @@ export default function DoorPanel() { value={seg.panelInset} /> { @@ -1044,7 +1145,7 @@ export default function DoorPanel() {
{ const updated = [ ...node.segments, @@ -1063,7 +1164,7 @@ export default function DoorPanel() { {node.segments.length > 1 && ( handleUpdate({ segments: node.segments.slice(0, -1) })} /> )} @@ -1073,18 +1174,22 @@ export default function DoorPanel() { )} - + - } label="Move" onClick={handleMove} /> + } + label={i18n._({ id: 'node.door.panel.move', message: 'Move' })} + onClick={handleMove} + /> } - label="Duplicate" + label={i18n._({ id: 'node.door.panel.duplicate', message: 'Duplicate' })} onClick={handleDuplicate} /> } - label="Delete" + label={i18n._({ id: 'node.door.panel.delete', message: 'Delete' })} onClick={handleDelete} /> diff --git a/packages/nodes/src/item/panel.tsx b/packages/nodes/src/item/panel.tsx index 14780379be..9a515c5598 100644 --- a/packages/nodes/src/item/panel.tsx +++ b/packages/nodes/src/item/panel.tsx @@ -5,6 +5,7 @@ import { getScaledDimensions, type ItemNode, scriptImages, + usePascalI18n, useScene, } from '@pascal-app/core' import { @@ -36,6 +37,7 @@ import { AuthoredParams } from './authored-params' * (see the wiki / plan recipe). */ export default function ItemPanel() { + const i18n = usePascalI18n() const selectedId = useViewer((s) => s.selection.selectedIds[0]) const setSelection = useViewer((s) => s.setSelection) const deleteNode = useScene((s) => s.deleteNode) @@ -113,11 +115,14 @@ export default function ItemPanel() { )} - + - Xpos + X + + {i18n._({ id: 'node.item.panel.pos', message: 'pos' })} + } max={node.position[0] + 2} @@ -133,7 +138,10 @@ export default function ItemPanel() { - Ypos + Y + + {i18n._({ id: 'node.item.panel.pos', message: 'pos' })} + } max={node.position[1] + 2} @@ -149,7 +157,10 @@ export default function ItemPanel() { - Zpos + Z + + {i18n._({ id: 'node.item.panel.pos', message: 'pos' })} + } max={node.position[2] + 2} @@ -164,12 +175,15 @@ export default function ItemPanel() { /> - + - Yrot + Y + + {i18n._({ id: 'node.item.panel.rot', message: 'rot' })} + } max={Math.round((node.rotation[1] * 180) / Math.PI) + 45} @@ -206,10 +220,10 @@ export default function ItemPanel() {
- +
- Uniform Scale + {i18n._({ id: 'node.item.panel.uniformScale', message: 'Uniform Scale' })} ))}
} - label="Draw Segment" + label={i18n._({ id: 'node.roof.panel.drawSegment', message: 'Draw Segment' })} onClick={handleAddSegment} />
- + { @@ -350,15 +386,22 @@ export default function RoofPanel() { handleUpdate({ support: { kind: mode === 'walls' ? 'walls' : 'level' } }) } options={[ - { label: 'Follows walls', value: 'walls' }, - { label: 'Custom', value: 'custom' }, + { + label: i18n._({ id: 'node.roof.panel.followsWalls', message: 'Follows walls' }), + value: 'walls', + }, + { + label: i18n._({ id: 'node.roof.panel.custom', message: 'Custom' }), + value: 'custom', + }, ]} value={node.support?.kind === 'walls' ? 'walls' : 'custom'} /> )} {node.support?.kind === 'walls' ? (
- Currently {formatLinearMeasurement(node.position[1], unit, metricNotation)} + {i18n._({ id: 'node.roof.panel.currently', message: 'Currently' })}{' '} + {formatLinearMeasurement(node.position[1], unit, metricNotation)}
) : ( { @@ -424,7 +467,7 @@ export default function RoofPanel() {
- +
{chimneys.map((chimney, i) => ( @@ -434,14 +477,18 @@ export default function RoofPanel() { onClick={() => handleSelectElement(chimney.id)} type="button" > - {chimney.name || `Chimney ${i + 1}`} - chimney + + {chimney.name || numberedName(nodeLabel('chimney', 'Chimney', i18n), i + 1, i18n)} + + + {i18n._({ id: 'node.roof.panel.chimney', message: 'chimney' })} + ))} } - label="Add Chimney" + label={i18n._({ id: 'node.roof.panel.addChimney', message: 'Add Chimney' })} onClick={() => activateTool('chimney')} /> @@ -455,14 +502,18 @@ export default function RoofPanel() { onClick={() => handleSelectElement(dormer.id)} type="button" > - {dormer.name || `Dormer ${i + 1}`} - dormer + + {dormer.name || numberedName(nodeLabel('dormer', 'Dormer', i18n), i + 1, i18n)} + + + {i18n._({ id: 'node.roof.panel.dormer', message: 'dormer' })} + ))} } - label="Add Dormer" + label={i18n._({ id: 'node.roof.panel.addDormer', message: 'Add Dormer' })} onClick={() => activateTool('dormer')} /> @@ -476,14 +527,19 @@ export default function RoofPanel() { onClick={() => handleSelectElement(skylight.id)} type="button" > - {skylight.name || `Skylight ${i + 1}`} - skylight + + {skylight.name || + numberedName(nodeLabel('skylight', 'Skylight', i18n), i + 1, i18n)} + + + {i18n._({ id: 'node.roof.panel.skylight', message: 'skylight' })} + ))} } - label="Add Skylight" + label={i18n._({ id: 'node.roof.panel.addSkylight', message: 'Add Skylight' })} onClick={() => activateTool('skylight')} /> @@ -497,14 +553,19 @@ export default function RoofPanel() { onClick={() => handleSelectElement(panel.id)} type="button" > - {panel.name || `Solar Panel ${i + 1}`} - solar panel + + {panel.name || + numberedName(nodeLabel('solar-panel', 'Solar Panel', i18n), i + 1, i18n)} + + + {i18n._({ id: 'node.roof.panel.solarPanel', message: 'solar panel' })} + ))} } - label="Add Solar Panel" + label={i18n._({ id: 'node.roof.panel.addSolarPanel', message: 'Add Solar Panel' })} onClick={() => activateTool('solar-panel')} /> @@ -520,34 +581,44 @@ export default function RoofPanel() { > {vent.name || - (vent.type === 'box-vent' - ? `Box Vent ${i + 1}` - : vent.type === 'ridge-vent' - ? `Ridge Vent ${i + 1}` - : `Turbine Vent ${i + 1}`)} + numberedName( + vent.type === 'box-vent' + ? nodeLabel('box-vent', 'Box Vent', i18n) + : vent.type === 'ridge-vent' + ? nodeLabel('ridge-vent', 'Ridge Vent', i18n) + : nodeLabel('turbine-vent', 'Turbine Vent', i18n), + i + 1, + i18n, + )} {vent.type === 'box-vent' - ? 'box vent' + ? i18n._({ id: 'node.roof.panel.boxVent', message: 'box vent' }) : vent.type === 'ridge-vent' - ? 'ridge vent' - : 'turbine vent'} + ? i18n._({ id: 'node.roof.panel.ridgeVent', message: 'ridge vent' }) + : i18n._({ id: 'node.roof.panel.turbineVent', message: 'turbine vent' })} ))} onChange={setVentType} options={[ - { label: 'Box', value: 'box-vent' }, - { label: 'Ridge', value: 'ridge-vent' }, - { label: 'Turbine', value: 'turbine-vent' }, + { label: i18n._({ id: 'node.roof.panel.box', message: 'Box' }), value: 'box-vent' }, + { + label: i18n._({ id: 'node.roof.panel.ridge', message: 'Ridge' }), + value: 'ridge-vent', + }, + { + label: i18n._({ id: 'node.roof.panel.turbine', message: 'Turbine' }), + value: 'turbine-vent', + }, ]} value={ventType} /> } - label="Add Vent" + label={i18n._({ id: 'node.roof.panel.addVent', message: 'Add Vent' })} onClick={() => activateTool(ventType)} /> @@ -557,7 +628,7 @@ export default function RoofPanel() { } - label="Add Cupola" + label={i18n._({ id: 'node.roof.panel.addCupola', message: 'Add Cupola' })} onClick={() => activateTool('cupola')} /> @@ -567,7 +638,10 @@ export default function RoofPanel() { } - label="Add Eyebrow Vent" + label={i18n._({ + id: 'node.roof.panel.addEyebrowVent', + message: 'Add Eyebrow Vent', + })} onClick={() => activateTool('eyebrow-vent')} /> @@ -581,14 +655,18 @@ export default function RoofPanel() { onClick={() => handleSelectElement(gutter.id)} type="button" > - {gutter.name || `Gutter ${i + 1}`} - gutter + + {gutter.name || numberedName(nodeLabel('gutter', 'Gutter', i18n), i + 1, i18n)} + + + {i18n._({ id: 'node.roof.panel.gutter', message: 'gutter' })} + ))} } - label="Add Gutter" + label={i18n._({ id: 'node.roof.panel.addGutter', message: 'Add Gutter' })} onClick={() => activateTool('gutter')} /> @@ -596,18 +674,22 @@ export default function RoofPanel() {
- + - } label="Move" onClick={handleMove} /> + } + label={i18n._({ id: 'node.roof.panel.move', message: 'Move' })} + onClick={handleMove} + /> } - label="Duplicate" + label={i18n._({ id: 'node.roof.panel.duplicate', message: 'Duplicate' })} onClick={handleDuplicate} /> } - label="Delete" + label={i18n._({ id: 'node.roof.panel.delete', message: 'Delete' })} onClick={handleDelete} /> @@ -615,3 +697,8 @@ export default function RoofPanel() { ) } + +/** "Chimney 2": a list row for an element without a name of its own. */ +function numberedName(kind: string, number: number, i18n: PascalI18n): string { + return i18n._({ id: 'node.numberedName', message: '{kind} {number}', values: { kind, number } }) +} diff --git a/packages/nodes/src/shared/system-check-panel.tsx b/packages/nodes/src/shared/system-check-panel.tsx index a55609ee74..fa6be68120 100644 --- a/packages/nodes/src/shared/system-check-panel.tsx +++ b/packages/nodes/src/shared/system-check-panel.tsx @@ -6,6 +6,7 @@ import { emitter, getLevelElevations, summarizeSystemFor, + usePascalI18n, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { @@ -21,13 +22,40 @@ import { useId, useMemo, useState } from 'react' import { checkDistributionSystems } from './system-checks' const CATEGORIES = [ - { id: 'all', label: 'All findings' }, - { id: 'open-end', label: 'Open ends' }, - { id: 'connection-mismatch', label: 'Connections' }, - { id: 'disconnected-branch', label: 'Separate branches' }, - { id: 'possible-intersection', label: 'Intersections' }, - { id: 'drainage', label: 'Drainage' }, - { id: 'unsupported-hanger', label: 'Hangers' }, + { + id: 'all', + label: /* i18n */ { id: 'node.shared.systemCheckPanel.allFindings', message: 'All findings' }, + }, + { + id: 'open-end', + label: /* i18n */ { id: 'node.shared.systemCheckPanel.openEnds', message: 'Open ends' }, + }, + { + id: 'connection-mismatch', + label: /* i18n */ { id: 'node.shared.systemCheckPanel.connections', message: 'Connections' }, + }, + { + id: 'disconnected-branch', + label: /* i18n */ { + id: 'node.shared.systemCheckPanel.separateBranches', + message: 'Separate branches', + }, + }, + { + id: 'possible-intersection', + label: /* i18n */ { + id: 'node.shared.systemCheckPanel.intersections', + message: 'Intersections', + }, + }, + { + id: 'drainage', + label: /* i18n */ { id: 'node.shared.systemCheckPanel.drainage', message: 'Drainage' }, + }, + { + id: 'unsupported-hanger', + label: /* i18n */ { id: 'node.shared.systemCheckPanel.hangers', message: 'Hangers' }, + }, ] as const const categoryFor = (code: string) => ['slope-too-flat', 'slope-too-steep', 'trap-arm-too-long'].includes(code) ? 'drainage' : code @@ -39,6 +67,7 @@ export default function SystemCheckPanel({ nodeId: AnyNodeId nodes: Record }) { + const i18n = usePascalI18n() const contentId = useId() const [open, setOpen] = useState(false) const [filter, setFilter] = useState('all') @@ -84,7 +113,9 @@ export default function SystemCheckPanel({ onClick={() => setOpen((value) => !value)} >
{ setQuery(event.target.value) setPicked(null) }} - placeholder="1200 W Cass St, Tampa, FL" + placeholder={i18n._({ + id: 'node.site.panel.n1200WCassStTampaFl', + message: '1200 W Cass St, Tampa, FL', + })} value={query} /> @@ -218,7 +235,11 @@ export function SiteNodePanel() { } - label={busy ? 'Finding…' : 'Find parcel'} + label={ + busy + ? i18n._({ id: 'node.site.panel.finding', message: 'Finding…' }) + : i18n._({ id: 'node.site.panel.findParcel', message: 'Find parcel' }) + } onClick={findParcel} /> @@ -227,18 +248,27 @@ export function SiteNodePanel() { ) : null} {node.parcel ? ( - - - + + + - + {node.parcel.notes?.length ? (

{node.parcel.notes.join(' ')} @@ -247,42 +277,60 @@ export function SiteNodePanel() { ) : null} - - {setbackField('front', 'Front')} - {setbackField('side', 'Side')} - {setbackField('rear', 'Rear')} - {setbackField('left', 'Left (override)', true)} - {setbackField('right', 'Right (override)', true)} + + {setbackField('front', i18n._({ id: 'node.site.setback.front', message: 'Front' }))} + {setbackField('side', i18n._({ id: 'node.site.setback.side', message: 'Side' }))} + {setbackField('rear', i18n._({ id: 'node.site.setback.rear', message: 'Rear' }))} + {setbackField( + 'left', + i18n._({ id: 'node.site.setback.leftOverride', message: 'Left (override)' }), + true, + )} + {setbackField( + 'right', + i18n._({ id: 'node.site.setback.rightOverride', message: 'Right (override)' }), + true, + )} - +

- Save the current lighting and display as this project's default. Personal display changes - stay in this browser. + {i18n._({ + id: 'node.site.panel.saveTheCurrentLightingAndDisplay', + message: + "Save the current lighting and display as this project's default. Personal display changes stay in this browser.", + })}

{ const viewer = useViewer.getState() const look = viewer.sceneAppearance @@ -310,32 +358,45 @@ export function SiteNodePanel() { }} /> useViewer.getState().resetProjectLook()} />
- + {node.terrainContours ? (

- {node.terrainContours.lines.length} surveyed lines at {node.terrainContours.intervalFt}{' '} - ft ({node.terrainContours.datum}) — {node.terrainContours.source ?? 'survey'} + {node.terrainContours.lines.length}{' '} + {i18n._({ id: 'node.site.panel.surveyedLinesAt', message: 'surveyed lines at' })}{' '} + {node.terrainContours.intervalFt}{' '} + {i18n._({ id: 'node.site.panel.ft', message: 'ft (' })} + {node.terrainContours.datum}) —{' '} + {node.terrainContours.source ?? + i18n._({ id: 'node.site.panel.survey', message: 'survey' })}

) : (

- No surveyed lines — contours are drawn from the sculpted ground. + {i18n._({ + id: 'node.site.panel.noSurveyedLinesContoursAreDrawn', + message: 'No surveyed lines — contours are drawn from the sculpted ground.', + })}

)}
- +
- +
- Area + {i18n._({ id: 'node.slab.panel.area', message: 'Area' })} {area.toFixed(2)} m²
- + {node.holes && node.holes.length > 0 ? (
{node.holes.map((hole, index) => { @@ -402,12 +448,12 @@ export function SlabPanel() { const isAutoHole = source !== 'manual' || derived const autoLabel = source === 'elevator' - ? 'Auto elevator cutout' + ? i18n._({ id: 'node.cutout.autoElevator', message: 'Auto elevator cutout' }) : source === 'stair' - ? 'Auto stair cutout' + ? i18n._({ id: 'node.cutout.autoStair', message: 'Auto stair cutout' }) : source === 'floor-opening' - ? 'Opening' - : 'Room cutout' + ? i18n._({ id: 'node.cutout.opening', message: 'Opening' }) + : i18n._({ id: 'node.cutout.room', message: 'Room cutout' }) return (
- Hole {index + 1} {isEditing && '(Editing)'} + {i18n._({ id: 'node.slab.panel.hole', message: 'Hole' })} {index + 1}{' '} + {isEditing && i18n._({ id: 'node.slab.panel.editing', message: '(Editing)' })}

- {holeArea.toFixed(2)} m² · {hole.length} pts ·{' '} - {isAutoHole ? autoLabel : 'Manual'} + {holeArea.toFixed(2)} m² · {hole.length}{' '} + {i18n._({ id: 'node.slab.panel.pts', message: 'pts ·' })}{' '} + {isAutoHole + ? autoLabel + : i18n._({ id: 'node.slab.panel.manual', message: 'Manual' })}

{isEditing ? ( useInteractionScope .getState() @@ -452,7 +502,7 @@ export function SlabPanel() { ) : isAutoHole ? (
- Auto + {i18n._({ id: 'node.slab.panel.auto', message: 'Auto' })}
) : ( <> @@ -478,7 +528,9 @@ export function SlabPanel() { })}
) : ( -
No holes
+
+ {i18n._({ id: 'node.slab.panel.noHoles', message: 'No holes' })} +
)}
@@ -488,7 +540,11 @@ export function SlabPanel() { openingZoneId && startOpeningDraft(openingZoneId, 'floor', shape)} /> ) : ( @@ -496,14 +552,18 @@ export function SlabPanel() { className="w-full" disabled={editingHole?.nodeId === selectedId} icon={} - label="Add Hole" + label={i18n._({ id: 'node.slab.panel.addHole', message: 'Add Hole' })} onClick={handleAddHole} /> )}
- } label="Move" onClick={handleMove} /> + } + label={i18n._({ id: 'node.slab.panel.move', message: 'Move' })} + onClick={handleMove} + /> ) diff --git a/packages/nodes/src/stair-segment/panel.tsx b/packages/nodes/src/stair-segment/panel.tsx index 04d99703a7..f2c5a38029 100644 --- a/packages/nodes/src/stair-segment/panel.tsx +++ b/packages/nodes/src/stair-segment/panel.tsx @@ -5,12 +5,14 @@ import { type AnyNodeId, type AttachmentSide, DEFAULT_LEVEL_HEIGHT, + type MessageDescriptor, planStairFlightHeightEdit, resolveStairTotalRise, type StairSegmentNode, type StairSegmentType, stairSegmentConstructionError, stairSegmentDetailError, + usePascalI18n, useScene, } from '@pascal-app/core' import { @@ -30,18 +32,22 @@ import { Copy, Move, Trash2 } from 'lucide-react' import { useCallback } from 'react' import { StairConstructionControls } from '../stair/construction-controls' -const SEGMENT_TYPE_OPTIONS: { label: string; value: StairSegmentType }[] = [ - { label: 'Flight', value: 'stair' }, - { label: 'Landing', value: 'landing' }, +const SEGMENT_TYPE_OPTIONS: { label: MessageDescriptor; value: StairSegmentType }[] = [ + { label: /* i18n */ { id: 'node.stairSegment.panel.flight', message: 'Flight' }, value: 'stair' }, + { + label: /* i18n */ { id: 'node.stairSegment.panel.landing', message: 'Landing' }, + value: 'landing', + }, ] -const ATTACHMENT_SIDE_OPTIONS: { label: string; value: AttachmentSide }[] = [ - { label: 'Front', value: 'front' }, - { label: 'Left', value: 'left' }, - { label: 'Right', value: 'right' }, +const ATTACHMENT_SIDE_OPTIONS: { label: MessageDescriptor; value: AttachmentSide }[] = [ + { label: /* i18n */ { id: 'node.stairSegment.panel.front', message: 'Front' }, value: 'front' }, + { label: /* i18n */ { id: 'node.stairSegment.panel.left', message: 'Left' }, value: 'left' }, + { label: /* i18n */ { id: 'node.stairSegment.panel.right', message: 'Right' }, value: 'right' }, ] export default function StairSegmentPanel() { + const i18n = usePascalI18n() const selectedId = useViewer((s) => s.selection.selectedIds[0]) const setSelection = useViewer((s) => s.setSelection) const updateNode = useScene((s) => s.updateNode) @@ -147,10 +153,13 @@ export default function StairSegmentPanel() { icon="/icons/stairs.webp" onBack={handleBack} onClose={handleClose} - title={node.name || 'Stair Segment'} + title={ + node.name || + i18n._({ id: 'node.stairSegment.panel.stairSegment', message: 'Stair Segment' }) + } width={300} > - + { const updates: Partial = { segmentType: v } @@ -166,16 +175,24 @@ export default function StairSegmentPanel() { } handleUpdate(updates) }} - options={SEGMENT_TYPE_OPTIONS} + options={SEGMENT_TYPE_OPTIONS.map((option) => ({ + ...option, + label: i18n._(option.label), + }))} value={node.segmentType} /> {!isFirstSegment && ( - + handleUpdate({ attachmentSide: v })} - options={ATTACHMENT_SIDE_OPTIONS} + options={ATTACHMENT_SIDE_OPTIONS.map((option) => ({ + ...option, + label: i18n._(option.label), + }))} value={node.attachmentSide} /> @@ -187,7 +204,9 @@ export default function StairSegmentPanel() {
) : null} {node.segmentType === 'stair' && ( - + @@ -204,8 +223,14 @@ export default function StairSegmentPanel() { }) } options={[ - { label: 'Straight', value: 'straight' }, - { label: 'Winder', value: 'winder' }, + { + label: i18n._({ id: 'node.stairSegment.panel.straight', message: 'Straight' }), + value: 'straight', + }, + { + label: i18n._({ id: 'node.stairSegment.panel.winder', message: 'Winder' }), + value: 'winder', + }, ]} /> {node.winder && ( @@ -214,12 +239,21 @@ export default function StairSegmentPanel() { value={node.winder.turn} onChange={(turn) => handleUpdate({ winder: { ...node.winder!, turn } })} options={[ - { label: 'Left turn', value: 'left' }, - { label: 'Right turn', value: 'right' }, + { + label: i18n._({ id: 'node.stairSegment.panel.leftTurn', message: 'Left turn' }), + value: 'left', + }, + { + label: i18n._({ + id: 'node.stairSegment.panel.rightTurn', + message: 'Right turn', + }), + value: 'right', + }, ]} /> handleUpdate({ winder: { ...node.winder!, innerGap } })} /> handleUpdate({ winder: { ...node.winder!, division } })} options={[ - { label: 'Equal going', value: 'equal-going' }, - { label: 'Equal angle', value: 'equal-angle' }, + { + label: i18n._({ + id: 'node.stairSegment.panel.equalGoing', + message: 'Equal going', + }), + value: 'equal-going', + }, + { + label: i18n._({ + id: 'node.stairSegment.panel.equalAngle', + message: 'Equal angle', + }), + value: 'equal-angle', + }, ]} /> )} )} - + handleUpdate({ width: v })} precision={2} @@ -263,7 +314,7 @@ export default function StairSegmentPanel() { /> {!node.winder && ( handleUpdate({ length: v })} precision={2} @@ -275,7 +326,7 @@ export default function StairSegmentPanel() { {node.segmentType === 'stair' && ( <> {parentFollowsLevel && (
- Editing switches the stair to Custom rise + {i18n._({ + id: 'node.stairSegment.panel.editingSwitchesTheStairToCustom', + message: 'Editing switches the stair to Custom rise', + })}
)} handleUpdate({ stepCount: Math.round(v) })} precision={0} @@ -301,7 +355,9 @@ export default function StairSegmentPanel() { )}
- +
handleUpdate({ fillToFloor: checked })} /> ) : null} {!(node.construction ?? parentConstruction) && !node.fillToFloor && ( handleUpdate({ thickness: v })} precision={2} @@ -329,7 +388,7 @@ export default function StairSegmentPanel() {
- + { @@ -367,7 +426,7 @@ export default function StairSegmentPanel() { value={node.position[2]} /> { @@ -396,18 +455,22 @@ export default function StairSegmentPanel() {
- + - } label="Move" onClick={handleMove} /> + } + label={i18n._({ id: 'node.stairSegment.panel.move', message: 'Move' })} + onClick={handleMove} + /> } - label="Duplicate" + label={i18n._({ id: 'node.stairSegment.panel.duplicate', message: 'Duplicate' })} onClick={handleDuplicate} /> } - label="Delete" + label={i18n._({ id: 'node.stairSegment.panel.delete', message: 'Delete' })} onClick={handleDelete} /> diff --git a/packages/nodes/src/stair/panel.tsx b/packages/nodes/src/stair/panel.tsx index 32e42de676..e487323fcf 100644 --- a/packages/nodes/src/stair/panel.tsx +++ b/packages/nodes/src/stair/panel.tsx @@ -6,6 +6,7 @@ import { getBoundarySurfaces, getLevelDisplayName, type LevelNode, + type MessageDescriptor, measureStair, planStairPreset, planStairRiseEdit, @@ -24,6 +25,7 @@ import { type StairSlabOpeningMode, type StairTopLandingMode, type StairType, + usePascalI18n, useRegistryVersion, useScene, } from '@pascal-app/core' @@ -55,35 +57,47 @@ import { getStairDestinationUpdates } from './destination' import { StairRailingControls } from './railing-controls' import { getStairTypeChange } from './stair-type' -const RAILING_MODE_OPTIONS: { label: string; value: StairRailingMode }[] = [ - { label: 'None', value: 'none' }, - { label: 'Left', value: 'left' }, - { label: 'Right', value: 'right' }, - { label: 'Both', value: 'both' }, +const RAILING_MODE_OPTIONS: { label: MessageDescriptor; value: StairRailingMode }[] = [ + { label: /* i18n */ { id: 'node.stair.panel.none', message: 'None' }, value: 'none' }, + { label: /* i18n */ { id: 'node.stair.panel.left', message: 'Left' }, value: 'left' }, + { label: /* i18n */ { id: 'node.stair.panel.right', message: 'Right' }, value: 'right' }, + { label: /* i18n */ { id: 'node.stair.panel.both', message: 'Both' }, value: 'both' }, ] -const RAILING_STYLE_OPTIONS: { label: string; value: StairRailingStyle }[] = [ - { label: 'Balusters', value: 'balusters' }, - { label: 'Post & rail', value: 'post-and-rail' }, - { label: 'Cable', value: 'cable' }, - { label: 'Boards', value: 'boards' }, - { label: 'Glass', value: 'glass' }, - { label: 'Metal', value: 'metal' }, +const RAILING_STYLE_OPTIONS: { label: MessageDescriptor; value: StairRailingStyle }[] = [ + { + label: /* i18n */ { id: 'node.stair.panel.balusters', message: 'Balusters' }, + value: 'balusters', + }, + { + label: /* i18n */ { id: 'node.stair.panel.postRail', message: 'Post & rail' }, + value: 'post-and-rail', + }, + { label: /* i18n */ { id: 'node.stair.panel.cable', message: 'Cable' }, value: 'cable' }, + { label: /* i18n */ { id: 'node.stair.panel.boards', message: 'Boards' }, value: 'boards' }, + { label: /* i18n */ { id: 'node.stair.panel.glass', message: 'Glass' }, value: 'glass' }, + { label: /* i18n */ { id: 'node.stair.panel.metal', message: 'Metal' }, value: 'metal' }, ] -const STAIR_TYPE_OPTIONS: { label: string; value: StairType }[] = [ - { label: 'Straight', value: 'straight' }, - { label: 'Curved', value: 'curved' }, - { label: 'Spiral', value: 'spiral' }, +const STAIR_TYPE_OPTIONS: { label: MessageDescriptor; value: StairType }[] = [ + { label: /* i18n */ { id: 'node.stair.panel.straight', message: 'Straight' }, value: 'straight' }, + { label: /* i18n */ { id: 'node.stair.panel.curved', message: 'Curved' }, value: 'curved' }, + { label: /* i18n */ { id: 'node.stair.panel.spiral', message: 'Spiral' }, value: 'spiral' }, ] -const TOP_LANDING_MODE_OPTIONS: { label: string; value: StairTopLandingMode }[] = [ - { label: 'None', value: 'none' }, - { label: 'Integrated', value: 'integrated' }, +const TOP_LANDING_MODE_OPTIONS: { label: MessageDescriptor; value: StairTopLandingMode }[] = [ + { label: /* i18n */ { id: 'node.stair.panel.none', message: 'None' }, value: 'none' }, + { + label: /* i18n */ { id: 'node.stair.panel.integrated', message: 'Integrated' }, + value: 'integrated', + }, ] -const STAIR_SLAB_OPENING_OPTIONS: { label: string; value: StairSlabOpeningMode }[] = [ - { label: 'None', value: 'none' }, - { label: 'Destination', value: 'destination' }, +const STAIR_SLAB_OPENING_OPTIONS: { label: MessageDescriptor; value: StairSlabOpeningMode }[] = [ + { label: /* i18n */ { id: 'node.stair.panel.none', message: 'None' }, value: 'none' }, + { + label: /* i18n */ { id: 'node.stair.panel.destination', message: 'Destination' }, + value: 'destination', + }, ] // Slabs at least this high off the storey floor read as decks (mezzanines) — @@ -91,6 +105,7 @@ const STAIR_SLAB_OPENING_OPTIONS: { label: string; value: StairSlabOpeningMode } const DECK_DESTINATION_MIN_ELEVATION = 0.5 export default function StairPanel() { + const i18n = usePascalI18n() const selectedId = useViewer((s) => s.selection.selectedIds[0]) const selectedCount = useViewer((s) => s.selection.selectedIds.length) const unit = useViewer((s) => s.unit) @@ -390,38 +405,50 @@ export default function StairPanel() { - + ({ ...option, label: i18n._(option.label) }))} value={node.stairType ?? 'straight'} /> - + {turningStrategy === 'winder' && ( <> @@ -451,12 +487,22 @@ export default function StairPanel() {
{layoutOptions.map((option) => { const label = - option.layout === 'straight' ? 'Straight' : `${option.layout.toUpperCase()} turn` + option.layout === 'straight' + ? i18n._({ id: 'node.stair.layout.straight', message: 'Straight' }) + : i18n._({ + id: 'node.stair.layout.turn', + message: '{layout} turn', + values: { layout: option.layout.toUpperCase() }, + }) return ( ) @@ -489,13 +535,16 @@ export default function StairPanel() {
- +
- Measurements + + {i18n._({ id: 'node.stair.panel.measurements', message: 'Measurements' })} +
{measurements.flights.map((flight, index) => (
- Flight {index + 1}: {flight.count} risers · R{' '} + {i18n._({ id: 'node.stair.panel.flight', message: 'Flight' })} {index + 1}:{' '} + {flight.count} {i18n._({ id: 'node.stair.panel.risersR', message: 'risers · R' })}{' '} {flight.riserHeight === null ? '—' : formatLinearMeasurement(flight.riserHeight, unit, metricNotation)}{' '} @@ -507,14 +556,22 @@ export default function StairPanel() {
))}
- Headroom:{' '} + {i18n._({ id: 'node.stair.panel.headroom', message: 'Headroom:' })}{' '} {measurements.headroom.status === 'unresolved' - ? 'Not evaluated' + ? i18n._({ id: 'node.stair.panel.notEvaluated', message: 'Not evaluated' }) : measurements.headroom.minimum === null - ? 'No overhead surface' + ? i18n._({ + id: 'node.stair.panel.noOverheadSurface', + message: 'No overhead surface', + }) : formatLinearMeasurement(measurements.headroom.minimum, unit, metricNotation)}
-
Floors, ceilings and stairs only.
+
+ {i18n._({ + id: 'node.stair.panel.floorsCeilingsAndStairsOnly', + message: 'Floors, ceilings and stairs only.', + })} +
{[...new Set(measurements.diagnostics.map((diagnostic) => diagnostic.message))].map( @@ -530,10 +587,10 @@ export default function StairPanel() { )}
- Design targets + {i18n._({ id: 'node.stair.panel.designTargets', message: 'Design targets' })} applySizing(false)} /> applySizing(true)} /> {node.stairType === 'straight' && (boundarySurfaces.length > 0 || node.destinationSurfaceId) && ( - +
handleUpdate({ autoSurfaceSnap: checked })} />

{node.autoSurfaceSnap !== false ? connectedSurface - ? `Connected to ${connectedSurface.name || 'surface'}. Move the stair to connect to another edge.` - : 'Drag near a deck, patio, concrete slab, or landing edge to fit the stair.' - : 'Moving this stair keeps its current rise, steps, and run.'} + ? connectedSurface.name + ? i18n._({ + id: 'node.stair.panel.connectedTo', + message: + 'Connected to {surface}. Move the stair to connect to another edge.', + values: { surface: connectedSurface.name }, + }) + : i18n._({ + id: 'node.stair.panel.connectedToSurface', + message: + 'Connected to a surface. Move the stair to connect to another edge.', + }) + : i18n._({ + id: 'node.stair.panel.dragNearADeckPatioConcrete', + message: + 'Drag near a deck, patio, concrete slab, or landing edge to fit the stair.', + }) + : i18n._({ + id: 'node.stair.panel.movingThisStairKeepsItsCurrent', + message: 'Moving this stair keeps its current rise, steps, and run.', + })}

)} - +
{attachedDeck ? null : ( )}
- From Level + {i18n._({ id: 'node.stair.panel.fromLevel', message: 'From Level' })}
( ))} @@ -659,7 +748,7 @@ export default function StairPanel() {
- Rise + {i18n._({ id: 'node.stair.panel.rise', message: 'Rise' })}
@@ -668,18 +757,27 @@ export default function StairPanel() { ) } options={[ - { label: attachedDeck ? 'Follows deck' : 'Follows level', value: 'follows' }, - { label: 'Custom rise', value: 'custom' }, + { + label: attachedDeck + ? i18n._({ id: 'node.stair.panel.followsDeck', message: 'Follows deck' }) + : i18n._({ id: 'node.stair.panel.followsLevel', message: 'Follows level' }), + value: 'follows', + }, + { + label: i18n._({ id: 'node.stair.panel.customRise', message: 'Custom rise' }), + value: 'custom', + }, ]} value={node.totalRise == null ? 'follows' : 'custom'} /> {node.totalRise == null ? (
- Currently {formatLinearMeasurement(resolvedRise, unit, metricNotation)} + {i18n._({ id: 'node.stair.panel.currently', message: 'Currently' })}{' '} + {formatLinearMeasurement(resolvedRise, unit, metricNotation)}
) : ( handleUpdate({ totalRise: value })} precision={2} @@ -700,13 +798,19 @@ export default function StairPanel() { <> handleAutoCutoutChange(value === 'destination')} - options={STAIR_SLAB_OPENING_OPTIONS} + options={STAIR_SLAB_OPENING_OPTIONS.map((option) => ({ + ...option, + label: i18n._(option.label), + }))} value={node.slabOpeningMode ?? 'none'} /> {(node.slabOpeningMode ?? 'none') === 'destination' ? ( handleUpdate({ openingOffset: value })} precision={2} @@ -722,17 +826,20 @@ export default function StairPanel() { <>
- Landing + {i18n._({ id: 'node.stair.panel.landing', message: 'Landing' })}
handleUpdate({ topLandingMode: value })} - options={TOP_LANDING_MODE_OPTIONS} + options={TOP_LANDING_MODE_OPTIONS.map((option) => ({ + ...option, + label: i18n._(option.label), + }))} value={node.topLandingMode ?? 'none'} />
{(node.topLandingMode ?? 'none') === 'integrated' && ( handleUpdate({ topLandingDepth: value })} @@ -748,7 +855,7 @@ export default function StairPanel() { {node.stairType === 'straight' && ( - +
{segments.map((seg, i) => ( ))}
} - label="Add flight" + label={i18n._({ id: 'node.stair.panel.addFlight', message: 'Add flight' })} onClick={handleAddFlight} /> } - label="Add landing" + label={i18n._({ id: 'node.stair.panel.addLanding', message: 'Add landing' })} onClick={handleAddLanding} />
@@ -778,9 +898,9 @@ export default function StairPanel() { )} {(node.stairType === 'curved' || node.stairType === 'spiral') && ( - + handleUpdate({ width: value })} precision={2} @@ -789,7 +909,7 @@ export default function StairPanel() { value={node.width ?? 1} /> handleUpdate({ stepCount: Math.max(2, Math.round(value)) })} precision={0} @@ -800,13 +920,13 @@ export default function StairPanel() { {node.stairType !== 'spiral' && ( handleUpdate({ fillToFloor: checked })} /> )} {(node.stairType === 'spiral' || !(node.fillToFloor ?? true)) && ( handleUpdate({ thickness: value })} precision={2} @@ -816,7 +936,7 @@ export default function StairPanel() { /> )} handleUpdate({ innerRadius: value })} precision={2} @@ -832,12 +952,21 @@ export default function StairPanel() { }) } options={[ - { label: 'Clockwise', value: 'positive' }, - { label: 'Counterclockwise', value: 'negative' }, + { + label: i18n._({ id: 'node.stair.panel.clockwise', message: 'Clockwise' }), + value: 'positive', + }, + { + label: i18n._({ + id: 'node.stair.panel.counterclockwise', + message: 'Counterclockwise', + }), + value: 'negative', + }, ]} /> handleUpdate({ @@ -853,12 +982,12 @@ export default function StairPanel() { <> handleUpdate({ showCenterColumn: checked })} /> handleUpdate({ showStepSupports: checked })} /> @@ -866,13 +995,15 @@ export default function StairPanel() { )} - + handleUpdate({ construction })} /> - + { @@ -910,7 +1041,7 @@ export default function StairPanel() { value={node.position[2]} /> { @@ -939,28 +1070,34 @@ export default function StairPanel() {
- + handleUpdate({ railingMode: value })} - options={RAILING_MODE_OPTIONS} + options={RAILING_MODE_OPTIONS.map((option) => ({ + ...option, + label: i18n._(option.label), + }))} value={node.railingMode ?? 'none'} /> {(node.railingMode ?? 'none') !== 'none' && ( <> handleUpdate({ railingStyle: value, ...(value === 'glass' || value === 'metal' ? { railingPath: 'continuous' } : {}), }) } - options={RAILING_STYLE_OPTIONS} + options={RAILING_STYLE_OPTIONS.map((option) => ({ + ...option, + label: i18n._(option.label), + }))} value={node.railingStyle ?? 'balusters'} /> handleUpdate({ railingHeight: value })} precision={2} @@ -972,18 +1109,22 @@ export default function StairPanel() { )} - + - } label="Move" onClick={handleMove} /> + } + label={i18n._({ id: 'node.stair.panel.move', message: 'Move' })} + onClick={handleMove} + /> } - label="Duplicate" + label={i18n._({ id: 'node.stair.panel.duplicate', message: 'Duplicate' })} onClick={handleDuplicate} /> } - label="Delete" + label={i18n._({ id: 'node.stair.panel.delete', message: 'Delete' })} onClick={handleDelete} /> diff --git a/packages/nodes/src/unit/unit-panel.tsx b/packages/nodes/src/unit/unit-panel.tsx index a5cfcde138..b4d8a3a5f8 100644 --- a/packages/nodes/src/unit/unit-panel.tsx +++ b/packages/nodes/src/unit/unit-panel.tsx @@ -5,10 +5,12 @@ import { type AnyNodeId, buildUnitReport, getLevelDisplayName, + type MessageDescriptor, UNIT_KINDS, type UnitKind, type UnitNode, unitWarnings, + usePascalI18n, useScene, } from '@pascal-app/core' import { @@ -24,15 +26,13 @@ import { Trash2, X } from 'lucide-react' import { useCallback, useMemo } from 'react' import { PanelSelect, PanelTextField } from '../shared/panel-fields' -const UNIT_KIND_LABELS: Record = { - apartment: 'Apartment', - 'hotel-room': 'Hotel room', - commercial: 'Commercial', - common: 'Common', +const UNIT_KIND_LABELS: Record = { + apartment: /* i18n */ { id: 'node.unit.kind.apartment', message: 'Apartment' }, + 'hotel-room': /* i18n */ { id: 'node.unit.kind.hotelRoom', message: 'Hotel room' }, + commercial: /* i18n */ { id: 'node.unit.kind.commercial', message: 'Commercial' }, + common: /* i18n */ { id: 'node.unit.kind.common', message: 'Common' }, } -const UNIT_KIND_OPTIONS = UNIT_KINDS.map((value) => ({ label: UNIT_KIND_LABELS[value], value })) - function ReportRow({ label, value }: { label: string; value: string }) { return (
@@ -43,6 +43,7 @@ function ReportRow({ label, value }: { label: string; value: string }) { } export default function UnitPanel({ node }: { node: UnitNode }) { + const i18n = usePascalI18n() const nodes = useScene((state) => state.nodes) const updateNode = useScene((state) => state.updateNode) const setSelection = useViewer((state) => state.setSelection) @@ -98,28 +99,37 @@ export default function UnitPanel({ node }: { node: UnitNode }) { const warningMessages = warnings.map((warning) => { if (warning.code === 'non-adjacent-levels') { - return 'Members sit on levels that are not adjacent.' + return i18n._({ + id: 'node.unit.panel.nonAdjacentLevels', + message: 'Members sit on levels that are not adjacent.', + }) } - return 'No zones assigned yet.' + return i18n._({ id: 'node.unit.panel.noZonesAssigned', message: 'No zones assigned yet.' }) }) return ( - - update({ name })} value={node.name} /> + + update({ name })} + value={node.name} + /> update({ kind: kind as UnitKind })} - options={UNIT_KIND_OPTIONS} + options={UNIT_KINDS.map((value) => ({ label: i18n._(UNIT_KIND_LABELS[value]), value }))} value={node.kind} /> - + {report.members.length === 0 ? (

- No rooms yet. Pick this unit from a room's panel, or draw zones while it is focused. + {i18n._({ + id: 'node.unit.unitPanel.noRoomsYetPickThisUnit', + message: + "No rooms yet. Pick this unit from a room's panel, or draw zones while it is focused.", + })}

) : ( report.members.map((member) => ( @@ -153,7 +167,15 @@ export default function UnitPanel({ node }: { node: UnitNode }) { {formatAreaLabel(member.areaM2, areaUnit, 1)}
)}

- Column {column + 1}, row {row + 1} ·{' '} - {overridden ? 'Custom infill' : 'Following wall defaults'} + {i18n._({ id: 'node.wall.curtainWallPanel.column', message: 'Column' })} {column + 1} + {i18n._({ id: 'node.wall.curtainWallPanel.row', message: ', row' })} {row + 1} ·{' '} + {overridden + ? i18n._({ + id: 'node.wall.curtainWallPanel.customInfill', + message: 'Custom infill', + }) + : i18n._({ + id: 'node.wall.curtainWallPanel.followingWallDefaults', + message: 'Following wall defaults', + })}

setColumn(Math.round(value) - 1)} @@ -538,7 +721,7 @@ export function CurtainWallPanel({ value={column + 1} /> setRow(Math.round(value) - 1)} @@ -547,9 +730,12 @@ export function CurtainWallPanel({ value={row + 1} /> ({ ...option, label: i18n._(option.label) }))} value={selectedType} />

- Use the Door or Window tool to add an opening through the wall. + {i18n._({ + id: 'node.wall.curtainWallPanel.useTheDoorOrWindowTool', + message: 'Use the Door or Window tool to add an opening through the wall.', + })}

)}
{hasGlass && ( - + {paintedGlass && (
-

Glass appearance is controlled by the paint tool.

+

+ {i18n._({ + id: 'node.wall.curtainWallPanel.glassAppearanceIsControlledByThe', + message: 'Glass appearance is controlled by the paint tool.', + })} +

)} @@ -592,7 +797,7 @@ export function CurtainWallPanel({ onCancel={onCancel} restoreOnCommit={false} previewWhileTyping - label="Opacity" + label={i18n._({ id: 'node.wall.curtainWallPanel.opacity', message: 'Opacity' })} max={100} min={5} onChange={(value) => update({ glassOpacity: value / 100 }, true)} @@ -606,7 +811,10 @@ export function CurtainWallPanel({ onCancel={onCancel} restoreOnCommit={false} previewWhileTyping - label="Surface roughness" + label={i18n._({ + id: 'node.wall.curtainWallPanel.surfaceRoughness', + message: 'Surface roughness', + })} max={1} min={0} onChange={(glassRoughness) => update({ glassRoughness }, true)} @@ -615,9 +823,12 @@ export function CurtainWallPanel({ value={config.glassRoughness} />
)}

- Low roughness is smooth; high roughness gives a matte surface in rendered shading. + {i18n._({ + id: 'node.wall.curtainWallPanel.lowRoughnessIsSmoothHighRoughness', + message: + 'Low roughness is smooth; high roughness gives a matte surface in rendered shading.', + })}

)} diff --git a/packages/nodes/src/wall/panel.tsx b/packages/nodes/src/wall/panel.tsx index 72fa69193e..ded063e748 100644 --- a/packages/nodes/src/wall/panel.tsx +++ b/packages/nodes/src/wall/panel.tsx @@ -14,6 +14,7 @@ import { getMaxWallCurveOffset, getWallAssemblyPreset, getWallCurveLength, + type MessageDescriptor, normalizeWallCurveOffset, resolveWallAssembly, runAsSingleSceneHistoryStep, @@ -22,6 +23,7 @@ import { STUCCO_3_COAT, terrainSupportLift, useLiveNodeOverrides, + usePascalI18n, useScene, WALL_ASSEMBLY_PRESETS, WALL_CHAIR_RAIL_DEFAULT, @@ -93,32 +95,45 @@ type WallTrimKey = 'skirting' | 'crown' | 'chairRail' const WALL_TRIM_PROFILE_OPTIONS: Record< WallTrimKey, - Array<{ label: string; value: WallTrimProfile }> + Array<{ label: MessageDescriptor; value: WallTrimProfile }> > = { skirting: [ - { label: 'Flat', value: 'flat' }, - { label: 'Modern', value: 'base-modern' }, - { label: 'Colonial', value: 'base-colonial' }, - { label: 'Shoe', value: 'base-shoe' }, - { label: 'Ogee', value: 'base-ogee' }, + { label: /* i18n */ { id: 'node.wall.panel.flat', message: 'Flat' }, value: 'flat' }, + { label: /* i18n */ { id: 'node.wall.panel.modern', message: 'Modern' }, value: 'base-modern' }, + { + label: /* i18n */ { id: 'node.wall.panel.colonial', message: 'Colonial' }, + value: 'base-colonial', + }, + { label: /* i18n */ { id: 'node.wall.panel.shoe', message: 'Shoe' }, value: 'base-shoe' }, + { label: /* i18n */ { id: 'node.wall.panel.ogee', message: 'Ogee' }, value: 'base-ogee' }, ], crown: [ - { label: 'Flat', value: 'flat' }, - { label: 'Cove', value: 'crown-cove' }, - { label: 'Ogee', value: 'crown-ogee' }, - { label: 'Craft', value: 'crown-craftsman' }, - { label: 'Layered', value: 'crown-layered' }, + { label: /* i18n */ { id: 'node.wall.panel.flat', message: 'Flat' }, value: 'flat' }, + { label: /* i18n */ { id: 'node.wall.panel.cove', message: 'Cove' }, value: 'crown-cove' }, + { label: /* i18n */ { id: 'node.wall.panel.ogee', message: 'Ogee' }, value: 'crown-ogee' }, + { + label: /* i18n */ { id: 'node.wall.panel.craft', message: 'Craft' }, + value: 'crown-craftsman', + }, + { + label: /* i18n */ { id: 'node.wall.panel.layered', message: 'Layered' }, + value: 'crown-layered', + }, ], chairRail: [ - { label: 'Flat', value: 'flat' }, - { label: 'Round', value: 'rail-rounded' }, - { label: 'Ogee', value: 'rail-ogee' }, - { label: 'Picture', value: 'rail-picture' }, - { label: 'Step', value: 'rail-stepped' }, + { label: /* i18n */ { id: 'node.wall.panel.flat', message: 'Flat' }, value: 'flat' }, + { label: /* i18n */ { id: 'node.wall.panel.round', message: 'Round' }, value: 'rail-rounded' }, + { label: /* i18n */ { id: 'node.wall.panel.ogee', message: 'Ogee' }, value: 'rail-ogee' }, + { + label: /* i18n */ { id: 'node.wall.panel.picture', message: 'Picture' }, + value: 'rail-picture', + }, + { label: /* i18n */ { id: 'node.wall.panel.step', message: 'Step' }, value: 'rail-stepped' }, ], } export default function WallPanel() { + const i18n = usePascalI18n() const selectedId = useViewer((s) => s.selection.selectedIds[0]) const unit = useViewer((s) => s.unit) const setSelection = useViewer((s) => s.setSelection) @@ -278,26 +293,32 @@ export default function WallPanel() { - + handleUpdate({ wallType })} options={[ - { label: 'Standard', value: 'standard' }, - { label: 'Curtain wall', value: 'curtain' }, + { + label: i18n._({ id: 'node.wall.panel.standard', message: 'Standard' }), + value: 'standard', + }, + { + label: i18n._({ id: 'node.wall.panel.curtainWall', message: 'Curtain wall' }), + value: 'curtain', + }, ]} value={node.wallType ?? 'standard'} /> - + @@ -311,19 +332,26 @@ export default function WallPanel() { value={displayLength} />
- Top + {i18n._({ id: 'node.wall.panel.top', message: 'Top' })}
{isPlaneBound ? (
- Currently {formatLinearMeasurement(height, unit)} + {i18n._({ id: 'node.wall.panel.currently', message: 'Currently' })}{' '} + {formatLinearMeasurement(height, unit)}
) : ( @@ -346,19 +374,25 @@ export default function WallPanel() { /> )}
- Bottom + {i18n._({ id: 'node.wall.panel.bottom', message: 'Bottom' })}
{followsTerrain && (
- Extends downward to meet the terrain. Height and top stay unchanged. + {i18n._({ + id: 'node.wall.panel.extendsDownwardToMeetTheTerrain', + message: 'Extends downward to meet the terrain. Height and top stay unchanged.', + })}
)} {node.assembly && node.wallType !== 'curtain' ? ( @@ -367,10 +401,11 @@ export default function WallPanel() { // section is the only place thickness changes.
- Thickness + {i18n._({ id: 'node.wall.panel.thickness', message: 'Thickness' })} - {formatLinearMeasurement(thickness, unit)} · from assembly + {formatLinearMeasurement(thickness, unit)}{' '} + {i18n._({ id: 'node.wall.panel.fromAssembly', message: '· from assembly' })}
) : ( @@ -379,7 +414,11 @@ export default function WallPanel() { onCancel={handleCancel} restoreOnCommit={false} previewWhileTyping - label={node.wallType === 'curtain' ? 'Frame depth' : 'Thickness'} + label={ + node.wallType === 'curtain' + ? i18n._({ id: 'node.wall.panel.frameDepth', message: 'Frame depth' }) + : i18n._({ id: 'node.wall.panel.thickness', message: 'Thickness' }) + } max={metersToLinearUnit(1000, unit)} min={metersToLinearUnit(0.05, unit)} onChange={(v) => @@ -396,7 +435,9 @@ export default function WallPanel() { value={Math.round(displayThickness * 1000) / 1000} /> )} -
Reference
+
+ {i18n._({ id: 'node.wall.panel.reference', message: 'Reference' })} +
{reference && ( @@ -455,7 +496,7 @@ export default function WallPanel() { + } - label="Curve" + label={i18n._({ id: 'node.wall.panel.curve', message: 'Curve' })} onClick={handleCurve} /> @@ -505,6 +546,7 @@ export default function WallPanel() { * its code to read and a way to take it off, back to the face's own finish. */ function WallFaceScriptSection({ wallId }: { wallId: string }) { + const i18n = usePascalI18n() const shas = useScene( useShallow((scene) => { const wall = scene.nodes[wallId as AnyNodeId] @@ -515,7 +557,9 @@ function WallFaceScriptSection({ wallId }: { wallId: string }) { ) if (!(shas[0] || shas[1])) return null return ( - + {(['a', 'b'] as const).map((face, index) => { const sha = shas[index] return sha ? : null @@ -525,14 +569,19 @@ function WallFaceScriptSection({ wallId }: { wallId: string }) { } function WallFaceScriptRow({ face, sha, wallId }: { face: WallFace; sha: string; wallId: string }) { + const i18n = usePascalI18n() const [code, setCode] = useState<{ sha: string; text: string } | null>(null) const [open, setOpen] = useState(false) + const unreadable = i18n._({ + id: 'editor.panels.scriptUnreadable', + message: 'The script could not be read.', + }) const toggleCode = () => { setOpen((shown) => !shown) if (code?.sha === sha) return finishScriptCode(sha).then( - (text) => setCode({ sha, text: text ?? 'The script could not be read.' }), - () => setCode({ sha, text: 'The script could not be read.' }), + (text) => setCode({ sha, text: text ?? unreadable }), + () => setCode({ sha, text: unreadable }), ) } const remove = () => { @@ -549,27 +598,33 @@ function WallFaceScriptRow({ face, sha, wallId }: { face: WallFace; sha: string; return (
- Side {face.toUpperCase()} + + {i18n._({ id: 'node.wall.panel.side', message: 'Side' })} {face.toUpperCase()} +
{open && (
-          {code?.sha === sha ? code.text : 'Loading…'}
+          {code?.sha === sha
+            ? code.text
+            : i18n._({ id: 'node.wall.panel.loading', message: 'Loading…' })}
         
)}
@@ -595,6 +650,7 @@ function WallTrimSection({ unitLabel: string wallHeightMeters: number }) { + const i18n = usePascalI18n() const updateTrim = (patch: Partial>) => onUpdate(wallTrimPatch(node, trimKey, patch)) const profileOptions = WALL_TRIM_PROFILE_OPTIONS[trimKey] @@ -606,7 +662,21 @@ function WallTrimSection({ updateTrim({ enabled: !trimValue.enabled })} /> @@ -615,9 +685,9 @@ function WallTrimSection({ updateTrim({ sides: next as any })} options={[ - { label: 'Side A', value: 'a' }, - { label: 'Side B', value: 'b' }, - { label: 'Both', value: 'both' }, + { label: i18n._({ id: 'node.wall.panel.sideA', message: 'Side A' }), value: 'a' }, + { label: i18n._({ id: 'node.wall.panel.sideB', message: 'Side B' }), value: 'b' }, + { label: i18n._({ id: 'node.wall.panel.both', message: 'Both' }), value: 'both' }, ]} value={ trimValue.sides === 'interior' @@ -629,11 +699,11 @@ function WallTrimSection({ /> updateTrim({ profile: next })} - options={profileOptions} + options={profileOptions.map((option) => ({ ...option, label: i18n._(option.label) }))} value={selectedProfile} /> @@ -650,7 +720,7 @@ function WallTrimSection({ value={metersToLinearUnit(trimValue.height, unit)} /> @@ -668,7 +738,7 @@ function WallTrimSection({ /> {trimKey === 'chairRail' && ( @@ -813,33 +883,49 @@ function ThicknessInput({ ) } -const EXTERIOR_FINISH_OPTIONS: Array<{ value: WallAssemblyExteriorFinish; label: string }> = [ - { value: 'none', label: 'None' }, - { value: 'siding', label: 'Lap siding' }, - { value: 'fiber-cement', label: 'Fiber cement' }, - { value: 'stucco', label: 'Stucco' }, - { value: 'brick', label: 'Brick veneer' }, - { value: 'stone', label: 'Stone veneer' }, +const EXTERIOR_FINISH_OPTIONS: Array<{ + value: WallAssemblyExteriorFinish + label: MessageDescriptor +}> = [ + { value: 'none', label: /* i18n */ { id: 'node.wall.panel.none', message: 'None' } }, + { value: 'siding', label: /* i18n */ { id: 'node.wall.panel.lapSiding', message: 'Lap siding' } }, + { + value: 'fiber-cement', + label: /* i18n */ { id: 'node.wall.panel.fiberCement', message: 'Fiber cement' }, + }, + { value: 'stucco', label: /* i18n */ { id: 'node.wall.panel.stucco', message: 'Stucco' } }, + { + value: 'brick', + label: /* i18n */ { id: 'node.wall.panel.brickVeneer', message: 'Brick veneer' }, + }, + { + value: 'stone', + label: /* i18n */ { id: 'node.wall.panel.stoneVeneer', message: 'Stone veneer' }, + }, ] -const SHEATHING_OPTIONS: Array<{ value: WallAssemblySheathingMaterial; label: string }> = [ - { value: 'none', label: 'None' }, - { value: 'osb', label: 'OSB' }, - { value: 'plywood', label: 'Plywood' }, - { value: 'gypsum', label: 'Gypsum' }, -] +const SHEATHING_OPTIONS: Array<{ value: WallAssemblySheathingMaterial; label: MessageDescriptor }> = + [ + { value: 'none', label: /* i18n */ { id: 'node.wall.panel.none', message: 'None' } }, + { value: 'osb', label: /* i18n */ { id: 'node.wall.panel.osb', message: 'OSB' } }, + { value: 'plywood', label: /* i18n */ { id: 'node.wall.panel.plywood', message: 'Plywood' } }, + { value: 'gypsum', label: /* i18n */ { id: 'node.wall.panel.gypsum', message: 'Gypsum' } }, + ] -const FRAMING_OPTIONS: Array<{ value: WallAssemblyFramingKind; label: string }> = [ - { value: 'wood', label: 'Wood studs' }, - { value: 'lgs', label: 'Steel studs' }, - { value: 'cmu', label: 'CMU' }, - { value: 'icf', label: 'ICF' }, +const FRAMING_OPTIONS: Array<{ value: WallAssemblyFramingKind; label: MessageDescriptor }> = [ + { value: 'wood', label: /* i18n */ { id: 'node.wall.panel.woodStuds', message: 'Wood studs' } }, + { value: 'lgs', label: /* i18n */ { id: 'node.wall.panel.steelStuds', message: 'Steel studs' } }, + { value: 'cmu', label: /* i18n */ { id: 'node.wall.panel.cmu', message: 'CMU' } }, + { value: 'icf', label: /* i18n */ { id: 'node.wall.panel.icf', message: 'ICF' } }, ] -const INTERIOR_FINISH_OPTIONS: Array<{ value: WallAssemblyInteriorFinish; label: string }> = [ - { value: 'none', label: 'None' }, - { value: 'drywall', label: 'Drywall' }, - { value: 'plaster', label: 'Plaster' }, +const INTERIOR_FINISH_OPTIONS: Array<{ + value: WallAssemblyInteriorFinish + label: MessageDescriptor +}> = [ + { value: 'none', label: /* i18n */ { id: 'node.wall.panel.none', message: 'None' } }, + { value: 'drywall', label: /* i18n */ { id: 'node.wall.panel.drywall', message: 'Drywall' } }, + { value: 'plaster', label: /* i18n */ { id: 'node.wall.panel.plaster', message: 'Plaster' } }, ] /** Cited default thickness for a finish the user just switched to. */ @@ -861,6 +947,7 @@ function WallAssemblySection({ onUpdate: (updates: Partial) => void unit: 'metric' | 'imperial' }) { + const i18n = usePascalI18n() const stack = node.assembly // The cladding / sheathing / framing / interior editor works on the WS5 view // of the F2 stack; a stack it cannot express is listed read-only. @@ -878,8 +965,8 @@ function WallAssemblySection({ } return ( - - + + { @@ -918,7 +1009,7 @@ function WallAssemblySection({ > {EXTERIOR_FINISH_OPTIONS.map((option) => ( ))} @@ -936,7 +1027,7 @@ function WallAssemblySection({ )} - + @@ -976,7 +1067,7 @@ function WallAssemblySection({ )} - + @@ -1005,7 +1096,7 @@ function WallAssemblySection({ /> - + @@ -1042,7 +1133,7 @@ function WallAssemblySection({
- Total thickness + {i18n._({ id: 'node.wall.panel.totalThickness', message: 'Total thickness' })} {formatLayerThickness(assemblyThickness(stack!), unit)} @@ -1051,23 +1142,36 @@ function WallAssemblySection({ {resolved.kind === 'partition' && (
- Partition: the interior finish is applied to both faces. + {i18n._({ + id: 'node.wall.panel.partitionTheInteriorFinishIsApplied', + message: 'Partition: the interior finish is applied to both faces.', + })}
)} {resolved.kind === 'envelope' && resolved.exteriorSide == null && (
- Which face is outside is undetermined (no room detected on either side) — the exterior - layers are drawn on side B. + {i18n._({ + id: 'node.wall.panel.whichFaceIsOutsideIsUndetermined', + message: + 'Which face is outside is undetermined (no room detected on either side) — the exterior layers are drawn on side B.', + })}
)} {presetNote && (
- Unverified: {presetNote} + {i18n._({ + id: 'node.wall.panel.unverifiedPresetnote', + message: 'Unverified: {presetNote}', + values: { presetNote }, + })}
)}
- Layer thicknesses follow the 2021 IRC assembly data. Drafting aid, not engineering — - verify with the authority having jurisdiction. + {i18n._({ + id: 'node.wall.panel.layerThicknessesFollowThe2021Irc', + message: + 'Layer thicknesses follow the 2021 IRC assembly data. Drafting aid, not engineering — verify with the authority having jurisdiction.', + })}
)} @@ -1082,7 +1186,7 @@ function WallAssemblySection({ ))}
- Total thickness + {i18n._({ id: 'node.wall.panel.totalThickness', message: 'Total thickness' })} {formatLayerThickness(assemblyThickness(stack), unit)} diff --git a/packages/nodes/src/window/panel.tsx b/packages/nodes/src/window/panel.tsx index 4aeb8f6688..7732a72e62 100644 --- a/packages/nodes/src/window/panel.tsx +++ b/packages/nodes/src/window/panel.tsx @@ -8,6 +8,7 @@ import { runAsSingleSceneHistoryStep, scriptImages, useInteractive, + usePascalI18n, useScene, type WindowNode, } from '@pascal-app/core' @@ -105,6 +106,7 @@ function syncCornerPartner(windowId: string, updates: Partial) { } export default function WindowPanel() { + const i18n = usePascalI18n() const selectedId = useViewer((s) => s.selection.selectedIds[0]) const setSelection = useViewer((s) => s.setSelection) const deleteNode = useScene((s) => s.deleteNode) @@ -301,13 +303,13 @@ export default function WindowPanel() { const showFlipSide = !isOpening const operationLabel = isTrackSashWindow ? windowType === 'sliding' - ? 'Slide' - : 'Raise' + ? i18n._({ id: 'node.window.operation.slide', message: 'Slide' }) + : i18n._({ id: 'node.window.operation.raise', message: 'Raise' }) : windowType === 'casement' - ? 'Swing' + ? i18n._({ id: 'node.window.operation.swing', message: 'Swing' }) : windowType === 'louvered' - ? 'Slats' - : 'Tilt' + ? i18n._({ id: 'node.window.operation.slats', message: 'Slats' }) + : i18n._({ id: 'node.window.operation.tilt', message: 'Tilt' }) const setOperationState = (value: number) => { useInteractive.getState().cancelWindowAnimation(node.id) @@ -385,11 +387,11 @@ export default function WindowPanel() { {!scripted && ( - + handleUpdate({ @@ -407,8 +409,14 @@ export default function WindowPanel() { }) } options={[ - { value: 'window', label: 'Window' }, - { value: 'opening', label: 'Opening' }, + { + value: 'window', + label: i18n._({ id: 'node.window.panel.window', message: 'Window' }), + }, + { + value: 'opening', + label: i18n._({ id: 'node.window.panel.opening', message: 'Opening' }), + }, ]} value={node.openingKind ?? 'window'} /> @@ -416,7 +424,9 @@ export default function WindowPanel() { )} {showWindowTypeSection && ( - +
{windowTypeOptions.map((option) => { const isSelected = displayedWindowType === option.value @@ -452,8 +462,11 @@ export default function WindowPanel() { }) } options={[ - { value: 'up', label: 'Up' }, - { value: 'down', label: 'Down' }, + { value: 'up', label: i18n._({ id: 'node.window.panel.up', message: 'Up' }) }, + { + value: 'down', + label: i18n._({ id: 'node.window.panel.down', message: 'Down' }), + }, ]} value={awningDirection} /> @@ -466,8 +479,14 @@ export default function WindowPanel() { handleUpdate({ casementStyle: value as WindowNode['casementStyle'] }) } options={[ - { value: 'single', label: 'Single' }, - { value: 'french', label: 'French' }, + { + value: 'single', + label: i18n._({ id: 'node.window.panel.single', message: 'Single' }), + }, + { + value: 'french', + label: i18n._({ id: 'node.window.panel.french', message: 'French' }), + }, ]} value={node.casementStyle ?? 'single'} /> @@ -477,8 +496,14 @@ export default function WindowPanel() { handleUpdate({ hingesSide: value as WindowNode['hingesSide'] }) } options={[ - { value: 'left', label: 'Left' }, - { value: 'right', label: 'Right' }, + { + value: 'left', + label: i18n._({ id: 'node.window.panel.left', message: 'Left' }), + }, + { + value: 'right', + label: i18n._({ id: 'node.window.panel.right', message: 'Right' }), + }, ]} value={node.hingesSide ?? 'left'} /> @@ -503,7 +528,7 @@ export default function WindowPanel() { )} {showStyleSection && ( - +
{WINDOW_STYLE_CHOICES.map((style) => (
selectedId && setCornerWidth(selectedId, v)} precision={2} @@ -561,7 +594,7 @@ export default function WindowPanel() { value={node.width} /> setCornerWidth(corner.partner.id, v)} precision={2} @@ -574,8 +607,14 @@ export default function WindowPanel() { @@ -591,19 +630,22 @@ export default function WindowPanel() { onClick={wrapTheCorner} type="button" > - Wrap the corner + {i18n._({ id: 'node.window.panel.wrapTheCorner', message: 'Wrap the corner' })}
)}
)} - + {!corner?.paired && ( - Xpos + X + + {i18n._({ id: 'node.window.panel.pos', message: 'pos' })} + } onChange={(v) => handleUpdate({ position: [v, node.position[1], node.position[2]] })} @@ -616,7 +658,10 @@ export default function WindowPanel() { - Ypos + Y + + {i18n._({ id: 'node.window.panel.pos', message: 'pos' })} + } onChange={(v) => handleUpdate({ position: [node.position[0], v, node.position[2]] })} @@ -630,7 +675,7 @@ export default function WindowPanel() { } - label="Flip Side" + label={i18n._({ id: 'node.window.panel.flipSide', message: 'Flip Side' })} onClick={handleFlip} />
@@ -640,15 +685,18 @@ export default function WindowPanel() { {scripted && } {!scripted && ( - + {limits && (

- Size is limited to the wall, including clearance for the opening frame. + {i18n._({ + id: 'node.window.panel.sizeIsLimitedToTheWall', + message: 'Size is limited to the wall, including clearance for the opening frame.', + })}

)} {!corner?.paired && ( preview?.preview(getDimensionUpdates({ width: v }))} @@ -663,7 +711,7 @@ export default function WindowPanel() { /> )} preview?.preview(getDimensionUpdates({ height: v }))} @@ -680,7 +728,7 @@ export default function WindowPanel() { )} {showWindowShapeSection && ( - + handleUpdate({ @@ -698,9 +746,15 @@ export default function WindowPanel() { }) } options={[ - { value: 'rectangle', label: 'Rect' }, - { value: 'rounded', label: 'Rounded' }, - { value: 'arch', label: 'Arch' }, + { + value: 'rectangle', + label: i18n._({ id: 'node.window.panel.rect', message: 'Rect' }), + }, + { + value: 'rounded', + label: i18n._({ id: 'node.window.panel.rounded', message: 'Rounded' }), + }, + { value: 'arch', label: i18n._({ id: 'node.window.panel.arch', message: 'Arch' }) }, ]} value={windowShape} /> @@ -711,14 +765,17 @@ export default function WindowPanel() { handleUpdate({ openingRadiusMode: value as WindowNode['openingRadiusMode'] }) } options={[ - { value: 'all', label: 'All' }, - { value: 'individual', label: 'Individual' }, + { value: 'all', label: i18n._({ id: 'node.window.panel.all', message: 'All' }) }, + { + value: 'individual', + label: i18n._({ id: 'node.window.panel.individual', message: 'Individual' }), + }, ]} value={openingRadiusMode} /> {openingRadiusMode === 'all' ? ( previewWindowUpdate('cornerRadius', value)} @@ -734,10 +791,10 @@ export default function WindowPanel() { ) : ( <> {[ - ['Top Left', 0], - ['Top Right', 1], - ['Bottom Right', 2], - ['Bottom Left', 3], + [i18n._({ id: 'node.cornerRadius.topLeft', message: 'Top Left' }), 0], + [i18n._({ id: 'node.cornerRadius.topRight', message: 'Top Right' }), 1], + [i18n._({ id: 'node.cornerRadius.bottomRight', message: 'Bottom Right' }), 2], + [i18n._({ id: 'node.cornerRadius.bottomLeft', message: 'Bottom Left' }), 3], ].map(([label, index]) => ( )} previewWindowUpdate('openingRevealRadius', value)} @@ -776,7 +833,7 @@ export default function WindowPanel() { {windowShape === 'arch' && (
previewWindowUpdate('archHeight', value)} @@ -795,15 +852,23 @@ export default function WindowPanel() { )} {showOpeningShapeSection && ( - + handleUpdate({ openingShape: value as WindowNode['openingShape'] }) } options={[ - { value: 'rectangle', label: 'Rect' }, - { value: 'rounded', label: 'Rounded' }, - { value: 'arch', label: 'Arch' }, + { + value: 'rectangle', + label: i18n._({ id: 'node.window.panel.rect', message: 'Rect' }), + }, + { + value: 'rounded', + label: i18n._({ id: 'node.window.panel.rounded', message: 'Rounded' }), + }, + { value: 'arch', label: i18n._({ id: 'node.window.panel.arch', message: 'Arch' }) }, ]} value={openingShape} /> @@ -814,14 +879,17 @@ export default function WindowPanel() { handleUpdate({ openingRadiusMode: value as WindowNode['openingRadiusMode'] }) } options={[ - { value: 'all', label: 'All' }, - { value: 'individual', label: 'Individual' }, + { value: 'all', label: i18n._({ id: 'node.window.panel.all', message: 'All' }) }, + { + value: 'individual', + label: i18n._({ id: 'node.window.panel.individual', message: 'Individual' }), + }, ]} value={openingRadiusMode} /> {openingRadiusMode === 'all' ? ( previewWindowUpdate('cornerRadius', value)} @@ -837,10 +905,10 @@ export default function WindowPanel() { ) : ( <> {[ - ['Top Left', 0], - ['Top Right', 1], - ['Bottom Right', 2], - ['Bottom Left', 3], + [i18n._({ id: 'node.cornerRadius.topLeft', message: 'Top Left' }), 0], + [i18n._({ id: 'node.cornerRadius.topRight', message: 'Top Right' }), 1], + [i18n._({ id: 'node.cornerRadius.bottomRight', message: 'Bottom Right' }), 2], + [i18n._({ id: 'node.cornerRadius.bottomLeft', message: 'Bottom Left' }), 3], ].map(([label, index]) => ( )} previewWindowUpdate('openingRevealRadius', value)} @@ -879,7 +947,7 @@ export default function WindowPanel() { {openingShape === 'arch' && (
previewWindowUpdate('archHeight', value)} @@ -900,9 +968,9 @@ export default function WindowPanel() { {!isOpening && !scripted && ( <> {showFrameSection && ( - + previewWindowUpdate('frameThickness', v)} onCommit={(v) => commitWindowPreview('frameThickness', v)} @@ -915,7 +983,7 @@ export default function WindowPanel() { value={node.frameThickness} /> previewWindowUpdate('frameDepth', v)} onCommit={(v) => commitWindowPreview('frameDepth', v)} @@ -931,9 +999,9 @@ export default function WindowPanel() { )} {showGridSection && ( - + { @@ -945,7 +1013,7 @@ export default function WindowPanel() { value={numCols} /> { @@ -960,7 +1028,7 @@ export default function WindowPanel() { {numCols > 1 && (
- Col Widths + {i18n._({ id: 'node.window.panel.colWidths', message: 'Col Widths' })}
{normCols.map((ratio, i) => ( handleUpdate({ columnDividerThickness: v })} @@ -993,7 +1061,7 @@ export default function WindowPanel() { {numRows > 1 && (
- Row Heights + {i18n._({ id: 'node.window.panel.rowHeights', message: 'Row Heights' })}
{normRows.map((ratio, i) => ( handleUpdate({ rowDividerThickness: v })} @@ -1026,16 +1094,16 @@ export default function WindowPanel() { )} {showSillSection && ( - + handleUpdate({ sill: checked })} /> {node.sill && (
handleUpdate({ sillDepth: v })} precision={3} @@ -1044,7 +1112,7 @@ export default function WindowPanel() { value={node.sillDepth} /> handleUpdate({ sillThickness: v })} precision={3} @@ -1059,18 +1127,22 @@ export default function WindowPanel() { )} - + - } label="Move" onClick={handleMove} /> + } + label={i18n._({ id: 'node.window.panel.move', message: 'Move' })} + onClick={handleMove} + /> } - label="Duplicate" + label={i18n._({ id: 'node.window.panel.duplicate', message: 'Duplicate' })} onClick={handleDuplicate} /> } - label="Delete" + label={i18n._({ id: 'node.window.panel.delete', message: 'Delete' })} onClick={handleDelete} /> diff --git a/packages/nodes/src/zone/quantities-panel.tsx b/packages/nodes/src/zone/quantities-panel.tsx index e0b8b0426f..c2210b8add 100644 --- a/packages/nodes/src/zone/quantities-panel.tsx +++ b/packages/nodes/src/zone/quantities-panel.tsx @@ -5,6 +5,7 @@ import { deriveZoneQuantityReport, type UnitNode, useLiveNodeOverrides, + usePascalI18n, useScene, type ZoneNode, type ZoneQuantityValue, @@ -34,10 +35,14 @@ function ZonePlanSketch({ polygon: readonly Point2D[] unit: 'metric' | 'imperial' }) { + const i18n = usePascalI18n() if (polygon.length < 3) { return (
- Zone boundary unavailable + {i18n._({ + id: 'node.zone.quantitiesPanel.zoneBoundaryUnavailable', + message: 'Zone boundary unavailable', + })}
) } @@ -66,7 +71,10 @@ function ZonePlanSketch({ return (
{abbreviation} {label} - {quantity.status === 'available' ? format(quantity.value) : 'Not proven'} + {quantity.status === 'available' + ? format(quantity.value) + : i18n._({ id: 'node.zone.quantitiesPanel.notProven', message: 'Not proven' })}
@@ -157,6 +168,7 @@ function QuantityRow({ } function ZoneUnitPanel({ zone }: { zone: ZoneNode }) { + const i18n = usePascalI18n() const units = useScene(useShallow((state) => buildingUnitsForZone(zone, (id) => state.nodes[id]))) if (units.length === 0) return null @@ -181,13 +193,16 @@ function ZoneUnitPanel({ zone }: { zone: ZoneNode }) { } return ( - + ({ label: unit.name || 'Unit', value: unit.id })), + { label: i18n._({ id: 'node.zone.quantitiesPanel.none', message: 'None' }), value: '' }, + ...units.map((unit) => ({ + label: unit.name || i18n._({ id: 'node.zone.quantitiesPanel.unit', message: 'Unit' }), + value: unit.id, + })), ]} value={current?.id ?? ''} /> @@ -196,6 +211,7 @@ function ZoneUnitPanel({ zone }: { zone: ZoneNode }) { } export default function ZoneQuantitiesPanel() { + const i18n = usePascalI18n() const selectedZoneId = useViewer((state) => state.selection.zoneId) const unit = useViewer((state) => state.unit) const metricNotation = useViewer((state) => state.metricNotation) @@ -230,13 +246,22 @@ export default function ZoneQuantitiesPanel() { <>
{effectiveZone.name} - {report.classification === 'enclosed-room' ? 'Enclosed room' : 'Footprint only'} + {report.classification === 'enclosed-room' + ? i18n._({ id: 'node.zone.quantitiesPanel.enclosedRoom', message: 'Enclosed room' }) + : i18n._({ + id: 'node.zone.quantitiesPanel.footprintOnly', + message: 'Footprint only', + })}
@@ -258,19 +283,22 @@ export default function ZoneQuantitiesPanel() { formatAreaLabel(value, unit, 2)} - label="Wall surface" + label={i18n._({ id: 'node.zone.quantitiesPanel.wallSurface', message: 'Wall surface' })} quantity={report.wallSurface} /> formatAreaLabel(value, unit, 2)} - label="Floor surface" + label={i18n._({ + id: 'node.zone.quantitiesPanel.floorSurface', + message: 'Floor surface', + })} quantity={report.floorSurface} /> formatVolumeLabel(value, unit, 2)} - label="Volume" + label={i18n._({ id: 'node.zone.quantitiesPanel.volume', message: 'Volume' })} quantity={report.volume} />
From f85f958eb476f308e2bea78b0fbe2125e984c7d2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 09:27:46 +0000 Subject: [PATCH 05/22] i18n inspector: rejoin sentences the codemod split around values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Floor top, hole rows, flight measurements, curtain-wall cells, contour summary, the roof's storey note, glazing grid counts and "Currently …" readouts are whole messages with values and ICU plurals. --- .../ui/panels/floor-foundation-panel.tsx | 12 ++++- .../ui/panels/floor-opening-panel.tsx | 17 +++++-- .../src/components/ui/panels/room-panel.tsx | 24 ++++++++-- packages/nodes/src/ceiling/panel.tsx | 48 ++++++++++++------- packages/nodes/src/door/panel.tsx | 6 ++- .../nodes/src/roof/glazing-panel-editor.tsx | 14 +++--- packages/nodes/src/roof/panel.tsx | 19 ++++---- .../nodes/src/shared/system-check-panel.tsx | 11 ++--- packages/nodes/src/site/panel.tsx | 20 +++++--- packages/nodes/src/slab/panel.tsx | 29 ++++++++--- packages/nodes/src/stair/panel.tsx | 38 ++++++++++----- .../nodes/src/wall/curtain-wall-panel.tsx | 25 +++++----- packages/nodes/src/wall/panel.tsx | 20 ++++++-- packages/nodes/src/window/panel.tsx | 16 ++++--- 14 files changed, 200 insertions(+), 99 deletions(-) diff --git a/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx b/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx index 53acb636c9..b4e9d65ced 100644 --- a/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx +++ b/packages/editor/src/components/ui/panels/floor-foundation-panel.tsx @@ -521,7 +521,11 @@ export function FloorFoundationPanel({ node, onClose }: { node: SlabNode; onClos )} {upper && (

- {i18n._({ id: 'editor.panels.floorFoundationPanel.floorTop', message: 'Floor top +' })}{length(floorTop)} + {i18n._({ + id: 'editor.panels.floorFoundationPanel.floorTopAbove', + message: 'Floor top +{height}', + values: { height: length(floorTop) }, + })}

)} )}

- {i18n._({ id: 'editor.panels.floorFoundationPanel.floorTop2', message: 'Floor top' })}{' '}{length(floorTop)} + {i18n._({ + id: 'editor.panels.floorFoundationPanel.floorTopValue', + message: 'Floor top {height}', + values: { height: length(floorTop) }, + })}

)} diff --git a/packages/editor/src/components/ui/panels/floor-opening-panel.tsx b/packages/editor/src/components/ui/panels/floor-opening-panel.tsx index b85eb2acce..1e9fa6e5d3 100644 --- a/packages/editor/src/components/ui/panels/floor-opening-panel.tsx +++ b/packages/editor/src/components/ui/panels/floor-opening-panel.tsx @@ -92,8 +92,17 @@ export function FloorOpeningPanel({ openingId }: { openingId: string }) { >

- {formatAreaLabel(area([{ outer: opening.polygon, holes: [] }]), unit, 2)} - {owned ? i18n._({ id: 'editor.panels.floorOpeningPanel.shapeFollowsItsOwner', message: ' · Shape follows its owner.' }) : i18n._({ id: 'editor.panels.floorOpeningPanel.dragItsCornersToChangeThe', message: ' · Drag its corners to change the shape.' })} + {owned + ? i18n._({ + id: 'editor.panels.floorOpeningPanel.areaOwned', + message: '{area} · Shape follows its owner.', + values: { area: formatAreaLabel(area([{ outer: opening.polygon, holes: [] }]), unit, 2) }, + }) + : i18n._({ + id: 'editor.panels.floorOpeningPanel.areaDragCorners', + message: '{area} · Drag its corners to change the shape.', + values: { area: formatAreaLabel(area([{ outer: opening.polygon, holes: [] }]), unit, 2) }, + })}

{owned && ( )} {hosted ? ( diff --git a/packages/editor/src/components/ui/panels/room-panel.tsx b/packages/editor/src/components/ui/panels/room-panel.tsx index 4304832c0d..788b0ee50b 100644 --- a/packages/editor/src/components/ui/panels/room-panel.tsx +++ b/packages/editor/src/components/ui/panels/room-panel.tsx @@ -56,6 +56,7 @@ import { } from './room-construction-rows' import { type RoomNameOption, roomNameOptions } from './room-name-options' import { localizedLevelName } from '../../../i18n/level-name' +import { messageWithSlot } from '../../../i18n/message-slot' import { localizedRoomNameSections } from '../../../lib/room-name-messages' /** "Room · Ground floor", "Mezzanine · in Kitchen", "Room · not enclosed". */ @@ -183,7 +184,11 @@ export function OpenRoomPanel({ zoneId, onClose }: { zoneId: string; onClose: () >

- {formatAreaLabel(area([{ outer: zone.polygon, holes: zone.holes }]), unit, 2)}{' '}{i18n._({ id: 'editor.panels.roomPanel.closeItsWallsToBuildIts', message: '· Close its walls to build its floor and ceiling.' })} + {i18n._({ + id: 'editor.panels.roomPanel.openRoomArea', + message: '{area} · Close its walls to build its floor and ceiling.', + values: { area: formatAreaLabel(area([{ outer: zone.polygon, holes: zone.holes }]), unit, 2) }, + })}

)} @@ -399,16 +399,30 @@ export function CeilingPanel() {

- {i18n._({ id: 'node.ceiling.panel.hole', message: 'Hole' })} {index + 1}{' '} - {isEditing && - i18n._({ id: 'node.ceiling.panel.editing', message: '(Editing)' })} + {isEditing + ? i18n._({ + id: 'node.holeEditing', + message: 'Hole {number} (Editing)', + values: { number: index + 1 }, + }) + : i18n._({ + id: 'node.holeNumber', + message: 'Hole {number}', + values: { number: index + 1 }, + })}

- {holeArea.toFixed(2)} m² · {hole.length}{' '} - {i18n._({ id: 'node.ceiling.panel.pts', message: 'pts ·' })}{' '} - {isAutoHole - ? autoLabel - : i18n._({ id: 'node.ceiling.panel.manual', message: 'Manual' })} + {i18n._({ + id: 'node.holeSummary', + message: '{area} m² · {count, plural, one {# pt} other {# pts}} · {source}', + values: { + area: holeArea.toFixed(2), + count: hole.length, + source: isAutoHole + ? autoLabel + : i18n._({ id: 'node.hole.manual', message: 'Manual' }), + }, + })}

diff --git a/packages/nodes/src/door/panel.tsx b/packages/nodes/src/door/panel.tsx index c9391141d5..92e8f2dd2d 100644 --- a/packages/nodes/src/door/panel.tsx +++ b/packages/nodes/src/door/panel.tsx @@ -1017,7 +1017,11 @@ export default function DoorPanel() {
- {i18n._({ id: 'node.door.panel.segment', message: 'Segment' })} {i + 1} + {i18n._({ + id: 'node.segmentNumber', + message: 'Segment {number}', + values: { number: i + 1 }, + })}
diff --git a/packages/nodes/src/roof/glazing-panel-editor.tsx b/packages/nodes/src/roof/glazing-panel-editor.tsx index 40bf3e4e3b..58a02997b1 100644 --- a/packages/nodes/src/roof/glazing-panel-editor.tsx +++ b/packages/nodes/src/roof/glazing-panel-editor.tsx @@ -96,14 +96,12 @@ export function GlazingPanelEditor({ }} />

- {columns}{' '} - {columns === 1 - ? i18n._({ id: 'node.roof.glazingPanelEditor.column', message: 'column' }) - : i18n._({ id: 'node.roof.glazingPanelEditor.columns', message: 'columns' })}{' '} - · {rows}{' '} - {rows === 1 - ? i18n._({ id: 'node.roof.glazingPanelEditor.row', message: 'row' }) - : i18n._({ id: 'node.roof.glazingPanelEditor.rows', message: 'rows' })} + {i18n._({ + id: 'node.roof.glazingPanelEditor.grid', + message: + '{columns, plural, one {# column} other {# columns}} · {rows, plural, one {# row} other {# rows}}', + values: { columns, rows }, + })}

{columns > 1 && (

- {i18n._({ id: 'node.roof.panel.on', message: 'On' })} {levelMove.storey}{' '} {i18n._({ - id: 'node.roof.panel.withItsWallsSoItHides', + id: 'node.roof.panel.onStoreyWalls', message: - "with its walls, so it hides that floor's plan in solo and exploded views.", + "On {storey} with its walls, so it hides that floor's plan in solo and exploded views.{roofs, plural, =0 {} =1 {} other { The floor's # roofs move together.}}", + values: { storey: levelMove.storey, roofs: levelMove.roofs }, })} - {levelMove.roofs > 1 && - i18n._({ - id: 'node.roof.panel.theFloorSRoofsRoofsMove', - message: " The floor's {roofs} roofs move together.", - values: { roofs: levelMove.roofs }, - })}

) : ( - {i18n._({ id: 'node.shared.systemCheckPanel.selected', message: 'Selected:' })}{' '} - {summary.runCount}{' '} - {summary.runCount === 1 - ? i18n._({ id: 'node.shared.systemCheckPanel.run', message: 'run' }) - : i18n._({ id: 'node.shared.systemCheckPanel.runs', message: 'runs' })}{' '} - · {summary.runLengthM.toFixed(1)} m + {i18n._({ + id: 'node.shared.systemCheckPanel.selectedRuns', + message: 'Selected: {count, plural, one {# run} other {# runs}} · {length} m', + values: { count: summary.runCount, length: summary.runLengthM.toFixed(1) }, + })} )}
diff --git a/packages/nodes/src/site/panel.tsx b/packages/nodes/src/site/panel.tsx index be8768cf4e..5ba9734fd1 100644 --- a/packages/nodes/src/site/panel.tsx +++ b/packages/nodes/src/site/panel.tsx @@ -414,13 +414,19 @@ export function SiteNodePanel() { {node.terrainContours ? (

- {node.terrainContours.lines.length}{' '} - {i18n._({ id: 'node.site.panel.surveyedLinesAt', message: 'surveyed lines at' })}{' '} - {node.terrainContours.intervalFt}{' '} - {i18n._({ id: 'node.site.panel.ft', message: 'ft (' })} - {node.terrainContours.datum}) —{' '} - {node.terrainContours.source ?? - i18n._({ id: 'node.site.panel.survey', message: 'survey' })} + {i18n._({ + id: 'node.site.panel.surveyedContours', + message: + '{count, plural, one {# surveyed line} other {# surveyed lines}} at {interval} ft ({datum}) — {source}', + values: { + count: node.terrainContours.lines.length, + interval: node.terrainContours.intervalFt, + datum: node.terrainContours.datum, + source: + node.terrainContours.source ?? + i18n._({ id: 'node.site.panel.survey', message: 'survey' }), + }, + })}

) : (

diff --git a/packages/nodes/src/slab/panel.tsx b/packages/nodes/src/slab/panel.tsx index a3c915d0e0..984677956c 100644 --- a/packages/nodes/src/slab/panel.tsx +++ b/packages/nodes/src/slab/panel.tsx @@ -467,15 +467,30 @@ export function SlabPanel() {

- {i18n._({ id: 'node.slab.panel.hole', message: 'Hole' })} {index + 1}{' '} - {isEditing && i18n._({ id: 'node.slab.panel.editing', message: '(Editing)' })} + {isEditing + ? i18n._({ + id: 'node.holeEditing', + message: 'Hole {number} (Editing)', + values: { number: index + 1 }, + }) + : i18n._({ + id: 'node.holeNumber', + message: 'Hole {number}', + values: { number: index + 1 }, + })}

- {holeArea.toFixed(2)} m² · {hole.length}{' '} - {i18n._({ id: 'node.slab.panel.pts', message: 'pts ·' })}{' '} - {isAutoHole - ? autoLabel - : i18n._({ id: 'node.slab.panel.manual', message: 'Manual' })} + {i18n._({ + id: 'node.holeSummary', + message: '{area} m² · {count, plural, one {# pt} other {# pts}} · {source}', + values: { + area: holeArea.toFixed(2), + count: hole.length, + source: isAutoHole + ? autoLabel + : i18n._({ id: 'node.hole.manual', message: 'Manual' }), + }, + })}

diff --git a/packages/nodes/src/stair/panel.tsx b/packages/nodes/src/stair/panel.tsx index e487323fcf..98b57617b6 100644 --- a/packages/nodes/src/stair/panel.tsx +++ b/packages/nodes/src/stair/panel.tsx @@ -543,16 +543,27 @@ export default function StairPanel() {
{measurements.flights.map((flight, index) => (
- {i18n._({ id: 'node.stair.panel.flight', message: 'Flight' })} {index + 1}:{' '} - {flight.count} {i18n._({ id: 'node.stair.panel.risersR', message: 'risers · R' })}{' '} - {flight.riserHeight === null - ? '—' - : formatLinearMeasurement(flight.riserHeight, unit, metricNotation)}{' '} - · T{' '} - {flight.going === null - ? '—' - : formatLinearMeasurement(flight.going, unit, metricNotation)}{' '} - · {flight.slope === null ? '—' : `${((flight.slope * 180) / Math.PI).toFixed(1)}°`} + {i18n._({ + id: 'node.stair.panel.flightMeasurements', + message: + 'Flight {number}: {count, plural, one {# riser} other {# risers}} · R {riser} · T {going} · {slope}', + values: { + number: index + 1, + count: flight.count, + riser: + flight.riserHeight === null + ? '—' + : formatLinearMeasurement(flight.riserHeight, unit, metricNotation), + going: + flight.going === null + ? '—' + : formatLinearMeasurement(flight.going, unit, metricNotation), + slope: + flight.slope === null + ? '—' + : `${((flight.slope * 180) / Math.PI).toFixed(1)}°`, + }, + })}
))}
@@ -772,8 +783,11 @@ export default function StairPanel() { /> {node.totalRise == null ? (
- {i18n._({ id: 'node.stair.panel.currently', message: 'Currently' })}{' '} - {formatLinearMeasurement(resolvedRise, unit, metricNotation)} + {i18n._({ + id: 'node.panel.currently', + message: 'Currently {value}', + values: { value: formatLinearMeasurement(resolvedRise, unit, metricNotation) }, + })}
) : ( {i18n._({ - id: 'node.wall.curtainWallPanel.effectiveThickness', - message: 'Effective thickness:', - })}{' '} - {unit === 'metric' - ? `${(effectiveThickness * 1000).toFixed(1)} mm` - : `${metersToLinearUnit(effectiveThickness, unit).toFixed(3)} ${getLinearUnitLabel(unit)}`} - {i18n._({ - id: 'node.wall.curtainWallPanel.limitedByFrameDepth', - message: ', limited by frame depth.', + id: 'node.wall.curtainWallPanel.effectiveThicknessLimited', + message: 'Effective thickness: {thickness}, limited by frame depth.', + values: { + thickness: + unit === 'metric' + ? `${(effectiveThickness * 1000).toFixed(1)} mm` + : `${metersToLinearUnit(effectiveThickness, unit).toFixed(3)} ${getLinearUnitLabel(unit)}`, + }, })}

)} @@ -699,8 +698,12 @@ export function CurtainWallPanel({
)}

- {i18n._({ id: 'node.wall.curtainWallPanel.column', message: 'Column' })} {column + 1} - {i18n._({ id: 'node.wall.curtainWallPanel.row', message: ', row' })} {row + 1} ·{' '} + {i18n._({ + id: 'node.wall.curtainWallPanel.columnRow', + message: 'Column {column}, row {row}', + values: { column: column + 1, row: row + 1 }, + })}{' '} + ·{' '} {overridden ? i18n._({ id: 'node.wall.curtainWallPanel.customInfill', diff --git a/packages/nodes/src/wall/panel.tsx b/packages/nodes/src/wall/panel.tsx index ded063e748..8845ebe700 100644 --- a/packages/nodes/src/wall/panel.tsx +++ b/packages/nodes/src/wall/panel.tsx @@ -350,8 +350,11 @@ export default function WallPanel() { /> {isPlaneBound ? (

- {i18n._({ id: 'node.wall.panel.currently', message: 'Currently' })}{' '} - {formatLinearMeasurement(height, unit)} + {i18n._({ + id: 'node.panel.currently', + message: 'Currently {value}', + values: { value: formatLinearMeasurement(height, unit) }, + })}
) : ( - {formatLinearMeasurement(thickness, unit)}{' '} - {i18n._({ id: 'node.wall.panel.fromAssembly', message: '· from assembly' })} + {i18n._({ + id: 'node.wall.panel.thicknessFromAssembly', + message: '{thickness} · from assembly', + values: { thickness: formatLinearMeasurement(thickness, unit) }, + })}
) : ( @@ -599,7 +605,11 @@ function WallFaceScriptRow({ face, sha, wallId }: { face: WallFace; sha: string;
- {i18n._({ id: 'node.wall.panel.side', message: 'Side' })} {face.toUpperCase()} + {i18n._({ + id: 'node.wall.panel.sideFace', + message: 'Side {face}', + values: { face: face.toUpperCase() }, + })}
))}
diff --git a/packages/nodes/src/item/authored-params.tsx b/packages/nodes/src/item/authored-params.tsx index bd2f80858d..d20b22b2df 100644 --- a/packages/nodes/src/item/authored-params.tsx +++ b/packages/nodes/src/item/authored-params.tsx @@ -5,6 +5,7 @@ import type { GeometryScriptParamValue, ScriptedNode, } from '@pascal-app/core' +import { usePascalI18n } from '@pascal-app/core' import { PanelSection, rebuildAuthoredObject, @@ -31,6 +32,7 @@ export function AuthoredParams({ }: { node: { id: string; source?: ScriptedNode['source'] } }) { + const i18n = usePascalI18n() const source = node.source const [drafts, setDrafts] = useState>({}) const [busy, setBusy] = useState(false) @@ -46,7 +48,12 @@ export function AuthoredParams({ rebuildAuthoredObject(node.id, patch) .catch((reason: unknown) => { console.error('[authored object] rebuild failed', reason) - setError("Couldn't rebuild with these values.") + setError( + i18n._({ + id: 'node.item.authoredParams.couldnTRebuildWithTheseValues', + message: "Couldn't rebuild with these values.", + }), + ) }) .finally(() => { rebuilding.current = false @@ -115,7 +122,11 @@ export function AuthoredParams({
{input}
{isScriptDefault(spec, source.params[spec.id]) ? null : ( rebuild({ [spec.id]: scriptDefault(spec) })} /> )} @@ -126,7 +137,9 @@ export function AuthoredParams({ const resetAll = scriptDefaultsPatch(source.manifest.params, source.params) return ( - + {source.manifest.params.map(row)} {Object.keys(resetAll).length > 0 ? ( ) : null} {busy ? (
- {source.language === 'bpy' ? 'Rebuilding in Blender…' : 'Rebuilding…'} + {source.language === 'bpy' + ? i18n._({ + id: 'node.item.authoredParams.rebuildingInBlender', + message: 'Rebuilding in Blender…', + }) + : i18n._({ id: 'node.item.authoredParams.rebuilding', message: 'Rebuilding…' })}
) : null} {error ?
{error}
: null} @@ -151,6 +169,7 @@ export function AuthoredParams({ } function ResetButton({ label, onClick }: { label: string; onClick: () => void }) { + const i18n = usePascalI18n() return ( @@ -164,7 +183,9 @@ function ResetButton({ label, onClick }: { label: string; onClick: () => void }) - Reset to default + + {i18n._({ id: 'node.item.authoredParams.resetToDefault', message: 'Reset to default' })} + ) } diff --git a/packages/nodes/src/roof/glazing-controls.tsx b/packages/nodes/src/roof/glazing-controls.tsx index fb9c7bdce7..76c45d5019 100644 --- a/packages/nodes/src/roof/glazing-controls.tsx +++ b/packages/nodes/src/roof/glazing-controls.tsx @@ -1,6 +1,7 @@ 'use client' import type { CurtainGrid, RoofGlazing } from '@pascal-app/core' +import { type MessageDescriptor, usePascalI18n } from '@pascal-app/core' import { getLinearUnitLabel, linearControlValueToMeters, @@ -86,6 +87,7 @@ export function GlazingGridControls({ grids: readonly CurtainGrid[] preview: Preview }) { + const i18n = usePascalI18n() const unit = useViewer((state) => state.unit) const patch = useCallback( (data: Partial, commit = false) => { @@ -98,21 +100,41 @@ export function GlazingGridControls({ return ( patch({ layout }, true)} /> {mixedLayout ? ( -

Choose a layout to edit the grid.

+

+ {i18n._({ + id: 'node.roof.glazingControls.chooseALayoutToEditThe', + message: 'Choose a layout to edit the grid.', + })} +

) : grid.layout === 'count' ? ( value.count !== grid.count)} min={1} @@ -127,7 +149,11 @@ export function GlazingGridControls({ /> ) : ( value.spacing !== grid.spacing)} min={metersToLinearUnit(0.2, unit)} @@ -147,15 +173,34 @@ export function GlazingGridControls({ /> )} {!mixedLayout && grid.layout === 'fixed-spacing' && ( -
- Alignment +
+ + {i18n._({ id: 'node.roof.glazingControls.alignment', message: 'Alignment' })} + value.alignment !== grid.alignment)} options={[ - { value: 'start', label: 'Start' }, - { value: 'center', label: 'Center' }, - { value: 'end', label: 'End' }, + { + value: 'start', + label: i18n._({ id: 'node.roof.glazingControls.start', message: 'Start' }), + }, + { + value: 'center', + label: i18n._({ id: 'node.roof.glazingControls.center', message: 'Center' }), + }, + { + value: 'end', + label: i18n._({ id: 'node.roof.glazingControls.end', message: 'End' }), + }, ]} onChange={(alignment) => patch({ alignment }, true)} /> @@ -179,12 +224,15 @@ export function GlazingColor({ mixed: boolean preview: Preview }) { + const i18n = usePascalI18n() return (
diff --git a/packages/nodes/src/roof/glazing-panel.tsx b/packages/nodes/src/roof/glazing-panel.tsx index ccd0c96c48..cce7904bb1 100644 --- a/packages/nodes/src/roof/glazing-panel.tsx +++ b/packages/nodes/src/roof/glazing-panel.tsx @@ -235,7 +235,10 @@ export function RoofGlazingPanel({ segments }: { segments: readonly RoofSegmentN ({ + ...option, + label: i18n._(option.label), + }))} onChange={(panelType) => update({ panelType })} />
diff --git a/packages/nodes/src/shared/item-interaction-actions.tsx b/packages/nodes/src/shared/item-interaction-actions.tsx index c3fde3b654..7ae4533ab7 100644 --- a/packages/nodes/src/shared/item-interaction-actions.tsx +++ b/packages/nodes/src/shared/item-interaction-actions.tsx @@ -1,5 +1,11 @@ 'use client' -import { type AnyNodeId, nodeMechanism, useInteractive, useScene } from '@pascal-app/core' +import { + type AnyNodeId, + nodeMechanism, + useInteractive, + usePascalI18n, + useScene, +} from '@pascal-app/core' import { ActionMenuButton } from '@pascal-app/editor' import { useViewer } from '@pascal-app/viewer' import { Lightbulb, LightbulbOff } from 'lucide-react' @@ -10,6 +16,7 @@ import { itemHasLights, itemLightsOn, toggleItemLights } from './item-interactio * comes from the action menu's `capabilities.mechanism` button. */ export default function ItemInteractionActions() { + const i18n = usePascalI18n() const selected = useViewer((s) => s.selection.selectedIds) const node = useScene((s) => selected.length === 1 ? s.nodes[selected[0] as AnyNodeId] : undefined, @@ -21,7 +28,17 @@ export default function ItemInteractionActions() { { event.stopPropagation() toggleItemLights(node) diff --git a/packages/nodes/src/shared/opening-labels.ts b/packages/nodes/src/shared/opening-labels.ts new file mode 100644 index 0000000000..db574bca31 --- /dev/null +++ b/packages/nodes/src/shared/opening-labels.ts @@ -0,0 +1,50 @@ +import type { MessageDescriptor, WindowNode } from '@pascal-app/core' +import type { DoorStyle, WindowStyle } from '@pascal-app/core/building' + +/** + * The door and window panels' card names. Core's `DOOR_STYLE_LABELS`, + * `WINDOW_STYLE_LABELS` and the placement options stay English: the tool + * chips and agents read them. + */ +export const DOOR_STYLE_MESSAGES: Record = { + panel: /* i18n */ { id: 'node.door.style.panel', message: 'Panel' }, + glass: /* i18n */ { id: 'node.door.style.glass', message: 'Glass' }, + modern: /* i18n */ { id: 'node.door.style.modern', message: 'Modern' }, + 'paneled-glass': /* i18n */ { id: 'node.door.style.paneledGlass', message: 'Paneled glass' }, + french: /* i18n */ { id: 'node.door.style.french', message: 'French' }, + shaker: /* i18n */ { id: 'node.door.style.shaker', message: 'Shaker' }, + 'six-panel': /* i18n */ { id: 'node.door.style.sixPanel', message: 'Six-panel' }, + craftsman: /* i18n */ { id: 'node.door.style.craftsman', message: 'Craftsman' }, + 'half-louvered': /* i18n */ { id: 'node.door.style.halfLouvered', message: 'Half-louvered' }, + barn: /* i18n */ { id: 'node.door.style.barn', message: 'Barn' }, +} + +export const WINDOW_STYLE_MESSAGES: Record = { + single: /* i18n */ { id: 'node.window.style.single', message: 'Single' }, + 'double-hung': /* i18n */ { id: 'node.window.style.doubleHung', message: 'Double-hung' }, + 'triple-hung': /* i18n */ { id: 'node.window.style.tripleHung', message: 'Triple-hung' }, + casement: /* i18n */ { id: 'node.window.style.casement', message: 'Casement' }, + sliding: /* i18n */ { id: 'node.window.style.sliding', message: 'Sliding' }, + grid: /* i18n */ { id: 'node.window.style.grid', message: 'Grid' }, + 'tall-grid': /* i18n */ { id: 'node.window.style.tallGrid', message: 'Tall grid' }, + 'wide-grid': /* i18n */ { id: 'node.window.style.wideGrid', message: 'Wide grid' }, + 'horizontal-bands': /* i18n */ { + id: 'node.window.style.horizontalBands', + message: 'Horizontal bands', + }, + transom: /* i18n */ { id: 'node.window.style.transom', message: 'Transom' }, + picture: /* i18n */ { id: 'node.window.style.picture', message: 'Picture' }, +} + +export const WINDOW_TYPE_MESSAGES: Record = { + fixed: /* i18n */ { id: 'node.window.type.fixed', message: 'Fixed' }, + sliding: /* i18n */ { id: 'node.window.type.sliding', message: 'Sliding' }, + casement: /* i18n */ { id: 'node.window.type.casement', message: 'Casement' }, + awning: /* i18n */ { id: 'node.window.type.awning', message: 'Awning' }, + hopper: /* i18n */ { id: 'node.window.type.hopper', message: 'Hopper' }, + 'single-hung': /* i18n */ { id: 'node.window.type.singleHung', message: 'Single Hung' }, + 'double-hung': /* i18n */ { id: 'node.window.type.doubleHung', message: 'Double Hung' }, + bay: /* i18n */ { id: 'node.window.type.bay', message: 'Bay' }, + bow: /* i18n */ { id: 'node.window.type.bow', message: 'Bow' }, + louvered: /* i18n */ { id: 'node.window.type.louvered', message: 'Louvered' }, +} diff --git a/packages/nodes/src/stair/construction-controls.tsx b/packages/nodes/src/stair/construction-controls.tsx index 86daabfc95..b359b5667e 100644 --- a/packages/nodes/src/stair/construction-controls.tsx +++ b/packages/nodes/src/stair/construction-controls.tsx @@ -5,17 +5,42 @@ import { StairConstruction, type StairNode, type StairSegmentNode, + usePascalI18n, useScene, } from '@pascal-app/core' import { MetricControl, SelectControl, ToggleControl } from '@pascal-app/editor' const OPTIONS = [ - { label: 'Original', value: 'original' }, - { label: 'Solid', value: 'solid' }, - { label: 'Waist', value: 'waist' }, - { label: 'Open', value: 'open' }, - { label: 'Side stringers', value: 'side-stringers' }, - { label: 'Center stringer', value: 'center-stringer' }, + { + label: /* i18n */ { id: 'node.stair.constructionControls.original', message: 'Original' }, + value: 'original', + }, + { + label: /* i18n */ { id: 'node.stair.constructionControls.solid', message: 'Solid' }, + value: 'solid', + }, + { + label: /* i18n */ { id: 'node.stair.constructionControls.waist', message: 'Waist' }, + value: 'waist', + }, + { + label: /* i18n */ { id: 'node.stair.constructionControls.open', message: 'Open' }, + value: 'open', + }, + { + label: /* i18n */ { + id: 'node.stair.constructionControls.sideStringers', + message: 'Side stringers', + }, + value: 'side-stringers', + }, + { + label: /* i18n */ { + id: 'node.stair.constructionControls.centerStringer', + message: 'Center stringer', + }, + value: 'center-stringer', + }, ] export function StairConstructionControls({ @@ -27,16 +52,25 @@ export function StairConstructionControls({ inherited?: StairConstruction onChange: (construction: StairConstruction | undefined) => void }) { + const i18n = usePascalI18n() const effective = node.construction ?? inherited const update = (patch: Partial) => onChange(StairConstruction.parse({ ...effective, ...patch })) return (
- option.value === 'original' && inherited ? { ...option, label: 'Inherit' } : option, + option.value === 'original' && inherited + ? { + ...option, + label: i18n._({ + id: 'node.stair.constructionControls.inherit', + message: 'Inherit', + }), + } + : { ...option, label: i18n._(option.label) }, )} onChange={(mode) => mode === 'original' @@ -48,7 +82,10 @@ export function StairConstructionControls({ <> {effective.mode === 'waist' ? ( update({ waistThickness })} @@ -58,7 +95,10 @@ export function StairConstructionControls({ /> ) : null} update({ treadThickness })} @@ -67,7 +107,7 @@ export function StairConstructionControls({ precision={3} /> update({ nosing })} @@ -76,7 +116,10 @@ export function StairConstructionControls({ precision={3} /> update({ finishThickness })} @@ -87,13 +130,19 @@ export function StairConstructionControls({ {effective.mode === 'solid' || effective.mode === 'waist' ? null : ( <> update({ closedRisers })} /> {effective.closedRisers ? ( update({ riserThickness })} @@ -107,7 +156,10 @@ export function StairConstructionControls({ {effective.mode === 'side-stringers' || effective.mode === 'center-stringer' ? ( <> update({ stringerWidth })} @@ -116,7 +168,10 @@ export function StairConstructionControls({ precision={3} /> update({ stringerDepth })} diff --git a/packages/nodes/src/stair/panel.tsx b/packages/nodes/src/stair/panel.tsx index 98b57617b6..bb166652f0 100644 --- a/packages/nodes/src/stair/panel.tsx +++ b/packages/nodes/src/stair/panel.tsx @@ -57,6 +57,61 @@ import { getStairDestinationUpdates } from './destination' import { StairRailingControls } from './railing-controls' import { getStairTypeChange } from './stair-type' +/** Core's stair diagnostics in the UI language; codes without fixed text show core's message. */ +const STAIR_DIAGNOSTIC_MESSAGES: Partial> = { + 'invalid-rise': /* i18n */ { + id: 'node.stair.diagnostic.invalidRise', + message: 'The destination must be above the stair base.', + }, + 'landing-overlap': /* i18n */ { + id: 'node.stair.diagnostic.landingOverlap', + message: + 'Landing depth exceeds a full circle at the walking line; the visible landing is limited to one circle.', + }, + 'narrow-winder-end': /* i18n */ { + id: 'node.stair.diagnostic.narrowWinderEnd', + message: 'The narrow end of a winder tread is below 0.10 m; check the intended stair use.', + }, + 'invalid-flight': /* i18n */ { + id: 'node.stair.diagnostic.invalidFlight', + message: 'Flight dimensions and integer riser count must be positive.', + }, + 'riser-target': /* i18n */ { + id: 'node.stair.diagnostic.riserTarget', + message: 'Riser height exceeds the design target.', + }, + 'going-target': /* i18n */ { + id: 'node.stair.diagnostic.goingTarget', + message: 'Going is below the design target.', + }, + 'comfort-target': /* i18n */ { + id: 'node.stair.diagnostic.comfortTarget', + message: 'Two risers plus going is outside the 0.60–0.65 m design range.', + }, + 'nonuniform-risers': /* i18n */ { + id: 'node.stair.diagnostic.nonuniformRisers', + message: + 'Flight riser heights differ. Use uniform-riser repair only if this is a proposed design.', + }, + 'raised-landing': /* i18n */ { + id: 'node.stair.diagnostic.raisedLanding', + message: 'A landing has a stored rise; inspect its transition before repair.', + }, + 'arrival-mismatch': /* i18n */ { + id: 'node.stair.diagnostic.arrivalMismatch', + message: 'The flight chain does not reach the declared destination.', + }, + 'headroom-unresolved': /* i18n */ { + id: 'node.stair.diagnostic.headroomUnresolved', + message: + 'Detailed headroom could not be evaluated: check riser counts and the surface query budget.', + }, + 'headroom-target': /* i18n */ { + id: 'node.stair.diagnostic.headroomTarget', + message: 'Overhead surfaces leave less than the target headroom.', + }, +} + const RAILING_MODE_OPTIONS: { label: MessageDescriptor; value: StairRailingMode }[] = [ { label: /* i18n */ { id: 'node.stair.panel.none', message: 'None' }, value: 'none' }, { label: /* i18n */ { id: 'node.stair.panel.left', message: 'Left' }, value: 'left' }, @@ -585,17 +640,22 @@ export default function StairPanel() {
- {[...new Set(measurements.diagnostics.map((diagnostic) => diagnostic.message))].map( - (message) => ( -
- {message} -
+ {[ + ...new Set( + measurements.diagnostics.map((diagnostic) => { + const message = STAIR_DIAGNOSTIC_MESSAGES[diagnostic.code] + return message ? i18n._(message) : diagnostic.message + }), ), - )} + ].map((message) => ( +
+ {message} +
+ ))}
{i18n._({ id: 'node.stair.panel.designTargets', message: 'Design targets' })} diff --git a/packages/nodes/src/stair/railing-controls.tsx b/packages/nodes/src/stair/railing-controls.tsx index f5d5c28e7d..cd17736483 100644 --- a/packages/nodes/src/stair/railing-controls.tsx +++ b/packages/nodes/src/stair/railing-controls.tsx @@ -1,12 +1,15 @@ 'use client' -import { type AnyNodeId, type StairNode, useScene } from '@pascal-app/core' +import { type AnyNodeId, type StairNode, usePascalI18n, useScene } from '@pascal-app/core' import { MetricControl, SegmentedControl, ToggleControl } from '@pascal-app/editor' const MODES = [ - { label: 'None', value: 'none' }, - { label: 'Left', value: 'left' }, - { label: 'Right', value: 'right' }, - { label: 'Both', value: 'both' }, + { label: /* i18n */ { id: 'node.stair.railingControls.none', message: 'None' }, value: 'none' }, + { label: /* i18n */ { id: 'node.stair.railingControls.left', message: 'Left' }, value: 'left' }, + { + label: /* i18n */ { id: 'node.stair.railingControls.right', message: 'Right' }, + value: 'right', + }, + { label: /* i18n */ { id: 'node.stair.railingControls.both', message: 'Both' }, value: 'both' }, ] as const export function StairRailingControls({ node, @@ -15,6 +18,7 @@ export function StairRailingControls({ node: StairNode onChange: (patch: Partial) => void }) { + const i18n = usePascalI18n() const config = node.handrail return (
@@ -25,8 +29,17 @@ export function StairRailingControls({ : (node.railingPath ?? 'original') } options={[ - { label: 'Original layout', value: 'original' }, - { label: 'Continuous', value: 'continuous' }, + { + label: i18n._({ + id: 'node.stair.railingControls.originalLayout', + message: 'Original layout', + }), + value: 'original', + }, + { + label: i18n._({ id: 'node.stair.railingControls.continuous', message: 'Continuous' }), + value: 'continuous', + }, ]} onChange={(value) => onChange({ @@ -39,7 +52,10 @@ export function StairRailingControls({ } /> onChange({ @@ -53,7 +69,7 @@ export function StairRailingControls({ <> ({ ...option, label: i18n._(option.label) }))} onChange={(value) => onChange({ handrail: { ...config, mode: value as StairNode['railingMode'] } }) } @@ -63,10 +79,19 @@ export function StairRailingControls({ key={key} label={ key === 'height' - ? 'Handrail height' + ? i18n._({ + id: 'node.stair.railingControls.handrailHeight', + message: 'Handrail height', + }) : key === 'diameter' - ? 'Handrail diameter' - : 'Handrail inset' + ? i18n._({ + id: 'node.stair.railingControls.handrailDiameter', + message: 'Handrail diameter', + }) + : i18n._({ + id: 'node.stair.railingControls.handrailInset', + message: 'Handrail inset', + }) } value={config[key]} min={key === 'offset' ? 0 : 0.001} @@ -87,7 +112,17 @@ export function StairRailingControls({ return (
update({ return: value as typeof detail.return })} /> {detail.return === 'wall' || detail.return === 'post' ? ( <> update({ returnLength })} />

- Set the length to reach the wall or post. + {i18n._({ + id: 'node.stair.railingControls.setTheLengthToReachThe', + message: 'Set the length to reach the wall or post.', + })}

) : null} diff --git a/packages/nodes/src/wall/actions.tsx b/packages/nodes/src/wall/actions.tsx index ae5ded0ca7..c2ae39cae7 100644 --- a/packages/nodes/src/wall/actions.tsx +++ b/packages/nodes/src/wall/actions.tsx @@ -3,6 +3,7 @@ import { type AnyNodeId, planWallMerge, runAsSingleSceneHistoryStep, + usePascalI18n, useScene, } from '@pascal-app/core' import { @@ -32,6 +33,7 @@ export default function WallActions() { } function SplitWallAction() { + const i18n = usePascalI18n() const selected = useViewer((s) => s.selection.selectedIds) const wall = useScene((s) => selected.length === 1 ? s.nodes[selected[0] as AnyNodeId] : undefined, @@ -41,8 +43,8 @@ function SplitWallAction() { return ( ) })} @@ -543,7 +545,7 @@ export default function WindowPanel() { onClick={() => handleUpdate(getWindowStyleOverrides(style))} type="button" > - {WINDOW_STYLE_LABELS[style]} + {i18n._(WINDOW_STYLE_MESSAGES[style])} ))}
From 70d04ace7de676c17e47060a7150551dbcc23433 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 10:44:22 +0000 Subject: [PATCH 08/22] i18n audit: add inspector surfaces on a furnished scene with a roof and a stair --- i18n/pseudo-surfaces.ts | 175 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 163 insertions(+), 12 deletions(-) diff --git a/i18n/pseudo-surfaces.ts b/i18n/pseudo-surfaces.ts index 3f73feb41e..be67a8a3bf 100644 --- a/i18n/pseudo-surfaces.ts +++ b/i18n/pseudo-surfaces.ts @@ -1,5 +1,13 @@ import type { Page } from 'playwright-core' +import type { SceneGraph } from '@pascal-app/core/clone-scene-graph' +import { template as twoBedroom } from '../packages/mcp/src/templates/two-bedroom' import { pseudoLocalize } from '../scripts/i18n' +import { + RoofNode, + RoofSegmentNode, + StairNode, + StairSegmentNode, +} from '../packages/core/src/schema' /** * The surface manifest for `bun run i18n:pseudo-audit`. Each migration PR adds @@ -18,23 +26,94 @@ export type PseudoSurface = { data?: string[] } -let projectId: Promise | undefined +const projects = new Map>() -/** One empty project per audit run, named like the app's own default. */ -export function auditProject(base: string): Promise { - projectId ??= fetch(new URL('/api/scenes', base), { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: 'Project #1', graph: { nodes: {}, rootNodeIds: [] } }), - }).then(async (response) => { - if (!response.ok) throw new Error(`Could not create the audit project (${response.status})`) - return ((await response.json()) as { id: string }).id - }) - return projectId +/** One project per scene and audit run, named like the app's own default. */ +function auditScene(base: string, key: string, graph: SceneGraph): Promise { + let project = projects.get(key) + if (!project) { + project = fetch(new URL('/api/scenes', base), { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ name: 'Project #1', graph }), + }).then(async (response) => { + if (!response.ok) throw new Error(`Could not create the audit project (${response.status})`) + return ((await response.json()) as { id: string }).id + }) + projects.set(key, project) + } + return project } +export const auditProject = (base: string) => + auditScene(base, 'empty', { nodes: {}, rootNodeIds: [] } as unknown as SceneGraph) + export const editorPath = async (base: string) => `/project/${await auditProject(base)}` +/** The two-bedroom template with a gable roof and a straight stair, so every inspector has a row. */ +function furnishedScene() { + const graph = structuredClone(twoBedroom) as unknown as { + nodes: Record + } + const nodes = [ + RoofSegmentNode.parse({ id: 'rseg_audit', parentId: 'roof_audit', roofType: 'gable', width: 4, depth: 6 }), + RoofNode.parse({ id: 'roof_audit', parentId: 'level_0', children: ['rseg_audit'] }), + StairSegmentNode.parse({ id: 'sseg_audit', parentId: 'stair_audit', segmentType: 'stair', width: 1, length: 3 }), + StairNode.parse({ id: 'stair_audit', parentId: 'level_0', children: ['sseg_audit'] }), + ] + for (const node of nodes) graph.nodes[node.id] = node + graph.nodes.level_0?.children?.push('roof_audit', 'stair_audit') + return graph as unknown as SceneGraph +} + +export const furnishedPath = async (base: string) => + `/project/${await auditScene(base, 'furnished', furnishedScene())}` +const furnishedData = ['Project #1', 'Living / Kitchen', 'Bedroom 1', 'Bedroom 2', 'Bath'] + +const escapeRegExp = (text: string) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + +/** The rail and layer names stay English until the left-panel migration lands. */ +const englishOrPseudo = (english: string) => + new RegExp(`^(${escapeRegExp(english)}|${escapeRegExp(pseudo(english))})$`) + +/** Opens the Scene panel, expands every row and selects the first row named `english`. */ +async function openLayer( + page: Page, + english: string | RegExp, + options: { exact?: boolean } = {}, +) { + await openEditor(page) + // The tab state persists across audit pages: clicking the active tab would collapse the panel. + const sceneTab = page.getByRole('button', { name: englishOrPseudo('Scene') }).first() + if ((await sceneTab.getAttribute('aria-pressed')) !== 'true') await sceneTab.click() + await page.waitForTimeout(500) + // Expand every row: the tree's chevrons are the small square buttons beside each name. + for (let pass = 0; pass < 3; pass++) { + for (const toggle of await page.$$('button.z-10.h-4.w-4:has(svg.lucide-chevron-right)')) { + const open = await toggle.evaluate((b) => { + const transform = b.querySelector('div')?.style.transform ?? 'none' + return transform !== 'none' && !/rotate\(0/.test(transform) + }) + if (!open) await toggle.click().catch(() => undefined) + } + await page.waitForTimeout(700) + } + const name = + typeof english !== 'string' || options.exact === false ? english : englishOrPseudo(english) + await page.getByText(name, { exact: true }).first().click() + await page.waitForTimeout(1200) + await expandInspector(page) +} + +/** The inspector opens collapsed to its header on small viewports. */ +async function expandInspector(page: Page): Promise { + const expand = page.getByRole('button', { name: pseudo('Expand panel'), exact: true }) + if (await expand.count()) { + await expand.first().click() + await page.waitForTimeout(800) + } +} + /** Waits for the editor chrome and the 3D canvas to settle. */ export async function openEditor(page: Page): Promise { await page.locator('canvas').first().waitFor({ timeout: 120_000 }) @@ -145,4 +224,76 @@ export const surfaces: PseudoSurface[] = [ // A kind registered by the external @pascal-app/plugin-streetscape, which owns its copy. data: ['Road'], }, + { + name: 'room-panel', + path: furnishedPath, + steps: (page) => openLayer(page, 'Living / Kitchen', { exact: false }), + scope: '[data-editor-inspector]', + data: furnishedData, + }, + { + name: 'floor-foundation-panel', + path: furnishedPath, + steps: async (page) => { + await openLayer(page, 'Living / Kitchen', { exact: false }) + // The template's rooms have no floor yet: build one, then open what it sits on. + await page.locator('[data-room-construction] [role="switch"]').first().click() + await page.locator('[data-sits-on]').first().waitFor() + await page.locator('[data-sits-on]').first().click() + await page.waitForTimeout(1200) + await expandInspector(page) + }, + scope: '[data-editor-inspector]', + data: furnishedData, + }, + { + name: 'wall-panel', + path: furnishedPath, + steps: (page) => openLayer(page, 'Wall'), + scope: '[data-editor-inspector]', + // An inspector extension registered by the external @pascal-app/plugin-landscape. + data: [...furnishedData, 'Retaining wall'], + }, + { + name: 'door-panel', + path: furnishedPath, + steps: (page) => openLayer(page, 'Door'), + scope: '[data-editor-inspector]', + data: furnishedData, + }, + { + name: 'window-panel', + path: furnishedPath, + steps: (page) => openLayer(page, 'Window'), + scope: '[data-editor-inspector]', + data: furnishedData, + }, + { + name: 'roof-panel', + path: furnishedPath, + steps: (page) => openLayer(page, 'Roof (1 segment)'), + scope: '[data-editor-inspector]', + data: furnishedData, + }, + { + name: 'roof-segment-panel', + path: furnishedPath, + steps: (page) => openLayer(page, /\(4\.0[x×]6\.0/), + scope: '[data-editor-inspector]', + data: furnishedData, + }, + { + name: 'stair-panel', + path: furnishedPath, + steps: (page) => openLayer(page, 'Staircase (1 segment)'), + scope: '[data-editor-inspector]', + data: furnishedData, + }, + { + name: 'stair-segment-panel', + path: furnishedPath, + steps: (page) => openLayer(page, /\(1\.0[x×]3\.0/), + scope: '[data-editor-inspector]', + data: furnishedData, + }, ] From c43f0715e0ac71aa79c8d55b5a3197b06f49af25 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 10:44:23 +0000 Subject: [PATCH 09/22] i18n: extract the remaining inspector messages with fuzzy AI drafts --- i18n/literal-baseline.json | 79 - .../editor/src/i18n/locales/en-XA/messages.ts | 2 +- .../editor/src/i18n/locales/en/messages.po | 464 ++++++ .../editor/src/i18n/locales/en/messages.ts | 2 +- .../editor/src/i18n/locales/es/messages.po | 1450 +++++++++++++++-- .../editor/src/i18n/locales/fr/messages.po | 1448 ++++++++++++++-- .../editor/src/i18n/locales/ja/messages.po | 1448 ++++++++++++++-- .../editor/src/i18n/locales/zh-CN/messages.po | 1448 ++++++++++++++-- 8 files changed, 5683 insertions(+), 658 deletions(-) diff --git a/i18n/literal-baseline.json b/i18n/literal-baseline.json index 59074956ba..994210b38f 100644 --- a/i18n/literal-baseline.json +++ b/i18n/literal-baseline.json @@ -429,10 +429,6 @@ "navigate", "select" ], - "packages/editor/src/components/ui/controls/finish-swatch.tsx": [ - "Default", - "Default" - ], "packages/editor/src/components/ui/controls/material-paint-panel.tsx": [ "Add material", "Add material", @@ -1627,15 +1623,6 @@ "packages/nodes/src/hvac-equipment/tool.tsx": [ "R/T rotate" ], - "packages/nodes/src/item/authored-params.tsx": [ - "Couldn't rebuild with these values.", - "Parameters", - "Rebuilding in Blender…", - "Rebuilding…", - "Reset parameters", - "Reset to default", - "Reset {?}" - ], "packages/nodes/src/liquid-line/tool.tsx": [ "Click to trace this lineset run", "Follow: hover a lineset" @@ -1676,29 +1663,6 @@ "Style", "Width" ], - "packages/nodes/src/roof/glazing-controls.tsx": [ - "Alignment", - "Center", - "Choose a layout to edit the grid.", - "Empty", - "End", - "Fixed spacing", - "Glass", - "Layout", - "Max spacing", - "Maximum spacing", - "Mixed", - "Panel count", - "Panels", - "Solid", - "Spacing", - "Start", - "{title} alignment" - ], - "packages/nodes/src/shared/item-interaction-actions.tsx": [ - "Turn light off", - "Turn light on" - ], "packages/nodes/src/shared/run-hanger-inspector.tsx": [ "Automatic support", "Hanger", @@ -1781,43 +1745,6 @@ "Spawn Point", "Yaw" ], - "packages/nodes/src/stair/construction-controls.tsx": [ - "Body", - "Center stringer", - "Closed risers", - "Inherit", - "Nosing", - "Open", - "Original", - "Riser thickness", - "Side stringers", - "Solid", - "Stringer depth", - "Stringer width", - "Tread finish", - "Tread thickness", - "Waist", - "Waist thickness" - ], - "packages/nodes/src/stair/railing-controls.tsx": [ - "Both", - "Continuous", - "Floor", - "Handrail diameter", - "Handrail height", - "Handrail inset", - "Left", - "No return", - "None", - "Original layout", - "Post-facing", - "Return length", - "Right", - "Separate handrail", - "Set the length to reach the wall or post.", - "Wall-facing", - "{?} extension" - ], "packages/nodes/src/turbine-vent/panel.tsx": [ "Actions", "Cylinder", @@ -1839,12 +1766,6 @@ "Turbine Vent", "Vanes" ], - "packages/nodes/src/wall/actions.tsx": [ - "Merge walls", - "Merge walls", - "Split wall", - "Split wall" - ], "packages/nodes/src/wall/move-endpoint-tool.tsx": [ "Alt to detach", "Detaching corner" diff --git a/packages/editor/src/i18n/locales/en-XA/messages.ts b/packages/editor/src/i18n/locales/en-XA/messages.ts index 034609bfc1..6470519656 100644 --- a/packages/editor/src/i18n/locales/en-XA/messages.ts +++ b/packages/editor/src/i18n/locales/en-XA/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"app.appShell.pascalHome\":[\"[Þášçáļ ĥöɱé ~~~]\"],\"app.buildTab.addGate\":[\"[Åðð Ĝáţé ~~~]\"],\"app.buildTab.addOpenPassage\":[\"[Åðð Öþéñ Þáššáĝé ~~~~~]\"],\"app.buildTab.addToRooms\":[\"[Åðð ţö ŕööɱš ~~~]\"],\"app.buildTab.allBuildTools\":[\"[← Åļļ ƀûîļð ţööļš ~~~~]\"],\"app.buildTab.chooseGateOrOpenPassageThen\":[\"[Çĥööšé Ĝáţé öŕ Öþéñ Þáššáĝé, ţĥéñ çļîçķ îţš þöšîţîöñ öñ áñý ƒéñçé. Ƒîñð þļáçéð ĝáţéš áñð öþéñîñĝš ûñðéŕ ţĥéîŕ ƒéñçé îñ ţĥé šçéñé ĝŕáþĥ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"app.buildTab.clickALinesetToLayThe\":[\"[Çļîçķ á ļîñéšéţ ţö ļáý ţĥé ļîñé ƀéšîðé îţ. ~~~~~~~~~~]\"],\"app.buildTab.doubleGate\":[\"[Ðöûƀļé ĝáţé ~~~]\"],\"app.buildTab.featuresExtensions\":[\"[Ƒéáţûŕéš & éẋţéñšîöñš ~~~~~~]\"],\"app.buildTab.fenceFeatures\":[\"[Ƒéñçé ƒéáţûŕéš ~~~~]\"],\"app.buildTab.followLineset\":[\"[Ƒöļļöŵ ļîñéšéţ ~~~~]\"],\"app.buildTab.gate\":[\"[Ĝáţé ~~]\"],\"app.buildTab.gateStyle\":[\"[Ĝáţé šţýļé ~~~]\"],\"app.buildTab.horizontalBoards\":[\"[Ĥöŕîžöñţáļ ƀöáŕðš ~~~~~]\"],\"app.buildTab.hoverAFenceToPreviewClick\":[\"[Ĥöṽéŕ á ƒéñçé ţö þŕéṽîéŵ. Çļîçķ ţö þļáçé. Éšç çáñçéļš. Ļéáṽé ŕööɱ ƀéţŵééñ öþéñîñĝš. ~~~~~~~~~~~~~~~~~~~~]\"],\"app.buildTab.leaves\":[\"[Ļéáṽéš ~~]\"],\"app.buildTab.liquidLine\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"app.buildTab.matchFenceStyle\":[\"[Ṁáţçĥ ƒéñçé šţýļé ~~~~~]\"],\"app.buildTab.mep\":[\"[ṀÉÞ ~]\"],\"app.buildTab.off\":[\"[Öƒƒ ~]\"],\"app.buildTab.on\":[\"[Öñ ~]\"],\"app.buildTab.openRails\":[\"[Öþéñ ŕáîļš ~~~]\"],\"app.buildTab.opening\":[\"[Öþéñîñĝ ~~~]\"],\"app.buildTab.openingWidthM\":[\"[Öþéñîñĝ ŵîðţĥ (ɱ) ~~~~]\"],\"app.buildTab.outdoor\":[\"[Öûţðööŕ ~~~]\"],\"app.buildTab.picket\":[\"[Þîçķéţ ~~]\"],\"app.buildTab.roofType\":[\"[Ŕööƒ ţýþé ~~~]\"],\"app.buildTab.roomsAlreadyCreateTheirFloorAnd\":[\"[Ŕööɱš áļŕéáðý çŕéáţé ţĥéîŕ ƒļööŕ áñð çéîļîñĝ. Ûšé ţĥéšé ƒöŕ þļáţƒöŕɱš áñð öñé-öƒƒ šţŕûçţûŕé. ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"app.buildTab.searchBuildToolsAndKitchenItems\":[\"[Šéáŕçĥ ƀûîļð ţööļš áñð ķîţçĥéñ îţéɱš ~~~~~~~~~~]\"],\"app.buildTab.searchToolsFridgeSink\":[\"[Šéáŕçĥ ţööļš, ƒŕîðĝé, šîñķ… ~~~~~~~]\"],\"app.buildTab.selectACurvedWallToMatch\":[\"[Šéļéçţ á çûŕṽéð ŵáļļ ţö ɱáţçĥ îţš ŕáðîûš áñð áŕç. ~~~~~~~~~~~~]\"],\"app.buildTab.singleGate\":[\"[Šîñĝļé ĝáţé ~~~]\"],\"app.buildTab.slabCeilingColumn\":[\"[Šļáƀ, çéîļîñĝ, çöļûɱñ… ~~~~~~]\"],\"app.buildTab.solidPrivacy\":[\"[Šöļîð þŕîṽáçý ~~~~]\"],\"app.buildTab.traceALineAlongsideAnExisting\":[\"[Ţŕáçé á ļîñé áļöñĝšîðé áñ éẋîšţîñĝ ļîñéšéţ (Ƒ). ~~~~~~~~~~~~]\"],\"app.buildTab.verticalSlats\":[\"[Ṽéŕţîçáļ šļáţš ~~~~]\"],\"app.editorNavbar.allProjects\":[\"[Åļļ þŕöĵéçţš ~~~~]\"],\"app.editorNavbar.preview\":[\"[Þŕéṽîéŵ ~~~]\"],\"app.editorNavbar.projectName\":[\"[Þŕöĵéçţ ñáɱé ~~~~]\"],\"app.editorNavbar.renameProject\":[\"[Ŕéñáɱé þŕöĵéçţ ~~~~]\"],\"app.editorNavbar.share\":[\"[Šĥáŕé ~~]\"],\"app.kitchenBrowser.addLabel\":[\"[Åðð \",[\"label\"],\" ~]\"],\"app.kitchenBrowser.addToKitchen\":[\"[Åðð ţö ķîţçĥéñ ~~~~]\"],\"app.kitchenBrowser.chooseAnItemThenClickTo\":[\"[Çĥööšé áñ îţéɱ, ţĥéñ çļîçķ ţö þļáçé îţ. Åþþļîáñçéš îñçļûðé ţĥéîŕ çáƀîñéţŕý. ~~~~~~~~~~~~~~~~~~~]\"],\"app.kitchenBrowser.findInThisProjectLength\":[\"[Ƒîñð îñ ţĥîš þŕöĵéçţ · \",[\"length\"],\" ~~~~~~]\"],\"app.kitchenBrowser.findName\":[\"[Ƒîñð \",[\"name\"],\" ~~]\"],\"app.kitchenBrowser.groupAdd\":[\"[Ķîţçĥéñ · Åðð ~~~]\"],\"app.kitchenBrowser.groupInThisProject\":[\"[Ķîţçĥéñ · Îñ ţĥîš þŕöĵéçţ ~~~~~~]\"],\"app.kitchenBrowser.kitchenCabinet\":[\"[Ķîţçĥéñ çáƀîñéţ ~~~~~]\"],\"app.kitchenBrowser.noMatchingKitchenItemsPlacedYet\":[\"[Ñö ɱáţçĥîñĝ ķîţçĥéñ îţéɱš þļáçéð ýéţ. ~~~~~~~~~~]\"],\"app.kitchenBrowser.selectAndShowInScene\":[\"[Šéļéçţ áñð šĥöŵ îñ šçéñé ~~~~~~]\"],\"app.lib.buildPalette.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"app.lib.buildPalette.column\":[\"[Çöļûɱñ ~~]\"],\"app.lib.buildPalette.door\":[\"[Ðööŕ ~~]\"],\"app.lib.buildPalette.duct\":[\"[Ðûçţ ~~]\"],\"app.lib.buildPalette.dwvPipe\":[\"[ÐŴṼ Þîþé ~~~]\"],\"app.lib.buildPalette.elevator\":[\"[Éļéṽáţöŕ ~~~]\"],\"app.lib.buildPalette.fence\":[\"[Ƒéñçé ~~]\"],\"app.lib.buildPalette.hvacUnit\":[\"[ĤṼÅÇ Ûñîţ ~~~]\"],\"app.lib.buildPalette.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"app.lib.buildPalette.lineset\":[\"[Ļîñéšéţ ~~~]\"],\"app.lib.buildPalette.liquidLine\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"app.lib.buildPalette.mep\":[\"[ṀÉÞ ~]\"],\"app.lib.buildPalette.register\":[\"[Ŕéĝîšţéŕ ~~~]\"],\"app.lib.buildPalette.roof\":[\"[Ŕööƒ ~~]\"],\"app.lib.buildPalette.shelf\":[\"[Šĥéļƒ ~~]\"],\"app.lib.buildPalette.slab\":[\"[Šļáƀ ~~]\"],\"app.lib.buildPalette.spawnPoint\":[\"[Šþáŵñ þöîñţ ~~~]\"],\"app.lib.buildPalette.stairs\":[\"[Šţáîŕš ~~]\"],\"app.lib.buildPalette.terrace\":[\"[Ţéŕŕáçé ~~~]\"],\"app.lib.buildPalette.terrain\":[\"[Ţéŕŕáîñ ~~~]\"],\"app.lib.buildPalette.wall\":[\"[Ŵáļļ ~~]\"],\"app.lib.buildPalette.window\":[\"[Ŵîñðöŵ ~~]\"],\"app.lib.buildPanelModel.addFitting\":[\"[Åðð Ƒîţţîñĝ ~~~]\"],\"app.lib.buildPanelModel.addGate\":[\"[Åðð Ĝáţé ~~~]\"],\"app.lib.buildPanelModel.addOpenPassage\":[\"[Åðð Öþéñ Þáššáĝé ~~~~~]\"],\"app.lib.buildPanelModel.addTrap\":[\"[Åðð Ţŕáþ ~~~]\"],\"app.lib.buildPanelModel.build\":[\"[Ɓûîļð ~~]\"],\"app.lib.buildPanelModel.createFrom\":[\"[Çŕéáţé ƒŕöɱ ~~~]\"],\"app.lib.buildPanelModel.drawTheRoofFootprintWithTwo\":[\"[Ðŕáŵ ţĥé ŕööƒ ƒööţþŕîñţ ŵîţĥ ţŵö çöŕñéŕ çļîçķš. ~~~~~~~~~~~~]\"],\"app.lib.buildPanelModel.duct\":[\"[Ðûçţ ~~]\"],\"app.lib.buildPanelModel.dwvPipe\":[\"[ÐŴṼ Þîþé ~~~]\"],\"app.lib.buildPanelModel.featuresExtensions\":[\"[Ƒéáţûŕéš & éẋţéñšîöñš ~~~~~~]\"],\"app.lib.buildPanelModel.fence\":[\"[Ƒéñçé ~~]\"],\"app.lib.buildPanelModel.followLineset\":[\"[Ƒöļļöŵ ļîñéšéţ ~~~~]\"],\"app.lib.buildPanelModel.gatesOpenings\":[\"[Ĝáţéš & öþéñîñĝš ~~~~]\"],\"app.lib.buildPanelModel.hoverARoomToPreviewIts\":[\"[Ĥöṽéŕ á ŕööɱ ţö þŕéṽîéŵ îţš ƀöûñðáŕý, ţĥéñ çļîçķ ţö þļáçé. ~~~~~~~~~~~~~~]\"],\"app.lib.buildPanelModel.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"app.lib.buildPanelModel.mep\":[\"[ṀÉÞ ~]\"],\"app.lib.buildPanelModel.modularCabinet\":[\"[Ṁöðûļáŕ Çáƀîñéţ ~~~~~]\"],\"app.lib.buildPanelModel.off\":[\"[Öƒƒ ~]\"],\"app.lib.buildPanelModel.on\":[\"[Öñ ~]\"],\"app.lib.buildPanelModel.painting\":[\"[Þáîñţîñĝ ~~~]\"],\"app.lib.buildPanelModel.roof\":[\"[Ŕööƒ ~~]\"],\"app.lib.buildPanelModel.roofType\":[\"[Ŕööƒ ţýþé ~~~]\"],\"app.lib.buildPanelModel.toolCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ţööļ\"],\"other\":[\"#\",\" ţööļš\"]}],\" ~~~]\"],\"app.lib.buildTabState.conical\":[\"[Çöñîçáļ ~~~]\"],\"app.lib.buildTabState.draw\":[\"[Ðŕáŵ ~~]\"],\"app.lib.buildTabState.dutch\":[\"[Ðûţçĥ ~~]\"],\"app.lib.buildTabState.flat\":[\"[Ƒļáţ ~~]\"],\"app.lib.buildTabState.gable\":[\"[Ĝáƀļé ~~]\"],\"app.lib.buildTabState.gambrel\":[\"[Ĝáɱƀŕéļ ~~~]\"],\"app.lib.buildTabState.hip\":[\"[Ĥîþ ~]\"],\"app.lib.buildTabState.mansard\":[\"[Ṁáñšáŕð ~~~]\"],\"app.lib.buildTabState.room\":[\"[Ŕööɱ ~~]\"],\"app.lib.buildTabState.shed\":[\"[Šĥéð ~~]\"],\"app.lib.buildTabState.wall\":[\"[Ŵáļļ ~~]\"],\"app.sharePanel.anyoneWithTheLinkCanView\":[\"[Åñýöñé ŵîţĥ ţĥé ļîñķ çáñ ṽîéŵ ţĥîš þŕöĵéçţ. Ţĥéý çáññöţ éðîţ îţ. ~~~~~~~~~~~~~~~~]\"],\"app.sharePanel.copied\":[\"[Çöþîéð ~~]\"],\"app.sharePanel.copy\":[\"[Çöþý ~~]\"],\"app.sharePanel.couldNotReadTheSharingState\":[\"[Çöûļð ñöţ ŕéáð ţĥé šĥáŕîñĝ šţáţé. ~~~~~~~~~]\"],\"app.sharePanel.couldNotTurnOffThePublic\":[\"[Çöûļð ñöţ ţûŕñ öƒƒ ţĥé þûƀļîç ļîñķ. ~~~~~~~~~]\"],\"app.sharePanel.couldNotTurnOnThePublic\":[\"[Çöûļð ñöţ ţûŕñ öñ ţĥé þûƀļîç ļîñķ. ~~~~~~~~~]\"],\"app.sharePanel.embedCode\":[\"[Éɱƀéð çöðé ~~~]\"],\"app.sharePanel.embedLink\":[\"[Éɱƀéð ļîñķ ~~~]\"],\"app.sharePanel.hideControls\":[\"[Ĥîðé çöñţŕöļš ~~~~]\"],\"app.sharePanel.link\":[\"[Ļîñķ ~~]\"],\"app.sharePanel.onlyThe3dViewNoHeader\":[\"[Öñļý ţĥé 3Ð ṽîéŵ, ñö ĥéáðéŕ öŕ ţööļƀáŕ. ~~~~~~~~~]\"],\"app.sharePanel.open\":[\"[Öþéñ ~~]\"],\"app.sharePanel.publicLink\":[\"[Þûƀļîç ļîñķ ~~~]\"],\"app.sharePanel.shareProject\":[\"[Šĥáŕé þŕöĵéçţ ~~~~]\"],\"app.viewerToolbar.automaticDimensions\":[\"[Åûţöɱáţîç ðîɱéñšîöñš ~~~~~~]\"],\"app.viewerToolbar.camera\":[\"[Çáɱéŕá ~~]\"],\"app.viewerToolbar.cleanPlanDimensionsAppearWithSelection\":[\"[Çļéáñ þļáñ; ðîɱéñšîöñš áþþéáŕ ŵîţĥ šéļéçţîöñ ~~~~~~~~~~~~]\"],\"app.viewerToolbar.collapseSidebar\":[\"[Çöļļáþšé šîðéƀáŕ ~~~~~]\"],\"app.viewerToolbar.crispOpaqueEdgeLines\":[\"[Çŕîšþ, öþáǫûé éðĝé ļîñéš ~~~~~~]\"],\"app.viewerToolbar.cutaway\":[\"[Çûţáŵáý ~~~]\"],\"app.viewerToolbar.default\":[\"[Ðéƒáûļţ ~~~]\"],\"app.viewerToolbar.display\":[\"[Ðîšþļáý ~~~]\"],\"app.viewerToolbar.displaySettings\":[\"[Ðîšþļáý šéţţîñĝš ~~~~~]\"],\"app.viewerToolbar.doorWindowMarks\":[\"[Ðööŕ/ŵîñðöŵ ɱáŕķš ~~~~~]\"],\"app.viewerToolbar.edges\":[\"[Éðĝéš ~~]\"],\"app.viewerToolbar.enterVr\":[\"[Éñţéŕ ṼŔ ~~~]\"],\"app.viewerToolbar.exitVr\":[\"[Éẋîţ ṼŔ ~~]\"],\"app.viewerToolbar.expandSidebar\":[\"[Éẋþáñð šîðéƀáŕ ~~~~]\"],\"app.viewerToolbar.expert\":[\"[Éẋþéŕţ ~~]\"],\"app.viewerToolbar.exploded\":[\"[Éẋþļöðéð ~~~]\"],\"app.viewerToolbar.faceOfStud\":[\"[Ƒáçé öƒ šţûð ~~~]\"],\"app.viewerToolbar.faintOutlineOfMajorCreases\":[\"[Ƒáîñţ öûţļîñé öƒ ɱáĵöŕ çŕéášéš ~~~~~~~~]\"],\"app.viewerToolbar.feetInches\":[\"[Ƒééţ & îñçĥéš ~~~]\"],\"app.viewerToolbar.finishedFaces\":[\"[Ƒîñîšĥéð ƒáçéš ~~~~]\"],\"app.viewerToolbar.flatAndFastNoAmbientOcclusion\":[\"[Ƒļáţ áñð ƒášţ — ñö áɱƀîéñţ öççļûšîöñ ~~~~~~~~~]\"],\"app.viewerToolbar.floorPlanAnnotations\":[\"[Ƒļööŕ þļáñ áññöţáţîöñš ~~~~~~]\"],\"app.viewerToolbar.floorPlanMode\":[\"[Ƒļööŕ þļáñ ɱöðé ~~~~]\"],\"app.viewerToolbar.fullAmbientOcclusion\":[\"[Ƒûļļ áɱƀîéñţ öççļûšîöñ ~~~~~~]\"],\"app.viewerToolbar.fullDocumentationAndAnnotationControls\":[\"[Ƒûļļ ðöçûɱéñţáţîöñ áñð áññöţáţîöñ çöñţŕöļš ~~~~~~~~~~~~]\"],\"app.viewerToolbar.fullHeight\":[\"[Ƒûļļ ĥéîĝĥţ ~~~]\"],\"app.viewerToolbar.fullWallThickness\":[\"[Ƒûļļ ŵáļļ ţĥîçķñéšš ~~~~~~]\"],\"app.viewerToolbar.grid\":[\"[Ĝŕîð ~~]\"],\"app.viewerToolbar.levelsMode\":[\"[Ļéṽéļš: \",[\"mode\"],\" ~~]\"],\"app.viewerToolbar.low\":[\"[Ļöŵ ~]\"],\"app.viewerToolbar.magneticSnap\":[\"[Ṁáĝñéţîç šñáþ ~~~~]\"],\"app.viewerToolbar.manual\":[\"[Ṁáñûáļ ~~]\"],\"app.viewerToolbar.manualDimensions\":[\"[Ṁáñûáļ ðîɱéñšîöñš ~~~~~]\"],\"app.viewerToolbar.measurements\":[\"[Ṁéášûŕéɱéñţš ~~~~]\"],\"app.viewerToolbar.meters\":[\"[Ṁéţéŕš ~~]\"],\"app.viewerToolbar.millimeters\":[\"[Ṁîļļîɱéţéŕš ~~~~]\"],\"app.viewerToolbar.n3dMeasurements\":[\"[3Ð ɱéášûŕéɱéñţš ~~~~]\"],\"app.viewerToolbar.noEdgeLines\":[\"[Ñö éðĝé ļîñéš ~~~~]\"],\"app.viewerToolbar.off\":[\"[Öƒƒ ~]\"],\"app.viewerToolbar.on\":[\"[Öñ ~]\"],\"app.viewerToolbar.orthographic\":[\"[Öŕţĥöĝŕáþĥîç ~~~~]\"],\"app.viewerToolbar.perspective\":[\"[Þéŕšþéçţîṽé ~~~~]\"],\"app.viewerToolbar.preview\":[\"[Þŕéṽîéŵ ~~~]\"],\"app.viewerToolbar.previewMode\":[\"[Þŕéṽîéŵ ɱöðé ~~~~]\"],\"app.viewerToolbar.render\":[\"[Ŕéñðéŕ ~~]\"],\"app.viewerToolbar.rendered\":[\"[Ŕéñðéŕéð ~~~]\"],\"app.viewerToolbar.roomLabels\":[\"[Ŕööɱ ļáƀéļš ~~~]\"],\"app.viewerToolbar.sceneTheme\":[\"[Šçéñé ţĥéɱé ~~~]\"],\"app.viewerToolbar.shadows\":[\"[Šĥáðöŵš ~~~]\"],\"app.viewerToolbar.singleWallAxis\":[\"[Šîñĝļé ŵáļļ áẋîš ~~~~~]\"],\"app.viewerToolbar.soft\":[\"[Šöƒţ ~~]\"],\"app.viewerToolbar.solid\":[\"[Šöļîð ~~]\"],\"app.viewerToolbar.solo\":[\"[Šöļö ~~]\"],\"app.viewerToolbar.stack\":[\"[Šţáçķ ~~]\"],\"app.viewerToolbar.stairAnnotations\":[\"[Šţáîŕ áññöţáţîöñš ~~~~~]\"],\"app.viewerToolbar.strong\":[\"[Šţŕöñĝ ~~]\"],\"app.viewerToolbar.structuralCoreFace\":[\"[Šţŕûçţûŕáļ çöŕé ƒáçé ~~~~~~]\"],\"app.viewerToolbar.structuralGridsColumnCenters\":[\"[Šţŕûçţûŕáļ ĝŕîðš & çöļûɱñ çéñţéŕš ~~~~~~~~~]\"],\"app.viewerToolbar.translucent\":[\"[Ţŕáñšļûçéñţ ~~~~]\"],\"app.viewerToolbar.units\":[\"[Ûñîţš ~~]\"],\"app.viewerToolbar.walkthrough\":[\"[Ŵáļķţĥŕöûĝĥ ~~~~]\"],\"app.viewerToolbar.wallCenterline\":[\"[Ŵáļļ çéñţéŕļîñé ~~~~~]\"],\"app.viewerToolbar.wallDimensions\":[\"[Ŵáļļ ðîɱéñšîöñš ~~~~~]\"],\"app.viewerToolbar.wallsLabel\":[\"[Ŵáļļš: \",[\"label\"],\" ~~]\"],\"core.level.basement\":[\"[Ɓášéɱéñţ ~~~]\"],\"core.level.basementNumber\":[\"[Ɓášéɱéñţ \",[\"number\"],\" ~~~]\"],\"core.level.floorNumber\":[\"[Ƒļööŕ \",[\"number\"],\" ~~]\"],\"core.level.groundFloor\":[\"[Ĝŕöûñð ƒļööŕ ~~~~]\"],\"editor.actionMenu.cameraActions.orbitLeft\":[\"[Öŕƀîţ Ļéƒţ ~~~]\"],\"editor.actionMenu.cameraActions.orbitRight\":[\"[Öŕƀîţ Ŕîĝĥţ ~~~]\"],\"editor.actionMenu.cameraActions.topView\":[\"[Ţöþ Ṽîéŵ ~~~]\"],\"editor.actionMenu.controlModes.delete\":[\"[Ðéļéţé ~~]\"],\"editor.actionMenu.controlModes.select\":[\"[Šéļéçţ ~~]\"],\"editor.actionMenu.followPascalPill.resumeFollowing\":[\"[Ŕéšûɱé ƒöļļöŵîñĝ ~~~~~]\"],\"editor.actionMenu.followPascalToggle.off\":[\"[Ƒöļļöŵ Þášçáļ: Öƒƒ ~~~~~]\"],\"editor.actionMenu.followPascalToggle.on\":[\"[Ƒöļļöŵ Þášçáļ: Öñ ~~~~~]\"],\"editor.actionMenu.furnishTools.appliance\":[\"[Åþþļîáñçé ~~~]\"],\"editor.actionMenu.furnishTools.bathroom\":[\"[Ɓáţĥŕööɱ ~~~]\"],\"editor.actionMenu.furnishTools.furniture\":[\"[Ƒûŕñîţûŕé ~~~]\"],\"editor.actionMenu.furnishTools.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"editor.actionMenu.furnishTools.outdoor\":[\"[Öûţðööŕ ~~~]\"],\"editor.actionMenu.measurementControl.angle\":[\"[Åñĝļé ~~]\"],\"editor.actionMenu.measurementControl.angularDimension\":[\"[Åñĝûļáŕ ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.arcLength\":[\"[Åŕç ļéñĝţĥ ~~~]\"],\"editor.actionMenu.measurementControl.area\":[\"[Åŕéá ~~]\"],\"editor.actionMenu.measurementControl.centerMark\":[\"[Çéñţéŕ ɱáŕķ ~~~]\"],\"editor.actionMenu.measurementControl.chordDimension\":[\"[Çĥöŕð ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.continuousDimension\":[\"[Çöñţîñûöûš ðîɱéñšîöñ ~~~~~~]\"],\"editor.actionMenu.measurementControl.coordinateDimensions\":[\"[Çööŕðîñáţé ðîɱéñšîöñš ~~~~~~]\"],\"editor.actionMenu.measurementControl.diameterDimension\":[\"[Ðîáɱéţéŕ ðîɱéñšîöñ ~~~~~~]\"],\"editor.actionMenu.measurementControl.distance\":[\"[Ðîšţáñçé ~~~]\"],\"editor.actionMenu.measurementControl.floorPlan\":[\"[Ƒļööŕ þļáñ ~~~]\"],\"editor.actionMenu.measurementControl.linearDimension\":[\"[Ļîñéáŕ ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.measureSelectedlabel\":[\"[Ṁéášûŕé: \",[\"selectedLabel\"],\" ~~~]\"],\"editor.actionMenu.measurementControl.measurementOptions\":[\"[Ṁéášûŕéɱéñţ öþţîöñš ~~~~~~]\"],\"editor.actionMenu.measurementControl.measurementType\":[\"[Ṁéášûŕéɱéñţ ţýþé ~~~~~]\"],\"editor.actionMenu.measurementControl.perimeter\":[\"[Þéŕîɱéţéŕ ~~~]\"],\"editor.actionMenu.measurementControl.radiusDimension\":[\"[Ŕáðîûš ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.smart\":[\"[Šɱáŕţ ~~]\"],\"editor.actionMenu.measurementControl.volume\":[\"[Ṽöļûɱé ~~]\"],\"editor.actionMenu.pointAskButton.pointAndAsk\":[\"[Þöîñţ áñð ášķ ~~~~]\"],\"editor.actionMenu.pointAskButton.pointAndAskC\":[\"[Þöîñţ áñð ášķ (Ç) ~~~~]\"],\"editor.actionMenu.pointAskButton.pointAndAskWorksInThe\":[\"[Þöîñţ áñð ášķ ŵöŕķš îñ ţĥé 3Ð ṽîéŵ ~~~~~~~~]\"],\"editor.actionMenu.structureTools.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.actionMenu.structureTools.column\":[\"[Çöļûɱñ ~~]\"],\"editor.actionMenu.structureTools.door\":[\"[Ðööŕ ~~]\"],\"editor.actionMenu.structureTools.duct\":[\"[Ðûçţ ~~]\"],\"editor.actionMenu.structureTools.ductFitting\":[\"[Ðûçţ Ƒîţţîñĝ ~~~~]\"],\"editor.actionMenu.structureTools.dwvPipe\":[\"[ÐŴṼ Þîþé ~~~]\"],\"editor.actionMenu.structureTools.elevator\":[\"[Éļéṽáţöŕ ~~~]\"],\"editor.actionMenu.structureTools.fence\":[\"[Ƒéñçé ~~]\"],\"editor.actionMenu.structureTools.gableRoof\":[\"[Ĝáƀļé Ŕööƒ ~~~]\"],\"editor.actionMenu.structureTools.hvacUnit\":[\"[ĤṼÅÇ Ûñîţ ~~~]\"],\"editor.actionMenu.structureTools.lineset\":[\"[Ļîñéšéţ ~~~]\"],\"editor.actionMenu.structureTools.liquidLine\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"editor.actionMenu.structureTools.pipeFitting\":[\"[Þîþé Ƒîţţîñĝ ~~~~]\"],\"editor.actionMenu.structureTools.register\":[\"[Ŕéĝîšţéŕ ~~~]\"],\"editor.actionMenu.structureTools.shelf\":[\"[Šĥéļƒ ~~]\"],\"editor.actionMenu.structureTools.slab\":[\"[Šļáƀ ~~]\"],\"editor.actionMenu.structureTools.spawnPoint\":[\"[Šþáŵñ Þöîñţ ~~~]\"],\"editor.actionMenu.structureTools.stairs\":[\"[Šţáîŕš ~~]\"],\"editor.actionMenu.structureTools.trap\":[\"[Ţŕáþ ~~]\"],\"editor.actionMenu.structureTools.wall\":[\"[Ŵáļļ ~~]\"],\"editor.actionMenu.structureTools.window\":[\"[Ŵîñðöŵ ~~]\"],\"editor.actionMenu.structureTools.zone\":[\"[Žöñé ~~]\"],\"editor.actionMenu.viewToggles.deleteGuideImage\":[\"[Ðéļéţé ĝûîðé îɱáĝé ~~~~~]\"],\"editor.actionMenu.viewToggles.deleteScan\":[\"[Ðéļéţé šçáñ ~~~]\"],\"editor.actionMenu.viewToggles.guideCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ĝûîðé îɱáĝé öñ ţĥîš ļéṽéļ\"],\"other\":[\"#\",\" ĝûîðé îɱáĝéš öñ ţĥîš ļéṽéļ\"]}],\" ~~~~~~~~~~~~~]\"],\"editor.actionMenu.viewToggles.guideImageNumber\":[\"[Ĝûîðé îɱáĝé \",[\"number\"],\" ~~~]\"],\"editor.actionMenu.viewToggles.guideImageSettings\":[\"[Ĝûîðé îɱáĝé šéţţîñĝš ~~~~~~]\"],\"editor.actionMenu.viewToggles.guideImages\":[\"[Ĝûîðé îɱáĝéš ~~~~]\"],\"editor.actionMenu.viewToggles.guides\":[\"[Ĝûîðéš ~~]\"],\"editor.actionMenu.viewToggles.guidesHidden\":[\"[Ĝûîðéš: Ĥîððéñ ~~~~]\"],\"editor.actionMenu.viewToggles.guidesVisible\":[\"[Ĝûîðéš: Ṽîšîƀļé ~~~~]\"],\"editor.actionMenu.viewToggles.hideGuideImages\":[\"[Ĥîðé ĝûîðé îɱáĝéš ~~~~~]\"],\"editor.actionMenu.viewToggles.hideReferenceFloor\":[\"[Ĥîðé ŕéƒéŕéñçé ƒļööŕ ~~~~~~]\"],\"editor.actionMenu.viewToggles.hideScans\":[\"[Ĥîðé šçáñš ~~~]\"],\"editor.actionMenu.viewToggles.levelsBelow\":[\"[\",[\"count\"],\" ƀéļöŵ ~~]\"],\"editor.actionMenu.viewToggles.noLowerFloorAvailable\":[\"[Ñö ļöŵéŕ ƒļööŕ áṽáîļáƀļé. ~~~~~~~]\"],\"editor.actionMenu.viewToggles.opacity\":[\"[Öþáçîţý ~~~]\"],\"editor.actionMenu.viewToggles.referenceFloor\":[\"[Ŕéƒéŕéñçé ƒļööŕ ~~~~~]\"],\"editor.actionMenu.viewToggles.referenceFloorSelectedlevelname\":[\"[Ŕéƒéŕéñçé ƒļööŕ: \",[\"selectedLevelName\"],\" ~~~~~]\"],\"editor.actionMenu.viewToggles.referenceFloorSettings\":[\"[Ŕéƒéŕéñçé ƒļööŕ šéţţîñĝš ~~~~~~~]\"],\"editor.actionMenu.viewToggles.referenceSettings\":[\"[Ŕéƒéŕéñçé šéţţîñĝš ~~~~~~]\"],\"editor.actionMenu.viewToggles.references\":[\"[Ŕéƒéŕéñçéš ~~~]\"],\"editor.actionMenu.viewToggles.referencesEmpty\":[\"[Ûþļöáð ĜĻƁ ɱéšĥéš áš šçáñ ŕéƒéŕéñçéš öŕ ƀļûéþŕîñţ îɱáĝéš áš ĝûîðé ŕéƒéŕéñçéš. ~~~~~~~~~~~~~~~~~~~~]\"],\"editor.actionMenu.viewToggles.referencesHidden\":[\"[Ŕéƒéŕéñçéš: Ĥîððéñ ~~~~~]\"],\"editor.actionMenu.viewToggles.referencesVisible\":[\"[Ŕéƒéŕéñçéš: Ṽîšîƀļé ~~~~~~]\"],\"editor.actionMenu.viewToggles.riserDiagram\":[\"[Ŕîšéŕ ðîáĝŕáɱ ~~~~]\"],\"editor.actionMenu.viewToggles.scanCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" šçáñ öñ ţĥîš ļéṽéļ\"],\"other\":[\"#\",\" šçáñš öñ ţĥîš ļéṽéļ\"]}],\" ~~~~~~~~~~]\"],\"editor.actionMenu.viewToggles.scanNumber\":[\"[Šçáñ \",[\"number\"],\" ~~]\"],\"editor.actionMenu.viewToggles.scanSettings\":[\"[Šçáñ šéţţîñĝš ~~~~]\"],\"editor.actionMenu.viewToggles.scans\":[\"[Šçáñš ~~]\"],\"editor.actionMenu.viewToggles.scansHidden\":[\"[Šçáñš: Ĥîððéñ ~~~~]\"],\"editor.actionMenu.viewToggles.scansVisible\":[\"[Šçáñš: Ṽîšîƀļé ~~~~]\"],\"editor.actionMenu.viewToggles.showGuideImages\":[\"[Šĥöŵ ĝûîðé îɱáĝéš ~~~~~]\"],\"editor.actionMenu.viewToggles.showReferenceFloor\":[\"[Šĥöŵ ŕéƒéŕéñçé ƒļööŕ ~~~~~~]\"],\"editor.actionMenu.viewToggles.showScans\":[\"[Šĥöŵ šçáñš ~~~]\"],\"editor.actionMenu.viewToggles.uploadScanOrGuideImage\":[\"[Ûþļöáð šçáñ öŕ ĝûîðé îɱáĝé ~~~~~~~]\"],\"editor.backToHome\":[\"[Ɓáçķ ţö ĥöɱé ~~~]\"],\"editor.buildPanel.advanced\":[\"[Åðṽáñçéð ~~~]\"],\"editor.buildPanel.rooms.hint\":[\"[ŵáļļš · ƒļööŕ · çéîļîñĝ ~~~~~~]\"],\"editor.buildPanel.rooms.idle\":[\"[Þîçķ á šĥáþé ţö šţáŕţ. Éṽéŕý ŕööɱ ƀŕîñĝš îţš öŵñ ŵáļļš, ƒļööŕ áñð çéîļîñĝ. ~~~~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.polygon.caption\":[\"[\",[\"lead\"],\" ţĥéñ ţĥé ƒîŕšţ öñé áĝáîñ ţö çļöšé. Ƒöŕ Ļ-šĥáþéš áñð áñĝļéð ŕööɱš. ~~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.polygon.label\":[\"[Þöļýĝöñ ~~~]\"],\"editor.buildPanel.rooms.polygon.lead\":[\"[Çļîçķ éáçĥ çöŕñéŕ, ~~~~~]\"],\"editor.buildPanel.rooms.polygon.title\":[\"[Þöļýĝöñ ŕööɱ ~~~~]\"],\"editor.buildPanel.rooms.rectangle.caption\":[\"[\",[\"lead\"],\" öñ ţĥé ĝŕîð. Ŵáļļš, ƒļööŕ áñð çéîļîñĝ áŕé çŕéáţéð ţöĝéţĥéŕ. ~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.rectangle.label\":[\"[Ŕéçţáñĝļé ~~~]\"],\"editor.buildPanel.rooms.rectangle.lead\":[\"[Çļîçķ ţŵö çöŕñéŕš ~~~~~]\"],\"editor.buildPanel.rooms.rectangle.title\":[\"[Ŕéçţáñĝļé ŕööɱ ~~~~]\"],\"editor.buildPanel.rooms.title\":[\"[Ŕööɱš ~~]\"],\"editor.buildPanel.rooms.walls.caption\":[\"[\",[\"lead\"],\" Çļöšé á ļööþ áñð îţ ƀéçöɱéš á ŕööɱ; ļéáṽé îţ öþéñ ƒöŕ þáŕţîţîöñš. ~~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.walls.label\":[\"[Ŵáļļš ~~]\"],\"editor.buildPanel.rooms.walls.lead\":[\"[Ðŕáŵ öñé ŵáļļ áţ á ţîɱé. ~~~~~~]\"],\"editor.buildPanel.rooms.walls.title\":[\"[Ŵáļļš ~~]\"],\"editor.cameraControlsHint\":[\"[Çáɱéŕá çöñţŕöļš ĥîñţ ~~~~~~]\"],\"editor.cameraHint.pan\":[\"[Þáñ ~]\"],\"editor.cameraHint.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.cameraHint.zoom\":[\"[Žööɱ ~~]\"],\"editor.dismiss\":[\"[Ðîšɱîšš ~~~]\"],\"editor.dismissCameraControlsHint\":[\"[Ðîšɱîšš çáɱéŕá çöñţŕöļš ĥîñţ ~~~~~~~~]\"],\"editor.expandSidebar\":[\"[Éẋþáñð šîðéƀáŕ ~~~~]\"],\"editor.floatingActionMenu.axis\":[\"[Åẋîš ~~]\"],\"editor.floatingActionMenu.axis2\":[\"[⌥ áẋîš ~~]\"],\"editor.floatingActionMenu.noEquipment\":[\"[⚠ ñö éǫûîþɱéñţ ~~~~]\"],\"editor.floatingActionMenu.rTRotate\":[\"[Ŕ/Ţ ŕöţáţé ~~~]\"],\"editor.floatingActionMenu.registerCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕéĝîšţéŕ\"],\"other\":[\"#\",\" ŕéĝîšţéŕš\"]}],\" ~~~~~~]\"],\"editor.floatingActionMenu.runCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕûñ\"],\"other\":[\"#\",\" ŕûñš\"]}],\" ~~~]\"],\"editor.floatingActionMenu.system\":[\"[Šýšţéɱ ~~]\"],\"editor.floorFootprint.area\":[\"[Ƒļööŕ áŕéá ~~~]\"],\"editor.floorFootprint.room\":[\"[\",[\"room\"],\" ƒļööŕ ~~]\"],\"editor.floorFootprint.shared\":[\"[Šĥáŕéð ƒļööŕ ~~~~]\"],\"editor.helpers.buildingHelper.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.helpers.buildingHelper.placeBuilding\":[\"[Þļáçé ƀûîļðîñĝ ~~~~]\"],\"editor.helpers.buildingHelper.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.helpers.contextualHelperPanel.cancelPlacement\":[\"[Çáñçéļ þļáçéɱéñţ ~~~~~]\"],\"editor.helpers.contextualHelperPanel.continuationClickOrPressCTo\":[\"[Çöñţîñûáţîöñ — çļîçķ öŕ þŕéšš Ç ţö çýçļé ~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.continuationLabel\":[\"[Çöñţîñûáţîöñ: \",[\"label\"],\" ~~~~]\"],\"editor.helpers.contextualHelperPanel.dragToDrawFence\":[\"[Ðŕáĝ ţö ðŕáŵ ƒéñçé ~~~~~]\"],\"editor.helpers.contextualHelperPanel.eraseScope\":[\"[Éŕášé: \",[\"scope\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.eraseScopeClickOrPressShift\":[\"[Éŕášé šçöþé — çļîçķ öŕ þŕéšš Šĥîƒţ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.eraseScopeLabel\":[\"[Éŕášé šçöþé: \",[\"scope\"],\" ~~~]\"],\"editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT\":[\"[Ƒéñçé ţýþé — çļîçķ öŕ þŕéšš Ţ ţö šŵîţçĥ ƀéţŵééñ šţŕáîĝĥţ, çûŕṽéð áñð ƒŕééĥáñð ~~~~~~~~~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.fewerShortcuts\":[\"[Ƒéŵéŕ šĥöŕţçûţš ~~~~~]\"],\"editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick\":[\"[Ƒîñîšĥ çûŕṽé (öŕ ðöûƀļé-çļîçķ) ~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.gridLength\":[\"[Ĝŕîð: \",[\"length\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl\":[\"[Ĝŕîð šţéþ — çļîçķ öŕ ţáþ Çţŕļ ţö çýçļé ~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.gridStepLength\":[\"[Ĝŕîð šţéþ: \",[\"length\"],\" ~~~]\"],\"editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase\":[\"[Ĥöṽéŕ á þáîñţéð šûŕƒáçé ţö éŕášé ~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPaint\":[\"[Ĥöṽéŕ á šûŕƒáçé ţö þáîñţ ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts\":[\"[Ĥöṽéŕ á šûŕƒáçé ţö þîçķ îţš ɱáţéŕîáļ ~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.moreShortcuts\":[\"[Ṁöŕé šĥöŕţçûţš ~~~~]\"],\"editor.helpers.contextualHelperPanel.paintScope\":[\"[Þáîñţ: \",[\"scope\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.paintScopeClickOrPressShift\":[\"[Þáîñţ šçöþé — çļîçķ öŕ þŕéšš Šĥîƒţ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.paintScopeLabel\":[\"[Þáîñţ šçöþé: \",[\"scope\"],\" ~~~]\"],\"editor.helpers.contextualHelperPanel.pickScope\":[\"[Þîçķ: \",[\"scope\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.placeGateOnAFence\":[\"[Þļáçé ĝáţé öñ á ƒéñçé ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.placePassageOnAFence\":[\"[Þļáçé þáššáĝé öñ á ƒéñçé ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.selectAMaterialToPaint\":[\"[Šéļéçţ á ɱáţéŕîáļ ţö þáîñţ ~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingAngles\":[\"[Šñáþþîñĝ: Åñĝļéš ~~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingGrid\":[\"[Šñáþþîñĝ: Ĝŕîð ~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingLines\":[\"[Šñáþþîñĝ: Ļîñéš ~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift\":[\"[Šñáþþîñĝ ɱöðé — çļîçķ öŕ þŕéšš Šĥîƒţ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingOff\":[\"[Šñáþþîñĝ: Öƒƒ ~~~~]\"],\"editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved\":[\"[Šţŕáîĝĥţ çöñţîñûáţîöñ îš ûñáṽáîļáƀļé ƒöŕ çûŕṽéð öŕ ƒŕééĥáñð ƒéñçéš ~~~~~~~~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.straightContinuous\":[\"[Šţŕáîĝĥţ: Çöñţîñûöûš ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress\":[\"[Šţŕáîĝĥţ ƒéñçé çöñţîñûáţîöñ — çļîçķ öŕ þŕéšš Ç ţö ţöĝĝļé ~~~~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.straightSingle\":[\"[Šţŕáîĝĥţ: Šîñĝļé ~~~~~]\"],\"editor.helpers.helperManager.addPoint\":[\"[Åðð þöîñţ ~~~]\"],\"editor.helpers.helperManager.addPointClickTheFirstTo\":[\"[Åðð þöîñţ · çļîçķ ţĥé ƒîŕšţ ţö çļöšé ~~~~~~~~~]\"],\"editor.helpers.helperManager.brushSize\":[\"[Ɓŕûšĥ šîžé ~~~]\"],\"editor.helpers.helperManager.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.helpers.helperManager.cancelPicking\":[\"[Çáñçéļ þîçķîñĝ ~~~~]\"],\"editor.helpers.helperManager.cancelStroke\":[\"[Çáñçéļ šţŕöķé ~~~~]\"],\"editor.helpers.helperManager.done\":[\"[Ðöñé ~~]\"],\"editor.helpers.helperManager.drawTheMezzanine\":[\"[Ðŕáŵ ţĥé ɱéžžáñîñé ~~~~~]\"],\"editor.helpers.helperManager.drawTheOpening\":[\"[Ðŕáŵ ţĥé öþéñîñĝ ~~~~~]\"],\"editor.helpers.helperManager.drawTheTerrace\":[\"[Ðŕáŵ ţĥé ţéŕŕáçé ~~~~~]\"],\"editor.helpers.helperManager.exitSmartMeasure\":[\"[Éẋîţ šɱáŕţ ɱéášûŕé ~~~~~]\"],\"editor.helpers.helperManager.finish\":[\"[Ƒîñîšĥ ~~]\"],\"editor.helpers.helperManager.finishAtTheEdge\":[\"[Ƒîñîšĥ áţ ţĥé éðĝé ~~~~~]\"],\"editor.helpers.helperManager.freeMove\":[\"[Ƒŕéé ɱöṽé ~~~]\"],\"editor.helpers.helperManager.freeMoveSlideDoorsAndWindows\":[\"[Ƒŕéé ɱöṽé · šļîðé ðööŕš áñð ŵîñðöŵš ~~~~~~~~~]\"],\"editor.helpers.helperManager.holdToPickAMaterial\":[\"[Ĥöļð ţö þîçķ á ɱáţéŕîáļ ~~~~~~]\"],\"editor.helpers.helperManager.inspectSurfaceDimensions\":[\"[Îñšþéçţ šûŕƒáçé ðîɱéñšîöñš ~~~~~~~~]\"],\"editor.helpers.helperManager.paintWithThisMaterial\":[\"[Þáîñţ ŵîţĥ ţĥîš ɱáţéŕîáļ ~~~~~~~]\"],\"editor.helpers.helperManager.pickTargetHeight\":[\"[Þîçķ ţáŕĝéţ ĥéîĝĥţ ~~~~~]\"],\"editor.helpers.helperManager.pinMeasurementLens\":[\"[Þîñ ɱéášûŕéɱéñţ ļéñš ~~~~~~]\"],\"editor.helpers.helperManager.place\":[\"[Þļáçé ~~]\"],\"editor.helpers.helperManager.placeInsideTheRoom\":[\"[Þļáçé îñšîðé ţĥé ŕööɱ ~~~~~~]\"],\"editor.helpers.helperManager.pressAnywhereDragToTheOpposite\":[\"[Þŕéšš áñýŵĥéŕé, ðŕáĝ ţö ţĥé öþþöšîţé çöŕñéŕ ~~~~~~~~~~~]\"],\"editor.helpers.helperManager.raiseOrLower\":[\"[Ŕáîšé öŕ ļöŵéŕ ~~~~]\"],\"editor.helpers.helperManager.removeAPaintedPartOrReset\":[\"[Ŕéɱöṽé á þáîñţéð þáŕţ, öŕ ŕéšéţ á šûŕƒáçé ~~~~~~~~~~]\"],\"editor.helpers.helperManager.removeLastPoint\":[\"[Ŕéɱöṽé ļášţ þöîñţ ~~~~~]\"],\"editor.helpers.helperManager.resize\":[\"[Ŕéšîžé ~~]\"],\"editor.helpers.helperManager.rotate45\":[\"[Ŕöţáţé ±45° ~~]\"],\"editor.helpers.helperManager.rotateTheSelection45\":[\"[Ŕöţáţé ţĥé šéļéçţîöñ ±45° ~~~~~~]\"],\"editor.helpers.helperManager.setOneCornerThenTheOpposite\":[\"[Šéţ öñé çöŕñéŕ, ţĥéñ ţĥé öþþöšîţé ~~~~~~~~~]\"],\"editor.helpers.itemHelper.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.helpers.itemHelper.forcePlace\":[\"[Ƒöŕçé þļáçé ~~~]\"],\"editor.helpers.itemHelper.place\":[\"[Þļáçé ~~]\"],\"editor.helpers.itemHelper.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.helpers.registeredToolHelper.guidedConstraintsBypassed\":[\"[Ĝûîðéð çöñšţŕáîñţš ƀýþáššéð ~~~~~~~~]\"],\"editor.inspector.field.angle.g10zaw\":[\"[Åñĝļé ~~]\"],\"editor.inspector.field.armLengthM.1jclqgw\":[\"[Åŕɱ ļéñĝţĥ ɱ ~~~]\"],\"editor.inspector.field.attachmentSide.6n9s5v\":[\"[Åţţáçĥɱéñţ šîðé ~~~~~]\"],\"editor.inspector.field.autoHangers.10554ka\":[\"[Åûţö ĥáñĝéŕš ~~~~]\"],\"editor.inspector.field.autoMiterCorners.zxr5lt\":[\"[Åûţö ɱîţéŕ çöŕñéŕš ~~~~~]\"],\"editor.inspector.field.autoSpan.1gas9r6\":[\"[Åûţö šþáñ ~~~]\"],\"editor.inspector.field.backRatio.1ughd99\":[\"[Ɓáçķ ŕáţîö ~~~]\"],\"editor.inspector.field.baseHeight.1hs4zdf\":[\"[Ɓášé ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.baseStyle.24vty5\":[\"[Ɓášé šţýļé ~~~]\"],\"editor.inspector.field.beamHeight.1kq0oh1\":[\"[Ɓéáɱ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.beamWidth.1q1mzbe\":[\"[Ɓéáɱ ŵîðţĥ ~~~]\"],\"editor.inspector.field.bodyShape.arvkuw\":[\"[Ɓöðý šĥáþé ~~~]\"],\"editor.inspector.field.bracketStyle.1vvoptm\":[\"[Ɓŕáçķéţ šţýļé ~~~~]\"],\"editor.inspector.field.branchAngle.v56zme\":[\"[Ɓŕáñçĥ áñĝļé ~~~~]\"],\"editor.inspector.field.cabHeight.1yn34mk\":[\"[Çáƀ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.canopyForm.1czzggp\":[\"[Çáñöþý ƒöŕɱ ~~~]\"],\"editor.inspector.field.cap.s0thej\":[\"[Çáþ ~]\"],\"editor.inspector.field.capOverhang.kxxz9j\":[\"[Çáþ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.capShape.17mbxhu\":[\"[Çáþ šĥáþé ~~~]\"],\"editor.inspector.field.capThickness.u835q9\":[\"[Çáþ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.carcassHeight.1aks0zy\":[\"[Çáŕçášš ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.cleanoutStyle.127zz6z\":[\"[Çļéáñöûţ šţýļé ~~~~]\"],\"editor.inspector.field.collarDiameter.1d5k28r\":[\"[Çöļļáŕ ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.collarHeight.1dqwsrf\":[\"[Çöļļáŕ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.collarShape.1gacv11\":[\"[Çöļļáŕ šĥáþé ~~~~]\"],\"editor.inspector.field.collarWidth.qvc9ik\":[\"[Çöļļáŕ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.columns.1sy73ks\":[\"[Çöļûɱñš ~~~]\"],\"editor.inspector.field.conicalFullCircle.1pgkpz5\":[\"[Çöñîçáļ ƒûļļ çîŕçļé ~~~~~~]\"],\"editor.inspector.field.connectionMode.1nty478\":[\"[Çöññéçţîöñ ɱöðé ~~~~~]\"],\"editor.inspector.field.connectionOffset.2m70s8\":[\"[Çöññéçţîöñ öƒƒšéţ ~~~~~]\"],\"editor.inspector.field.cornerBevel.16iniho\":[\"[Çöŕñéŕ ƀéṽéļ ~~~~]\"],\"editor.inspector.field.coveringType.95yd3k\":[\"[Çöṽéŕîñĝ ţýþé ~~~~]\"],\"editor.inspector.field.cricketHeight.pok31n\":[\"[Çŕîçķéţ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.cricketLength.i2aht8\":[\"[Çŕîçķéţ ļéñĝţĥ ~~~~]\"],\"editor.inspector.field.cricketSide.1xnwil7\":[\"[Çŕîçķéţ šîðé ~~~~]\"],\"editor.inspector.field.cricketStyle.10j0lat\":[\"[Çŕîçķéţ šţýļé ~~~~]\"],\"editor.inspector.field.curb.5xi2ol\":[\"[Çûŕƀ ~~]\"],\"editor.inspector.field.curbHeight.1yn97sg\":[\"[Çûŕƀ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.curveOffset.l4xhvr\":[\"[Çûŕṽé öƒƒšéţ ~~~~]\"],\"editor.inspector.field.damperAngle.h5fxn7\":[\"[Ðáɱþéŕ áñĝļé ~~~~]\"],\"editor.inspector.field.deckThickness.4jmqze\":[\"[Ðéçķ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.defaultLevelId.xmrjzp\":[\"[Ðéƒáûļţ ļéṽéļ îð ~~~~~]\"],\"editor.inspector.field.depth.1lu11u2\":[\"[Ðéþţĥ ~~]\"],\"editor.inspector.field.diameter.s3robe\":[\"[Ðîáɱéţéŕ ~~~]\"],\"editor.inspector.field.diameter2.pm6cl4\":[\"[Ðîáɱéţéŕ2 ~~~]\"],\"editor.inspector.field.doorDurationMs.13nx909\":[\"[Ðööŕ ðûŕáţîöñ ɱš ~~~~~]\"],\"editor.inspector.field.doorHeight.92r9k4\":[\"[Ðööŕ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.doorPanelStyle.2qog4q\":[\"[Ðööŕ þáñéļ šţýļé ~~~~~]\"],\"editor.inspector.field.doorStyle.gerpos\":[\"[Ðööŕ šţýļé ~~~]\"],\"editor.inspector.field.doorWidth.sy732l\":[\"[Ðööŕ ŵîðţĥ ~~~]\"],\"editor.inspector.field.downspoutEnabled.1gn00nv\":[\"[Ðöŵñšþöûţ éñáƀļéð ~~~~~]\"],\"editor.inspector.field.downspoutPosition.fxcsop\":[\"[Ðöŵñšþöûţ þöšîţîöñ ~~~~~~]\"],\"editor.inspector.field.ductMaterial.i8eonq\":[\"[Ðûçţ ɱáţéŕîáļ ~~~~]\"],\"editor.inspector.field.dutchGabletRake.6paydp\":[\"[Ðûţçĥ ĝáƀļéţ ŕáķé ~~~~~]\"],\"editor.inspector.field.dutchHipHeightRatio.1etnwgg\":[\"[Ðûţçĥ ĥîþ ĥéîĝĥţ ŕáţîö ~~~~~~]\"],\"editor.inspector.field.dutchHipWidthRatio.1dopfvb\":[\"[Ðûţçĥ ĥîþ ŵîðţĥ ŕáţîö ~~~~~~]\"],\"editor.inspector.field.dutchTopRakeThickness.1w9khxt\":[\"[Ðûţçĥ ţöþ ŕáķé ţĥîçķñéšš ~~~~~~~]\"],\"editor.inspector.field.dutchWaistLengthRatio.agtoxw\":[\"[Ðûţçĥ ŵáîšţ ļéñĝţĥ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.dwellMs.1lkk0o5\":[\"[Ðŵéļļ ɱš ~~~]\"],\"editor.inspector.field.edgeInset.1obeimx\":[\"[Éðĝé îñšéţ ~~~]\"],\"editor.inspector.field.elevation.4jbp44\":[\"[Éļéṽáţîöñ ~~~]\"],\"editor.inspector.field.endCapLeft.19jel4v\":[\"[Éñð çáþ ļéƒţ ~~~]\"],\"editor.inspector.field.endCapRight.lhse9c\":[\"[Éñð çáþ ŕîĝĥţ ~~~~]\"],\"editor.inspector.field.endCaps.4fsb5b\":[\"[Éñð çáþš ~~~]\"],\"editor.inspector.field.endPost.1guwsk0\":[\"[Éñð þöšţ ~~~]\"],\"editor.inspector.field.equipmentType.1mc2ywt\":[\"[Éǫûîþɱéñţ ţýþé ~~~~]\"],\"editor.inspector.field.fillToFloor.1oppnkf\":[\"[Ƒîļļ ţö ƒļööŕ ~~~~]\"],\"editor.inspector.field.finial.1ertf4s\":[\"[Ƒîñîáļ ~~]\"],\"editor.inspector.field.fittingType.18mz17s\":[\"[Ƒîţţîñĝ ţýþé ~~~~]\"],\"editor.inspector.field.flashingHeight.3e8nn6\":[\"[Ƒļášĥîñĝ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.flashingProjection.hhf0fk\":[\"[Ƒļášĥîñĝ þŕöĵéçţîöñ ~~~~~~]\"],\"editor.inspector.field.flueCount.j3t2ci\":[\"[Ƒļûé çöûñţ ~~~]\"],\"editor.inspector.field.flueDiameter.cjhubg\":[\"[Ƒļûé ðîáɱéţéŕ ~~~~]\"],\"editor.inspector.field.flueHeight.1dhc4y4\":[\"[Ƒļûé ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.flueShape.1ealiy4\":[\"[Ƒļûé šĥáþé ~~~]\"],\"editor.inspector.field.flueSpacing.exhzco\":[\"[Ƒļûé šþáçîñĝ ~~~~]\"],\"editor.inspector.field.footingStyle.e3btg6\":[\"[Ƒööţîñĝ šţýļé ~~~~]\"],\"editor.inspector.field.frameDepth.1934a5n\":[\"[Ƒŕáɱé ðéþţĥ ~~~]\"],\"editor.inspector.field.frameThickness.1agxzd8\":[\"[Ƒŕáɱé ţĥîçķñéšš ~~~~~]\"],\"editor.inspector.field.framingStrategy.3jx9qe\":[\"[Ƒŕáɱîñĝ šţŕáţéĝý ~~~~~]\"],\"editor.inspector.field.fromLevelId.15ieejs\":[\"[Ƒŕöɱ ļéṽéļ îð ~~~~]\"],\"editor.inspector.field.gableOverhang.2z0obw\":[\"[Ĝáƀļé öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.gambrelLowerHeightRatio.wqq7lg\":[\"[Ĝáɱƀŕéļ ļöŵéŕ ĥéîĝĥţ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.gambrelLowerWidthRatio.uvyb1v\":[\"[Ĝáɱƀŕéļ ļöŵéŕ ŵîðţĥ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.gapX.wjxa7\":[\"[Ĝáþ ẋ ~~]\"],\"editor.inspector.field.gapY.mkbl8\":[\"[Ĝáþ ý ~~]\"],\"editor.inspector.field.glassThickness.s97b0x\":[\"[Ĝļášš ţĥîçķñéšš ~~~~~]\"],\"editor.inspector.field.groundClearance.4os7f0\":[\"[Ĝŕöûñð çļéáŕáñçé ~~~~~]\"],\"editor.inspector.field.guardInfill.16heiig\":[\"[Ĝûáŕð îñƒîļļ ~~~~]\"],\"editor.inspector.field.gutterEnabled.1oxiltf\":[\"[Ĝûţţéŕ éñáƀļéð ~~~~]\"],\"editor.inspector.field.gutterProfile.1ngzqi3\":[\"[Ĝûţţéŕ þŕöƒîļé ~~~~]\"],\"editor.inspector.field.gutterSize.jgavtz\":[\"[Ĝûţţéŕ šîžé ~~~]\"],\"editor.inspector.field.hangerMaxReach.1869epv\":[\"[Ĥáñĝéŕ ɱáẋ ŕéáçĥ ~~~~~]\"],\"editor.inspector.field.hangerSpacing.i2b5d7\":[\"[Ĥáñĝéŕ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.hangerStyle.l7v7gb\":[\"[Ĥáñĝéŕ šţýļé ~~~~]\"],\"editor.inspector.field.height.7puwki\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.inspector.field.height2.7b3jlc\":[\"[Ĥéîĝĥţ2 ~~]\"],\"editor.inspector.field.heightAboveRidge.1k99brk\":[\"[Ĥéîĝĥţ áƀöṽé ŕîðĝé ~~~~~]\"],\"editor.inspector.field.highEdgeHeight.1s7v90t\":[\"[Ĥîĝĥ éðĝé ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.highOverhang.67w55d\":[\"[Ĥîĝĥ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.highSideMode.1rc1r5j\":[\"[Ĥîĝĥ šîðé ɱöðé ~~~~]\"],\"editor.inspector.field.hoodOverhang.1q1hcin\":[\"[Ĥööð öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.infillPlacement.11dxzpo\":[\"[Îñƒîļļ þļáçéɱéñţ ~~~~~]\"],\"editor.inspector.field.inletShape.ypayh2\":[\"[Îñļéţ šĥáþé ~~~]\"],\"editor.inspector.field.innerRadius.1fkmg0j\":[\"[Îññéŕ ŕáðîûš ~~~~]\"],\"editor.inspector.field.insulated.iwziey\":[\"[Îñšûļáţéð ~~~]\"],\"editor.inspector.field.insulationR.663ufx\":[\"[Îñšûļáţîöñ ŕ ~~~~]\"],\"editor.inspector.field.lanternHeight.oz7zpm\":[\"[Ļáñţéŕñ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.lanternTopScale.hkmpp2\":[\"[Ļáñţéŕñ ţöþ šçáļé ~~~~~]\"],\"editor.inspector.field.ledgerDepth.7av8k9\":[\"[Ļéðĝéŕ ðéþţĥ ~~~~]\"],\"editor.inspector.field.ledgerHeight.zo2oif\":[\"[Ļéðĝéŕ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.ledgerVerticalOffset.1athbgt\":[\"[Ļéðĝéŕ ṽéŕţîçáļ öƒƒšéţ ~~~~~~]\"],\"editor.inspector.field.leftEndCondition.1syqlaw\":[\"[Ļéƒţ éñð çöñðîţîöñ ~~~~~]\"],\"editor.inspector.field.leftOverhang.1ydl9ma\":[\"[Ļéƒţ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.length.1kpdcfp\":[\"[Ļéñĝţĥ ~~]\"],\"editor.inspector.field.liquidDiameter.w3pk7c\":[\"[Ļîǫûîð ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.louverCount.lhw2gr\":[\"[Ļöûṽéŕ çöûñţ ~~~~]\"],\"editor.inspector.field.lowBeamInset.1g7yw5l\":[\"[Ļöŵ ƀéáɱ îñšéţ ~~~~]\"],\"editor.inspector.field.lowEdgeHeight.47mae1\":[\"[Ļöŵ éðĝé ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.lowOverhang.t4nz1h\":[\"[Ļöŵ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.mansardSteepHeightRatio.1hbb8rq\":[\"[Ṁáñšáŕð šţééþ ĥéîĝĥţ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.mansardSteepWidthRatio.6xk6vd\":[\"[Ṁáñšáŕð šţééþ ŵîðţĥ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.matchHostRoofMaterial.s56zwj\":[\"[Ṁáţçĥ ĥöšţ ŕööƒ ɱáţéŕîáļ ~~~~~~~]\"],\"editor.inspector.field.matchHostRoofStructure.bojht3\":[\"[Ṁáţçĥ ĥöšţ ŕööƒ šţŕûçţûŕé ~~~~~~~]\"],\"editor.inspector.field.mount.h80tay\":[\"[Ṁöûñţ ~~]\"],\"editor.inspector.field.mountingType.1xvin1e\":[\"[Ṁöûñţîñĝ ţýþé ~~~~]\"],\"editor.inspector.field.neckHeight.19ym8n1\":[\"[Ñéçķ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.opacity.1pmpfd2\":[\"[Öþáçîţý ~~~]\"],\"editor.inspector.field.openingAngle.brhi7c\":[\"[Öþéñîñĝ áñĝļé ~~~~]\"],\"editor.inspector.field.openingOffset.wpoqt6\":[\"[Öþéñîñĝ öƒƒšéţ ~~~~]\"],\"editor.inspector.field.openingSide.18l2iwe\":[\"[Öþéñîñĝ šîðé ~~~~]\"],\"editor.inspector.field.operationState.1lwrz07\":[\"[Öþéŕáţîöñ šţáţé ~~~~~]\"],\"editor.inspector.field.outletShape.lgpqhx\":[\"[Öûţļéţ šĥáþé ~~~~]\"],\"editor.inspector.field.overhang.b5ljpv\":[\"[Öṽéŕĥáñĝ ~~~]\"],\"editor.inspector.field.panelHeight.1kf31vk\":[\"[Þáñéļ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.panelWidth.946581\":[\"[Þáñéļ ŵîðţĥ ~~~]\"],\"editor.inspector.field.patternAlignment.jd1ht0\":[\"[Þáţţéŕñ áļîĝñɱéñţ ~~~~~]\"],\"editor.inspector.field.patternCount.1r37pve\":[\"[Þáţţéŕñ çöûñţ ~~~~]\"],\"editor.inspector.field.patternDistribution.fmam51\":[\"[Þáţţéŕñ ðîšţŕîƀûţîöñ ~~~~~~]\"],\"editor.inspector.field.patternRemainder.i47p5y\":[\"[Þáţţéŕñ ŕéɱáîñðéŕ ~~~~~]\"],\"editor.inspector.field.picketProfile.1xgzuyc\":[\"[Þîçķéţ þŕöƒîļé ~~~~]\"],\"editor.inspector.field.picketRailCount.atgt6w\":[\"[Þîçķéţ ŕáîļ çöûñţ ~~~~~]\"],\"editor.inspector.field.picketSpacing.p8d98w\":[\"[Þîçķéţ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.picketTop.1tskplu\":[\"[Þîçķéţ ţöþ ~~~]\"],\"editor.inspector.field.picketTopClearance.16eq1k0\":[\"[Þîçķéţ ţöþ çļéáŕáñçé ~~~~~~]\"],\"editor.inspector.field.picketVariation.f7vl1c\":[\"[Þîçķéţ ṽáŕîáţîöñ ~~~~~]\"],\"editor.inspector.field.picketWidth.3fr3rh\":[\"[Þîçķéţ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.pipeMaterial.1ggc2wy\":[\"[Þîþé ɱáţéŕîáļ ~~~~]\"],\"editor.inspector.field.pitch.xe6ekx\":[\"[Þîţçĥ ~~]\"],\"editor.inspector.field.position.1quewx6\":[\"[Þöšîţîöñ ~~~]\"],\"editor.inspector.field.postBracing.crq8nn\":[\"[Þöšţ ƀŕáçîñĝ ~~~~]\"],\"editor.inspector.field.postCap.1xcvxrv\":[\"[Þöšţ çáþ ~~~]\"],\"editor.inspector.field.postCount.22r56c\":[\"[Þöšţ çöûñţ ~~~]\"],\"editor.inspector.field.postDepth.1ko6j1m\":[\"[Þöšţ ðéþţĥ ~~~]\"],\"editor.inspector.field.postInset.le36li\":[\"[Þöšţ îñšéţ ~~~]\"],\"editor.inspector.field.postLayoutMode.16jre62\":[\"[Þöšţ ļáýöûţ ɱöðé ~~~~~]\"],\"editor.inspector.field.postSize.1jodxek\":[\"[Þöšţ šîžé ~~~]\"],\"editor.inspector.field.postSpacing.voppfi\":[\"[Þöšţ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.postThrough.1abgu4a\":[\"[Þöšţ ţĥŕöûĝĥ ~~~~]\"],\"editor.inspector.field.postWidth.rk26fz\":[\"[Þöšţ ŵîðţĥ ~~~]\"],\"editor.inspector.field.profile.1kwlci6\":[\"[Þŕöƒîļé ~~~]\"],\"editor.inspector.field.projection.jhtig0\":[\"[Þŕöĵéçţîöñ ~~~]\"],\"editor.inspector.field.purlinHeight.eo9cjm\":[\"[Þûŕļîñ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.purlinSpacing.4gbzb2\":[\"[Þûŕļîñ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.purlinWidth.r6tu3j\":[\"[Þûŕļîñ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.rafterEndInset.14c0wy5\":[\"[Ŕáƒţéŕ éñð îñšéţ ~~~~~]\"],\"editor.inspector.field.rafterHeight.1e1n99w\":[\"[Ŕáƒţéŕ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.rafterSpacing.19subc0\":[\"[Ŕáƒţéŕ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.rafterWidth.eksj4t\":[\"[Ŕáƒţéŕ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.railingHeight.6wf4bm\":[\"[Ŕáîļîñĝ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.railingMode.ov7xpu\":[\"[Ŕáîļîñĝ ɱöðé ~~~~]\"],\"editor.inspector.field.railingStyle.1nyd2u\":[\"[Ŕáîļîñĝ šţýļé ~~~~]\"],\"editor.inspector.field.resizeLock.b2hbr0\":[\"[Ŕéšîžé ļöçķ ~~~]\"],\"editor.inspector.field.returnDiameter.166ozhe\":[\"[Ŕéţûŕñ ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.returnHeight.b9sq6y\":[\"[Ŕéţûŕñ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.returnShape.1e3a27i\":[\"[Ŕéţûŕñ šĥáþé ~~~~]\"],\"editor.inspector.field.returnWidth.z9r3h3\":[\"[Ŕéţûŕñ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.rightEndCondition.tjlw3l\":[\"[Ŕîĝĥţ éñð çöñðîţîöñ ~~~~~~]\"],\"editor.inspector.field.rightOverhang.yqbeft\":[\"[Ŕîĝĥţ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.roofHeight.1uhy6qy\":[\"[Ŕööƒ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.roofStyle.pawqfy\":[\"[Ŕööƒ šţýļé ~~~]\"],\"editor.inspector.field.roofThickness.1xlr3rx\":[\"[Ŕööƒ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.roofType.1m9kv5h\":[\"[Ŕööƒ ţýþé ~~~]\"],\"editor.inspector.field.rotation.ly2rj\":[\"[Ŕöţáţîöñ ~~~]\"],\"editor.inspector.field.rows.1ba1neg\":[\"[Ŕöŵš ~~]\"],\"editor.inspector.field.scale.b6rpxt\":[\"[Šçáļé ~~]\"],\"editor.inspector.field.seamDetail.197za48\":[\"[Šéáɱ ðéţáîļ ~~~]\"],\"editor.inspector.field.segmentType.l667sy\":[\"[Šéĝɱéñţ ţýþé ~~~~]\"],\"editor.inspector.field.shaftStyle.1i5ampa\":[\"[Šĥáƒţ šţýļé ~~~]\"],\"editor.inspector.field.shaftWallThickness.bduslr\":[\"[Šĥáƒţ ŵáļļ ţĥîçķñéšš ~~~~~~]\"],\"editor.inspector.field.shape.iq9t52\":[\"[Šĥáþé ~~]\"],\"editor.inspector.field.shape2.fi0nx8\":[\"[Šĥáþé2 ~~]\"],\"editor.inspector.field.shedHighSide.bzzddg\":[\"[Šĥéð ĥîĝĥ šîðé ~~~~]\"],\"editor.inspector.field.shingleThickness.1hn5wxr\":[\"[Šĥîñĝļé ţĥîçķñéšš ~~~~~]\"],\"editor.inspector.field.shoulderExtent.11j8uiv\":[\"[Šĥöûļðéŕ éẋţéñţ ~~~~~]\"],\"editor.inspector.field.shoulderHeight.xyqn6g\":[\"[Šĥöûļðéŕ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.shoulderStyle.1hkcv2w\":[\"[Šĥöûļðéŕ šţýļé ~~~~]\"],\"editor.inspector.field.showCenterColumn.1uggg45\":[\"[Šĥöŵ çéñţéŕ çöļûɱñ ~~~~~]\"],\"editor.inspector.field.showInfill.33rv7u\":[\"[Šĥöŵ îñƒîļļ ~~~]\"],\"editor.inspector.field.showStepSupports.1kg8h8m\":[\"[Šĥöŵ šţéþ šûþþöŕţš ~~~~~]\"],\"editor.inspector.field.sideFlashing.cv744o\":[\"[Šîðé ƒļášĥîñĝ ~~~~]\"],\"editor.inspector.field.size.1a4x3zw\":[\"[Šîžé ~~]\"],\"editor.inspector.field.skylightType.1a5vj3i\":[\"[Šķýļîĝĥţ ţýþé ~~~~]\"],\"editor.inspector.field.slabOpeningMode.g4f730\":[\"[Šļáƀ öþéñîñĝ ɱöðé ~~~~~]\"],\"editor.inspector.field.slatGap.slmk93\":[\"[Šļáţ ĝáþ ~~~]\"],\"editor.inspector.field.slideDirection.1527q13\":[\"[Šļîðé ðîŕéçţîöñ ~~~~~]\"],\"editor.inspector.field.span.1bmmuw1\":[\"[Šþáñ ~~]\"],\"editor.inspector.field.speed.2w2xwg\":[\"[Šþééð ~~]\"],\"editor.inspector.field.spinSpeed.1ozx746\":[\"[Šþîñ šþééð ~~~]\"],\"editor.inspector.field.stairType.1u05e02\":[\"[Šţáîŕ ţýþé ~~~]\"],\"editor.inspector.field.standoff.4wv2g0\":[\"[Šţáñðöƒƒ ~~~]\"],\"editor.inspector.field.standoffHeight.1qdnff\":[\"[Šţáñðöƒƒ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.startPost.1ood9kv\":[\"[Šţáŕţ þöšţ ~~~]\"],\"editor.inspector.field.stepCount.nzorrw\":[\"[Šţéþ çöûñţ ~~~]\"],\"editor.inspector.field.strapSpacing.1cyt3dc\":[\"[Šţŕáþ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.strapStyle.fh1oy4\":[\"[Šţŕáþ šţýļé ~~~]\"],\"editor.inspector.field.style.nf3vcm\":[\"[Šţýļé ~~]\"],\"editor.inspector.field.suctionDiameter.nutxtj\":[\"[Šûçţîöñ ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.supplyDiameter.h5ldh5\":[\"[Šûþþļý ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.supplyHeight.zy6ru1\":[\"[Šûþþļý ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.supplyShape.k39wnb\":[\"[Šûþþļý šĥáþé ~~~~]\"],\"editor.inspector.field.supplyWidth.g66axi\":[\"[Šûþþļý ŵîðţĥ ~~~~]\"],\"editor.inspector.field.supportOffset.1w4cocr\":[\"[Šûþþöŕţ öƒƒšéţ ~~~~]\"],\"editor.inspector.field.sweepAngle.ucmmlw\":[\"[Šŵééþ áñĝļé ~~~]\"],\"editor.inspector.field.system.13qbhrw\":[\"[Šýšţéɱ ~~]\"],\"editor.inspector.field.terminal.1501knl\":[\"[Ţéŕɱîñáļ ~~~]\"],\"editor.inspector.field.terminalType.1ne8lgb\":[\"[Ţéŕɱîñáļ ţýþé ~~~~]\"],\"editor.inspector.field.thickness.1l8hu45\":[\"[Ţĥîçķñéšš ~~~]\"],\"editor.inspector.field.tiltAngle.1312yw1\":[\"[Ţîļţ áñĝļé ~~~]\"],\"editor.inspector.field.toLevelId.8i5qx7\":[\"[Ţö ļéṽéļ îð ~~~]\"],\"editor.inspector.field.topLandingDepth.ki7gk2\":[\"[Ţöþ ļáñðîñĝ ðéþţĥ ~~~~~]\"],\"editor.inspector.field.topLandingMode.zk0h7e\":[\"[Ţöþ ļáñðîñĝ ɱöðé ~~~~~]\"],\"editor.inspector.field.topRailHeight.fscisv\":[\"[Ţöþ ŕáîļ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.transitionMode.f3evgt\":[\"[Ţŕáñšîţîöñ ɱöðé ~~~~~]\"],\"editor.inspector.field.transitionWidth.rtgz3m\":[\"[Ţŕáñšîţîöñ ŵîðţĥ ~~~~~]\"],\"editor.inspector.field.vaneCount.55vtye\":[\"[Ṽáñé çöûñţ ~~~]\"],\"editor.inspector.field.wallHeight.18vmh5c\":[\"[Ŵáļļ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.wallShell.vqsyhv\":[\"[Ŵáļļ šĥéļļ ~~~]\"],\"editor.inspector.field.wallSkirtHeight.1uea2ad\":[\"[Ŵáļļ šķîŕţ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.wallThickness.17wn4iv\":[\"[Ŵáļļ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.width.gfxz9b\":[\"[Ŵîðţĥ ~~]\"],\"editor.inspector.field.width2.1nqawvr\":[\"[Ŵîðţĥ2 ~~]\"],\"editor.inspector.field.withBack.1ay8nus\":[\"[Ŵîţĥ ƀáçķ ~~~]\"],\"editor.inspector.field.withBottom.1x1z1vo\":[\"[Ŵîţĥ ƀöţţöɱ ~~~]\"],\"editor.inspector.field.withSides.uq066x\":[\"[Ŵîţĥ šîðéš ~~~]\"],\"editor.inspector.group.advanced.qwfkor\":[\"[Åðṽáñçéð ~~~]\"],\"editor.inspector.group.air.15jotdj\":[\"[Åîŕ ~]\"],\"editor.inspector.group.appearance.dli9wf\":[\"[Åþþéáŕáñçé ~~~]\"],\"editor.inspector.group.body.ign4wl\":[\"[Ɓöðý ~~]\"],\"editor.inspector.group.cab.o4z1ox\":[\"[Çáƀ ~]\"],\"editor.inspector.group.cabinet.rzvymr\":[\"[Çáƀîñéţ ~~~]\"],\"editor.inspector.group.cap.s0thej\":[\"[Çáþ ~]\"],\"editor.inspector.group.collar.1am2iqo\":[\"[Çöļļáŕ ~~]\"],\"editor.inspector.group.connection.2r1h4p\":[\"[Çöññéçţîöñ ~~~]\"],\"editor.inspector.group.connections.ai4w8u\":[\"[Çöññéçţîöñš ~~~~]\"],\"editor.inspector.group.construction.j6p9kc\":[\"[Çöñšţŕûçţîöñ ~~~~]\"],\"editor.inspector.group.cricket.6iwg8g\":[\"[Çŕîçķéţ ~~~]\"],\"editor.inspector.group.curb.5xi2ol\":[\"[Çûŕƀ ~~]\"],\"editor.inspector.group.curvePoints.ztdcnn\":[\"[Çûŕṽé þöîñţš ~~~~]\"],\"editor.inspector.group.dimensions.pewa8g\":[\"[Ðîɱéñšîöñš ~~~]\"],\"editor.inspector.group.doors.18w2kpa\":[\"[Ðööŕš ~~]\"],\"editor.inspector.group.dormer.1fjs5tq\":[\"[Ðöŕɱéŕ ~~]\"],\"editor.inspector.group.dormerRoof.u9uy2g\":[\"[Ðöŕɱéŕ ŕööƒ ~~~]\"],\"editor.inspector.group.drainage.7easy0\":[\"[Ðŕáîñáĝé ~~~]\"],\"editor.inspector.group.elevation.4jbp44\":[\"[Éļéṽáţîöñ ~~~]\"],\"editor.inspector.group.endCaps.4fsb5b\":[\"[Éñð çáþš ~~~]\"],\"editor.inspector.group.equipment.1xtq0ev\":[\"[Éǫûîþɱéñţ ~~~]\"],\"editor.inspector.group.face.1531fr0\":[\"[Ƒáçé ~~]\"],\"editor.inspector.group.fitting.171z1r4\":[\"[Ƒîţţîñĝ ~~~]\"],\"editor.inspector.group.flues.nq6pye\":[\"[Ƒļûéš ~~]\"],\"editor.inspector.group.footprint.g8q2pg\":[\"[Ƒööţþŕîñţ ~~~]\"],\"editor.inspector.group.frame.q7q9fq\":[\"[Ƒŕáɱé ~~]\"],\"editor.inspector.group.geometry.a21os1\":[\"[Ĝéöɱéţŕý ~~~]\"],\"editor.inspector.group.grid.d8gwxd\":[\"[Ĝŕîð ~~]\"],\"editor.inspector.group.hangers.agnfzn\":[\"[Ĥáñĝéŕš ~~~]\"],\"editor.inspector.group.hardware.1nygwm1\":[\"[Ĥáŕðŵáŕé ~~~]\"],\"editor.inspector.group.hungWall.1ftr1gz\":[\"[Ĥûñĝ ŵáļļ ~~~]\"],\"editor.inspector.group.insulation.1kyo5e7\":[\"[Îñšûļáţîöñ ~~~]\"],\"editor.inspector.group.lantern.1h7o2xb\":[\"[Ļáñţéŕñ ~~~]\"],\"editor.inspector.group.levels.1s6yaru\":[\"[Ļéṽéļš ~~]\"],\"editor.inspector.group.line.166mv5z\":[\"[Ļîñé ~~]\"],\"editor.inspector.group.lines.12bghr0\":[\"[Ļîñéš ~~]\"],\"editor.inspector.group.motion.1be7sjr\":[\"[Ṁöţîöñ ~~]\"],\"editor.inspector.group.mounting.feutd2\":[\"[Ṁöûñţîñĝ ~~~]\"],\"editor.inspector.group.opening.dfet3\":[\"[Öþéñîñĝ ~~~]\"],\"editor.inspector.group.panelDimensions.b59qe6\":[\"[Þáñéļ ðîɱéñšîöñš ~~~~~]\"],\"editor.inspector.group.patternDistribution.fmam51\":[\"[Þáţţéŕñ ðîšţŕîƀûţîöñ ~~~~~~]\"],\"editor.inspector.group.placement.13lcvts\":[\"[Þļáçéɱéñţ ~~~]\"],\"editor.inspector.group.position.1quewx6\":[\"[Þöšîţîöñ ~~~]\"],\"editor.inspector.group.profile.1kwlci6\":[\"[Þŕöƒîļé ~~~]\"],\"editor.inspector.group.railing.19a5bnr\":[\"[Ŕáîļîñĝ ~~~]\"],\"editor.inspector.group.return.1klrjrz\":[\"[Ŕéţûŕñ ~~]\"],\"editor.inspector.group.settings.ktdb8o\":[\"[Šéţţîñĝš ~~~]\"],\"editor.inspector.group.shaft.mad9cv\":[\"[Šĥáƒţ ~~]\"],\"editor.inspector.group.shape.iq9t52\":[\"[Šĥáþé ~~]\"],\"editor.inspector.group.shoulder.1nyfx25\":[\"[Šĥöûļðéŕ ~~~]\"],\"editor.inspector.group.size.1a4x3zw\":[\"[Šîžé ~~]\"],\"editor.inspector.group.structure.gezdra\":[\"[Šţŕûçţûŕé ~~~]\"],\"editor.inspector.group.style.nf3vcm\":[\"[Šţýļé ~~]\"],\"editor.inspector.group.supply.1oy2zwu\":[\"[Šûþþļý ~~]\"],\"editor.inspector.group.surface.wtamqk\":[\"[Šûŕƒáçé ~~~]\"],\"editor.inspector.group.terminal.1501knl\":[\"[Ţéŕɱîñáļ ~~~]\"],\"editor.inspector.group.topology.18t8dyc\":[\"[Ţöþöļöĝý ~~~]\"],\"editor.inspector.group.transform.1c55ayj\":[\"[Ţŕáñšƒöŕɱ ~~~]\"],\"editor.inspector.group.trap.1qc7vhe\":[\"[Ţŕáþ ~~]\"],\"editor.inspector.group.type.1m2zofh\":[\"[Ţýþé ~~]\"],\"editor.inspector.option.abs.132mz8b\":[\"[Åƀš ~]\"],\"editor.inspector.option.accessPanel.13sptb5\":[\"[Åççéšš þáñéļ ~~~~]\"],\"editor.inspector.option.airHandler.1crnyg3\":[\"[Åîŕ ĥáñðļéŕ ~~~]\"],\"editor.inspector.option.alternating.5jashi\":[\"[Åļţéŕñáţîñĝ ~~~~]\"],\"editor.inspector.option.arched.14188w0\":[\"[Åŕçĥéð ~~]\"],\"editor.inspector.option.auto.540b06\":[\"[Åûţö ~~]\"],\"editor.inspector.option.automatic.r122ro\":[\"[Åûţöɱáţîç ~~~]\"],\"editor.inspector.option.back.1hzmxtu\":[\"[Ɓáçķ ~~]\"],\"editor.inspector.option.balusters.1j3w6ng\":[\"[Ɓáļûšţéŕš ~~~]\"],\"editor.inspector.option.band.160umau\":[\"[Ɓáñð ~~]\"],\"editor.inspector.option.basePlate.17fcg8k\":[\"[Ɓášé þļáţé ~~~]\"],\"editor.inspector.option.boards.u14hig\":[\"[Ɓöáŕðš ~~]\"],\"editor.inspector.option.bookshelf.ls0zqk\":[\"[Ɓööķšĥéļƒ ~~~]\"],\"editor.inspector.option.both.mkyb42\":[\"[Ɓöţĥ ~~]\"],\"editor.inspector.option.bottom.9mpruy\":[\"[Ɓöţţöɱ ~~]\"],\"editor.inspector.option.box.1nbjcuq\":[\"[Ɓöẋ ~]\"],\"editor.inspector.option.break.17spnvc\":[\"[Ɓŕéáķ ~~]\"],\"editor.inspector.option.butterfly.pvv0g4\":[\"[Ɓûţţéŕƒļý ~~~]\"],\"editor.inspector.option.cable.fp50zq\":[\"[Çáƀļé ~~]\"],\"editor.inspector.option.castIron.1q2z4qk\":[\"[Çášţ îŕöñ ~~~]\"],\"editor.inspector.option.ceiling.1t2zaqo\":[\"[Çéîļîñĝ ~~~]\"],\"editor.inspector.option.center.kzdxno\":[\"[Çéñţéŕ ~~]\"],\"editor.inspector.option.centerOpening.bn1rvw\":[\"[Çéñţéŕ öþéñîñĝ ~~~~]\"],\"editor.inspector.option.cleanout.lww8bm\":[\"[Çļéáñöûţ ~~~]\"],\"editor.inspector.option.concretePad.m1zdij\":[\"[Çöñçŕéţé þáð ~~~~]\"],\"editor.inspector.option.condenser.a74nps\":[\"[Çöñðéñšéŕ ~~~]\"],\"editor.inspector.option.corbeled.bovs4v\":[\"[Çöŕƀéļéð ~~~]\"],\"editor.inspector.option.count.1qoi4r8\":[\"[Çöûñţ ~~]\"],\"editor.inspector.option.coupling.111aap2\":[\"[Çöûþļîñĝ ~~~]\"],\"editor.inspector.option.coveringSpecific.1h9fo8w\":[\"[Çöṽéŕîñĝ šþéçîƒîç ~~~~~]\"],\"editor.inspector.option.cross.1elubzv\":[\"[Çŕöšš ~~]\"],\"editor.inspector.option.cubby.ivq4qc\":[\"[Çûƀƀý ~~]\"],\"editor.inspector.option.curved.6noz1s\":[\"[Çûŕṽéð ~~]\"],\"editor.inspector.option.cylinder.eol6vj\":[\"[Çýļîñðéŕ ~~~]\"],\"editor.inspector.option.damper.wgri80\":[\"[Ðáɱþéŕ ~~]\"],\"editor.inspector.option.destination.gfzm1r\":[\"[Ðéšţîñáţîöñ ~~~~]\"],\"editor.inspector.option.diffuser.1igj0jh\":[\"[Ðûšéŕ ~~~]\"],\"editor.inspector.option.dogEar.xhtvjt\":[\"[Ðöĝ éáŕ ~~]\"],\"editor.inspector.option.dome.1c87e56\":[\"[Ðöɱé ~~]\"],\"editor.inspector.option.double.13h5354\":[\"[Ðöûƀļé ~~]\"],\"editor.inspector.option.ductBoard.lc3o4t\":[\"[Ðûçţ ƀöáŕð ~~~]\"],\"editor.inspector.option.dutch.1djx429\":[\"[Ðûţçĥ ~~]\"],\"editor.inspector.option.elbow.1flup74\":[\"[Éļƀöŵ ~~]\"],\"editor.inspector.option.end.1llf32i\":[\"[Éñð ~]\"],\"editor.inspector.option.endCap.1p4v4na\":[\"[Éñð çáþ ~~]\"],\"editor.inspector.option.equalFit.11vw52c\":[\"[Éǫûáļ ƒîţ ~~~]\"],\"editor.inspector.option.fixedCount.1o3dznu\":[\"[Ƒîẋéð çöûñţ ~~~]\"],\"editor.inspector.option.fixedSpacing.hl4dr4\":[\"[Ƒîẋéð šþáçîñĝ ~~~~]\"],\"editor.inspector.option.flat.ly0bei\":[\"[Ƒļáţ ~~]\"],\"editor.inspector.option.flex.ktpamq\":[\"[Ƒļéẋ ~~]\"],\"editor.inspector.option.floating.1oadpln\":[\"[Ƒļöáţîñĝ ~~~]\"],\"editor.inspector.option.floor.q9caf1\":[\"[Ƒļööŕ ~~]\"],\"editor.inspector.option.flush.olwwu5\":[\"[Ƒļûšĥ ~~]\"],\"editor.inspector.option.front.uhugl4\":[\"[Ƒŕöñţ ~~]\"],\"editor.inspector.option.furnace.w0mzpf\":[\"[Ƒûŕñáçé ~~~]\"],\"editor.inspector.option.gable.1ekyx6\":[\"[Ĝáƀļé ~~]\"],\"editor.inspector.option.gambrel.1yo90d9\":[\"[Ĝáɱƀŕéļ ~~~]\"],\"editor.inspector.option.generic.1074oey\":[\"[Ĝéñéŕîç ~~~]\"],\"editor.inspector.option.glass.163tc5n\":[\"[Ĝļášš ~~]\"],\"editor.inspector.option.glassFrame.jp9s3m\":[\"[Ĝļášš ƒŕáɱé ~~~]\"],\"editor.inspector.option.globe.1avkqoy\":[\"[Ĝļöƀé ~~]\"],\"editor.inspector.option.grounded.jwoq73\":[\"[Ĝŕöûñðéð ~~~]\"],\"editor.inspector.option.guard.1m575se\":[\"[Ĝûáŕð ~~]\"],\"editor.inspector.option.halfRound.m5hob0\":[\"[Ĥáļƒ ŕöûñð ~~~]\"],\"editor.inspector.option.hidden.gp48rd\":[\"[Ĥîððéñ ~~]\"],\"editor.inspector.option.hip.r0jnjy\":[\"[Ĥîþ ~]\"],\"editor.inspector.option.horizontal.tyapah\":[\"[Ĥöŕîžöñţáļ ~~~]\"],\"editor.inspector.option.include.1a27vnr\":[\"[Îñçļûðé ~~~]\"],\"editor.inspector.option.independentHighBeam.1tn0zvy\":[\"[Îñðéþéñðéñţ ĥîĝĥ ƀéáɱ ~~~~~~]\"],\"editor.inspector.option.industrial.8sd9u\":[\"[Îñðûšţŕîáļ ~~~]\"],\"editor.inspector.option.inline.1uh05lg\":[\"[Îñļîñé ~~]\"],\"editor.inspector.option.integrated.1xd9lv0\":[\"[Îñţéĝŕáţéð ~~~]\"],\"editor.inspector.option.joined.1x2o8ds\":[\"[Ĵöîñéð ~~]\"],\"editor.inspector.option.kStyle.m8kfwz\":[\"[Ķ šţýļé ~~]\"],\"editor.inspector.option.kickout.vt8s6p\":[\"[Ķîçķöûţ ~~~]\"],\"editor.inspector.option.knee.186hcui\":[\"[Ķñéé ~~]\"],\"editor.inspector.option.landing.tyqarg\":[\"[Ļáñðîñĝ ~~~]\"],\"editor.inspector.option.lantern.1h7o2xb\":[\"[Ļáñţéŕñ ~~~]\"],\"editor.inspector.option.leave.1xf0sbk\":[\"[Ļéáṽé ~~]\"],\"editor.inspector.option.left.14n06mo\":[\"[Ļéƒţ ~~]\"],\"editor.inspector.option.level.i4lhtp\":[\"[Ļéṽéļ ~~]\"],\"editor.inspector.option.lowProfile.1h9lgzg\":[\"[Ļöŵ þŕöƒîļé ~~~]\"],\"editor.inspector.option.mansard.dwzck9\":[\"[Ṁáñšáŕð ~~~]\"],\"editor.inspector.option.manual.1wu7r43\":[\"[Ṁáñûáļ ~~]\"],\"editor.inspector.option.maximumSpacing.n1fzl4\":[\"[Ṁáẋîɱûɱ šþáçîñĝ ~~~~~]\"],\"editor.inspector.option.metal.1az9fgc\":[\"[Ṁéţáļ ~~]\"],\"editor.inspector.option.metalPanel.1xdz476\":[\"[Ṁéţáļ þáñéļ ~~~]\"],\"editor.inspector.option.minimal.fwmiwg\":[\"[Ṁîñîɱáļ ~~~]\"],\"editor.inspector.option.mono.oszvd6\":[\"[Ṁöñö ~~]\"],\"editor.inspector.option.none.deku7v\":[\"[Ñöñé ~~]\"],\"editor.inspector.option.omit.okcs7w\":[\"[Öɱîţ ~~]\"],\"editor.inspector.option.open.n6hn1l\":[\"[Öþéñ ~~]\"],\"editor.inspector.option.openRack.mvt1x0\":[\"[Öþéñ ŕáçķ ~~~]\"],\"editor.inspector.option.opening.dfet3\":[\"[Öþéñîñĝ ~~~]\"],\"editor.inspector.option.oval.1jiqzxx\":[\"[Öṽáļ ~~]\"],\"editor.inspector.option.picket.zyeoy1\":[\"[Þîçķéţ ~~]\"],\"editor.inspector.option.pointed.effedk\":[\"[Þöîñţéð ~~~]\"],\"editor.inspector.option.postAndRail.lajk2u\":[\"[Þöšţ áñð ŕáîļ ~~~~]\"],\"editor.inspector.option.preserveHighEdge.y6ywf0\":[\"[Þŕéšéŕṽé ĥîĝĥ éðĝé ~~~~~]\"],\"editor.inspector.option.preserveLowEdge.196m5pk\":[\"[Þŕéšéŕṽé ļöŵ éðĝé ~~~~~]\"],\"editor.inspector.option.preservePitch.1uq973r\":[\"[Þŕéšéŕṽé þîţçĥ ~~~~]\"],\"editor.inspector.option.privacy.1th4hrb\":[\"[Þŕîṽáçý ~~~]\"],\"editor.inspector.option.purlins.od124c\":[\"[Þûŕļîñš ~~~]\"],\"editor.inspector.option.pvc.1oc4u2w\":[\"[Þṽç ~]\"],\"editor.inspector.option.pyramid.17ucsqv\":[\"[Þýŕáɱîð ~~~]\"],\"editor.inspector.option.rafters.16tzbby\":[\"[Ŕáƒţéŕš ~~~]\"],\"editor.inspector.option.rail.39zqc9\":[\"[Ŕáîļ ~~]\"],\"editor.inspector.option.raised.4kyx9h\":[\"[Ŕáîšéð ~~]\"],\"editor.inspector.option.rect.tpfvaf\":[\"[Ŕéçţ ~~]\"],\"editor.inspector.option.reducer.18byt67\":[\"[Ŕéðûçéŕ ~~~]\"],\"editor.inspector.option.return.1klrjrz\":[\"[Ŕéţûŕñ ~~]\"],\"editor.inspector.option.returnGrille.r28ncm\":[\"[Ŕéţûŕñ ĝŕîļļé ~~~~]\"],\"editor.inspector.option.right.8humpx\":[\"[Ŕîĝĥţ ~~]\"],\"editor.inspector.option.round.1vx0wyj\":[\"[Ŕöûñð ~~]\"],\"editor.inspector.option.rounded.199nwpm\":[\"[Ŕöûñðéð ~~~]\"],\"editor.inspector.option.sanitaryTee.oro3d4\":[\"[Šáñîţáŕý ţéé ~~~~]\"],\"editor.inspector.option.scalloped.1eltba0\":[\"[Šçáļļöþéð ~~~]\"],\"editor.inspector.option.scoop.qy5zdv\":[\"[Šçööþ ~~]\"],\"editor.inspector.option.segmentedPanel.5r3hwl\":[\"[Šéĝɱéñţéð þáñéļ ~~~~~]\"],\"editor.inspector.option.shed.6t994v\":[\"[Šĥéð ~~]\"],\"editor.inspector.option.sheetMetal.l164lv\":[\"[Šĥééţ ɱéţáļ ~~~]\"],\"editor.inspector.option.shingle.pfmynh\":[\"[Šĥîñĝļé ~~~]\"],\"editor.inspector.option.shingled.1nm9inf\":[\"[Šĥîñĝļéð ~~~]\"],\"editor.inspector.option.simple.12mfu73\":[\"[Šîɱþļé ~~]\"],\"editor.inspector.option.single.1uzxurt\":[\"[Šîñĝļé ~~]\"],\"editor.inspector.option.singleLeft.1atdh02\":[\"[Šîñĝļé ļéƒţ ~~~]\"],\"editor.inspector.option.singleRight.1axbu67\":[\"[Šîñĝļé ŕîĝĥţ ~~~~]\"],\"editor.inspector.option.slantBox.1ta99vy\":[\"[Šļáñţ ƀöẋ ~~~]\"],\"editor.inspector.option.slat.1p9njbz\":[\"[Šļáţ ~~]\"],\"editor.inspector.option.sliding.cd0jox\":[\"[Šļîðîñĝ ~~~]\"],\"editor.inspector.option.slope.1bn2qw\":[\"[Šļöþé ~~]\"],\"editor.inspector.option.sloped.lo4sh0\":[\"[Šļöþéð ~~]\"],\"editor.inspector.option.solid.o4uy6s\":[\"[Šöļîð ~~]\"],\"editor.inspector.option.solidPanel.2yaw62\":[\"[Šöļîð þáñéļ ~~~]\"],\"editor.inspector.option.spiral.91hcl4\":[\"[Šþîŕáļ ~~]\"],\"editor.inspector.option.splash.1uke4cm\":[\"[Šþļášĥ ~~]\"],\"editor.inspector.option.spread.1g1zysu\":[\"[Šþŕéáð ~~]\"],\"editor.inspector.option.square.1xl1lk6\":[\"[Šǫûáŕé ~~]\"],\"editor.inspector.option.stair.1xf86e\":[\"[Šţáîŕ ~~]\"],\"editor.inspector.option.standard.vuco\":[\"[Šţáñðáŕð ~~~]\"],\"editor.inspector.option.start.30xvgf\":[\"[Šţáŕţ ~~]\"],\"editor.inspector.option.step.jtn9kf\":[\"[Šţéþ ~~]\"],\"editor.inspector.option.stepped.naxzh0\":[\"[Šţéþþéð ~~~]\"],\"editor.inspector.option.straight.lxqbfr\":[\"[Šţŕáîĝĥţ ~~~]\"],\"editor.inspector.option.strap.14q0ps9\":[\"[Šţŕáþ ~~]\"],\"editor.inspector.option.supply.1oy2zwu\":[\"[Šûþþļý ~~]\"],\"editor.inspector.option.supplyRegister.1lzdbbn\":[\"[Šûþþļý ŕéĝîšţéŕ ~~~~~]\"],\"editor.inspector.option.tapered.3y5blo\":[\"[Ţáþéŕéð ~~~]\"],\"editor.inspector.option.targetSpacing.14uibc9\":[\"[Ţáŕĝéţ šþáçîñĝ ~~~~]\"],\"editor.inspector.option.tee.7d6tjp\":[\"[Ţéé ~]\"],\"editor.inspector.option.tilted.6n0u5j\":[\"[Ţîļţéð ~~]\"],\"editor.inspector.option.top.2nypcs\":[\"[Ţöþ ~]\"],\"editor.inspector.option.transition.1rziz9e\":[\"[Ţŕáñšîţîöñ ~~~]\"],\"editor.inspector.option.vent.xda5j2\":[\"[Ṽéñţ ~~]\"],\"editor.inspector.option.walkOn.1n5sg9l\":[\"[Ŵáļķ öñ ~~]\"],\"editor.inspector.option.wall.blj585\":[\"[Ŵáļļ ~~]\"],\"editor.inspector.option.wallAbutment.lza941\":[\"[Ŵáļļ áƀûţɱéñţ ~~~~]\"],\"editor.inspector.option.wallLedger.5m8ana\":[\"[Ŵáļļ ļéðĝéŕ ~~~]\"],\"editor.inspector.option.wallShelf.yiozfl\":[\"[Ŵáļļ šĥéļƒ ~~~]\"],\"editor.inspector.option.waste.3xrp79\":[\"[Ŵášţé ~~]\"],\"editor.inspector.option.wye.14vupc8\":[\"[Ŵýé ~]\"],\"editor.lib.contextualHelp.addOrRemoveObjectsFromThe\":[\"[Åðð öŕ ŕéɱöṽé öƀĵéçţš ƒŕöɱ ţĥé šéļéçţîöñ ~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.adjustOneSideSCornerRadius\":[\"[Åðĵûšţ öñé šîðé’š çöŕñéŕ ŕáðîûš ~~~~~~~~]\"],\"editor.lib.contextualHelp.clearTheSelectionOrClickOutside\":[\"[Çļéáŕ ţĥé šéļéçţîöñ (öŕ çļîçķ öûţšîðé) ~~~~~~~~~~]\"],\"editor.lib.contextualHelp.clickAHandleDotToShow\":[\"[Çļîçķ á ĥáñðļé ðöţ ţö šĥöŵ ɱöṽé áŕŕöŵš ~~~~~~~~~~]\"],\"editor.lib.contextualHelp.clickOrDragTheSelectionTo\":[\"[Çļîçķ öŕ ðŕáĝ ţĥé šéļéçţîöñ ţö ɱöṽé îţ áš öñé ~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.clickTheHandleDotToShow\":[\"[Çļîçķ ţĥé ĥáñðļé ðöţ ţö šĥöŵ ɱöṽé + ŕöţáţé ĥáñðļéš ~~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.detachTheJointWhileDraggingAn\":[\"[Ðéţáçĥ ţĥé ĵöîñţ ŵĥîļé ðŕáĝĝîñĝ áñ áŕŕöŵ ~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.dragLeftOrRightToRotate\":[\"[Ðŕáĝ ļéƒţ öŕ ŕîĝĥţ ţö ŕöţáţé šéļéçţéð öƀĵéçţ ~~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.dragSelectedMovableObject\":[\"[Ðŕáĝ šéļéçţéð ɱöṽáƀļé öƀĵéçţ ~~~~~~~~]\"],\"editor.lib.contextualHelp.groupSelectionSessionOnly\":[\"[Ĝŕöûþ šéļéçţîöñ (šéššîöñ öñļý) ~~~~~~~~]\"],\"editor.lib.contextualHelp.holdToRotateFreely\":[\"[Ĥöļð ţö ŕöţáţé ƒŕééļý ~~~~~~]\"],\"editor.lib.contextualHelp.rotate45\":[\"[Ŕöţáţé ±45° ~~]\"],\"editor.lib.contextualHelp.rotateTheSelection45\":[\"[Ŕöţáţé ţĥé šéļéçţîöñ ±45° ~~~~~~]\"],\"editor.lib.contextualHelp.rotatingFreely\":[\"[Ŕöţáţîñĝ ƒŕééļý (ñö áñĝļé šţéþ) ~~~~~~~~]\"],\"editor.lib.contextualHelp.switchTheRotationAxisYX\":[\"[Šŵîţçĥ ţĥé ŕöţáţîöñ áẋîš (Ý → Ẋ → Ž) ~~~~~~~~]\"],\"editor.lib.contextualHelp.ungroupSessionSelection\":[\"[Ûñĝŕöûþ šéššîöñ šéļéçţîöñ ~~~~~~~]\"],\"editor.lib.continuation.continuous\":[\"[Çöñţîñûöûš ~~~]\"],\"editor.lib.continuation.continuousCanopy\":[\"[Çöñţîñûöûš çáñöþý ~~~~~]\"],\"editor.lib.continuation.continuousRun\":[\"[Çöñţîñûöûš ŕûñ ~~~~]\"],\"editor.lib.continuation.curvedFence\":[\"[Çûŕṽéð ƒéñçé ~~~~]\"],\"editor.lib.continuation.freehandFence\":[\"[Ƒŕééĥáñð ƒéñçé ~~~~]\"],\"editor.lib.continuation.placeMultiple\":[\"[Þļáçé ɱûļţîþļé ~~~~]\"],\"editor.lib.continuation.placeOnce\":[\"[Þļáçé öñçé ~~~]\"],\"editor.lib.continuation.polygonRoom\":[\"[Þöļýĝöñ ŕööɱ ~~~~]\"],\"editor.lib.continuation.rectangleRoom\":[\"[Ŕéçţáñĝļé ŕööɱ ~~~~]\"],\"editor.lib.continuation.singleCabinet\":[\"[Šîñĝļé çáƀîñéţ ~~~~]\"],\"editor.lib.continuation.singleCanopy\":[\"[Šîñĝļé çáñöþý ~~~~]\"],\"editor.lib.continuation.singleFence\":[\"[Šîñĝļé ƒéñçé ~~~~]\"],\"editor.lib.continuation.walls\":[\"[Ŵáļļš ~~]\"],\"editor.lib.hudTitle.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"editor.lib.hudTitle.divideRoom\":[\"[Ðîṽîðé ŕööɱ ~~~]\"],\"editor.lib.hudTitle.editKind\":[\"[Éðîţ \",[\"kind\"],\" ~~]\"],\"editor.lib.hudTitle.erase\":[\"[Éŕášé ~~]\"],\"editor.lib.hudTitle.levelTerrain\":[\"[Ļéṽéļ ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.lowerTerrain\":[\"[Ļöŵéŕ ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.lib.hudTitle.moveKind\":[\"[Ṁöṽé \",[\"kind\"],\" ~~]\"],\"editor.lib.hudTitle.moveRoom\":[\"[Ṁöṽé ŕööɱ ~~~]\"],\"editor.lib.hudTitle.moveSelection\":[\"[Ṁöṽé šéļéçţîöñ ~~~~]\"],\"editor.lib.hudTitle.paint\":[\"[Þáîñţ ~~]\"],\"editor.lib.hudTitle.paintARectangle\":[\"[Þáîñţ á ŕéçţáñĝļé ~~~~~]\"],\"editor.lib.hudTitle.paintAShape\":[\"[Þáîñţ á šĥáþé ~~~~]\"],\"editor.lib.hudTitle.pickMaterial\":[\"[Þîçķ ɱáţéŕîáļ ~~~~]\"],\"editor.lib.hudTitle.raiseTerrain\":[\"[Ŕáîšé ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.resize\":[\"[Ŕéšîžé ~~]\"],\"editor.lib.hudTitle.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.lib.hudTitle.select\":[\"[Šéļéçţ ~~]\"],\"editor.lib.hudTitle.smartMeasure\":[\"[Šɱáŕţ ɱéášûŕé ~~~~]\"],\"editor.lib.hudTitle.smoothTerrain\":[\"[Šɱööţĥ ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.splitKind\":[\"[Šþļîţ \",[\"kind\"],\" ~~]\"],\"editor.lib.hudTitle.terrace\":[\"[Ţéŕŕáçé ~~~]\"],\"editor.lib.wallDrawVariant.polygonRoom\":[\"[Þöļýĝöñ ŕööɱ ~~~~]\"],\"editor.lib.wallDrawVariant.rectangleRoom\":[\"[Ŕéçţáñĝļé ŕööɱ ~~~~]\"],\"editor.lib.wallDrawVariant.walls\":[\"[Ŵáļļš ~~]\"],\"editor.nodeDisplay.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.nodeDisplay.column\":[\"[Çöļûɱñ ~~]\"],\"editor.nodeDisplay.door\":[\"[Ðööŕ ~~]\"],\"editor.nodeDisplay.elevator\":[\"[Éļéṽáţöŕ ~~~]\"],\"editor.nodeDisplay.fence\":[\"[Ƒéñçé ~~]\"],\"editor.nodeDisplay.guide\":[\"[Ĝûîðé îɱáĝé ~~~]\"],\"editor.nodeDisplay.item\":[\"[Îţéɱ ~~]\"],\"editor.nodeDisplay.roof\":[\"[Ŕööƒ ~~]\"],\"editor.nodeDisplay.roofSegment\":[\"[Ŕööƒ šéĝɱéñţ ~~~~]\"],\"editor.nodeDisplay.room\":[\"[Ŕööɱ ~~]\"],\"editor.nodeDisplay.scan\":[\"[3Ð Šçáñ ~~]\"],\"editor.nodeDisplay.selection\":[\"[Šéļéçţîöñ ~~~]\"],\"editor.nodeDisplay.slab\":[\"[Šļáƀ ~~]\"],\"editor.nodeDisplay.stair\":[\"[Šţáîŕ ~~]\"],\"editor.nodeDisplay.stairSegment\":[\"[Šţáîŕ šéĝɱéñţ ~~~~]\"],\"editor.nodeDisplay.wall\":[\"[Ŵáļļ ~~]\"],\"editor.nodeDisplay.window\":[\"[Ŵîñðöŵ ~~]\"],\"editor.nodeDisplay.zone\":[\"[Žöñé ~~]\"],\"editor.panels.collections.collectionsPopover.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.panels.collections.collectionsPopover.collectionName\":[\"[Çöļļéçţîöñ ñáɱé… ~~~~~]\"],\"editor.panels.collections.collectionsPopover.collections\":[\"[Çöļļéçţîöñš ~~~~]\"],\"editor.panels.collections.collectionsPopover.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.collections.collectionsPopover.deleteName\":[\"[Ðéļéţé \\\"\",[\"name\"],\"\\\"? ~~]\"],\"editor.panels.collections.collectionsPopover.new\":[\"[Ñéŵ ~]\"],\"editor.panels.collections.collectionsPopover.noCollectionsYetCreateOneTo\":[\"[Ñö çöļļéçţîöñš ýéţ. Çŕéáţé öñé ţö ĝŕöûþ éļéɱéñţš ţöĝéţĥéŕ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.collections.collectionsPopover.rename\":[\"[Ŕéñáɱé ~~]\"],\"editor.panels.floorFoundationPanel.aThickerFloorGrowsUpwardThe\":[\"[Å ţĥîçķéŕ ƒļööŕ ĝŕöŵš ûþŵáŕð: ţĥé ŕööɱš ƀéļöŵ ķééþ ţĥéîŕ ĥéîĝĥţ. ~~~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.edgeFinish\":[\"[Éðĝé ƒîñîšĥ ~~~]\"],\"editor.panels.floorFoundationPanel.floorPlate\":[\"[Ƒļööŕ þļáţé ~~~]\"],\"editor.panels.floorFoundationPanel.floorPlateThicknesslabelThickRestingOn\":[\"[Ƒļööŕ þļáţé \",[\"thicknessLabel\"],\" ţĥîçķ, ŕéšţîñĝ öñ ţĥé ŵáļļš ƀéļöŵ ~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.floorThickness\":[\"[Ƒļööŕ ţĥîçķñéšš ~~~~~]\"],\"editor.panels.floorFoundationPanel.floorTopAbove\":[\"[Ƒļööŕ ţöþ +\",[\"height\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.floorTopValue\":[\"[Ƒļööŕ ţöþ \",[\"height\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.foundationFinish\":[\"[Ƒöûñðáţîöñ ƒîñîšĥ ~~~~~]\"],\"editor.panels.floorFoundationPanel.foundationHeight\":[\"[Ƒöûñðáţîöñ ĥéîĝĥţ ~~~~~]\"],\"editor.panels.floorFoundationPanel.kicker\":[\"[Ƒļööŕ þļáţé ~~~]\"],\"editor.panels.floorFoundationPanel.kickerLevel\":[\"[Ƒļööŕ þļáţé · \",[\"level\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.kickerRestsOn\":[\"[Ƒļööŕ þļáţé · \",[\"level\"],\" · ŕéšţš öñ \",[\"below\"],\" ~~~~~~]\"],\"editor.panels.floorFoundationPanel.lowerTogether\":[\"[\",[\"count\",\"plural\",{\"2\":[\"Ļöŵéŕ ƀöţĥ\"],\"other\":[\"Ļöŵéŕ áļļ \",\"#\"]}],\" ~~~~~~]\"],\"editor.panels.floorFoundationPanel.notToScale\":[\"[Ñöţ ţö šçáļé ~~~]\"],\"editor.panels.floorFoundationPanel.onTheGround\":[\"[Öñ ţĥé ĝŕöûñð ~~~~]\"],\"editor.panels.floorFoundationPanel.raiseTogether\":[\"[\",[\"count\",\"plural\",{\"2\":[\"Ŕáîšé ƀöţĥ\"],\"other\":[\"Ŕáîšé áļļ \",\"#\"]}],\" ~~~~~~]\"],\"editor.panels.floorFoundationPanel.raisedOnAFoundation\":[\"[Ŕáîšéð öñ á ƒöûñðáţîöñ ~~~~~~]\"],\"editor.panels.floorFoundationPanel.section.floorPlate\":[\"[Ƒļööŕ þļáţé · \",[\"thickness\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.section.floorTop\":[\"[Ƒļööŕ ţöþ ~~~]\"],\"editor.panels.floorFoundationPanel.section.foundation\":[\"[Ƒöûñðáţîöñ ~~~]\"],\"editor.panels.floorFoundationPanel.section.foundationKind\":[\"[Ƒöûñðáţîöñ · \",[\"foundation\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.section.ground\":[\"[Ĝŕöûñð ~~]\"],\"editor.panels.floorFoundationPanel.section.slab\":[\"[Šļáƀ · \",[\"thickness\"],\" ~~]\"],\"editor.panels.floorFoundationPanel.section.wallsBelow\":[\"[Ŵáļļš ƀéļöŵ ~~~]\"],\"editor.panels.floorFoundationPanel.sectionOnGround\":[\"[Šļáƀ \",[\"thickness\"],\" ţĥîçķ öñ ţĥé ĝŕöûñð, ƒļööŕ ţöþ \",[\"top\"],\" áƀöṽé ţĥé ĝŕöûñð ~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.sectionRaised\":[\"[Šļáƀ \",[\"thickness\"],\" ţĥîçķ öñ á \",[\"foundation\"],\" ƒöûñðáţîöñ, ƒļööŕ ţöþ \",[\"top\"],\" áƀöṽé ţĥé ĝŕöûñð ~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.slab\":[\"[Šļáƀ ~~]\"],\"editor.panels.floorFoundationPanel.slabThickness\":[\"[Šļáƀ ţĥîçķñéšš ~~~~]\"],\"editor.panels.floorFoundationPanel.theFloorSOutsideEdgeAll\":[\"[Ţĥé ƒļööŕ'š öûţšîðé éðĝé, áļļ áŕöûñð ţĥé ƒööţþŕîñţ. ~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.theFoundationStandsOnTheGround\":[\"[Ţĥé ƒöûñðáţîöñ šţáñðš öñ ţĥé ĝŕöûñð; ţĥé šļáƀ šîţš öñ îţ. ~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.theSlabSitsOnTheFoundation\":[\"[Ţĥé šļáƀ šîţš öñ ţĥé ƒöûñðáţîöñ (öŕ ţĥé ĝŕöûñð): á ţĥîçķéŕ šļáƀ ŕáîšéš ţĥé ƒļööŕ ţöþ áñð éṽéŕýţĥîñĝ öñ îţ. ~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.underTheFloor\":[\"[Ûñðéŕ ţĥé ƒļööŕ ~~~~]\"],\"editor.panels.floorOpeningPanel.aHatchInTheMezzanineIt\":[\"[Å ĥáţçĥ îñ ţĥé ɱéžžáñîñé: îţ çûţš öñļý ţĥé ɱéžžáñîñé’š ƒļööŕ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.alsoCutTheCeilingBelow\":[\"[Åļšö çûţ ţĥé çéîļîñĝ ƀéļöŵ ~~~~~~~]\"],\"editor.panels.floorOpeningPanel.alsoCutTheFloorAbove\":[\"[Åļšö çûţ ţĥé ƒļööŕ áƀöṽé ~~~~~~]\"],\"editor.panels.floorOpeningPanel.areaDragCorners\":[\"[\",[\"area\"],\" · Ðŕáĝ îţš çöŕñéŕš ţö çĥáñĝé ţĥé šĥáþé. ~~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.areaOwned\":[\"[\",[\"area\"],\" · Šĥáþé ƒöļļöŵš îţš öŵñéŕ. ~~~~~~]\"],\"editor.panels.floorOpeningPanel.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.floorOpeningPanel.done\":[\"[Ðöñé ~~]\"],\"editor.panels.floorOpeningPanel.kicker\":[\"[Öþéñîñĝ ~~~]\"],\"editor.panels.floorOpeningPanel.kickerLevel\":[\"[Öþéñîñĝ · \",[\"level\"],\" ~~~]\"],\"editor.panels.floorOpeningPanel.kickerRoom\":[\"[Öþéñîñĝ · îñ \",[\"room\"],\" ~~~]\"],\"editor.panels.floorOpeningPanel.kickerRoomLevel\":[\"[Öþéñîñĝ · îñ \",[\"room\"],\" · \",[\"level\"],\" ~~~]\"],\"editor.panels.floorOpeningPanel.oneVoidWith\":[\"[Öñ \",[\"level\"],\", áš öñé ṽöîð ŵîţĥ ţĥîš öþéñîñĝ. ~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.ownedByElevator\":[\"[Öŵñéð ƀý Éļéṽáţöŕ ~~~~~]\"],\"editor.panels.floorOpeningPanel.ownedByStaircase\":[\"[Öŵñéð ƀý Šţáîŕçášé ~~~~~]\"],\"editor.panels.floorOpeningPanel.thereIsNoFloorAboveThis\":[\"[Ţĥéŕé îš ñö ƒļööŕ áƀöṽé ţĥîš šţöŕéý. ~~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.thereIsNoStoreyBelow\":[\"[Ţĥéŕé îš ñö šţöŕéý ƀéļöŵ. ~~~~~~]\"],\"editor.panels.floorOpeningPanel.title\":[\"[\",[\"source\",\"select\",{\"stair\":[\"Šţáîŕ öþéñîñĝ\"],\"elevator\":[\"Éļéṽáţöŕ öþéñîñĝ\"],\"ceiling\":[\"Çéîļîñĝ öþéñîñĝ\"],\"other\":[\"Ƒļööŕ öþéñîñĝ\"]}],\" ~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.alreadyJoined\":[\"[Öñé öƒ ţĥéɱ áļŕéáðý ŵŕáþš áñöţĥéŕ çöŕñéŕ. Ûñŵŕáþ îţ ƒîŕšţ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.cannotMerge\":[\"[Ţĥéšé ŵîñðöŵš çáññöţ ƀé ɱéŕĝéð. ~~~~~~~~]\"],\"editor.panels.mergeRefusal.cornerAngle\":[\"[Ţĥéîŕ ŵáļļš ɱééţ áţ ţöö šĥáŕþ öŕ ţöö ƒļáţ áñ áñĝļé ƒöŕ á çöŕñéŕ ŵîñðöŵ. ~~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.heightExceedsWall\":[\"[Ţĥé ŵîñðöŵ šéļéçţéð ƒîŕšţ îš ţáļļéŕ ţĥáñ ţĥé öţĥéŕ ŵáļļ. Šéļéçţ ţĥé öţĥéŕ öñé ƒîŕšţ. ~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.kindBetween\":[\"[Å \",[\"kind\"],\" îš ƀéţŵééñ ţĥéɱ. ~~~~~]\"],\"editor.panels.mergeRefusal.kindOverlap\":[\"[Šļîðîñĝ ţĥéɱ ţö ţĥé çöŕñéŕ ŵöûļð öṽéŕļáþ á \",[\"kind\"],\". ~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.notAdjacent\":[\"[Ţĥéý áŕé ţöö ƒáŕ áþáŕţ. Ŵîñðöŵš ɱéŕĝé ŵîţĥ áţ ɱöšţ \",[\"reach\"],\" ƀéţŵééñ ţĥéɱ. ~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.notAtCorner\":[\"[Öñé öƒ ţĥéɱ îš ţöö ƒáŕ ƒŕöɱ ţĥé çöŕñéŕ. Å ŵîñðöŵ ĵöîñš öñé ŵîţĥîñ \",[\"reach\"],\" öƒ îţ. ~~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.notOnWall\":[\"[Å ŕööƒ öŕ ðöŕɱéŕ ŵîñðöŵ çáññöţ ĵöîñ áñöţĥéŕ ŵîñðöŵ. ~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.somethingBetween\":[\"[Ţĥéŕé îš šöɱéţĥîñĝ ƀéţŵééñ ţĥéɱ. ~~~~~~~~~]\"],\"editor.panels.mergeRefusal.somethingOverlap\":[\"[Šļîðîñĝ ţĥéɱ ţö ţĥé çöŕñéŕ ŵöûļð öṽéŕļáþ šöɱéţĥîñĝ. ~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.wallsNotMeeting\":[\"[Ţĥéîŕ ŵáļļš ðö ñöţ ɱééţ áţ á çöŕñéŕ. ~~~~~~~~~]\"],\"editor.panels.mixed\":[\"[Ṁîẋéð ~~]\"],\"editor.panels.mobilePanelSheet.close\":[\"[Çļöšé ~~]\"],\"editor.panels.mobileSelectionBar.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.mobileSelectionBar.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"editor.panels.mobileSelectionBar.editProperties\":[\"[Éðîţ þŕöþéŕţîéš ~~~~~]\"],\"editor.panels.mobileSelectionBar.editResolvedlabel\":[\"[Éðîţ \",[\"resolvedLabel\"],\" ~~]\"],\"editor.panels.mobileSelectionBar.move\":[\"[Ṁöṽé ~~]\"],\"editor.panels.multiHeightMode.currentlyCurrentlabel\":[\"[Çûŕŕéñţļý \",[\"currentLabel\"],\" ~~~]\"],\"editor.panels.multiHeightMode.customHeight\":[\"[Çûšţöɱ ĥéîĝĥţ ~~~~]\"],\"editor.panels.multiHeightMode.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"editor.panels.multiHeightMode.height\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.panels.multiHeightMode.top\":[\"[Ţöþ ~]\"],\"editor.panels.multiParametricInspector.labelSessionOnlyPlainClickReselects\":[\"[\",[\"label\"],\" (šéššîöñ öñļý). Þļáîñ çļîçķ ŕéšéļéçţš áļļ ɱéɱƀéŕš. Ñöţ šáṽéð ŵîţĥ ţĥé þŕöĵéçţ. ~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.multiSelectionPanel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"editor.panels.multiSelectionPanel.group\":[\"[Ĝŕöûþ ~~]\"],\"editor.panels.multiSelectionPanel.groupCtrlCmdG\":[\"[Ĝŕöûþ (Çţŕļ/Çɱð+Ĝ) ~~~~]\"],\"editor.panels.multiSelectionPanel.labelSessionOnlyPlainClickReselects\":[\"[\",[\"label\"],\" (šéššîöñ öñļý). Þļáîñ çļîçķ ŕéšéļéçţš áļļ ɱéɱƀéŕš. Ñöţ šáṽéð ŵîţĥ ţĥé þŕöĵéçţ. ~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.lengthSelected\":[\"[\",[\"length\"],\" šéļéçţéð ~~~]\"],\"editor.panels.multiSelectionPanel.mergeWindows\":[\"[Ṁéŕĝé ŵîñðöŵš ~~~~]\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoACornerWindow\":[\"[Ṁéŕĝé ŵîñðöŵš îñţö á çöŕñéŕ ŵîñðöŵ: ƀöţĥ ţáķé ţĥé ĥéîĝĥţ, šîļļ áñð ţýþé öƒ ţĥé öñé ýöû šéļéçţéð ƒîŕšţ ~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoOneAcrossBoth\":[\"[Ṁéŕĝé ŵîñðöŵš îñţö öñé áçŕöšš ƀöţĥ: îţ ķééþš ţĥé ţýþé áñð šţýļé öƒ ţĥé öñé ýöû šéļéçţéð ƒîŕšţ ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.selectBuilding\":[\"[Šéļéçţ ƀûîļðîñĝ ~~~~~]\"],\"editor.panels.multiSelectionPanel.selectTheWholeBuildingToMove\":[\"[Šéļéçţ ţĥé ŵĥöļé ƀûîļðîñĝ ţö ɱöṽé áļļ îţš ļéṽéļš ~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.ungroup\":[\"[Ûñĝŕöûþ ~~~]\"],\"editor.panels.multiSelectionPanel.ungroupCtrlCmdShiftG\":[\"[Ûñĝŕöûþ (Çţŕļ/Çɱð+Šĥîƒţ+Ĝ) ~~~~~~]\"],\"editor.panels.multiSelectionPanel.unwrapTheCorner\":[\"[Ûñŵŕáþ ţĥé çöŕñéŕ ~~~~~]\"],\"editor.panels.multiSelectionPanel.unwrapTheCornerBothWindowsStay\":[\"[Ûñŵŕáþ ţĥé çöŕñéŕ: ƀöţĥ ŵîñðöŵš šţáý, éáçĥ ƒŕáɱéð áţ ţĥé çöŕñéŕ ~~~~~~~~~~~~~~~~]\"],\"editor.panels.panelManager.selection\":[\"[Šéļéçţîöñ ~~~]\"],\"editor.panels.panelWrapper.closeTitle\":[\"[Çļöšé \",[\"title\"],\" ~~]\"],\"editor.panels.panelWrapper.collapsePanel\":[\"[Çöļļáþšé þáñéļ ~~~~]\"],\"editor.panels.panelWrapper.collections\":[\"[Çöļļéçţîöñš ~~~~]\"],\"editor.panels.panelWrapper.expandPanel\":[\"[Éẋþáñð þáñéļ ~~~~]\"],\"editor.panels.panelWrapper.manageCollections\":[\"[Ṁáñáĝé çöļļéçţîöñš… ~~~~~~]\"],\"editor.panels.panelWrapper.openTitle\":[\"[Öþéñ \",[\"title\"],\" ~~]\"],\"editor.panels.panelWrapper.titleHitAnErrorAndWas\":[\"[“\",[\"title\"],\"” ĥîţ áñ éŕŕöŕ áñð ŵáš ûñļöáðéð ƒöŕ ţĥîš šéššîöñ. ~~~~~~~~~~~~]\"],\"editor.panels.parametricFieldControl.mixed\":[\"[Ṁîẋéð ~~]\"],\"editor.panels.parametricInspector.actions\":[\"[Åçţîöñš ~~~]\"],\"editor.panels.parametricInspector.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.parametricInspector.deleteWithContents\":[\"[Ðéļéţé ŵîţĥ çöñţéñţš ~~~~~~]\"],\"editor.panels.parametricInspector.move\":[\"[Ṁöṽé ~~]\"],\"editor.panels.referencePanel.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.panels.referencePanel.capture\":[\"[Çáþţûŕé ~~~]\"],\"editor.panels.referencePanel.center\":[\"[Çéñţéŕ ~~]\"],\"editor.panels.referencePanel.clearScale\":[\"[Çļéáŕ Šçáļé ~~~]\"],\"editor.panels.referencePanel.clickBothEndsOfAKnown\":[\"[Çļîçķ ƀöţĥ éñðš öƒ á ķñöŵñ ðîšţáñçé öñ ţĥé þļáñ, ţĥéñ ţýþé îţš ŕéáļ ļéñĝţĥ. ~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.referencePanel.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.referencePanel.drawALineOverAKnown\":[\"[Ðŕáŵ á ļîñé öṽéŕ á ķñöŵñ ðîɱéñšîöñ öñ ţĥé þļáñ, ţĥéñ ţýþé îţš ŕéáļ ļéñĝţĥ ţö šçáļé ţĥé îɱáĝé éẋáçţļý. ~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.referencePanel.editScale\":[\"[Éðîţ Šçáļé ~~~]\"],\"editor.panels.referencePanel.guideImage\":[\"[Ĝûîðé Îɱáĝé ~~~]\"],\"editor.panels.referencePanel.hide\":[\"[Ĥîðé ~~]\"],\"editor.panels.referencePanel.hideScale\":[\"[Ĥîðé Šçáļé ~~~]\"],\"editor.panels.referencePanel.image\":[\"[Îɱáĝé ~~]\"],\"editor.panels.referencePanel.lock\":[\"[Ļöçķ ~~]\"],\"editor.panels.referencePanel.move\":[\"[Ṁöṽé ~~]\"],\"editor.panels.referencePanel.opacity\":[\"[Öþáçîţý ~~~]\"],\"editor.panels.referencePanel.overlayImageUnavailableReplaceTheImage\":[\"[Öṽéŕļáý îɱáĝé ûñáṽáîļáƀļé. Ŕéþļáçé ţĥé îɱáĝé ţö ŕéšţöŕé îţ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.referencePanel.pos\":[\"[þöš ~]\"],\"editor.panels.referencePanel.position\":[\"[Þöšîţîöñ ~~~]\"],\"editor.panels.referencePanel.quickActions\":[\"[Ǫûîçķ Åçţîöñš ~~~~]\"],\"editor.panels.referencePanel.referenceScale\":[\"[Ŕéƒéŕéñçé Šçáļé ~~~~~]\"],\"editor.panels.referencePanel.replace\":[\"[Ŕéþļáçé ~~~]\"],\"editor.panels.referencePanel.replacing\":[\"[Ŕéþļáçîñĝ... ~~~]\"],\"editor.panels.referencePanel.resetImageScale\":[\"[Ŕéšéţ Îɱáĝé Šçáļé ~~~~~]\"],\"editor.panels.referencePanel.resetRotation\":[\"[Ŕéšéţ Ŕöţáţîöñ ~~~~]\"],\"editor.panels.referencePanel.rot\":[\"[ŕöţ ~]\"],\"editor.panels.referencePanel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"editor.panels.referencePanel.scale\":[\"[šçáļé ~~]\"],\"editor.panels.referencePanel.scaleOpacity\":[\"[Šçáļé & Öþáçîţý ~~~~]\"],\"editor.panels.referencePanel.scaled\":[\"[Šçáļéð · \",[\"scale\"],\" ~~]\"],\"editor.panels.referencePanel.scaledHidden\":[\"[Šçáļéð (ĥîððéñ) · \",[\"scale\"],\" ~~~~]\"],\"editor.panels.referencePanel.setScale\":[\"[Šéţ Šçáļé ~~~]\"],\"editor.panels.referencePanel.show\":[\"[Šĥöŵ ~~]\"],\"editor.panels.referencePanel.showScale\":[\"[Šĥöŵ Šçáļé ~~~]\"],\"editor.panels.referencePanel.uncalibrated\":[\"[Ûñçáļîƀŕáţéð ~~~~]\"],\"editor.panels.referencePanel.unlock\":[\"[Ûñļöçķ ~~]\"],\"editor.panels.referencePanel.xyz\":[\"[ẊÝŽ ~]\"],\"editor.panels.roomConstructionRows.aDrawnSlabSetItsThickness\":[\"[Å ðŕáŵñ šļáƀ: šéţ îţš ţĥîçķñéšš áñð ƒîñîšĥéš ĥéŕé. Îţ ĥáš ñö ƒööţþŕîñţ ĥéîĝĥţ öŕ ƒöûñðáţîöñ. ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.addMezzanine\":[\"[+ Åðð ɱéžžáñîñé ~~~~]\"],\"editor.panels.roomConstructionRows.atFloorLevel\":[\"[Åţ ƒļööŕ ļéṽéļ ~~~~]\"],\"editor.panels.roomConstructionRows.builtOn\":[\"[Ɓûîļţ öñ ~~~]\"],\"editor.panels.roomConstructionRows.builtWith\":[\"[Ɓûîļţ ŵîţĥ ~~~]\"],\"editor.panels.roomConstructionRows.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.panels.roomConstructionRows.ceilingAt\":[\"[Åţ \",[\"height\"],\" ~]\"],\"editor.panels.roomConstructionRows.closeWithWalls\":[\"[Çļöšé ŵîţĥ ŵáļļš ~~~~~]\"],\"editor.panels.roomConstructionRows.drawnFloor\":[\"[\",[\"ambiguous\",\"select\",{\"yes\":[\"Ƒļööŕ îš šéṽéŕáļ ðŕáŵñ šļáƀš, ɱöšţļý \",[\"name\"]],\"other\":[\"Ƒļööŕ îš á ðŕáŵñ šļáƀ: \",[\"name\"]]}],[\"shared\",\"plural\",{\"0\":[],\"one\":[\" (šĥáŕéð ŵîţĥ \",\"#\",\" ŕööɱ)\"],\"other\":[\" (šĥáŕéð ŵîţĥ \",\"#\",\" ŕööɱš)\"]}],\" ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.drawnFloorSwitchHint\":[\"[Ţĥîš ƒļööŕ îš á ðŕáŵñ šļáƀ: šéļéçţ îţ ţö éðîţ öŕ ðéļéţé îţ. ~~~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.drawnSlab\":[\"[Ðŕáŵñ šļáƀ ~~~]\"],\"editor.panels.roomConstructionRows.drawnSlabAt\":[\"[Ðŕáŵñ šļáƀ áţ \",[\"height\"],\" ~~~~]\"],\"editor.panels.roomConstructionRows.editShape\":[\"[Éðîţ šĥáþé ~~~]\"],\"editor.panels.roomConstructionRows.flatAtWallHeight\":[\"[Ƒļáţ, áţ ŵáļļ ĥéîĝĥţ ~~~~~]\"],\"editor.panels.roomConstructionRows.floor\":[\"[Ƒļööŕ ~~]\"],\"editor.panels.roomConstructionRows.floorDown\":[\"[\",[\"distance\"],\" ðöŵñ ~~]\"],\"editor.panels.roomConstructionRows.floorThickness\":[\"[Ƒļööŕ ţĥîçķñéšš ~~~~~]\"],\"editor.panels.roomConstructionRows.floorUp\":[\"[\",[\"distance\"],\" ûþ ~]\"],\"editor.panels.roomConstructionRows.handDrawnCeiling\":[\"[Ĥáñð-ðŕáŵñ çéîļîñĝ ~~~~~]\"],\"editor.panels.roomConstructionRows.height\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.panels.roomConstructionRows.includeFloor\":[\"[Îñçļûðé ƒļööŕ ~~~~]\"],\"editor.panels.roomConstructionRows.includePart\":[\"[\",[\"part\",\"select\",{\"floor\":[\"Îñçļûðé ƒļööŕ\"],\"walls\":[\"Îñçļûðé ŵáļļš\"],\"other\":[\"Îñçļûðé çéîļîñĝ\"]}],\" ~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.includeWalls\":[\"[Îñçļûðé ŵáļļš ~~~~]\"],\"editor.panels.roomConstructionRows.keepOutsideDimensions\":[\"[Ķééþ öûţšîðé ðîɱéñšîöñš ~~~~~~~]\"],\"editor.panels.roomConstructionRows.lowered\":[\"[Ļöŵéŕéð \",[\"lift\"],\" ~~~]\"],\"editor.panels.roomConstructionRows.newFloor\":[\"[+ Ñéŵ ƒļööŕ ~~~]\"],\"editor.panels.roomConstructionRows.noFloor\":[\"[Ñö ƒļööŕ ~~~]\"],\"editor.panels.roomConstructionRows.notIncluded\":[\"[Ñöţ îñçļûðéð ~~~~]\"],\"editor.panels.roomConstructionRows.nothingToChange\":[\"[Ñöţĥîñĝ ţö çĥáñĝé. ~~~~~]\"],\"editor.panels.roomConstructionRows.onTheGround\":[\"[Öñ ţĥé ĝŕöûñð ~~~~]\"],\"editor.panels.roomConstructionRows.onTheWallsBelow\":[\"[Öñ ţĥé ŵáļļš ƀéļöŵ ~~~~~]\"],\"editor.panels.roomConstructionRows.openSides\":[\"[\",[\"openSides\",\"plural\",{\"one\":[\"#\",\" öþéñ šîðé\"],\"other\":[\"#\",\" öþéñ šîðéš\"]}],\" ~~~~~~]\"],\"editor.panels.roomConstructionRows.partialCovered\":[\"[Þáŕţîáļ · \",[\"coverage\",\"number\",\"percent\"],\" çöṽéŕéð ~~~~~]\"],\"editor.panels.roomConstructionRows.partialWalls\":[\"[Þáŕţîáļ · \",[\"walls\",\"plural\",{\"one\":[\"#\",\" ŵáļļ\"],\"other\":[\"#\",\" ŵáļļš\"]}],\", \",[\"openSides\",\"plural\",{\"one\":[\"#\",\" öþéñ šîðé\"],\"other\":[\"#\",\" öþéñ šîðéš\"]}],\" ~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.raised\":[\"[Ŕáîšéð \",[\"lift\"],\" ~~]\"],\"editor.panels.roomConstructionRows.replace\":[\"[Ŕéþļáçé ~~~]\"],\"editor.panels.roomConstructionRows.select\":[\"[Šéļéçţ ~~]\"],\"editor.panels.roomConstructionRows.shape\":[\"[Šĥáþé ~~]\"],\"editor.panels.roomConstructionRows.sharedWallsNote\":[\"[Ţûŕñîñĝ ŵáļļš öƒƒ ķééþš ţĥé öñéš šĥáŕéð ŵîţĥ \",[\"rooms\"],\". ~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.sitsOnPreset\":[\"[Šîţš öñ: \",[\"name\"],\" · \",[\"preset\"],\" ~~]\"],\"editor.panels.roomConstructionRows.useExisting\":[\"[Ûšé éẋîšţîñĝ ~~~~]\"],\"editor.panels.roomConstructionRows.wallCount\":[\"[\",[\"walls\",\"plural\",{\"one\":[\"#\",\" ŵáļļ\"],\"other\":[\"#\",\" ŵáļļš\"]}],\" ~~~]\"],\"editor.panels.roomConstructionRows.walls\":[\"[Ŵáļļš ~~]\"],\"editor.panels.roomConstructionRows.wallsThickenInwardSoTheBuilding\":[\"[Ŵáļļš ţĥîçķéñ îñŵáŕð, šö ţĥé ƀûîļðîñĝ'š öûţéŕ šîžé šţáýš ţĥé šáɱé. ~~~~~~~~~~~~~~~~]\"],\"editor.panels.roomOpeningsField.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"editor.panels.roomOpeningsField.done\":[\"[Ðöñé ~~]\"],\"editor.panels.roomOpeningsField.editFloor\":[\"[Éðîţ ƒļööŕ ~~~]\"],\"editor.panels.roomOpeningsField.elevatorOpening\":[\"[Éļéṽáţöŕ öþéñîñĝ ~~~~~]\"],\"editor.panels.roomOpeningsField.noOpenings\":[\"[Ñö öþéñîñĝš ~~~]\"],\"editor.panels.roomOpeningsField.noOpeningsYetCutOneFor\":[\"[Ñö öþéñîñĝš ýéţ. Çûţ öñé ƒöŕ á šţáîŕ ṽöîð öŕ á ĥáţçĥ. ~~~~~~~~~~~~]\"],\"editor.panels.roomOpeningsField.openingNumber\":[\"[Öþéñîñĝ \",[\"number\"],\" ~~~]\"],\"editor.panels.roomOpeningsField.stairOpening\":[\"[Šţáîŕ öþéñîñĝ ~~~~]\"],\"editor.panels.roomPanel.addStairs\":[\"[Åðð šţáîŕš ~~~]\"],\"editor.panels.roomPanel.addToAUnit\":[\"[Åðð ţö á ûñîţ ~~~]\"],\"editor.panels.roomPanel.area\":[\"[Åŕéá ~~]\"],\"editor.panels.roomPanel.browse\":[\"[Ɓŕöŵšé ~~]\"],\"editor.panels.roomPanel.builtWith\":[\"[Ɓûîļţ ŵîţĥ ~~~]\"],\"editor.panels.roomPanel.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.panels.roomPanel.deleteRoom\":[\"[Ðéļéţé ŕööɱ ~~~]\"],\"editor.panels.roomPanel.editShape\":[\"[Éðîţ šĥáþé ~~~]\"],\"editor.panels.roomPanel.floor\":[\"[Ƒļööŕ ~~]\"],\"editor.panels.roomPanel.headroom\":[\"[\",[\"height\"],\" ĥéáðŕööɱ ~~~]\"],\"editor.panels.roomPanel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.panels.roomPanel.hideCode\":[\"[Ĥîðé çöðé ~~~]\"],\"editor.panels.roomPanel.kickerLevel\":[\"[Ŕööɱ · \",[\"level\"],\" ~~]\"],\"editor.panels.roomPanel.kickerMezzanineIn\":[\"[Ṁéžžáñîñé · îñ \",[\"room\"],\" ~~~~]\"],\"editor.panels.roomPanel.kickerNotEnclosed\":[\"[Ŕööɱ · ñöţ éñçļöšéð ~~~~~]\"],\"editor.panels.roomPanel.loading\":[\"[Ļöáðîñĝ… ~~~]\"],\"editor.panels.roomPanel.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.panels.roomPanel.mezzanineName\":[\"[Ṁéžžáñîñé ñáɱé ~~~~]\"],\"editor.panels.roomPanel.mezzanineNames\":[\"[Ṁéžžáñîñé ñáɱéš ~~~~~]\"],\"editor.panels.roomPanel.newUnit\":[\"[Ñéŵ ûñîţ ~~~]\"],\"editor.panels.roomPanel.none\":[\"[Ñöñé ~~]\"],\"editor.panels.roomPanel.notEnoughHeadroom\":[\"[Ñöţ éñöûĝĥ ĥéáðŕööɱ ~~~~~~]\"],\"editor.panels.roomPanel.openRoomArea\":[\"[\",[\"area\"],\" · Çļöšé îţš ŵáļļš ţö ƀûîļð îţš ƒļööŕ áñð çéîļîñĝ. ~~~~~~~~~~~~]\"],\"editor.panels.roomPanel.overTheMezzanine\":[\"[Öṽéŕ ţĥé ɱéžžáñîñé ~~~~~]\"],\"editor.panels.roomPanel.perimeter\":[\"[Þéŕîɱéţéŕ ~~~]\"],\"editor.panels.roomPanel.pick\":[\"[Þîçķ ~~]\"],\"editor.panels.roomPanel.pickingItAddsANumber\":[\"[Þîçķîñĝ îţ áððš á ñûɱƀéŕ ~~~~~~]\"],\"editor.panels.roomPanel.remove\":[\"[Ŕéɱöṽé ~~]\"],\"editor.panels.roomPanel.removeFromUnit\":[\"[Ŕéɱöṽé ƒŕöɱ ûñîţ ~~~~~]\"],\"editor.panels.roomPanel.removeFromUnitNamed\":[\"[Ŕéɱöṽé ƒŕöɱ \",[\"unit\"],\" ~~~]\"],\"editor.panels.roomPanel.rename\":[\"[Ŕéñáɱé ~~]\"],\"editor.panels.roomPanel.renameNamed\":[\"[\",[\"name\"],\" · Ŕéñáɱé ~~]\"],\"editor.panels.roomPanel.revert\":[\"[Ŕéṽéŕţ ~~]\"],\"editor.panels.roomPanel.room\":[\"[Ŕööɱ ~~]\"],\"editor.panels.roomPanel.roomColourUsedInThePlan\":[\"[Ŕööɱ çöļöûŕ — ûšéð îñ ţĥé þļáñ áñð ļáƀéļš ~~~~~~~~~~]\"],\"editor.panels.roomPanel.roomName\":[\"[Ŕööɱ ñáɱé ~~~]\"],\"editor.panels.roomPanel.roomNames\":[\"[Ŕööɱ ñáɱéš ~~~]\"],\"editor.panels.roomPanel.scriptedFinish\":[\"[Šçŕîþţéð ƒîñîšĥ ~~~~~]\"],\"editor.panels.roomPanel.shape\":[\"[Šĥáþé ~~]\"],\"editor.panels.roomPanel.showMezzanineNames\":[\"[Šĥöŵ ɱéžžáñîñé ñáɱéš ~~~~~~]\"],\"editor.panels.roomPanel.showRoomNames\":[\"[Šĥöŵ ŕööɱ ñáɱéš ~~~~]\"],\"editor.panels.roomPanel.stairs\":[\"[Šţáîŕš ~~]\"],\"editor.panels.roomPanel.unit\":[\"[Ûñîţ ~~]\"],\"editor.panels.roomPanel.use\":[\"[Ûšé ~]\"],\"editor.panels.roomPanel.useTyped\":[[\"use\"],\" “\",[\"name\"],\"”\"],\"editor.panels.roomPanel.usedOnThisLevel\":[\"[\",[\"used\"],\" öñ ţĥîš ļéṽéļ ~~~~]\"],\"editor.panels.roomPanel.viewCode\":[\"[Ṽîéŵ çöðé ~~~]\"],\"editor.panels.scriptUnreadable\":[\"[Ţĥé šçŕîþţ çöûļð ñöţ ƀé ŕéáð. ~~~~~~~]\"],\"editor.panels.shapeChoice.polygon\":[\"[Þöļýĝöñ ~~~]\"],\"editor.panels.shapeChoice.rectangle\":[\"[Ŕéçţáñĝļé ~~~]\"],\"editor.panels.wallRegionList.deleteRegion\":[\"[Ðéļéţé ŕéĝîöñ ~~~~]\"],\"editor.panels.wallRegionList.paintRegions\":[\"[Þáîñţ ŕéĝîöñš ~~~~]\"],\"editor.reloadEditor\":[\"[Ŕéļöáð éðîţöŕ ~~~~]\"],\"editor.room.builtOn.above\":[\"[\",[\"current\"],\" · \",[\"distance\"],\" áƀöṽé \",[\"shared\"],\" ~~]\"],\"editor.room.builtOn.below\":[\"[\",[\"current\"],\" · \",[\"distance\"],\" ƀéļöŵ \",[\"shared\"],\" ~~]\"],\"editor.room.builtOn.levelWith\":[\"[\",[\"current\"],\" · ļéṽéļ ŵîţĥ \",[\"shared\"],\" ~~~]\"],\"editor.roomName.attic\":[\"[Åţţîç ~~]\"],\"editor.roomName.balcony\":[\"[Ɓáļçöñý ~~~]\"],\"editor.roomName.basement\":[\"[Ɓášéɱéñţ ~~~]\"],\"editor.roomName.bathroom\":[\"[Ɓáţĥŕööɱ ~~~]\"],\"editor.roomName.bedroom\":[\"[Ɓéðŕööɱ ~~~]\"],\"editor.roomName.boilerRoom\":[\"[Ɓöîļéŕ ŕööɱ ~~~]\"],\"editor.roomName.carport\":[\"[Çáŕþöŕţ ~~~]\"],\"editor.roomName.cellar\":[\"[Çéļļáŕ ~~]\"],\"editor.roomName.closet\":[\"[Çļöšéţ ~~]\"],\"editor.roomName.corridor\":[\"[Çöŕŕîðöŕ ~~~]\"],\"editor.roomName.courtyard\":[\"[Çöûŕţýáŕð ~~~]\"],\"editor.roomName.deck\":[\"[Ðéçķ ~~]\"],\"editor.roomName.den\":[\"[Ðéñ ~]\"],\"editor.roomName.diningRoom\":[\"[Ðîñîñĝ ŕööɱ ~~~]\"],\"editor.roomName.dressingRoom\":[\"[Ðŕéššîñĝ ŕööɱ ~~~~]\"],\"editor.roomName.enSuite\":[\"[Éñ-šûîţé ~~~]\"],\"editor.roomName.entrance\":[\"[Éñţŕáñçé ~~~]\"],\"editor.roomName.familyRoom\":[\"[Ƒáɱîļý ŕööɱ ~~~]\"],\"editor.roomName.gallery\":[\"[Ĝáļļéŕý ~~~]\"],\"editor.roomName.gamesRoom\":[\"[Ĝáɱéš ŕööɱ ~~~]\"],\"editor.roomName.garage\":[\"[Ĝáŕáĝé ~~]\"],\"editor.roomName.garden\":[\"[Ĝáŕðéñ ~~]\"],\"editor.roomName.gardenShed\":[\"[Ĝáŕðéñ šĥéð ~~~]\"],\"editor.roomName.guestRoom\":[\"[Ĝûéšţ ŕööɱ ~~~]\"],\"editor.roomName.gym\":[\"[Ĝýɱ ~]\"],\"editor.roomName.hallway\":[\"[Ĥáļļŵáý ~~~]\"],\"editor.roomName.homeCinema\":[\"[Ĥöɱé çîñéɱá ~~~]\"],\"editor.roomName.kidsRoom\":[\"[Ķîðš' ŕööɱ ~~~]\"],\"editor.roomName.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"editor.roomName.kitchenette\":[\"[Ķîţçĥéñéţţé ~~~~]\"],\"editor.roomName.landing\":[\"[Ļáñðîñĝ ~~~]\"],\"editor.roomName.laundry\":[\"[Ļáûñðŕý ~~~]\"],\"editor.roomName.library\":[\"[Ļîƀŕáŕý ~~~]\"],\"editor.roomName.livingRoom\":[\"[Ļîṽîñĝ ŕööɱ ~~~]\"],\"editor.roomName.loft\":[\"[Ļöƒţ ~~]\"],\"editor.roomName.lounge\":[\"[Ļöûñĝé ~~]\"],\"editor.roomName.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.roomName.mudroom\":[\"[Ṁûðŕööɱ ~~~]\"],\"editor.roomName.nursery\":[\"[Ñûŕšéŕý ~~~]\"],\"editor.roomName.office\":[\"[Öƒƒîçé ~~]\"],\"editor.roomName.pantry\":[\"[Þáñţŕý ~~]\"],\"editor.roomName.patio\":[\"[Þáţîö ~~]\"],\"editor.roomName.playroom\":[\"[Þļáýŕööɱ ~~~]\"],\"editor.roomName.poolArea\":[\"[Þööļ áŕéá ~~~]\"],\"editor.roomName.porch\":[\"[Þöŕçĥ ~~]\"],\"editor.roomName.powderRoom\":[\"[Þöŵðéŕ ŕööɱ ~~~]\"],\"editor.roomName.primaryBedroom\":[\"[Þŕîɱáŕý ƀéðŕööɱ ~~~~~]\"],\"editor.roomName.readingNook\":[\"[Ŕéáðîñĝ ñööķ ~~~~]\"],\"editor.roomName.section.bathrooms\":[\"[Ɓáţĥŕööɱš ~~~]\"],\"editor.roomName.section.circulation\":[\"[Çîŕçûļáţîöñ ~~~~]\"],\"editor.roomName.section.living\":[\"[Ļîṽîñĝ ~~]\"],\"editor.roomName.section.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.roomName.section.outdoor\":[\"[Öûţðööŕ ~~~]\"],\"editor.roomName.section.sleeping\":[\"[Šļééþîñĝ ~~~]\"],\"editor.roomName.section.utility\":[\"[Ûţîļîţý & šţöŕáĝé ~~~~~]\"],\"editor.roomName.section.work\":[\"[Ŵöŕķ & ĥöƀƀîéš ~~~~]\"],\"editor.roomName.showerRoom\":[\"[Šĥöŵéŕ ŕööɱ ~~~]\"],\"editor.roomName.stairwell\":[\"[Šţáîŕŵéļļ ~~~]\"],\"editor.roomName.storage\":[\"[Šţöŕáĝé ~~~]\"],\"editor.roomName.studio\":[\"[Šţûðîö ~~]\"],\"editor.roomName.study\":[\"[Šţûðý ~~]\"],\"editor.roomName.sunroom\":[\"[Šûñŕööɱ ~~~]\"],\"editor.roomName.terrace\":[\"[Ţéŕŕáçé ~~~]\"],\"editor.roomName.toilet\":[\"[Ţöîļéţ ~~]\"],\"editor.roomName.utilityRoom\":[\"[Ûţîļîţý ŕööɱ ~~~~]\"],\"editor.roomName.veranda\":[\"[Ṽéŕáñðá ~~~]\"],\"editor.roomName.walkInCloset\":[\"[Ŵáļķ-îñ çļöšéţ ~~~~]\"],\"editor.roomName.workshop\":[\"[Ŵöŕķšĥöþ ~~~]\"],\"editor.theEditorSceneFailedToRender\":[\"[Ţĥé éðîţöŕ šçéñé ƒáîļéð ţö ŕéñðéŕ ~~~~~~~~~]\"],\"editor.toolHint.aCurtainWallTakesNoCorner.1qxjv5i\":[\"[Å çûŕţáîñ ŵáļļ ţáķéš ñö çöŕñéŕ ŵîñðöŵ ~~~~~~~~~~]\"],\"editor.toolHint.aCurvedWallTakesNoCorner.1vdnaw5\":[\"[Å çûŕṽéð ŵáļļ ţáķéš ñö çöŕñéŕ ŵîñðöŵ ~~~~~~~~~]\"],\"editor.toolHint.addACornerClickTheFirst.o4r67t\":[\"[Åðð á çöŕñéŕ · çļîçķ ţĥé ƒîŕšţ ţö çļöšé ~~~~~~~~~]\"],\"editor.toolHint.anotherOpeningIsInTheWay.11l9dd0\":[\"[Åñöţĥéŕ öþéñîñĝ îš îñ ţĥé ŵáý áţ ţĥé çöŕñéŕ ~~~~~~~~~~~]\"],\"editor.toolHint.autoHangers.10554ka\":[\"[Åûţö ĥáñĝéŕš ~~~~]\"],\"editor.toolHint.autoHangersClickOrPressH.rwa3ka\":[\"[Åûţö ĥáñĝéŕš - çļîçķ öŕ þŕéšš Ĥ ţö ţöĝĝļé ~~~~~~~~~~]\"],\"editor.toolHint.autoHangersOff.7yx01x\":[\"[Åûţö ĥáñĝéŕš: Öƒƒ ~~~~~]\"],\"editor.toolHint.autoHangersOn.10b1umh\":[\"[Åûţö ĥáñĝéŕš: Öñ ~~~~]\"],\"editor.toolHint.bypassSnapping.w5lmdv\":[\"[Ɓýþášš šñáþþîñĝ ~~~~~]\"],\"editor.toolHint.cancel.ew9em3\":[\"[Çáñçéļ ~~]\"],\"editor.toolHint.cancelMove.lvp31c\":[\"[Çáñçéļ ɱöṽé ~~~]\"],\"editor.toolHint.cancelRunExit.zqjf3h\":[\"[Çáñçéļ ŕûñ / éẋîţ ~~~~]\"],\"editor.toolHint.cancelStartPoint.1xbq2lh\":[\"[Çáñçéļ šţáŕţ þöîñţ ~~~~~]\"],\"editor.toolHint.cornerWindow.1avkzpo\":[\"[Çöŕñéŕ ŵîñðöŵ ~~~~]\"],\"editor.toolHint.cuts.1y0axps\":[\"[Çûţš ~~]\"],\"editor.toolHint.cutsValue.ouzhvb\":[\"[Çûţš: \",[\"value\"],\" ~~]\"],\"editor.toolHint.cutsValueEven.1ngsz3\":[\"[Çûţš: \",[\"value\"],\", éṽéñ ~~~]\"],\"editor.toolHint.cycleMonoGableButterfly.1poga3m\":[\"[Çýçļé ɱöñö / ĝáƀļé / ƀûţţéŕƒļý ~~~~~~~]\"],\"editor.toolHint.cycleSnappingMode.1ct0gn6\":[\"[Çýçļé šñáþþîñĝ ɱöðé ~~~~~~]\"],\"editor.toolHint.doorStyleClickOrPressL.33pe65\":[\"[Ðööŕ šţýļé — çļîçķ öŕ þŕéšš Ļ ţö çýçļé ~~~~~~~~~]\"],\"editor.toolHint.doorTypeClickOrPressO.1hhh8gt\":[\"[Ðööŕ ţýþé — çļîçķ öŕ þŕéšš Ö ţö çýçļé ~~~~~~~~~]\"],\"editor.toolHint.dropDownspoutFromOutlet.1k4h1m4\":[\"[Ðŕöþ ðöŵñšþöûţ ƒŕöɱ öûţļéţ ~~~~~~~]\"],\"editor.toolHint.ductDiameterDownUp.1wdz5vq\":[\"[Ðûçţ ðîáɱéţéŕ ðöŵñ / ûþ ~~~~~~]\"],\"editor.toolHint.endRunCancel.59dh2w\":[\"[Éñð ŕûñ / çáñçéļ ~~~~]\"],\"editor.toolHint.exit.engmg5\":[\"[Éẋîţ ~~]\"],\"editor.toolHint.exitDrawing.9noxyb\":[\"[Éẋîţ ðŕáŵîñĝ ~~~~]\"],\"editor.toolHint.finishAndContinue.1gpfsks\":[\"[Ƒîñîšĥ áñð çöñţîñûé ~~~~~~]\"],\"editor.toolHint.finishCeiling.1c1lfel\":[\"[Ƒîñîšĥ çéîļîñĝ ~~~~]\"],\"editor.toolHint.finishGridAxis.1wvrfhr\":[\"[Ƒîñîšĥ ĝŕîð áẋîš ~~~~~]\"],\"editor.toolHint.finishMeasurement.1e4gv16\":[\"[Ƒîñîšĥ ɱéášûŕéɱéñţ ~~~~~~]\"],\"editor.toolHint.finishMultiPointWitnesses.8wzskz\":[\"[Ƒîñîšĥ ɱûļţî-þöîñţ ŵîţñéššéš ~~~~~~~~]\"],\"editor.toolHint.finishSlab.xmnm8e\":[\"[Ƒîñîšĥ šļáƀ ~~~]\"],\"editor.toolHint.flipSide.172xku9\":[\"[Ƒļîþ šîðé ~~~]\"],\"editor.toolHint.followTraceALineset.mgquwe\":[\"[Ƒöļļöŵ: ţŕáçé á ļîñéšéţ ~~~~~~]\"],\"editor.toolHint.forcePlace.1hq1nr\":[\"[Ƒöŕçé þļáçé ~~~]\"],\"editor.toolHint.freePlacement.1nztdac\":[\"[Ƒŕéé þļáçéɱéñţ ~~~~]\"],\"editor.toolHint.goVerticalClickToPlace.dg8g6m\":[\"[Ĝö ṽéŕţîçáļ ↕, çļîçķ ţö þļáçé ~~~~~~~]\"],\"editor.toolHint.highlightOutlet.65hoq8\":[\"[Ĥîĝĥļîĝĥţ öûţļéţ ~~~~~]\"],\"editor.toolHint.joinAsACornerWindow.jvdp4j\":[\"[Ĵöîñ áš á çöŕñéŕ ŵîñðöŵ ~~~~~~]\"],\"editor.toolHint.key.altDrag.ai3wn9\":[\"[Åļţ + ðŕáĝ ~~~]\"],\"editor.toolHint.key.backspace.qy6qx8\":[\"[Ɓáçķšþáçé ~~~]\"],\"editor.toolHint.key.click.m8sun\":[\"[Çļîçķ ~~]\"],\"editor.toolHint.key.clickAgain.190ws9j\":[\"[Çļîçķ áĝáîñ ~~~]\"],\"editor.toolHint.key.command.1j2mkia\":[\"[Çöɱɱáñð ~~~]\"],\"editor.toolHint.key.control.10fbl8e\":[\"[Çöñţŕöļ ~~~]\"],\"editor.toolHint.key.delete.oay2cq\":[\"[Ðéļéţé ~~]\"],\"editor.toolHint.key.doubleClick.vlma6o\":[\"[Ðöûƀļé çļîçķ ~~~~]\"],\"editor.toolHint.key.drag.8pwtpf\":[\"[Ðŕáĝ ~~]\"],\"editor.toolHint.key.enter.1ctpui5\":[\"[Éñţéŕ ~~]\"],\"editor.toolHint.key.hover.6xw79p\":[\"[Ĥöṽéŕ ~~]\"],\"editor.toolHint.key.hoverADuctEnd.19axr3b\":[\"[Ĥöṽéŕ á ðûçţ éñð ~~~~]\"],\"editor.toolHint.key.hoverAPipeEnd.1jbum5f\":[\"[Ĥöṽéŕ á þîþé éñð ~~~~]\"],\"editor.toolHint.key.hoverGutter.1dwcsno\":[\"[Ĥöṽéŕ ĝûţţéŕ ~~~~]\"],\"editor.toolHint.key.leftClick.s4gwfc\":[\"[Ļéƒţ çļîçķ ~~~]\"],\"editor.toolHint.key.middleClick.1jbaan4\":[\"[Ṁîððļé çļîçķ ~~~~]\"],\"editor.toolHint.key.rShiftR.13bnobh\":[\"[Ŕ / Šĥîƒţ+Ŕ ~~~]\"],\"editor.toolHint.key.rightClick.1ovld0h\":[\"[Ŕîĝĥţ çļîçķ ~~~]\"],\"editor.toolHint.key.scroll.ai6wr0\":[\"[Šçŕöļļ ~~]\"],\"editor.toolHint.key.scrollWheel.18j0ix7\":[\"[Šçŕöļļ ŵĥééļ ~~~~]\"],\"editor.toolHint.key.space.1hrh82t\":[\"[Šþáçé ~~]\"],\"editor.toolHint.key.tab.1xsal0s\":[\"[Ţáƀ ~]\"],\"editor.toolHint.mountFloorCeilingWall.32dxpv\":[\"[Ṁöûñţ: ƒļööŕ / çéîļîñĝ / ŵáļļ ~~~~~~~]\"],\"editor.toolHint.noRoomForTheMatchingWindow.1755948\":[\"[Ñö ŕööɱ ƒöŕ ţĥé ɱáţçĥîñĝ ŵîñðöŵ öñ ţĥé öţĥéŕ ŵáļļ ~~~~~~~~~~~~]\"],\"editor.toolHint.noWallMeetsHere.19n99yc\":[\"[Ñö ŵáļļ ɱééţš ĥéŕé ~~~~~]\"],\"editor.toolHint.numberOfCutsScrollOrClick.1kqe84b\":[\"[Ñûɱƀéŕ öƒ çûţš — šçŕöļļ öŕ çļîçķ ţö çĥáñĝé ~~~~~~~~~~]\"],\"editor.toolHint.pickWitnessPoint.k3hgh1\":[\"[Þîçķ ŵîţñéšš þöîñţ ~~~~~]\"],\"editor.toolHint.pipeSizeDownUp.wp04og\":[\"[Þîþé šîžé ðöŵñ / ûþ ~~~~~]\"],\"editor.toolHint.placeAndContinue.qfwkrq\":[\"[Þļáçé áñð çöñţîñûé ~~~~~]\"],\"editor.toolHint.placeBlock.1aylwrx\":[\"[Þļáçé ƀļöçķ ~~~]\"],\"editor.toolHint.placeBoxVentOnRoof.kf88e5\":[\"[Þļáçé ƀöẋ ṽéñţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeCabinet.b0ouyk\":[\"[Þļáçé çáƀîñéţ ~~~~]\"],\"editor.toolHint.placeCanopyOrSetTheNext.12l7zf8\":[\"[Þļáçé çáñöþý öŕ šéţ ţĥé ñéẋţ ŕûñ þöîñţ ~~~~~~~~~~]\"],\"editor.toolHint.placeChimneyOnRoof.19dbqu\":[\"[Þļáçé çĥîɱñéý öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeColumn.1w2vq86\":[\"[Þļáçé çöļûɱñ ~~~~]\"],\"editor.toolHint.placeCupolaOnRoof.ofx3bn\":[\"[Þļáçé çûþöļá öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeDimensionLineWhenNeeded.bjw2cj\":[\"[Þļáçé ðîɱéñšîöñ ļîñé ŵĥéñ ñééðéð ~~~~~~~~~]\"],\"editor.toolHint.placeDoorOnWall.1jwadf\":[\"[Þļáçé ðööŕ öñ ŵáļļ ~~~~~]\"],\"editor.toolHint.placeDormerOnRoof.1w518a6\":[\"[Þļáçé ðöŕɱéŕ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeElevator.1f65zva\":[\"[Þļáçé éļéṽáţöŕ ~~~~]\"],\"editor.toolHint.placeEyebrowVentOnRoof.1h1tqxn\":[\"[Þļáçé éýéƀŕöŵ ṽéñţ öñ ŕööƒ ~~~~~~~]\"],\"editor.toolHint.placeFitting.1pmx3vn\":[\"[Þļáçé ƒîţţîñĝ ~~~~]\"],\"editor.toolHint.placeGutterOnRoofEave.llwzf9\":[\"[Þļáçé ĝûţţéŕ öñ ŕööƒ éáṽé ~~~~~~~]\"],\"editor.toolHint.placeItLockedTo45.16e4csk\":[\"[Þļáçé îţ (ļöçķéð ţö 45°) ~~~~~]\"],\"editor.toolHint.placeItem.teynf\":[\"[Þļáçé îţéɱ ~~~]\"],\"editor.toolHint.placeMeasurementPoint.bsatli\":[\"[Þļáçé ɱéášûŕéɱéñţ þöîñţ ~~~~~~~]\"],\"editor.toolHint.placeOnAFence.1dptstr\":[\"[Þļáçé öñ á ƒéñçé ~~~~]\"],\"editor.toolHint.placeRegister.1uebycd\":[\"[Þļáçé ŕéĝîšţéŕ ~~~~]\"],\"editor.toolHint.placeRidgeVentOnRoof.2tpd8r\":[\"[Þļáçé ŕîðĝé ṽéñţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeShelf.y4l3iw\":[\"[Þļáçé šĥéļƒ ~~~]\"],\"editor.toolHint.placeSkylightOnRoof.e215pe\":[\"[Þļáçé šķýļîĝĥţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeSolarPanelArrayOnRoof.kk11fn\":[\"[Þļáçé šöļáŕ þáñéļ áŕŕáý öñ ŕööƒ ~~~~~~~~]\"],\"editor.toolHint.placeSpawnPoint.205o25\":[\"[Þļáçé šþáŵñ þöîñţ ~~~~~]\"],\"editor.toolHint.placeStairs.zwxxu2\":[\"[Þļáçé šţáîŕš ~~~~]\"],\"editor.toolHint.placeTrap.1gxemn3\":[\"[Þļáçé ţŕáþ ~~~]\"],\"editor.toolHint.placeTurbineVentOnRoof.1iqeluf\":[\"[Þļáçé ţûŕƀîñé ṽéñţ öñ ŕööƒ ~~~~~~~]\"],\"editor.toolHint.placeUnit.8zkx4q\":[\"[Þļáçé ûñîţ ~~~]\"],\"editor.toolHint.placeWindowOnWall.1k3qnfb\":[\"[Þļáçé ŵîñðöŵ öñ ŵáļļ ~~~~~~]\"],\"editor.toolHint.placeWithoutTheCornerSnap.1nifqew\":[\"[Þļáçé ŵîţĥöûţ ţĥé çöŕñéŕ šñáþ ~~~~~~~~]\"],\"editor.toolHint.placement.13lcvts\":[\"[Þļáçéɱéñţ ~~~]\"],\"editor.toolHint.placementAuto.1caa52d\":[\"[Þļáçéɱéñţ: Åûţö ~~~~]\"],\"editor.toolHint.placementGround.1ruz145\":[\"[Þļáçéɱéñţ: Ĝŕöûñð ~~~~~]\"],\"editor.toolHint.placementRoof.renkw8\":[\"[Þļáçéɱéñţ: Ŕööƒ ~~~~]\"],\"editor.toolHint.placementSurfaceClickOrPressP.w56h19\":[\"[Þļáçéɱéñţ šûŕƒáçé - çļîçķ öŕ þŕéšš Þ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.toolHint.placementType.1mdpl60\":[\"[Þļáçéɱéñţ ţýþé ~~~~]\"],\"editor.toolHint.placementTypeClickOrPressI.10cgxh2\":[\"[Þļáçéɱéñţ ţýþé — çļîçķ öŕ þŕéšš Î ţö ţöĝĝļé ~~~~~~~~~~~]\"],\"editor.toolHint.removeLastPoint.2dmdcx\":[\"[Ŕéɱöṽé ļášţ þöîñţ ~~~~~]\"],\"editor.toolHint.removeLastWitness.1b6vvzw\":[\"[Ŕéɱöṽé ļášţ ŵîţñéšš ~~~~~~]\"],\"editor.toolHint.rotate.1thqa0a\":[\"[Ŕöţáţé ~~]\"],\"editor.toolHint.rotate45.9zq68u\":[\"[Ŕöţáţé ±45° ~~]\"],\"editor.toolHint.rotate45FloorCeiling.m9t57d\":[\"[Ŕöţáţé ±45° (ƒļööŕ / çéîļîñĝ) ~~~~~~]\"],\"editor.toolHint.rotateGhost15.rsa52c\":[\"[Ŕöţáţé ĝĥöšţ ±15° ~~~~]\"],\"editor.toolHint.rotateOrFlipTheRunSide.t5ior7\":[\"[Ŕöţáţé öŕ ƒļîþ ţĥé ŕûñ šîðé ~~~~~~~]\"],\"editor.toolHint.rotateRoofDirection90.tvbji2\":[\"[Ŕöţáţé ŕööƒ ðîŕéçţîöñ 90° ~~~~~~]\"],\"editor.toolHint.rotateSpawnPoint.1opcuu7\":[\"[Ŕöţáţé šþáŵñ þöîñţ ~~~~~]\"],\"editor.toolHint.roundRectangularOval.e4nh6x\":[\"[Ŕöûñð / ŕéçţáñĝûļáŕ / öṽáļ ~~~~~~]\"],\"editor.toolHint.setFenceStartEnd.1phbwsq\":[\"[Šéţ ƒéñçé šţáŕţ / éñð ~~~~~]\"],\"editor.toolHint.setOneCornerThenTheOpposite.8tsl49\":[\"[Šéţ öñé çöŕñéŕ, ţĥéñ ţĥé öþþöšîţé ~~~~~~~~~]\"],\"editor.toolHint.setRoofFootprint.p50n0o\":[\"[Šéţ ŕööƒ ƒööţþŕîñţ ~~~~~]\"],\"editor.toolHint.setWallStartEnd.1r8ubcx\":[\"[Šéţ ŵáļļ šţáŕţ / éñð ~~~~~]\"],\"editor.toolHint.slopeLevel.ftqp67\":[\"[Šļöþé / ļéṽéļ ~~~]\"],\"editor.toolHint.snapOntoTheRun.86yhmp\":[\"[Šñáþ öñţö ţĥé ŕûñ ~~~~~]\"],\"editor.toolHint.splitAtTheMarks.x5tpdd\":[\"[Šþļîţ áţ ţĥé ɱáŕķš ~~~~~]\"],\"editor.toolHint.startGridAxis.k92yza\":[\"[Šţáŕţ ĝŕîð áẋîš ~~~~]\"],\"editor.toolHint.startLineset.23q8dh\":[\"[Šţáŕţ ļîñéšéţ ~~~~]\"],\"editor.toolHint.startLiquidLine.1rlxsgd\":[\"[Šţáŕţ ļîǫûîð ļîñé ~~~~~]\"],\"editor.toolHint.startRun.r6fc5u\":[\"[Šţáŕţ ŕûñ ~~~]\"],\"editor.toolHint.startSegment.rolym6\":[\"[Šţáŕţ šéĝɱéñţ ~~~~]\"],\"editor.toolHint.stepBackOrCancel.zbfdkn\":[\"[Šţéþ ƀáçķ öŕ çáñçéļ ~~~~~]\"],\"editor.toolHint.style.nf3vcm\":[\"[Šţýļé ~~]\"],\"editor.toolHint.styleBarn.k9n1x\":[\"[Šţýļé: Ɓáŕñ ~~~]\"],\"editor.toolHint.styleCasement.ziklec\":[\"[Šţýļé: Çášéɱéñţ ~~~~]\"],\"editor.toolHint.styleCraftsman.52e6a9\":[\"[Šţýļé: Çŕáƒţšɱáñ ~~~~~]\"],\"editor.toolHint.styleDoubleHung.1lg8pkg\":[\"[Šţýļé: Ðöûƀļé-ĥûñĝ ~~~~~]\"],\"editor.toolHint.styleFrench.1ue3j64\":[\"[Šţýļé: Ƒŕéñçĥ ~~~~]\"],\"editor.toolHint.styleGlass.qudnb4\":[\"[Šţýļé: Ĝļášš ~~~]\"],\"editor.toolHint.styleGrid.1vuq4po\":[\"[Šţýļé: Ĝŕîð ~~~]\"],\"editor.toolHint.styleHalfLouvered.13b1few\":[\"[Šţýļé: Ĥáļƒ-ļöûṽéŕéð ~~~~~~]\"],\"editor.toolHint.styleHorizontalBands.12ethxk\":[\"[Šţýļé: Ĥöŕîžöñţáļ ƀáñðš ~~~~~~]\"],\"editor.toolHint.styleModern.1fh8hhn\":[\"[Šţýļé: Ṁöðéŕñ ~~~~]\"],\"editor.toolHint.stylePanel.922jze\":[\"[Šţýļé: Þáñéļ ~~~]\"],\"editor.toolHint.stylePaneledGlass.17a17en\":[\"[Šţýļé: Þáñéļéð ĝļášš ~~~~~~]\"],\"editor.toolHint.styleShaker.49z17k\":[\"[Šţýļé: Šĥáķéŕ ~~~~]\"],\"editor.toolHint.styleSingle.6f3cm0\":[\"[Šţýļé: Šîñĝļé ~~~~]\"],\"editor.toolHint.styleSixPanel.u49laj\":[\"[Šţýļé: Šîẋ-þáñéļ ~~~~]\"],\"editor.toolHint.styleSliding.q81s0i\":[\"[Šţýļé: Šļîðîñĝ ~~~~]\"],\"editor.toolHint.styleTallGrid.1eotg3x\":[\"[Šţýļé: Ţáļļ ĝŕîð ~~~~]\"],\"editor.toolHint.styleTransom.kb9bh6\":[\"[Šţýļé: Ţŕáñšöɱ ~~~~]\"],\"editor.toolHint.styleTripleHung.pxnqi3\":[\"[Šţýļé: Ţŕîþļé-ĥûñĝ ~~~~~]\"],\"editor.toolHint.styleWideGrid.12n27et\":[\"[Šţýļé: Ŵîðé ĝŕîð ~~~~]\"],\"editor.toolHint.switchRotationAxisYXZ.15lohm6\":[\"[Šŵîţçĥ ŕöţáţîöñ áẋîš (Ý → Ẋ → Ž) ~~~~~~~]\"],\"editor.toolHint.theWallsMeetAtTooSharp.kh3wi3\":[\"[Ţĥé ŵáļļš ɱééţ áţ ţöö šĥáŕþ öŕ ţöö ƒļáţ áñ áñĝļé ~~~~~~~~~~~~]\"],\"editor.toolHint.theWindowWaitingThereIsTaller.1tqwez4\":[\"[Ţĥé ŵîñðöŵ ŵáîţîñĝ ţĥéŕé îš ţáļļéŕ ţĥáñ ţĥîš ŵáļļ ~~~~~~~~~~~~~]\"],\"editor.toolHint.threeOrMoreWallsMeetHere.rgifif\":[\"[Ţĥŕéé öŕ ɱöŕé ŵáļļš ɱééţ ĥéŕé ~~~~~~~~]\"],\"editor.toolHint.traceCeilingOutline.1b639wv\":[\"[Ţŕáçé çéîļîñĝ öûţļîñé ~~~~~~]\"],\"editor.toolHint.traceSlabOutline.z0j2lc\":[\"[Ţŕáçé šļáƀ öûţļîñé ~~~~~]\"],\"editor.toolHint.type.1m2zofh\":[\"[Ţýþé ~~]\"],\"editor.toolHint.typeAwning.1cj59al\":[\"[Ţýþé: Åŵñîñĝ ~~~]\"],\"editor.toolHint.typeBarn.sbnygq\":[\"[Ţýþé: Ɓáŕñ ~~~]\"],\"editor.toolHint.typeBay.1200hc1\":[\"[Ţýþé: Ɓáý ~~~]\"],\"editor.toolHint.typeBow.14s2t9p\":[\"[Ţýþé: Ɓöŵ ~~~]\"],\"editor.toolHint.typeCabinet.1r68je5\":[\"[Ţýþé: Çáƀîñéţ ~~~~]\"],\"editor.toolHint.typeCasement.176uo9j\":[\"[Ţýþé: Çášéɱéñţ ~~~~]\"],\"editor.toolHint.typeDouble.af7w4i\":[\"[Ţýþé: Ðöûƀļé ~~~]\"],\"editor.toolHint.typeDoubleHung.t482fu\":[\"[Ţýþé: Ðöûƀļé Ĥûñĝ ~~~~~]\"],\"editor.toolHint.typeFixed.v1cjez\":[\"[Ţýþé: Ƒîẋéð ~~~]\"],\"editor.toolHint.typeFolding.sxxyng\":[\"[Ţýþé: Ƒöļðîñĝ ~~~~]\"],\"editor.toolHint.typeFrench.1y57z1b\":[\"[Ţýþé: Ƒŕéñçĥ ~~~]\"],\"editor.toolHint.typeHinged.1xrcfju\":[\"[Ţýþé: Ĥîñĝéð ~~~]\"],\"editor.toolHint.typeIsland.ufr3ce\":[\"[Ţýþé: Κļáñð ~~~]\"],\"editor.toolHint.typeLouvered.oxl1cz\":[\"[Ţýþé: Ļöûṽéŕéð ~~~~]\"],\"editor.toolHint.typePocket.hc65x9\":[\"[Ţýþé: Þöçķéţ ~~~]\"],\"editor.toolHint.typeSingleHung.p53pyl\":[\"[Ţýþé: Šîñĝļé Ĥûñĝ ~~~~~]\"],\"editor.toolHint.typeSliding.nwmr3f\":[\"[Ţýþé: Šļîðîñĝ ~~~~]\"],\"editor.toolHint.verticalStackClickToPlace.ijcn4q\":[\"[Ṽéŕţîçáļ šţáçķ ↕, çļîçķ ţö þļáçé ~~~~~~~~]\"],\"editor.toolHint.wasteVent.1hvi3vj\":[\"[Ŵášţé / ṽéñţ ~~~]\"],\"editor.toolHint.windowStyleClickOrPressL.ah7qm9\":[\"[Ŵîñðöŵ šţýļé — çļîçķ öŕ þŕéšš Ļ ţö çýçļé ~~~~~~~~~~]\"],\"editor.toolHint.windowTypeClickOrPressO.wv4x35\":[\"[Ŵîñðöŵ ţýþé — çļîçķ öŕ þŕéšš Ö ţö çýçļé ~~~~~~~~~]\"],\"editor.views.plugins\":[\"[Þļûĝîñš ~~~]\"],\"editor.views.view2d\":[\"[2Ð ~]\"],\"editor.views.view3d\":[\"[3Ð ~]\"],\"editor.views.viewBar.auto\":[\"[Åûţö ~~]\"],\"editor.views.viewBar.browsePlugins\":[\"[Ɓŕöŵšé þļûĝîñš ~~~~]\"],\"editor.views.viewBar.closeLabel\":[\"[Çļöšé \",[\"label\"],\" ~~]\"],\"editor.views.viewBar.closeSplit\":[\"[Çļöšé šþļîţ (\\\\) ~~~]\"],\"editor.views.viewBar.ground\":[\"[Ĝŕöûñð ~~]\"],\"editor.views.viewBar.groundSolid\":[\"[\",[\"standing\",\"select\",{\"partly\":[\"Þáŕţļý ƀéļöŵ ĝŕáðé · ĝŕöûñð šöļîð\"],\"below\":[\"Ɓéļöŵ ĝŕáðé · ĝŕöûñð šöļîð\"],\"other\":[\"Ĝŕöûñð šöļîð\"]}],\" ~~~~~~~~~~~~~~~~~~]\"],\"editor.views.viewBar.groundVeiled\":[\"[\",[\"standing\",\"select\",{\"partly\":[\"Þáŕţļý ƀéļöŵ ĝŕáðé · ĝŕöûñð ṽéîļéð\"],\"below\":[\"Ɓéļöŵ ĝŕáðé · ĝŕöûñð ṽéîļéð\"],\"other\":[\"Ĝŕöûñð ṽéîļéð\"]}],\" ~~~~~~~~~~~~~~~~~~~]\"],\"editor.views.viewBar.keepTheGroundSolid\":[\"[Ķééþ ţĥé ĝŕöûñð šöļîð ~~~~~~]\"],\"editor.views.viewBar.moreViews\":[\"[Ṁöŕé ṽîéŵš ~~~]\"],\"editor.views.viewBar.paneViews\":[\"[Þáñé \",[\"pane\"],\" ṽîéŵš ~~~]\"],\"editor.views.viewBar.pinLabel\":[\"[Þîñ \",[\"label\"],\" ~]\"],\"editor.views.viewBar.pinToTheViewBar\":[\"[Þîñ ţö ţĥé ṽîéŵ ƀáŕ ~~~~~]\"],\"editor.views.viewBar.solid\":[\"[Šöļîð ~~]\"],\"editor.views.viewBar.split\":[\"[Šþļîţ (\\\\) ~~]\"],\"editor.views.viewBar.split2\":[\"[Šþļîţ ~~]\"],\"editor.views.viewBar.swapPanes\":[\"[Šŵáþ þáñéš ~~~]\"],\"editor.views.viewBar.unpinFromTheViewBar\":[\"[Ûñþîñ ƒŕöɱ ţĥé ṽîéŵ ƀáŕ ~~~~~~]\"],\"editor.views.viewBar.unpinLabel\":[\"[Ûñþîñ \",[\"label\"],\" ~~]\"],\"editor.views.viewBar.veilTheGroundOverALevel\":[\"[Ṽéîļ ţĥé ĝŕöûñð öṽéŕ á ļéṽéļ ƀéļöŵ ĝŕáðé ~~~~~~~~~~]\"],\"editor.views.viewBar.views\":[\"[Ṽîéŵš ~~]\"],\"editor.youCanRetryTheSceneOr\":[\"[Ýöû çáñ ŕéţŕý ţĥé šçéñé öŕ ŕéţûŕñ ĥöɱé ŵîţĥöûţ ŕéļöáðîñĝ ţĥé ŵĥöļé áþþ šĥéļļ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.block.description\":[\"[Å ţöþöļöĝý-ƀáçķéð šöļîð éðîţéð ðîŕéçţļý îñ ţĥé çáñṽáš. ~~~~~~~~~~~~~~]\"],\"node.block.label\":[\"[Ɓļöçķ ~~]\"],\"node.boxVent.description\":[\"[Šɱáļļ ļöûṽéŕéð éẋĥáûšţ ṽéñţ ţĥáţ šîţš öñ á ŕööƒ šļöþé. ~~~~~~~~~~~~~~]\"],\"node.boxVent.label\":[\"[Ɓöẋ Ṽéñţ ~~~]\"],\"node.building.description\":[\"[Å ƀûîļðîñĝ çöñţáîñéŕ ĥöļðîñĝ öñé öŕ ɱöŕé ļéṽéļš. ~~~~~~~~~~~~]\"],\"node.building.label\":[\"[Ɓûîļðîñĝ ~~~]\"],\"node.cabinet.description\":[\"[Å çöñƒîĝûŕáƀļé þáŕáɱéţŕîç ƀášé çáƀîñéţ. ~~~~~~~~~~~]\"],\"node.cabinet.label\":[\"[Ṁöðûļáŕ Çáƀîñéţ ~~~~~]\"],\"node.cabinetModule.description\":[\"[Åñ éðîţáƀļé ɱöðûļé îñšîðé á ɱöðûļáŕ çáƀîñéţ ŕûñ. ~~~~~~~~~~~~]\"],\"node.cabinetModule.label\":[\"[Çáƀîñéţ Ṁöðûļé ~~~~]\"],\"node.ceiling.description\":[\"[Å þöļýĝöñ-ƀöûñðéð çéîļîñĝ šûŕƒáçé ţĥáţ ĥöšţš çéîļîñĝ-ɱöûñţéð îţéɱš. ~~~~~~~~~~~~~~~~~~]\"],\"node.ceiling.label\":[\"[Çéîļîñĝ ~~~]\"],\"node.ceiling.panel.addHole\":[\"[Åðð Ĥöļé ~~~]\"],\"node.ceiling.panel.area\":[\"[Åŕéá ~~]\"],\"node.ceiling.panel.auto\":[\"[Åûţö ~~]\"],\"node.ceiling.panel.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"node.ceiling.panel.customHeight\":[\"[Çûšţöɱ ĥéîĝĥţ ~~~~]\"],\"node.ceiling.panel.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"node.ceiling.panel.done\":[\"[Ðöñé ~~]\"],\"node.ceiling.panel.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"node.ceiling.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.ceiling.panel.high30m\":[\"[Ĥîĝĥ (3.0ɱ) ~~]\"],\"node.ceiling.panel.high90\":[\"[Ĥîĝĥ (9'0\\\") ~~]\"],\"node.ceiling.panel.holes\":[\"[Ĥöļéš ~~]\"],\"node.ceiling.panel.info\":[\"[Îñƒö ~~]\"],\"node.ceiling.panel.limitedByLevel\":[\"[Ļîɱîţéð ƀý ţĥé ļéṽéļ ţö \",[\"height\"],\" — ŕáîšé ţĥé ļéṽéļ ĥéîĝĥţ ƒöŕ á ţáļļéŕ çéîļîñĝ. ~~~~~~~~~~~~~~~~~]\"],\"node.ceiling.panel.low24m\":[\"[Ļöŵ (2.4ɱ) ~~]\"],\"node.ceiling.panel.low80\":[\"[Ļöŵ (8'0\\\") ~]\"],\"node.ceiling.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.ceiling.panel.noHoles\":[\"[Ñö ĥöļéš ~~~]\"],\"node.ceiling.panel.standard25m\":[\"[Šţáñðáŕð (2.5ɱ) ~~~]\"],\"node.ceiling.panel.standard86\":[\"[Šţáñðáŕð (8'6\\\") ~~~]\"],\"node.ceiling.panel.tallerThanLevel\":[\"[Ţáļļéŕ ţĥáñ ţĥîš ļéṽéļ (\",[\"available\"],\" áṽáîļáƀļé). Ŕáîšé ţĥé ļéṽéļ ĥéîĝĥţ ƒîŕšţ. ~~~~~~~~~~~~~~~~]\"],\"node.chimney.description\":[\"[Ṽéŕţîçáļ ɱášöñŕý šţáçķ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~]\"],\"node.chimney.label\":[\"[Çĥîɱñéý ~~~]\"],\"node.column.description\":[\"[Å þáŕáɱéţŕîç çöļûɱñ ŵîţĥ çöñƒîĝûŕáƀļé çŕöšš-šéçţîöñ, ƀášé, áñð çáþîţáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.column.label\":[\"[Çöļûɱñ ~~]\"],\"node.constructionDimension.description\":[\"[Åššöçîáţîṽé ļîñéáŕ, çûŕṽéð, çîŕçûļáŕ, áñĝûļáŕ, öŕ çööŕðîñáţé þļáñ ðîɱéñšîöñ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.constructionDimension.label\":[\"[Çöñšţŕûçţîöñ Ðîɱéñšîöñ ~~~~~~~]\"],\"node.cornerRadius.bottomLeft\":[\"[Ɓöţţöɱ Ļéƒţ ~~~]\"],\"node.cornerRadius.bottomRight\":[\"[Ɓöţţöɱ Ŕîĝĥţ ~~~~]\"],\"node.cornerRadius.topLeft\":[\"[Ţöþ Ļéƒţ ~~~]\"],\"node.cornerRadius.topRight\":[\"[Ţöþ Ŕîĝĥţ ~~~]\"],\"node.cupola.description\":[\"[Ļöûṽéŕéð ŕööƒ ļáñţéŕñ ŵîţĥ á ðöɱé öŕ þýŕáɱîð çáþ áñð öþţîöñáļ ƒîñîáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.cupola.label\":[\"[Çûþöļá ~~]\"],\"node.cutout.autoElevator\":[\"[Åûţö éļéṽáţöŕ çûţöûţ ~~~~~~]\"],\"node.cutout.autoStair\":[\"[Åûţö šţáîŕ çûţöûţ ~~~~~]\"],\"node.cutout.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.cutout.room\":[\"[Ŕööɱ çûţöûţ ~~~]\"],\"node.door.description\":[\"[Å ðööŕ çûţ îñţö á ŵáļļ. Åñîɱáţéð öþéñ/çļöšé šţáţé. ~~~~~~~~~~~~]\"],\"node.door.label\":[\"[Ðööŕ ~~]\"],\"node.door.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.door.panel.addSegment\":[\"[+ Åðð Šéĝɱéñţ ~~~]\"],\"node.door.panel.all\":[\"[Åļļ ~]\"],\"node.door.panel.arch\":[\"[Åŕçĥ ~~]\"],\"node.door.panel.archHeight\":[\"[Åŕçĥ Ĥéîĝĥţ ~~~]\"],\"node.door.panel.barHeight\":[\"[Ɓáŕ Ĥéîĝĥţ ~~~]\"],\"node.door.panel.columns\":[\"[Çöļûɱñš ~~~]\"],\"node.door.panel.contentPadding\":[\"[Çöñţéñţ Þáððîñĝ ~~~~~]\"],\"node.door.panel.cornerRadius\":[\"[Çöŕñéŕ Ŕáðîûš ~~~~]\"],\"node.door.panel.customTheSegmentsMatchNoStyle\":[\"[Çûšţöɱ: ţĥé šéĝɱéñţš ɱáţçĥ ñö šţýļé. ~~~~~~~~~]\"],\"node.door.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.door.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.door.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.door.panel.direction\":[\"[Ðîŕéçţîöñ ~~~]\"],\"node.door.panel.divider\":[\"[Ðîṽîðéŕ ~~~]\"],\"node.door.panel.door\":[\"[Ðööŕ ~~]\"],\"node.door.panel.doorCloser\":[\"[Ðööŕ Çļöšéŕ ~~~]\"],\"node.door.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.door.panel.empty\":[\"[Éɱþţý ~~]\"],\"node.door.panel.enableHandle\":[\"[Éñáƀļé Ĥáñðļé ~~~~]\"],\"node.door.panel.enableThreshold\":[\"[Éñáƀļé Ţĥŕéšĥöļð ~~~~~]\"],\"node.door.panel.flipSide\":[\"[Ƒļîþ Šîðé ~~~]\"],\"node.door.panel.fold\":[\"[Ƒöļð ~~]\"],\"node.door.panel.frame\":[\"[Ƒŕáɱé ~~]\"],\"node.door.panel.garage\":[\"[Ĝáŕáĝé ~~]\"],\"node.door.panel.glass\":[\"[Ĝļášš ~~]\"],\"node.door.panel.handle\":[\"[Ĥáñðļé ~~]\"],\"node.door.panel.handleSide\":[\"[Ĥáñðļé Šîðé ~~~]\"],\"node.door.panel.hardware\":[\"[Ĥáŕðŵáŕé ~~~]\"],\"node.door.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.door.panel.hingesSide\":[\"[Ĥîñĝéš Šîðé ~~~]\"],\"node.door.panel.horizontal\":[\"[Ĥöŕîžöñţáļ ~~~]\"],\"node.door.panel.individual\":[\"[Îñðîṽîðûáļ ~~~]\"],\"node.door.panel.inset\":[\"[Îñšéţ ~~]\"],\"node.door.panel.inward\":[\"[Îñŵáŕð ~~]\"],\"node.door.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.door.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.door.panel.open\":[\"[Öþéñ ~~]\"],\"node.door.panel.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.door.panel.openingShape\":[\"[Öþéñîñĝ Šĥáþé ~~~~]\"],\"node.door.panel.outward\":[\"[Öûţŵáŕð ~~~]\"],\"node.door.panel.panel\":[\"[Þáñéļ ~~]\"],\"node.door.panel.panels\":[\"[Þáñéļš ~~]\"],\"node.door.panel.panicBar\":[\"[Þáñîç Ɓáŕ ~~~]\"],\"node.door.panel.pocket\":[\"[Þöçķéţ ~~]\"],\"node.door.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.door.panel.rail\":[\"[Ŕáîļ ~~]\"],\"node.door.panel.rect\":[\"[Ŕéçţ ~~]\"],\"node.door.panel.remove\":[\"[- Ŕéɱöṽé ~~]\"],\"node.door.panel.revealRadius\":[\"[Ŕéṽéáļ Ŕáðîûš ~~~~]\"],\"node.door.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.door.panel.rounded\":[\"[Ŕöûñðéð ~~~]\"],\"node.door.panel.segments\":[\"[Šéĝɱéñţš ~~~]\"],\"node.door.panel.sizeIsLimitedToTheWall\":[\"[Šîžé îš ļîɱîţéð ţö ţĥé ŵáļļ, îñçļûðîñĝ çļéáŕáñçé ƒöŕ ţĥé öþéñîñĝ ƒŕáɱé. ~~~~~~~~~~~~~~~~~~]\"],\"node.door.panel.slide\":[\"[Šļîðé ~~]\"],\"node.door.panel.style\":[\"[Šţýļé ~~]\"],\"node.door.panel.swing\":[\"[Šŵîñĝ ~~]\"],\"node.door.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.door.panel.threshold\":[\"[Ţĥŕéšĥöļð ~~~]\"],\"node.door.panel.topShape\":[\"[Ţöþ Šĥáþé ~~~]\"],\"node.door.panel.type\":[\"[Ţýþé ~~]\"],\"node.door.panel.vertical\":[\"[Ṽéŕţîçáļ ~~~]\"],\"node.door.panel.wall\":[\"[ŵáļļ ~~]\"],\"node.door.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.door.type.barn\":[\"[Ɓáŕñ ~~]\"],\"node.door.type.double\":[\"[Ðöûƀļé ~~]\"],\"node.door.type.folding\":[\"[Ƒöļðîñĝ ~~~]\"],\"node.door.type.french\":[\"[Ƒŕéñçĥ ~~]\"],\"node.door.type.garageRollup\":[\"[Ŕöļļ-ûþ ~~]\"],\"node.door.type.garageSectional\":[\"[Šéçţîöñáļ ~~~]\"],\"node.door.type.garageTiltup\":[\"[Ţîļţ-ûþ ~~]\"],\"node.door.type.hinged\":[\"[Ĥîñĝéð ~~]\"],\"node.door.type.pocket\":[\"[Þöçķéţ ~~]\"],\"node.door.type.sliding\":[\"[Šļîðîñĝ ~~~]\"],\"node.dormer.description\":[\"[Ĥöûšé-šĥáþéð þŕöţŕûšîöñ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~]\"],\"node.dormer.label\":[\"[Ðöŕɱéŕ ~~]\"],\"node.downspout.description\":[\"[Ṽéŕţîçáļ ðŕöþ þîþé ƒŕöɱ á ĝûţţéŕ öûţļéţ ţö ţĥé ĝŕöûñð. ~~~~~~~~~~~~~~]\"],\"node.downspout.label\":[\"[Ðöŵñšþöûţ ~~~]\"],\"node.ductFitting.description\":[\"[Éļƀöŵ, ţéé, ŕéðûçéŕ, öŕ šǫûáŕé-ţö-ŕöûñð ţŕáñšîţîöñ çöññéçţîñĝ ðûçţ ŕûñš. ~~~~~~~~~~~~~~~~~~]\"],\"node.ductFitting.label\":[\"[Ðûçţ Ƒîţţîñĝ ~~~~]\"],\"node.ductSegment.description\":[\"[ĤṼÅÇ ðûçţ ŕûñ — þöļýļîñé öƒ ŕöûñð, ŕéçţ, öŕ ƒļáţ-öṽáļ šéçţîöñš. ~~~~~~~~~~~~~~~]\"],\"node.ductSegment.label\":[\"[Ðûçţ ~~]\"],\"node.ductTerminal.description\":[\"[Ðûçţ ţéŕɱîñáļ — šûþþļý ŕéĝîšţéŕ, çéîļîñĝ ðûšéŕ, öŕ ŕéţûŕñ ĝŕîļļé. Ðûçţ ŕûñš éñð áţ îţš çöļļáŕ. ~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.ductTerminal.label\":[\"[Ŕéĝîšţéŕ ~~~]\"],\"node.elevator.description\":[\"[Å ɱûļţî-ļéṽéļ éļéṽáţöŕ šĥáƒţ ŵîţĥ çöñƒîĝûŕáƀļé öþéñîñĝš þéŕ ļéṽéļ. ~~~~~~~~~~~~~~~~~]\"],\"node.elevator.label\":[\"[Éļéṽáţöŕ ~~~]\"],\"node.eyebrowVent.description\":[\"[Ļöŵ çûŕṽéð ļéñš-šĥáþéð ŕööƒ ṽéñţ ŵîţĥ á ļöûṽéŕéð ƒŕöñţ. ~~~~~~~~~~~~~~]\"],\"node.eyebrowVent.label\":[\"[Éýéƀŕöŵ Ṽéñţ ~~~~]\"],\"node.fence.description\":[\"[Å šţŕáîĝĥţ öŕ çûŕṽéð ƒéñçé šéĝɱéñţ ŵîţĥ çöñƒîĝûŕáƀļé þöšţš áñð îñƒîļļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.fence.label\":[\"[Ƒéñçé ~~]\"],\"node.fenceGate.description\":[\"[Å ĝáţé ĥöšţéð ƀý á ƒéñçé. ~~~~~~]\"],\"node.fenceGate.label\":[\"[Ĝáţé ~~]\"],\"node.fenceOpening.description\":[\"[Åñ îñţéñţîöñáļ öþéñîñĝ îñ á ƒéñçé. ~~~~~~~~~]\"],\"node.fenceOpening.label\":[\"[Öþéñ Þáššáĝé ~~~~]\"],\"node.floorOpening.label\":[\"[Ƒļööŕ öþéñîñĝ ~~~~]\"],\"node.guide.description\":[\"[Å ɱéášûŕéɱéñţ / ŕéƒéŕéñçé áññöţáţîöñ (ļîñéáŕ, áŕéá, öŕ áŕç). ~~~~~~~~~~~~~~]\"],\"node.guide.label\":[\"[Ĝûîðé ~~]\"],\"node.gutter.description\":[\"[Ŕáîñ-ŵáţéŕ çĥáññéļ ŕûññîñĝ áļöñĝ ţĥé éáṽé öƒ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~~~~~]\"],\"node.gutter.label\":[\"[Ĝûţţéŕ ~~]\"],\"node.hole.manual\":[\"[Ṁáñûáļ ~~]\"],\"node.holeEditing\":[\"[Ĥöļé \",[\"number\"],\" (Éðîţîñĝ) ~~~~]\"],\"node.holeNumber\":[\"[Ĥöļé \",[\"number\"],\" ~~]\"],\"node.holeSummary\":[\"[\",[\"area\"],\" ɱ² · \",[\"count\",\"plural\",{\"one\":[\"#\",\" þţ\"],\"other\":[\"#\",\" þţš\"]}],\" · \",[\"source\"],\" ~~]\"],\"node.hvacEquipment.description\":[\"[Ƒûŕñáçé, áîŕ ĥáñðļéŕ, öŕ çöñðéñšéŕ — ðûçţ ŕûñš çöññéçţ ţö îţš šûþþļý/ŕéţûŕñ çöļļáŕš. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.hvacEquipment.label\":[\"[ĤṼÅÇ Ûñîţ ~~~]\"],\"node.importedMesh.description\":[\"[Ĝéöɱéţŕý þŕéšéŕṽéð ƒŕöɱ áñ îɱþöŕţéð ɱöðéļ ŵĥéñ ñö ñáţîṽé Þášçáļ šĥáþé éẋîšţš. ~~~~~~~~~~~~~~~~~~~~]\"],\"node.importedMesh.label\":[\"[Îɱþöŕţéð Ṁéšĥ ~~~~]\"],\"node.item.description\":[\"[Å çáţáļöĝ-ƀáçķéð îţéɱ (ƒûŕñîţûŕé, ƒîẋţûŕéš, ðéçöŕáţîöñš). ~~~~~~~~~~~~~~]\"],\"node.item.label\":[\"[Îţéɱ ~~]\"],\"node.item.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.item.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.item.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.item.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.item.panel.info\":[\"[Îñƒö ~~]\"],\"node.item.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.item.panel.pos\":[\"[þöš ~]\"],\"node.item.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.item.panel.rot\":[\"[ŕöţ ~]\"],\"node.item.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.item.panel.scale\":[\"[Šçáļé ~~]\"],\"node.item.panel.scale2\":[\"[šçáļé ~~]\"],\"node.item.panel.uniformScale\":[\"[Ûñîƒöŕɱ Šçáļé ~~~~]\"],\"node.item.panel.xyz\":[\"[ẊÝŽ ~]\"],\"node.leanToExtension.description\":[\"[Åñ áţţáçĥéð ɱöñö-þîţçĥ öŕ ƒŕééšţáñðîñĝ ɱöñö, ĝáƀļé, öŕ ƀûţţéŕƒļý çáñöþý ŵîţĥ ɱáñáĝéð šţŕûçţûŕé áñð ðŕáîñáĝé. ~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.leanToExtension.label\":[\"[Çáñöþý ~~]\"],\"node.level.description\":[\"[Å šîñĝļé ƒļööŕ öƒ á ƀûîļðîñĝ, ĥöļðîñĝ ŵáļļš / šļáƀš / çéîļîñĝš / îţéɱš. ~~~~~~~~~~~~~~~~]\"],\"node.level.label\":[\"[Ļéṽéļ ~~]\"],\"node.lineset.description\":[\"[Ŕéƒŕîĝéŕáñţ ļîñéšéţ — çöþþéŕ šûçţîöñ + ļîǫûîð þáîŕ ĵöîñîñĝ á çöñðéñšéŕ ţö ţĥé îñðööŕ çöîļ. ~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.lineset.label\":[\"[Ļîñéšéţ ~~~]\"],\"node.liquidLine.description\":[\"[Šţáñðáļöñé ŕéƒŕîĝéŕáñţ ļîǫûîð ļîñé — á ţĥîñ ƀáŕé-çöþþéŕ ŕûñ; Ƒöļļöŵ ɱöðé ţŕáçéš áñ éẋîšţîñĝ ļîñéšéţ. ~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.liquidLine.label\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"node.measurement.description\":[\"[Å þéŕšîšţéñţ ðîšţáñçé, áñĝļé, áŕéá, þéŕîɱéţéŕ, öŕ ṽöļûɱé áññöţáţîöñ. ~~~~~~~~~~~~~~~~~]\"],\"node.measurement.label\":[\"[Ṁéášûŕéɱéñţ ~~~~]\"],\"node.numberedName\":[[\"kind\"],\" \",[\"number\"]],\"node.panel.currently\":[\"[Çûŕŕéñţļý \",[\"value\"],\" ~~~]\"],\"node.pipeFitting.description\":[\"[ÐŴṼ ĵöîñţ — éļƀöŵ ƀéñð, 45° ŵýé, öŕ šáñîţáŕý ţéé. ~~~~~~~~~~]\"],\"node.pipeFitting.label\":[\"[Þîþé Ƒîţţîñĝ ~~~~]\"],\"node.pipeSegment.description\":[\"[Ðŕáîñ / ŵášţé / ṽéñţ þîþé ŕûñ — ðŕáŵ ļéṽéļ öŕ ţöĝĝļé á ¼″ þéŕ ƒööţ ƒáļļ ŵîţĥ Š. ~~~~~~~~~~~~~~~~~]\"],\"node.pipeSegment.label\":[\"[ÐŴṼ Þîþé ~~~]\"],\"node.pipeTrap.description\":[\"[ÐŴṼ Þ-ţŕáþ — ŵáţéŕ šéáļ öñ ţĥé ŵášţé ļîñé. Ţĥé ţŕáþ áŕɱ ŕûñš ţö ţĥé ṽéñţ. ~~~~~~~~~~~~~~~~~]\"],\"node.pipeTrap.label\":[\"[Ţŕáþ ~~]\"],\"node.proceduralItem.description\":[\"[Éẋþéŕîɱéñţáļ éðîţáƀļé ŕéçîþé ~~~~~~~~]\"],\"node.proceduralItem.label\":[\"[Þŕöçéðûŕáļ îţéɱ ~~~~~]\"],\"node.ridgeVent.description\":[\"[Ṽéñţîļáţîöñ šţŕîþ ŕûññîñĝ áļöñĝ ţĥé ŕîðĝé öƒ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~~~~~]\"],\"node.ridgeVent.label\":[\"[Ŕîðĝé Ṽéñţ ~~~]\"],\"node.roof.barrelPanel.archBays\":[\"[Åŕçĥ ƀáýš ~~~]\"],\"node.roof.barrelPanel.barrelArch\":[\"[Ɓáŕŕéļ áŕçĥ ~~~]\"],\"node.roof.barrelPanel.flatPanesFollowACircularArch\":[\"[Ƒļáţ þáñéš ƒöļļöŵ á çîŕçûļáŕ áŕçĥ. Ŕîšé îš ɱéášûŕéð ƒŕöɱ ţĥé éáṽéš. ~~~~~~~~~~~~~~~~~]\"],\"node.roof.barrelPanel.rise\":[\"[Ŕîšé ~~]\"],\"node.roof.description\":[\"[Å þîţçĥéð / ĥîþ / ĝáƀļé ŕööƒ çöɱþöšéð öƒ öñé öŕ ɱöŕé šéĝɱéñţš. ~~~~~~~~~~~~~~~]\"],\"node.roof.glazing.face.archBay\":[\"[Åŕçĥ ƀáý \",[\"number\"],\" ~~~]\"],\"node.roof.glazing.face.back\":[\"[Ɓáçķ šļöþé ~~~]\"],\"node.roof.glazing.face.endLeft\":[\"[Ļéƒţ éñð ~~~]\"],\"node.roof.glazing.face.endRight\":[\"[Ŕîĝĥţ éñð ~~~]\"],\"node.roof.glazing.face.front\":[\"[Ƒŕöñţ šļöþé ~~~]\"],\"node.roof.glazing.face.slope\":[\"[Šĥéð šļöþé ~~~]\"],\"node.roof.glazingPanel.changesApplyToAllLengthRoof\":[\"[Çĥáñĝéš áþþļý ţö áļļ \",[\"length\"],\" ŕööƒ šéĝɱéñţš. ~~~~~~~~~]\"],\"node.roof.glazingPanel.chooseOneRoofSystemToEdit\":[\"[Çĥööšé öñé ŕööƒ šýšţéɱ ţö éðîţ šéţţîñĝš ƒöŕ áļļ šéļéçţéð šéĝɱéñţš. ~~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.closeTheRoofEnds\":[\"[Çļöšé ţĥé ŕööƒ éñðš ~~~~~]\"],\"node.roof.glazingPanel.defaultPanelInfill\":[\"[Ðéƒáûļţ þáñéļ îñƒîļļ ~~~~~~]\"],\"node.roof.glazingPanel.dividesEachRoofFaceIntoColumns\":[\"[Ðîṽîðéš éáçĥ ŕööƒ ƒáçé îñţö çöļûɱñš. ~~~~~~~~~]\"],\"node.roof.glazingPanel.dividesTheLengthOfEachArch\":[\"[Ðîṽîðéš ţĥé ļéñĝţĥ öƒ éáçĥ áŕçĥ ƀáý îñţö çöļûɱñš. ~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.endInfillFillsTheSpaceAbove\":[\"[Éñð îñƒîļļ ƒîļļš ţĥé šþáçé áƀöṽé ţĥé ŵáļļš. Éðîţ ŕööɱ ŵáļļš áñð çéîļîñĝš šéþáŕáţéļý. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.frameColor\":[\"[Ƒŕáɱé çöļöŕ ~~~]\"],\"node.roof.glazingPanel.frameDepth\":[\"[Ƒŕáɱé ðéþţĥ ~~~]\"],\"node.roof.glazingPanel.frameWidth\":[\"[Ƒŕáɱé ŵîðţĥ ~~~]\"],\"node.roof.glazingPanel.framing\":[\"[Ƒŕáɱîñĝ ~~~]\"],\"node.roof.glazingPanel.glass\":[\"[Ĝļášš ~~]\"],\"node.roof.glazingPanel.glassTint\":[\"[Ĝļášš ţîñţ ~~~]\"],\"node.roof.glazingPanel.glazed\":[\"[Ĝļážéð ~~]\"],\"node.roof.glazingPanel.glazingIsAvailableForGableStraight\":[\"[Ĝļážîñĝ îš áṽáîļáƀļé ƒöŕ ĝáƀļé, šţŕáîĝĥţ šĥéð, áñð ƀáŕŕéļ ŕööƒš. ~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.gridAcrossTheRoof\":[\"[Ĝŕîð áçŕöšš ţĥé ŕööƒ ~~~~~~]\"],\"node.roof.glazingPanel.gridAlongTheLength\":[\"[Ĝŕîð áļöñĝ ţĥé ļéñĝţĥ ~~~~~~]\"],\"node.roof.glazingPanel.gridAlongTheSlope\":[\"[Ĝŕîð áļöñĝ ţĥé šļöþé ~~~~~~]\"],\"node.roof.glazingPanel.gridWithinEachArchBay\":[\"[Ĝŕîð ŵîţĥîñ éáçĥ áŕçĥ ƀáý ~~~~~~~]\"],\"node.roof.glazingPanel.infill\":[\"[Îñƒîļļ ~~]\"],\"node.roof.glazingPanel.opacity\":[\"[Öþáçîţý ~~~]\"],\"node.roof.glazingPanel.paneThickness\":[\"[Þáñé ţĥîçķñéšš ~~~~]\"],\"node.roof.glazingPanel.roofSystem\":[\"[Ŕööƒ šýšţéɱ ~~~]\"],\"node.roof.glazingPanel.roughness\":[\"[Ŕöûĝĥñéšš ~~~]\"],\"node.roof.glazingPanel.spacingIsMeasuredOnTheSlope\":[\"[Šþáçîñĝ îš ɱéášûŕéð öñ ţĥé šļöþé, ñöţ îţš ĥöŕîžöñţáļ þŕöĵéçţîöñ. ~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.standard\":[\"[Šţáñðáŕð ~~~]\"],\"node.roof.glazingPanel.subdividesEachFlatArchBayArch\":[\"[Šûƀðîṽîðéš éáçĥ ƒļáţ áŕçĥ ƀáý. Åŕçĥ ƀáýš çöñţŕöļš ţĥé ðîṽîšîöñš áŕöûñð ţĥé çûŕṽé. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanelEditor.chooseAPanelToOverrideIts\":[\"[Çĥööšé á þáñéļ ţö öṽéŕŕîðé îţš ðéƒáûļţ îñƒîļļ. ~~~~~~~~~~~~]\"],\"node.roof.glazingPanelEditor.column2\":[\"[Çöļûɱñ ~~]\"],\"node.roof.glazingPanelEditor.custom\":[\"[Çûšţöɱ ~~]\"],\"node.roof.glazingPanelEditor.default\":[\"[Ðéƒáûļţ ~~~]\"],\"node.roof.glazingPanelEditor.grid\":[\"[\",[\"columns\",\"plural\",{\"one\":[\"#\",\" çöļûɱñ\"],\"other\":[\"#\",\" çöļûɱñš\"]}],\" · \",[\"rows\",\"plural\",{\"one\":[\"#\",\" ŕöŵ\"],\"other\":[\"#\",\" ŕöŵš\"]}],\" ~~~~~~]\"],\"node.roof.glazingPanelEditor.individualPanels\":[\"[Îñðîṽîðûáļ þáñéļš ~~~~~]\"],\"node.roof.glazingPanelEditor.panelInfill\":[\"[Þáñéļ îñƒîļļ ~~~~]\"],\"node.roof.glazingPanelEditor.resetToDefault\":[\"[Ŕéšéţ ţö ðéƒáûļţ ~~~~~]\"],\"node.roof.glazingPanelEditor.roofFace\":[\"[Ŕööƒ ƒáçé ~~~]\"],\"node.roof.glazingPanelEditor.row2\":[\"[Ŕöŵ ~]\"],\"node.roof.glazingPanelEditor.selectedPanelInfill\":[\"[Šéļéçţéð þáñéļ îñƒîļļ ~~~~~~]\"],\"node.roof.label\":[\"[Ŕööƒ ~~]\"],\"node.roof.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.roof.panel.addChimney\":[\"[Åðð Çĥîɱñéý ~~~]\"],\"node.roof.panel.addCupola\":[\"[Åðð Çûþöļá ~~~]\"],\"node.roof.panel.addDormer\":[\"[Åðð Ðöŕɱéŕ ~~~]\"],\"node.roof.panel.addEyebrowVent\":[\"[Åðð Éýéƀŕöŵ Ṽéñţ ~~~~~]\"],\"node.roof.panel.addGutter\":[\"[Åðð Ĝûţţéŕ ~~~]\"],\"node.roof.panel.addSkylight\":[\"[Åðð Šķýļîĝĥţ ~~~~]\"],\"node.roof.panel.addSolarPanel\":[\"[Åðð Šöļáŕ Þáñéļ ~~~~]\"],\"node.roof.panel.addVent\":[\"[Åðð Ṽéñţ ~~~]\"],\"node.roof.panel.box\":[\"[Ɓöẋ ~]\"],\"node.roof.panel.boxVent\":[\"[ƀöẋ ṽéñţ ~~~]\"],\"node.roof.panel.chimney\":[\"[çĥîɱñéý ~~~]\"],\"node.roof.panel.custom\":[\"[Çûšţöɱ ~~]\"],\"node.roof.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.roof.panel.dormer\":[\"[ðöŕɱéŕ ~~]\"],\"node.roof.panel.drawSegment\":[\"[Ðŕáŵ Šéĝɱéñţ ~~~~]\"],\"node.roof.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.roof.panel.elements\":[\"[Éļéɱéñţš ~~~]\"],\"node.roof.panel.followsWalls\":[\"[Ƒöļļöŵš ŵáļļš ~~~~]\"],\"node.roof.panel.gutter\":[\"[ĝûţţéŕ ~~]\"],\"node.roof.panel.level\":[\"[Ļéṽéļ ~~]\"],\"node.roof.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.roof.panel.moveToLevel\":[\"[Ṁöṽé ţö \",[\"level\"],\" ~~]\"],\"node.roof.panel.moveToTheRoofLevel\":[\"[Ṁöṽé ţö ţĥé ŕööƒ ļéṽéļ ~~~~~~]\"],\"node.roof.panel.onStoreyWalls\":[\"[Öñ \",[\"storey\"],\" ŵîţĥ îţš ŵáļļš, šö îţ ĥîðéš ţĥáţ ƒļööŕ'š þļáñ îñ šöļö áñð éẋþļöðéð ṽîéŵš.\",[\"roofs\",\"plural\",{\"0\":[],\"1\":[],\"other\":[\" Ţĥé ƒļööŕ'š \",\"#\",\" ŕööƒš ɱöṽé ţöĝéţĥéŕ.\"]}],\" ~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.roof.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.roof.panel.ridge\":[\"[Ŕîðĝé ~~]\"],\"node.roof.panel.ridgeVent\":[\"[ŕîðĝé ṽéñţ ~~~]\"],\"node.roof.panel.roof\":[\"[Ŕööƒ ~~]\"],\"node.roof.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.roof.panel.segmentType\":[\"[\",[\"roofType\",\"select\",{\"hip\":[\"Ĥîþ\"],\"gable\":[\"Ĝáƀļé\"],\"shed\":[\"Šĥéð\"],\"gambrel\":[\"Ĝáɱƀŕéļ\"],\"dutch\":[\"Ðûţçĥ\"],\"mansard\":[\"Ṁáñšáŕð\"],\"flat\":[\"Ƒļáţ\"],\"conical\":[\"Çöñîçáļ\"],\"barrel\":[\"Ɓáŕŕéļ\"],\"other\":[\"Ŕööƒ\"]}],\" ~~~~~~~~~~~~~~~~]\"],\"node.roof.panel.segments\":[\"[Šéĝɱéñţš ~~~]\"],\"node.roof.panel.skylight\":[\"[šķýļîĝĥţ ~~~]\"],\"node.roof.panel.solarPanel\":[\"[šöļáŕ þáñéļ ~~~]\"],\"node.roof.panel.turbine\":[\"[Ţûŕƀîñé ~~~]\"],\"node.roof.panel.turbineVent\":[\"[ţûŕƀîñé ṽéñţ ~~~~]\"],\"node.roofSegment.description\":[\"[Å šîñĝļé þîţçĥéð þļáñé öƒ á þáŕéñţ ŕööƒ. ~~~~~~~~~~]\"],\"node.roofSegment.label\":[\"[Ŕööƒ Šéĝɱéñţ ~~~~]\"],\"node.roofSegment.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.roofSegment.panel.angle\":[\"[Åñĝļé ~~]\"],\"node.roofSegment.panel.arc\":[\"[Åŕç ~]\"],\"node.roofSegment.panel.autoGutters\":[\"[Åûţö ĝûţţéŕš ~~~~]\"],\"node.roofSegment.panel.autoRidgeVent\":[\"[Åûţö ŕîðĝé ṽéñţ ~~~~]\"],\"node.roofSegment.panel.barrel\":[\"[Ɓáŕŕéļ ~~]\"],\"node.roofSegment.panel.clippedVersion\":[\"[Çļîþþéð ṽéŕšîöñ ~~~~~]\"],\"node.roofSegment.panel.conical\":[\"[Çöñîçáļ ~~~]\"],\"node.roofSegment.panel.conicalShape\":[\"[Çöñîçáļ Šĥáþé ~~~~]\"],\"node.roofSegment.panel.deckThick\":[\"[Ðéçķ Ţĥîçķ. ~~~]\"],\"node.roofSegment.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.roofSegment.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.roofSegment.panel.diameter\":[\"[Ðîáɱéţéŕ ~~~]\"],\"node.roofSegment.panel.doneEditing\":[\"[Ðöñé éðîţîñĝ ~~~~]\"],\"node.roofSegment.panel.drainage\":[\"[Ðŕáîñáĝé ~~~]\"],\"node.roofSegment.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.roofSegment.panel.dutch\":[\"[Ðûţçĥ ~~]\"],\"node.roofSegment.panel.eaveOverhang\":[\"[Éáṽé öṽéŕĥáñĝ ~~~~]\"],\"node.roofSegment.panel.editFootprint\":[\"[Éðîţ ƒööţþŕîñţ ~~~~]\"],\"node.roofSegment.panel.endOverhang\":[\"[Éñð öṽéŕĥáñĝ ~~~~]\"],\"node.roofSegment.panel.fascia\":[\"[Ƒášçîá ~~]\"],\"node.roofSegment.panel.fasciaHeight\":[\"[Ƒášçîá ĥéîĝĥţ ~~~~]\"],\"node.roofSegment.panel.flat\":[\"[Ƒļáţ ~~]\"],\"node.roofSegment.panel.footprint\":[\"[Ƒööţþŕîñţ ~~~]\"],\"node.roofSegment.panel.gable\":[\"[Ĝáƀļé ~~]\"],\"node.roofSegment.panel.gableOverhang\":[\"[Ĝáƀļé öṽéŕĥáñĝ ~~~~]\"],\"node.roofSegment.panel.gambrel\":[\"[Ĝáɱƀŕéļ ~~~]\"],\"node.roofSegment.panel.hip\":[\"[Ĥîþ ~]\"],\"node.roofSegment.panel.kinkDepth\":[\"[Ķîñķ Ðéþţĥ ~~~]\"],\"node.roofSegment.panel.kinkHeight\":[\"[Ķîñķ Ĥéîĝĥţ ~~~]\"],\"node.roofSegment.panel.length\":[\"[Ļéñĝţĥ ~~]\"],\"node.roofSegment.panel.mansard\":[\"[Ṁáñšáŕð ~~~]\"],\"node.roofSegment.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.roofSegment.panel.pitch\":[\"[Þîţçĥ ~~]\"],\"node.roofSegment.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.roofSegment.panel.reset\":[\"[Ŕéšéţ ~~]\"],\"node.roofSegment.panel.roofSegment\":[\"[Ŕööƒ Šéĝɱéñţ ~~~~]\"],\"node.roofSegment.panel.roofType\":[\"[Ŕööƒ Ţýþé ~~~]\"],\"node.roofSegment.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.roofSegment.panel.shape\":[\"[Šĥáþé ~~]\"],\"node.roofSegment.panel.shed\":[\"[Šĥéð ~~]\"],\"node.roofSegment.panel.shingleThick\":[\"[Šĥîñĝļé Ţĥîçķ. ~~~~]\"],\"node.roofSegment.panel.span\":[\"[Šþáñ ~~]\"],\"node.roofSegment.panel.startAngle\":[\"[Šţáŕţ Åñĝļé ~~~]\"],\"node.roofSegment.panel.structure\":[\"[Šţŕûçţûŕé ~~~]\"],\"node.roofSegment.panel.topRakeLength\":[\"[Ţöþ Ŕáķé Ļéñĝţĥ ~~~~]\"],\"node.roofSegment.panel.topRakeThick\":[\"[Ţöþ Ŕáķé Ţĥîçķ. ~~~~]\"],\"node.roofSegment.panel.trim\":[\"[Ţŕîɱ ~~]\"],\"node.roofSegment.panel.waistHeight\":[\"[Ŵáîšţ Ĥéîĝĥţ ~~~~]\"],\"node.roofSegment.panel.waistLength\":[\"[Ŵáîšţ Ļéñĝţĥ ~~~~]\"],\"node.roofSegment.panel.waistWidth\":[\"[Ŵáîšţ Ŵîðţĥ ~~~]\"],\"node.roofSegment.panel.wall\":[\"[Ŵáļļ ~~]\"],\"node.roofSegment.panel.wallHeight\":[\"[Ŵáļļ Ĥéîĝĥţ ~~~]\"],\"node.roofSegment.panel.wallThick\":[\"[Ŵáļļ Ţĥîçķ. ~~~]\"],\"node.roofSegment.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.scan.description\":[\"[Å çáþţûŕéð šéššîöñ ŵîţĥ öþţîöñáļ ɱéšĥ, ɱöţîöñ, ɱéðîá, áñð šéñšöŕ ðáţá. ~~~~~~~~~~~~~~~~~]\"],\"node.scan.label\":[\"[Çáþţûŕé ~~~]\"],\"node.segmentNumber\":[\"[Šéĝɱéñţ \",[\"number\"],\" ~~~]\"],\"node.separator.label\":[\"[Šéþáŕáţöŕ ~~~]\"],\"node.shared.systemCheckPanel.aboutTheseChecks\":[\"[Åƀöûţ ţĥéšé çĥéçķš ~~~~~]\"],\"node.shared.systemCheckPanel.allFindings\":[\"[Åļļ ƒîñðîñĝš ~~~~]\"],\"node.shared.systemCheckPanel.allSystems\":[\"[Åļļ šýšţéɱš ~~~]\"],\"node.shared.systemCheckPanel.connections\":[\"[Çöññéçţîöñš ~~~~]\"],\"node.shared.systemCheckPanel.drainage\":[\"[Ðŕáîñáĝé ~~~]\"],\"node.shared.systemCheckPanel.error\":[\"[Éŕŕöŕ ~~]\"],\"node.shared.systemCheckPanel.errors\":[\"[Éŕŕöŕš ~~]\"],\"node.shared.systemCheckPanel.filterSystemChecks\":[\"[Ƒîļţéŕ šýšţéɱ çĥéçķš ~~~~~~]\"],\"node.shared.systemCheckPanel.hangers\":[\"[Ĥáñĝéŕš ~~~]\"],\"node.shared.systemCheckPanel.intersections\":[\"[Îñţéŕšéçţîöñš ~~~~]\"],\"node.shared.systemCheckPanel.locate\":[\"[Ļöçáţé \",[\"name\"],\" (\",[\"id\"],\") ~~]\"],\"node.shared.systemCheckPanel.missingItem\":[\"[Ṁîššîñĝ îţéɱ ~~~~]\"],\"node.shared.systemCheckPanel.noFindings\":[\"[Ñö ƒîñðîñĝš ~~~]\"],\"node.shared.systemCheckPanel.noFindingsInThisCategory\":[\"[Ñö ƒîñðîñĝš îñ ţĥîš çáţéĝöŕý ~~~~~~~~]\"],\"node.shared.systemCheckPanel.openEnds\":[\"[Öþéñ éñðš ~~~]\"],\"node.shared.systemCheckPanel.openEndsAndSeparateBranchesMay\":[\"[Öþéñ éñðš áñð šéþáŕáţé ƀŕáñçĥéš ɱáý ƀé îñţéñţîöñáļ. Îñţéŕšéçţîöñ çĥéçķš ûšé ƀöûñðîñĝ ƀöẋéš; îñšþéçţ öþéñîñĝš áñð çļéáŕáñçéš. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.shared.systemCheckPanel.selectedConnectedSystem\":[\"[Šéļéçţéð çöññéçţéð šýšţéɱ ~~~~~~~]\"],\"node.shared.systemCheckPanel.selectedRuns\":[\"[Šéļéçţéð: \",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕûñ\"],\"other\":[\"#\",\" ŕûñš\"]}],\" · \",[\"length\"],\" ɱ ~~~~~]\"],\"node.shared.systemCheckPanel.separateBranches\":[\"[Šéþáŕáţé ƀŕáñçĥéš ~~~~~]\"],\"node.shared.systemCheckPanel.showAllFindings\":[\"[Šĥöŵ áļļ ƒîñðîñĝš ~~~~~]\"],\"node.shared.systemCheckPanel.systemChecks\":[\"[Šýšţéɱ çĥéçķš ~~~~]\"],\"node.shared.systemCheckPanel.systemFinding\":[\"[Šýšţéɱ ƒîñðîñĝ ~~~~]\"],\"node.shared.systemCheckPanel.systemFindings\":[\"[Šýšţéɱ ƒîñðîñĝš ~~~~~]\"],\"node.shared.systemCheckPanel.warning\":[\"[Ŵáŕñîñĝ ~~~]\"],\"node.shared.systemCheckPanel.warnings\":[\"[Ŵáŕñîñĝš ~~~]\"],\"node.shelf.description\":[\"[Å çöñƒîĝûŕáƀļé šĥéļṽîñĝ ûñîţ. Îţéɱš ĥöšţ öñ éáçĥ ŕöŵ. ~~~~~~~~~~~~~]\"],\"node.shelf.label\":[\"[Šĥéļƒ ~~]\"],\"node.site.description\":[\"[Ţĥé ţöþ-ļéṽéļ çöñţáîñéŕ ĥöļðîñĝ ƀûîļðîñĝš, žöñéš, áñð ţĥé þŕöþéŕţý ƀöûñðáŕý. ~~~~~~~~~~~~~~~~~~~]\"],\"node.site.label\":[\"[Šîţé ~~]\"],\"node.site.panel.address\":[\"[Åððŕéšš ~~~]\"],\"node.site.panel.apn\":[\"[ÅÞÑ ~]\"],\"node.site.panel.autoMostNorthFacingEdge\":[\"[Åûţö — ɱöšţ ñöŕţĥ-ƒáçîñĝ éðĝé ~~~~~~~]\"],\"node.site.panel.contourIntervalSitePlanAnd3d\":[\"[Çöñţöûŕ îñţéŕṽáļ (šîţé þļáñ áñð 3Ð) ~~~~~~~~~]\"],\"node.site.panel.county\":[\"[Çöûñţý ~~]\"],\"node.site.panel.eGRs60\":[\"[é.ĝ. ŔŠ-60 ~~]\"],\"node.site.panel.eGTampaLdc27156\":[\"[é.ĝ. Ţáɱþá ĻÐÇ §27-156 ~~~]\"],\"node.site.panel.every12In\":[\"[éṽéŕý 12 îñ ~~~]\"],\"node.site.panel.every24In\":[\"[éṽéŕý 24 îñ ~~~]\"],\"node.site.panel.every6In\":[\"[éṽéŕý 6 îñ ~~~]\"],\"node.site.panel.findParcel\":[\"[Ƒîñð þáŕçéļ ~~~]\"],\"node.site.panel.finding\":[\"[Ƒîñðîñĝ… ~~~]\"],\"node.site.panel.frontStreetEdge\":[\"[Ƒŕöñţ (šţŕééţ) éðĝé ~~~~~]\"],\"node.site.panel.lookingUpTheParcel\":[\"[Ļööķîñĝ ûþ ţĥé þáŕçéļ áñð ţĥé šţŕééţš áŕöûñð îţ… ~~~~~~~~~~~~]\"],\"node.site.panel.lotArea\":[\"[Ļöţ áŕéá ~~~]\"],\"node.site.panel.n1200WCassStTampaFl\":[\"[1200 Ŵ Çášš Šţ, Ţáɱþá, ƑĻ ~~~~~]\"],\"node.site.panel.noSurveyedLinesContoursAreDrawn\":[\"[Ñö šûŕṽéýéð ļîñéš — çöñţöûŕš áŕé ðŕáŵñ ƒŕöɱ ţĥé šçûļþţéð ĝŕöûñð. ~~~~~~~~~~~~~~~~]\"],\"node.site.panel.none\":[\"[ñöñé ~~]\"],\"node.site.panel.northRotation\":[\"[Ñöŕţĥ ŕöţáţîöñ ~~~~]\"],\"node.site.panel.orientation\":[\"[Öŕîéñţáţîöñ ~~~~]\"],\"node.site.panel.parcel\":[\"[Þáŕçéļ ~~]\"],\"node.site.panel.parcelLookupFailed\":[\"[Þáŕçéļ ļööķûþ ƒáîļéð. ~~~~~~]\"],\"node.site.panel.projectLook\":[\"[Þŕöĵéçţ ļööķ ~~~~]\"],\"node.site.panel.saveCurrentLook\":[\"[Šáṽé çûŕŕéñţ ļööķ ~~~~~]\"],\"node.site.panel.saveTheCurrentLightingAndDisplay\":[\"[Šáṽé ţĥé çûŕŕéñţ ļîĝĥţîñĝ áñð ðîšþļáý áš ţĥîš þŕöĵéçţ'š ðéƒáûļţ. Þéŕšöñáļ ðîšþļáý çĥáñĝéš šţáý îñ ţĥîš ƀŕöŵšéŕ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.site.panel.setbacks\":[\"[Šéţƀáçķš ~~~]\"],\"node.site.panel.showGround\":[\"[Šĥöŵ ĝŕöûñð ~~~]\"],\"node.site.panel.showTheContourLinesIn3d\":[\"[Šĥöŵ ţĥé çöñţöûŕ ļîñéš îñ 3Ð ~~~~~~~]\"],\"node.site.panel.side\":[\"[šîðé ~~]\"],\"node.site.panel.site\":[\"[Šîţé ~~]\"],\"node.site.panel.source\":[\"[Šöûŕçé ~~]\"],\"node.site.panel.sourceCitation\":[\"[Šöûŕçé / çîţáţîöñ ~~~~~]\"],\"node.site.panel.streetAddress\":[\"[Šţŕééţ áððŕéšš ~~~~]\"],\"node.site.panel.survey\":[\"[šûŕṽéý ~~]\"],\"node.site.panel.surveyedContours\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" šûŕṽéýéð ļîñé\"],\"other\":[\"#\",\" šûŕṽéýéð ļîñéš\"]}],\" áţ \",[\"interval\"],\" ƒţ (\",[\"datum\"],\") — \",[\"source\"],\" ~~~~~~~~~]\"],\"node.site.panel.terrain\":[\"[Ţéŕŕáîñ ~~~]\"],\"node.site.panel.typeAnAddressFirst\":[\"[Ţýþé áñ áððŕéšš ƒîŕšţ. ~~~~~~]\"],\"node.site.panel.useProjectLook\":[\"[Ûšé þŕöĵéçţ ļööķ ~~~~~]\"],\"node.site.panel.zone\":[\"[Žöñé ~~]\"],\"node.site.setback.front\":[\"[Ƒŕöñţ ~~]\"],\"node.site.setback.leftOverride\":[\"[Ļéƒţ (öṽéŕŕîðé) ~~~~]\"],\"node.site.setback.rear\":[\"[Ŕéáŕ ~~]\"],\"node.site.setback.rightOverride\":[\"[Ŕîĝĥţ (öṽéŕŕîðé) ~~~~]\"],\"node.site.setback.side\":[\"[Šîðé ~~]\"],\"node.skylight.description\":[\"[Ƒŕáɱéð ĝļášš öþéñîñĝ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~]\"],\"node.skylight.label\":[\"[Šķýļîĝĥţ ~~~]\"],\"node.slab.description\":[\"[Å þöļýĝöñ-ƀöûñðéð ƒļööŕ šûŕƒáçé ţĥáţ ĥöšţš îţéɱš öñ ţöþ. ~~~~~~~~~~~~~~]\"],\"node.slab.label\":[\"[Šļáƀ ~~]\"],\"node.slab.panel.addHole\":[\"[Åðð Ĥöļé ~~~]\"],\"node.slab.panel.area\":[\"[Åŕéá ~~]\"],\"node.slab.panel.auto\":[\"[Åûţö ~~]\"],\"node.slab.panel.base\":[\"[Ɓášé ~~]\"],\"node.slab.panel.cutHatch\":[\"[Çûţ ĥáţçĥ ~~~]\"],\"node.slab.panel.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"node.slab.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.slab.panel.done\":[\"[Ðöñé ~~]\"],\"node.slab.panel.elevation\":[\"[Éļéṽáţîöñ ~~~]\"],\"node.slab.panel.extendsThePerimeterDownToTerrain\":[\"[Éẋţéñðš ţĥé þéŕîɱéţéŕ ðöŵñ ţö ţéŕŕáîñ. Ţĥé ƒļáţ šûŕƒáçé, ƀášé, áñð ţĥîçķñéšš šţáý ûñçĥáñĝéð. ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.slab.panel.fixed\":[\"[Ƒîẋéð ~~]\"],\"node.slab.panel.floor\":[\"[Ƒļööŕ ~~]\"],\"node.slab.panel.followsTerrain\":[\"[Ƒöļļöŵš ţéŕŕáîñ ~~~~~]\"],\"node.slab.panel.foundation\":[\"[Ƒöûñðáţîöñ ~~~]\"],\"node.slab.panel.holes\":[\"[Ĥöļéš ~~]\"],\"node.slab.panel.info\":[\"[Îñƒö ~~]\"],\"node.slab.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.slab.panel.noHoles\":[\"[Ñö ĥöļéš ~~~]\"],\"node.slab.panel.rim\":[\"[Ŕîɱ ~]\"],\"node.slab.panel.slab\":[\"[Šļáƀ ~~]\"],\"node.slab.panel.standard2\":[\"[Šţáñðáŕð (2\\\") ~~~]\"],\"node.slab.panel.standard5cm\":[\"[Šţáñðáŕð (5çɱ) ~~~]\"],\"node.slab.panel.sunken15cm\":[\"[Šûñķéñ (15çɱ) ~~~]\"],\"node.slab.panel.sunken6\":[\"[Šûñķéñ (6\\\") ~~]\"],\"node.slab.panel.surface\":[\"[Šûŕƒáçé ~~~]\"],\"node.slab.panel.thick15cm\":[\"[Ţĥîçķ (15çɱ) ~~~]\"],\"node.slab.panel.thick6\":[\"[Ţĥîçķ (6\\\") ~~]\"],\"node.slab.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.slab.panel.thin1\":[\"[Ţĥîñ (1\\\") ~~]\"],\"node.slab.panel.thin2cm\":[\"[Ţĥîñ (2çɱ) ~~]\"],\"node.solarPanel.description\":[\"[Ĝŕîð öƒ þĥöţöṽöļţáîç þáñéļš ɱöûñţéð öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~~~~]\"],\"node.solarPanel.label\":[\"[Šöļáŕ Þáñéļ ~~~]\"],\"node.spawn.description\":[\"[Þļáýéŕ öŕ çáɱéŕá öŕîĝîñ ŵîţĥîñ á ļéṽéļ. Öñé þéŕ ļéṽéļ. ~~~~~~~~~~~~~]\"],\"node.spawn.label\":[\"[Šþáŵñ Þöîñţ ~~~]\"],\"node.stair.description\":[\"[Å šţáîŕ çöɱþöšéð öƒ öñé öŕ ɱöŕé ƒļîĝĥţš ŵîţĥ çöñƒîĝûŕáƀļé ţŕéáðš, ŕîšéŕš, ŕáîļîñĝš. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.stair.label\":[\"[Šţáîŕ ~~]\"],\"node.stair.layout.straight\":[\"[Šţŕáîĝĥţ ~~~]\"],\"node.stair.layout.turn\":[\"[\",[\"layout\"],\" ţûŕñ ~~]\"],\"node.stair.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.stair.panel.addFlight\":[\"[Åðð ƒļîĝĥţ ~~~]\"],\"node.stair.panel.addLanding\":[\"[Åðð ļáñðîñĝ ~~~]\"],\"node.stair.panel.applyLabelLayout\":[\"[Åþþļý \",[\"label\"],\" ļáýöûţ ~~~~]\"],\"node.stair.panel.autoCutout\":[\"[Åûţö Çûţöûţ ~~~]\"],\"node.stair.panel.balusters\":[\"[Ɓáļûšţéŕš ~~~]\"],\"node.stair.panel.boards\":[\"[Ɓöáŕðš ~~]\"],\"node.stair.panel.both\":[\"[Ɓöţĥ ~~]\"],\"node.stair.panel.cable\":[\"[Çáƀļé ~~]\"],\"node.stair.panel.centerColumn\":[\"[Çéñţéŕ Çöļûɱñ ~~~~]\"],\"node.stair.panel.clockwise\":[\"[Çļöçķŵîšé ~~~]\"],\"node.stair.panel.connectedTo\":[\"[Çöññéçţéð ţö \",[\"surface\"],\". Ṁöṽé ţĥé šţáîŕ ţö çöññéçţ ţö áñöţĥéŕ éðĝé. ~~~~~~~~~~~~~~]\"],\"node.stair.panel.connectedToSurface\":[\"[Çöññéçţéð ţö á šûŕƒáçé. Ṁöṽé ţĥé šţáîŕ ţö çöññéçţ ţö áñöţĥéŕ éðĝé. ~~~~~~~~~~~~~~~~]\"],\"node.stair.panel.construction\":[\"[Çöñšţŕûçţîöñ ~~~~]\"],\"node.stair.panel.counterclockwise\":[\"[Çöûñţéŕçļöçķŵîšé ~~~~~]\"],\"node.stair.panel.curved\":[\"[Çûŕṽéð ~~]\"],\"node.stair.panel.customRise\":[\"[Çûšţöɱ ŕîšé ~~~]\"],\"node.stair.panel.deck\":[\"[Ðéçķ ~~]\"],\"node.stair.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.stair.panel.designTargets\":[\"[Ðéšîĝñ ţáŕĝéţš ~~~~]\"],\"node.stair.panel.destination\":[\"[Ðéšţîñáţîöñ ~~~~]\"],\"node.stair.panel.dragNearADeckPatioConcrete\":[\"[Ðŕáĝ ñéáŕ á ðéçķ, þáţîö, çöñçŕéţé šļáƀ, öŕ ļáñðîñĝ éðĝé ţö ƒîţ ţĥé šţáîŕ. ~~~~~~~~~~~~~~~~~]\"],\"node.stair.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.stair.panel.equalAngle\":[\"[Éǫûáļ áñĝļé ~~~]\"],\"node.stair.panel.equalGoing\":[\"[Éǫûáļ ĝöîñĝ ~~~]\"],\"node.stair.panel.fitRisersAndGoing\":[\"[Ƒîţ ŕîšéŕš áñð ĝöîñĝ ~~~~~~]\"],\"node.stair.panel.fitToFloor\":[\"[Ƒîţ Ţö Ƒļööŕ ~~~]\"],\"node.stair.panel.fitUniformRisers\":[\"[Ƒîţ ûñîƒöŕɱ ŕîšéŕš ~~~~~]\"],\"node.stair.panel.flightMeasurements\":[\"[Ƒļîĝĥţ \",[\"number\"],\": \",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕîšéŕ\"],\"other\":[\"#\",\" ŕîšéŕš\"]}],\" · Ŕ \",[\"riser\"],\" · Ţ \",[\"going\"],\" · \",[\"slope\"],\" ~~~~~~]\"],\"node.stair.panel.floorsCeilingsAndStairsOnly\":[\"[Ƒļööŕš, çéîļîñĝš áñð šţáîŕš öñļý. ~~~~~~~~~]\"],\"node.stair.panel.followsDeck\":[\"[Ƒöļļöŵš ðéçķ ~~~~]\"],\"node.stair.panel.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"node.stair.panel.fromLevel\":[\"[Ƒŕöɱ Ļéṽéļ ~~~]\"],\"node.stair.panel.geometry\":[\"[Ĝéöɱéţŕý ~~~]\"],\"node.stair.panel.glass\":[\"[Ĝļášš ~~]\"],\"node.stair.panel.headroom\":[\"[Ĥéáðŕööɱ: ~~~]\"],\"node.stair.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.stair.panel.innerGap\":[\"[Îññéŕ ĝáþ ~~~]\"],\"node.stair.panel.innerRadius\":[\"[Îññéŕ Ŕáðîûš ~~~~]\"],\"node.stair.panel.integrated\":[\"[Îñţéĝŕáţéð ~~~]\"],\"node.stair.panel.landing\":[\"[Ļáñðîñĝ ~~~]\"],\"node.stair.panel.layout\":[\"[Ļáýöûţ ~~]\"],\"node.stair.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.stair.panel.leftTurn\":[\"[Ļéƒţ ţûŕñ ~~~]\"],\"node.stair.panel.measurements\":[\"[Ṁéášûŕéɱéñţš ~~~~]\"],\"node.stair.panel.metal\":[\"[Ṁéţáļ ~~]\"],\"node.stair.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.stair.panel.movingThisStairKeepsItsCurrent\":[\"[Ṁöṽîñĝ ţĥîš šţáîŕ ķééþš îţš çûŕŕéñţ ŕîšé, šţéþš, áñð ŕûñ. ~~~~~~~~~~~~~~]\"],\"node.stair.panel.noOverheadSurface\":[\"[Ñö öṽéŕĥéáð šûŕƒáçé ~~~~~~]\"],\"node.stair.panel.none\":[\"[Ñöñé ~~]\"],\"node.stair.panel.notEvaluated\":[\"[Ñöţ éṽáļûáţéð ~~~~]\"],\"node.stair.panel.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.stair.panel.openingOffset\":[\"[Öþéñîñĝ Öƒƒšéţ ~~~~]\"],\"node.stair.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.stair.panel.postRail\":[\"[Þöšţ & ŕáîļ ~~~]\"],\"node.stair.panel.railing\":[\"[Ŕáîļîñĝ ~~~]\"],\"node.stair.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.stair.panel.rightTurn\":[\"[Ŕîĝĥţ ţûŕñ ~~~]\"],\"node.stair.panel.rise\":[\"[Ŕîšé ~~]\"],\"node.stair.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.stair.panel.segmentType\":[\"[\",[\"type\",\"select\",{\"landing\":[\"Ļáñðîñĝ\"],\"other\":[\"Šţáîŕ\"]}],\" ~~~~]\"],\"node.stair.panel.segments\":[\"[Šéĝɱéñţš ~~~]\"],\"node.stair.panel.sizing\":[\"[Šîžîñĝ ~~]\"],\"node.stair.panel.snapToNearbySurfaces\":[\"[Šñáþ ţö ñéáŕƀý šûŕƒáçéš ~~~~~~]\"],\"node.stair.panel.spiral\":[\"[Šþîŕáļ ~~]\"],\"node.stair.panel.staircase\":[\"[Šţáîŕçášé ~~~]\"],\"node.stair.panel.stepSupports\":[\"[Šţéþ Šûþþöŕţš ~~~~]\"],\"node.stair.panel.steps\":[\"[Šţéþš ~~]\"],\"node.stair.panel.straight\":[\"[Šţŕáîĝĥţ ~~~]\"],\"node.stair.panel.style\":[\"[Šţýļé ~~]\"],\"node.stair.panel.surfaceConnection\":[\"[Šûŕƒáçé çöññéçţîöñ ~~~~~~]\"],\"node.stair.panel.sweep\":[\"[Šŵééþ ~~]\"],\"node.stair.panel.targetGoing\":[\"[Ţáŕĝéţ ĝöîñĝ ~~~~]\"],\"node.stair.panel.targetHeadroom\":[\"[Ţáŕĝéţ ĥéáðŕööɱ ~~~~~]\"],\"node.stair.panel.targetMaxRiser\":[\"[Ţáŕĝéţ ɱáẋ ŕîšéŕ ~~~~~]\"],\"node.stair.panel.targetMinimumGoing\":[\"[Ţáŕĝéţ ɱîñîɱûɱ ĝöîñĝ ~~~~~~]\"],\"node.stair.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.stair.panel.to\":[\"[Ţö ~]\"],\"node.stair.panel.topLanding\":[\"[Ţöþ Ļáñðîñĝ ~~~]\"],\"node.stair.panel.type\":[\"[Ţýþé ~~]\"],\"node.stair.panel.unavailable\":[\"[Ûñáṽáîļáƀļé ~~~~]\"],\"node.stair.panel.walkingLineOffset\":[\"[Ŵáļķîñĝ ļîñé öƒƒšéţ ~~~~~~]\"],\"node.stair.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.stair.panel.winder\":[\"[Ŵîñðéŕ ~~]\"],\"node.stairSegment.description\":[\"[Å šîñĝļé ƒļîĝĥţ öƒ á þáŕéñţ šţáîŕ. ~~~~~~~~~]\"],\"node.stairSegment.label\":[\"[Šţáîŕ Šéĝɱéñţ ~~~~]\"],\"node.stairSegment.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.stairSegment.panel.attachment\":[\"[Åţţáçĥɱéñţ ~~~]\"],\"node.stairSegment.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.stairSegment.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.stairSegment.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.stairSegment.panel.editingSwitchesTheStairToCustom\":[\"[Éðîţîñĝ šŵîţçĥéš ţĥé šţáîŕ ţö Çûšţöɱ ŕîšé ~~~~~~~~~~~]\"],\"node.stairSegment.panel.equalAngle\":[\"[Éǫûáļ áñĝļé ~~~]\"],\"node.stairSegment.panel.equalGoing\":[\"[Éǫûáļ ĝöîñĝ ~~~]\"],\"node.stairSegment.panel.fillToFloor\":[\"[Ƒîļļ ţö ƒļööŕ ~~~~]\"],\"node.stairSegment.panel.flight\":[\"[Ƒļîĝĥţ ~~]\"],\"node.stairSegment.panel.flightShape\":[\"[Ƒļîĝĥţ šĥáþé ~~~~]\"],\"node.stairSegment.panel.front\":[\"[Ƒŕöñţ ~~]\"],\"node.stairSegment.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.stairSegment.panel.innerGap\":[\"[Îññéŕ ĝáþ ~~~]\"],\"node.stairSegment.panel.landing\":[\"[Ļáñðîñĝ ~~~]\"],\"node.stairSegment.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.stairSegment.panel.leftTurn\":[\"[Ļéƒţ ţûŕñ ~~~]\"],\"node.stairSegment.panel.length\":[\"[Ļéñĝţĥ ~~]\"],\"node.stairSegment.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.stairSegment.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.stairSegment.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.stairSegment.panel.rightTurn\":[\"[Ŕîĝĥţ ţûŕñ ~~~]\"],\"node.stairSegment.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.stairSegment.panel.stairSegment\":[\"[Šţáîŕ Šéĝɱéñţ ~~~~]\"],\"node.stairSegment.panel.steps\":[\"[Šţéþš ~~]\"],\"node.stairSegment.panel.straight\":[\"[Šţŕáîĝĥţ ~~~]\"],\"node.stairSegment.panel.structure\":[\"[Šţŕûçţûŕé ~~~]\"],\"node.stairSegment.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.stairSegment.panel.type\":[\"[Ţýþé ~~]\"],\"node.stairSegment.panel.walkingLineOffset\":[\"[Ŵáļķîñĝ ļîñé öƒƒšéţ ~~~~~~]\"],\"node.stairSegment.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.stairSegment.panel.winder\":[\"[Ŵîñðéŕ ~~]\"],\"node.structuralGrid.description\":[\"[Þéŕšîšţéñţ çöñšţŕûçţîöñ ĝŕîð áẋîš ŵîţĥ îðéñţîƒîçáţîöñ ƀûƀƀļéš. ~~~~~~~~~~~~~~~~~]\"],\"node.structuralGrid.label\":[\"[Šţŕûçţûŕáļ Ĝŕîð ~~~~~]\"],\"node.turbineVent.description\":[\"[Ŵîñð-ðŕîṽéñ šþîññîñĝ ŵĥîŕļýƀîŕð éẋĥáûšţ ṽéñţ ƒöŕ á ŕööƒ šļöþé. ~~~~~~~~~~~~~~~~]\"],\"node.turbineVent.label\":[\"[Ţûŕƀîñé Ṽéñţ ~~~~]\"],\"node.unit.description\":[\"[Å ñáɱéð ĝŕöûþ öƒ žöñéš ƒöŕɱîñĝ öñé áþáŕţɱéñţ, ĥöţéļ ŕööɱ öŕ çöɱɱéŕçîáļ ļöţ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.unit.kind.apartment\":[\"[Åþáŕţɱéñţ ~~~]\"],\"node.unit.kind.commercial\":[\"[Çöɱɱéŕçîáļ ~~~]\"],\"node.unit.kind.common\":[\"[Çöɱɱöñ ~~]\"],\"node.unit.kind.hotelRoom\":[\"[Ĥöţéļ ŕööɱ ~~~]\"],\"node.unit.label\":[\"[Ûñîţ ~~]\"],\"node.unit.panel.noZonesAssigned\":[\"[Ñö žöñéš áššîĝñéð ýéţ. ~~~~~~]\"],\"node.unit.panel.nonAdjacentLevels\":[\"[Ṁéɱƀéŕš šîţ öñ ļéṽéļš ţĥáţ áŕé ñöţ áðĵáçéñţ. ~~~~~~~~~~~]\"],\"node.unit.panel.removeMember\":[\"[Ŕéɱöṽé \",[\"name\"],\" ƒŕöɱ ûñîţ ~~~~~]\"],\"node.unit.panel.removeZone\":[\"[Ŕéɱöṽé žöñé ƒŕöɱ ûñîţ ~~~~~~]\"],\"node.unit.unitPanel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.unit.unitPanel.color\":[\"[Çöļöŕ ~~]\"],\"node.unit.unitPanel.delete\":[\"[Ðéļéţé ~~]\"],\"node.unit.unitPanel.focus\":[\"[Ƒöçûš ~~]\"],\"node.unit.unitPanel.grossArea\":[\"[Ĝŕöšš áŕéá ~~~]\"],\"node.unit.unitPanel.kind\":[\"[Ķîñð ~~]\"],\"node.unit.unitPanel.levels\":[\"[Ļéṽéļš ~~]\"],\"node.unit.unitPanel.members\":[\"[Ṁéɱƀéŕš ~~~]\"],\"node.unit.unitPanel.name\":[\"[Ñáɱé ~~]\"],\"node.unit.unitPanel.noRoomsYetPickThisUnit\":[\"[Ñö ŕööɱš ýéţ. Þîçķ ţĥîš ûñîţ ƒŕöɱ á ŕööɱ'š þáñéļ, öŕ ðŕáŵ žöñéš ŵĥîļé îţ îš ƒöçûšéð. ~~~~~~~~~~~~~~~~~~~~]\"],\"node.unit.unitPanel.report\":[\"[Ŕéþöŕţ ~~]\"],\"node.unit.unitPanel.unit\":[\"[Ûñîţ ~~]\"],\"node.wall.curtain.cell\":[\"[Çöļûɱñ \",[\"column\"],\", ŕöŵ \",[\"row\"],\": \",[\"type\",\"select\",{\"glass\":[\"ĝļášš\"],\"solid\":[\"šöļîð\"],\"other\":[\"éɱþţý\"]}],\" ~~~~~~~~]\"],\"node.wall.curtain.columnSpacing\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" çöļûɱñ\"],\"other\":[\"#\",\" çöļûɱñš\"]}],\" · \",[\"spacing\"],\" ĝŕîð šþáçîñĝ ~~~~~~~~]\"],\"node.wall.curtain.noPanels\":[\"[Ñö þáñéļš ~~~]\"],\"node.wall.curtain.rowSpacing\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕöŵ\"],\"other\":[\"#\",\" ŕöŵš\"]}],\" · \",[\"spacing\"],\" ĝŕîð šþáçîñĝ ~~~~~~]\"],\"node.wall.curtainWallPanel.applyTint\":[\"[Åþþļý ţîñţ ~~~]\"],\"node.wall.curtainWallPanel.borderOpeningFrame\":[\"[Ɓöŕðéŕ / öþéñîñĝ ƒŕáɱé ~~~~~~]\"],\"node.wall.curtainWallPanel.bottom\":[\"[Ɓöţţöɱ ~~]\"],\"node.wall.curtainWallPanel.bottomRow\":[\"[Ɓöţţöɱ ŕöŵ ~~~]\"],\"node.wall.curtainWallPanel.cancelTint\":[\"[Çáñçéļ ţîñţ ~~~]\"],\"node.wall.curtainWallPanel.center\":[\"[Çéñţéŕ ~~]\"],\"node.wall.curtainWallPanel.chooseACellOrEnterIts\":[\"[Çĥööšé á çéļļ öŕ éñţéŕ îţš çöļûɱñ áñð ŕöŵ. Ûšé áŕŕöŵ ķéýš ţö ɱöṽé ƀéţŵééñ çéļļš. Çöļûɱñš ŕûñ ƒŕöɱ ţĥé ŵáļļ šţáŕţ; ŕöŵš çöûñţ ûþŵáŕð. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.clearHiddenOverrides\":[\"[Çļéáŕ ĥîððéñ öṽéŕŕîðéš ~~~~~~]\"],\"node.wall.curtainWallPanel.column\":[\"[Çöļûɱñ ~~]\"],\"node.wall.curtainWallPanel.columnLayout\":[\"[Çöļûɱñ ļáýöûţ ~~~~]\"],\"node.wall.curtainWallPanel.columnRow\":[\"[Çöļûɱñ \",[\"column\"],\", ŕöŵ \",[\"row\"],\" ~~~]\"],\"node.wall.curtainWallPanel.construction\":[\"[Çöñšţŕûçţîöñ ~~~~]\"],\"node.wall.curtainWallPanel.continuousMullionsAndTransomsAssembledAlong\":[\"[Çöñţîñûöûš ɱûļļîöñš áñð ţŕáñšöɱš áššéɱƀļéð áļöñĝ ţĥé ŵáļļ. ~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.curtainWallPanelSelection\":[\"[Çûŕţáîñ ŵáļļ þáñéļ šéļéçţîöñ ~~~~~~~~]\"],\"node.wall.curtainWallPanel.customInfill\":[\"[Çûšţöɱ îñƒîļļ ~~~~]\"],\"node.wall.curtainWallPanel.defaultPanel\":[\"[Ðéƒáûļţ þáñéļ ~~~~]\"],\"node.wall.curtainWallPanel.editIndividualPanels\":[\"[Éðîţ îñðîṽîðûáļ þáñéļš ~~~~~~]\"],\"node.wall.curtainWallPanel.effectiveThicknessLimited\":[\"[Ƀƒéçţîṽé ţĥîçķñéšš: \",[\"thickness\"],\", ļîɱîţéð ƀý ƒŕáɱé ðéþţĥ. ~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.empty\":[\"[Éɱþţý ~~]\"],\"node.wall.curtainWallPanel.enablePanelEditing\":[\"[Éñáƀļé þáñéļ éðîţîñĝ ~~~~~~]\"],\"node.wall.curtainWallPanel.end\":[\"[Éñð ~]\"],\"node.wall.curtainWallPanel.fixedSpacing\":[\"[Ƒîẋéð šþáçîñĝ ~~~~]\"],\"node.wall.curtainWallPanel.followingWallDefaults\":[\"[Ƒöļļöŵîñĝ ŵáļļ ðéƒáûļţš ~~~~~~~]\"],\"node.wall.curtainWallPanel.frameDimensions\":[\"[Ƒŕáɱé ðîɱéñšîöñš ~~~~~]\"],\"node.wall.curtainWallPanel.framing\":[\"[Ƒŕáɱîñĝ ~~~]\"],\"node.wall.curtainWallPanel.fullyCapped\":[\"[Ƒûļļý çáþþéð ~~~~]\"],\"node.wall.curtainWallPanel.glass\":[\"[Ĝļášš ~~]\"],\"node.wall.curtainWallPanel.glassAppearance\":[\"[Ĝļášš áþþéáŕáñçé ~~~~~]\"],\"node.wall.curtainWallPanel.glassAppearanceIsControlledByThe\":[\"[Ĝļášš áþþéáŕáñçé îš çöñţŕöļļéð ƀý ţĥé þáîñţ ţööļ. ~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.glassTint\":[\"[Ĝļášš ţîñţ ~~~]\"],\"node.wall.curtainWallPanel.glazingGap\":[\"[Ĝļážîñĝ ĝáþ ~~~]\"],\"node.wall.curtainWallPanel.gridLimitedTo32PanelsPer\":[\"[Ĝŕîð ļîɱîţéð ţö 32 þáñéļš þéŕ áẋîš. Šþáçîñĝ éẋþáñðš ţö ƒîţ ţĥîš ŵáļļ. ~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.horizontalCaps\":[\"[Ĥöŕîžöñţáļ çáþš ~~~~~]\"],\"node.wall.curtainWallPanel.horizontalFrameWidth\":[\"[Ĥöŕîžöñţáļ ƒŕáɱé ŵîðţĥ ~~~~~~]\"],\"node.wall.curtainWallPanel.layout\":[\"[Ļáýöûţ ~~]\"],\"node.wall.curtainWallPanel.lengthCustomPanelsAreOutsideThis\":[\"[\",[\"length\"],\" çûšţöɱ þáñéļš áŕé öûţšîðé ţĥîš ĝŕîð. Ţĥéý ŕéţûŕñ îƒ ţĥé ĝŕîð éẋþáñðš. ~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.lowRoughnessIsSmoothHighRoughness\":[\"[Ļöŵ ŕöûĝĥñéšš îš šɱööţĥ; ĥîĝĥ ŕöûĝĥñéšš ĝîṽéš á ɱáţţé šûŕƒáçé îñ ŕéñðéŕéð šĥáðîñĝ. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.maximumSpacing\":[\"[Ṁáẋîɱûɱ šþáçîñĝ ~~~~~]\"],\"node.wall.curtainWallPanel.moduleJointWidth\":[\"[Ṁöðûļé ĵöîñţ ŵîðţĥ ~~~~~]\"],\"node.wall.curtainWallPanel.none\":[\"[Ñöñé ~~]\"],\"node.wall.curtainWallPanel.opacity\":[\"[Öþáçîţý ~~~]\"],\"node.wall.curtainWallPanel.opaqueBand\":[\"[Öþáǫûé ƀáñð ~~~]\"],\"node.wall.curtainWallPanel.opaqueBandsReplaceAFullRow\":[\"[Öþáǫûé ƀáñðš ŕéþļáçé á ƒûļļ ŕöŵ ŵîţĥ šöļîð þáñéļš. Åþþļý ţĥéîŕ ƒîñîšĥ ŵîţĥ ţĥé þáîñţ ţööļ. ~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.panelCount\":[\"[Þáñéļ çöûñţ ~~~]\"],\"node.wall.curtainWallPanel.panelInfill\":[\"[Þáñéļ îñƒîļļ ~~~~]\"],\"node.wall.curtainWallPanel.panelThickness\":[\"[Þáñéļ ţĥîçķñéšš ~~~~~]\"],\"node.wall.curtainWallPanel.panels\":[\"[Þáñéļš ~~]\"],\"node.wall.curtainWallPanel.resetThisPanel\":[\"[Ŕéšéţ ţĥîš þáñéļ ~~~~~]\"],\"node.wall.curtainWallPanel.row2\":[\"[Ŕöŵ ~]\"],\"node.wall.curtainWallPanel.rowLayout\":[\"[Ŕöŵ ļáýöûţ ~~~]\"],\"node.wall.curtainWallPanel.separateFramedModulesWithJointsBetween\":[\"[Šéþáŕáţé ƒŕáɱéð ɱöðûļéš ŵîţĥ ĵöîñţš ƀéţŵééñ ûñîţš. ~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.solid\":[\"[Šöļîð ~~]\"],\"node.wall.curtainWallPanel.spacing\":[\"[Šþáçîñĝ ~~~]\"],\"node.wall.curtainWallPanel.start\":[\"[Šţáŕţ ~~]\"],\"node.wall.curtainWallPanel.stickBuilt\":[\"[Šţîçķ-ƀûîļţ ~~~]\"],\"node.wall.curtainWallPanel.structuralGlazing\":[\"[Šţŕûçţûŕáļ ĝļážîñĝ ~~~~~~]\"],\"node.wall.curtainWallPanel.surfaceRoughness\":[\"[Šûŕƒáçé ŕöûĝĥñéšš ~~~~~]\"],\"node.wall.curtainWallPanel.top\":[\"[Ţöþ ~]\"],\"node.wall.curtainWallPanel.topRow\":[\"[Ţöþ ŕöŵ ~~]\"],\"node.wall.curtainWallPanel.uncappedMembersSitBehindTheGlazing\":[\"[Ûñçáþþéð ɱéɱƀéŕš šîţ ƀéĥîñð ţĥé ĝļážîñĝ. ~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.unitized\":[\"[Ûñîţîžéð ~~~]\"],\"node.wall.curtainWallPanel.useGlassSettingsInstead\":[\"[Ûšé ĝļášš šéţţîñĝš îñšţéáð ~~~~~~~]\"],\"node.wall.curtainWallPanel.useTheDoorOrWindowTool\":[\"[Ûšé ţĥé Ðööŕ öŕ Ŵîñðöŵ ţööļ ţö áðð áñ öþéñîñĝ ţĥŕöûĝĥ ţĥé ŵáļļ. ~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.verticalCaps\":[\"[Ṽéŕţîçáļ çáþš ~~~~]\"],\"node.wall.curtainWallPanel.verticalFrameWidth\":[\"[Ṽéŕţîçáļ ƒŕáɱé ŵîðţĥ ~~~~~~]\"],\"node.wall.curtainWallPanel.wallSystem\":[\"[Ŵáļļ šýšţéɱ ~~~]\"],\"node.wall.description\":[\"[Å šţŕáîĝĥţ öŕ çûŕṽéð ŵáļļ šéĝɱéñţ. Ĥöšţš ðööŕš, ŵîñðöŵš, ļéáñ-ţö éẋţéñšîöñš, áñð ŵáļļ-ɱöûñţéð îţéɱš. ~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.label\":[\"[Ŵáļļ ~~]\"],\"node.wall.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.wall.panel.assembly\":[\"[Åššéɱƀļý ~~~]\"],\"node.wall.panel.auto\":[\"[Åûţö ~~]\"],\"node.wall.panel.both\":[\"[Ɓöţĥ ~~]\"],\"node.wall.panel.bottom\":[\"[Ɓöţţöɱ ~~]\"],\"node.wall.panel.brickVeneer\":[\"[Ɓŕîçķ ṽéñééŕ ~~~~]\"],\"node.wall.panel.chairRail\":[\"[Çĥáîŕ ŕáîļ ~~~]\"],\"node.wall.panel.cmu\":[\"[ÇṀÛ ~]\"],\"node.wall.panel.colonial\":[\"[Çöļöñîáļ ~~~]\"],\"node.wall.panel.cove\":[\"[Çöṽé ~~]\"],\"node.wall.panel.craft\":[\"[Çŕáƒţ ~~]\"],\"node.wall.panel.crownMolding\":[\"[Çŕöŵñ ɱöļðîñĝ ~~~~]\"],\"node.wall.panel.curtainWall\":[\"[Çûŕţáîñ ŵáļļ ~~~~]\"],\"node.wall.panel.curve\":[\"[Çûŕṽé ~~]\"],\"node.wall.panel.custom\":[\"[Çûšţöɱ ~~]\"],\"node.wall.panel.customHeight\":[\"[Çûšţöɱ ĥéîĝĥţ ~~~~]\"],\"node.wall.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.wall.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.wall.panel.drywall\":[\"[Ðŕýŵáļļ ~~~]\"],\"node.wall.panel.extendsDownwardToMeetTheTerrain\":[\"[Éẋţéñðš ðöŵñŵáŕð ţö ɱééţ ţĥé ţéŕŕáîñ. Ĥéîĝĥţ áñð ţöþ šţáý ûñçĥáñĝéð. ~~~~~~~~~~~~~~~~~]\"],\"node.wall.panel.exterior\":[\"[Éẋţéŕîöŕ ~~~]\"],\"node.wall.panel.fiberCement\":[\"[Ƒîƀéŕ çéɱéñţ ~~~~]\"],\"node.wall.panel.fillToTerrain\":[\"[Ƒîļļ ţö ţéŕŕáîñ ~~~~]\"],\"node.wall.panel.flat\":[\"[Ƒļáţ ~~]\"],\"node.wall.panel.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"node.wall.panel.frameDepth\":[\"[Ƒŕáɱé ðéþţĥ ~~~]\"],\"node.wall.panel.framing\":[\"[Ƒŕáɱîñĝ ~~~]\"],\"node.wall.panel.gypsum\":[\"[Ĝýþšûɱ ~~]\"],\"node.wall.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.wall.panel.hideCode\":[\"[Ĥîðé çöðé ~~~]\"],\"node.wall.panel.icf\":[\"[ÎÇƑ ~]\"],\"node.wall.panel.interior\":[\"[Îñţéŕîöŕ ~~~]\"],\"node.wall.panel.lapSiding\":[\"[Ļáþ šîðîñĝ ~~~]\"],\"node.wall.panel.layerThicknessesFollowThe2021Irc\":[\"[Ļáýéŕ ţĥîçķñéššéš ƒöļļöŵ ţĥé 2021 ÎŔÇ áššéɱƀļý ðáţá. Ðŕáƒţîñĝ áîð, ñöţ éñĝîñééŕîñĝ — ṽéŕîƒý ŵîţĥ ţĥé áûţĥöŕîţý ĥáṽîñĝ ĵûŕîšðîçţîöñ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.panel.layered\":[\"[Ļáýéŕéð ~~~]\"],\"node.wall.panel.length\":[\"[Ļéñĝţĥ ~~]\"],\"node.wall.panel.loading\":[\"[Ļöáðîñĝ… ~~~]\"],\"node.wall.panel.modern\":[\"[Ṁöðéŕñ ~~]\"],\"node.wall.panel.none\":[\"[Ñöñé ~~]\"],\"node.wall.panel.noneSingleLayer\":[\"[Ñöñé (šîñĝļé ļáýéŕ) ~~~~~]\"],\"node.wall.panel.offset\":[\"[Öƒƒšéţ ~~]\"],\"node.wall.panel.ogee\":[\"[Öĝéé ~~]\"],\"node.wall.panel.osb\":[\"[ÖŠƁ ~]\"],\"node.wall.panel.partitionTheInteriorFinishIsApplied\":[\"[Þáŕţîţîöñ: ţĥé îñţéŕîöŕ ƒîñîšĥ îš áþþļîéð ţö ƀöţĥ ƒáçéš. ~~~~~~~~~~~~~~]\"],\"node.wall.panel.picture\":[\"[Þîçţûŕé ~~~]\"],\"node.wall.panel.plaster\":[\"[Þļášţéŕ ~~~]\"],\"node.wall.panel.plywood\":[\"[Þļýŵööð ~~~]\"],\"node.wall.panel.preset\":[\"[Þŕéšéţ ~~]\"],\"node.wall.panel.reference\":[\"[Ŕéƒéŕéñçé ~~~]\"],\"node.wall.panel.remove\":[\"[Ŕéɱöṽé ~~]\"],\"node.wall.panel.round\":[\"[Ŕöûñð ~~]\"],\"node.wall.panel.scriptedFinish\":[\"[Šçŕîþţéð ƒîñîšĥ ~~~~~]\"],\"node.wall.panel.sheathing\":[\"[Šĥéáţĥîñĝ ~~~]\"],\"node.wall.panel.shoe\":[\"[Šĥöé ~~]\"],\"node.wall.panel.sideA\":[\"[Šîðé Å ~~]\"],\"node.wall.panel.sideB\":[\"[Šîðé Ɓ ~~]\"],\"node.wall.panel.sideFace\":[\"[Šîðé \",[\"face\"],\" ~~]\"],\"node.wall.panel.skirting\":[\"[Šķîŕţîñĝ ~~~]\"],\"node.wall.panel.standard\":[\"[Šţáñðáŕð ~~~]\"],\"node.wall.panel.steelStuds\":[\"[Šţééļ šţûðš ~~~]\"],\"node.wall.panel.step\":[\"[Šţéþ ~~]\"],\"node.wall.panel.stoneVeneer\":[\"[Šţöñé ṽéñééŕ ~~~~]\"],\"node.wall.panel.stucco\":[\"[Šţûççö ~~]\"],\"node.wall.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.wall.panel.thicknessFromAssembly\":[\"[\",[\"thickness\"],\" · ƒŕöɱ áššéɱƀļý ~~~~]\"],\"node.wall.panel.top\":[\"[Ţöþ ~]\"],\"node.wall.panel.totalThickness\":[\"[Ţöţáļ ţĥîçķñéšš ~~~~~]\"],\"node.wall.panel.unverifiedPresetnote\":[\"[Ûñṽéŕîƒîéð: \",[\"presetNote\"],\" ~~~]\"],\"node.wall.panel.viewCode\":[\"[Ṽîéŵ çöðé ~~~]\"],\"node.wall.panel.wall\":[\"[Ŵáļļ ~~]\"],\"node.wall.panel.wallType\":[\"[Ŵáļļ ţýþé ~~~]\"],\"node.wall.panel.whichFaceIsOutsideIsUndetermined\":[\"[Ŵĥîçĥ ƒáçé îš öûţšîðé îš ûñðéţéŕɱîñéð (ñö ŕööɱ ðéţéçţéð öñ éîţĥéŕ šîðé) — ţĥé éẋţéŕîöŕ ļáýéŕš áŕé ðŕáŵñ öñ šîðé Ɓ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.panel.woodStuds\":[\"[Ŵööð šţûðš ~~~]\"],\"node.wall.trim.hide\":[\"[\",[\"trim\",\"select\",{\"skirting\":[\"Ĥîðé šķîŕţîñĝ\"],\"crown\":[\"Ĥîðé çŕöŵñ ɱöļðîñĝ\"],\"other\":[\"Ĥîðé çĥáîŕ ŕáîļ\"]}],\" ~~~~~~~~~~~~~]\"],\"node.wall.trim.show\":[\"[\",[\"trim\",\"select\",{\"skirting\":[\"Šĥöŵ šķîŕţîñĝ\"],\"crown\":[\"Šĥöŵ çŕöŵñ ɱöļðîñĝ\"],\"other\":[\"Šĥöŵ çĥáîŕ ŕáîļ\"]}],\" ~~~~~~~~~~~~~]\"],\"node.window.description\":[\"[Å ŵîñðöŵ çûţ îñţö á ŵáļļ. Åñîɱáţéð öþéñ/çļöšé ƒöŕ öþéñîñĝ ŵîñðöŵš. ~~~~~~~~~~~~~~~~]\"],\"node.window.label\":[\"[Ŵîñðöŵ ~~]\"],\"node.window.operation.raise\":[\"[Ŕáîšé ~~]\"],\"node.window.operation.slats\":[\"[Šļáţš ~~]\"],\"node.window.operation.slide\":[\"[Šļîðé ~~]\"],\"node.window.operation.swing\":[\"[Šŵîñĝ ~~]\"],\"node.window.operation.tilt\":[\"[Ţîļţ ~~]\"],\"node.window.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.window.panel.all\":[\"[Åļļ ~]\"],\"node.window.panel.arch\":[\"[Åŕçĥ ~~]\"],\"node.window.panel.archHeight\":[\"[Åŕçĥ Ĥéîĝĥţ ~~~]\"],\"node.window.panel.colWidths\":[\"[Çöļ Ŵîðţĥš ~~~]\"],\"node.window.panel.columns\":[\"[Çöļûɱñš ~~~]\"],\"node.window.panel.corner\":[\"[Çöŕñéŕ ~~]\"],\"node.window.panel.cornerPost\":[\"[Çöŕñéŕ þöšţ ~~~]\"],\"node.window.panel.cornerRadius\":[\"[Çöŕñéŕ Ŕáðîûš ~~~~]\"],\"node.window.panel.customThePanesMatchNoStyle\":[\"[Çûšţöɱ: ţĥé þáñéš ɱáţçĥ ñö šţýļé. ~~~~~~~~]\"],\"node.window.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.window.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.window.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.window.panel.divider\":[\"[Ðîṽîðéŕ ~~~]\"],\"node.window.panel.down\":[\"[Ðöŵñ ~~]\"],\"node.window.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.window.panel.enableSill\":[\"[Éñáƀļé Šîļļ ~~~]\"],\"node.window.panel.flipSide\":[\"[Ƒļîþ Šîðé ~~~]\"],\"node.window.panel.frame\":[\"[Ƒŕáɱé ~~]\"],\"node.window.panel.french\":[\"[Ƒŕéñçĥ ~~]\"],\"node.window.panel.fusedGlass\":[\"[Ƒûšéð ĝļášš ~~~]\"],\"node.window.panel.grid\":[\"[Ĝŕîð ~~]\"],\"node.window.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.window.panel.individual\":[\"[Îñðîṽîðûáļ ~~~]\"],\"node.window.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.window.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.window.panel.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.window.panel.openingShape\":[\"[Öþéñîñĝ Šĥáþé ~~~~]\"],\"node.window.panel.otherSide\":[\"[Öţĥéŕ šîðé ~~~]\"],\"node.window.panel.pos\":[\"[þöš ~]\"],\"node.window.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.window.panel.rect\":[\"[Ŕéçţ ~~]\"],\"node.window.panel.revealRadius\":[\"[Ŕéṽéáļ Ŕáðîûš ~~~~]\"],\"node.window.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.window.panel.rounded\":[\"[Ŕöûñðéð ~~~]\"],\"node.window.panel.rowHeights\":[\"[Ŕöŵ Ĥéîĝĥţš ~~~]\"],\"node.window.panel.rows\":[\"[Ŕöŵš ~~]\"],\"node.window.panel.sill\":[\"[Šîļļ ~~]\"],\"node.window.panel.single\":[\"[Šîñĝļé ~~]\"],\"node.window.panel.sizeIsLimitedToTheWall\":[\"[Šîžé îš ļîɱîţéð ţö ţĥé ŵáļļ, îñçļûðîñĝ çļéáŕáñçé ƒöŕ ţĥé öþéñîñĝ ƒŕáɱé. ~~~~~~~~~~~~~~~~~~]\"],\"node.window.panel.style\":[\"[Šţýļé ~~]\"],\"node.window.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.window.panel.thisSide\":[\"[Ţĥîš šîðé ~~~]\"],\"node.window.panel.topShape\":[\"[Ţöþ Šĥáþé ~~~]\"],\"node.window.panel.type\":[\"[Ţýþé ~~]\"],\"node.window.panel.unwrap\":[\"[Ûñŵŕáþ ~~]\"],\"node.window.panel.up\":[\"[Ûþ ~]\"],\"node.window.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.window.panel.window\":[\"[Ŵîñðöŵ ~~]\"],\"node.window.panel.windowType\":[\"[Ŵîñðöŵ Ţýþé ~~~]\"],\"node.window.panel.wrapTheCorner\":[\"[Ŵŕáþ ţĥé çöŕñéŕ ~~~~]\"],\"node.window.panel.wrapsTheCornerWithNamed\":[\"[Ŵŕáþš ţĥé çöŕñéŕ ŵîţĥ \",[\"partner\"],\" ~~~~~~]\"],\"node.window.panel.wrapsTheCornerWithPartner\":[\"[Ŵŕáþš ţĥé çöŕñéŕ ŵîţĥ îţš þáŕţñéŕ ~~~~~~~~~]\"],\"node.zone.description\":[\"[Å þöļýĝöñáļ šîţé žöñé (ļáŵñ, ŵáţéŕ, þáṽîñĝ) ŵîţĥ á ŢŠĻ ĝŕáðîéñţ ɱáţéŕîáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.zone.label\":[\"[Žöñé ~~]\"],\"node.zone.quantitiesPanel.enclosedRoom\":[\"[Éñçļöšéð ŕööɱ ~~~~]\"],\"node.zone.quantitiesPanel.floorSurface\":[\"[Ƒļööŕ šûŕƒáçé ~~~~]\"],\"node.zone.quantitiesPanel.footprintOnly\":[\"[Ƒööţþŕîñţ öñļý ~~~~]\"],\"node.zone.quantitiesPanel.none\":[\"[Ñöñé ~~]\"],\"node.zone.quantitiesPanel.notProven\":[\"[Ñöţ þŕöṽéñ ~~~]\"],\"node.zone.quantitiesPanel.roomQuantities\":[\"[Ŕööɱ ǫûáñţîţîéš ~~~~~]\"],\"node.zone.quantitiesPanel.topViewWithZoneEdgeDimensions\":[\"[Ţöþ ṽîéŵ ŵîţĥ žöñé éðĝé ðîɱéñšîöñš ~~~~~~~~~]\"],\"node.zone.quantitiesPanel.unit\":[\"[Ûñîţ ~~]\"],\"node.zone.quantitiesPanel.volume\":[\"[Ṽöļûɱé ~~]\"],\"node.zone.quantitiesPanel.wallSurface\":[\"[Ŵáļļ šûŕƒáçé ~~~~]\"],\"node.zone.quantitiesPanel.zoneBoundaryUnavailable\":[\"[Žöñé ƀöûñðáŕý ûñáṽáîļáƀļé ~~~~~~~]\"],\"node.zone.quantitiesPanel.zoneQuantities\":[\"[Žöñé ǫûáñţîţîéš ~~~~~]\"],\"viewer.camera.orbitLeft\":[\"[Öŕƀîţ ļéƒţ ~~~]\"],\"viewer.camera.orbitRight\":[\"[Öŕƀîţ ŕîĝĥţ ~~~]\"],\"viewer.camera.topView\":[\"[Ţöþ ṽîéŵ ~~~]\"],\"viewer.common.off\":[\"[Öƒƒ ~]\"],\"viewer.common.on\":[\"[Öñ ~]\"],\"viewer.display.camera\":[\"[Çáɱéŕá ~~]\"],\"viewer.display.colored\":[\"[Çöļöŕéð ~~~]\"],\"viewer.display.colors\":[\"[Çöļöŕš ~~]\"],\"viewer.display.edges.off\":[\"[Öƒƒ ~]\"],\"viewer.display.edges.offDetail\":[\"[Ñö éðĝé ļîñéš ~~~~]\"],\"viewer.display.edges.soft\":[\"[Šöƒţ ~~]\"],\"viewer.display.edges.softDetail\":[\"[Ƒáîñţ öûţļîñé öƒ ɱáĵöŕ çŕéášéš ~~~~~~~~]\"],\"viewer.display.edges.strong\":[\"[Šţŕöñĝ ~~]\"],\"viewer.display.edges.strongDetail\":[\"[Çŕîšþ, öþáǫûé éðĝé ļîñéš ~~~~~~]\"],\"viewer.display.edges.title\":[\"[Éðĝéš ~~]\"],\"viewer.display.monochrome\":[\"[Ṁöñöçĥŕöɱé ~~~]\"],\"viewer.display.orthographic\":[\"[Öŕţĥöĝŕáþĥîç ~~~~]\"],\"viewer.display.perspective\":[\"[Þéŕšþéçţîṽé ~~~~]\"],\"viewer.display.render.rendered\":[\"[Ŕéñðéŕéð ~~~]\"],\"viewer.display.render.renderedDetail\":[\"[Ƒûļļ áɱƀîéñţ öççļûšîöñ ~~~~~~]\"],\"viewer.display.render.solid\":[\"[Šöļîð ~~]\"],\"viewer.display.render.solidDetail\":[\"[Ƒļáţ áñð ƒášţ — ñö áɱƀîéñţ öççļûšîöñ ~~~~~~~~~]\"],\"viewer.display.render.title\":[\"[Ŕéñðéŕ ~~]\"],\"viewer.display.shadows\":[\"[Šĥáðöŵš ~~~]\"],\"viewer.display.title\":[\"[Ðîšþļáý šéţţîñĝš ~~~~~]\"],\"viewer.floorplan.alignNorth\":[\"[Åļîĝñ ṽîéŵ ţö ñöŕţĥ ~~~~~]\"],\"viewer.floorplan.empty\":[\"[Ñö ƒļööŕ þļáñš áŕé áṽáîļáƀļé ƒöŕ ţĥîš šçéñé. ~~~~~~~~~~~]\"],\"viewer.floorplan.fit\":[\"[Ƒîţ ƒļööŕ þļáñ ~~~~]\"],\"viewer.floorplan.floor\":[\"[Ƒļööŕ ~~]\"],\"viewer.floorplan.floorPlan\":[\"[Ƒļööŕ þļáñ ~~~]\"],\"viewer.floorplan.viewLabel\":[\"[\",[\"floor\"],\" 2Ð ṽîéŵ ~~]\"],\"viewer.floorplan.zoomIn\":[\"[Žööɱ îñ ~~]\"],\"viewer.floorplan.zoomOut\":[\"[Žööɱ öûţ ~~~]\"],\"viewer.header.back\":[\"[Ɓáçķ ~~]\"],\"viewer.header.levels\":[\"[Ļéṽéļš ~~]\"],\"viewer.header.rooms\":[\"[Ŕööɱš ~~]\"],\"viewer.header.selection\":[\"[Šéļéçţîöñ ~~~]\"],\"viewer.header.units\":[\"[Ûñîţš ~~]\"],\"viewer.header.untitled\":[\"[Ûñţîţļéð ~~~]\"],\"viewer.header.zones\":[\"[Žöñéš ~~]\"],\"viewer.levels.exploded\":[\"[Éẋþļöðéð ~~~]\"],\"viewer.levels.label\":[\"[Ļéṽéļš: \",[\"mode\"],\" ~~]\"],\"viewer.levels.manual\":[\"[Ṁáñûáļ ~~]\"],\"viewer.levels.solo\":[\"[Šöļö ~~]\"],\"viewer.levels.stacked\":[\"[Šţáçķéð ~~~]\"],\"viewer.stage.layout\":[\"[Ṽîéŵéŕ ļáýöûţ ~~~~]\"],\"viewer.stage.split\":[\"[Šþļîţ ~~]\"],\"viewer.theme.blueprint\":[\"[Ɓļûéþŕîñţ ~~~]\"],\"viewer.theme.mediterranean\":[\"[Ṁéðîţéŕŕáñéáñ ~~~~]\"],\"viewer.theme.night\":[\"[Ñîĝĥţ ~~]\"],\"viewer.theme.overcast\":[\"[Öṽéŕçášţ ~~~]\"],\"viewer.theme.paper\":[\"[Þáþéŕ ~~]\"],\"viewer.theme.studio\":[\"[Šţûðîö ~~]\"],\"viewer.theme.sunset\":[\"[Šûñšéţ ~~]\"],\"viewer.theme.title\":[\"[Šçéñé ţĥéɱé ~~~]\"],\"viewer.theme.twilight\":[\"[Ţŵîļîĝĥţ ~~~]\"],\"viewer.theme.verdant\":[\"[Ṽéŕðáñţ ~~~]\"],\"viewer.visibility.guides\":[\"[Ĝûîðéš ~~]\"],\"viewer.visibility.scans\":[\"[Šçáñš ~~]\"],\"viewer.visibility.title\":[\"[Ṽîšîƀîļîţý ~~~]\"],\"viewer.walkthrough.label\":[\"[Ŵáļķţĥŕöûĝĥ: \",[\"state\"],\" ~~~~]\"],\"viewer.walls.cutaway\":[\"[Çûţáŵáý ~~~]\"],\"viewer.walls.fullHeight\":[\"[Ƒûļļ ĥéîĝĥţ ~~~]\"],\"viewer.walls.label\":[\"[Ŵáļļš: \",[\"mode\"],\" ~~]\"],\"viewer.walls.low\":[\"[Ļöŵ ~]\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"app.appShell.pascalHome\":[\"[Þášçáļ ĥöɱé ~~~]\"],\"app.buildTab.addGate\":[\"[Åðð Ĝáţé ~~~]\"],\"app.buildTab.addOpenPassage\":[\"[Åðð Öþéñ Þáššáĝé ~~~~~]\"],\"app.buildTab.addToRooms\":[\"[Åðð ţö ŕööɱš ~~~]\"],\"app.buildTab.allBuildTools\":[\"[← Åļļ ƀûîļð ţööļš ~~~~]\"],\"app.buildTab.chooseGateOrOpenPassageThen\":[\"[Çĥööšé Ĝáţé öŕ Öþéñ Þáššáĝé, ţĥéñ çļîçķ îţš þöšîţîöñ öñ áñý ƒéñçé. Ƒîñð þļáçéð ĝáţéš áñð öþéñîñĝš ûñðéŕ ţĥéîŕ ƒéñçé îñ ţĥé šçéñé ĝŕáþĥ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"app.buildTab.clickALinesetToLayThe\":[\"[Çļîçķ á ļîñéšéţ ţö ļáý ţĥé ļîñé ƀéšîðé îţ. ~~~~~~~~~~]\"],\"app.buildTab.doubleGate\":[\"[Ðöûƀļé ĝáţé ~~~]\"],\"app.buildTab.featuresExtensions\":[\"[Ƒéáţûŕéš & éẋţéñšîöñš ~~~~~~]\"],\"app.buildTab.fenceFeatures\":[\"[Ƒéñçé ƒéáţûŕéš ~~~~]\"],\"app.buildTab.followLineset\":[\"[Ƒöļļöŵ ļîñéšéţ ~~~~]\"],\"app.buildTab.gate\":[\"[Ĝáţé ~~]\"],\"app.buildTab.gateStyle\":[\"[Ĝáţé šţýļé ~~~]\"],\"app.buildTab.horizontalBoards\":[\"[Ĥöŕîžöñţáļ ƀöáŕðš ~~~~~]\"],\"app.buildTab.hoverAFenceToPreviewClick\":[\"[Ĥöṽéŕ á ƒéñçé ţö þŕéṽîéŵ. Çļîçķ ţö þļáçé. Éšç çáñçéļš. Ļéáṽé ŕööɱ ƀéţŵééñ öþéñîñĝš. ~~~~~~~~~~~~~~~~~~~~]\"],\"app.buildTab.leaves\":[\"[Ļéáṽéš ~~]\"],\"app.buildTab.liquidLine\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"app.buildTab.matchFenceStyle\":[\"[Ṁáţçĥ ƒéñçé šţýļé ~~~~~]\"],\"app.buildTab.mep\":[\"[ṀÉÞ ~]\"],\"app.buildTab.off\":[\"[Öƒƒ ~]\"],\"app.buildTab.on\":[\"[Öñ ~]\"],\"app.buildTab.openRails\":[\"[Öþéñ ŕáîļš ~~~]\"],\"app.buildTab.opening\":[\"[Öþéñîñĝ ~~~]\"],\"app.buildTab.openingWidthM\":[\"[Öþéñîñĝ ŵîðţĥ (ɱ) ~~~~]\"],\"app.buildTab.outdoor\":[\"[Öûţðööŕ ~~~]\"],\"app.buildTab.picket\":[\"[Þîçķéţ ~~]\"],\"app.buildTab.roofType\":[\"[Ŕööƒ ţýþé ~~~]\"],\"app.buildTab.roomsAlreadyCreateTheirFloorAnd\":[\"[Ŕööɱš áļŕéáðý çŕéáţé ţĥéîŕ ƒļööŕ áñð çéîļîñĝ. Ûšé ţĥéšé ƒöŕ þļáţƒöŕɱš áñð öñé-öƒƒ šţŕûçţûŕé. ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"app.buildTab.searchBuildToolsAndKitchenItems\":[\"[Šéáŕçĥ ƀûîļð ţööļš áñð ķîţçĥéñ îţéɱš ~~~~~~~~~~]\"],\"app.buildTab.searchToolsFridgeSink\":[\"[Šéáŕçĥ ţööļš, ƒŕîðĝé, šîñķ… ~~~~~~~]\"],\"app.buildTab.selectACurvedWallToMatch\":[\"[Šéļéçţ á çûŕṽéð ŵáļļ ţö ɱáţçĥ îţš ŕáðîûš áñð áŕç. ~~~~~~~~~~~~]\"],\"app.buildTab.singleGate\":[\"[Šîñĝļé ĝáţé ~~~]\"],\"app.buildTab.slabCeilingColumn\":[\"[Šļáƀ, çéîļîñĝ, çöļûɱñ… ~~~~~~]\"],\"app.buildTab.solidPrivacy\":[\"[Šöļîð þŕîṽáçý ~~~~]\"],\"app.buildTab.traceALineAlongsideAnExisting\":[\"[Ţŕáçé á ļîñé áļöñĝšîðé áñ éẋîšţîñĝ ļîñéšéţ (Ƒ). ~~~~~~~~~~~~]\"],\"app.buildTab.verticalSlats\":[\"[Ṽéŕţîçáļ šļáţš ~~~~]\"],\"app.editorNavbar.allProjects\":[\"[Åļļ þŕöĵéçţš ~~~~]\"],\"app.editorNavbar.preview\":[\"[Þŕéṽîéŵ ~~~]\"],\"app.editorNavbar.projectName\":[\"[Þŕöĵéçţ ñáɱé ~~~~]\"],\"app.editorNavbar.renameProject\":[\"[Ŕéñáɱé þŕöĵéçţ ~~~~]\"],\"app.editorNavbar.share\":[\"[Šĥáŕé ~~]\"],\"app.kitchenBrowser.addLabel\":[\"[Åðð \",[\"label\"],\" ~]\"],\"app.kitchenBrowser.addToKitchen\":[\"[Åðð ţö ķîţçĥéñ ~~~~]\"],\"app.kitchenBrowser.chooseAnItemThenClickTo\":[\"[Çĥööšé áñ îţéɱ, ţĥéñ çļîçķ ţö þļáçé îţ. Åþþļîáñçéš îñçļûðé ţĥéîŕ çáƀîñéţŕý. ~~~~~~~~~~~~~~~~~~~]\"],\"app.kitchenBrowser.findInThisProjectLength\":[\"[Ƒîñð îñ ţĥîš þŕöĵéçţ · \",[\"length\"],\" ~~~~~~]\"],\"app.kitchenBrowser.findName\":[\"[Ƒîñð \",[\"name\"],\" ~~]\"],\"app.kitchenBrowser.groupAdd\":[\"[Ķîţçĥéñ · Åðð ~~~]\"],\"app.kitchenBrowser.groupInThisProject\":[\"[Ķîţçĥéñ · Îñ ţĥîš þŕöĵéçţ ~~~~~~]\"],\"app.kitchenBrowser.kitchenCabinet\":[\"[Ķîţçĥéñ çáƀîñéţ ~~~~~]\"],\"app.kitchenBrowser.noMatchingKitchenItemsPlacedYet\":[\"[Ñö ɱáţçĥîñĝ ķîţçĥéñ îţéɱš þļáçéð ýéţ. ~~~~~~~~~~]\"],\"app.kitchenBrowser.selectAndShowInScene\":[\"[Šéļéçţ áñð šĥöŵ îñ šçéñé ~~~~~~]\"],\"app.lib.buildPalette.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"app.lib.buildPalette.column\":[\"[Çöļûɱñ ~~]\"],\"app.lib.buildPalette.door\":[\"[Ðööŕ ~~]\"],\"app.lib.buildPalette.duct\":[\"[Ðûçţ ~~]\"],\"app.lib.buildPalette.dwvPipe\":[\"[ÐŴṼ Þîþé ~~~]\"],\"app.lib.buildPalette.elevator\":[\"[Éļéṽáţöŕ ~~~]\"],\"app.lib.buildPalette.fence\":[\"[Ƒéñçé ~~]\"],\"app.lib.buildPalette.hvacUnit\":[\"[ĤṼÅÇ Ûñîţ ~~~]\"],\"app.lib.buildPalette.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"app.lib.buildPalette.lineset\":[\"[Ļîñéšéţ ~~~]\"],\"app.lib.buildPalette.liquidLine\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"app.lib.buildPalette.mep\":[\"[ṀÉÞ ~]\"],\"app.lib.buildPalette.register\":[\"[Ŕéĝîšţéŕ ~~~]\"],\"app.lib.buildPalette.roof\":[\"[Ŕööƒ ~~]\"],\"app.lib.buildPalette.shelf\":[\"[Šĥéļƒ ~~]\"],\"app.lib.buildPalette.slab\":[\"[Šļáƀ ~~]\"],\"app.lib.buildPalette.spawnPoint\":[\"[Šþáŵñ þöîñţ ~~~]\"],\"app.lib.buildPalette.stairs\":[\"[Šţáîŕš ~~]\"],\"app.lib.buildPalette.terrace\":[\"[Ţéŕŕáçé ~~~]\"],\"app.lib.buildPalette.terrain\":[\"[Ţéŕŕáîñ ~~~]\"],\"app.lib.buildPalette.wall\":[\"[Ŵáļļ ~~]\"],\"app.lib.buildPalette.window\":[\"[Ŵîñðöŵ ~~]\"],\"app.lib.buildPanelModel.addFitting\":[\"[Åðð Ƒîţţîñĝ ~~~]\"],\"app.lib.buildPanelModel.addGate\":[\"[Åðð Ĝáţé ~~~]\"],\"app.lib.buildPanelModel.addOpenPassage\":[\"[Åðð Öþéñ Þáššáĝé ~~~~~]\"],\"app.lib.buildPanelModel.addTrap\":[\"[Åðð Ţŕáþ ~~~]\"],\"app.lib.buildPanelModel.build\":[\"[Ɓûîļð ~~]\"],\"app.lib.buildPanelModel.createFrom\":[\"[Çŕéáţé ƒŕöɱ ~~~]\"],\"app.lib.buildPanelModel.drawTheRoofFootprintWithTwo\":[\"[Ðŕáŵ ţĥé ŕööƒ ƒööţþŕîñţ ŵîţĥ ţŵö çöŕñéŕ çļîçķš. ~~~~~~~~~~~~]\"],\"app.lib.buildPanelModel.duct\":[\"[Ðûçţ ~~]\"],\"app.lib.buildPanelModel.dwvPipe\":[\"[ÐŴṼ Þîþé ~~~]\"],\"app.lib.buildPanelModel.featuresExtensions\":[\"[Ƒéáţûŕéš & éẋţéñšîöñš ~~~~~~]\"],\"app.lib.buildPanelModel.fence\":[\"[Ƒéñçé ~~]\"],\"app.lib.buildPanelModel.followLineset\":[\"[Ƒöļļöŵ ļîñéšéţ ~~~~]\"],\"app.lib.buildPanelModel.gatesOpenings\":[\"[Ĝáţéš & öþéñîñĝš ~~~~]\"],\"app.lib.buildPanelModel.hoverARoomToPreviewIts\":[\"[Ĥöṽéŕ á ŕööɱ ţö þŕéṽîéŵ îţš ƀöûñðáŕý, ţĥéñ çļîçķ ţö þļáçé. ~~~~~~~~~~~~~~]\"],\"app.lib.buildPanelModel.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"app.lib.buildPanelModel.mep\":[\"[ṀÉÞ ~]\"],\"app.lib.buildPanelModel.modularCabinet\":[\"[Ṁöðûļáŕ Çáƀîñéţ ~~~~~]\"],\"app.lib.buildPanelModel.off\":[\"[Öƒƒ ~]\"],\"app.lib.buildPanelModel.on\":[\"[Öñ ~]\"],\"app.lib.buildPanelModel.painting\":[\"[Þáîñţîñĝ ~~~]\"],\"app.lib.buildPanelModel.roof\":[\"[Ŕööƒ ~~]\"],\"app.lib.buildPanelModel.roofType\":[\"[Ŕööƒ ţýþé ~~~]\"],\"app.lib.buildPanelModel.toolCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ţööļ\"],\"other\":[\"#\",\" ţööļš\"]}],\" ~~~]\"],\"app.lib.buildTabState.conical\":[\"[Çöñîçáļ ~~~]\"],\"app.lib.buildTabState.draw\":[\"[Ðŕáŵ ~~]\"],\"app.lib.buildTabState.dutch\":[\"[Ðûţçĥ ~~]\"],\"app.lib.buildTabState.flat\":[\"[Ƒļáţ ~~]\"],\"app.lib.buildTabState.gable\":[\"[Ĝáƀļé ~~]\"],\"app.lib.buildTabState.gambrel\":[\"[Ĝáɱƀŕéļ ~~~]\"],\"app.lib.buildTabState.hip\":[\"[Ĥîþ ~]\"],\"app.lib.buildTabState.mansard\":[\"[Ṁáñšáŕð ~~~]\"],\"app.lib.buildTabState.room\":[\"[Ŕööɱ ~~]\"],\"app.lib.buildTabState.shed\":[\"[Šĥéð ~~]\"],\"app.lib.buildTabState.wall\":[\"[Ŵáļļ ~~]\"],\"app.sharePanel.anyoneWithTheLinkCanView\":[\"[Åñýöñé ŵîţĥ ţĥé ļîñķ çáñ ṽîéŵ ţĥîš þŕöĵéçţ. Ţĥéý çáññöţ éðîţ îţ. ~~~~~~~~~~~~~~~~]\"],\"app.sharePanel.copied\":[\"[Çöþîéð ~~]\"],\"app.sharePanel.copy\":[\"[Çöþý ~~]\"],\"app.sharePanel.couldNotReadTheSharingState\":[\"[Çöûļð ñöţ ŕéáð ţĥé šĥáŕîñĝ šţáţé. ~~~~~~~~~]\"],\"app.sharePanel.couldNotTurnOffThePublic\":[\"[Çöûļð ñöţ ţûŕñ öƒƒ ţĥé þûƀļîç ļîñķ. ~~~~~~~~~]\"],\"app.sharePanel.couldNotTurnOnThePublic\":[\"[Çöûļð ñöţ ţûŕñ öñ ţĥé þûƀļîç ļîñķ. ~~~~~~~~~]\"],\"app.sharePanel.embedCode\":[\"[Éɱƀéð çöðé ~~~]\"],\"app.sharePanel.embedLink\":[\"[Éɱƀéð ļîñķ ~~~]\"],\"app.sharePanel.hideControls\":[\"[Ĥîðé çöñţŕöļš ~~~~]\"],\"app.sharePanel.link\":[\"[Ļîñķ ~~]\"],\"app.sharePanel.onlyThe3dViewNoHeader\":[\"[Öñļý ţĥé 3Ð ṽîéŵ, ñö ĥéáðéŕ öŕ ţööļƀáŕ. ~~~~~~~~~]\"],\"app.sharePanel.open\":[\"[Öþéñ ~~]\"],\"app.sharePanel.publicLink\":[\"[Þûƀļîç ļîñķ ~~~]\"],\"app.sharePanel.shareProject\":[\"[Šĥáŕé þŕöĵéçţ ~~~~]\"],\"app.viewerToolbar.automaticDimensions\":[\"[Åûţöɱáţîç ðîɱéñšîöñš ~~~~~~]\"],\"app.viewerToolbar.camera\":[\"[Çáɱéŕá ~~]\"],\"app.viewerToolbar.cleanPlanDimensionsAppearWithSelection\":[\"[Çļéáñ þļáñ; ðîɱéñšîöñš áþþéáŕ ŵîţĥ šéļéçţîöñ ~~~~~~~~~~~~]\"],\"app.viewerToolbar.collapseSidebar\":[\"[Çöļļáþšé šîðéƀáŕ ~~~~~]\"],\"app.viewerToolbar.crispOpaqueEdgeLines\":[\"[Çŕîšþ, öþáǫûé éðĝé ļîñéš ~~~~~~]\"],\"app.viewerToolbar.cutaway\":[\"[Çûţáŵáý ~~~]\"],\"app.viewerToolbar.default\":[\"[Ðéƒáûļţ ~~~]\"],\"app.viewerToolbar.display\":[\"[Ðîšþļáý ~~~]\"],\"app.viewerToolbar.displaySettings\":[\"[Ðîšþļáý šéţţîñĝš ~~~~~]\"],\"app.viewerToolbar.doorWindowMarks\":[\"[Ðööŕ/ŵîñðöŵ ɱáŕķš ~~~~~]\"],\"app.viewerToolbar.edges\":[\"[Éðĝéš ~~]\"],\"app.viewerToolbar.enterVr\":[\"[Éñţéŕ ṼŔ ~~~]\"],\"app.viewerToolbar.exitVr\":[\"[Éẋîţ ṼŔ ~~]\"],\"app.viewerToolbar.expandSidebar\":[\"[Éẋþáñð šîðéƀáŕ ~~~~]\"],\"app.viewerToolbar.expert\":[\"[Éẋþéŕţ ~~]\"],\"app.viewerToolbar.exploded\":[\"[Éẋþļöðéð ~~~]\"],\"app.viewerToolbar.faceOfStud\":[\"[Ƒáçé öƒ šţûð ~~~]\"],\"app.viewerToolbar.faintOutlineOfMajorCreases\":[\"[Ƒáîñţ öûţļîñé öƒ ɱáĵöŕ çŕéášéš ~~~~~~~~]\"],\"app.viewerToolbar.feetInches\":[\"[Ƒééţ & îñçĥéš ~~~]\"],\"app.viewerToolbar.finishedFaces\":[\"[Ƒîñîšĥéð ƒáçéš ~~~~]\"],\"app.viewerToolbar.flatAndFastNoAmbientOcclusion\":[\"[Ƒļáţ áñð ƒášţ — ñö áɱƀîéñţ öççļûšîöñ ~~~~~~~~~]\"],\"app.viewerToolbar.floorPlanAnnotations\":[\"[Ƒļööŕ þļáñ áññöţáţîöñš ~~~~~~]\"],\"app.viewerToolbar.floorPlanMode\":[\"[Ƒļööŕ þļáñ ɱöðé ~~~~]\"],\"app.viewerToolbar.fullAmbientOcclusion\":[\"[Ƒûļļ áɱƀîéñţ öççļûšîöñ ~~~~~~]\"],\"app.viewerToolbar.fullDocumentationAndAnnotationControls\":[\"[Ƒûļļ ðöçûɱéñţáţîöñ áñð áññöţáţîöñ çöñţŕöļš ~~~~~~~~~~~~]\"],\"app.viewerToolbar.fullHeight\":[\"[Ƒûļļ ĥéîĝĥţ ~~~]\"],\"app.viewerToolbar.fullWallThickness\":[\"[Ƒûļļ ŵáļļ ţĥîçķñéšš ~~~~~~]\"],\"app.viewerToolbar.grid\":[\"[Ĝŕîð ~~]\"],\"app.viewerToolbar.levelsMode\":[\"[Ļéṽéļš: \",[\"mode\"],\" ~~]\"],\"app.viewerToolbar.low\":[\"[Ļöŵ ~]\"],\"app.viewerToolbar.magneticSnap\":[\"[Ṁáĝñéţîç šñáþ ~~~~]\"],\"app.viewerToolbar.manual\":[\"[Ṁáñûáļ ~~]\"],\"app.viewerToolbar.manualDimensions\":[\"[Ṁáñûáļ ðîɱéñšîöñš ~~~~~]\"],\"app.viewerToolbar.measurements\":[\"[Ṁéášûŕéɱéñţš ~~~~]\"],\"app.viewerToolbar.meters\":[\"[Ṁéţéŕš ~~]\"],\"app.viewerToolbar.millimeters\":[\"[Ṁîļļîɱéţéŕš ~~~~]\"],\"app.viewerToolbar.n3dMeasurements\":[\"[3Ð ɱéášûŕéɱéñţš ~~~~]\"],\"app.viewerToolbar.noEdgeLines\":[\"[Ñö éðĝé ļîñéš ~~~~]\"],\"app.viewerToolbar.off\":[\"[Öƒƒ ~]\"],\"app.viewerToolbar.on\":[\"[Öñ ~]\"],\"app.viewerToolbar.orthographic\":[\"[Öŕţĥöĝŕáþĥîç ~~~~]\"],\"app.viewerToolbar.perspective\":[\"[Þéŕšþéçţîṽé ~~~~]\"],\"app.viewerToolbar.preview\":[\"[Þŕéṽîéŵ ~~~]\"],\"app.viewerToolbar.previewMode\":[\"[Þŕéṽîéŵ ɱöðé ~~~~]\"],\"app.viewerToolbar.render\":[\"[Ŕéñðéŕ ~~]\"],\"app.viewerToolbar.rendered\":[\"[Ŕéñðéŕéð ~~~]\"],\"app.viewerToolbar.roomLabels\":[\"[Ŕööɱ ļáƀéļš ~~~]\"],\"app.viewerToolbar.sceneTheme\":[\"[Šçéñé ţĥéɱé ~~~]\"],\"app.viewerToolbar.shadows\":[\"[Šĥáðöŵš ~~~]\"],\"app.viewerToolbar.singleWallAxis\":[\"[Šîñĝļé ŵáļļ áẋîš ~~~~~]\"],\"app.viewerToolbar.soft\":[\"[Šöƒţ ~~]\"],\"app.viewerToolbar.solid\":[\"[Šöļîð ~~]\"],\"app.viewerToolbar.solo\":[\"[Šöļö ~~]\"],\"app.viewerToolbar.stack\":[\"[Šţáçķ ~~]\"],\"app.viewerToolbar.stairAnnotations\":[\"[Šţáîŕ áññöţáţîöñš ~~~~~]\"],\"app.viewerToolbar.strong\":[\"[Šţŕöñĝ ~~]\"],\"app.viewerToolbar.structuralCoreFace\":[\"[Šţŕûçţûŕáļ çöŕé ƒáçé ~~~~~~]\"],\"app.viewerToolbar.structuralGridsColumnCenters\":[\"[Šţŕûçţûŕáļ ĝŕîðš & çöļûɱñ çéñţéŕš ~~~~~~~~~]\"],\"app.viewerToolbar.translucent\":[\"[Ţŕáñšļûçéñţ ~~~~]\"],\"app.viewerToolbar.units\":[\"[Ûñîţš ~~]\"],\"app.viewerToolbar.walkthrough\":[\"[Ŵáļķţĥŕöûĝĥ ~~~~]\"],\"app.viewerToolbar.wallCenterline\":[\"[Ŵáļļ çéñţéŕļîñé ~~~~~]\"],\"app.viewerToolbar.wallDimensions\":[\"[Ŵáļļ ðîɱéñšîöñš ~~~~~]\"],\"app.viewerToolbar.wallsLabel\":[\"[Ŵáļļš: \",[\"label\"],\" ~~]\"],\"core.level.basement\":[\"[Ɓášéɱéñţ ~~~]\"],\"core.level.basementNumber\":[\"[Ɓášéɱéñţ \",[\"number\"],\" ~~~]\"],\"core.level.floorNumber\":[\"[Ƒļööŕ \",[\"number\"],\" ~~]\"],\"core.level.groundFloor\":[\"[Ĝŕöûñð ƒļööŕ ~~~~]\"],\"editor.actionMenu.cameraActions.orbitLeft\":[\"[Öŕƀîţ Ļéƒţ ~~~]\"],\"editor.actionMenu.cameraActions.orbitRight\":[\"[Öŕƀîţ Ŕîĝĥţ ~~~]\"],\"editor.actionMenu.cameraActions.topView\":[\"[Ţöþ Ṽîéŵ ~~~]\"],\"editor.actionMenu.controlModes.delete\":[\"[Ðéļéţé ~~]\"],\"editor.actionMenu.controlModes.select\":[\"[Šéļéçţ ~~]\"],\"editor.actionMenu.followPascalPill.resumeFollowing\":[\"[Ŕéšûɱé ƒöļļöŵîñĝ ~~~~~]\"],\"editor.actionMenu.followPascalToggle.off\":[\"[Ƒöļļöŵ Þášçáļ: Öƒƒ ~~~~~]\"],\"editor.actionMenu.followPascalToggle.on\":[\"[Ƒöļļöŵ Þášçáļ: Öñ ~~~~~]\"],\"editor.actionMenu.furnishTools.appliance\":[\"[Åþþļîáñçé ~~~]\"],\"editor.actionMenu.furnishTools.bathroom\":[\"[Ɓáţĥŕööɱ ~~~]\"],\"editor.actionMenu.furnishTools.furniture\":[\"[Ƒûŕñîţûŕé ~~~]\"],\"editor.actionMenu.furnishTools.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"editor.actionMenu.furnishTools.outdoor\":[\"[Öûţðööŕ ~~~]\"],\"editor.actionMenu.measurementControl.angle\":[\"[Åñĝļé ~~]\"],\"editor.actionMenu.measurementControl.angularDimension\":[\"[Åñĝûļáŕ ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.arcLength\":[\"[Åŕç ļéñĝţĥ ~~~]\"],\"editor.actionMenu.measurementControl.area\":[\"[Åŕéá ~~]\"],\"editor.actionMenu.measurementControl.centerMark\":[\"[Çéñţéŕ ɱáŕķ ~~~]\"],\"editor.actionMenu.measurementControl.chordDimension\":[\"[Çĥöŕð ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.continuousDimension\":[\"[Çöñţîñûöûš ðîɱéñšîöñ ~~~~~~]\"],\"editor.actionMenu.measurementControl.coordinateDimensions\":[\"[Çööŕðîñáţé ðîɱéñšîöñš ~~~~~~]\"],\"editor.actionMenu.measurementControl.diameterDimension\":[\"[Ðîáɱéţéŕ ðîɱéñšîöñ ~~~~~~]\"],\"editor.actionMenu.measurementControl.distance\":[\"[Ðîšţáñçé ~~~]\"],\"editor.actionMenu.measurementControl.floorPlan\":[\"[Ƒļööŕ þļáñ ~~~]\"],\"editor.actionMenu.measurementControl.linearDimension\":[\"[Ļîñéáŕ ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.measureSelectedlabel\":[\"[Ṁéášûŕé: \",[\"selectedLabel\"],\" ~~~]\"],\"editor.actionMenu.measurementControl.measurementOptions\":[\"[Ṁéášûŕéɱéñţ öþţîöñš ~~~~~~]\"],\"editor.actionMenu.measurementControl.measurementType\":[\"[Ṁéášûŕéɱéñţ ţýþé ~~~~~]\"],\"editor.actionMenu.measurementControl.perimeter\":[\"[Þéŕîɱéţéŕ ~~~]\"],\"editor.actionMenu.measurementControl.radiusDimension\":[\"[Ŕáðîûš ðîɱéñšîöñ ~~~~~]\"],\"editor.actionMenu.measurementControl.smart\":[\"[Šɱáŕţ ~~]\"],\"editor.actionMenu.measurementControl.volume\":[\"[Ṽöļûɱé ~~]\"],\"editor.actionMenu.pointAskButton.pointAndAsk\":[\"[Þöîñţ áñð ášķ ~~~~]\"],\"editor.actionMenu.pointAskButton.pointAndAskC\":[\"[Þöîñţ áñð ášķ (Ç) ~~~~]\"],\"editor.actionMenu.pointAskButton.pointAndAskWorksInThe\":[\"[Þöîñţ áñð ášķ ŵöŕķš îñ ţĥé 3Ð ṽîéŵ ~~~~~~~~]\"],\"editor.actionMenu.structureTools.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.actionMenu.structureTools.column\":[\"[Çöļûɱñ ~~]\"],\"editor.actionMenu.structureTools.door\":[\"[Ðööŕ ~~]\"],\"editor.actionMenu.structureTools.duct\":[\"[Ðûçţ ~~]\"],\"editor.actionMenu.structureTools.ductFitting\":[\"[Ðûçţ Ƒîţţîñĝ ~~~~]\"],\"editor.actionMenu.structureTools.dwvPipe\":[\"[ÐŴṼ Þîþé ~~~]\"],\"editor.actionMenu.structureTools.elevator\":[\"[Éļéṽáţöŕ ~~~]\"],\"editor.actionMenu.structureTools.fence\":[\"[Ƒéñçé ~~]\"],\"editor.actionMenu.structureTools.gableRoof\":[\"[Ĝáƀļé Ŕööƒ ~~~]\"],\"editor.actionMenu.structureTools.hvacUnit\":[\"[ĤṼÅÇ Ûñîţ ~~~]\"],\"editor.actionMenu.structureTools.lineset\":[\"[Ļîñéšéţ ~~~]\"],\"editor.actionMenu.structureTools.liquidLine\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"editor.actionMenu.structureTools.pipeFitting\":[\"[Þîþé Ƒîţţîñĝ ~~~~]\"],\"editor.actionMenu.structureTools.register\":[\"[Ŕéĝîšţéŕ ~~~]\"],\"editor.actionMenu.structureTools.shelf\":[\"[Šĥéļƒ ~~]\"],\"editor.actionMenu.structureTools.slab\":[\"[Šļáƀ ~~]\"],\"editor.actionMenu.structureTools.spawnPoint\":[\"[Šþáŵñ Þöîñţ ~~~]\"],\"editor.actionMenu.structureTools.stairs\":[\"[Šţáîŕš ~~]\"],\"editor.actionMenu.structureTools.trap\":[\"[Ţŕáþ ~~]\"],\"editor.actionMenu.structureTools.wall\":[\"[Ŵáļļ ~~]\"],\"editor.actionMenu.structureTools.window\":[\"[Ŵîñðöŵ ~~]\"],\"editor.actionMenu.structureTools.zone\":[\"[Žöñé ~~]\"],\"editor.actionMenu.viewToggles.deleteGuideImage\":[\"[Ðéļéţé ĝûîðé îɱáĝé ~~~~~]\"],\"editor.actionMenu.viewToggles.deleteScan\":[\"[Ðéļéţé šçáñ ~~~]\"],\"editor.actionMenu.viewToggles.guideCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ĝûîðé îɱáĝé öñ ţĥîš ļéṽéļ\"],\"other\":[\"#\",\" ĝûîðé îɱáĝéš öñ ţĥîš ļéṽéļ\"]}],\" ~~~~~~~~~~~~~]\"],\"editor.actionMenu.viewToggles.guideImageNumber\":[\"[Ĝûîðé îɱáĝé \",[\"number\"],\" ~~~]\"],\"editor.actionMenu.viewToggles.guideImageSettings\":[\"[Ĝûîðé îɱáĝé šéţţîñĝš ~~~~~~]\"],\"editor.actionMenu.viewToggles.guideImages\":[\"[Ĝûîðé îɱáĝéš ~~~~]\"],\"editor.actionMenu.viewToggles.guides\":[\"[Ĝûîðéš ~~]\"],\"editor.actionMenu.viewToggles.guidesHidden\":[\"[Ĝûîðéš: Ĥîððéñ ~~~~]\"],\"editor.actionMenu.viewToggles.guidesVisible\":[\"[Ĝûîðéš: Ṽîšîƀļé ~~~~]\"],\"editor.actionMenu.viewToggles.hideGuideImages\":[\"[Ĥîðé ĝûîðé îɱáĝéš ~~~~~]\"],\"editor.actionMenu.viewToggles.hideReferenceFloor\":[\"[Ĥîðé ŕéƒéŕéñçé ƒļööŕ ~~~~~~]\"],\"editor.actionMenu.viewToggles.hideScans\":[\"[Ĥîðé šçáñš ~~~]\"],\"editor.actionMenu.viewToggles.levelsBelow\":[\"[\",[\"count\"],\" ƀéļöŵ ~~]\"],\"editor.actionMenu.viewToggles.noLowerFloorAvailable\":[\"[Ñö ļöŵéŕ ƒļööŕ áṽáîļáƀļé. ~~~~~~~]\"],\"editor.actionMenu.viewToggles.opacity\":[\"[Öþáçîţý ~~~]\"],\"editor.actionMenu.viewToggles.referenceFloor\":[\"[Ŕéƒéŕéñçé ƒļööŕ ~~~~~]\"],\"editor.actionMenu.viewToggles.referenceFloorSelectedlevelname\":[\"[Ŕéƒéŕéñçé ƒļööŕ: \",[\"selectedLevelName\"],\" ~~~~~]\"],\"editor.actionMenu.viewToggles.referenceFloorSettings\":[\"[Ŕéƒéŕéñçé ƒļööŕ šéţţîñĝš ~~~~~~~]\"],\"editor.actionMenu.viewToggles.referenceSettings\":[\"[Ŕéƒéŕéñçé šéţţîñĝš ~~~~~~]\"],\"editor.actionMenu.viewToggles.references\":[\"[Ŕéƒéŕéñçéš ~~~]\"],\"editor.actionMenu.viewToggles.referencesEmpty\":[\"[Ûþļöáð ĜĻƁ ɱéšĥéš áš šçáñ ŕéƒéŕéñçéš öŕ ƀļûéþŕîñţ îɱáĝéš áš ĝûîðé ŕéƒéŕéñçéš. ~~~~~~~~~~~~~~~~~~~~]\"],\"editor.actionMenu.viewToggles.referencesHidden\":[\"[Ŕéƒéŕéñçéš: Ĥîððéñ ~~~~~]\"],\"editor.actionMenu.viewToggles.referencesVisible\":[\"[Ŕéƒéŕéñçéš: Ṽîšîƀļé ~~~~~~]\"],\"editor.actionMenu.viewToggles.riserDiagram\":[\"[Ŕîšéŕ ðîáĝŕáɱ ~~~~]\"],\"editor.actionMenu.viewToggles.scanCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" šçáñ öñ ţĥîš ļéṽéļ\"],\"other\":[\"#\",\" šçáñš öñ ţĥîš ļéṽéļ\"]}],\" ~~~~~~~~~~]\"],\"editor.actionMenu.viewToggles.scanNumber\":[\"[Šçáñ \",[\"number\"],\" ~~]\"],\"editor.actionMenu.viewToggles.scanSettings\":[\"[Šçáñ šéţţîñĝš ~~~~]\"],\"editor.actionMenu.viewToggles.scans\":[\"[Šçáñš ~~]\"],\"editor.actionMenu.viewToggles.scansHidden\":[\"[Šçáñš: Ĥîððéñ ~~~~]\"],\"editor.actionMenu.viewToggles.scansVisible\":[\"[Šçáñš: Ṽîšîƀļé ~~~~]\"],\"editor.actionMenu.viewToggles.showGuideImages\":[\"[Šĥöŵ ĝûîðé îɱáĝéš ~~~~~]\"],\"editor.actionMenu.viewToggles.showReferenceFloor\":[\"[Šĥöŵ ŕéƒéŕéñçé ƒļööŕ ~~~~~~]\"],\"editor.actionMenu.viewToggles.showScans\":[\"[Šĥöŵ šçáñš ~~~]\"],\"editor.actionMenu.viewToggles.uploadScanOrGuideImage\":[\"[Ûþļöáð šçáñ öŕ ĝûîðé îɱáĝé ~~~~~~~]\"],\"editor.backToHome\":[\"[Ɓáçķ ţö ĥöɱé ~~~]\"],\"editor.buildPanel.advanced\":[\"[Åðṽáñçéð ~~~]\"],\"editor.buildPanel.rooms.hint\":[\"[ŵáļļš · ƒļööŕ · çéîļîñĝ ~~~~~~]\"],\"editor.buildPanel.rooms.idle\":[\"[Þîçķ á šĥáþé ţö šţáŕţ. Éṽéŕý ŕööɱ ƀŕîñĝš îţš öŵñ ŵáļļš, ƒļööŕ áñð çéîļîñĝ. ~~~~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.polygon.caption\":[\"[\",[\"lead\"],\" ţĥéñ ţĥé ƒîŕšţ öñé áĝáîñ ţö çļöšé. Ƒöŕ Ļ-šĥáþéš áñð áñĝļéð ŕööɱš. ~~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.polygon.label\":[\"[Þöļýĝöñ ~~~]\"],\"editor.buildPanel.rooms.polygon.lead\":[\"[Çļîçķ éáçĥ çöŕñéŕ, ~~~~~]\"],\"editor.buildPanel.rooms.polygon.title\":[\"[Þöļýĝöñ ŕööɱ ~~~~]\"],\"editor.buildPanel.rooms.rectangle.caption\":[\"[\",[\"lead\"],\" öñ ţĥé ĝŕîð. Ŵáļļš, ƒļööŕ áñð çéîļîñĝ áŕé çŕéáţéð ţöĝéţĥéŕ. ~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.rectangle.label\":[\"[Ŕéçţáñĝļé ~~~]\"],\"editor.buildPanel.rooms.rectangle.lead\":[\"[Çļîçķ ţŵö çöŕñéŕš ~~~~~]\"],\"editor.buildPanel.rooms.rectangle.title\":[\"[Ŕéçţáñĝļé ŕööɱ ~~~~]\"],\"editor.buildPanel.rooms.title\":[\"[Ŕööɱš ~~]\"],\"editor.buildPanel.rooms.walls.caption\":[\"[\",[\"lead\"],\" Çļöšé á ļööþ áñð îţ ƀéçöɱéš á ŕööɱ; ļéáṽé îţ öþéñ ƒöŕ þáŕţîţîöñš. ~~~~~~~~~~~~~~~~]\"],\"editor.buildPanel.rooms.walls.label\":[\"[Ŵáļļš ~~]\"],\"editor.buildPanel.rooms.walls.lead\":[\"[Ðŕáŵ öñé ŵáļļ áţ á ţîɱé. ~~~~~~]\"],\"editor.buildPanel.rooms.walls.title\":[\"[Ŵáļļš ~~]\"],\"editor.cameraControlsHint\":[\"[Çáɱéŕá çöñţŕöļš ĥîñţ ~~~~~~]\"],\"editor.cameraHint.pan\":[\"[Þáñ ~]\"],\"editor.cameraHint.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.cameraHint.zoom\":[\"[Žööɱ ~~]\"],\"editor.controls.finishSwatch.ariaLabel\":[[\"label\"],\": \",[\"finish\"]],\"editor.controls.finishSwatch.default\":[\"[Ðéƒáûļţ ~~~]\"],\"editor.dismiss\":[\"[Ðîšɱîšš ~~~]\"],\"editor.dismissCameraControlsHint\":[\"[Ðîšɱîšš çáɱéŕá çöñţŕöļš ĥîñţ ~~~~~~~~]\"],\"editor.expandSidebar\":[\"[Éẋþáñð šîðéƀáŕ ~~~~]\"],\"editor.floatingActionMenu.axis\":[\"[Åẋîš ~~]\"],\"editor.floatingActionMenu.axis2\":[\"[⌥ áẋîš ~~]\"],\"editor.floatingActionMenu.noEquipment\":[\"[⚠ ñö éǫûîþɱéñţ ~~~~]\"],\"editor.floatingActionMenu.rTRotate\":[\"[Ŕ/Ţ ŕöţáţé ~~~]\"],\"editor.floatingActionMenu.registerCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕéĝîšţéŕ\"],\"other\":[\"#\",\" ŕéĝîšţéŕš\"]}],\" ~~~~~~]\"],\"editor.floatingActionMenu.runCount\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕûñ\"],\"other\":[\"#\",\" ŕûñš\"]}],\" ~~~]\"],\"editor.floatingActionMenu.system\":[\"[Šýšţéɱ ~~]\"],\"editor.floorFootprint.area\":[\"[Ƒļööŕ áŕéá ~~~]\"],\"editor.floorFootprint.room\":[\"[\",[\"room\"],\" ƒļööŕ ~~]\"],\"editor.floorFootprint.shared\":[\"[Šĥáŕéð ƒļööŕ ~~~~]\"],\"editor.helpers.buildingHelper.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.helpers.buildingHelper.placeBuilding\":[\"[Þļáçé ƀûîļðîñĝ ~~~~]\"],\"editor.helpers.buildingHelper.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.helpers.contextualHelperPanel.cancelPlacement\":[\"[Çáñçéļ þļáçéɱéñţ ~~~~~]\"],\"editor.helpers.contextualHelperPanel.continuationClickOrPressCTo\":[\"[Çöñţîñûáţîöñ — çļîçķ öŕ þŕéšš Ç ţö çýçļé ~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.continuationLabel\":[\"[Çöñţîñûáţîöñ: \",[\"label\"],\" ~~~~]\"],\"editor.helpers.contextualHelperPanel.dragToDrawFence\":[\"[Ðŕáĝ ţö ðŕáŵ ƒéñçé ~~~~~]\"],\"editor.helpers.contextualHelperPanel.eraseScope\":[\"[Éŕášé: \",[\"scope\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.eraseScopeClickOrPressShift\":[\"[Éŕášé šçöþé — çļîçķ öŕ þŕéšš Šĥîƒţ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.eraseScopeLabel\":[\"[Éŕášé šçöþé: \",[\"scope\"],\" ~~~]\"],\"editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT\":[\"[Ƒéñçé ţýþé — çļîçķ öŕ þŕéšš Ţ ţö šŵîţçĥ ƀéţŵééñ šţŕáîĝĥţ, çûŕṽéð áñð ƒŕééĥáñð ~~~~~~~~~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.fewerShortcuts\":[\"[Ƒéŵéŕ šĥöŕţçûţš ~~~~~]\"],\"editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick\":[\"[Ƒîñîšĥ çûŕṽé (öŕ ðöûƀļé-çļîçķ) ~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.gridLength\":[\"[Ĝŕîð: \",[\"length\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl\":[\"[Ĝŕîð šţéþ — çļîçķ öŕ ţáþ Çţŕļ ţö çýçļé ~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.gridStepLength\":[\"[Ĝŕîð šţéþ: \",[\"length\"],\" ~~~]\"],\"editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase\":[\"[Ĥöṽéŕ á þáîñţéð šûŕƒáçé ţö éŕášé ~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPaint\":[\"[Ĥöṽéŕ á šûŕƒáçé ţö þáîñţ ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts\":[\"[Ĥöṽéŕ á šûŕƒáçé ţö þîçķ îţš ɱáţéŕîáļ ~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.moreShortcuts\":[\"[Ṁöŕé šĥöŕţçûţš ~~~~]\"],\"editor.helpers.contextualHelperPanel.paintScope\":[\"[Þáîñţ: \",[\"scope\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.paintScopeClickOrPressShift\":[\"[Þáîñţ šçöþé — çļîçķ öŕ þŕéšš Šĥîƒţ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.paintScopeLabel\":[\"[Þáîñţ šçöþé: \",[\"scope\"],\" ~~~]\"],\"editor.helpers.contextualHelperPanel.pickScope\":[\"[Þîçķ: \",[\"scope\"],\" ~~]\"],\"editor.helpers.contextualHelperPanel.placeGateOnAFence\":[\"[Þļáçé ĝáţé öñ á ƒéñçé ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.placePassageOnAFence\":[\"[Þļáçé þáššáĝé öñ á ƒéñçé ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.selectAMaterialToPaint\":[\"[Šéļéçţ á ɱáţéŕîáļ ţö þáîñţ ~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingAngles\":[\"[Šñáþþîñĝ: Åñĝļéš ~~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingGrid\":[\"[Šñáþþîñĝ: Ĝŕîð ~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingLines\":[\"[Šñáþþîñĝ: Ļîñéš ~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift\":[\"[Šñáþþîñĝ ɱöðé — çļîçķ öŕ þŕéšš Šĥîƒţ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.snappingOff\":[\"[Šñáþþîñĝ: Öƒƒ ~~~~]\"],\"editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved\":[\"[Šţŕáîĝĥţ çöñţîñûáţîöñ îš ûñáṽáîļáƀļé ƒöŕ çûŕṽéð öŕ ƒŕééĥáñð ƒéñçéš ~~~~~~~~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.straightContinuous\":[\"[Šţŕáîĝĥţ: Çöñţîñûöûš ~~~~~~]\"],\"editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress\":[\"[Šţŕáîĝĥţ ƒéñçé çöñţîñûáţîöñ — çļîçķ öŕ þŕéšš Ç ţö ţöĝĝļé ~~~~~~~~~~~~~~]\"],\"editor.helpers.contextualHelperPanel.straightSingle\":[\"[Šţŕáîĝĥţ: Šîñĝļé ~~~~~]\"],\"editor.helpers.helperManager.addPoint\":[\"[Åðð þöîñţ ~~~]\"],\"editor.helpers.helperManager.addPointClickTheFirstTo\":[\"[Åðð þöîñţ · çļîçķ ţĥé ƒîŕšţ ţö çļöšé ~~~~~~~~~]\"],\"editor.helpers.helperManager.brushSize\":[\"[Ɓŕûšĥ šîžé ~~~]\"],\"editor.helpers.helperManager.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.helpers.helperManager.cancelPicking\":[\"[Çáñçéļ þîçķîñĝ ~~~~]\"],\"editor.helpers.helperManager.cancelStroke\":[\"[Çáñçéļ šţŕöķé ~~~~]\"],\"editor.helpers.helperManager.done\":[\"[Ðöñé ~~]\"],\"editor.helpers.helperManager.drawTheMezzanine\":[\"[Ðŕáŵ ţĥé ɱéžžáñîñé ~~~~~]\"],\"editor.helpers.helperManager.drawTheOpening\":[\"[Ðŕáŵ ţĥé öþéñîñĝ ~~~~~]\"],\"editor.helpers.helperManager.drawTheTerrace\":[\"[Ðŕáŵ ţĥé ţéŕŕáçé ~~~~~]\"],\"editor.helpers.helperManager.exitSmartMeasure\":[\"[Éẋîţ šɱáŕţ ɱéášûŕé ~~~~~]\"],\"editor.helpers.helperManager.finish\":[\"[Ƒîñîšĥ ~~]\"],\"editor.helpers.helperManager.finishAtTheEdge\":[\"[Ƒîñîšĥ áţ ţĥé éðĝé ~~~~~]\"],\"editor.helpers.helperManager.freeMove\":[\"[Ƒŕéé ɱöṽé ~~~]\"],\"editor.helpers.helperManager.freeMoveSlideDoorsAndWindows\":[\"[Ƒŕéé ɱöṽé · šļîðé ðööŕš áñð ŵîñðöŵš ~~~~~~~~~]\"],\"editor.helpers.helperManager.holdToPickAMaterial\":[\"[Ĥöļð ţö þîçķ á ɱáţéŕîáļ ~~~~~~]\"],\"editor.helpers.helperManager.inspectSurfaceDimensions\":[\"[Îñšþéçţ šûŕƒáçé ðîɱéñšîöñš ~~~~~~~~]\"],\"editor.helpers.helperManager.paintWithThisMaterial\":[\"[Þáîñţ ŵîţĥ ţĥîš ɱáţéŕîáļ ~~~~~~~]\"],\"editor.helpers.helperManager.pickTargetHeight\":[\"[Þîçķ ţáŕĝéţ ĥéîĝĥţ ~~~~~]\"],\"editor.helpers.helperManager.pinMeasurementLens\":[\"[Þîñ ɱéášûŕéɱéñţ ļéñš ~~~~~~]\"],\"editor.helpers.helperManager.place\":[\"[Þļáçé ~~]\"],\"editor.helpers.helperManager.placeInsideTheRoom\":[\"[Þļáçé îñšîðé ţĥé ŕööɱ ~~~~~~]\"],\"editor.helpers.helperManager.pressAnywhereDragToTheOpposite\":[\"[Þŕéšš áñýŵĥéŕé, ðŕáĝ ţö ţĥé öþþöšîţé çöŕñéŕ ~~~~~~~~~~~]\"],\"editor.helpers.helperManager.raiseOrLower\":[\"[Ŕáîšé öŕ ļöŵéŕ ~~~~]\"],\"editor.helpers.helperManager.removeAPaintedPartOrReset\":[\"[Ŕéɱöṽé á þáîñţéð þáŕţ, öŕ ŕéšéţ á šûŕƒáçé ~~~~~~~~~~]\"],\"editor.helpers.helperManager.removeLastPoint\":[\"[Ŕéɱöṽé ļášţ þöîñţ ~~~~~]\"],\"editor.helpers.helperManager.resize\":[\"[Ŕéšîžé ~~]\"],\"editor.helpers.helperManager.rotate45\":[\"[Ŕöţáţé ±45° ~~]\"],\"editor.helpers.helperManager.rotateTheSelection45\":[\"[Ŕöţáţé ţĥé šéļéçţîöñ ±45° ~~~~~~]\"],\"editor.helpers.helperManager.setOneCornerThenTheOpposite\":[\"[Šéţ öñé çöŕñéŕ, ţĥéñ ţĥé öþþöšîţé ~~~~~~~~~]\"],\"editor.helpers.itemHelper.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.helpers.itemHelper.forcePlace\":[\"[Ƒöŕçé þļáçé ~~~]\"],\"editor.helpers.itemHelper.place\":[\"[Þļáçé ~~]\"],\"editor.helpers.itemHelper.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.helpers.registeredToolHelper.guidedConstraintsBypassed\":[\"[Ĝûîðéð çöñšţŕáîñţš ƀýþáššéð ~~~~~~~~]\"],\"editor.inspector.field.angle.g10zaw\":[\"[Åñĝļé ~~]\"],\"editor.inspector.field.armLengthM.1jclqgw\":[\"[Åŕɱ ļéñĝţĥ ɱ ~~~]\"],\"editor.inspector.field.attachmentSide.6n9s5v\":[\"[Åţţáçĥɱéñţ šîðé ~~~~~]\"],\"editor.inspector.field.autoHangers.10554ka\":[\"[Åûţö ĥáñĝéŕš ~~~~]\"],\"editor.inspector.field.autoMiterCorners.zxr5lt\":[\"[Åûţö ɱîţéŕ çöŕñéŕš ~~~~~]\"],\"editor.inspector.field.autoSpan.1gas9r6\":[\"[Åûţö šþáñ ~~~]\"],\"editor.inspector.field.backRatio.1ughd99\":[\"[Ɓáçķ ŕáţîö ~~~]\"],\"editor.inspector.field.baseHeight.1hs4zdf\":[\"[Ɓášé ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.baseStyle.24vty5\":[\"[Ɓášé šţýļé ~~~]\"],\"editor.inspector.field.beamHeight.1kq0oh1\":[\"[Ɓéáɱ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.beamWidth.1q1mzbe\":[\"[Ɓéáɱ ŵîðţĥ ~~~]\"],\"editor.inspector.field.bodyShape.arvkuw\":[\"[Ɓöðý šĥáþé ~~~]\"],\"editor.inspector.field.bracketStyle.1vvoptm\":[\"[Ɓŕáçķéţ šţýļé ~~~~]\"],\"editor.inspector.field.branchAngle.v56zme\":[\"[Ɓŕáñçĥ áñĝļé ~~~~]\"],\"editor.inspector.field.cabHeight.1yn34mk\":[\"[Çáƀ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.canopyForm.1czzggp\":[\"[Çáñöþý ƒöŕɱ ~~~]\"],\"editor.inspector.field.cap.s0thej\":[\"[Çáþ ~]\"],\"editor.inspector.field.capOverhang.kxxz9j\":[\"[Çáþ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.capShape.17mbxhu\":[\"[Çáþ šĥáþé ~~~]\"],\"editor.inspector.field.capThickness.u835q9\":[\"[Çáþ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.carcassHeight.1aks0zy\":[\"[Çáŕçášš ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.cleanoutStyle.127zz6z\":[\"[Çļéáñöûţ šţýļé ~~~~]\"],\"editor.inspector.field.collarDiameter.1d5k28r\":[\"[Çöļļáŕ ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.collarHeight.1dqwsrf\":[\"[Çöļļáŕ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.collarShape.1gacv11\":[\"[Çöļļáŕ šĥáþé ~~~~]\"],\"editor.inspector.field.collarWidth.qvc9ik\":[\"[Çöļļáŕ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.columns.1sy73ks\":[\"[Çöļûɱñš ~~~]\"],\"editor.inspector.field.conicalFullCircle.1pgkpz5\":[\"[Çöñîçáļ ƒûļļ çîŕçļé ~~~~~~]\"],\"editor.inspector.field.connectionMode.1nty478\":[\"[Çöññéçţîöñ ɱöðé ~~~~~]\"],\"editor.inspector.field.connectionOffset.2m70s8\":[\"[Çöññéçţîöñ öƒƒšéţ ~~~~~]\"],\"editor.inspector.field.cornerBevel.16iniho\":[\"[Çöŕñéŕ ƀéṽéļ ~~~~]\"],\"editor.inspector.field.coveringType.95yd3k\":[\"[Çöṽéŕîñĝ ţýþé ~~~~]\"],\"editor.inspector.field.cricketHeight.pok31n\":[\"[Çŕîçķéţ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.cricketLength.i2aht8\":[\"[Çŕîçķéţ ļéñĝţĥ ~~~~]\"],\"editor.inspector.field.cricketSide.1xnwil7\":[\"[Çŕîçķéţ šîðé ~~~~]\"],\"editor.inspector.field.cricketStyle.10j0lat\":[\"[Çŕîçķéţ šţýļé ~~~~]\"],\"editor.inspector.field.curb.5xi2ol\":[\"[Çûŕƀ ~~]\"],\"editor.inspector.field.curbHeight.1yn97sg\":[\"[Çûŕƀ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.curveOffset.l4xhvr\":[\"[Çûŕṽé öƒƒšéţ ~~~~]\"],\"editor.inspector.field.damperAngle.h5fxn7\":[\"[Ðáɱþéŕ áñĝļé ~~~~]\"],\"editor.inspector.field.deckThickness.4jmqze\":[\"[Ðéçķ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.defaultLevelId.xmrjzp\":[\"[Ðéƒáûļţ ļéṽéļ îð ~~~~~]\"],\"editor.inspector.field.depth.1lu11u2\":[\"[Ðéþţĥ ~~]\"],\"editor.inspector.field.diameter.s3robe\":[\"[Ðîáɱéţéŕ ~~~]\"],\"editor.inspector.field.diameter2.pm6cl4\":[\"[Ðîáɱéţéŕ2 ~~~]\"],\"editor.inspector.field.doorDurationMs.13nx909\":[\"[Ðööŕ ðûŕáţîöñ ɱš ~~~~~]\"],\"editor.inspector.field.doorHeight.92r9k4\":[\"[Ðööŕ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.doorPanelStyle.2qog4q\":[\"[Ðööŕ þáñéļ šţýļé ~~~~~]\"],\"editor.inspector.field.doorStyle.gerpos\":[\"[Ðööŕ šţýļé ~~~]\"],\"editor.inspector.field.doorWidth.sy732l\":[\"[Ðööŕ ŵîðţĥ ~~~]\"],\"editor.inspector.field.downspoutEnabled.1gn00nv\":[\"[Ðöŵñšþöûţ éñáƀļéð ~~~~~]\"],\"editor.inspector.field.downspoutPosition.fxcsop\":[\"[Ðöŵñšþöûţ þöšîţîöñ ~~~~~~]\"],\"editor.inspector.field.ductMaterial.i8eonq\":[\"[Ðûçţ ɱáţéŕîáļ ~~~~]\"],\"editor.inspector.field.dutchGabletRake.6paydp\":[\"[Ðûţçĥ ĝáƀļéţ ŕáķé ~~~~~]\"],\"editor.inspector.field.dutchHipHeightRatio.1etnwgg\":[\"[Ðûţçĥ ĥîþ ĥéîĝĥţ ŕáţîö ~~~~~~]\"],\"editor.inspector.field.dutchHipWidthRatio.1dopfvb\":[\"[Ðûţçĥ ĥîþ ŵîðţĥ ŕáţîö ~~~~~~]\"],\"editor.inspector.field.dutchTopRakeThickness.1w9khxt\":[\"[Ðûţçĥ ţöþ ŕáķé ţĥîçķñéšš ~~~~~~~]\"],\"editor.inspector.field.dutchWaistLengthRatio.agtoxw\":[\"[Ðûţçĥ ŵáîšţ ļéñĝţĥ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.dwellMs.1lkk0o5\":[\"[Ðŵéļļ ɱš ~~~]\"],\"editor.inspector.field.edgeInset.1obeimx\":[\"[Éðĝé îñšéţ ~~~]\"],\"editor.inspector.field.elevation.4jbp44\":[\"[Éļéṽáţîöñ ~~~]\"],\"editor.inspector.field.endCapLeft.19jel4v\":[\"[Éñð çáþ ļéƒţ ~~~]\"],\"editor.inspector.field.endCapRight.lhse9c\":[\"[Éñð çáþ ŕîĝĥţ ~~~~]\"],\"editor.inspector.field.endCaps.4fsb5b\":[\"[Éñð çáþš ~~~]\"],\"editor.inspector.field.endPost.1guwsk0\":[\"[Éñð þöšţ ~~~]\"],\"editor.inspector.field.equipmentType.1mc2ywt\":[\"[Éǫûîþɱéñţ ţýþé ~~~~]\"],\"editor.inspector.field.fillToFloor.1oppnkf\":[\"[Ƒîļļ ţö ƒļööŕ ~~~~]\"],\"editor.inspector.field.finial.1ertf4s\":[\"[Ƒîñîáļ ~~]\"],\"editor.inspector.field.fittingType.18mz17s\":[\"[Ƒîţţîñĝ ţýþé ~~~~]\"],\"editor.inspector.field.flashingHeight.3e8nn6\":[\"[Ƒļášĥîñĝ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.flashingProjection.hhf0fk\":[\"[Ƒļášĥîñĝ þŕöĵéçţîöñ ~~~~~~]\"],\"editor.inspector.field.flueCount.j3t2ci\":[\"[Ƒļûé çöûñţ ~~~]\"],\"editor.inspector.field.flueDiameter.cjhubg\":[\"[Ƒļûé ðîáɱéţéŕ ~~~~]\"],\"editor.inspector.field.flueHeight.1dhc4y4\":[\"[Ƒļûé ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.flueShape.1ealiy4\":[\"[Ƒļûé šĥáþé ~~~]\"],\"editor.inspector.field.flueSpacing.exhzco\":[\"[Ƒļûé šþáçîñĝ ~~~~]\"],\"editor.inspector.field.footingStyle.e3btg6\":[\"[Ƒööţîñĝ šţýļé ~~~~]\"],\"editor.inspector.field.frameDepth.1934a5n\":[\"[Ƒŕáɱé ðéþţĥ ~~~]\"],\"editor.inspector.field.frameThickness.1agxzd8\":[\"[Ƒŕáɱé ţĥîçķñéšš ~~~~~]\"],\"editor.inspector.field.framingStrategy.3jx9qe\":[\"[Ƒŕáɱîñĝ šţŕáţéĝý ~~~~~]\"],\"editor.inspector.field.fromLevelId.15ieejs\":[\"[Ƒŕöɱ ļéṽéļ îð ~~~~]\"],\"editor.inspector.field.gableOverhang.2z0obw\":[\"[Ĝáƀļé öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.gambrelLowerHeightRatio.wqq7lg\":[\"[Ĝáɱƀŕéļ ļöŵéŕ ĥéîĝĥţ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.gambrelLowerWidthRatio.uvyb1v\":[\"[Ĝáɱƀŕéļ ļöŵéŕ ŵîðţĥ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.gapX.wjxa7\":[\"[Ĝáþ ẋ ~~]\"],\"editor.inspector.field.gapY.mkbl8\":[\"[Ĝáþ ý ~~]\"],\"editor.inspector.field.glassThickness.s97b0x\":[\"[Ĝļášš ţĥîçķñéšš ~~~~~]\"],\"editor.inspector.field.groundClearance.4os7f0\":[\"[Ĝŕöûñð çļéáŕáñçé ~~~~~]\"],\"editor.inspector.field.guardInfill.16heiig\":[\"[Ĝûáŕð îñƒîļļ ~~~~]\"],\"editor.inspector.field.gutterEnabled.1oxiltf\":[\"[Ĝûţţéŕ éñáƀļéð ~~~~]\"],\"editor.inspector.field.gutterProfile.1ngzqi3\":[\"[Ĝûţţéŕ þŕöƒîļé ~~~~]\"],\"editor.inspector.field.gutterSize.jgavtz\":[\"[Ĝûţţéŕ šîžé ~~~]\"],\"editor.inspector.field.hangerMaxReach.1869epv\":[\"[Ĥáñĝéŕ ɱáẋ ŕéáçĥ ~~~~~]\"],\"editor.inspector.field.hangerSpacing.i2b5d7\":[\"[Ĥáñĝéŕ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.hangerStyle.l7v7gb\":[\"[Ĥáñĝéŕ šţýļé ~~~~]\"],\"editor.inspector.field.height.7puwki\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.inspector.field.height2.7b3jlc\":[\"[Ĥéîĝĥţ2 ~~]\"],\"editor.inspector.field.heightAboveRidge.1k99brk\":[\"[Ĥéîĝĥţ áƀöṽé ŕîðĝé ~~~~~]\"],\"editor.inspector.field.highEdgeHeight.1s7v90t\":[\"[Ĥîĝĥ éðĝé ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.highOverhang.67w55d\":[\"[Ĥîĝĥ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.highSideMode.1rc1r5j\":[\"[Ĥîĝĥ šîðé ɱöðé ~~~~]\"],\"editor.inspector.field.hoodOverhang.1q1hcin\":[\"[Ĥööð öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.infillPlacement.11dxzpo\":[\"[Îñƒîļļ þļáçéɱéñţ ~~~~~]\"],\"editor.inspector.field.inletShape.ypayh2\":[\"[Îñļéţ šĥáþé ~~~]\"],\"editor.inspector.field.innerRadius.1fkmg0j\":[\"[Îññéŕ ŕáðîûš ~~~~]\"],\"editor.inspector.field.insulated.iwziey\":[\"[Îñšûļáţéð ~~~]\"],\"editor.inspector.field.insulationR.663ufx\":[\"[Îñšûļáţîöñ ŕ ~~~~]\"],\"editor.inspector.field.lanternHeight.oz7zpm\":[\"[Ļáñţéŕñ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.lanternTopScale.hkmpp2\":[\"[Ļáñţéŕñ ţöþ šçáļé ~~~~~]\"],\"editor.inspector.field.ledgerDepth.7av8k9\":[\"[Ļéðĝéŕ ðéþţĥ ~~~~]\"],\"editor.inspector.field.ledgerHeight.zo2oif\":[\"[Ļéðĝéŕ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.ledgerVerticalOffset.1athbgt\":[\"[Ļéðĝéŕ ṽéŕţîçáļ öƒƒšéţ ~~~~~~]\"],\"editor.inspector.field.leftEndCondition.1syqlaw\":[\"[Ļéƒţ éñð çöñðîţîöñ ~~~~~]\"],\"editor.inspector.field.leftOverhang.1ydl9ma\":[\"[Ļéƒţ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.length.1kpdcfp\":[\"[Ļéñĝţĥ ~~]\"],\"editor.inspector.field.liquidDiameter.w3pk7c\":[\"[Ļîǫûîð ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.louverCount.lhw2gr\":[\"[Ļöûṽéŕ çöûñţ ~~~~]\"],\"editor.inspector.field.lowBeamInset.1g7yw5l\":[\"[Ļöŵ ƀéáɱ îñšéţ ~~~~]\"],\"editor.inspector.field.lowEdgeHeight.47mae1\":[\"[Ļöŵ éðĝé ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.lowOverhang.t4nz1h\":[\"[Ļöŵ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.mansardSteepHeightRatio.1hbb8rq\":[\"[Ṁáñšáŕð šţééþ ĥéîĝĥţ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.mansardSteepWidthRatio.6xk6vd\":[\"[Ṁáñšáŕð šţééþ ŵîðţĥ ŕáţîö ~~~~~~~]\"],\"editor.inspector.field.matchHostRoofMaterial.s56zwj\":[\"[Ṁáţçĥ ĥöšţ ŕööƒ ɱáţéŕîáļ ~~~~~~~]\"],\"editor.inspector.field.matchHostRoofStructure.bojht3\":[\"[Ṁáţçĥ ĥöšţ ŕööƒ šţŕûçţûŕé ~~~~~~~]\"],\"editor.inspector.field.mount.h80tay\":[\"[Ṁöûñţ ~~]\"],\"editor.inspector.field.mountingType.1xvin1e\":[\"[Ṁöûñţîñĝ ţýþé ~~~~]\"],\"editor.inspector.field.neckHeight.19ym8n1\":[\"[Ñéçķ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.opacity.1pmpfd2\":[\"[Öþáçîţý ~~~]\"],\"editor.inspector.field.openingAngle.brhi7c\":[\"[Öþéñîñĝ áñĝļé ~~~~]\"],\"editor.inspector.field.openingOffset.wpoqt6\":[\"[Öþéñîñĝ öƒƒšéţ ~~~~]\"],\"editor.inspector.field.openingSide.18l2iwe\":[\"[Öþéñîñĝ šîðé ~~~~]\"],\"editor.inspector.field.operationState.1lwrz07\":[\"[Öþéŕáţîöñ šţáţé ~~~~~]\"],\"editor.inspector.field.outletShape.lgpqhx\":[\"[Öûţļéţ šĥáþé ~~~~]\"],\"editor.inspector.field.overhang.b5ljpv\":[\"[Öṽéŕĥáñĝ ~~~]\"],\"editor.inspector.field.panelHeight.1kf31vk\":[\"[Þáñéļ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.panelWidth.946581\":[\"[Þáñéļ ŵîðţĥ ~~~]\"],\"editor.inspector.field.patternAlignment.jd1ht0\":[\"[Þáţţéŕñ áļîĝñɱéñţ ~~~~~]\"],\"editor.inspector.field.patternCount.1r37pve\":[\"[Þáţţéŕñ çöûñţ ~~~~]\"],\"editor.inspector.field.patternDistribution.fmam51\":[\"[Þáţţéŕñ ðîšţŕîƀûţîöñ ~~~~~~]\"],\"editor.inspector.field.patternRemainder.i47p5y\":[\"[Þáţţéŕñ ŕéɱáîñðéŕ ~~~~~]\"],\"editor.inspector.field.picketProfile.1xgzuyc\":[\"[Þîçķéţ þŕöƒîļé ~~~~]\"],\"editor.inspector.field.picketRailCount.atgt6w\":[\"[Þîçķéţ ŕáîļ çöûñţ ~~~~~]\"],\"editor.inspector.field.picketSpacing.p8d98w\":[\"[Þîçķéţ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.picketTop.1tskplu\":[\"[Þîçķéţ ţöþ ~~~]\"],\"editor.inspector.field.picketTopClearance.16eq1k0\":[\"[Þîçķéţ ţöþ çļéáŕáñçé ~~~~~~]\"],\"editor.inspector.field.picketVariation.f7vl1c\":[\"[Þîçķéţ ṽáŕîáţîöñ ~~~~~]\"],\"editor.inspector.field.picketWidth.3fr3rh\":[\"[Þîçķéţ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.pipeMaterial.1ggc2wy\":[\"[Þîþé ɱáţéŕîáļ ~~~~]\"],\"editor.inspector.field.pitch.xe6ekx\":[\"[Þîţçĥ ~~]\"],\"editor.inspector.field.position.1quewx6\":[\"[Þöšîţîöñ ~~~]\"],\"editor.inspector.field.postBracing.crq8nn\":[\"[Þöšţ ƀŕáçîñĝ ~~~~]\"],\"editor.inspector.field.postCap.1xcvxrv\":[\"[Þöšţ çáþ ~~~]\"],\"editor.inspector.field.postCount.22r56c\":[\"[Þöšţ çöûñţ ~~~]\"],\"editor.inspector.field.postDepth.1ko6j1m\":[\"[Þöšţ ðéþţĥ ~~~]\"],\"editor.inspector.field.postInset.le36li\":[\"[Þöšţ îñšéţ ~~~]\"],\"editor.inspector.field.postLayoutMode.16jre62\":[\"[Þöšţ ļáýöûţ ɱöðé ~~~~~]\"],\"editor.inspector.field.postSize.1jodxek\":[\"[Þöšţ šîžé ~~~]\"],\"editor.inspector.field.postSpacing.voppfi\":[\"[Þöšţ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.postThrough.1abgu4a\":[\"[Þöšţ ţĥŕöûĝĥ ~~~~]\"],\"editor.inspector.field.postWidth.rk26fz\":[\"[Þöšţ ŵîðţĥ ~~~]\"],\"editor.inspector.field.profile.1kwlci6\":[\"[Þŕöƒîļé ~~~]\"],\"editor.inspector.field.projection.jhtig0\":[\"[Þŕöĵéçţîöñ ~~~]\"],\"editor.inspector.field.purlinHeight.eo9cjm\":[\"[Þûŕļîñ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.purlinSpacing.4gbzb2\":[\"[Þûŕļîñ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.purlinWidth.r6tu3j\":[\"[Þûŕļîñ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.rafterEndInset.14c0wy5\":[\"[Ŕáƒţéŕ éñð îñšéţ ~~~~~]\"],\"editor.inspector.field.rafterHeight.1e1n99w\":[\"[Ŕáƒţéŕ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.rafterSpacing.19subc0\":[\"[Ŕáƒţéŕ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.rafterWidth.eksj4t\":[\"[Ŕáƒţéŕ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.railingHeight.6wf4bm\":[\"[Ŕáîļîñĝ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.railingMode.ov7xpu\":[\"[Ŕáîļîñĝ ɱöðé ~~~~]\"],\"editor.inspector.field.railingStyle.1nyd2u\":[\"[Ŕáîļîñĝ šţýļé ~~~~]\"],\"editor.inspector.field.resizeLock.b2hbr0\":[\"[Ŕéšîžé ļöçķ ~~~]\"],\"editor.inspector.field.returnDiameter.166ozhe\":[\"[Ŕéţûŕñ ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.returnHeight.b9sq6y\":[\"[Ŕéţûŕñ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.returnShape.1e3a27i\":[\"[Ŕéţûŕñ šĥáþé ~~~~]\"],\"editor.inspector.field.returnWidth.z9r3h3\":[\"[Ŕéţûŕñ ŵîðţĥ ~~~~]\"],\"editor.inspector.field.rightEndCondition.tjlw3l\":[\"[Ŕîĝĥţ éñð çöñðîţîöñ ~~~~~~]\"],\"editor.inspector.field.rightOverhang.yqbeft\":[\"[Ŕîĝĥţ öṽéŕĥáñĝ ~~~~]\"],\"editor.inspector.field.roofHeight.1uhy6qy\":[\"[Ŕööƒ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.roofStyle.pawqfy\":[\"[Ŕööƒ šţýļé ~~~]\"],\"editor.inspector.field.roofThickness.1xlr3rx\":[\"[Ŕööƒ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.roofType.1m9kv5h\":[\"[Ŕööƒ ţýþé ~~~]\"],\"editor.inspector.field.rotation.ly2rj\":[\"[Ŕöţáţîöñ ~~~]\"],\"editor.inspector.field.rows.1ba1neg\":[\"[Ŕöŵš ~~]\"],\"editor.inspector.field.scale.b6rpxt\":[\"[Šçáļé ~~]\"],\"editor.inspector.field.seamDetail.197za48\":[\"[Šéáɱ ðéţáîļ ~~~]\"],\"editor.inspector.field.segmentType.l667sy\":[\"[Šéĝɱéñţ ţýþé ~~~~]\"],\"editor.inspector.field.shaftStyle.1i5ampa\":[\"[Šĥáƒţ šţýļé ~~~]\"],\"editor.inspector.field.shaftWallThickness.bduslr\":[\"[Šĥáƒţ ŵáļļ ţĥîçķñéšš ~~~~~~]\"],\"editor.inspector.field.shape.iq9t52\":[\"[Šĥáþé ~~]\"],\"editor.inspector.field.shape2.fi0nx8\":[\"[Šĥáþé2 ~~]\"],\"editor.inspector.field.shedHighSide.bzzddg\":[\"[Šĥéð ĥîĝĥ šîðé ~~~~]\"],\"editor.inspector.field.shingleThickness.1hn5wxr\":[\"[Šĥîñĝļé ţĥîçķñéšš ~~~~~]\"],\"editor.inspector.field.shoulderExtent.11j8uiv\":[\"[Šĥöûļðéŕ éẋţéñţ ~~~~~]\"],\"editor.inspector.field.shoulderHeight.xyqn6g\":[\"[Šĥöûļðéŕ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.shoulderStyle.1hkcv2w\":[\"[Šĥöûļðéŕ šţýļé ~~~~]\"],\"editor.inspector.field.showCenterColumn.1uggg45\":[\"[Šĥöŵ çéñţéŕ çöļûɱñ ~~~~~]\"],\"editor.inspector.field.showInfill.33rv7u\":[\"[Šĥöŵ îñƒîļļ ~~~]\"],\"editor.inspector.field.showStepSupports.1kg8h8m\":[\"[Šĥöŵ šţéþ šûþþöŕţš ~~~~~]\"],\"editor.inspector.field.sideFlashing.cv744o\":[\"[Šîðé ƒļášĥîñĝ ~~~~]\"],\"editor.inspector.field.size.1a4x3zw\":[\"[Šîžé ~~]\"],\"editor.inspector.field.skylightType.1a5vj3i\":[\"[Šķýļîĝĥţ ţýþé ~~~~]\"],\"editor.inspector.field.slabOpeningMode.g4f730\":[\"[Šļáƀ öþéñîñĝ ɱöðé ~~~~~]\"],\"editor.inspector.field.slatGap.slmk93\":[\"[Šļáţ ĝáþ ~~~]\"],\"editor.inspector.field.slideDirection.1527q13\":[\"[Šļîðé ðîŕéçţîöñ ~~~~~]\"],\"editor.inspector.field.span.1bmmuw1\":[\"[Šþáñ ~~]\"],\"editor.inspector.field.speed.2w2xwg\":[\"[Šþééð ~~]\"],\"editor.inspector.field.spinSpeed.1ozx746\":[\"[Šþîñ šþééð ~~~]\"],\"editor.inspector.field.stairType.1u05e02\":[\"[Šţáîŕ ţýþé ~~~]\"],\"editor.inspector.field.standoff.4wv2g0\":[\"[Šţáñðöƒƒ ~~~]\"],\"editor.inspector.field.standoffHeight.1qdnff\":[\"[Šţáñðöƒƒ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.startPost.1ood9kv\":[\"[Šţáŕţ þöšţ ~~~]\"],\"editor.inspector.field.stepCount.nzorrw\":[\"[Šţéþ çöûñţ ~~~]\"],\"editor.inspector.field.strapSpacing.1cyt3dc\":[\"[Šţŕáþ šþáçîñĝ ~~~~]\"],\"editor.inspector.field.strapStyle.fh1oy4\":[\"[Šţŕáþ šţýļé ~~~]\"],\"editor.inspector.field.style.nf3vcm\":[\"[Šţýļé ~~]\"],\"editor.inspector.field.suctionDiameter.nutxtj\":[\"[Šûçţîöñ ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.supplyDiameter.h5ldh5\":[\"[Šûþþļý ðîáɱéţéŕ ~~~~~]\"],\"editor.inspector.field.supplyHeight.zy6ru1\":[\"[Šûþþļý ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.supplyShape.k39wnb\":[\"[Šûþþļý šĥáþé ~~~~]\"],\"editor.inspector.field.supplyWidth.g66axi\":[\"[Šûþþļý ŵîðţĥ ~~~~]\"],\"editor.inspector.field.supportOffset.1w4cocr\":[\"[Šûþþöŕţ öƒƒšéţ ~~~~]\"],\"editor.inspector.field.sweepAngle.ucmmlw\":[\"[Šŵééþ áñĝļé ~~~]\"],\"editor.inspector.field.system.13qbhrw\":[\"[Šýšţéɱ ~~]\"],\"editor.inspector.field.terminal.1501knl\":[\"[Ţéŕɱîñáļ ~~~]\"],\"editor.inspector.field.terminalType.1ne8lgb\":[\"[Ţéŕɱîñáļ ţýþé ~~~~]\"],\"editor.inspector.field.thickness.1l8hu45\":[\"[Ţĥîçķñéšš ~~~]\"],\"editor.inspector.field.tiltAngle.1312yw1\":[\"[Ţîļţ áñĝļé ~~~]\"],\"editor.inspector.field.toLevelId.8i5qx7\":[\"[Ţö ļéṽéļ îð ~~~]\"],\"editor.inspector.field.topLandingDepth.ki7gk2\":[\"[Ţöþ ļáñðîñĝ ðéþţĥ ~~~~~]\"],\"editor.inspector.field.topLandingMode.zk0h7e\":[\"[Ţöþ ļáñðîñĝ ɱöðé ~~~~~]\"],\"editor.inspector.field.topRailHeight.fscisv\":[\"[Ţöþ ŕáîļ ĥéîĝĥţ ~~~~]\"],\"editor.inspector.field.transitionMode.f3evgt\":[\"[Ţŕáñšîţîöñ ɱöðé ~~~~~]\"],\"editor.inspector.field.transitionWidth.rtgz3m\":[\"[Ţŕáñšîţîöñ ŵîðţĥ ~~~~~]\"],\"editor.inspector.field.vaneCount.55vtye\":[\"[Ṽáñé çöûñţ ~~~]\"],\"editor.inspector.field.wallHeight.18vmh5c\":[\"[Ŵáļļ ĥéîĝĥţ ~~~]\"],\"editor.inspector.field.wallShell.vqsyhv\":[\"[Ŵáļļ šĥéļļ ~~~]\"],\"editor.inspector.field.wallSkirtHeight.1uea2ad\":[\"[Ŵáļļ šķîŕţ ĥéîĝĥţ ~~~~~]\"],\"editor.inspector.field.wallThickness.17wn4iv\":[\"[Ŵáļļ ţĥîçķñéšš ~~~~]\"],\"editor.inspector.field.width.gfxz9b\":[\"[Ŵîðţĥ ~~]\"],\"editor.inspector.field.width2.1nqawvr\":[\"[Ŵîðţĥ2 ~~]\"],\"editor.inspector.field.withBack.1ay8nus\":[\"[Ŵîţĥ ƀáçķ ~~~]\"],\"editor.inspector.field.withBottom.1x1z1vo\":[\"[Ŵîţĥ ƀöţţöɱ ~~~]\"],\"editor.inspector.field.withSides.uq066x\":[\"[Ŵîţĥ šîðéš ~~~]\"],\"editor.inspector.group.advanced.qwfkor\":[\"[Åðṽáñçéð ~~~]\"],\"editor.inspector.group.air.15jotdj\":[\"[Åîŕ ~]\"],\"editor.inspector.group.appearance.dli9wf\":[\"[Åþþéáŕáñçé ~~~]\"],\"editor.inspector.group.body.ign4wl\":[\"[Ɓöðý ~~]\"],\"editor.inspector.group.cab.o4z1ox\":[\"[Çáƀ ~]\"],\"editor.inspector.group.cabinet.rzvymr\":[\"[Çáƀîñéţ ~~~]\"],\"editor.inspector.group.cap.s0thej\":[\"[Çáþ ~]\"],\"editor.inspector.group.collar.1am2iqo\":[\"[Çöļļáŕ ~~]\"],\"editor.inspector.group.connection.2r1h4p\":[\"[Çöññéçţîöñ ~~~]\"],\"editor.inspector.group.connections.ai4w8u\":[\"[Çöññéçţîöñš ~~~~]\"],\"editor.inspector.group.construction.j6p9kc\":[\"[Çöñšţŕûçţîöñ ~~~~]\"],\"editor.inspector.group.cricket.6iwg8g\":[\"[Çŕîçķéţ ~~~]\"],\"editor.inspector.group.curb.5xi2ol\":[\"[Çûŕƀ ~~]\"],\"editor.inspector.group.curvePoints.ztdcnn\":[\"[Çûŕṽé þöîñţš ~~~~]\"],\"editor.inspector.group.dimensions.pewa8g\":[\"[Ðîɱéñšîöñš ~~~]\"],\"editor.inspector.group.doors.18w2kpa\":[\"[Ðööŕš ~~]\"],\"editor.inspector.group.dormer.1fjs5tq\":[\"[Ðöŕɱéŕ ~~]\"],\"editor.inspector.group.dormerRoof.u9uy2g\":[\"[Ðöŕɱéŕ ŕööƒ ~~~]\"],\"editor.inspector.group.drainage.7easy0\":[\"[Ðŕáîñáĝé ~~~]\"],\"editor.inspector.group.elevation.4jbp44\":[\"[Éļéṽáţîöñ ~~~]\"],\"editor.inspector.group.endCaps.4fsb5b\":[\"[Éñð çáþš ~~~]\"],\"editor.inspector.group.equipment.1xtq0ev\":[\"[Éǫûîþɱéñţ ~~~]\"],\"editor.inspector.group.face.1531fr0\":[\"[Ƒáçé ~~]\"],\"editor.inspector.group.fitting.171z1r4\":[\"[Ƒîţţîñĝ ~~~]\"],\"editor.inspector.group.flues.nq6pye\":[\"[Ƒļûéš ~~]\"],\"editor.inspector.group.footprint.g8q2pg\":[\"[Ƒööţþŕîñţ ~~~]\"],\"editor.inspector.group.frame.q7q9fq\":[\"[Ƒŕáɱé ~~]\"],\"editor.inspector.group.geometry.a21os1\":[\"[Ĝéöɱéţŕý ~~~]\"],\"editor.inspector.group.grid.d8gwxd\":[\"[Ĝŕîð ~~]\"],\"editor.inspector.group.hangers.agnfzn\":[\"[Ĥáñĝéŕš ~~~]\"],\"editor.inspector.group.hardware.1nygwm1\":[\"[Ĥáŕðŵáŕé ~~~]\"],\"editor.inspector.group.hungWall.1ftr1gz\":[\"[Ĥûñĝ ŵáļļ ~~~]\"],\"editor.inspector.group.insulation.1kyo5e7\":[\"[Îñšûļáţîöñ ~~~]\"],\"editor.inspector.group.lantern.1h7o2xb\":[\"[Ļáñţéŕñ ~~~]\"],\"editor.inspector.group.levels.1s6yaru\":[\"[Ļéṽéļš ~~]\"],\"editor.inspector.group.line.166mv5z\":[\"[Ļîñé ~~]\"],\"editor.inspector.group.lines.12bghr0\":[\"[Ļîñéš ~~]\"],\"editor.inspector.group.motion.1be7sjr\":[\"[Ṁöţîöñ ~~]\"],\"editor.inspector.group.mounting.feutd2\":[\"[Ṁöûñţîñĝ ~~~]\"],\"editor.inspector.group.opening.dfet3\":[\"[Öþéñîñĝ ~~~]\"],\"editor.inspector.group.panelDimensions.b59qe6\":[\"[Þáñéļ ðîɱéñšîöñš ~~~~~]\"],\"editor.inspector.group.patternDistribution.fmam51\":[\"[Þáţţéŕñ ðîšţŕîƀûţîöñ ~~~~~~]\"],\"editor.inspector.group.placement.13lcvts\":[\"[Þļáçéɱéñţ ~~~]\"],\"editor.inspector.group.position.1quewx6\":[\"[Þöšîţîöñ ~~~]\"],\"editor.inspector.group.profile.1kwlci6\":[\"[Þŕöƒîļé ~~~]\"],\"editor.inspector.group.railing.19a5bnr\":[\"[Ŕáîļîñĝ ~~~]\"],\"editor.inspector.group.return.1klrjrz\":[\"[Ŕéţûŕñ ~~]\"],\"editor.inspector.group.settings.ktdb8o\":[\"[Šéţţîñĝš ~~~]\"],\"editor.inspector.group.shaft.mad9cv\":[\"[Šĥáƒţ ~~]\"],\"editor.inspector.group.shape.iq9t52\":[\"[Šĥáþé ~~]\"],\"editor.inspector.group.shoulder.1nyfx25\":[\"[Šĥöûļðéŕ ~~~]\"],\"editor.inspector.group.size.1a4x3zw\":[\"[Šîžé ~~]\"],\"editor.inspector.group.structure.gezdra\":[\"[Šţŕûçţûŕé ~~~]\"],\"editor.inspector.group.style.nf3vcm\":[\"[Šţýļé ~~]\"],\"editor.inspector.group.supply.1oy2zwu\":[\"[Šûþþļý ~~]\"],\"editor.inspector.group.surface.wtamqk\":[\"[Šûŕƒáçé ~~~]\"],\"editor.inspector.group.terminal.1501knl\":[\"[Ţéŕɱîñáļ ~~~]\"],\"editor.inspector.group.topology.18t8dyc\":[\"[Ţöþöļöĝý ~~~]\"],\"editor.inspector.group.transform.1c55ayj\":[\"[Ţŕáñšƒöŕɱ ~~~]\"],\"editor.inspector.group.trap.1qc7vhe\":[\"[Ţŕáþ ~~]\"],\"editor.inspector.group.type.1m2zofh\":[\"[Ţýþé ~~]\"],\"editor.inspector.option.abs.132mz8b\":[\"[Åƀš ~]\"],\"editor.inspector.option.accessPanel.13sptb5\":[\"[Åççéšš þáñéļ ~~~~]\"],\"editor.inspector.option.airHandler.1crnyg3\":[\"[Åîŕ ĥáñðļéŕ ~~~]\"],\"editor.inspector.option.alternating.5jashi\":[\"[Åļţéŕñáţîñĝ ~~~~]\"],\"editor.inspector.option.arched.14188w0\":[\"[Åŕçĥéð ~~]\"],\"editor.inspector.option.auto.540b06\":[\"[Åûţö ~~]\"],\"editor.inspector.option.automatic.r122ro\":[\"[Åûţöɱáţîç ~~~]\"],\"editor.inspector.option.back.1hzmxtu\":[\"[Ɓáçķ ~~]\"],\"editor.inspector.option.balusters.1j3w6ng\":[\"[Ɓáļûšţéŕš ~~~]\"],\"editor.inspector.option.band.160umau\":[\"[Ɓáñð ~~]\"],\"editor.inspector.option.basePlate.17fcg8k\":[\"[Ɓášé þļáţé ~~~]\"],\"editor.inspector.option.boards.u14hig\":[\"[Ɓöáŕðš ~~]\"],\"editor.inspector.option.bookshelf.ls0zqk\":[\"[Ɓööķšĥéļƒ ~~~]\"],\"editor.inspector.option.both.mkyb42\":[\"[Ɓöţĥ ~~]\"],\"editor.inspector.option.bottom.9mpruy\":[\"[Ɓöţţöɱ ~~]\"],\"editor.inspector.option.box.1nbjcuq\":[\"[Ɓöẋ ~]\"],\"editor.inspector.option.break.17spnvc\":[\"[Ɓŕéáķ ~~]\"],\"editor.inspector.option.butterfly.pvv0g4\":[\"[Ɓûţţéŕƒļý ~~~]\"],\"editor.inspector.option.cable.fp50zq\":[\"[Çáƀļé ~~]\"],\"editor.inspector.option.castIron.1q2z4qk\":[\"[Çášţ îŕöñ ~~~]\"],\"editor.inspector.option.ceiling.1t2zaqo\":[\"[Çéîļîñĝ ~~~]\"],\"editor.inspector.option.center.kzdxno\":[\"[Çéñţéŕ ~~]\"],\"editor.inspector.option.centerOpening.bn1rvw\":[\"[Çéñţéŕ öþéñîñĝ ~~~~]\"],\"editor.inspector.option.cleanout.lww8bm\":[\"[Çļéáñöûţ ~~~]\"],\"editor.inspector.option.concretePad.m1zdij\":[\"[Çöñçŕéţé þáð ~~~~]\"],\"editor.inspector.option.condenser.a74nps\":[\"[Çöñðéñšéŕ ~~~]\"],\"editor.inspector.option.corbeled.bovs4v\":[\"[Çöŕƀéļéð ~~~]\"],\"editor.inspector.option.count.1qoi4r8\":[\"[Çöûñţ ~~]\"],\"editor.inspector.option.coupling.111aap2\":[\"[Çöûþļîñĝ ~~~]\"],\"editor.inspector.option.coveringSpecific.1h9fo8w\":[\"[Çöṽéŕîñĝ šþéçîƒîç ~~~~~]\"],\"editor.inspector.option.cross.1elubzv\":[\"[Çŕöšš ~~]\"],\"editor.inspector.option.cubby.ivq4qc\":[\"[Çûƀƀý ~~]\"],\"editor.inspector.option.curved.6noz1s\":[\"[Çûŕṽéð ~~]\"],\"editor.inspector.option.cylinder.eol6vj\":[\"[Çýļîñðéŕ ~~~]\"],\"editor.inspector.option.damper.wgri80\":[\"[Ðáɱþéŕ ~~]\"],\"editor.inspector.option.destination.gfzm1r\":[\"[Ðéšţîñáţîöñ ~~~~]\"],\"editor.inspector.option.diffuser.1igj0jh\":[\"[Ðûšéŕ ~~~]\"],\"editor.inspector.option.dogEar.xhtvjt\":[\"[Ðöĝ éáŕ ~~]\"],\"editor.inspector.option.dome.1c87e56\":[\"[Ðöɱé ~~]\"],\"editor.inspector.option.double.13h5354\":[\"[Ðöûƀļé ~~]\"],\"editor.inspector.option.ductBoard.lc3o4t\":[\"[Ðûçţ ƀöáŕð ~~~]\"],\"editor.inspector.option.dutch.1djx429\":[\"[Ðûţçĥ ~~]\"],\"editor.inspector.option.elbow.1flup74\":[\"[Éļƀöŵ ~~]\"],\"editor.inspector.option.end.1llf32i\":[\"[Éñð ~]\"],\"editor.inspector.option.endCap.1p4v4na\":[\"[Éñð çáþ ~~]\"],\"editor.inspector.option.equalFit.11vw52c\":[\"[Éǫûáļ ƒîţ ~~~]\"],\"editor.inspector.option.fixedCount.1o3dznu\":[\"[Ƒîẋéð çöûñţ ~~~]\"],\"editor.inspector.option.fixedSpacing.hl4dr4\":[\"[Ƒîẋéð šþáçîñĝ ~~~~]\"],\"editor.inspector.option.flat.ly0bei\":[\"[Ƒļáţ ~~]\"],\"editor.inspector.option.flex.ktpamq\":[\"[Ƒļéẋ ~~]\"],\"editor.inspector.option.floating.1oadpln\":[\"[Ƒļöáţîñĝ ~~~]\"],\"editor.inspector.option.floor.q9caf1\":[\"[Ƒļööŕ ~~]\"],\"editor.inspector.option.flush.olwwu5\":[\"[Ƒļûšĥ ~~]\"],\"editor.inspector.option.front.uhugl4\":[\"[Ƒŕöñţ ~~]\"],\"editor.inspector.option.furnace.w0mzpf\":[\"[Ƒûŕñáçé ~~~]\"],\"editor.inspector.option.gable.1ekyx6\":[\"[Ĝáƀļé ~~]\"],\"editor.inspector.option.gambrel.1yo90d9\":[\"[Ĝáɱƀŕéļ ~~~]\"],\"editor.inspector.option.generic.1074oey\":[\"[Ĝéñéŕîç ~~~]\"],\"editor.inspector.option.glass.163tc5n\":[\"[Ĝļášš ~~]\"],\"editor.inspector.option.glassFrame.jp9s3m\":[\"[Ĝļášš ƒŕáɱé ~~~]\"],\"editor.inspector.option.globe.1avkqoy\":[\"[Ĝļöƀé ~~]\"],\"editor.inspector.option.grounded.jwoq73\":[\"[Ĝŕöûñðéð ~~~]\"],\"editor.inspector.option.guard.1m575se\":[\"[Ĝûáŕð ~~]\"],\"editor.inspector.option.halfRound.m5hob0\":[\"[Ĥáļƒ ŕöûñð ~~~]\"],\"editor.inspector.option.hidden.gp48rd\":[\"[Ĥîððéñ ~~]\"],\"editor.inspector.option.hip.r0jnjy\":[\"[Ĥîþ ~]\"],\"editor.inspector.option.horizontal.tyapah\":[\"[Ĥöŕîžöñţáļ ~~~]\"],\"editor.inspector.option.include.1a27vnr\":[\"[Îñçļûðé ~~~]\"],\"editor.inspector.option.independentHighBeam.1tn0zvy\":[\"[Îñðéþéñðéñţ ĥîĝĥ ƀéáɱ ~~~~~~]\"],\"editor.inspector.option.industrial.8sd9u\":[\"[Îñðûšţŕîáļ ~~~]\"],\"editor.inspector.option.inline.1uh05lg\":[\"[Îñļîñé ~~]\"],\"editor.inspector.option.integrated.1xd9lv0\":[\"[Îñţéĝŕáţéð ~~~]\"],\"editor.inspector.option.joined.1x2o8ds\":[\"[Ĵöîñéð ~~]\"],\"editor.inspector.option.kStyle.m8kfwz\":[\"[Ķ šţýļé ~~]\"],\"editor.inspector.option.kickout.vt8s6p\":[\"[Ķîçķöûţ ~~~]\"],\"editor.inspector.option.knee.186hcui\":[\"[Ķñéé ~~]\"],\"editor.inspector.option.landing.tyqarg\":[\"[Ļáñðîñĝ ~~~]\"],\"editor.inspector.option.lantern.1h7o2xb\":[\"[Ļáñţéŕñ ~~~]\"],\"editor.inspector.option.leave.1xf0sbk\":[\"[Ļéáṽé ~~]\"],\"editor.inspector.option.left.14n06mo\":[\"[Ļéƒţ ~~]\"],\"editor.inspector.option.level.i4lhtp\":[\"[Ļéṽéļ ~~]\"],\"editor.inspector.option.lowProfile.1h9lgzg\":[\"[Ļöŵ þŕöƒîļé ~~~]\"],\"editor.inspector.option.mansard.dwzck9\":[\"[Ṁáñšáŕð ~~~]\"],\"editor.inspector.option.manual.1wu7r43\":[\"[Ṁáñûáļ ~~]\"],\"editor.inspector.option.maximumSpacing.n1fzl4\":[\"[Ṁáẋîɱûɱ šþáçîñĝ ~~~~~]\"],\"editor.inspector.option.metal.1az9fgc\":[\"[Ṁéţáļ ~~]\"],\"editor.inspector.option.metalPanel.1xdz476\":[\"[Ṁéţáļ þáñéļ ~~~]\"],\"editor.inspector.option.minimal.fwmiwg\":[\"[Ṁîñîɱáļ ~~~]\"],\"editor.inspector.option.mono.oszvd6\":[\"[Ṁöñö ~~]\"],\"editor.inspector.option.none.deku7v\":[\"[Ñöñé ~~]\"],\"editor.inspector.option.omit.okcs7w\":[\"[Öɱîţ ~~]\"],\"editor.inspector.option.open.n6hn1l\":[\"[Öþéñ ~~]\"],\"editor.inspector.option.openRack.mvt1x0\":[\"[Öþéñ ŕáçķ ~~~]\"],\"editor.inspector.option.opening.dfet3\":[\"[Öþéñîñĝ ~~~]\"],\"editor.inspector.option.oval.1jiqzxx\":[\"[Öṽáļ ~~]\"],\"editor.inspector.option.picket.zyeoy1\":[\"[Þîçķéţ ~~]\"],\"editor.inspector.option.pointed.effedk\":[\"[Þöîñţéð ~~~]\"],\"editor.inspector.option.postAndRail.lajk2u\":[\"[Þöšţ áñð ŕáîļ ~~~~]\"],\"editor.inspector.option.preserveHighEdge.y6ywf0\":[\"[Þŕéšéŕṽé ĥîĝĥ éðĝé ~~~~~]\"],\"editor.inspector.option.preserveLowEdge.196m5pk\":[\"[Þŕéšéŕṽé ļöŵ éðĝé ~~~~~]\"],\"editor.inspector.option.preservePitch.1uq973r\":[\"[Þŕéšéŕṽé þîţçĥ ~~~~]\"],\"editor.inspector.option.privacy.1th4hrb\":[\"[Þŕîṽáçý ~~~]\"],\"editor.inspector.option.purlins.od124c\":[\"[Þûŕļîñš ~~~]\"],\"editor.inspector.option.pvc.1oc4u2w\":[\"[Þṽç ~]\"],\"editor.inspector.option.pyramid.17ucsqv\":[\"[Þýŕáɱîð ~~~]\"],\"editor.inspector.option.rafters.16tzbby\":[\"[Ŕáƒţéŕš ~~~]\"],\"editor.inspector.option.rail.39zqc9\":[\"[Ŕáîļ ~~]\"],\"editor.inspector.option.raised.4kyx9h\":[\"[Ŕáîšéð ~~]\"],\"editor.inspector.option.rect.tpfvaf\":[\"[Ŕéçţ ~~]\"],\"editor.inspector.option.reducer.18byt67\":[\"[Ŕéðûçéŕ ~~~]\"],\"editor.inspector.option.return.1klrjrz\":[\"[Ŕéţûŕñ ~~]\"],\"editor.inspector.option.returnGrille.r28ncm\":[\"[Ŕéţûŕñ ĝŕîļļé ~~~~]\"],\"editor.inspector.option.right.8humpx\":[\"[Ŕîĝĥţ ~~]\"],\"editor.inspector.option.round.1vx0wyj\":[\"[Ŕöûñð ~~]\"],\"editor.inspector.option.rounded.199nwpm\":[\"[Ŕöûñðéð ~~~]\"],\"editor.inspector.option.sanitaryTee.oro3d4\":[\"[Šáñîţáŕý ţéé ~~~~]\"],\"editor.inspector.option.scalloped.1eltba0\":[\"[Šçáļļöþéð ~~~]\"],\"editor.inspector.option.scoop.qy5zdv\":[\"[Šçööþ ~~]\"],\"editor.inspector.option.segmentedPanel.5r3hwl\":[\"[Šéĝɱéñţéð þáñéļ ~~~~~]\"],\"editor.inspector.option.shed.6t994v\":[\"[Šĥéð ~~]\"],\"editor.inspector.option.sheetMetal.l164lv\":[\"[Šĥééţ ɱéţáļ ~~~]\"],\"editor.inspector.option.shingle.pfmynh\":[\"[Šĥîñĝļé ~~~]\"],\"editor.inspector.option.shingled.1nm9inf\":[\"[Šĥîñĝļéð ~~~]\"],\"editor.inspector.option.simple.12mfu73\":[\"[Šîɱþļé ~~]\"],\"editor.inspector.option.single.1uzxurt\":[\"[Šîñĝļé ~~]\"],\"editor.inspector.option.singleLeft.1atdh02\":[\"[Šîñĝļé ļéƒţ ~~~]\"],\"editor.inspector.option.singleRight.1axbu67\":[\"[Šîñĝļé ŕîĝĥţ ~~~~]\"],\"editor.inspector.option.slantBox.1ta99vy\":[\"[Šļáñţ ƀöẋ ~~~]\"],\"editor.inspector.option.slat.1p9njbz\":[\"[Šļáţ ~~]\"],\"editor.inspector.option.sliding.cd0jox\":[\"[Šļîðîñĝ ~~~]\"],\"editor.inspector.option.slope.1bn2qw\":[\"[Šļöþé ~~]\"],\"editor.inspector.option.sloped.lo4sh0\":[\"[Šļöþéð ~~]\"],\"editor.inspector.option.solid.o4uy6s\":[\"[Šöļîð ~~]\"],\"editor.inspector.option.solidPanel.2yaw62\":[\"[Šöļîð þáñéļ ~~~]\"],\"editor.inspector.option.spiral.91hcl4\":[\"[Šþîŕáļ ~~]\"],\"editor.inspector.option.splash.1uke4cm\":[\"[Šþļášĥ ~~]\"],\"editor.inspector.option.spread.1g1zysu\":[\"[Šþŕéáð ~~]\"],\"editor.inspector.option.square.1xl1lk6\":[\"[Šǫûáŕé ~~]\"],\"editor.inspector.option.stair.1xf86e\":[\"[Šţáîŕ ~~]\"],\"editor.inspector.option.standard.vuco\":[\"[Šţáñðáŕð ~~~]\"],\"editor.inspector.option.start.30xvgf\":[\"[Šţáŕţ ~~]\"],\"editor.inspector.option.step.jtn9kf\":[\"[Šţéþ ~~]\"],\"editor.inspector.option.stepped.naxzh0\":[\"[Šţéþþéð ~~~]\"],\"editor.inspector.option.straight.lxqbfr\":[\"[Šţŕáîĝĥţ ~~~]\"],\"editor.inspector.option.strap.14q0ps9\":[\"[Šţŕáþ ~~]\"],\"editor.inspector.option.supply.1oy2zwu\":[\"[Šûþþļý ~~]\"],\"editor.inspector.option.supplyRegister.1lzdbbn\":[\"[Šûþþļý ŕéĝîšţéŕ ~~~~~]\"],\"editor.inspector.option.tapered.3y5blo\":[\"[Ţáþéŕéð ~~~]\"],\"editor.inspector.option.targetSpacing.14uibc9\":[\"[Ţáŕĝéţ šþáçîñĝ ~~~~]\"],\"editor.inspector.option.tee.7d6tjp\":[\"[Ţéé ~]\"],\"editor.inspector.option.tilted.6n0u5j\":[\"[Ţîļţéð ~~]\"],\"editor.inspector.option.top.2nypcs\":[\"[Ţöþ ~]\"],\"editor.inspector.option.transition.1rziz9e\":[\"[Ţŕáñšîţîöñ ~~~]\"],\"editor.inspector.option.vent.xda5j2\":[\"[Ṽéñţ ~~]\"],\"editor.inspector.option.walkOn.1n5sg9l\":[\"[Ŵáļķ öñ ~~]\"],\"editor.inspector.option.wall.blj585\":[\"[Ŵáļļ ~~]\"],\"editor.inspector.option.wallAbutment.lza941\":[\"[Ŵáļļ áƀûţɱéñţ ~~~~]\"],\"editor.inspector.option.wallLedger.5m8ana\":[\"[Ŵáļļ ļéðĝéŕ ~~~]\"],\"editor.inspector.option.wallShelf.yiozfl\":[\"[Ŵáļļ šĥéļƒ ~~~]\"],\"editor.inspector.option.waste.3xrp79\":[\"[Ŵášţé ~~]\"],\"editor.inspector.option.wye.14vupc8\":[\"[Ŵýé ~]\"],\"editor.lib.contextualHelp.addOrRemoveObjectsFromThe\":[\"[Åðð öŕ ŕéɱöṽé öƀĵéçţš ƒŕöɱ ţĥé šéļéçţîöñ ~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.adjustOneSideSCornerRadius\":[\"[Åðĵûšţ öñé šîðé’š çöŕñéŕ ŕáðîûš ~~~~~~~~]\"],\"editor.lib.contextualHelp.clearTheSelectionOrClickOutside\":[\"[Çļéáŕ ţĥé šéļéçţîöñ (öŕ çļîçķ öûţšîðé) ~~~~~~~~~~]\"],\"editor.lib.contextualHelp.clickAHandleDotToShow\":[\"[Çļîçķ á ĥáñðļé ðöţ ţö šĥöŵ ɱöṽé áŕŕöŵš ~~~~~~~~~~]\"],\"editor.lib.contextualHelp.clickOrDragTheSelectionTo\":[\"[Çļîçķ öŕ ðŕáĝ ţĥé šéļéçţîöñ ţö ɱöṽé îţ áš öñé ~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.clickTheHandleDotToShow\":[\"[Çļîçķ ţĥé ĥáñðļé ðöţ ţö šĥöŵ ɱöṽé + ŕöţáţé ĥáñðļéš ~~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.detachTheJointWhileDraggingAn\":[\"[Ðéţáçĥ ţĥé ĵöîñţ ŵĥîļé ðŕáĝĝîñĝ áñ áŕŕöŵ ~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.dragLeftOrRightToRotate\":[\"[Ðŕáĝ ļéƒţ öŕ ŕîĝĥţ ţö ŕöţáţé šéļéçţéð öƀĵéçţ ~~~~~~~~~~~~]\"],\"editor.lib.contextualHelp.dragSelectedMovableObject\":[\"[Ðŕáĝ šéļéçţéð ɱöṽáƀļé öƀĵéçţ ~~~~~~~~]\"],\"editor.lib.contextualHelp.groupSelectionSessionOnly\":[\"[Ĝŕöûþ šéļéçţîöñ (šéššîöñ öñļý) ~~~~~~~~]\"],\"editor.lib.contextualHelp.holdToRotateFreely\":[\"[Ĥöļð ţö ŕöţáţé ƒŕééļý ~~~~~~]\"],\"editor.lib.contextualHelp.rotate45\":[\"[Ŕöţáţé ±45° ~~]\"],\"editor.lib.contextualHelp.rotateTheSelection45\":[\"[Ŕöţáţé ţĥé šéļéçţîöñ ±45° ~~~~~~]\"],\"editor.lib.contextualHelp.rotatingFreely\":[\"[Ŕöţáţîñĝ ƒŕééļý (ñö áñĝļé šţéþ) ~~~~~~~~]\"],\"editor.lib.contextualHelp.switchTheRotationAxisYX\":[\"[Šŵîţçĥ ţĥé ŕöţáţîöñ áẋîš (Ý → Ẋ → Ž) ~~~~~~~~]\"],\"editor.lib.contextualHelp.ungroupSessionSelection\":[\"[Ûñĝŕöûþ šéššîöñ šéļéçţîöñ ~~~~~~~]\"],\"editor.lib.continuation.continuous\":[\"[Çöñţîñûöûš ~~~]\"],\"editor.lib.continuation.continuousCanopy\":[\"[Çöñţîñûöûš çáñöþý ~~~~~]\"],\"editor.lib.continuation.continuousRun\":[\"[Çöñţîñûöûš ŕûñ ~~~~]\"],\"editor.lib.continuation.curvedFence\":[\"[Çûŕṽéð ƒéñçé ~~~~]\"],\"editor.lib.continuation.freehandFence\":[\"[Ƒŕééĥáñð ƒéñçé ~~~~]\"],\"editor.lib.continuation.placeMultiple\":[\"[Þļáçé ɱûļţîþļé ~~~~]\"],\"editor.lib.continuation.placeOnce\":[\"[Þļáçé öñçé ~~~]\"],\"editor.lib.continuation.polygonRoom\":[\"[Þöļýĝöñ ŕööɱ ~~~~]\"],\"editor.lib.continuation.rectangleRoom\":[\"[Ŕéçţáñĝļé ŕööɱ ~~~~]\"],\"editor.lib.continuation.singleCabinet\":[\"[Šîñĝļé çáƀîñéţ ~~~~]\"],\"editor.lib.continuation.singleCanopy\":[\"[Šîñĝļé çáñöþý ~~~~]\"],\"editor.lib.continuation.singleFence\":[\"[Šîñĝļé ƒéñçé ~~~~]\"],\"editor.lib.continuation.walls\":[\"[Ŵáļļš ~~]\"],\"editor.lib.hudTitle.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"editor.lib.hudTitle.divideRoom\":[\"[Ðîṽîðé ŕööɱ ~~~]\"],\"editor.lib.hudTitle.editKind\":[\"[Éðîţ \",[\"kind\"],\" ~~]\"],\"editor.lib.hudTitle.erase\":[\"[Éŕášé ~~]\"],\"editor.lib.hudTitle.levelTerrain\":[\"[Ļéṽéļ ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.lowerTerrain\":[\"[Ļöŵéŕ ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.lib.hudTitle.moveKind\":[\"[Ṁöṽé \",[\"kind\"],\" ~~]\"],\"editor.lib.hudTitle.moveRoom\":[\"[Ṁöṽé ŕööɱ ~~~]\"],\"editor.lib.hudTitle.moveSelection\":[\"[Ṁöṽé šéļéçţîöñ ~~~~]\"],\"editor.lib.hudTitle.paint\":[\"[Þáîñţ ~~]\"],\"editor.lib.hudTitle.paintARectangle\":[\"[Þáîñţ á ŕéçţáñĝļé ~~~~~]\"],\"editor.lib.hudTitle.paintAShape\":[\"[Þáîñţ á šĥáþé ~~~~]\"],\"editor.lib.hudTitle.pickMaterial\":[\"[Þîçķ ɱáţéŕîáļ ~~~~]\"],\"editor.lib.hudTitle.raiseTerrain\":[\"[Ŕáîšé ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.resize\":[\"[Ŕéšîžé ~~]\"],\"editor.lib.hudTitle.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.lib.hudTitle.select\":[\"[Šéļéçţ ~~]\"],\"editor.lib.hudTitle.smartMeasure\":[\"[Šɱáŕţ ɱéášûŕé ~~~~]\"],\"editor.lib.hudTitle.smoothTerrain\":[\"[Šɱööţĥ ţéŕŕáîñ ~~~~]\"],\"editor.lib.hudTitle.splitKind\":[\"[Šþļîţ \",[\"kind\"],\" ~~]\"],\"editor.lib.hudTitle.terrace\":[\"[Ţéŕŕáçé ~~~]\"],\"editor.lib.wallDrawVariant.polygonRoom\":[\"[Þöļýĝöñ ŕööɱ ~~~~]\"],\"editor.lib.wallDrawVariant.rectangleRoom\":[\"[Ŕéçţáñĝļé ŕööɱ ~~~~]\"],\"editor.lib.wallDrawVariant.walls\":[\"[Ŵáļļš ~~]\"],\"editor.nodeDisplay.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.nodeDisplay.column\":[\"[Çöļûɱñ ~~]\"],\"editor.nodeDisplay.door\":[\"[Ðööŕ ~~]\"],\"editor.nodeDisplay.elevator\":[\"[Éļéṽáţöŕ ~~~]\"],\"editor.nodeDisplay.fence\":[\"[Ƒéñçé ~~]\"],\"editor.nodeDisplay.guide\":[\"[Ĝûîðé îɱáĝé ~~~]\"],\"editor.nodeDisplay.item\":[\"[Îţéɱ ~~]\"],\"editor.nodeDisplay.roof\":[\"[Ŕööƒ ~~]\"],\"editor.nodeDisplay.roofSegment\":[\"[Ŕööƒ šéĝɱéñţ ~~~~]\"],\"editor.nodeDisplay.room\":[\"[Ŕööɱ ~~]\"],\"editor.nodeDisplay.scan\":[\"[3Ð Šçáñ ~~]\"],\"editor.nodeDisplay.selection\":[\"[Šéļéçţîöñ ~~~]\"],\"editor.nodeDisplay.slab\":[\"[Šļáƀ ~~]\"],\"editor.nodeDisplay.stair\":[\"[Šţáîŕ ~~]\"],\"editor.nodeDisplay.stairSegment\":[\"[Šţáîŕ šéĝɱéñţ ~~~~]\"],\"editor.nodeDisplay.wall\":[\"[Ŵáļļ ~~]\"],\"editor.nodeDisplay.window\":[\"[Ŵîñðöŵ ~~]\"],\"editor.nodeDisplay.zone\":[\"[Žöñé ~~]\"],\"editor.panels.collections.collectionsPopover.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.panels.collections.collectionsPopover.collectionName\":[\"[Çöļļéçţîöñ ñáɱé… ~~~~~]\"],\"editor.panels.collections.collectionsPopover.collections\":[\"[Çöļļéçţîöñš ~~~~]\"],\"editor.panels.collections.collectionsPopover.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.collections.collectionsPopover.deleteName\":[\"[Ðéļéţé \\\"\",[\"name\"],\"\\\"? ~~]\"],\"editor.panels.collections.collectionsPopover.new\":[\"[Ñéŵ ~]\"],\"editor.panels.collections.collectionsPopover.noCollectionsYetCreateOneTo\":[\"[Ñö çöļļéçţîöñš ýéţ. Çŕéáţé öñé ţö ĝŕöûþ éļéɱéñţš ţöĝéţĥéŕ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.collections.collectionsPopover.rename\":[\"[Ŕéñáɱé ~~]\"],\"editor.panels.floorFoundationPanel.aThickerFloorGrowsUpwardThe\":[\"[Å ţĥîçķéŕ ƒļööŕ ĝŕöŵš ûþŵáŕð: ţĥé ŕööɱš ƀéļöŵ ķééþ ţĥéîŕ ĥéîĝĥţ. ~~~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.edgeFinish\":[\"[Éðĝé ƒîñîšĥ ~~~]\"],\"editor.panels.floorFoundationPanel.floorPlate\":[\"[Ƒļööŕ þļáţé ~~~]\"],\"editor.panels.floorFoundationPanel.floorPlateThicknesslabelThickRestingOn\":[\"[Ƒļööŕ þļáţé \",[\"thicknessLabel\"],\" ţĥîçķ, ŕéšţîñĝ öñ ţĥé ŵáļļš ƀéļöŵ ~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.floorThickness\":[\"[Ƒļööŕ ţĥîçķñéšš ~~~~~]\"],\"editor.panels.floorFoundationPanel.floorTopAbove\":[\"[Ƒļööŕ ţöþ +\",[\"height\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.floorTopValue\":[\"[Ƒļööŕ ţöþ \",[\"height\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.foundationFinish\":[\"[Ƒöûñðáţîöñ ƒîñîšĥ ~~~~~]\"],\"editor.panels.floorFoundationPanel.foundationHeight\":[\"[Ƒöûñðáţîöñ ĥéîĝĥţ ~~~~~]\"],\"editor.panels.floorFoundationPanel.kicker\":[\"[Ƒļööŕ þļáţé ~~~]\"],\"editor.panels.floorFoundationPanel.kickerLevel\":[\"[Ƒļööŕ þļáţé · \",[\"level\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.kickerRestsOn\":[\"[Ƒļööŕ þļáţé · \",[\"level\"],\" · ŕéšţš öñ \",[\"below\"],\" ~~~~~~]\"],\"editor.panels.floorFoundationPanel.lowerTogether\":[\"[\",[\"count\",\"plural\",{\"2\":[\"Ļöŵéŕ ƀöţĥ\"],\"other\":[\"Ļöŵéŕ áļļ \",\"#\"]}],\" ~~~~~~]\"],\"editor.panels.floorFoundationPanel.notToScale\":[\"[Ñöţ ţö šçáļé ~~~]\"],\"editor.panels.floorFoundationPanel.onTheGround\":[\"[Öñ ţĥé ĝŕöûñð ~~~~]\"],\"editor.panels.floorFoundationPanel.raiseTogether\":[\"[\",[\"count\",\"plural\",{\"2\":[\"Ŕáîšé ƀöţĥ\"],\"other\":[\"Ŕáîšé áļļ \",\"#\"]}],\" ~~~~~~]\"],\"editor.panels.floorFoundationPanel.raisedOnAFoundation\":[\"[Ŕáîšéð öñ á ƒöûñðáţîöñ ~~~~~~]\"],\"editor.panels.floorFoundationPanel.section.floorPlate\":[\"[Ƒļööŕ þļáţé · \",[\"thickness\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.section.floorTop\":[\"[Ƒļööŕ ţöþ ~~~]\"],\"editor.panels.floorFoundationPanel.section.foundation\":[\"[Ƒöûñðáţîöñ ~~~]\"],\"editor.panels.floorFoundationPanel.section.foundationKind\":[\"[Ƒöûñðáţîöñ · \",[\"foundation\"],\" ~~~]\"],\"editor.panels.floorFoundationPanel.section.ground\":[\"[Ĝŕöûñð ~~]\"],\"editor.panels.floorFoundationPanel.section.slab\":[\"[Šļáƀ · \",[\"thickness\"],\" ~~]\"],\"editor.panels.floorFoundationPanel.section.wallsBelow\":[\"[Ŵáļļš ƀéļöŵ ~~~]\"],\"editor.panels.floorFoundationPanel.sectionOnGround\":[\"[Šļáƀ \",[\"thickness\"],\" ţĥîçķ öñ ţĥé ĝŕöûñð, ƒļööŕ ţöþ \",[\"top\"],\" áƀöṽé ţĥé ĝŕöûñð ~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.sectionRaised\":[\"[Šļáƀ \",[\"thickness\"],\" ţĥîçķ öñ á \",[\"foundation\"],\" ƒöûñðáţîöñ, ƒļööŕ ţöþ \",[\"top\"],\" áƀöṽé ţĥé ĝŕöûñð ~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.slab\":[\"[Šļáƀ ~~]\"],\"editor.panels.floorFoundationPanel.slabThickness\":[\"[Šļáƀ ţĥîçķñéšš ~~~~]\"],\"editor.panels.floorFoundationPanel.theFloorSOutsideEdgeAll\":[\"[Ţĥé ƒļööŕ'š öûţšîðé éðĝé, áļļ áŕöûñð ţĥé ƒööţþŕîñţ. ~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.theFoundationStandsOnTheGround\":[\"[Ţĥé ƒöûñðáţîöñ šţáñðš öñ ţĥé ĝŕöûñð; ţĥé šļáƀ šîţš öñ îţ. ~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.theSlabSitsOnTheFoundation\":[\"[Ţĥé šļáƀ šîţš öñ ţĥé ƒöûñðáţîöñ (öŕ ţĥé ĝŕöûñð): á ţĥîçķéŕ šļáƀ ŕáîšéš ţĥé ƒļööŕ ţöþ áñð éṽéŕýţĥîñĝ öñ îţ. ~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.floorFoundationPanel.underTheFloor\":[\"[Ûñðéŕ ţĥé ƒļööŕ ~~~~]\"],\"editor.panels.floorOpeningPanel.aHatchInTheMezzanineIt\":[\"[Å ĥáţçĥ îñ ţĥé ɱéžžáñîñé: îţ çûţš öñļý ţĥé ɱéžžáñîñé’š ƒļööŕ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.alsoCutTheCeilingBelow\":[\"[Åļšö çûţ ţĥé çéîļîñĝ ƀéļöŵ ~~~~~~~]\"],\"editor.panels.floorOpeningPanel.alsoCutTheFloorAbove\":[\"[Åļšö çûţ ţĥé ƒļööŕ áƀöṽé ~~~~~~]\"],\"editor.panels.floorOpeningPanel.areaDragCorners\":[\"[\",[\"area\"],\" · Ðŕáĝ îţš çöŕñéŕš ţö çĥáñĝé ţĥé šĥáþé. ~~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.areaOwned\":[\"[\",[\"area\"],\" · Šĥáþé ƒöļļöŵš îţš öŵñéŕ. ~~~~~~]\"],\"editor.panels.floorOpeningPanel.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.floorOpeningPanel.done\":[\"[Ðöñé ~~]\"],\"editor.panels.floorOpeningPanel.kicker\":[\"[Öþéñîñĝ ~~~]\"],\"editor.panels.floorOpeningPanel.kickerLevel\":[\"[Öþéñîñĝ · \",[\"level\"],\" ~~~]\"],\"editor.panels.floorOpeningPanel.kickerRoom\":[\"[Öþéñîñĝ · îñ \",[\"room\"],\" ~~~]\"],\"editor.panels.floorOpeningPanel.kickerRoomLevel\":[\"[Öþéñîñĝ · îñ \",[\"room\"],\" · \",[\"level\"],\" ~~~]\"],\"editor.panels.floorOpeningPanel.oneVoidWith\":[\"[Öñ \",[\"level\"],\", áš öñé ṽöîð ŵîţĥ ţĥîš öþéñîñĝ. ~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.ownedByElevator\":[\"[Öŵñéð ƀý Éļéṽáţöŕ ~~~~~]\"],\"editor.panels.floorOpeningPanel.ownedByStaircase\":[\"[Öŵñéð ƀý Šţáîŕçášé ~~~~~]\"],\"editor.panels.floorOpeningPanel.thereIsNoFloorAboveThis\":[\"[Ţĥéŕé îš ñö ƒļööŕ áƀöṽé ţĥîš šţöŕéý. ~~~~~~~~~]\"],\"editor.panels.floorOpeningPanel.thereIsNoStoreyBelow\":[\"[Ţĥéŕé îš ñö šţöŕéý ƀéļöŵ. ~~~~~~]\"],\"editor.panels.floorOpeningPanel.title\":[\"[\",[\"source\",\"select\",{\"stair\":[\"Šţáîŕ öþéñîñĝ\"],\"elevator\":[\"Éļéṽáţöŕ öþéñîñĝ\"],\"ceiling\":[\"Çéîļîñĝ öþéñîñĝ\"],\"other\":[\"Ƒļööŕ öþéñîñĝ\"]}],\" ~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.alreadyJoined\":[\"[Öñé öƒ ţĥéɱ áļŕéáðý ŵŕáþš áñöţĥéŕ çöŕñéŕ. Ûñŵŕáþ îţ ƒîŕšţ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.cannotMerge\":[\"[Ţĥéšé ŵîñðöŵš çáññöţ ƀé ɱéŕĝéð. ~~~~~~~~]\"],\"editor.panels.mergeRefusal.cornerAngle\":[\"[Ţĥéîŕ ŵáļļš ɱééţ áţ ţöö šĥáŕþ öŕ ţöö ƒļáţ áñ áñĝļé ƒöŕ á çöŕñéŕ ŵîñðöŵ. ~~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.heightExceedsWall\":[\"[Ţĥé ŵîñðöŵ šéļéçţéð ƒîŕšţ îš ţáļļéŕ ţĥáñ ţĥé öţĥéŕ ŵáļļ. Šéļéçţ ţĥé öţĥéŕ öñé ƒîŕšţ. ~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.kindBetween\":[\"[Å \",[\"kind\"],\" îš ƀéţŵééñ ţĥéɱ. ~~~~~]\"],\"editor.panels.mergeRefusal.kindOverlap\":[\"[Šļîðîñĝ ţĥéɱ ţö ţĥé çöŕñéŕ ŵöûļð öṽéŕļáþ á \",[\"kind\"],\". ~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.notAdjacent\":[\"[Ţĥéý áŕé ţöö ƒáŕ áþáŕţ. Ŵîñðöŵš ɱéŕĝé ŵîţĥ áţ ɱöšţ \",[\"reach\"],\" ƀéţŵééñ ţĥéɱ. ~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.notAtCorner\":[\"[Öñé öƒ ţĥéɱ îš ţöö ƒáŕ ƒŕöɱ ţĥé çöŕñéŕ. Å ŵîñðöŵ ĵöîñš öñé ŵîţĥîñ \",[\"reach\"],\" öƒ îţ. ~~~~~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.notOnWall\":[\"[Å ŕööƒ öŕ ðöŕɱéŕ ŵîñðöŵ çáññöţ ĵöîñ áñöţĥéŕ ŵîñðöŵ. ~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.somethingBetween\":[\"[Ţĥéŕé îš šöɱéţĥîñĝ ƀéţŵééñ ţĥéɱ. ~~~~~~~~~]\"],\"editor.panels.mergeRefusal.somethingOverlap\":[\"[Šļîðîñĝ ţĥéɱ ţö ţĥé çöŕñéŕ ŵöûļð öṽéŕļáþ šöɱéţĥîñĝ. ~~~~~~~~~~~~~]\"],\"editor.panels.mergeRefusal.wallsNotMeeting\":[\"[Ţĥéîŕ ŵáļļš ðö ñöţ ɱééţ áţ á çöŕñéŕ. ~~~~~~~~~]\"],\"editor.panels.mixed\":[\"[Ṁîẋéð ~~]\"],\"editor.panels.mobilePanelSheet.close\":[\"[Çļöšé ~~]\"],\"editor.panels.mobileSelectionBar.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.mobileSelectionBar.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"editor.panels.mobileSelectionBar.editProperties\":[\"[Éðîţ þŕöþéŕţîéš ~~~~~]\"],\"editor.panels.mobileSelectionBar.editResolvedlabel\":[\"[Éðîţ \",[\"resolvedLabel\"],\" ~~]\"],\"editor.panels.mobileSelectionBar.move\":[\"[Ṁöṽé ~~]\"],\"editor.panels.multiHeightMode.currentlyCurrentlabel\":[\"[Çûŕŕéñţļý \",[\"currentLabel\"],\" ~~~]\"],\"editor.panels.multiHeightMode.customHeight\":[\"[Çûšţöɱ ĥéîĝĥţ ~~~~]\"],\"editor.panels.multiHeightMode.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"editor.panels.multiHeightMode.height\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.panels.multiHeightMode.top\":[\"[Ţöþ ~]\"],\"editor.panels.multiParametricInspector.labelSessionOnlyPlainClickReselects\":[\"[\",[\"label\"],\" (šéššîöñ öñļý). Þļáîñ çļîçķ ŕéšéļéçţš áļļ ɱéɱƀéŕš. Ñöţ šáṽéð ŵîţĥ ţĥé þŕöĵéçţ. ~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.multiSelectionPanel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"editor.panels.multiSelectionPanel.group\":[\"[Ĝŕöûþ ~~]\"],\"editor.panels.multiSelectionPanel.groupCtrlCmdG\":[\"[Ĝŕöûþ (Çţŕļ/Çɱð+Ĝ) ~~~~]\"],\"editor.panels.multiSelectionPanel.labelSessionOnlyPlainClickReselects\":[\"[\",[\"label\"],\" (šéššîöñ öñļý). Þļáîñ çļîçķ ŕéšéļéçţš áļļ ɱéɱƀéŕš. Ñöţ šáṽéð ŵîţĥ ţĥé þŕöĵéçţ. ~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.lengthSelected\":[\"[\",[\"length\"],\" šéļéçţéð ~~~]\"],\"editor.panels.multiSelectionPanel.mergeWindows\":[\"[Ṁéŕĝé ŵîñðöŵš ~~~~]\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoACornerWindow\":[\"[Ṁéŕĝé ŵîñðöŵš îñţö á çöŕñéŕ ŵîñðöŵ: ƀöţĥ ţáķé ţĥé ĥéîĝĥţ, šîļļ áñð ţýþé öƒ ţĥé öñé ýöû šéļéçţéð ƒîŕšţ ~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoOneAcrossBoth\":[\"[Ṁéŕĝé ŵîñðöŵš îñţö öñé áçŕöšš ƀöţĥ: îţ ķééþš ţĥé ţýþé áñð šţýļé öƒ ţĥé öñé ýöû šéļéçţéð ƒîŕšţ ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.selectBuilding\":[\"[Šéļéçţ ƀûîļðîñĝ ~~~~~]\"],\"editor.panels.multiSelectionPanel.selectTheWholeBuildingToMove\":[\"[Šéļéçţ ţĥé ŵĥöļé ƀûîļðîñĝ ţö ɱöṽé áļļ îţš ļéṽéļš ~~~~~~~~~~~~]\"],\"editor.panels.multiSelectionPanel.ungroup\":[\"[Ûñĝŕöûþ ~~~]\"],\"editor.panels.multiSelectionPanel.ungroupCtrlCmdShiftG\":[\"[Ûñĝŕöûþ (Çţŕļ/Çɱð+Šĥîƒţ+Ĝ) ~~~~~~]\"],\"editor.panels.multiSelectionPanel.unwrapTheCorner\":[\"[Ûñŵŕáþ ţĥé çöŕñéŕ ~~~~~]\"],\"editor.panels.multiSelectionPanel.unwrapTheCornerBothWindowsStay\":[\"[Ûñŵŕáþ ţĥé çöŕñéŕ: ƀöţĥ ŵîñðöŵš šţáý, éáçĥ ƒŕáɱéð áţ ţĥé çöŕñéŕ ~~~~~~~~~~~~~~~~]\"],\"editor.panels.panelManager.selection\":[\"[Šéļéçţîöñ ~~~]\"],\"editor.panels.panelWrapper.back\":[\"[Ɓáçķ ~~]\"],\"editor.panels.panelWrapper.close\":[\"[Çļöšé ~~]\"],\"editor.panels.panelWrapper.closeTitle\":[\"[Çļöšé \",[\"title\"],\" ~~]\"],\"editor.panels.panelWrapper.collapsePanel\":[\"[Çöļļáþšé þáñéļ ~~~~]\"],\"editor.panels.panelWrapper.collections\":[\"[Çöļļéçţîöñš ~~~~]\"],\"editor.panels.panelWrapper.expandPanel\":[\"[Éẋþáñð þáñéļ ~~~~]\"],\"editor.panels.panelWrapper.manageCollections\":[\"[Ṁáñáĝé çöļļéçţîöñš… ~~~~~~]\"],\"editor.panels.panelWrapper.openTitle\":[\"[Öþéñ \",[\"title\"],\" ~~]\"],\"editor.panels.panelWrapper.reset\":[\"[Ŕéšéţ ~~]\"],\"editor.panels.panelWrapper.titleHitAnErrorAndWas\":[\"[“\",[\"title\"],\"” ĥîţ áñ éŕŕöŕ áñð ŵáš ûñļöáðéð ƒöŕ ţĥîš šéššîöñ. ~~~~~~~~~~~~]\"],\"editor.panels.parametricFieldControl.mixed\":[\"[Ṁîẋéð ~~]\"],\"editor.panels.parametricInspector.actions\":[\"[Åçţîöñš ~~~]\"],\"editor.panels.parametricInspector.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.parametricInspector.deleteWithContents\":[\"[Ðéļéţé ŵîţĥ çöñţéñţš ~~~~~~]\"],\"editor.panels.parametricInspector.move\":[\"[Ṁöṽé ~~]\"],\"editor.panels.referencePanel.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.panels.referencePanel.capture\":[\"[Çáþţûŕé ~~~]\"],\"editor.panels.referencePanel.center\":[\"[Çéñţéŕ ~~]\"],\"editor.panels.referencePanel.clearScale\":[\"[Çļéáŕ Šçáļé ~~~]\"],\"editor.panels.referencePanel.clickBothEndsOfAKnown\":[\"[Çļîçķ ƀöţĥ éñðš öƒ á ķñöŵñ ðîšţáñçé öñ ţĥé þļáñ, ţĥéñ ţýþé îţš ŕéáļ ļéñĝţĥ. ~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.referencePanel.delete\":[\"[Ðéļéţé ~~]\"],\"editor.panels.referencePanel.drawALineOverAKnown\":[\"[Ðŕáŵ á ļîñé öṽéŕ á ķñöŵñ ðîɱéñšîöñ öñ ţĥé þļáñ, ţĥéñ ţýþé îţš ŕéáļ ļéñĝţĥ ţö šçáļé ţĥé îɱáĝé éẋáçţļý. ~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.referencePanel.editScale\":[\"[Éðîţ Šçáļé ~~~]\"],\"editor.panels.referencePanel.guideImage\":[\"[Ĝûîðé Îɱáĝé ~~~]\"],\"editor.panels.referencePanel.hide\":[\"[Ĥîðé ~~]\"],\"editor.panels.referencePanel.hideScale\":[\"[Ĥîðé Šçáļé ~~~]\"],\"editor.panels.referencePanel.image\":[\"[Îɱáĝé ~~]\"],\"editor.panels.referencePanel.lock\":[\"[Ļöçķ ~~]\"],\"editor.panels.referencePanel.move\":[\"[Ṁöṽé ~~]\"],\"editor.panels.referencePanel.opacity\":[\"[Öþáçîţý ~~~]\"],\"editor.panels.referencePanel.overlayImageUnavailableReplaceTheImage\":[\"[Öṽéŕļáý îɱáĝé ûñáṽáîļáƀļé. Ŕéþļáçé ţĥé îɱáĝé ţö ŕéšţöŕé îţ. ~~~~~~~~~~~~~~~]\"],\"editor.panels.referencePanel.pos\":[\"[þöš ~]\"],\"editor.panels.referencePanel.position\":[\"[Þöšîţîöñ ~~~]\"],\"editor.panels.referencePanel.quickActions\":[\"[Ǫûîçķ Åçţîöñš ~~~~]\"],\"editor.panels.referencePanel.referenceScale\":[\"[Ŕéƒéŕéñçé Šçáļé ~~~~~]\"],\"editor.panels.referencePanel.replace\":[\"[Ŕéþļáçé ~~~]\"],\"editor.panels.referencePanel.replacing\":[\"[Ŕéþļáçîñĝ... ~~~]\"],\"editor.panels.referencePanel.resetImageScale\":[\"[Ŕéšéţ Îɱáĝé Šçáļé ~~~~~]\"],\"editor.panels.referencePanel.resetRotation\":[\"[Ŕéšéţ Ŕöţáţîöñ ~~~~]\"],\"editor.panels.referencePanel.rot\":[\"[ŕöţ ~]\"],\"editor.panels.referencePanel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"editor.panels.referencePanel.scale\":[\"[šçáļé ~~]\"],\"editor.panels.referencePanel.scaleOpacity\":[\"[Šçáļé & Öþáçîţý ~~~~]\"],\"editor.panels.referencePanel.scaled\":[\"[Šçáļéð · \",[\"scale\"],\" ~~]\"],\"editor.panels.referencePanel.scaledHidden\":[\"[Šçáļéð (ĥîððéñ) · \",[\"scale\"],\" ~~~~]\"],\"editor.panels.referencePanel.setScale\":[\"[Šéţ Šçáļé ~~~]\"],\"editor.panels.referencePanel.show\":[\"[Šĥöŵ ~~]\"],\"editor.panels.referencePanel.showScale\":[\"[Šĥöŵ Šçáļé ~~~]\"],\"editor.panels.referencePanel.uncalibrated\":[\"[Ûñçáļîƀŕáţéð ~~~~]\"],\"editor.panels.referencePanel.unlock\":[\"[Ûñļöçķ ~~]\"],\"editor.panels.referencePanel.xyz\":[\"[ẊÝŽ ~]\"],\"editor.panels.roomConstructionRows.aDrawnSlabSetItsThickness\":[\"[Å ðŕáŵñ šļáƀ: šéţ îţš ţĥîçķñéšš áñð ƒîñîšĥéš ĥéŕé. Îţ ĥáš ñö ƒööţþŕîñţ ĥéîĝĥţ öŕ ƒöûñðáţîöñ. ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.addMezzanine\":[\"[+ Åðð ɱéžžáñîñé ~~~~]\"],\"editor.panels.roomConstructionRows.atFloorLevel\":[\"[Åţ ƒļööŕ ļéṽéļ ~~~~]\"],\"editor.panels.roomConstructionRows.builtOn\":[\"[Ɓûîļţ öñ ~~~]\"],\"editor.panels.roomConstructionRows.builtWith\":[\"[Ɓûîļţ ŵîţĥ ~~~]\"],\"editor.panels.roomConstructionRows.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.panels.roomConstructionRows.ceilingAt\":[\"[Åţ \",[\"height\"],\" ~]\"],\"editor.panels.roomConstructionRows.closeWithWalls\":[\"[Çļöšé ŵîţĥ ŵáļļš ~~~~~]\"],\"editor.panels.roomConstructionRows.drawnFloor\":[\"[\",[\"ambiguous\",\"select\",{\"yes\":[\"Ƒļööŕ îš šéṽéŕáļ ðŕáŵñ šļáƀš, ɱöšţļý \",[\"name\"]],\"other\":[\"Ƒļööŕ îš á ðŕáŵñ šļáƀ: \",[\"name\"]]}],[\"shared\",\"plural\",{\"0\":[],\"one\":[\" (šĥáŕéð ŵîţĥ \",\"#\",\" ŕööɱ)\"],\"other\":[\" (šĥáŕéð ŵîţĥ \",\"#\",\" ŕööɱš)\"]}],\" ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.drawnFloorSwitchHint\":[\"[Ţĥîš ƒļööŕ îš á ðŕáŵñ šļáƀ: šéļéçţ îţ ţö éðîţ öŕ ðéļéţé îţ. ~~~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.drawnSlab\":[\"[Ðŕáŵñ šļáƀ ~~~]\"],\"editor.panels.roomConstructionRows.drawnSlabAt\":[\"[Ðŕáŵñ šļáƀ áţ \",[\"height\"],\" ~~~~]\"],\"editor.panels.roomConstructionRows.editShape\":[\"[Éðîţ šĥáþé ~~~]\"],\"editor.panels.roomConstructionRows.flatAtWallHeight\":[\"[Ƒļáţ, áţ ŵáļļ ĥéîĝĥţ ~~~~~]\"],\"editor.panels.roomConstructionRows.floor\":[\"[Ƒļööŕ ~~]\"],\"editor.panels.roomConstructionRows.floorDown\":[\"[\",[\"distance\"],\" ðöŵñ ~~]\"],\"editor.panels.roomConstructionRows.floorThickness\":[\"[Ƒļööŕ ţĥîçķñéšš ~~~~~]\"],\"editor.panels.roomConstructionRows.floorUp\":[\"[\",[\"distance\"],\" ûþ ~]\"],\"editor.panels.roomConstructionRows.handDrawnCeiling\":[\"[Ĥáñð-ðŕáŵñ çéîļîñĝ ~~~~~]\"],\"editor.panels.roomConstructionRows.height\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.panels.roomConstructionRows.includeFloor\":[\"[Îñçļûðé ƒļööŕ ~~~~]\"],\"editor.panels.roomConstructionRows.includePart\":[\"[\",[\"part\",\"select\",{\"floor\":[\"Îñçļûðé ƒļööŕ\"],\"walls\":[\"Îñçļûðé ŵáļļš\"],\"other\":[\"Îñçļûðé çéîļîñĝ\"]}],\" ~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.includeWalls\":[\"[Îñçļûðé ŵáļļš ~~~~]\"],\"editor.panels.roomConstructionRows.keepOutsideDimensions\":[\"[Ķééþ öûţšîðé ðîɱéñšîöñš ~~~~~~~]\"],\"editor.panels.roomConstructionRows.lowered\":[\"[Ļöŵéŕéð \",[\"lift\"],\" ~~~]\"],\"editor.panels.roomConstructionRows.newFloor\":[\"[+ Ñéŵ ƒļööŕ ~~~]\"],\"editor.panels.roomConstructionRows.noFloor\":[\"[Ñö ƒļööŕ ~~~]\"],\"editor.panels.roomConstructionRows.notIncluded\":[\"[Ñöţ îñçļûðéð ~~~~]\"],\"editor.panels.roomConstructionRows.nothingToChange\":[\"[Ñöţĥîñĝ ţö çĥáñĝé. ~~~~~]\"],\"editor.panels.roomConstructionRows.onTheGround\":[\"[Öñ ţĥé ĝŕöûñð ~~~~]\"],\"editor.panels.roomConstructionRows.onTheWallsBelow\":[\"[Öñ ţĥé ŵáļļš ƀéļöŵ ~~~~~]\"],\"editor.panels.roomConstructionRows.openSides\":[\"[\",[\"openSides\",\"plural\",{\"one\":[\"#\",\" öþéñ šîðé\"],\"other\":[\"#\",\" öþéñ šîðéš\"]}],\" ~~~~~~]\"],\"editor.panels.roomConstructionRows.partialCovered\":[\"[Þáŕţîáļ · \",[\"coverage\",\"number\",\"percent\"],\" çöṽéŕéð ~~~~~]\"],\"editor.panels.roomConstructionRows.partialWalls\":[\"[Þáŕţîáļ · \",[\"walls\",\"plural\",{\"one\":[\"#\",\" ŵáļļ\"],\"other\":[\"#\",\" ŵáļļš\"]}],\", \",[\"openSides\",\"plural\",{\"one\":[\"#\",\" öþéñ šîðé\"],\"other\":[\"#\",\" öþéñ šîðéš\"]}],\" ~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.raised\":[\"[Ŕáîšéð \",[\"lift\"],\" ~~]\"],\"editor.panels.roomConstructionRows.replace\":[\"[Ŕéþļáçé ~~~]\"],\"editor.panels.roomConstructionRows.select\":[\"[Šéļéçţ ~~]\"],\"editor.panels.roomConstructionRows.shape\":[\"[Šĥáþé ~~]\"],\"editor.panels.roomConstructionRows.sharedWallsNote\":[\"[Ţûŕñîñĝ ŵáļļš öƒƒ ķééþš ţĥé öñéš šĥáŕéð ŵîţĥ \",[\"rooms\"],\". ~~~~~~~~~~~~]\"],\"editor.panels.roomConstructionRows.sitsOnPreset\":[\"[Šîţš öñ: \",[\"name\"],\" · \",[\"preset\"],\" ~~]\"],\"editor.panels.roomConstructionRows.useExisting\":[\"[Ûšé éẋîšţîñĝ ~~~~]\"],\"editor.panels.roomConstructionRows.wallCount\":[\"[\",[\"walls\",\"plural\",{\"one\":[\"#\",\" ŵáļļ\"],\"other\":[\"#\",\" ŵáļļš\"]}],\" ~~~]\"],\"editor.panels.roomConstructionRows.walls\":[\"[Ŵáļļš ~~]\"],\"editor.panels.roomConstructionRows.wallsThickenInwardSoTheBuilding\":[\"[Ŵáļļš ţĥîçķéñ îñŵáŕð, šö ţĥé ƀûîļðîñĝ'š öûţéŕ šîžé šţáýš ţĥé šáɱé. ~~~~~~~~~~~~~~~~]\"],\"editor.panels.roomOpeningsField.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"editor.panels.roomOpeningsField.done\":[\"[Ðöñé ~~]\"],\"editor.panels.roomOpeningsField.editFloor\":[\"[Éðîţ ƒļööŕ ~~~]\"],\"editor.panels.roomOpeningsField.elevatorOpening\":[\"[Éļéṽáţöŕ öþéñîñĝ ~~~~~]\"],\"editor.panels.roomOpeningsField.noOpenings\":[\"[Ñö öþéñîñĝš ~~~]\"],\"editor.panels.roomOpeningsField.noOpeningsYetCutOneFor\":[\"[Ñö öþéñîñĝš ýéţ. Çûţ öñé ƒöŕ á šţáîŕ ṽöîð öŕ á ĥáţçĥ. ~~~~~~~~~~~~]\"],\"editor.panels.roomOpeningsField.openingNumber\":[\"[Öþéñîñĝ \",[\"number\"],\" ~~~]\"],\"editor.panels.roomOpeningsField.stairOpening\":[\"[Šţáîŕ öþéñîñĝ ~~~~]\"],\"editor.panels.roomPanel.addStairs\":[\"[Åðð šţáîŕš ~~~]\"],\"editor.panels.roomPanel.addToAUnit\":[\"[Åðð ţö á ûñîţ ~~~]\"],\"editor.panels.roomPanel.area\":[\"[Åŕéá ~~]\"],\"editor.panels.roomPanel.browse\":[\"[Ɓŕöŵšé ~~]\"],\"editor.panels.roomPanel.builtWith\":[\"[Ɓûîļţ ŵîţĥ ~~~]\"],\"editor.panels.roomPanel.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"editor.panels.roomPanel.deleteRoom\":[\"[Ðéļéţé ŕööɱ ~~~]\"],\"editor.panels.roomPanel.editShape\":[\"[Éðîţ šĥáþé ~~~]\"],\"editor.panels.roomPanel.floor\":[\"[Ƒļööŕ ~~]\"],\"editor.panels.roomPanel.headroom\":[\"[\",[\"height\"],\" ĥéáðŕööɱ ~~~]\"],\"editor.panels.roomPanel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"editor.panels.roomPanel.hideCode\":[\"[Ĥîðé çöðé ~~~]\"],\"editor.panels.roomPanel.kickerLevel\":[\"[Ŕööɱ · \",[\"level\"],\" ~~]\"],\"editor.panels.roomPanel.kickerMezzanineIn\":[\"[Ṁéžžáñîñé · îñ \",[\"room\"],\" ~~~~]\"],\"editor.panels.roomPanel.kickerNotEnclosed\":[\"[Ŕööɱ · ñöţ éñçļöšéð ~~~~~]\"],\"editor.panels.roomPanel.loading\":[\"[Ļöáðîñĝ… ~~~]\"],\"editor.panels.roomPanel.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.panels.roomPanel.mezzanineName\":[\"[Ṁéžžáñîñé ñáɱé ~~~~]\"],\"editor.panels.roomPanel.mezzanineNames\":[\"[Ṁéžžáñîñé ñáɱéš ~~~~~]\"],\"editor.panels.roomPanel.newUnit\":[\"[Ñéŵ ûñîţ ~~~]\"],\"editor.panels.roomPanel.none\":[\"[Ñöñé ~~]\"],\"editor.panels.roomPanel.notEnoughHeadroom\":[\"[Ñöţ éñöûĝĥ ĥéáðŕööɱ ~~~~~~]\"],\"editor.panels.roomPanel.openRoomArea\":[\"[\",[\"area\"],\" · Çļöšé îţš ŵáļļš ţö ƀûîļð îţš ƒļööŕ áñð çéîļîñĝ. ~~~~~~~~~~~~]\"],\"editor.panels.roomPanel.openingCounts\":[\"[\",[\"doors\",\"plural\",{\"one\":[\"#\",\" ðööŕ\"],\"other\":[\"#\",\" ðööŕš\"]}],\" · \",[\"windows\",\"plural\",{\"one\":[\"#\",\" ŵîñðöŵ\"],\"other\":[\"#\",\" ŵîñðöŵš\"]}],\" ~~~~~~~]\"],\"editor.panels.roomPanel.overTheMezzanine\":[\"[Öṽéŕ ţĥé ɱéžžáñîñé ~~~~~]\"],\"editor.panels.roomPanel.perimeter\":[\"[Þéŕîɱéţéŕ ~~~]\"],\"editor.panels.roomPanel.pick\":[\"[Þîçķ ~~]\"],\"editor.panels.roomPanel.pickingItAddsANumber\":[\"[Þîçķîñĝ îţ áððš á ñûɱƀéŕ ~~~~~~]\"],\"editor.panels.roomPanel.remove\":[\"[Ŕéɱöṽé ~~]\"],\"editor.panels.roomPanel.removeFromUnit\":[\"[Ŕéɱöṽé ƒŕöɱ ûñîţ ~~~~~]\"],\"editor.panels.roomPanel.removeFromUnitNamed\":[\"[Ŕéɱöṽé ƒŕöɱ \",[\"unit\"],\" ~~~]\"],\"editor.panels.roomPanel.rename\":[\"[Ŕéñáɱé ~~]\"],\"editor.panels.roomPanel.renameNamed\":[\"[\",[\"name\"],\" · Ŕéñáɱé ~~]\"],\"editor.panels.roomPanel.revert\":[\"[Ŕéṽéŕţ ~~]\"],\"editor.panels.roomPanel.room\":[\"[Ŕööɱ ~~]\"],\"editor.panels.roomPanel.roomColourUsedInThePlan\":[\"[Ŕööɱ çöļöûŕ — ûšéð îñ ţĥé þļáñ áñð ļáƀéļš ~~~~~~~~~~]\"],\"editor.panels.roomPanel.roomName\":[\"[Ŕööɱ ñáɱé ~~~]\"],\"editor.panels.roomPanel.roomNames\":[\"[Ŕööɱ ñáɱéš ~~~]\"],\"editor.panels.roomPanel.scriptedFinish\":[\"[Šçŕîþţéð ƒîñîšĥ ~~~~~]\"],\"editor.panels.roomPanel.shape\":[\"[Šĥáþé ~~]\"],\"editor.panels.roomPanel.showMezzanineNames\":[\"[Šĥöŵ ɱéžžáñîñé ñáɱéš ~~~~~~]\"],\"editor.panels.roomPanel.showRoomNames\":[\"[Šĥöŵ ŕööɱ ñáɱéš ~~~~]\"],\"editor.panels.roomPanel.stairs\":[\"[Šţáîŕš ~~]\"],\"editor.panels.roomPanel.unit\":[\"[Ûñîţ ~~]\"],\"editor.panels.roomPanel.use\":[\"[Ûšé ~]\"],\"editor.panels.roomPanel.useTyped\":[[\"use\"],\" “\",[\"name\"],\"”\"],\"editor.panels.roomPanel.usedOnThisLevel\":[\"[\",[\"used\"],\" öñ ţĥîš ļéṽéļ ~~~~]\"],\"editor.panels.roomPanel.viewCode\":[\"[Ṽîéŵ çöðé ~~~]\"],\"editor.panels.scriptUnreadable\":[\"[Ţĥé šçŕîþţ çöûļð ñöţ ƀé ŕéáð. ~~~~~~~]\"],\"editor.panels.shapeChoice.polygon\":[\"[Þöļýĝöñ ~~~]\"],\"editor.panels.shapeChoice.rectangle\":[\"[Ŕéçţáñĝļé ~~~]\"],\"editor.panels.wallRegionList.deleteRegion\":[\"[Ðéļéţé ŕéĝîöñ ~~~~]\"],\"editor.panels.wallRegionList.paintRegions\":[\"[Þáîñţ ŕéĝîöñš ~~~~]\"],\"editor.reloadEditor\":[\"[Ŕéļöáð éðîţöŕ ~~~~]\"],\"editor.room.builtOn.above\":[\"[\",[\"current\"],\" · \",[\"distance\"],\" áƀöṽé \",[\"shared\"],\" ~~]\"],\"editor.room.builtOn.below\":[\"[\",[\"current\"],\" · \",[\"distance\"],\" ƀéļöŵ \",[\"shared\"],\" ~~]\"],\"editor.room.builtOn.levelWith\":[\"[\",[\"current\"],\" · ļéṽéļ ŵîţĥ \",[\"shared\"],\" ~~~]\"],\"editor.roomName.attic\":[\"[Åţţîç ~~]\"],\"editor.roomName.balcony\":[\"[Ɓáļçöñý ~~~]\"],\"editor.roomName.basement\":[\"[Ɓášéɱéñţ ~~~]\"],\"editor.roomName.bathroom\":[\"[Ɓáţĥŕööɱ ~~~]\"],\"editor.roomName.bedroom\":[\"[Ɓéðŕööɱ ~~~]\"],\"editor.roomName.boilerRoom\":[\"[Ɓöîļéŕ ŕööɱ ~~~]\"],\"editor.roomName.carport\":[\"[Çáŕþöŕţ ~~~]\"],\"editor.roomName.cellar\":[\"[Çéļļáŕ ~~]\"],\"editor.roomName.closet\":[\"[Çļöšéţ ~~]\"],\"editor.roomName.corridor\":[\"[Çöŕŕîðöŕ ~~~]\"],\"editor.roomName.courtyard\":[\"[Çöûŕţýáŕð ~~~]\"],\"editor.roomName.deck\":[\"[Ðéçķ ~~]\"],\"editor.roomName.den\":[\"[Ðéñ ~]\"],\"editor.roomName.diningRoom\":[\"[Ðîñîñĝ ŕööɱ ~~~]\"],\"editor.roomName.dressingRoom\":[\"[Ðŕéššîñĝ ŕööɱ ~~~~]\"],\"editor.roomName.enSuite\":[\"[Éñ-šûîţé ~~~]\"],\"editor.roomName.entrance\":[\"[Éñţŕáñçé ~~~]\"],\"editor.roomName.familyRoom\":[\"[Ƒáɱîļý ŕööɱ ~~~]\"],\"editor.roomName.gallery\":[\"[Ĝáļļéŕý ~~~]\"],\"editor.roomName.gamesRoom\":[\"[Ĝáɱéš ŕööɱ ~~~]\"],\"editor.roomName.garage\":[\"[Ĝáŕáĝé ~~]\"],\"editor.roomName.garden\":[\"[Ĝáŕðéñ ~~]\"],\"editor.roomName.gardenShed\":[\"[Ĝáŕðéñ šĥéð ~~~]\"],\"editor.roomName.guestRoom\":[\"[Ĝûéšţ ŕööɱ ~~~]\"],\"editor.roomName.gym\":[\"[Ĝýɱ ~]\"],\"editor.roomName.hallway\":[\"[Ĥáļļŵáý ~~~]\"],\"editor.roomName.homeCinema\":[\"[Ĥöɱé çîñéɱá ~~~]\"],\"editor.roomName.kidsRoom\":[\"[Ķîðš' ŕööɱ ~~~]\"],\"editor.roomName.kitchen\":[\"[Ķîţçĥéñ ~~~]\"],\"editor.roomName.kitchenette\":[\"[Ķîţçĥéñéţţé ~~~~]\"],\"editor.roomName.landing\":[\"[Ļáñðîñĝ ~~~]\"],\"editor.roomName.laundry\":[\"[Ļáûñðŕý ~~~]\"],\"editor.roomName.library\":[\"[Ļîƀŕáŕý ~~~]\"],\"editor.roomName.livingRoom\":[\"[Ļîṽîñĝ ŕööɱ ~~~]\"],\"editor.roomName.loft\":[\"[Ļöƒţ ~~]\"],\"editor.roomName.lounge\":[\"[Ļöûñĝé ~~]\"],\"editor.roomName.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.roomName.mudroom\":[\"[Ṁûðŕööɱ ~~~]\"],\"editor.roomName.nursery\":[\"[Ñûŕšéŕý ~~~]\"],\"editor.roomName.office\":[\"[Öƒƒîçé ~~]\"],\"editor.roomName.pantry\":[\"[Þáñţŕý ~~]\"],\"editor.roomName.patio\":[\"[Þáţîö ~~]\"],\"editor.roomName.playroom\":[\"[Þļáýŕööɱ ~~~]\"],\"editor.roomName.poolArea\":[\"[Þööļ áŕéá ~~~]\"],\"editor.roomName.porch\":[\"[Þöŕçĥ ~~]\"],\"editor.roomName.powderRoom\":[\"[Þöŵðéŕ ŕööɱ ~~~]\"],\"editor.roomName.primaryBedroom\":[\"[Þŕîɱáŕý ƀéðŕööɱ ~~~~~]\"],\"editor.roomName.readingNook\":[\"[Ŕéáðîñĝ ñööķ ~~~~]\"],\"editor.roomName.section.bathrooms\":[\"[Ɓáţĥŕööɱš ~~~]\"],\"editor.roomName.section.circulation\":[\"[Çîŕçûļáţîöñ ~~~~]\"],\"editor.roomName.section.living\":[\"[Ļîṽîñĝ ~~]\"],\"editor.roomName.section.mezzanine\":[\"[Ṁéžžáñîñé ~~~]\"],\"editor.roomName.section.outdoor\":[\"[Öûţðööŕ ~~~]\"],\"editor.roomName.section.sleeping\":[\"[Šļééþîñĝ ~~~]\"],\"editor.roomName.section.utility\":[\"[Ûţîļîţý & šţöŕáĝé ~~~~~]\"],\"editor.roomName.section.work\":[\"[Ŵöŕķ & ĥöƀƀîéš ~~~~]\"],\"editor.roomName.showerRoom\":[\"[Šĥöŵéŕ ŕööɱ ~~~]\"],\"editor.roomName.stairwell\":[\"[Šţáîŕŵéļļ ~~~]\"],\"editor.roomName.storage\":[\"[Šţöŕáĝé ~~~]\"],\"editor.roomName.studio\":[\"[Šţûðîö ~~]\"],\"editor.roomName.study\":[\"[Šţûðý ~~]\"],\"editor.roomName.sunroom\":[\"[Šûñŕööɱ ~~~]\"],\"editor.roomName.terrace\":[\"[Ţéŕŕáçé ~~~]\"],\"editor.roomName.toilet\":[\"[Ţöîļéţ ~~]\"],\"editor.roomName.utilityRoom\":[\"[Ûţîļîţý ŕööɱ ~~~~]\"],\"editor.roomName.veranda\":[\"[Ṽéŕáñðá ~~~]\"],\"editor.roomName.walkInCloset\":[\"[Ŵáļķ-îñ çļöšéţ ~~~~]\"],\"editor.roomName.workshop\":[\"[Ŵöŕķšĥöþ ~~~]\"],\"editor.theEditorSceneFailedToRender\":[\"[Ţĥé éðîţöŕ šçéñé ƒáîļéð ţö ŕéñðéŕ ~~~~~~~~~]\"],\"editor.toolHint.aCurtainWallTakesNoCorner.1qxjv5i\":[\"[Å çûŕţáîñ ŵáļļ ţáķéš ñö çöŕñéŕ ŵîñðöŵ ~~~~~~~~~~]\"],\"editor.toolHint.aCurvedWallTakesNoCorner.1vdnaw5\":[\"[Å çûŕṽéð ŵáļļ ţáķéš ñö çöŕñéŕ ŵîñðöŵ ~~~~~~~~~]\"],\"editor.toolHint.addACornerClickTheFirst.o4r67t\":[\"[Åðð á çöŕñéŕ · çļîçķ ţĥé ƒîŕšţ ţö çļöšé ~~~~~~~~~]\"],\"editor.toolHint.anotherOpeningIsInTheWay.11l9dd0\":[\"[Åñöţĥéŕ öþéñîñĝ îš îñ ţĥé ŵáý áţ ţĥé çöŕñéŕ ~~~~~~~~~~~]\"],\"editor.toolHint.autoHangers.10554ka\":[\"[Åûţö ĥáñĝéŕš ~~~~]\"],\"editor.toolHint.autoHangersClickOrPressH.rwa3ka\":[\"[Åûţö ĥáñĝéŕš - çļîçķ öŕ þŕéšš Ĥ ţö ţöĝĝļé ~~~~~~~~~~]\"],\"editor.toolHint.autoHangersOff.7yx01x\":[\"[Åûţö ĥáñĝéŕš: Öƒƒ ~~~~~]\"],\"editor.toolHint.autoHangersOn.10b1umh\":[\"[Åûţö ĥáñĝéŕš: Öñ ~~~~]\"],\"editor.toolHint.bypassSnapping.w5lmdv\":[\"[Ɓýþášš šñáþþîñĝ ~~~~~]\"],\"editor.toolHint.cancel.ew9em3\":[\"[Çáñçéļ ~~]\"],\"editor.toolHint.cancelMove.lvp31c\":[\"[Çáñçéļ ɱöṽé ~~~]\"],\"editor.toolHint.cancelRunExit.zqjf3h\":[\"[Çáñçéļ ŕûñ / éẋîţ ~~~~]\"],\"editor.toolHint.cancelStartPoint.1xbq2lh\":[\"[Çáñçéļ šţáŕţ þöîñţ ~~~~~]\"],\"editor.toolHint.cornerWindow.1avkzpo\":[\"[Çöŕñéŕ ŵîñðöŵ ~~~~]\"],\"editor.toolHint.cuts.1y0axps\":[\"[Çûţš ~~]\"],\"editor.toolHint.cutsValue.ouzhvb\":[\"[Çûţš: \",[\"value\"],\" ~~]\"],\"editor.toolHint.cutsValueEven.1ngsz3\":[\"[Çûţš: \",[\"value\"],\", éṽéñ ~~~]\"],\"editor.toolHint.cycleMonoGableButterfly.1poga3m\":[\"[Çýçļé ɱöñö / ĝáƀļé / ƀûţţéŕƒļý ~~~~~~~]\"],\"editor.toolHint.cycleSnappingMode.1ct0gn6\":[\"[Çýçļé šñáþþîñĝ ɱöðé ~~~~~~]\"],\"editor.toolHint.doorStyleClickOrPressL.33pe65\":[\"[Ðööŕ šţýļé — çļîçķ öŕ þŕéšš Ļ ţö çýçļé ~~~~~~~~~]\"],\"editor.toolHint.doorTypeClickOrPressO.1hhh8gt\":[\"[Ðööŕ ţýþé — çļîçķ öŕ þŕéšš Ö ţö çýçļé ~~~~~~~~~]\"],\"editor.toolHint.dropDownspoutFromOutlet.1k4h1m4\":[\"[Ðŕöþ ðöŵñšþöûţ ƒŕöɱ öûţļéţ ~~~~~~~]\"],\"editor.toolHint.ductDiameterDownUp.1wdz5vq\":[\"[Ðûçţ ðîáɱéţéŕ ðöŵñ / ûþ ~~~~~~]\"],\"editor.toolHint.endRunCancel.59dh2w\":[\"[Éñð ŕûñ / çáñçéļ ~~~~]\"],\"editor.toolHint.exit.engmg5\":[\"[Éẋîţ ~~]\"],\"editor.toolHint.exitDrawing.9noxyb\":[\"[Éẋîţ ðŕáŵîñĝ ~~~~]\"],\"editor.toolHint.finishAndContinue.1gpfsks\":[\"[Ƒîñîšĥ áñð çöñţîñûé ~~~~~~]\"],\"editor.toolHint.finishCeiling.1c1lfel\":[\"[Ƒîñîšĥ çéîļîñĝ ~~~~]\"],\"editor.toolHint.finishGridAxis.1wvrfhr\":[\"[Ƒîñîšĥ ĝŕîð áẋîš ~~~~~]\"],\"editor.toolHint.finishMeasurement.1e4gv16\":[\"[Ƒîñîšĥ ɱéášûŕéɱéñţ ~~~~~~]\"],\"editor.toolHint.finishMultiPointWitnesses.8wzskz\":[\"[Ƒîñîšĥ ɱûļţî-þöîñţ ŵîţñéššéš ~~~~~~~~]\"],\"editor.toolHint.finishSlab.xmnm8e\":[\"[Ƒîñîšĥ šļáƀ ~~~]\"],\"editor.toolHint.flipSide.172xku9\":[\"[Ƒļîþ šîðé ~~~]\"],\"editor.toolHint.followTraceALineset.mgquwe\":[\"[Ƒöļļöŵ: ţŕáçé á ļîñéšéţ ~~~~~~]\"],\"editor.toolHint.forcePlace.1hq1nr\":[\"[Ƒöŕçé þļáçé ~~~]\"],\"editor.toolHint.freePlacement.1nztdac\":[\"[Ƒŕéé þļáçéɱéñţ ~~~~]\"],\"editor.toolHint.goVerticalClickToPlace.dg8g6m\":[\"[Ĝö ṽéŕţîçáļ ↕, çļîçķ ţö þļáçé ~~~~~~~]\"],\"editor.toolHint.highlightOutlet.65hoq8\":[\"[Ĥîĝĥļîĝĥţ öûţļéţ ~~~~~]\"],\"editor.toolHint.joinAsACornerWindow.jvdp4j\":[\"[Ĵöîñ áš á çöŕñéŕ ŵîñðöŵ ~~~~~~]\"],\"editor.toolHint.key.altDrag.ai3wn9\":[\"[Åļţ + ðŕáĝ ~~~]\"],\"editor.toolHint.key.backspace.qy6qx8\":[\"[Ɓáçķšþáçé ~~~]\"],\"editor.toolHint.key.click.m8sun\":[\"[Çļîçķ ~~]\"],\"editor.toolHint.key.clickAgain.190ws9j\":[\"[Çļîçķ áĝáîñ ~~~]\"],\"editor.toolHint.key.command.1j2mkia\":[\"[Çöɱɱáñð ~~~]\"],\"editor.toolHint.key.control.10fbl8e\":[\"[Çöñţŕöļ ~~~]\"],\"editor.toolHint.key.delete.oay2cq\":[\"[Ðéļéţé ~~]\"],\"editor.toolHint.key.doubleClick.vlma6o\":[\"[Ðöûƀļé çļîçķ ~~~~]\"],\"editor.toolHint.key.drag.8pwtpf\":[\"[Ðŕáĝ ~~]\"],\"editor.toolHint.key.enter.1ctpui5\":[\"[Éñţéŕ ~~]\"],\"editor.toolHint.key.hover.6xw79p\":[\"[Ĥöṽéŕ ~~]\"],\"editor.toolHint.key.hoverADuctEnd.19axr3b\":[\"[Ĥöṽéŕ á ðûçţ éñð ~~~~]\"],\"editor.toolHint.key.hoverAPipeEnd.1jbum5f\":[\"[Ĥöṽéŕ á þîþé éñð ~~~~]\"],\"editor.toolHint.key.hoverGutter.1dwcsno\":[\"[Ĥöṽéŕ ĝûţţéŕ ~~~~]\"],\"editor.toolHint.key.leftClick.s4gwfc\":[\"[Ļéƒţ çļîçķ ~~~]\"],\"editor.toolHint.key.middleClick.1jbaan4\":[\"[Ṁîððļé çļîçķ ~~~~]\"],\"editor.toolHint.key.rShiftR.13bnobh\":[\"[Ŕ / Šĥîƒţ+Ŕ ~~~]\"],\"editor.toolHint.key.rightClick.1ovld0h\":[\"[Ŕîĝĥţ çļîçķ ~~~]\"],\"editor.toolHint.key.scroll.ai6wr0\":[\"[Šçŕöļļ ~~]\"],\"editor.toolHint.key.scrollWheel.18j0ix7\":[\"[Šçŕöļļ ŵĥééļ ~~~~]\"],\"editor.toolHint.key.space.1hrh82t\":[\"[Šþáçé ~~]\"],\"editor.toolHint.key.tab.1xsal0s\":[\"[Ţáƀ ~]\"],\"editor.toolHint.mountFloorCeilingWall.32dxpv\":[\"[Ṁöûñţ: ƒļööŕ / çéîļîñĝ / ŵáļļ ~~~~~~~]\"],\"editor.toolHint.noRoomForTheMatchingWindow.1755948\":[\"[Ñö ŕööɱ ƒöŕ ţĥé ɱáţçĥîñĝ ŵîñðöŵ öñ ţĥé öţĥéŕ ŵáļļ ~~~~~~~~~~~~]\"],\"editor.toolHint.noWallMeetsHere.19n99yc\":[\"[Ñö ŵáļļ ɱééţš ĥéŕé ~~~~~]\"],\"editor.toolHint.numberOfCutsScrollOrClick.1kqe84b\":[\"[Ñûɱƀéŕ öƒ çûţš — šçŕöļļ öŕ çļîçķ ţö çĥáñĝé ~~~~~~~~~~]\"],\"editor.toolHint.pickWitnessPoint.k3hgh1\":[\"[Þîçķ ŵîţñéšš þöîñţ ~~~~~]\"],\"editor.toolHint.pipeSizeDownUp.wp04og\":[\"[Þîþé šîžé ðöŵñ / ûþ ~~~~~]\"],\"editor.toolHint.placeAndContinue.qfwkrq\":[\"[Þļáçé áñð çöñţîñûé ~~~~~]\"],\"editor.toolHint.placeBlock.1aylwrx\":[\"[Þļáçé ƀļöçķ ~~~]\"],\"editor.toolHint.placeBoxVentOnRoof.kf88e5\":[\"[Þļáçé ƀöẋ ṽéñţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeCabinet.b0ouyk\":[\"[Þļáçé çáƀîñéţ ~~~~]\"],\"editor.toolHint.placeCanopyOrSetTheNext.12l7zf8\":[\"[Þļáçé çáñöþý öŕ šéţ ţĥé ñéẋţ ŕûñ þöîñţ ~~~~~~~~~~]\"],\"editor.toolHint.placeChimneyOnRoof.19dbqu\":[\"[Þļáçé çĥîɱñéý öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeColumn.1w2vq86\":[\"[Þļáçé çöļûɱñ ~~~~]\"],\"editor.toolHint.placeCupolaOnRoof.ofx3bn\":[\"[Þļáçé çûþöļá öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeDimensionLineWhenNeeded.bjw2cj\":[\"[Þļáçé ðîɱéñšîöñ ļîñé ŵĥéñ ñééðéð ~~~~~~~~~]\"],\"editor.toolHint.placeDoorOnWall.1jwadf\":[\"[Þļáçé ðööŕ öñ ŵáļļ ~~~~~]\"],\"editor.toolHint.placeDormerOnRoof.1w518a6\":[\"[Þļáçé ðöŕɱéŕ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeElevator.1f65zva\":[\"[Þļáçé éļéṽáţöŕ ~~~~]\"],\"editor.toolHint.placeEyebrowVentOnRoof.1h1tqxn\":[\"[Þļáçé éýéƀŕöŵ ṽéñţ öñ ŕööƒ ~~~~~~~]\"],\"editor.toolHint.placeFitting.1pmx3vn\":[\"[Þļáçé ƒîţţîñĝ ~~~~]\"],\"editor.toolHint.placeGutterOnRoofEave.llwzf9\":[\"[Þļáçé ĝûţţéŕ öñ ŕööƒ éáṽé ~~~~~~~]\"],\"editor.toolHint.placeItLockedTo45.16e4csk\":[\"[Þļáçé îţ (ļöçķéð ţö 45°) ~~~~~]\"],\"editor.toolHint.placeItem.teynf\":[\"[Þļáçé îţéɱ ~~~]\"],\"editor.toolHint.placeMeasurementPoint.bsatli\":[\"[Þļáçé ɱéášûŕéɱéñţ þöîñţ ~~~~~~~]\"],\"editor.toolHint.placeOnAFence.1dptstr\":[\"[Þļáçé öñ á ƒéñçé ~~~~]\"],\"editor.toolHint.placeRegister.1uebycd\":[\"[Þļáçé ŕéĝîšţéŕ ~~~~]\"],\"editor.toolHint.placeRidgeVentOnRoof.2tpd8r\":[\"[Þļáçé ŕîðĝé ṽéñţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeShelf.y4l3iw\":[\"[Þļáçé šĥéļƒ ~~~]\"],\"editor.toolHint.placeSkylightOnRoof.e215pe\":[\"[Þļáçé šķýļîĝĥţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeSolarPanelArrayOnRoof.kk11fn\":[\"[Þļáçé šöļáŕ þáñéļ áŕŕáý öñ ŕööƒ ~~~~~~~~]\"],\"editor.toolHint.placeSpawnPoint.205o25\":[\"[Þļáçé šþáŵñ þöîñţ ~~~~~]\"],\"editor.toolHint.placeStairs.zwxxu2\":[\"[Þļáçé šţáîŕš ~~~~]\"],\"editor.toolHint.placeTrap.1gxemn3\":[\"[Þļáçé ţŕáþ ~~~]\"],\"editor.toolHint.placeTurbineVentOnRoof.1iqeluf\":[\"[Þļáçé ţûŕƀîñé ṽéñţ öñ ŕööƒ ~~~~~~~]\"],\"editor.toolHint.placeUnit.8zkx4q\":[\"[Þļáçé ûñîţ ~~~]\"],\"editor.toolHint.placeWindowOnWall.1k3qnfb\":[\"[Þļáçé ŵîñðöŵ öñ ŵáļļ ~~~~~~]\"],\"editor.toolHint.placeWithoutTheCornerSnap.1nifqew\":[\"[Þļáçé ŵîţĥöûţ ţĥé çöŕñéŕ šñáþ ~~~~~~~~]\"],\"editor.toolHint.placement.13lcvts\":[\"[Þļáçéɱéñţ ~~~]\"],\"editor.toolHint.placementAuto.1caa52d\":[\"[Þļáçéɱéñţ: Åûţö ~~~~]\"],\"editor.toolHint.placementGround.1ruz145\":[\"[Þļáçéɱéñţ: Ĝŕöûñð ~~~~~]\"],\"editor.toolHint.placementRoof.renkw8\":[\"[Þļáçéɱéñţ: Ŕööƒ ~~~~]\"],\"editor.toolHint.placementSurfaceClickOrPressP.w56h19\":[\"[Þļáçéɱéñţ šûŕƒáçé - çļîçķ öŕ þŕéšš Þ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.toolHint.placementType.1mdpl60\":[\"[Þļáçéɱéñţ ţýþé ~~~~]\"],\"editor.toolHint.placementTypeClickOrPressI.10cgxh2\":[\"[Þļáçéɱéñţ ţýþé — çļîçķ öŕ þŕéšš Î ţö ţöĝĝļé ~~~~~~~~~~~]\"],\"editor.toolHint.removeLastPoint.2dmdcx\":[\"[Ŕéɱöṽé ļášţ þöîñţ ~~~~~]\"],\"editor.toolHint.removeLastWitness.1b6vvzw\":[\"[Ŕéɱöṽé ļášţ ŵîţñéšš ~~~~~~]\"],\"editor.toolHint.rotate.1thqa0a\":[\"[Ŕöţáţé ~~]\"],\"editor.toolHint.rotate45.9zq68u\":[\"[Ŕöţáţé ±45° ~~]\"],\"editor.toolHint.rotate45FloorCeiling.m9t57d\":[\"[Ŕöţáţé ±45° (ƒļööŕ / çéîļîñĝ) ~~~~~~]\"],\"editor.toolHint.rotateGhost15.rsa52c\":[\"[Ŕöţáţé ĝĥöšţ ±15° ~~~~]\"],\"editor.toolHint.rotateOrFlipTheRunSide.t5ior7\":[\"[Ŕöţáţé öŕ ƒļîþ ţĥé ŕûñ šîðé ~~~~~~~]\"],\"editor.toolHint.rotateRoofDirection90.tvbji2\":[\"[Ŕöţáţé ŕööƒ ðîŕéçţîöñ 90° ~~~~~~]\"],\"editor.toolHint.rotateSpawnPoint.1opcuu7\":[\"[Ŕöţáţé šþáŵñ þöîñţ ~~~~~]\"],\"editor.toolHint.roundRectangularOval.e4nh6x\":[\"[Ŕöûñð / ŕéçţáñĝûļáŕ / öṽáļ ~~~~~~]\"],\"editor.toolHint.setFenceStartEnd.1phbwsq\":[\"[Šéţ ƒéñçé šţáŕţ / éñð ~~~~~]\"],\"editor.toolHint.setOneCornerThenTheOpposite.8tsl49\":[\"[Šéţ öñé çöŕñéŕ, ţĥéñ ţĥé öþþöšîţé ~~~~~~~~~]\"],\"editor.toolHint.setRoofFootprint.p50n0o\":[\"[Šéţ ŕööƒ ƒööţþŕîñţ ~~~~~]\"],\"editor.toolHint.setWallStartEnd.1r8ubcx\":[\"[Šéţ ŵáļļ šţáŕţ / éñð ~~~~~]\"],\"editor.toolHint.slopeLevel.ftqp67\":[\"[Šļöþé / ļéṽéļ ~~~]\"],\"editor.toolHint.snapOntoTheRun.86yhmp\":[\"[Šñáþ öñţö ţĥé ŕûñ ~~~~~]\"],\"editor.toolHint.splitAtTheMarks.x5tpdd\":[\"[Šþļîţ áţ ţĥé ɱáŕķš ~~~~~]\"],\"editor.toolHint.startGridAxis.k92yza\":[\"[Šţáŕţ ĝŕîð áẋîš ~~~~]\"],\"editor.toolHint.startLineset.23q8dh\":[\"[Šţáŕţ ļîñéšéţ ~~~~]\"],\"editor.toolHint.startLiquidLine.1rlxsgd\":[\"[Šţáŕţ ļîǫûîð ļîñé ~~~~~]\"],\"editor.toolHint.startRun.r6fc5u\":[\"[Šţáŕţ ŕûñ ~~~]\"],\"editor.toolHint.startSegment.rolym6\":[\"[Šţáŕţ šéĝɱéñţ ~~~~]\"],\"editor.toolHint.stepBackOrCancel.zbfdkn\":[\"[Šţéþ ƀáçķ öŕ çáñçéļ ~~~~~]\"],\"editor.toolHint.style.nf3vcm\":[\"[Šţýļé ~~]\"],\"editor.toolHint.styleBarn.k9n1x\":[\"[Šţýļé: Ɓáŕñ ~~~]\"],\"editor.toolHint.styleCasement.ziklec\":[\"[Šţýļé: Çášéɱéñţ ~~~~]\"],\"editor.toolHint.styleCraftsman.52e6a9\":[\"[Šţýļé: Çŕáƒţšɱáñ ~~~~~]\"],\"editor.toolHint.styleDoubleHung.1lg8pkg\":[\"[Šţýļé: Ðöûƀļé-ĥûñĝ ~~~~~]\"],\"editor.toolHint.styleFrench.1ue3j64\":[\"[Šţýļé: Ƒŕéñçĥ ~~~~]\"],\"editor.toolHint.styleGlass.qudnb4\":[\"[Šţýļé: Ĝļášš ~~~]\"],\"editor.toolHint.styleGrid.1vuq4po\":[\"[Šţýļé: Ĝŕîð ~~~]\"],\"editor.toolHint.styleHalfLouvered.13b1few\":[\"[Šţýļé: Ĥáļƒ-ļöûṽéŕéð ~~~~~~]\"],\"editor.toolHint.styleHorizontalBands.12ethxk\":[\"[Šţýļé: Ĥöŕîžöñţáļ ƀáñðš ~~~~~~]\"],\"editor.toolHint.styleModern.1fh8hhn\":[\"[Šţýļé: Ṁöðéŕñ ~~~~]\"],\"editor.toolHint.stylePanel.922jze\":[\"[Šţýļé: Þáñéļ ~~~]\"],\"editor.toolHint.stylePaneledGlass.17a17en\":[\"[Šţýļé: Þáñéļéð ĝļášš ~~~~~~]\"],\"editor.toolHint.styleShaker.49z17k\":[\"[Šţýļé: Šĥáķéŕ ~~~~]\"],\"editor.toolHint.styleSingle.6f3cm0\":[\"[Šţýļé: Šîñĝļé ~~~~]\"],\"editor.toolHint.styleSixPanel.u49laj\":[\"[Šţýļé: Šîẋ-þáñéļ ~~~~]\"],\"editor.toolHint.styleSliding.q81s0i\":[\"[Šţýļé: Šļîðîñĝ ~~~~]\"],\"editor.toolHint.styleTallGrid.1eotg3x\":[\"[Šţýļé: Ţáļļ ĝŕîð ~~~~]\"],\"editor.toolHint.styleTransom.kb9bh6\":[\"[Šţýļé: Ţŕáñšöɱ ~~~~]\"],\"editor.toolHint.styleTripleHung.pxnqi3\":[\"[Šţýļé: Ţŕîþļé-ĥûñĝ ~~~~~]\"],\"editor.toolHint.styleWideGrid.12n27et\":[\"[Šţýļé: Ŵîðé ĝŕîð ~~~~]\"],\"editor.toolHint.switchRotationAxisYXZ.15lohm6\":[\"[Šŵîţçĥ ŕöţáţîöñ áẋîš (Ý → Ẋ → Ž) ~~~~~~~]\"],\"editor.toolHint.theWallsMeetAtTooSharp.kh3wi3\":[\"[Ţĥé ŵáļļš ɱééţ áţ ţöö šĥáŕþ öŕ ţöö ƒļáţ áñ áñĝļé ~~~~~~~~~~~~]\"],\"editor.toolHint.theWindowWaitingThereIsTaller.1tqwez4\":[\"[Ţĥé ŵîñðöŵ ŵáîţîñĝ ţĥéŕé îš ţáļļéŕ ţĥáñ ţĥîš ŵáļļ ~~~~~~~~~~~~~]\"],\"editor.toolHint.threeOrMoreWallsMeetHere.rgifif\":[\"[Ţĥŕéé öŕ ɱöŕé ŵáļļš ɱééţ ĥéŕé ~~~~~~~~]\"],\"editor.toolHint.traceCeilingOutline.1b639wv\":[\"[Ţŕáçé çéîļîñĝ öûţļîñé ~~~~~~]\"],\"editor.toolHint.traceSlabOutline.z0j2lc\":[\"[Ţŕáçé šļáƀ öûţļîñé ~~~~~]\"],\"editor.toolHint.type.1m2zofh\":[\"[Ţýþé ~~]\"],\"editor.toolHint.typeAwning.1cj59al\":[\"[Ţýþé: Åŵñîñĝ ~~~]\"],\"editor.toolHint.typeBarn.sbnygq\":[\"[Ţýþé: Ɓáŕñ ~~~]\"],\"editor.toolHint.typeBay.1200hc1\":[\"[Ţýþé: Ɓáý ~~~]\"],\"editor.toolHint.typeBow.14s2t9p\":[\"[Ţýþé: Ɓöŵ ~~~]\"],\"editor.toolHint.typeCabinet.1r68je5\":[\"[Ţýþé: Çáƀîñéţ ~~~~]\"],\"editor.toolHint.typeCasement.176uo9j\":[\"[Ţýþé: Çášéɱéñţ ~~~~]\"],\"editor.toolHint.typeDouble.af7w4i\":[\"[Ţýþé: Ðöûƀļé ~~~]\"],\"editor.toolHint.typeDoubleHung.t482fu\":[\"[Ţýþé: Ðöûƀļé Ĥûñĝ ~~~~~]\"],\"editor.toolHint.typeFixed.v1cjez\":[\"[Ţýþé: Ƒîẋéð ~~~]\"],\"editor.toolHint.typeFolding.sxxyng\":[\"[Ţýþé: Ƒöļðîñĝ ~~~~]\"],\"editor.toolHint.typeFrench.1y57z1b\":[\"[Ţýþé: Ƒŕéñçĥ ~~~]\"],\"editor.toolHint.typeHinged.1xrcfju\":[\"[Ţýþé: Ĥîñĝéð ~~~]\"],\"editor.toolHint.typeIsland.ufr3ce\":[\"[Ţýþé: Κļáñð ~~~]\"],\"editor.toolHint.typeLouvered.oxl1cz\":[\"[Ţýþé: Ļöûṽéŕéð ~~~~]\"],\"editor.toolHint.typePocket.hc65x9\":[\"[Ţýþé: Þöçķéţ ~~~]\"],\"editor.toolHint.typeSingleHung.p53pyl\":[\"[Ţýþé: Šîñĝļé Ĥûñĝ ~~~~~]\"],\"editor.toolHint.typeSliding.nwmr3f\":[\"[Ţýþé: Šļîðîñĝ ~~~~]\"],\"editor.toolHint.verticalStackClickToPlace.ijcn4q\":[\"[Ṽéŕţîçáļ šţáçķ ↕, çļîçķ ţö þļáçé ~~~~~~~~]\"],\"editor.toolHint.wasteVent.1hvi3vj\":[\"[Ŵášţé / ṽéñţ ~~~]\"],\"editor.toolHint.windowStyleClickOrPressL.ah7qm9\":[\"[Ŵîñðöŵ šţýļé — çļîçķ öŕ þŕéšš Ļ ţö çýçļé ~~~~~~~~~~]\"],\"editor.toolHint.windowTypeClickOrPressO.wv4x35\":[\"[Ŵîñðöŵ ţýþé — çļîçķ öŕ þŕéšš Ö ţö çýçļé ~~~~~~~~~]\"],\"editor.views.plugins\":[\"[Þļûĝîñš ~~~]\"],\"editor.views.view2d\":[\"[2Ð ~]\"],\"editor.views.view3d\":[\"[3Ð ~]\"],\"editor.views.viewBar.auto\":[\"[Åûţö ~~]\"],\"editor.views.viewBar.browsePlugins\":[\"[Ɓŕöŵšé þļûĝîñš ~~~~]\"],\"editor.views.viewBar.closeLabel\":[\"[Çļöšé \",[\"label\"],\" ~~]\"],\"editor.views.viewBar.closeSplit\":[\"[Çļöšé šþļîţ (\\\\) ~~~]\"],\"editor.views.viewBar.ground\":[\"[Ĝŕöûñð ~~]\"],\"editor.views.viewBar.groundSolid\":[\"[\",[\"standing\",\"select\",{\"partly\":[\"Þáŕţļý ƀéļöŵ ĝŕáðé · ĝŕöûñð šöļîð\"],\"below\":[\"Ɓéļöŵ ĝŕáðé · ĝŕöûñð šöļîð\"],\"other\":[\"Ĝŕöûñð šöļîð\"]}],\" ~~~~~~~~~~~~~~~~~~]\"],\"editor.views.viewBar.groundVeiled\":[\"[\",[\"standing\",\"select\",{\"partly\":[\"Þáŕţļý ƀéļöŵ ĝŕáðé · ĝŕöûñð ṽéîļéð\"],\"below\":[\"Ɓéļöŵ ĝŕáðé · ĝŕöûñð ṽéîļéð\"],\"other\":[\"Ĝŕöûñð ṽéîļéð\"]}],\" ~~~~~~~~~~~~~~~~~~~]\"],\"editor.views.viewBar.keepTheGroundSolid\":[\"[Ķééþ ţĥé ĝŕöûñð šöļîð ~~~~~~]\"],\"editor.views.viewBar.moreViews\":[\"[Ṁöŕé ṽîéŵš ~~~]\"],\"editor.views.viewBar.paneViews\":[\"[Þáñé \",[\"pane\"],\" ṽîéŵš ~~~]\"],\"editor.views.viewBar.pinLabel\":[\"[Þîñ \",[\"label\"],\" ~]\"],\"editor.views.viewBar.pinToTheViewBar\":[\"[Þîñ ţö ţĥé ṽîéŵ ƀáŕ ~~~~~]\"],\"editor.views.viewBar.solid\":[\"[Šöļîð ~~]\"],\"editor.views.viewBar.split\":[\"[Šþļîţ (\\\\) ~~]\"],\"editor.views.viewBar.split2\":[\"[Šþļîţ ~~]\"],\"editor.views.viewBar.swapPanes\":[\"[Šŵáþ þáñéš ~~~]\"],\"editor.views.viewBar.unpinFromTheViewBar\":[\"[Ûñþîñ ƒŕöɱ ţĥé ṽîéŵ ƀáŕ ~~~~~~]\"],\"editor.views.viewBar.unpinLabel\":[\"[Ûñþîñ \",[\"label\"],\" ~~]\"],\"editor.views.viewBar.veilTheGroundOverALevel\":[\"[Ṽéîļ ţĥé ĝŕöûñð öṽéŕ á ļéṽéļ ƀéļöŵ ĝŕáðé ~~~~~~~~~~]\"],\"editor.views.viewBar.views\":[\"[Ṽîéŵš ~~]\"],\"editor.youCanRetryTheSceneOr\":[\"[Ýöû çáñ ŕéţŕý ţĥé šçéñé öŕ ŕéţûŕñ ĥöɱé ŵîţĥöûţ ŕéļöáðîñĝ ţĥé ŵĥöļé áþþ šĥéļļ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.block.description\":[\"[Å ţöþöļöĝý-ƀáçķéð šöļîð éðîţéð ðîŕéçţļý îñ ţĥé çáñṽáš. ~~~~~~~~~~~~~~]\"],\"node.block.label\":[\"[Ɓļöçķ ~~]\"],\"node.boxVent.description\":[\"[Šɱáļļ ļöûṽéŕéð éẋĥáûšţ ṽéñţ ţĥáţ šîţš öñ á ŕööƒ šļöþé. ~~~~~~~~~~~~~~]\"],\"node.boxVent.label\":[\"[Ɓöẋ Ṽéñţ ~~~]\"],\"node.building.description\":[\"[Å ƀûîļðîñĝ çöñţáîñéŕ ĥöļðîñĝ öñé öŕ ɱöŕé ļéṽéļš. ~~~~~~~~~~~~]\"],\"node.building.label\":[\"[Ɓûîļðîñĝ ~~~]\"],\"node.cabinet.description\":[\"[Å çöñƒîĝûŕáƀļé þáŕáɱéţŕîç ƀášé çáƀîñéţ. ~~~~~~~~~~~]\"],\"node.cabinet.label\":[\"[Ṁöðûļáŕ Çáƀîñéţ ~~~~~]\"],\"node.cabinetModule.description\":[\"[Åñ éðîţáƀļé ɱöðûļé îñšîðé á ɱöðûļáŕ çáƀîñéţ ŕûñ. ~~~~~~~~~~~~]\"],\"node.cabinetModule.label\":[\"[Çáƀîñéţ Ṁöðûļé ~~~~]\"],\"node.ceiling.description\":[\"[Å þöļýĝöñ-ƀöûñðéð çéîļîñĝ šûŕƒáçé ţĥáţ ĥöšţš çéîļîñĝ-ɱöûñţéð îţéɱš. ~~~~~~~~~~~~~~~~~~]\"],\"node.ceiling.label\":[\"[Çéîļîñĝ ~~~]\"],\"node.ceiling.panel.addHole\":[\"[Åðð Ĥöļé ~~~]\"],\"node.ceiling.panel.area\":[\"[Åŕéá ~~]\"],\"node.ceiling.panel.auto\":[\"[Åûţö ~~]\"],\"node.ceiling.panel.ceiling\":[\"[Çéîļîñĝ ~~~]\"],\"node.ceiling.panel.customHeight\":[\"[Çûšţöɱ ĥéîĝĥţ ~~~~]\"],\"node.ceiling.panel.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"node.ceiling.panel.done\":[\"[Ðöñé ~~]\"],\"node.ceiling.panel.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"node.ceiling.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.ceiling.panel.high30m\":[\"[Ĥîĝĥ (3.0ɱ) ~~]\"],\"node.ceiling.panel.high90\":[\"[Ĥîĝĥ (9'0\\\") ~~]\"],\"node.ceiling.panel.holes\":[\"[Ĥöļéš ~~]\"],\"node.ceiling.panel.info\":[\"[Îñƒö ~~]\"],\"node.ceiling.panel.limitedByLevel\":[\"[Ļîɱîţéð ƀý ţĥé ļéṽéļ ţö \",[\"height\"],\" — ŕáîšé ţĥé ļéṽéļ ĥéîĝĥţ ƒöŕ á ţáļļéŕ çéîļîñĝ. ~~~~~~~~~~~~~~~~~]\"],\"node.ceiling.panel.low24m\":[\"[Ļöŵ (2.4ɱ) ~~]\"],\"node.ceiling.panel.low80\":[\"[Ļöŵ (8'0\\\") ~]\"],\"node.ceiling.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.ceiling.panel.noHoles\":[\"[Ñö ĥöļéš ~~~]\"],\"node.ceiling.panel.standard25m\":[\"[Šţáñðáŕð (2.5ɱ) ~~~]\"],\"node.ceiling.panel.standard86\":[\"[Šţáñðáŕð (8'6\\\") ~~~]\"],\"node.ceiling.panel.tallerThanLevel\":[\"[Ţáļļéŕ ţĥáñ ţĥîš ļéṽéļ (\",[\"available\"],\" áṽáîļáƀļé). Ŕáîšé ţĥé ļéṽéļ ĥéîĝĥţ ƒîŕšţ. ~~~~~~~~~~~~~~~~]\"],\"node.chimney.description\":[\"[Ṽéŕţîçáļ ɱášöñŕý šţáçķ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~]\"],\"node.chimney.label\":[\"[Çĥîɱñéý ~~~]\"],\"node.column.description\":[\"[Å þáŕáɱéţŕîç çöļûɱñ ŵîţĥ çöñƒîĝûŕáƀļé çŕöšš-šéçţîöñ, ƀášé, áñð çáþîţáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.column.label\":[\"[Çöļûɱñ ~~]\"],\"node.constructionDimension.description\":[\"[Åššöçîáţîṽé ļîñéáŕ, çûŕṽéð, çîŕçûļáŕ, áñĝûļáŕ, öŕ çööŕðîñáţé þļáñ ðîɱéñšîöñ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.constructionDimension.label\":[\"[Çöñšţŕûçţîöñ Ðîɱéñšîöñ ~~~~~~~]\"],\"node.cornerRadius.bottomLeft\":[\"[Ɓöţţöɱ Ļéƒţ ~~~]\"],\"node.cornerRadius.bottomRight\":[\"[Ɓöţţöɱ Ŕîĝĥţ ~~~~]\"],\"node.cornerRadius.topLeft\":[\"[Ţöþ Ļéƒţ ~~~]\"],\"node.cornerRadius.topRight\":[\"[Ţöþ Ŕîĝĥţ ~~~]\"],\"node.cupola.description\":[\"[Ļöûṽéŕéð ŕööƒ ļáñţéŕñ ŵîţĥ á ðöɱé öŕ þýŕáɱîð çáþ áñð öþţîöñáļ ƒîñîáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.cupola.label\":[\"[Çûþöļá ~~]\"],\"node.cutout.autoElevator\":[\"[Åûţö éļéṽáţöŕ çûţöûţ ~~~~~~]\"],\"node.cutout.autoStair\":[\"[Åûţö šţáîŕ çûţöûţ ~~~~~]\"],\"node.cutout.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.cutout.room\":[\"[Ŕööɱ çûţöûţ ~~~]\"],\"node.door.description\":[\"[Å ðööŕ çûţ îñţö á ŵáļļ. Åñîɱáţéð öþéñ/çļöšé šţáţé. ~~~~~~~~~~~~]\"],\"node.door.label\":[\"[Ðööŕ ~~]\"],\"node.door.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.door.panel.addSegment\":[\"[+ Åðð Šéĝɱéñţ ~~~]\"],\"node.door.panel.all\":[\"[Åļļ ~]\"],\"node.door.panel.arch\":[\"[Åŕçĥ ~~]\"],\"node.door.panel.archHeight\":[\"[Åŕçĥ Ĥéîĝĥţ ~~~]\"],\"node.door.panel.barHeight\":[\"[Ɓáŕ Ĥéîĝĥţ ~~~]\"],\"node.door.panel.columns\":[\"[Çöļûɱñš ~~~]\"],\"node.door.panel.contentPadding\":[\"[Çöñţéñţ Þáððîñĝ ~~~~~]\"],\"node.door.panel.cornerRadius\":[\"[Çöŕñéŕ Ŕáðîûš ~~~~]\"],\"node.door.panel.customTheSegmentsMatchNoStyle\":[\"[Çûšţöɱ: ţĥé šéĝɱéñţš ɱáţçĥ ñö šţýļé. ~~~~~~~~~]\"],\"node.door.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.door.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.door.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.door.panel.direction\":[\"[Ðîŕéçţîöñ ~~~]\"],\"node.door.panel.divider\":[\"[Ðîṽîðéŕ ~~~]\"],\"node.door.panel.door\":[\"[Ðööŕ ~~]\"],\"node.door.panel.doorCloser\":[\"[Ðööŕ Çļöšéŕ ~~~]\"],\"node.door.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.door.panel.empty\":[\"[Éɱþţý ~~]\"],\"node.door.panel.enableHandle\":[\"[Éñáƀļé Ĥáñðļé ~~~~]\"],\"node.door.panel.enableThreshold\":[\"[Éñáƀļé Ţĥŕéšĥöļð ~~~~~]\"],\"node.door.panel.flipSide\":[\"[Ƒļîþ Šîðé ~~~]\"],\"node.door.panel.fold\":[\"[Ƒöļð ~~]\"],\"node.door.panel.frame\":[\"[Ƒŕáɱé ~~]\"],\"node.door.panel.garage\":[\"[Ĝáŕáĝé ~~]\"],\"node.door.panel.glass\":[\"[Ĝļášš ~~]\"],\"node.door.panel.handle\":[\"[Ĥáñðļé ~~]\"],\"node.door.panel.handleSide\":[\"[Ĥáñðļé Šîðé ~~~]\"],\"node.door.panel.hardware\":[\"[Ĥáŕðŵáŕé ~~~]\"],\"node.door.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.door.panel.hingesSide\":[\"[Ĥîñĝéš Šîðé ~~~]\"],\"node.door.panel.horizontal\":[\"[Ĥöŕîžöñţáļ ~~~]\"],\"node.door.panel.individual\":[\"[Îñðîṽîðûáļ ~~~]\"],\"node.door.panel.inset\":[\"[Îñšéţ ~~]\"],\"node.door.panel.inward\":[\"[Îñŵáŕð ~~]\"],\"node.door.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.door.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.door.panel.open\":[\"[Öþéñ ~~]\"],\"node.door.panel.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.door.panel.openingShape\":[\"[Öþéñîñĝ Šĥáþé ~~~~]\"],\"node.door.panel.outward\":[\"[Öûţŵáŕð ~~~]\"],\"node.door.panel.panel\":[\"[Þáñéļ ~~]\"],\"node.door.panel.panels\":[\"[Þáñéļš ~~]\"],\"node.door.panel.panicBar\":[\"[Þáñîç Ɓáŕ ~~~]\"],\"node.door.panel.pocket\":[\"[Þöçķéţ ~~]\"],\"node.door.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.door.panel.rail\":[\"[Ŕáîļ ~~]\"],\"node.door.panel.rect\":[\"[Ŕéçţ ~~]\"],\"node.door.panel.remove\":[\"[- Ŕéɱöṽé ~~]\"],\"node.door.panel.revealRadius\":[\"[Ŕéṽéáļ Ŕáðîûš ~~~~]\"],\"node.door.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.door.panel.rounded\":[\"[Ŕöûñðéð ~~~]\"],\"node.door.panel.segments\":[\"[Šéĝɱéñţš ~~~]\"],\"node.door.panel.sizeIsLimitedToTheWall\":[\"[Šîžé îš ļîɱîţéð ţö ţĥé ŵáļļ, îñçļûðîñĝ çļéáŕáñçé ƒöŕ ţĥé öþéñîñĝ ƒŕáɱé. ~~~~~~~~~~~~~~~~~~]\"],\"node.door.panel.slide\":[\"[Šļîðé ~~]\"],\"node.door.panel.style\":[\"[Šţýļé ~~]\"],\"node.door.panel.swing\":[\"[Šŵîñĝ ~~]\"],\"node.door.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.door.panel.threshold\":[\"[Ţĥŕéšĥöļð ~~~]\"],\"node.door.panel.topShape\":[\"[Ţöþ Šĥáþé ~~~]\"],\"node.door.panel.type\":[\"[Ţýþé ~~]\"],\"node.door.panel.vertical\":[\"[Ṽéŕţîçáļ ~~~]\"],\"node.door.panel.wall\":[\"[ŵáļļ ~~]\"],\"node.door.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.door.style.barn\":[\"[Ɓáŕñ ~~]\"],\"node.door.style.craftsman\":[\"[Çŕáƒţšɱáñ ~~~]\"],\"node.door.style.french\":[\"[Ƒŕéñçĥ ~~]\"],\"node.door.style.glass\":[\"[Ĝļášš ~~]\"],\"node.door.style.halfLouvered\":[\"[Ĥáļƒ-ļöûṽéŕéð ~~~~]\"],\"node.door.style.modern\":[\"[Ṁöðéŕñ ~~]\"],\"node.door.style.panel\":[\"[Þáñéļ ~~]\"],\"node.door.style.paneledGlass\":[\"[Þáñéļéð ĝļášš ~~~~]\"],\"node.door.style.shaker\":[\"[Šĥáķéŕ ~~]\"],\"node.door.style.sixPanel\":[\"[Šîẋ-þáñéļ ~~~]\"],\"node.door.type.barn\":[\"[Ɓáŕñ ~~]\"],\"node.door.type.double\":[\"[Ðöûƀļé ~~]\"],\"node.door.type.folding\":[\"[Ƒöļðîñĝ ~~~]\"],\"node.door.type.french\":[\"[Ƒŕéñçĥ ~~]\"],\"node.door.type.garageRollup\":[\"[Ŕöļļ-ûþ ~~]\"],\"node.door.type.garageSectional\":[\"[Šéçţîöñáļ ~~~]\"],\"node.door.type.garageTiltup\":[\"[Ţîļţ-ûþ ~~]\"],\"node.door.type.hinged\":[\"[Ĥîñĝéð ~~]\"],\"node.door.type.pocket\":[\"[Þöçķéţ ~~]\"],\"node.door.type.sliding\":[\"[Šļîðîñĝ ~~~]\"],\"node.dormer.description\":[\"[Ĥöûšé-šĥáþéð þŕöţŕûšîöñ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~]\"],\"node.dormer.label\":[\"[Ðöŕɱéŕ ~~]\"],\"node.downspout.description\":[\"[Ṽéŕţîçáļ ðŕöþ þîþé ƒŕöɱ á ĝûţţéŕ öûţļéţ ţö ţĥé ĝŕöûñð. ~~~~~~~~~~~~~~]\"],\"node.downspout.label\":[\"[Ðöŵñšþöûţ ~~~]\"],\"node.ductFitting.description\":[\"[Éļƀöŵ, ţéé, ŕéðûçéŕ, öŕ šǫûáŕé-ţö-ŕöûñð ţŕáñšîţîöñ çöññéçţîñĝ ðûçţ ŕûñš. ~~~~~~~~~~~~~~~~~~]\"],\"node.ductFitting.label\":[\"[Ðûçţ Ƒîţţîñĝ ~~~~]\"],\"node.ductSegment.description\":[\"[ĤṼÅÇ ðûçţ ŕûñ — þöļýļîñé öƒ ŕöûñð, ŕéçţ, öŕ ƒļáţ-öṽáļ šéçţîöñš. ~~~~~~~~~~~~~~~]\"],\"node.ductSegment.label\":[\"[Ðûçţ ~~]\"],\"node.ductTerminal.description\":[\"[Ðûçţ ţéŕɱîñáļ — šûþþļý ŕéĝîšţéŕ, çéîļîñĝ ðûšéŕ, öŕ ŕéţûŕñ ĝŕîļļé. Ðûçţ ŕûñš éñð áţ îţš çöļļáŕ. ~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.ductTerminal.label\":[\"[Ŕéĝîšţéŕ ~~~]\"],\"node.elevator.description\":[\"[Å ɱûļţî-ļéṽéļ éļéṽáţöŕ šĥáƒţ ŵîţĥ çöñƒîĝûŕáƀļé öþéñîñĝš þéŕ ļéṽéļ. ~~~~~~~~~~~~~~~~~]\"],\"node.elevator.label\":[\"[Éļéṽáţöŕ ~~~]\"],\"node.eyebrowVent.description\":[\"[Ļöŵ çûŕṽéð ļéñš-šĥáþéð ŕööƒ ṽéñţ ŵîţĥ á ļöûṽéŕéð ƒŕöñţ. ~~~~~~~~~~~~~~]\"],\"node.eyebrowVent.label\":[\"[Éýéƀŕöŵ Ṽéñţ ~~~~]\"],\"node.fence.description\":[\"[Å šţŕáîĝĥţ öŕ çûŕṽéð ƒéñçé šéĝɱéñţ ŵîţĥ çöñƒîĝûŕáƀļé þöšţš áñð îñƒîļļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.fence.label\":[\"[Ƒéñçé ~~]\"],\"node.fenceGate.description\":[\"[Å ĝáţé ĥöšţéð ƀý á ƒéñçé. ~~~~~~]\"],\"node.fenceGate.label\":[\"[Ĝáţé ~~]\"],\"node.fenceOpening.description\":[\"[Åñ îñţéñţîöñáļ öþéñîñĝ îñ á ƒéñçé. ~~~~~~~~~]\"],\"node.fenceOpening.label\":[\"[Öþéñ Þáššáĝé ~~~~]\"],\"node.floorOpening.label\":[\"[Ƒļööŕ öþéñîñĝ ~~~~]\"],\"node.guide.description\":[\"[Å ɱéášûŕéɱéñţ / ŕéƒéŕéñçé áññöţáţîöñ (ļîñéáŕ, áŕéá, öŕ áŕç). ~~~~~~~~~~~~~~]\"],\"node.guide.label\":[\"[Ĝûîðé ~~]\"],\"node.gutter.description\":[\"[Ŕáîñ-ŵáţéŕ çĥáññéļ ŕûññîñĝ áļöñĝ ţĥé éáṽé öƒ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~~~~~]\"],\"node.gutter.label\":[\"[Ĝûţţéŕ ~~]\"],\"node.hole.manual\":[\"[Ṁáñûáļ ~~]\"],\"node.holeEditing\":[\"[Ĥöļé \",[\"number\"],\" (Éðîţîñĝ) ~~~~]\"],\"node.holeNumber\":[\"[Ĥöļé \",[\"number\"],\" ~~]\"],\"node.holeSummary\":[\"[\",[\"area\"],\" ɱ² · \",[\"count\",\"plural\",{\"one\":[\"#\",\" þţ\"],\"other\":[\"#\",\" þţš\"]}],\" · \",[\"source\"],\" ~~]\"],\"node.hvacEquipment.description\":[\"[Ƒûŕñáçé, áîŕ ĥáñðļéŕ, öŕ çöñðéñšéŕ — ðûçţ ŕûñš çöññéçţ ţö îţš šûþþļý/ŕéţûŕñ çöļļáŕš. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.hvacEquipment.label\":[\"[ĤṼÅÇ Ûñîţ ~~~]\"],\"node.importedMesh.description\":[\"[Ĝéöɱéţŕý þŕéšéŕṽéð ƒŕöɱ áñ îɱþöŕţéð ɱöðéļ ŵĥéñ ñö ñáţîṽé Þášçáļ šĥáþé éẋîšţš. ~~~~~~~~~~~~~~~~~~~~]\"],\"node.importedMesh.label\":[\"[Îɱþöŕţéð Ṁéšĥ ~~~~]\"],\"node.item.authoredParams.couldnTRebuildWithTheseValues\":[\"[Çöûļðñ'ţ ŕéƀûîļð ŵîţĥ ţĥéšé ṽáļûéš. ~~~~~~~~~]\"],\"node.item.authoredParams.parameters\":[\"[Þáŕáɱéţéŕš ~~~]\"],\"node.item.authoredParams.rebuilding\":[\"[Ŕéƀûîļðîñĝ… ~~~]\"],\"node.item.authoredParams.rebuildingInBlender\":[\"[Ŕéƀûîļðîñĝ îñ Ɓļéñðéŕ… ~~~~~~]\"],\"node.item.authoredParams.resetParam\":[\"[Ŕéšéţ \",[\"param\"],\" ~~]\"],\"node.item.authoredParams.resetParameters\":[\"[Ŕéšéţ þáŕáɱéţéŕš ~~~~~]\"],\"node.item.authoredParams.resetToDefault\":[\"[Ŕéšéţ ţö ðéƒáûļţ ~~~~~]\"],\"node.item.description\":[\"[Å çáţáļöĝ-ƀáçķéð îţéɱ (ƒûŕñîţûŕé, ƒîẋţûŕéš, ðéçöŕáţîöñš). ~~~~~~~~~~~~~~]\"],\"node.item.label\":[\"[Îţéɱ ~~]\"],\"node.item.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.item.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.item.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.item.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.item.panel.info\":[\"[Îñƒö ~~]\"],\"node.item.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.item.panel.pos\":[\"[þöš ~]\"],\"node.item.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.item.panel.rot\":[\"[ŕöţ ~]\"],\"node.item.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.item.panel.scale\":[\"[Šçáļé ~~]\"],\"node.item.panel.scale2\":[\"[šçáļé ~~]\"],\"node.item.panel.uniformScale\":[\"[Ûñîƒöŕɱ Šçáļé ~~~~]\"],\"node.item.panel.xyz\":[\"[ẊÝŽ ~]\"],\"node.leanToExtension.description\":[\"[Åñ áţţáçĥéð ɱöñö-þîţçĥ öŕ ƒŕééšţáñðîñĝ ɱöñö, ĝáƀļé, öŕ ƀûţţéŕƒļý çáñöþý ŵîţĥ ɱáñáĝéð šţŕûçţûŕé áñð ðŕáîñáĝé. ~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.leanToExtension.label\":[\"[Çáñöþý ~~]\"],\"node.level.description\":[\"[Å šîñĝļé ƒļööŕ öƒ á ƀûîļðîñĝ, ĥöļðîñĝ ŵáļļš / šļáƀš / çéîļîñĝš / îţéɱš. ~~~~~~~~~~~~~~~~]\"],\"node.level.label\":[\"[Ļéṽéļ ~~]\"],\"node.lineset.description\":[\"[Ŕéƒŕîĝéŕáñţ ļîñéšéţ — çöþþéŕ šûçţîöñ + ļîǫûîð þáîŕ ĵöîñîñĝ á çöñðéñšéŕ ţö ţĥé îñðööŕ çöîļ. ~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.lineset.label\":[\"[Ļîñéšéţ ~~~]\"],\"node.liquidLine.description\":[\"[Šţáñðáļöñé ŕéƒŕîĝéŕáñţ ļîǫûîð ļîñé — á ţĥîñ ƀáŕé-çöþþéŕ ŕûñ; Ƒöļļöŵ ɱöðé ţŕáçéš áñ éẋîšţîñĝ ļîñéšéţ. ~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.liquidLine.label\":[\"[Ļîǫûîð Ļîñé ~~~]\"],\"node.measurement.description\":[\"[Å þéŕšîšţéñţ ðîšţáñçé, áñĝļé, áŕéá, þéŕîɱéţéŕ, öŕ ṽöļûɱé áññöţáţîöñ. ~~~~~~~~~~~~~~~~~]\"],\"node.measurement.label\":[\"[Ṁéášûŕéɱéñţ ~~~~]\"],\"node.numberedName\":[[\"kind\"],\" \",[\"number\"]],\"node.panel.currently\":[\"[Çûŕŕéñţļý \",[\"value\"],\" ~~~]\"],\"node.pipeFitting.description\":[\"[ÐŴṼ ĵöîñţ — éļƀöŵ ƀéñð, 45° ŵýé, öŕ šáñîţáŕý ţéé. ~~~~~~~~~~]\"],\"node.pipeFitting.label\":[\"[Þîþé Ƒîţţîñĝ ~~~~]\"],\"node.pipeSegment.description\":[\"[Ðŕáîñ / ŵášţé / ṽéñţ þîþé ŕûñ — ðŕáŵ ļéṽéļ öŕ ţöĝĝļé á ¼″ þéŕ ƒööţ ƒáļļ ŵîţĥ Š. ~~~~~~~~~~~~~~~~~]\"],\"node.pipeSegment.label\":[\"[ÐŴṼ Þîþé ~~~]\"],\"node.pipeTrap.description\":[\"[ÐŴṼ Þ-ţŕáþ — ŵáţéŕ šéáļ öñ ţĥé ŵášţé ļîñé. Ţĥé ţŕáþ áŕɱ ŕûñš ţö ţĥé ṽéñţ. ~~~~~~~~~~~~~~~~~]\"],\"node.pipeTrap.label\":[\"[Ţŕáþ ~~]\"],\"node.proceduralItem.description\":[\"[Éẋþéŕîɱéñţáļ éðîţáƀļé ŕéçîþé ~~~~~~~~]\"],\"node.proceduralItem.label\":[\"[Þŕöçéðûŕáļ îţéɱ ~~~~~]\"],\"node.ridgeVent.description\":[\"[Ṽéñţîļáţîöñ šţŕîþ ŕûññîñĝ áļöñĝ ţĥé ŕîðĝé öƒ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~~~~~]\"],\"node.ridgeVent.label\":[\"[Ŕîðĝé Ṽéñţ ~~~]\"],\"node.roof.barrelPanel.archBays\":[\"[Åŕçĥ ƀáýš ~~~]\"],\"node.roof.barrelPanel.barrelArch\":[\"[Ɓáŕŕéļ áŕçĥ ~~~]\"],\"node.roof.barrelPanel.flatPanesFollowACircularArch\":[\"[Ƒļáţ þáñéš ƒöļļöŵ á çîŕçûļáŕ áŕçĥ. Ŕîšé îš ɱéášûŕéð ƒŕöɱ ţĥé éáṽéš. ~~~~~~~~~~~~~~~~~]\"],\"node.roof.barrelPanel.rise\":[\"[Ŕîšé ~~]\"],\"node.roof.description\":[\"[Å þîţçĥéð / ĥîþ / ĝáƀļé ŕööƒ çöɱþöšéð öƒ öñé öŕ ɱöŕé šéĝɱéñţš. ~~~~~~~~~~~~~~~]\"],\"node.roof.glazing.face.archBay\":[\"[Åŕçĥ ƀáý \",[\"number\"],\" ~~~]\"],\"node.roof.glazing.face.back\":[\"[Ɓáçķ šļöþé ~~~]\"],\"node.roof.glazing.face.endLeft\":[\"[Ļéƒţ éñð ~~~]\"],\"node.roof.glazing.face.endRight\":[\"[Ŕîĝĥţ éñð ~~~]\"],\"node.roof.glazing.face.front\":[\"[Ƒŕöñţ šļöþé ~~~]\"],\"node.roof.glazing.face.slope\":[\"[Šĥéð šļöþé ~~~]\"],\"node.roof.glazingControls.alignment\":[\"[Åļîĝñɱéñţ ~~~]\"],\"node.roof.glazingControls.center\":[\"[Çéñţéŕ ~~]\"],\"node.roof.glazingControls.chooseALayoutToEditThe\":[\"[Çĥööšé á ļáýöûţ ţö éðîţ ţĥé ĝŕîð. ~~~~~~~~]\"],\"node.roof.glazingControls.empty\":[\"[Éɱþţý ~~]\"],\"node.roof.glazingControls.end\":[\"[Éñð ~]\"],\"node.roof.glazingControls.fixedSpacing\":[\"[Ƒîẋéð šþáçîñĝ ~~~~]\"],\"node.roof.glazingControls.glass\":[\"[Ĝļášš ~~]\"],\"node.roof.glazingControls.layout\":[\"[Ļáýöûţ ~~]\"],\"node.roof.glazingControls.maxSpacing\":[\"[Ṁáẋ šþáçîñĝ ~~~]\"],\"node.roof.glazingControls.maximumSpacing\":[\"[Ṁáẋîɱûɱ šþáçîñĝ ~~~~~]\"],\"node.roof.glazingControls.mixed\":[\"[Ṁîẋéð ~~]\"],\"node.roof.glazingControls.panelCount\":[\"[Þáñéļ çöûñţ ~~~]\"],\"node.roof.glazingControls.panels\":[\"[Þáñéļš ~~]\"],\"node.roof.glazingControls.solid\":[\"[Šöļîð ~~]\"],\"node.roof.glazingControls.spacing\":[\"[Šþáçîñĝ ~~~]\"],\"node.roof.glazingControls.start\":[\"[Šţáŕţ ~~]\"],\"node.roof.glazingControls.titleAlignment\":[\"[\",[\"title\"],\" áļîĝñɱéñţ ~~~]\"],\"node.roof.glazingPanel.changesApplyToAllLengthRoof\":[\"[Çĥáñĝéš áþþļý ţö áļļ \",[\"length\"],\" ŕööƒ šéĝɱéñţš. ~~~~~~~~~]\"],\"node.roof.glazingPanel.chooseOneRoofSystemToEdit\":[\"[Çĥööšé öñé ŕööƒ šýšţéɱ ţö éðîţ šéţţîñĝš ƒöŕ áļļ šéļéçţéð šéĝɱéñţš. ~~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.closeTheRoofEnds\":[\"[Çļöšé ţĥé ŕööƒ éñðš ~~~~~]\"],\"node.roof.glazingPanel.defaultPanelInfill\":[\"[Ðéƒáûļţ þáñéļ îñƒîļļ ~~~~~~]\"],\"node.roof.glazingPanel.dividesEachRoofFaceIntoColumns\":[\"[Ðîṽîðéš éáçĥ ŕööƒ ƒáçé îñţö çöļûɱñš. ~~~~~~~~~]\"],\"node.roof.glazingPanel.dividesTheLengthOfEachArch\":[\"[Ðîṽîðéš ţĥé ļéñĝţĥ öƒ éáçĥ áŕçĥ ƀáý îñţö çöļûɱñš. ~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.endInfillFillsTheSpaceAbove\":[\"[Éñð îñƒîļļ ƒîļļš ţĥé šþáçé áƀöṽé ţĥé ŵáļļš. Éðîţ ŕööɱ ŵáļļš áñð çéîļîñĝš šéþáŕáţéļý. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.frameColor\":[\"[Ƒŕáɱé çöļöŕ ~~~]\"],\"node.roof.glazingPanel.frameDepth\":[\"[Ƒŕáɱé ðéþţĥ ~~~]\"],\"node.roof.glazingPanel.frameWidth\":[\"[Ƒŕáɱé ŵîðţĥ ~~~]\"],\"node.roof.glazingPanel.framing\":[\"[Ƒŕáɱîñĝ ~~~]\"],\"node.roof.glazingPanel.glass\":[\"[Ĝļášš ~~]\"],\"node.roof.glazingPanel.glassTint\":[\"[Ĝļášš ţîñţ ~~~]\"],\"node.roof.glazingPanel.glazed\":[\"[Ĝļážéð ~~]\"],\"node.roof.glazingPanel.glazingIsAvailableForGableStraight\":[\"[Ĝļážîñĝ îš áṽáîļáƀļé ƒöŕ ĝáƀļé, šţŕáîĝĥţ šĥéð, áñð ƀáŕŕéļ ŕööƒš. ~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.gridAcrossTheRoof\":[\"[Ĝŕîð áçŕöšš ţĥé ŕööƒ ~~~~~~]\"],\"node.roof.glazingPanel.gridAlongTheLength\":[\"[Ĝŕîð áļöñĝ ţĥé ļéñĝţĥ ~~~~~~]\"],\"node.roof.glazingPanel.gridAlongTheSlope\":[\"[Ĝŕîð áļöñĝ ţĥé šļöþé ~~~~~~]\"],\"node.roof.glazingPanel.gridWithinEachArchBay\":[\"[Ĝŕîð ŵîţĥîñ éáçĥ áŕçĥ ƀáý ~~~~~~~]\"],\"node.roof.glazingPanel.infill\":[\"[Îñƒîļļ ~~]\"],\"node.roof.glazingPanel.opacity\":[\"[Öþáçîţý ~~~]\"],\"node.roof.glazingPanel.paneThickness\":[\"[Þáñé ţĥîçķñéšš ~~~~]\"],\"node.roof.glazingPanel.roofSystem\":[\"[Ŕööƒ šýšţéɱ ~~~]\"],\"node.roof.glazingPanel.roughness\":[\"[Ŕöûĝĥñéšš ~~~]\"],\"node.roof.glazingPanel.spacingIsMeasuredOnTheSlope\":[\"[Šþáçîñĝ îš ɱéášûŕéð öñ ţĥé šļöþé, ñöţ îţš ĥöŕîžöñţáļ þŕöĵéçţîöñ. ~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanel.standard\":[\"[Šţáñðáŕð ~~~]\"],\"node.roof.glazingPanel.subdividesEachFlatArchBayArch\":[\"[Šûƀðîṽîðéš éáçĥ ƒļáţ áŕçĥ ƀáý. Åŕçĥ ƀáýš çöñţŕöļš ţĥé ðîṽîšîöñš áŕöûñð ţĥé çûŕṽé. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.roof.glazingPanelEditor.chooseAPanelToOverrideIts\":[\"[Çĥööšé á þáñéļ ţö öṽéŕŕîðé îţš ðéƒáûļţ îñƒîļļ. ~~~~~~~~~~~~]\"],\"node.roof.glazingPanelEditor.column2\":[\"[Çöļûɱñ ~~]\"],\"node.roof.glazingPanelEditor.custom\":[\"[Çûšţöɱ ~~]\"],\"node.roof.glazingPanelEditor.default\":[\"[Ðéƒáûļţ ~~~]\"],\"node.roof.glazingPanelEditor.grid\":[\"[\",[\"columns\",\"plural\",{\"one\":[\"#\",\" çöļûɱñ\"],\"other\":[\"#\",\" çöļûɱñš\"]}],\" · \",[\"rows\",\"plural\",{\"one\":[\"#\",\" ŕöŵ\"],\"other\":[\"#\",\" ŕöŵš\"]}],\" ~~~~~~]\"],\"node.roof.glazingPanelEditor.individualPanels\":[\"[Îñðîṽîðûáļ þáñéļš ~~~~~]\"],\"node.roof.glazingPanelEditor.panelInfill\":[\"[Þáñéļ îñƒîļļ ~~~~]\"],\"node.roof.glazingPanelEditor.resetToDefault\":[\"[Ŕéšéţ ţö ðéƒáûļţ ~~~~~]\"],\"node.roof.glazingPanelEditor.roofFace\":[\"[Ŕööƒ ƒáçé ~~~]\"],\"node.roof.glazingPanelEditor.row2\":[\"[Ŕöŵ ~]\"],\"node.roof.glazingPanelEditor.selectedPanelInfill\":[\"[Šéļéçţéð þáñéļ îñƒîļļ ~~~~~~]\"],\"node.roof.label\":[\"[Ŕööƒ ~~]\"],\"node.roof.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.roof.panel.addChimney\":[\"[Åðð Çĥîɱñéý ~~~]\"],\"node.roof.panel.addCupola\":[\"[Åðð Çûþöļá ~~~]\"],\"node.roof.panel.addDormer\":[\"[Åðð Ðöŕɱéŕ ~~~]\"],\"node.roof.panel.addEyebrowVent\":[\"[Åðð Éýéƀŕöŵ Ṽéñţ ~~~~~]\"],\"node.roof.panel.addGutter\":[\"[Åðð Ĝûţţéŕ ~~~]\"],\"node.roof.panel.addSkylight\":[\"[Åðð Šķýļîĝĥţ ~~~~]\"],\"node.roof.panel.addSolarPanel\":[\"[Åðð Šöļáŕ Þáñéļ ~~~~]\"],\"node.roof.panel.addVent\":[\"[Åðð Ṽéñţ ~~~]\"],\"node.roof.panel.box\":[\"[Ɓöẋ ~]\"],\"node.roof.panel.boxVent\":[\"[ƀöẋ ṽéñţ ~~~]\"],\"node.roof.panel.chimney\":[\"[çĥîɱñéý ~~~]\"],\"node.roof.panel.custom\":[\"[Çûšţöɱ ~~]\"],\"node.roof.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.roof.panel.dormer\":[\"[ðöŕɱéŕ ~~]\"],\"node.roof.panel.drawSegment\":[\"[Ðŕáŵ Šéĝɱéñţ ~~~~]\"],\"node.roof.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.roof.panel.elements\":[\"[Éļéɱéñţš ~~~]\"],\"node.roof.panel.followsWalls\":[\"[Ƒöļļöŵš ŵáļļš ~~~~]\"],\"node.roof.panel.gutter\":[\"[ĝûţţéŕ ~~]\"],\"node.roof.panel.level\":[\"[Ļéṽéļ ~~]\"],\"node.roof.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.roof.panel.moveToLevel\":[\"[Ṁöṽé ţö \",[\"level\"],\" ~~]\"],\"node.roof.panel.moveToTheRoofLevel\":[\"[Ṁöṽé ţö ţĥé ŕööƒ ļéṽéļ ~~~~~~]\"],\"node.roof.panel.onStoreyWalls\":[\"[Öñ \",[\"storey\"],\" ŵîţĥ îţš ŵáļļš, šö îţ ĥîðéš ţĥáţ ƒļööŕ'š þļáñ îñ šöļö áñð éẋþļöðéð ṽîéŵš.\",[\"roofs\",\"plural\",{\"0\":[],\"1\":[],\"other\":[\" Ţĥé ƒļööŕ'š \",\"#\",\" ŕööƒš ɱöṽé ţöĝéţĥéŕ.\"]}],\" ~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.roof.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.roof.panel.ridge\":[\"[Ŕîðĝé ~~]\"],\"node.roof.panel.ridgeVent\":[\"[ŕîðĝé ṽéñţ ~~~]\"],\"node.roof.panel.roof\":[\"[Ŕööƒ ~~]\"],\"node.roof.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.roof.panel.segmentType\":[\"[\",[\"roofType\",\"select\",{\"hip\":[\"Ĥîþ\"],\"gable\":[\"Ĝáƀļé\"],\"shed\":[\"Šĥéð\"],\"gambrel\":[\"Ĝáɱƀŕéļ\"],\"dutch\":[\"Ðûţçĥ\"],\"mansard\":[\"Ṁáñšáŕð\"],\"flat\":[\"Ƒļáţ\"],\"conical\":[\"Çöñîçáļ\"],\"barrel\":[\"Ɓáŕŕéļ\"],\"other\":[\"Ŕööƒ\"]}],\" ~~~~~~~~~~~~~~~~]\"],\"node.roof.panel.segments\":[\"[Šéĝɱéñţš ~~~]\"],\"node.roof.panel.skylight\":[\"[šķýļîĝĥţ ~~~]\"],\"node.roof.panel.solarPanel\":[\"[šöļáŕ þáñéļ ~~~]\"],\"node.roof.panel.turbine\":[\"[Ţûŕƀîñé ~~~]\"],\"node.roof.panel.turbineVent\":[\"[ţûŕƀîñé ṽéñţ ~~~~]\"],\"node.roofSegment.description\":[\"[Å šîñĝļé þîţçĥéð þļáñé öƒ á þáŕéñţ ŕööƒ. ~~~~~~~~~~]\"],\"node.roofSegment.label\":[\"[Ŕööƒ Šéĝɱéñţ ~~~~]\"],\"node.roofSegment.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.roofSegment.panel.angle\":[\"[Åñĝļé ~~]\"],\"node.roofSegment.panel.arc\":[\"[Åŕç ~]\"],\"node.roofSegment.panel.autoGutters\":[\"[Åûţö ĝûţţéŕš ~~~~]\"],\"node.roofSegment.panel.autoRidgeVent\":[\"[Åûţö ŕîðĝé ṽéñţ ~~~~]\"],\"node.roofSegment.panel.barrel\":[\"[Ɓáŕŕéļ ~~]\"],\"node.roofSegment.panel.clippedVersion\":[\"[Çļîþþéð ṽéŕšîöñ ~~~~~]\"],\"node.roofSegment.panel.conical\":[\"[Çöñîçáļ ~~~]\"],\"node.roofSegment.panel.conicalShape\":[\"[Çöñîçáļ Šĥáþé ~~~~]\"],\"node.roofSegment.panel.deckThick\":[\"[Ðéçķ Ţĥîçķ. ~~~]\"],\"node.roofSegment.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.roofSegment.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.roofSegment.panel.diameter\":[\"[Ðîáɱéţéŕ ~~~]\"],\"node.roofSegment.panel.doneEditing\":[\"[Ðöñé éðîţîñĝ ~~~~]\"],\"node.roofSegment.panel.drainage\":[\"[Ðŕáîñáĝé ~~~]\"],\"node.roofSegment.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.roofSegment.panel.dutch\":[\"[Ðûţçĥ ~~]\"],\"node.roofSegment.panel.eaveOverhang\":[\"[Éáṽé öṽéŕĥáñĝ ~~~~]\"],\"node.roofSegment.panel.editFootprint\":[\"[Éðîţ ƒööţþŕîñţ ~~~~]\"],\"node.roofSegment.panel.endOverhang\":[\"[Éñð öṽéŕĥáñĝ ~~~~]\"],\"node.roofSegment.panel.fascia\":[\"[Ƒášçîá ~~]\"],\"node.roofSegment.panel.fasciaHeight\":[\"[Ƒášçîá ĥéîĝĥţ ~~~~]\"],\"node.roofSegment.panel.flat\":[\"[Ƒļáţ ~~]\"],\"node.roofSegment.panel.footprint\":[\"[Ƒööţþŕîñţ ~~~]\"],\"node.roofSegment.panel.gable\":[\"[Ĝáƀļé ~~]\"],\"node.roofSegment.panel.gableOverhang\":[\"[Ĝáƀļé öṽéŕĥáñĝ ~~~~]\"],\"node.roofSegment.panel.gambrel\":[\"[Ĝáɱƀŕéļ ~~~]\"],\"node.roofSegment.panel.hip\":[\"[Ĥîþ ~]\"],\"node.roofSegment.panel.kinkDepth\":[\"[Ķîñķ Ðéþţĥ ~~~]\"],\"node.roofSegment.panel.kinkHeight\":[\"[Ķîñķ Ĥéîĝĥţ ~~~]\"],\"node.roofSegment.panel.length\":[\"[Ļéñĝţĥ ~~]\"],\"node.roofSegment.panel.mansard\":[\"[Ṁáñšáŕð ~~~]\"],\"node.roofSegment.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.roofSegment.panel.pitch\":[\"[Þîţçĥ ~~]\"],\"node.roofSegment.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.roofSegment.panel.reset\":[\"[Ŕéšéţ ~~]\"],\"node.roofSegment.panel.roofSegment\":[\"[Ŕööƒ Šéĝɱéñţ ~~~~]\"],\"node.roofSegment.panel.roofType\":[\"[Ŕööƒ Ţýþé ~~~]\"],\"node.roofSegment.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.roofSegment.panel.shape\":[\"[Šĥáþé ~~]\"],\"node.roofSegment.panel.shed\":[\"[Šĥéð ~~]\"],\"node.roofSegment.panel.shingleThick\":[\"[Šĥîñĝļé Ţĥîçķ. ~~~~]\"],\"node.roofSegment.panel.span\":[\"[Šþáñ ~~]\"],\"node.roofSegment.panel.startAngle\":[\"[Šţáŕţ Åñĝļé ~~~]\"],\"node.roofSegment.panel.structure\":[\"[Šţŕûçţûŕé ~~~]\"],\"node.roofSegment.panel.topRakeLength\":[\"[Ţöþ Ŕáķé Ļéñĝţĥ ~~~~]\"],\"node.roofSegment.panel.topRakeThick\":[\"[Ţöþ Ŕáķé Ţĥîçķ. ~~~~]\"],\"node.roofSegment.panel.trim\":[\"[Ţŕîɱ ~~]\"],\"node.roofSegment.panel.waistHeight\":[\"[Ŵáîšţ Ĥéîĝĥţ ~~~~]\"],\"node.roofSegment.panel.waistLength\":[\"[Ŵáîšţ Ļéñĝţĥ ~~~~]\"],\"node.roofSegment.panel.waistWidth\":[\"[Ŵáîšţ Ŵîðţĥ ~~~]\"],\"node.roofSegment.panel.wall\":[\"[Ŵáļļ ~~]\"],\"node.roofSegment.panel.wallHeight\":[\"[Ŵáļļ Ĥéîĝĥţ ~~~]\"],\"node.roofSegment.panel.wallThick\":[\"[Ŵáļļ Ţĥîçķ. ~~~]\"],\"node.roofSegment.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.scan.description\":[\"[Å çáþţûŕéð šéššîöñ ŵîţĥ öþţîöñáļ ɱéšĥ, ɱöţîöñ, ɱéðîá, áñð šéñšöŕ ðáţá. ~~~~~~~~~~~~~~~~~]\"],\"node.scan.label\":[\"[Çáþţûŕé ~~~]\"],\"node.segmentNumber\":[\"[Šéĝɱéñţ \",[\"number\"],\" ~~~]\"],\"node.separator.label\":[\"[Šéþáŕáţöŕ ~~~]\"],\"node.shared.itemInteractionActions.turnLightOff\":[\"[Ţûŕñ ļîĝĥţ öƒƒ ~~~~]\"],\"node.shared.itemInteractionActions.turnLightOn\":[\"[Ţûŕñ ļîĝĥţ öñ ~~~~]\"],\"node.shared.systemCheckPanel.aboutTheseChecks\":[\"[Åƀöûţ ţĥéšé çĥéçķš ~~~~~]\"],\"node.shared.systemCheckPanel.allFindings\":[\"[Åļļ ƒîñðîñĝš ~~~~]\"],\"node.shared.systemCheckPanel.allSystems\":[\"[Åļļ šýšţéɱš ~~~]\"],\"node.shared.systemCheckPanel.connections\":[\"[Çöññéçţîöñš ~~~~]\"],\"node.shared.systemCheckPanel.drainage\":[\"[Ðŕáîñáĝé ~~~]\"],\"node.shared.systemCheckPanel.error\":[\"[Éŕŕöŕ ~~]\"],\"node.shared.systemCheckPanel.errors\":[\"[Éŕŕöŕš ~~]\"],\"node.shared.systemCheckPanel.filterSystemChecks\":[\"[Ƒîļţéŕ šýšţéɱ çĥéçķš ~~~~~~]\"],\"node.shared.systemCheckPanel.hangers\":[\"[Ĥáñĝéŕš ~~~]\"],\"node.shared.systemCheckPanel.intersections\":[\"[Îñţéŕšéçţîöñš ~~~~]\"],\"node.shared.systemCheckPanel.locate\":[\"[Ļöçáţé \",[\"name\"],\" (\",[\"id\"],\") ~~]\"],\"node.shared.systemCheckPanel.missingItem\":[\"[Ṁîššîñĝ îţéɱ ~~~~]\"],\"node.shared.systemCheckPanel.noFindings\":[\"[Ñö ƒîñðîñĝš ~~~]\"],\"node.shared.systemCheckPanel.noFindingsInThisCategory\":[\"[Ñö ƒîñðîñĝš îñ ţĥîš çáţéĝöŕý ~~~~~~~~]\"],\"node.shared.systemCheckPanel.openEnds\":[\"[Öþéñ éñðš ~~~]\"],\"node.shared.systemCheckPanel.openEndsAndSeparateBranchesMay\":[\"[Öþéñ éñðš áñð šéþáŕáţé ƀŕáñçĥéš ɱáý ƀé îñţéñţîöñáļ. Îñţéŕšéçţîöñ çĥéçķš ûšé ƀöûñðîñĝ ƀöẋéš; îñšþéçţ öþéñîñĝš áñð çļéáŕáñçéš. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.shared.systemCheckPanel.selectedConnectedSystem\":[\"[Šéļéçţéð çöññéçţéð šýšţéɱ ~~~~~~~]\"],\"node.shared.systemCheckPanel.selectedRuns\":[\"[Šéļéçţéð: \",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕûñ\"],\"other\":[\"#\",\" ŕûñš\"]}],\" · \",[\"length\"],\" ɱ ~~~~~]\"],\"node.shared.systemCheckPanel.separateBranches\":[\"[Šéþáŕáţé ƀŕáñçĥéš ~~~~~]\"],\"node.shared.systemCheckPanel.showAllFindings\":[\"[Šĥöŵ áļļ ƒîñðîñĝš ~~~~~]\"],\"node.shared.systemCheckPanel.systemChecks\":[\"[Šýšţéɱ çĥéçķš ~~~~]\"],\"node.shared.systemCheckPanel.systemFinding\":[\"[Šýšţéɱ ƒîñðîñĝ ~~~~]\"],\"node.shared.systemCheckPanel.systemFindings\":[\"[Šýšţéɱ ƒîñðîñĝš ~~~~~]\"],\"node.shared.systemCheckPanel.warning\":[\"[Ŵáŕñîñĝ ~~~]\"],\"node.shared.systemCheckPanel.warnings\":[\"[Ŵáŕñîñĝš ~~~]\"],\"node.shelf.description\":[\"[Å çöñƒîĝûŕáƀļé šĥéļṽîñĝ ûñîţ. Îţéɱš ĥöšţ öñ éáçĥ ŕöŵ. ~~~~~~~~~~~~~]\"],\"node.shelf.label\":[\"[Šĥéļƒ ~~]\"],\"node.site.description\":[\"[Ţĥé ţöþ-ļéṽéļ çöñţáîñéŕ ĥöļðîñĝ ƀûîļðîñĝš, žöñéš, áñð ţĥé þŕöþéŕţý ƀöûñðáŕý. ~~~~~~~~~~~~~~~~~~~]\"],\"node.site.label\":[\"[Šîţé ~~]\"],\"node.site.panel.address\":[\"[Åððŕéšš ~~~]\"],\"node.site.panel.apn\":[\"[ÅÞÑ ~]\"],\"node.site.panel.autoMostNorthFacingEdge\":[\"[Åûţö — ɱöšţ ñöŕţĥ-ƒáçîñĝ éðĝé ~~~~~~~]\"],\"node.site.panel.contourIntervalSitePlanAnd3d\":[\"[Çöñţöûŕ îñţéŕṽáļ (šîţé þļáñ áñð 3Ð) ~~~~~~~~~]\"],\"node.site.panel.county\":[\"[Çöûñţý ~~]\"],\"node.site.panel.eGRs60\":[\"[é.ĝ. ŔŠ-60 ~~]\"],\"node.site.panel.eGTampaLdc27156\":[\"[é.ĝ. Ţáɱþá ĻÐÇ §27-156 ~~~]\"],\"node.site.panel.every12In\":[\"[éṽéŕý 12 îñ ~~~]\"],\"node.site.panel.every24In\":[\"[éṽéŕý 24 îñ ~~~]\"],\"node.site.panel.every6In\":[\"[éṽéŕý 6 îñ ~~~]\"],\"node.site.panel.findParcel\":[\"[Ƒîñð þáŕçéļ ~~~]\"],\"node.site.panel.finding\":[\"[Ƒîñðîñĝ… ~~~]\"],\"node.site.panel.frontStreetEdge\":[\"[Ƒŕöñţ (šţŕééţ) éðĝé ~~~~~]\"],\"node.site.panel.lookingUpTheParcel\":[\"[Ļööķîñĝ ûþ ţĥé þáŕçéļ áñð ţĥé šţŕééţš áŕöûñð îţ… ~~~~~~~~~~~~]\"],\"node.site.panel.lotArea\":[\"[Ļöţ áŕéá ~~~]\"],\"node.site.panel.n1200WCassStTampaFl\":[\"[1200 Ŵ Çášš Šţ, Ţáɱþá, ƑĻ ~~~~~]\"],\"node.site.panel.noSurveyedLinesContoursAreDrawn\":[\"[Ñö šûŕṽéýéð ļîñéš — çöñţöûŕš áŕé ðŕáŵñ ƒŕöɱ ţĥé šçûļþţéð ĝŕöûñð. ~~~~~~~~~~~~~~~~]\"],\"node.site.panel.none\":[\"[ñöñé ~~]\"],\"node.site.panel.northRotation\":[\"[Ñöŕţĥ ŕöţáţîöñ ~~~~]\"],\"node.site.panel.orientation\":[\"[Öŕîéñţáţîöñ ~~~~]\"],\"node.site.panel.parcel\":[\"[Þáŕçéļ ~~]\"],\"node.site.panel.parcelLookupFailed\":[\"[Þáŕçéļ ļööķûþ ƒáîļéð. ~~~~~~]\"],\"node.site.panel.projectLook\":[\"[Þŕöĵéçţ ļööķ ~~~~]\"],\"node.site.panel.saveCurrentLook\":[\"[Šáṽé çûŕŕéñţ ļööķ ~~~~~]\"],\"node.site.panel.saveTheCurrentLightingAndDisplay\":[\"[Šáṽé ţĥé çûŕŕéñţ ļîĝĥţîñĝ áñð ðîšþļáý áš ţĥîš þŕöĵéçţ'š ðéƒáûļţ. Þéŕšöñáļ ðîšþļáý çĥáñĝéš šţáý îñ ţĥîš ƀŕöŵšéŕ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.site.panel.setbacks\":[\"[Šéţƀáçķš ~~~]\"],\"node.site.panel.showGround\":[\"[Šĥöŵ ĝŕöûñð ~~~]\"],\"node.site.panel.showTheContourLinesIn3d\":[\"[Šĥöŵ ţĥé çöñţöûŕ ļîñéš îñ 3Ð ~~~~~~~]\"],\"node.site.panel.side\":[\"[šîðé ~~]\"],\"node.site.panel.site\":[\"[Šîţé ~~]\"],\"node.site.panel.source\":[\"[Šöûŕçé ~~]\"],\"node.site.panel.sourceCitation\":[\"[Šöûŕçé / çîţáţîöñ ~~~~~]\"],\"node.site.panel.streetAddress\":[\"[Šţŕééţ áððŕéšš ~~~~]\"],\"node.site.panel.survey\":[\"[šûŕṽéý ~~]\"],\"node.site.panel.surveyedContours\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" šûŕṽéýéð ļîñé\"],\"other\":[\"#\",\" šûŕṽéýéð ļîñéš\"]}],\" áţ \",[\"interval\"],\" ƒţ (\",[\"datum\"],\") — \",[\"source\"],\" ~~~~~~~~~]\"],\"node.site.panel.terrain\":[\"[Ţéŕŕáîñ ~~~]\"],\"node.site.panel.typeAnAddressFirst\":[\"[Ţýþé áñ áððŕéšš ƒîŕšţ. ~~~~~~]\"],\"node.site.panel.useProjectLook\":[\"[Ûšé þŕöĵéçţ ļööķ ~~~~~]\"],\"node.site.panel.zone\":[\"[Žöñé ~~]\"],\"node.site.setback.front\":[\"[Ƒŕöñţ ~~]\"],\"node.site.setback.leftOverride\":[\"[Ļéƒţ (öṽéŕŕîðé) ~~~~]\"],\"node.site.setback.rear\":[\"[Ŕéáŕ ~~]\"],\"node.site.setback.rightOverride\":[\"[Ŕîĝĥţ (öṽéŕŕîðé) ~~~~]\"],\"node.site.setback.side\":[\"[Šîðé ~~]\"],\"node.skylight.description\":[\"[Ƒŕáɱéð ĝļášš öþéñîñĝ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~]\"],\"node.skylight.label\":[\"[Šķýļîĝĥţ ~~~]\"],\"node.slab.description\":[\"[Å þöļýĝöñ-ƀöûñðéð ƒļööŕ šûŕƒáçé ţĥáţ ĥöšţš îţéɱš öñ ţöþ. ~~~~~~~~~~~~~~]\"],\"node.slab.label\":[\"[Šļáƀ ~~]\"],\"node.slab.panel.addHole\":[\"[Åðð Ĥöļé ~~~]\"],\"node.slab.panel.area\":[\"[Åŕéá ~~]\"],\"node.slab.panel.auto\":[\"[Åûţö ~~]\"],\"node.slab.panel.base\":[\"[Ɓášé ~~]\"],\"node.slab.panel.cutHatch\":[\"[Çûţ ĥáţçĥ ~~~]\"],\"node.slab.panel.cutOpening\":[\"[Çûţ öþéñîñĝ ~~~]\"],\"node.slab.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.slab.panel.done\":[\"[Ðöñé ~~]\"],\"node.slab.panel.elevation\":[\"[Éļéṽáţîöñ ~~~]\"],\"node.slab.panel.extendsThePerimeterDownToTerrain\":[\"[Éẋţéñðš ţĥé þéŕîɱéţéŕ ðöŵñ ţö ţéŕŕáîñ. Ţĥé ƒļáţ šûŕƒáçé, ƀášé, áñð ţĥîçķñéšš šţáý ûñçĥáñĝéð. ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.slab.panel.fixed\":[\"[Ƒîẋéð ~~]\"],\"node.slab.panel.floor\":[\"[Ƒļööŕ ~~]\"],\"node.slab.panel.followsTerrain\":[\"[Ƒöļļöŵš ţéŕŕáîñ ~~~~~]\"],\"node.slab.panel.foundation\":[\"[Ƒöûñðáţîöñ ~~~]\"],\"node.slab.panel.holes\":[\"[Ĥöļéš ~~]\"],\"node.slab.panel.info\":[\"[Îñƒö ~~]\"],\"node.slab.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.slab.panel.noHoles\":[\"[Ñö ĥöļéš ~~~]\"],\"node.slab.panel.rim\":[\"[Ŕîɱ ~]\"],\"node.slab.panel.slab\":[\"[Šļáƀ ~~]\"],\"node.slab.panel.standard2\":[\"[Šţáñðáŕð (2\\\") ~~~]\"],\"node.slab.panel.standard5cm\":[\"[Šţáñðáŕð (5çɱ) ~~~]\"],\"node.slab.panel.sunken15cm\":[\"[Šûñķéñ (15çɱ) ~~~]\"],\"node.slab.panel.sunken6\":[\"[Šûñķéñ (6\\\") ~~]\"],\"node.slab.panel.surface\":[\"[Šûŕƒáçé ~~~]\"],\"node.slab.panel.thick15cm\":[\"[Ţĥîçķ (15çɱ) ~~~]\"],\"node.slab.panel.thick6\":[\"[Ţĥîçķ (6\\\") ~~]\"],\"node.slab.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.slab.panel.thin1\":[\"[Ţĥîñ (1\\\") ~~]\"],\"node.slab.panel.thin2cm\":[\"[Ţĥîñ (2çɱ) ~~]\"],\"node.solarPanel.description\":[\"[Ĝŕîð öƒ þĥöţöṽöļţáîç þáñéļš ɱöûñţéð öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~~~~]\"],\"node.solarPanel.label\":[\"[Šöļáŕ Þáñéļ ~~~]\"],\"node.spawn.description\":[\"[Þļáýéŕ öŕ çáɱéŕá öŕîĝîñ ŵîţĥîñ á ļéṽéļ. Öñé þéŕ ļéṽéļ. ~~~~~~~~~~~~~]\"],\"node.spawn.label\":[\"[Šþáŵñ Þöîñţ ~~~]\"],\"node.stair.constructionControls.body\":[\"[Ɓöðý ~~]\"],\"node.stair.constructionControls.centerStringer\":[\"[Çéñţéŕ šţŕîñĝéŕ ~~~~~]\"],\"node.stair.constructionControls.closedRisers\":[\"[Çļöšéð ŕîšéŕš ~~~~]\"],\"node.stair.constructionControls.inherit\":[\"[Îñĥéŕîţ ~~~]\"],\"node.stair.constructionControls.nosing\":[\"[Ñöšîñĝ ~~]\"],\"node.stair.constructionControls.open\":[\"[Öþéñ ~~]\"],\"node.stair.constructionControls.original\":[\"[Öŕîĝîñáļ ~~~]\"],\"node.stair.constructionControls.riserThickness\":[\"[Ŕîšéŕ ţĥîçķñéšš ~~~~~]\"],\"node.stair.constructionControls.sideStringers\":[\"[Šîðé šţŕîñĝéŕš ~~~~]\"],\"node.stair.constructionControls.solid\":[\"[Šöļîð ~~]\"],\"node.stair.constructionControls.stringerDepth\":[\"[Šţŕîñĝéŕ ðéþţĥ ~~~~]\"],\"node.stair.constructionControls.stringerWidth\":[\"[Šţŕîñĝéŕ ŵîðţĥ ~~~~]\"],\"node.stair.constructionControls.treadFinish\":[\"[Ţŕéáð ƒîñîšĥ ~~~~]\"],\"node.stair.constructionControls.treadThickness\":[\"[Ţŕéáð ţĥîçķñéšš ~~~~~]\"],\"node.stair.constructionControls.waist\":[\"[Ŵáîšţ ~~]\"],\"node.stair.constructionControls.waistThickness\":[\"[Ŵáîšţ ţĥîçķñéšš ~~~~~]\"],\"node.stair.description\":[\"[Å šţáîŕ çöɱþöšéð öƒ öñé öŕ ɱöŕé ƒļîĝĥţš ŵîţĥ çöñƒîĝûŕáƀļé ţŕéáðš, ŕîšéŕš, ŕáîļîñĝš. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.arrivalMismatch\":[\"[Ţĥé ƒļîĝĥţ çĥáîñ ðöéš ñöţ ŕéáçĥ ţĥé ðéçļáŕéð ðéšţîñáţîöñ. ~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.comfortTarget\":[\"[Ţŵö ŕîšéŕš þļûš ĝöîñĝ îš öûţšîðé ţĥé 0.60–0.65 ɱ ðéšîĝñ ŕáñĝé. ~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.goingTarget\":[\"[Ĝöîñĝ îš ƀéļöŵ ţĥé ðéšîĝñ ţáŕĝéţ. ~~~~~~~~~]\"],\"node.stair.diagnostic.headroomTarget\":[\"[Öṽéŕĥéáð šûŕƒáçéš ļéáṽé ļéšš ţĥáñ ţĥé ţáŕĝéţ ĥéáðŕööɱ. ~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.headroomUnresolved\":[\"[Ðéţáîļéð ĥéáðŕööɱ çöûļð ñöţ ƀé éṽáļûáţéð: çĥéçķ ŕîšéŕ çöûñţš áñð ţĥé šûŕƒáçé ǫûéŕý ƀûðĝéţ. ~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.invalidFlight\":[\"[Ƒļîĝĥţ ðîɱéñšîöñš áñð îñţéĝéŕ ŕîšéŕ çöûñţ ɱûšţ ƀé þöšîţîṽé. ~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.invalidRise\":[\"[Ţĥé ðéšţîñáţîöñ ɱûšţ ƀé áƀöṽé ţĥé šţáîŕ ƀášé. ~~~~~~~~~~~~]\"],\"node.stair.diagnostic.landingOverlap\":[\"[Ļáñðîñĝ ðéþţĥ éẋçééðš á ƒûļļ çîŕçļé áţ ţĥé ŵáļķîñĝ ļîñé; ţĥé ṽîšîƀļé ļáñðîñĝ îš ļîɱîţéð ţö öñé çîŕçļé. ~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.narrowWinderEnd\":[\"[Ţĥé ñáŕŕöŵ éñð öƒ á ŵîñðéŕ ţŕéáð îš ƀéļöŵ 0.10 ɱ; çĥéçķ ţĥé îñţéñðéð šţáîŕ ûšé. ~~~~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.nonuniformRisers\":[\"[Ƒļîĝĥţ ŕîšéŕ ĥéîĝĥţš ðéŕ. Ûšé ûñîƒöŕɱ-ŕîšéŕ ŕéþáîŕ öñļý îƒ ţĥîš îš á þŕöþöšéð ðéšîĝñ. ~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.raisedLanding\":[\"[Å ļáñðîñĝ ĥáš á šţöŕéð ŕîšé; îñšþéçţ îţš ţŕáñšîţîöñ ƀéƒöŕé ŕéþáîŕ. ~~~~~~~~~~~~~~~~~]\"],\"node.stair.diagnostic.riserTarget\":[\"[Ŕîšéŕ ĥéîĝĥţ éẋçééðš ţĥé ðéšîĝñ ţáŕĝéţ. ~~~~~~~~~~]\"],\"node.stair.label\":[\"[Šţáîŕ ~~]\"],\"node.stair.layout.straight\":[\"[Šţŕáîĝĥţ ~~~]\"],\"node.stair.layout.turn\":[\"[\",[\"layout\"],\" ţûŕñ ~~]\"],\"node.stair.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.stair.panel.addFlight\":[\"[Åðð ƒļîĝĥţ ~~~]\"],\"node.stair.panel.addLanding\":[\"[Åðð ļáñðîñĝ ~~~]\"],\"node.stair.panel.applyLabelLayout\":[\"[Åþþļý \",[\"label\"],\" ļáýöûţ ~~~~]\"],\"node.stair.panel.autoCutout\":[\"[Åûţö Çûţöûţ ~~~]\"],\"node.stair.panel.balusters\":[\"[Ɓáļûšţéŕš ~~~]\"],\"node.stair.panel.boards\":[\"[Ɓöáŕðš ~~]\"],\"node.stair.panel.both\":[\"[Ɓöţĥ ~~]\"],\"node.stair.panel.cable\":[\"[Çáƀļé ~~]\"],\"node.stair.panel.centerColumn\":[\"[Çéñţéŕ Çöļûɱñ ~~~~]\"],\"node.stair.panel.clockwise\":[\"[Çļöçķŵîšé ~~~]\"],\"node.stair.panel.connectedTo\":[\"[Çöññéçţéð ţö \",[\"surface\"],\". Ṁöṽé ţĥé šţáîŕ ţö çöññéçţ ţö áñöţĥéŕ éðĝé. ~~~~~~~~~~~~~~]\"],\"node.stair.panel.connectedToSurface\":[\"[Çöññéçţéð ţö á šûŕƒáçé. Ṁöṽé ţĥé šţáîŕ ţö çöññéçţ ţö áñöţĥéŕ éðĝé. ~~~~~~~~~~~~~~~~]\"],\"node.stair.panel.construction\":[\"[Çöñšţŕûçţîöñ ~~~~]\"],\"node.stair.panel.counterclockwise\":[\"[Çöûñţéŕçļöçķŵîšé ~~~~~]\"],\"node.stair.panel.curved\":[\"[Çûŕṽéð ~~]\"],\"node.stair.panel.customRise\":[\"[Çûšţöɱ ŕîšé ~~~]\"],\"node.stair.panel.deck\":[\"[Ðéçķ ~~]\"],\"node.stair.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.stair.panel.designTargets\":[\"[Ðéšîĝñ ţáŕĝéţš ~~~~]\"],\"node.stair.panel.destination\":[\"[Ðéšţîñáţîöñ ~~~~]\"],\"node.stair.panel.dragNearADeckPatioConcrete\":[\"[Ðŕáĝ ñéáŕ á ðéçķ, þáţîö, çöñçŕéţé šļáƀ, öŕ ļáñðîñĝ éðĝé ţö ƒîţ ţĥé šţáîŕ. ~~~~~~~~~~~~~~~~~]\"],\"node.stair.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.stair.panel.equalAngle\":[\"[Éǫûáļ áñĝļé ~~~]\"],\"node.stair.panel.equalGoing\":[\"[Éǫûáļ ĝöîñĝ ~~~]\"],\"node.stair.panel.fitRisersAndGoing\":[\"[Ƒîţ ŕîšéŕš áñð ĝöîñĝ ~~~~~~]\"],\"node.stair.panel.fitToFloor\":[\"[Ƒîţ Ţö Ƒļööŕ ~~~]\"],\"node.stair.panel.fitUniformRisers\":[\"[Ƒîţ ûñîƒöŕɱ ŕîšéŕš ~~~~~]\"],\"node.stair.panel.flightMeasurements\":[\"[Ƒļîĝĥţ \",[\"number\"],\": \",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕîšéŕ\"],\"other\":[\"#\",\" ŕîšéŕš\"]}],\" · Ŕ \",[\"riser\"],\" · Ţ \",[\"going\"],\" · \",[\"slope\"],\" ~~~~~~]\"],\"node.stair.panel.floorsCeilingsAndStairsOnly\":[\"[Ƒļööŕš, çéîļîñĝš áñð šţáîŕš öñļý. ~~~~~~~~~]\"],\"node.stair.panel.followsDeck\":[\"[Ƒöļļöŵš ðéçķ ~~~~]\"],\"node.stair.panel.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"node.stair.panel.fromLevel\":[\"[Ƒŕöɱ Ļéṽéļ ~~~]\"],\"node.stair.panel.geometry\":[\"[Ĝéöɱéţŕý ~~~]\"],\"node.stair.panel.glass\":[\"[Ĝļášš ~~]\"],\"node.stair.panel.headroom\":[\"[Ĥéáðŕööɱ: ~~~]\"],\"node.stair.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.stair.panel.innerGap\":[\"[Îññéŕ ĝáþ ~~~]\"],\"node.stair.panel.innerRadius\":[\"[Îññéŕ Ŕáðîûš ~~~~]\"],\"node.stair.panel.integrated\":[\"[Îñţéĝŕáţéð ~~~]\"],\"node.stair.panel.landing\":[\"[Ļáñðîñĝ ~~~]\"],\"node.stair.panel.layout\":[\"[Ļáýöûţ ~~]\"],\"node.stair.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.stair.panel.leftTurn\":[\"[Ļéƒţ ţûŕñ ~~~]\"],\"node.stair.panel.measurements\":[\"[Ṁéášûŕéɱéñţš ~~~~]\"],\"node.stair.panel.metal\":[\"[Ṁéţáļ ~~]\"],\"node.stair.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.stair.panel.movingThisStairKeepsItsCurrent\":[\"[Ṁöṽîñĝ ţĥîš šţáîŕ ķééþš îţš çûŕŕéñţ ŕîšé, šţéþš, áñð ŕûñ. ~~~~~~~~~~~~~~]\"],\"node.stair.panel.noOverheadSurface\":[\"[Ñö öṽéŕĥéáð šûŕƒáçé ~~~~~~]\"],\"node.stair.panel.none\":[\"[Ñöñé ~~]\"],\"node.stair.panel.notEvaluated\":[\"[Ñöţ éṽáļûáţéð ~~~~]\"],\"node.stair.panel.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.stair.panel.openingOffset\":[\"[Öþéñîñĝ Öƒƒšéţ ~~~~]\"],\"node.stair.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.stair.panel.postRail\":[\"[Þöšţ & ŕáîļ ~~~]\"],\"node.stair.panel.railing\":[\"[Ŕáîļîñĝ ~~~]\"],\"node.stair.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.stair.panel.rightTurn\":[\"[Ŕîĝĥţ ţûŕñ ~~~]\"],\"node.stair.panel.rise\":[\"[Ŕîšé ~~]\"],\"node.stair.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.stair.panel.segmentType\":[\"[\",[\"type\",\"select\",{\"landing\":[\"Ļáñðîñĝ\"],\"other\":[\"Šţáîŕ\"]}],\" ~~~~]\"],\"node.stair.panel.segments\":[\"[Šéĝɱéñţš ~~~]\"],\"node.stair.panel.sizing\":[\"[Šîžîñĝ ~~]\"],\"node.stair.panel.snapToNearbySurfaces\":[\"[Šñáþ ţö ñéáŕƀý šûŕƒáçéš ~~~~~~]\"],\"node.stair.panel.spiral\":[\"[Šþîŕáļ ~~]\"],\"node.stair.panel.staircase\":[\"[Šţáîŕçášé ~~~]\"],\"node.stair.panel.stepSupports\":[\"[Šţéþ Šûþþöŕţš ~~~~]\"],\"node.stair.panel.steps\":[\"[Šţéþš ~~]\"],\"node.stair.panel.straight\":[\"[Šţŕáîĝĥţ ~~~]\"],\"node.stair.panel.style\":[\"[Šţýļé ~~]\"],\"node.stair.panel.surfaceConnection\":[\"[Šûŕƒáçé çöññéçţîöñ ~~~~~~]\"],\"node.stair.panel.sweep\":[\"[Šŵééþ ~~]\"],\"node.stair.panel.targetGoing\":[\"[Ţáŕĝéţ ĝöîñĝ ~~~~]\"],\"node.stair.panel.targetHeadroom\":[\"[Ţáŕĝéţ ĥéáðŕööɱ ~~~~~]\"],\"node.stair.panel.targetMaxRiser\":[\"[Ţáŕĝéţ ɱáẋ ŕîšéŕ ~~~~~]\"],\"node.stair.panel.targetMinimumGoing\":[\"[Ţáŕĝéţ ɱîñîɱûɱ ĝöîñĝ ~~~~~~]\"],\"node.stair.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.stair.panel.to\":[\"[Ţö ~]\"],\"node.stair.panel.topLanding\":[\"[Ţöþ Ļáñðîñĝ ~~~]\"],\"node.stair.panel.type\":[\"[Ţýþé ~~]\"],\"node.stair.panel.unavailable\":[\"[Ûñáṽáîļáƀļé ~~~~]\"],\"node.stair.panel.walkingLineOffset\":[\"[Ŵáļķîñĝ ļîñé öƒƒšéţ ~~~~~~]\"],\"node.stair.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.stair.panel.winder\":[\"[Ŵîñðéŕ ~~]\"],\"node.stair.railingControls.both\":[\"[Ɓöţĥ ~~]\"],\"node.stair.railingControls.bottomExtension\":[\"[Ɓöţţöɱ šļöþéð éẋţéñšîöñ ~~~~~~~]\"],\"node.stair.railingControls.continuous\":[\"[Çöñţîñûöûš ~~~]\"],\"node.stair.railingControls.floor\":[\"[Ƒļööŕ ~~]\"],\"node.stair.railingControls.handrailDiameter\":[\"[Ĥáñðŕáîļ ðîáɱéţéŕ ~~~~~]\"],\"node.stair.railingControls.handrailHeight\":[\"[Ĥáñðŕáîļ ĥéîĝĥţ ~~~~~]\"],\"node.stair.railingControls.handrailInset\":[\"[Ĥáñðŕáîļ îñšéţ ~~~~]\"],\"node.stair.railingControls.left\":[\"[Ļéƒţ ~~]\"],\"node.stair.railingControls.noReturn\":[\"[Ñö ŕéţûŕñ ~~~]\"],\"node.stair.railingControls.none\":[\"[Ñöñé ~~]\"],\"node.stair.railingControls.originalLayout\":[\"[Öŕîĝîñáļ ļáýöûţ ~~~~~]\"],\"node.stair.railingControls.postFacing\":[\"[Þöšţ-ƒáçîñĝ ~~~]\"],\"node.stair.railingControls.returnLength\":[\"[Ŕéţûŕñ ļéñĝţĥ ~~~~]\"],\"node.stair.railingControls.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.stair.railingControls.separateHandrail\":[\"[Šéþáŕáţé ĥáñðŕáîļ ~~~~~]\"],\"node.stair.railingControls.setTheLengthToReachThe\":[\"[Šéţ ţĥé ļéñĝţĥ ţö ŕéáçĥ ţĥé ŵáļļ öŕ þöšţ. ~~~~~~~~~~]\"],\"node.stair.railingControls.topExtension\":[\"[Ţöþ ĥöŕîžöñţáļ éẋţéñšîöñ ~~~~~~~]\"],\"node.stair.railingControls.wallFacing\":[\"[Ŵáļļ-ƒáçîñĝ ~~~]\"],\"node.stairSegment.description\":[\"[Å šîñĝļé ƒļîĝĥţ öƒ á þáŕéñţ šţáîŕ. ~~~~~~~~~]\"],\"node.stairSegment.label\":[\"[Šţáîŕ Šéĝɱéñţ ~~~~]\"],\"node.stairSegment.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.stairSegment.panel.attachment\":[\"[Åţţáçĥɱéñţ ~~~]\"],\"node.stairSegment.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.stairSegment.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.stairSegment.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.stairSegment.panel.editingSwitchesTheStairToCustom\":[\"[Éðîţîñĝ šŵîţçĥéš ţĥé šţáîŕ ţö Çûšţöɱ ŕîšé ~~~~~~~~~~~]\"],\"node.stairSegment.panel.equalAngle\":[\"[Éǫûáļ áñĝļé ~~~]\"],\"node.stairSegment.panel.equalGoing\":[\"[Éǫûáļ ĝöîñĝ ~~~]\"],\"node.stairSegment.panel.fillToFloor\":[\"[Ƒîļļ ţö ƒļööŕ ~~~~]\"],\"node.stairSegment.panel.flight\":[\"[Ƒļîĝĥţ ~~]\"],\"node.stairSegment.panel.flightShape\":[\"[Ƒļîĝĥţ šĥáþé ~~~~]\"],\"node.stairSegment.panel.front\":[\"[Ƒŕöñţ ~~]\"],\"node.stairSegment.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.stairSegment.panel.innerGap\":[\"[Îññéŕ ĝáþ ~~~]\"],\"node.stairSegment.panel.landing\":[\"[Ļáñðîñĝ ~~~]\"],\"node.stairSegment.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.stairSegment.panel.leftTurn\":[\"[Ļéƒţ ţûŕñ ~~~]\"],\"node.stairSegment.panel.length\":[\"[Ļéñĝţĥ ~~]\"],\"node.stairSegment.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.stairSegment.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.stairSegment.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.stairSegment.panel.rightTurn\":[\"[Ŕîĝĥţ ţûŕñ ~~~]\"],\"node.stairSegment.panel.rotation\":[\"[Ŕöţáţîöñ ~~~]\"],\"node.stairSegment.panel.stairSegment\":[\"[Šţáîŕ Šéĝɱéñţ ~~~~]\"],\"node.stairSegment.panel.steps\":[\"[Šţéþš ~~]\"],\"node.stairSegment.panel.straight\":[\"[Šţŕáîĝĥţ ~~~]\"],\"node.stairSegment.panel.structure\":[\"[Šţŕûçţûŕé ~~~]\"],\"node.stairSegment.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.stairSegment.panel.type\":[\"[Ţýþé ~~]\"],\"node.stairSegment.panel.walkingLineOffset\":[\"[Ŵáļķîñĝ ļîñé öƒƒšéţ ~~~~~~]\"],\"node.stairSegment.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.stairSegment.panel.winder\":[\"[Ŵîñðéŕ ~~]\"],\"node.structuralGrid.description\":[\"[Þéŕšîšţéñţ çöñšţŕûçţîöñ ĝŕîð áẋîš ŵîţĥ îðéñţîƒîçáţîöñ ƀûƀƀļéš. ~~~~~~~~~~~~~~~~~]\"],\"node.structuralGrid.label\":[\"[Šţŕûçţûŕáļ Ĝŕîð ~~~~~]\"],\"node.turbineVent.description\":[\"[Ŵîñð-ðŕîṽéñ šþîññîñĝ ŵĥîŕļýƀîŕð éẋĥáûšţ ṽéñţ ƒöŕ á ŕööƒ šļöþé. ~~~~~~~~~~~~~~~~]\"],\"node.turbineVent.label\":[\"[Ţûŕƀîñé Ṽéñţ ~~~~]\"],\"node.unit.description\":[\"[Å ñáɱéð ĝŕöûþ öƒ žöñéš ƒöŕɱîñĝ öñé áþáŕţɱéñţ, ĥöţéļ ŕööɱ öŕ çöɱɱéŕçîáļ ļöţ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.unit.kind.apartment\":[\"[Åþáŕţɱéñţ ~~~]\"],\"node.unit.kind.commercial\":[\"[Çöɱɱéŕçîáļ ~~~]\"],\"node.unit.kind.common\":[\"[Çöɱɱöñ ~~]\"],\"node.unit.kind.hotelRoom\":[\"[Ĥöţéļ ŕööɱ ~~~]\"],\"node.unit.label\":[\"[Ûñîţ ~~]\"],\"node.unit.panel.noZonesAssigned\":[\"[Ñö žöñéš áššîĝñéð ýéţ. ~~~~~~]\"],\"node.unit.panel.nonAdjacentLevels\":[\"[Ṁéɱƀéŕš šîţ öñ ļéṽéļš ţĥáţ áŕé ñöţ áðĵáçéñţ. ~~~~~~~~~~~]\"],\"node.unit.panel.removeMember\":[\"[Ŕéɱöṽé \",[\"name\"],\" ƒŕöɱ ûñîţ ~~~~~]\"],\"node.unit.panel.removeZone\":[\"[Ŕéɱöṽé žöñé ƒŕöɱ ûñîţ ~~~~~~]\"],\"node.unit.unitPanel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.unit.unitPanel.color\":[\"[Çöļöŕ ~~]\"],\"node.unit.unitPanel.delete\":[\"[Ðéļéţé ~~]\"],\"node.unit.unitPanel.focus\":[\"[Ƒöçûš ~~]\"],\"node.unit.unitPanel.grossArea\":[\"[Ĝŕöšš áŕéá ~~~]\"],\"node.unit.unitPanel.kind\":[\"[Ķîñð ~~]\"],\"node.unit.unitPanel.levels\":[\"[Ļéṽéļš ~~]\"],\"node.unit.unitPanel.members\":[\"[Ṁéɱƀéŕš ~~~]\"],\"node.unit.unitPanel.name\":[\"[Ñáɱé ~~]\"],\"node.unit.unitPanel.noRoomsYetPickThisUnit\":[\"[Ñö ŕööɱš ýéţ. Þîçķ ţĥîš ûñîţ ƒŕöɱ á ŕööɱ'š þáñéļ, öŕ ðŕáŵ žöñéš ŵĥîļé îţ îš ƒöçûšéð. ~~~~~~~~~~~~~~~~~~~~]\"],\"node.unit.unitPanel.report\":[\"[Ŕéþöŕţ ~~]\"],\"node.unit.unitPanel.unit\":[\"[Ûñîţ ~~]\"],\"node.wall.actions.mergeWalls\":[\"[Ṁéŕĝé ŵáļļš ~~~]\"],\"node.wall.actions.splitWall\":[\"[Šþļîţ ŵáļļ ~~~]\"],\"node.wall.curtain.cell\":[\"[Çöļûɱñ \",[\"column\"],\", ŕöŵ \",[\"row\"],\": \",[\"type\",\"select\",{\"glass\":[\"ĝļášš\"],\"solid\":[\"šöļîð\"],\"other\":[\"éɱþţý\"]}],\" ~~~~~~~~]\"],\"node.wall.curtain.columnSpacing\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" çöļûɱñ\"],\"other\":[\"#\",\" çöļûɱñš\"]}],\" · \",[\"spacing\"],\" ĝŕîð šþáçîñĝ ~~~~~~~~]\"],\"node.wall.curtain.noPanels\":[\"[Ñö þáñéļš ~~~]\"],\"node.wall.curtain.rowSpacing\":[\"[\",[\"count\",\"plural\",{\"one\":[\"#\",\" ŕöŵ\"],\"other\":[\"#\",\" ŕöŵš\"]}],\" · \",[\"spacing\"],\" ĝŕîð šþáçîñĝ ~~~~~~]\"],\"node.wall.curtainWallPanel.applyTint\":[\"[Åþþļý ţîñţ ~~~]\"],\"node.wall.curtainWallPanel.borderOpeningFrame\":[\"[Ɓöŕðéŕ / öþéñîñĝ ƒŕáɱé ~~~~~~]\"],\"node.wall.curtainWallPanel.bottom\":[\"[Ɓöţţöɱ ~~]\"],\"node.wall.curtainWallPanel.bottomRow\":[\"[Ɓöţţöɱ ŕöŵ ~~~]\"],\"node.wall.curtainWallPanel.cancelTint\":[\"[Çáñçéļ ţîñţ ~~~]\"],\"node.wall.curtainWallPanel.center\":[\"[Çéñţéŕ ~~]\"],\"node.wall.curtainWallPanel.chooseACellOrEnterIts\":[\"[Çĥööšé á çéļļ öŕ éñţéŕ îţš çöļûɱñ áñð ŕöŵ. Ûšé áŕŕöŵ ķéýš ţö ɱöṽé ƀéţŵééñ çéļļš. Çöļûɱñš ŕûñ ƒŕöɱ ţĥé ŵáļļ šţáŕţ; ŕöŵš çöûñţ ûþŵáŕð. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.clearHiddenOverrides\":[\"[Çļéáŕ ĥîððéñ öṽéŕŕîðéš ~~~~~~]\"],\"node.wall.curtainWallPanel.column\":[\"[Çöļûɱñ ~~]\"],\"node.wall.curtainWallPanel.columnLayout\":[\"[Çöļûɱñ ļáýöûţ ~~~~]\"],\"node.wall.curtainWallPanel.columnRow\":[\"[Çöļûɱñ \",[\"column\"],\", ŕöŵ \",[\"row\"],\" ~~~]\"],\"node.wall.curtainWallPanel.construction\":[\"[Çöñšţŕûçţîöñ ~~~~]\"],\"node.wall.curtainWallPanel.continuousMullionsAndTransomsAssembledAlong\":[\"[Çöñţîñûöûš ɱûļļîöñš áñð ţŕáñšöɱš áššéɱƀļéð áļöñĝ ţĥé ŵáļļ. ~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.curtainWallPanelSelection\":[\"[Çûŕţáîñ ŵáļļ þáñéļ šéļéçţîöñ ~~~~~~~~]\"],\"node.wall.curtainWallPanel.customInfill\":[\"[Çûšţöɱ îñƒîļļ ~~~~]\"],\"node.wall.curtainWallPanel.defaultPanel\":[\"[Ðéƒáûļţ þáñéļ ~~~~]\"],\"node.wall.curtainWallPanel.editIndividualPanels\":[\"[Éðîţ îñðîṽîðûáļ þáñéļš ~~~~~~]\"],\"node.wall.curtainWallPanel.effectiveThicknessLimited\":[\"[Ƀƒéçţîṽé ţĥîçķñéšš: \",[\"thickness\"],\", ļîɱîţéð ƀý ƒŕáɱé ðéþţĥ. ~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.empty\":[\"[Éɱþţý ~~]\"],\"node.wall.curtainWallPanel.enablePanelEditing\":[\"[Éñáƀļé þáñéļ éðîţîñĝ ~~~~~~]\"],\"node.wall.curtainWallPanel.end\":[\"[Éñð ~]\"],\"node.wall.curtainWallPanel.fixedSpacing\":[\"[Ƒîẋéð šþáçîñĝ ~~~~]\"],\"node.wall.curtainWallPanel.followingWallDefaults\":[\"[Ƒöļļöŵîñĝ ŵáļļ ðéƒáûļţš ~~~~~~~]\"],\"node.wall.curtainWallPanel.frameDimensions\":[\"[Ƒŕáɱé ðîɱéñšîöñš ~~~~~]\"],\"node.wall.curtainWallPanel.framing\":[\"[Ƒŕáɱîñĝ ~~~]\"],\"node.wall.curtainWallPanel.fullyCapped\":[\"[Ƒûļļý çáþþéð ~~~~]\"],\"node.wall.curtainWallPanel.glass\":[\"[Ĝļášš ~~]\"],\"node.wall.curtainWallPanel.glassAppearance\":[\"[Ĝļášš áþþéáŕáñçé ~~~~~]\"],\"node.wall.curtainWallPanel.glassAppearanceIsControlledByThe\":[\"[Ĝļášš áþþéáŕáñçé îš çöñţŕöļļéð ƀý ţĥé þáîñţ ţööļ. ~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.glassTint\":[\"[Ĝļášš ţîñţ ~~~]\"],\"node.wall.curtainWallPanel.glazingGap\":[\"[Ĝļážîñĝ ĝáþ ~~~]\"],\"node.wall.curtainWallPanel.gridLimitedTo32PanelsPer\":[\"[Ĝŕîð ļîɱîţéð ţö 32 þáñéļš þéŕ áẋîš. Šþáçîñĝ éẋþáñðš ţö ƒîţ ţĥîš ŵáļļ. ~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.horizontalCaps\":[\"[Ĥöŕîžöñţáļ çáþš ~~~~~]\"],\"node.wall.curtainWallPanel.horizontalFrameWidth\":[\"[Ĥöŕîžöñţáļ ƒŕáɱé ŵîðţĥ ~~~~~~]\"],\"node.wall.curtainWallPanel.layout\":[\"[Ļáýöûţ ~~]\"],\"node.wall.curtainWallPanel.lengthCustomPanelsAreOutsideThis\":[\"[\",[\"length\"],\" çûšţöɱ þáñéļš áŕé öûţšîðé ţĥîš ĝŕîð. Ţĥéý ŕéţûŕñ îƒ ţĥé ĝŕîð éẋþáñðš. ~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.lowRoughnessIsSmoothHighRoughness\":[\"[Ļöŵ ŕöûĝĥñéšš îš šɱööţĥ; ĥîĝĥ ŕöûĝĥñéšš ĝîṽéš á ɱáţţé šûŕƒáçé îñ ŕéñðéŕéð šĥáðîñĝ. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.maximumSpacing\":[\"[Ṁáẋîɱûɱ šþáçîñĝ ~~~~~]\"],\"node.wall.curtainWallPanel.moduleJointWidth\":[\"[Ṁöðûļé ĵöîñţ ŵîðţĥ ~~~~~]\"],\"node.wall.curtainWallPanel.none\":[\"[Ñöñé ~~]\"],\"node.wall.curtainWallPanel.opacity\":[\"[Öþáçîţý ~~~]\"],\"node.wall.curtainWallPanel.opaqueBand\":[\"[Öþáǫûé ƀáñð ~~~]\"],\"node.wall.curtainWallPanel.opaqueBandsReplaceAFullRow\":[\"[Öþáǫûé ƀáñðš ŕéþļáçé á ƒûļļ ŕöŵ ŵîţĥ šöļîð þáñéļš. Åþþļý ţĥéîŕ ƒîñîšĥ ŵîţĥ ţĥé þáîñţ ţööļ. ~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.panelCount\":[\"[Þáñéļ çöûñţ ~~~]\"],\"node.wall.curtainWallPanel.panelInfill\":[\"[Þáñéļ îñƒîļļ ~~~~]\"],\"node.wall.curtainWallPanel.panelThickness\":[\"[Þáñéļ ţĥîçķñéšš ~~~~~]\"],\"node.wall.curtainWallPanel.panels\":[\"[Þáñéļš ~~]\"],\"node.wall.curtainWallPanel.resetThisPanel\":[\"[Ŕéšéţ ţĥîš þáñéļ ~~~~~]\"],\"node.wall.curtainWallPanel.row2\":[\"[Ŕöŵ ~]\"],\"node.wall.curtainWallPanel.rowLayout\":[\"[Ŕöŵ ļáýöûţ ~~~]\"],\"node.wall.curtainWallPanel.separateFramedModulesWithJointsBetween\":[\"[Šéþáŕáţé ƒŕáɱéð ɱöðûļéš ŵîţĥ ĵöîñţš ƀéţŵééñ ûñîţš. ~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.solid\":[\"[Šöļîð ~~]\"],\"node.wall.curtainWallPanel.spacing\":[\"[Šþáçîñĝ ~~~]\"],\"node.wall.curtainWallPanel.start\":[\"[Šţáŕţ ~~]\"],\"node.wall.curtainWallPanel.stickBuilt\":[\"[Šţîçķ-ƀûîļţ ~~~]\"],\"node.wall.curtainWallPanel.structuralGlazing\":[\"[Šţŕûçţûŕáļ ĝļážîñĝ ~~~~~~]\"],\"node.wall.curtainWallPanel.surfaceRoughness\":[\"[Šûŕƒáçé ŕöûĝĥñéšš ~~~~~]\"],\"node.wall.curtainWallPanel.top\":[\"[Ţöþ ~]\"],\"node.wall.curtainWallPanel.topRow\":[\"[Ţöþ ŕöŵ ~~]\"],\"node.wall.curtainWallPanel.uncappedMembersSitBehindTheGlazing\":[\"[Ûñçáþþéð ɱéɱƀéŕš šîţ ƀéĥîñð ţĥé ĝļážîñĝ. ~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.unitized\":[\"[Ûñîţîžéð ~~~]\"],\"node.wall.curtainWallPanel.useGlassSettingsInstead\":[\"[Ûšé ĝļášš šéţţîñĝš îñšţéáð ~~~~~~~]\"],\"node.wall.curtainWallPanel.useTheDoorOrWindowTool\":[\"[Ûšé ţĥé Ðööŕ öŕ Ŵîñðöŵ ţööļ ţö áðð áñ öþéñîñĝ ţĥŕöûĝĥ ţĥé ŵáļļ. ~~~~~~~~~~~~~~~]\"],\"node.wall.curtainWallPanel.verticalCaps\":[\"[Ṽéŕţîçáļ çáþš ~~~~]\"],\"node.wall.curtainWallPanel.verticalFrameWidth\":[\"[Ṽéŕţîçáļ ƒŕáɱé ŵîðţĥ ~~~~~~]\"],\"node.wall.curtainWallPanel.wallSystem\":[\"[Ŵáļļ šýšţéɱ ~~~]\"],\"node.wall.description\":[\"[Å šţŕáîĝĥţ öŕ çûŕṽéð ŵáļļ šéĝɱéñţ. Ĥöšţš ðööŕš, ŵîñðöŵš, ļéáñ-ţö éẋţéñšîöñš, áñð ŵáļļ-ɱöûñţéð îţéɱš. ~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.label\":[\"[Ŵáļļ ~~]\"],\"node.wall.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.wall.panel.assembly\":[\"[Åššéɱƀļý ~~~]\"],\"node.wall.panel.auto\":[\"[Åûţö ~~]\"],\"node.wall.panel.both\":[\"[Ɓöţĥ ~~]\"],\"node.wall.panel.bottom\":[\"[Ɓöţţöɱ ~~]\"],\"node.wall.panel.brickVeneer\":[\"[Ɓŕîçķ ṽéñééŕ ~~~~]\"],\"node.wall.panel.chairRail\":[\"[Çĥáîŕ ŕáîļ ~~~]\"],\"node.wall.panel.cmu\":[\"[ÇṀÛ ~]\"],\"node.wall.panel.colonial\":[\"[Çöļöñîáļ ~~~]\"],\"node.wall.panel.cove\":[\"[Çöṽé ~~]\"],\"node.wall.panel.craft\":[\"[Çŕáƒţ ~~]\"],\"node.wall.panel.crownMolding\":[\"[Çŕöŵñ ɱöļðîñĝ ~~~~]\"],\"node.wall.panel.curtainWall\":[\"[Çûŕţáîñ ŵáļļ ~~~~]\"],\"node.wall.panel.curve\":[\"[Çûŕṽé ~~]\"],\"node.wall.panel.custom\":[\"[Çûšţöɱ ~~]\"],\"node.wall.panel.customHeight\":[\"[Çûšţöɱ ĥéîĝĥţ ~~~~]\"],\"node.wall.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.wall.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.wall.panel.drywall\":[\"[Ðŕýŵáļļ ~~~]\"],\"node.wall.panel.extendsDownwardToMeetTheTerrain\":[\"[Éẋţéñðš ðöŵñŵáŕð ţö ɱééţ ţĥé ţéŕŕáîñ. Ĥéîĝĥţ áñð ţöþ šţáý ûñçĥáñĝéð. ~~~~~~~~~~~~~~~~~]\"],\"node.wall.panel.exterior\":[\"[Éẋţéŕîöŕ ~~~]\"],\"node.wall.panel.fiberCement\":[\"[Ƒîƀéŕ çéɱéñţ ~~~~]\"],\"node.wall.panel.fillToTerrain\":[\"[Ƒîļļ ţö ţéŕŕáîñ ~~~~]\"],\"node.wall.panel.flat\":[\"[Ƒļáţ ~~]\"],\"node.wall.panel.followsLevel\":[\"[Ƒöļļöŵš ļéṽéļ ~~~~]\"],\"node.wall.panel.frameDepth\":[\"[Ƒŕáɱé ðéþţĥ ~~~]\"],\"node.wall.panel.framing\":[\"[Ƒŕáɱîñĝ ~~~]\"],\"node.wall.panel.gypsum\":[\"[Ĝýþšûɱ ~~]\"],\"node.wall.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.wall.panel.hideCode\":[\"[Ĥîðé çöðé ~~~]\"],\"node.wall.panel.icf\":[\"[ÎÇƑ ~]\"],\"node.wall.panel.interior\":[\"[Îñţéŕîöŕ ~~~]\"],\"node.wall.panel.lapSiding\":[\"[Ļáþ šîðîñĝ ~~~]\"],\"node.wall.panel.layerThicknessesFollowThe2021Irc\":[\"[Ļáýéŕ ţĥîçķñéššéš ƒöļļöŵ ţĥé 2021 ÎŔÇ áššéɱƀļý ðáţá. Ðŕáƒţîñĝ áîð, ñöţ éñĝîñééŕîñĝ — ṽéŕîƒý ŵîţĥ ţĥé áûţĥöŕîţý ĥáṽîñĝ ĵûŕîšðîçţîöñ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.panel.layered\":[\"[Ļáýéŕéð ~~~]\"],\"node.wall.panel.length\":[\"[Ļéñĝţĥ ~~]\"],\"node.wall.panel.loading\":[\"[Ļöáðîñĝ… ~~~]\"],\"node.wall.panel.modern\":[\"[Ṁöðéŕñ ~~]\"],\"node.wall.panel.none\":[\"[Ñöñé ~~]\"],\"node.wall.panel.noneSingleLayer\":[\"[Ñöñé (šîñĝļé ļáýéŕ) ~~~~~]\"],\"node.wall.panel.offset\":[\"[Öƒƒšéţ ~~]\"],\"node.wall.panel.ogee\":[\"[Öĝéé ~~]\"],\"node.wall.panel.osb\":[\"[ÖŠƁ ~]\"],\"node.wall.panel.partitionTheInteriorFinishIsApplied\":[\"[Þáŕţîţîöñ: ţĥé îñţéŕîöŕ ƒîñîšĥ îš áþþļîéð ţö ƀöţĥ ƒáçéš. ~~~~~~~~~~~~~~]\"],\"node.wall.panel.picture\":[\"[Þîçţûŕé ~~~]\"],\"node.wall.panel.plaster\":[\"[Þļášţéŕ ~~~]\"],\"node.wall.panel.plywood\":[\"[Þļýŵööð ~~~]\"],\"node.wall.panel.preset\":[\"[Þŕéšéţ ~~]\"],\"node.wall.panel.reference\":[\"[Ŕéƒéŕéñçé ~~~]\"],\"node.wall.panel.remove\":[\"[Ŕéɱöṽé ~~]\"],\"node.wall.panel.round\":[\"[Ŕöûñð ~~]\"],\"node.wall.panel.scriptedFinish\":[\"[Šçŕîþţéð ƒîñîšĥ ~~~~~]\"],\"node.wall.panel.sheathing\":[\"[Šĥéáţĥîñĝ ~~~]\"],\"node.wall.panel.shoe\":[\"[Šĥöé ~~]\"],\"node.wall.panel.sideA\":[\"[Šîðé Å ~~]\"],\"node.wall.panel.sideB\":[\"[Šîðé Ɓ ~~]\"],\"node.wall.panel.sideFace\":[\"[Šîðé \",[\"face\"],\" ~~]\"],\"node.wall.panel.skirting\":[\"[Šķîŕţîñĝ ~~~]\"],\"node.wall.panel.standard\":[\"[Šţáñðáŕð ~~~]\"],\"node.wall.panel.steelStuds\":[\"[Šţééļ šţûðš ~~~]\"],\"node.wall.panel.step\":[\"[Šţéþ ~~]\"],\"node.wall.panel.stoneVeneer\":[\"[Šţöñé ṽéñééŕ ~~~~]\"],\"node.wall.panel.stucco\":[\"[Šţûççö ~~]\"],\"node.wall.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.wall.panel.thicknessFromAssembly\":[\"[\",[\"thickness\"],\" · ƒŕöɱ áššéɱƀļý ~~~~]\"],\"node.wall.panel.top\":[\"[Ţöþ ~]\"],\"node.wall.panel.totalThickness\":[\"[Ţöţáļ ţĥîçķñéšš ~~~~~]\"],\"node.wall.panel.unverifiedPresetnote\":[\"[Ûñṽéŕîƒîéð: \",[\"presetNote\"],\" ~~~]\"],\"node.wall.panel.viewCode\":[\"[Ṽîéŵ çöðé ~~~]\"],\"node.wall.panel.wall\":[\"[Ŵáļļ ~~]\"],\"node.wall.panel.wallType\":[\"[Ŵáļļ ţýþé ~~~]\"],\"node.wall.panel.whichFaceIsOutsideIsUndetermined\":[\"[Ŵĥîçĥ ƒáçé îš öûţšîðé îš ûñðéţéŕɱîñéð (ñö ŕööɱ ðéţéçţéð öñ éîţĥéŕ šîðé) — ţĥé éẋţéŕîöŕ ļáýéŕš áŕé ðŕáŵñ öñ šîðé Ɓ. ~~~~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.panel.woodStuds\":[\"[Ŵööð šţûðš ~~~]\"],\"node.wall.reference.center\":[\"[Çéñţéŕ ~~]\"],\"node.wall.reference.inside\":[\"[Îñšîðé ƒáçé ~~~]\"],\"node.wall.reference.left\":[\"[Ļéƒţ ~~]\"],\"node.wall.reference.outside\":[\"[Öûţšîðé ƒáçé ~~~~]\"],\"node.wall.reference.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.wall.trim.hide\":[\"[\",[\"trim\",\"select\",{\"skirting\":[\"Ĥîðé šķîŕţîñĝ\"],\"crown\":[\"Ĥîðé çŕöŵñ ɱöļðîñĝ\"],\"other\":[\"Ĥîðé çĥáîŕ ŕáîļ\"]}],\" ~~~~~~~~~~~~~]\"],\"node.wall.trim.show\":[\"[\",[\"trim\",\"select\",{\"skirting\":[\"Šĥöŵ šķîŕţîñĝ\"],\"crown\":[\"Šĥöŵ çŕöŵñ ɱöļðîñĝ\"],\"other\":[\"Šĥöŵ çĥáîŕ ŕáîļ\"]}],\" ~~~~~~~~~~~~~]\"],\"node.window.description\":[\"[Å ŵîñðöŵ çûţ îñţö á ŵáļļ. Åñîɱáţéð öþéñ/çļöšé ƒöŕ öþéñîñĝ ŵîñðöŵš. ~~~~~~~~~~~~~~~~]\"],\"node.window.label\":[\"[Ŵîñðöŵ ~~]\"],\"node.window.operation.raise\":[\"[Ŕáîšé ~~]\"],\"node.window.operation.slats\":[\"[Šļáţš ~~]\"],\"node.window.operation.slide\":[\"[Šļîðé ~~]\"],\"node.window.operation.swing\":[\"[Šŵîñĝ ~~]\"],\"node.window.operation.tilt\":[\"[Ţîļţ ~~]\"],\"node.window.panel.actions\":[\"[Åçţîöñš ~~~]\"],\"node.window.panel.all\":[\"[Åļļ ~]\"],\"node.window.panel.arch\":[\"[Åŕçĥ ~~]\"],\"node.window.panel.archHeight\":[\"[Åŕçĥ Ĥéîĝĥţ ~~~]\"],\"node.window.panel.colWidths\":[\"[Çöļ Ŵîðţĥš ~~~]\"],\"node.window.panel.columns\":[\"[Çöļûɱñš ~~~]\"],\"node.window.panel.corner\":[\"[Çöŕñéŕ ~~]\"],\"node.window.panel.cornerPost\":[\"[Çöŕñéŕ þöšţ ~~~]\"],\"node.window.panel.cornerRadius\":[\"[Çöŕñéŕ Ŕáðîûš ~~~~]\"],\"node.window.panel.customThePanesMatchNoStyle\":[\"[Çûšţöɱ: ţĥé þáñéš ɱáţçĥ ñö šţýļé. ~~~~~~~~]\"],\"node.window.panel.delete\":[\"[Ðéļéţé ~~]\"],\"node.window.panel.depth\":[\"[Ðéþţĥ ~~]\"],\"node.window.panel.dimensions\":[\"[Ðîɱéñšîöñš ~~~]\"],\"node.window.panel.divider\":[\"[Ðîṽîðéŕ ~~~]\"],\"node.window.panel.down\":[\"[Ðöŵñ ~~]\"],\"node.window.panel.duplicate\":[\"[Ðûþļîçáţé ~~~]\"],\"node.window.panel.enableSill\":[\"[Éñáƀļé Šîļļ ~~~]\"],\"node.window.panel.flipSide\":[\"[Ƒļîþ Šîðé ~~~]\"],\"node.window.panel.frame\":[\"[Ƒŕáɱé ~~]\"],\"node.window.panel.french\":[\"[Ƒŕéñçĥ ~~]\"],\"node.window.panel.fusedGlass\":[\"[Ƒûšéð ĝļášš ~~~]\"],\"node.window.panel.grid\":[\"[Ĝŕîð ~~]\"],\"node.window.panel.height\":[\"[Ĥéîĝĥţ ~~]\"],\"node.window.panel.individual\":[\"[Îñðîṽîðûáļ ~~~]\"],\"node.window.panel.left\":[\"[Ļéƒţ ~~]\"],\"node.window.panel.move\":[\"[Ṁöṽé ~~]\"],\"node.window.panel.opening\":[\"[Öþéñîñĝ ~~~]\"],\"node.window.panel.openingShape\":[\"[Öþéñîñĝ Šĥáþé ~~~~]\"],\"node.window.panel.otherSide\":[\"[Öţĥéŕ šîðé ~~~]\"],\"node.window.panel.pos\":[\"[þöš ~]\"],\"node.window.panel.position\":[\"[Þöšîţîöñ ~~~]\"],\"node.window.panel.rect\":[\"[Ŕéçţ ~~]\"],\"node.window.panel.revealRadius\":[\"[Ŕéṽéáļ Ŕáðîûš ~~~~]\"],\"node.window.panel.right\":[\"[Ŕîĝĥţ ~~]\"],\"node.window.panel.rounded\":[\"[Ŕöûñðéð ~~~]\"],\"node.window.panel.rowHeights\":[\"[Ŕöŵ Ĥéîĝĥţš ~~~]\"],\"node.window.panel.rows\":[\"[Ŕöŵš ~~]\"],\"node.window.panel.sill\":[\"[Šîļļ ~~]\"],\"node.window.panel.single\":[\"[Šîñĝļé ~~]\"],\"node.window.panel.sizeIsLimitedToTheWall\":[\"[Šîžé îš ļîɱîţéð ţö ţĥé ŵáļļ, îñçļûðîñĝ çļéáŕáñçé ƒöŕ ţĥé öþéñîñĝ ƒŕáɱé. ~~~~~~~~~~~~~~~~~~]\"],\"node.window.panel.style\":[\"[Šţýļé ~~]\"],\"node.window.panel.thickness\":[\"[Ţĥîçķñéšš ~~~]\"],\"node.window.panel.thisSide\":[\"[Ţĥîš šîðé ~~~]\"],\"node.window.panel.topShape\":[\"[Ţöþ Šĥáþé ~~~]\"],\"node.window.panel.type\":[\"[Ţýþé ~~]\"],\"node.window.panel.unwrap\":[\"[Ûñŵŕáþ ~~]\"],\"node.window.panel.up\":[\"[Ûþ ~]\"],\"node.window.panel.width\":[\"[Ŵîðţĥ ~~]\"],\"node.window.panel.window\":[\"[Ŵîñðöŵ ~~]\"],\"node.window.panel.windowType\":[\"[Ŵîñðöŵ Ţýþé ~~~]\"],\"node.window.panel.wrapTheCorner\":[\"[Ŵŕáþ ţĥé çöŕñéŕ ~~~~]\"],\"node.window.panel.wrapsTheCornerWithNamed\":[\"[Ŵŕáþš ţĥé çöŕñéŕ ŵîţĥ \",[\"partner\"],\" ~~~~~~]\"],\"node.window.panel.wrapsTheCornerWithPartner\":[\"[Ŵŕáþš ţĥé çöŕñéŕ ŵîţĥ îţš þáŕţñéŕ ~~~~~~~~~]\"],\"node.window.style.casement\":[\"[Çášéɱéñţ ~~~]\"],\"node.window.style.doubleHung\":[\"[Ðöûƀļé-ĥûñĝ ~~~]\"],\"node.window.style.grid\":[\"[Ĝŕîð ~~]\"],\"node.window.style.horizontalBands\":[\"[Ĥöŕîžöñţáļ ƀáñðš ~~~~~]\"],\"node.window.style.picture\":[\"[Þîçţûŕé ~~~]\"],\"node.window.style.single\":[\"[Šîñĝļé ~~]\"],\"node.window.style.sliding\":[\"[Šļîðîñĝ ~~~]\"],\"node.window.style.tallGrid\":[\"[Ţáļļ ĝŕîð ~~~]\"],\"node.window.style.transom\":[\"[Ţŕáñšöɱ ~~~]\"],\"node.window.style.tripleHung\":[\"[Ţŕîþļé-ĥûñĝ ~~~]\"],\"node.window.style.wideGrid\":[\"[Ŵîðé ĝŕîð ~~~]\"],\"node.window.type.awning\":[\"[Åŵñîñĝ ~~]\"],\"node.window.type.bay\":[\"[Ɓáý ~]\"],\"node.window.type.bow\":[\"[Ɓöŵ ~]\"],\"node.window.type.casement\":[\"[Çášéɱéñţ ~~~]\"],\"node.window.type.doubleHung\":[\"[Ðöûƀļé Ĥûñĝ ~~~]\"],\"node.window.type.fixed\":[\"[Ƒîẋéð ~~]\"],\"node.window.type.hopper\":[\"[Ĥöþþéŕ ~~]\"],\"node.window.type.louvered\":[\"[Ļöûṽéŕéð ~~~]\"],\"node.window.type.singleHung\":[\"[Šîñĝļé Ĥûñĝ ~~~]\"],\"node.window.type.sliding\":[\"[Šļîðîñĝ ~~~]\"],\"node.zone.description\":[\"[Å þöļýĝöñáļ šîţé žöñé (ļáŵñ, ŵáţéŕ, þáṽîñĝ) ŵîţĥ á ŢŠĻ ĝŕáðîéñţ ɱáţéŕîáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.zone.label\":[\"[Žöñé ~~]\"],\"node.zone.quantitiesPanel.enclosedRoom\":[\"[Éñçļöšéð ŕööɱ ~~~~]\"],\"node.zone.quantitiesPanel.floorSurface\":[\"[Ƒļööŕ šûŕƒáçé ~~~~]\"],\"node.zone.quantitiesPanel.footprintOnly\":[\"[Ƒööţþŕîñţ öñļý ~~~~]\"],\"node.zone.quantitiesPanel.none\":[\"[Ñöñé ~~]\"],\"node.zone.quantitiesPanel.notProven\":[\"[Ñöţ þŕöṽéñ ~~~]\"],\"node.zone.quantitiesPanel.roomQuantities\":[\"[Ŕööɱ ǫûáñţîţîéš ~~~~~]\"],\"node.zone.quantitiesPanel.topViewWithZoneEdgeDimensions\":[\"[Ţöþ ṽîéŵ ŵîţĥ žöñé éðĝé ðîɱéñšîöñš ~~~~~~~~~]\"],\"node.zone.quantitiesPanel.unit\":[\"[Ûñîţ ~~]\"],\"node.zone.quantitiesPanel.volume\":[\"[Ṽöļûɱé ~~]\"],\"node.zone.quantitiesPanel.wallSurface\":[\"[Ŵáļļ šûŕƒáçé ~~~~]\"],\"node.zone.quantitiesPanel.zoneBoundaryUnavailable\":[\"[Žöñé ƀöûñðáŕý ûñáṽáîļáƀļé ~~~~~~~]\"],\"node.zone.quantitiesPanel.zoneQuantities\":[\"[Žöñé ǫûáñţîţîéš ~~~~~]\"],\"viewer.camera.orbitLeft\":[\"[Öŕƀîţ ļéƒţ ~~~]\"],\"viewer.camera.orbitRight\":[\"[Öŕƀîţ ŕîĝĥţ ~~~]\"],\"viewer.camera.topView\":[\"[Ţöþ ṽîéŵ ~~~]\"],\"viewer.common.off\":[\"[Öƒƒ ~]\"],\"viewer.common.on\":[\"[Öñ ~]\"],\"viewer.display.camera\":[\"[Çáɱéŕá ~~]\"],\"viewer.display.colored\":[\"[Çöļöŕéð ~~~]\"],\"viewer.display.colors\":[\"[Çöļöŕš ~~]\"],\"viewer.display.edges.off\":[\"[Öƒƒ ~]\"],\"viewer.display.edges.offDetail\":[\"[Ñö éðĝé ļîñéš ~~~~]\"],\"viewer.display.edges.soft\":[\"[Šöƒţ ~~]\"],\"viewer.display.edges.softDetail\":[\"[Ƒáîñţ öûţļîñé öƒ ɱáĵöŕ çŕéášéš ~~~~~~~~]\"],\"viewer.display.edges.strong\":[\"[Šţŕöñĝ ~~]\"],\"viewer.display.edges.strongDetail\":[\"[Çŕîšþ, öþáǫûé éðĝé ļîñéš ~~~~~~]\"],\"viewer.display.edges.title\":[\"[Éðĝéš ~~]\"],\"viewer.display.monochrome\":[\"[Ṁöñöçĥŕöɱé ~~~]\"],\"viewer.display.orthographic\":[\"[Öŕţĥöĝŕáþĥîç ~~~~]\"],\"viewer.display.perspective\":[\"[Þéŕšþéçţîṽé ~~~~]\"],\"viewer.display.render.rendered\":[\"[Ŕéñðéŕéð ~~~]\"],\"viewer.display.render.renderedDetail\":[\"[Ƒûļļ áɱƀîéñţ öççļûšîöñ ~~~~~~]\"],\"viewer.display.render.solid\":[\"[Šöļîð ~~]\"],\"viewer.display.render.solidDetail\":[\"[Ƒļáţ áñð ƒášţ — ñö áɱƀîéñţ öççļûšîöñ ~~~~~~~~~]\"],\"viewer.display.render.title\":[\"[Ŕéñðéŕ ~~]\"],\"viewer.display.shadows\":[\"[Šĥáðöŵš ~~~]\"],\"viewer.display.title\":[\"[Ðîšþļáý šéţţîñĝš ~~~~~]\"],\"viewer.floorplan.alignNorth\":[\"[Åļîĝñ ṽîéŵ ţö ñöŕţĥ ~~~~~]\"],\"viewer.floorplan.empty\":[\"[Ñö ƒļööŕ þļáñš áŕé áṽáîļáƀļé ƒöŕ ţĥîš šçéñé. ~~~~~~~~~~~]\"],\"viewer.floorplan.fit\":[\"[Ƒîţ ƒļööŕ þļáñ ~~~~]\"],\"viewer.floorplan.floor\":[\"[Ƒļööŕ ~~]\"],\"viewer.floorplan.floorPlan\":[\"[Ƒļööŕ þļáñ ~~~]\"],\"viewer.floorplan.viewLabel\":[\"[\",[\"floor\"],\" 2Ð ṽîéŵ ~~]\"],\"viewer.floorplan.zoomIn\":[\"[Žööɱ îñ ~~]\"],\"viewer.floorplan.zoomOut\":[\"[Žööɱ öûţ ~~~]\"],\"viewer.header.back\":[\"[Ɓáçķ ~~]\"],\"viewer.header.levels\":[\"[Ļéṽéļš ~~]\"],\"viewer.header.rooms\":[\"[Ŕööɱš ~~]\"],\"viewer.header.selection\":[\"[Šéļéçţîöñ ~~~]\"],\"viewer.header.units\":[\"[Ûñîţš ~~]\"],\"viewer.header.untitled\":[\"[Ûñţîţļéð ~~~]\"],\"viewer.header.zones\":[\"[Žöñéš ~~]\"],\"viewer.levels.exploded\":[\"[Éẋþļöðéð ~~~]\"],\"viewer.levels.label\":[\"[Ļéṽéļš: \",[\"mode\"],\" ~~]\"],\"viewer.levels.manual\":[\"[Ṁáñûáļ ~~]\"],\"viewer.levels.solo\":[\"[Šöļö ~~]\"],\"viewer.levels.stacked\":[\"[Šţáçķéð ~~~]\"],\"viewer.stage.layout\":[\"[Ṽîéŵéŕ ļáýöûţ ~~~~]\"],\"viewer.stage.split\":[\"[Šþļîţ ~~]\"],\"viewer.theme.blueprint\":[\"[Ɓļûéþŕîñţ ~~~]\"],\"viewer.theme.mediterranean\":[\"[Ṁéðîţéŕŕáñéáñ ~~~~]\"],\"viewer.theme.night\":[\"[Ñîĝĥţ ~~]\"],\"viewer.theme.overcast\":[\"[Öṽéŕçášţ ~~~]\"],\"viewer.theme.paper\":[\"[Þáþéŕ ~~]\"],\"viewer.theme.studio\":[\"[Šţûðîö ~~]\"],\"viewer.theme.sunset\":[\"[Šûñšéţ ~~]\"],\"viewer.theme.title\":[\"[Šçéñé ţĥéɱé ~~~]\"],\"viewer.theme.twilight\":[\"[Ţŵîļîĝĥţ ~~~]\"],\"viewer.theme.verdant\":[\"[Ṽéŕðáñţ ~~~]\"],\"viewer.visibility.guides\":[\"[Ĝûîðéš ~~]\"],\"viewer.visibility.scans\":[\"[Šçáñš ~~]\"],\"viewer.visibility.title\":[\"[Ṽîšîƀîļîţý ~~~]\"],\"viewer.walkthrough.label\":[\"[Ŵáļķţĥŕöûĝĥ: \",[\"state\"],\" ~~~~]\"],\"viewer.walls.cutaway\":[\"[Çûţáŵáý ~~~]\"],\"viewer.walls.fullHeight\":[\"[Ƒûļļ ĥéîĝĥţ ~~~]\"],\"viewer.walls.label\":[\"[Ŵáļļš: \",[\"mode\"],\" ~~]\"],\"viewer.walls.low\":[\"[Ļöŵ ~]\"]}")as Messages; \ No newline at end of file diff --git a/packages/editor/src/i18n/locales/en/messages.po b/packages/editor/src/i18n/locales/en/messages.po index d3c7a468c3..a3e1b5602d 100644 --- a/packages/editor/src/i18n/locales/en/messages.po +++ b/packages/editor/src/i18n/locales/en/messages.po @@ -1211,6 +1211,14 @@ msgstr "Rotate" msgid "editor.cameraHint.zoom" msgstr "Zoom" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +msgid "editor.controls.finishSwatch.ariaLabel" +msgstr "{label}: {finish}" + +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +msgid "editor.controls.finishSwatch.default" +msgstr "Default" + #: packages/editor/src/components/editor/index.tsx msgid "editor.dismiss" msgstr "Dismiss" @@ -4097,6 +4105,14 @@ msgstr "Unwrap the corner: both windows stay, each framed at the corner" msgid "editor.panels.panelManager.selection" msgstr "Selection" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +msgid "editor.panels.panelWrapper.back" +msgstr "Back" + +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +msgid "editor.panels.panelWrapper.close" +msgstr "Close" + #: packages/editor/src/components/ui/panels/panel-wrapper.tsx msgid "editor.panels.panelWrapper.closeTitle" msgstr "Close {title}" @@ -4121,6 +4137,10 @@ msgstr "Manage collections…" msgid "editor.panels.panelWrapper.openTitle" msgstr "Open {title}" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +msgid "editor.panels.panelWrapper.reset" +msgstr "Reset" + #: packages/editor/src/components/ui/panels/panel-wrapper.tsx msgid "editor.panels.panelWrapper.titleHitAnErrorAndWas" msgstr "“{title}” hit an error and was unloaded for this session." @@ -4585,6 +4605,10 @@ msgstr "None" msgid "editor.panels.roomPanel.notEnoughHeadroom" msgstr "Not enough headroom" +#: packages/editor/src/components/ui/panels/room-panel.tsx +msgid "editor.panels.roomPanel.openingCounts" +msgstr "{doors, plural, one {# door} other {# doors}} · {windows, plural, one {# window} other {# windows}}" + #: packages/editor/src/components/ui/panels/room-panel.tsx msgid "editor.panels.roomPanel.openRoomArea" msgstr "{area} · Close its walls to build its floor and ceiling." @@ -6266,6 +6290,46 @@ msgstr "wall" msgid "node.door.panel.width" msgstr "Width" +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.barn" +msgstr "Barn" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.craftsman" +msgstr "Craftsman" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.french" +msgstr "French" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.glass" +msgstr "Glass" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.halfLouvered" +msgstr "Half-louvered" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.modern" +msgstr "Modern" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.panel" +msgstr "Panel" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.paneledGlass" +msgstr "Paneled glass" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.shaker" +msgstr "Shaker" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.door.style.sixPanel" +msgstr "Six-panel" + #: packages/nodes/src/door/panel.tsx msgid "node.door.type.barn" msgstr "Barn" @@ -6442,6 +6506,34 @@ msgstr "Geometry preserved from an imported model when no native Pascal shape ex msgid "node.importedMesh.label" msgstr "Imported Mesh" +#: packages/nodes/src/item/authored-params.tsx +msgid "node.item.authoredParams.couldnTRebuildWithTheseValues" +msgstr "Couldn't rebuild with these values." + +#: packages/nodes/src/item/authored-params.tsx +msgid "node.item.authoredParams.parameters" +msgstr "Parameters" + +#: packages/nodes/src/item/authored-params.tsx +msgid "node.item.authoredParams.rebuilding" +msgstr "Rebuilding…" + +#: packages/nodes/src/item/authored-params.tsx +msgid "node.item.authoredParams.rebuildingInBlender" +msgstr "Rebuilding in Blender…" + +#: packages/nodes/src/item/authored-params.tsx +msgid "node.item.authoredParams.resetParam" +msgstr "Reset {param}" + +#: packages/nodes/src/item/authored-params.tsx +msgid "node.item.authoredParams.resetParameters" +msgstr "Reset parameters" + +#: packages/nodes/src/item/authored-params.tsx +msgid "node.item.authoredParams.resetToDefault" +msgstr "Reset to default" + #: packages/nodes/src/i18n/definition-messages.ts msgid "node.item.description" msgstr "A catalog-backed item (furniture, fixtures, decorations)." @@ -6641,6 +6733,74 @@ msgstr "Front slope" msgid "node.roof.glazing.face.slope" msgstr "Shed slope" +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.alignment" +msgstr "Alignment" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.center" +msgstr "Center" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.chooseALayoutToEditThe" +msgstr "Choose a layout to edit the grid." + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.empty" +msgstr "Empty" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.end" +msgstr "End" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.fixedSpacing" +msgstr "Fixed spacing" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.glass" +msgstr "Glass" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.layout" +msgstr "Layout" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.maximumSpacing" +msgstr "Maximum spacing" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.maxSpacing" +msgstr "Max spacing" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.mixed" +msgstr "Mixed" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.panelCount" +msgstr "Panel count" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.panels" +msgstr "Panels" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.solid" +msgstr "Solid" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.spacing" +msgstr "Spacing" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.start" +msgstr "Start" + +#: packages/nodes/src/roof/glazing-controls.tsx +msgid "node.roof.glazingControls.titleAlignment" +msgstr "{title} alignment" + #: packages/nodes/src/roof/glazing-panel.tsx msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" msgstr "Changes apply to all {length} roof segments." @@ -7187,6 +7347,14 @@ msgstr "Segment {number}" msgid "node.separator.label" msgstr "Separator" +#: packages/nodes/src/shared/item-interaction-actions.tsx +msgid "node.shared.itemInteractionActions.turnLightOff" +msgstr "Turn light off" + +#: packages/nodes/src/shared/item-interaction-actions.tsx +msgid "node.shared.itemInteractionActions.turnLightOn" +msgstr "Turn light on" + #: packages/nodes/src/shared/system-check-panel.tsx msgid "node.shared.systemCheckPanel.aboutTheseChecks" msgstr "About these checks" @@ -7631,10 +7799,122 @@ msgstr "Player or camera origin within a level. One per level." msgid "node.spawn.label" msgstr "Spawn Point" +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.body" +msgstr "Body" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.centerStringer" +msgstr "Center stringer" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.closedRisers" +msgstr "Closed risers" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.inherit" +msgstr "Inherit" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.nosing" +msgstr "Nosing" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.open" +msgstr "Open" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.original" +msgstr "Original" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.riserThickness" +msgstr "Riser thickness" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.sideStringers" +msgstr "Side stringers" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.solid" +msgstr "Solid" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.stringerDepth" +msgstr "Stringer depth" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.stringerWidth" +msgstr "Stringer width" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.treadFinish" +msgstr "Tread finish" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.treadThickness" +msgstr "Tread thickness" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.waist" +msgstr "Waist" + +#: packages/nodes/src/stair/construction-controls.tsx +msgid "node.stair.constructionControls.waistThickness" +msgstr "Waist thickness" + #: packages/nodes/src/i18n/definition-messages.ts msgid "node.stair.description" msgstr "A stair composed of one or more flights with configurable treads, risers, railings." +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.arrivalMismatch" +msgstr "The flight chain does not reach the declared destination." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.comfortTarget" +msgstr "Two risers plus going is outside the 0.60–0.65 m design range." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.goingTarget" +msgstr "Going is below the design target." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.headroomTarget" +msgstr "Overhead surfaces leave less than the target headroom." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.headroomUnresolved" +msgstr "Detailed headroom could not be evaluated: check riser counts and the surface query budget." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.invalidFlight" +msgstr "Flight dimensions and integer riser count must be positive." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.invalidRise" +msgstr "The destination must be above the stair base." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.landingOverlap" +msgstr "Landing depth exceeds a full circle at the walking line; the visible landing is limited to one circle." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.narrowWinderEnd" +msgstr "The narrow end of a winder tread is below 0.10 m; check the intended stair use." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.nonuniformRisers" +msgstr "Flight riser heights differ. Use uniform-riser repair only if this is a proposed design." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.raisedLanding" +msgstr "A landing has a stored rise; inspect its transition before repair." + +#: packages/nodes/src/stair/panel.tsx +msgid "node.stair.diagnostic.riserTarget" +msgstr "Riser height exceeds the design target." + #: packages/nodes/src/i18n/definition-messages.ts msgid "node.stair.label" msgstr "Stair" @@ -7983,6 +8263,78 @@ msgstr "Width" msgid "node.stair.panel.winder" msgstr "Winder" +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.both" +msgstr "Both" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.bottomExtension" +msgstr "Bottom sloped extension" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.continuous" +msgstr "Continuous" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.floor" +msgstr "Floor" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.handrailDiameter" +msgstr "Handrail diameter" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.handrailHeight" +msgstr "Handrail height" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.handrailInset" +msgstr "Handrail inset" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.left" +msgstr "Left" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.none" +msgstr "None" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.noReturn" +msgstr "No return" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.originalLayout" +msgstr "Original layout" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.postFacing" +msgstr "Post-facing" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.returnLength" +msgstr "Return length" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.right" +msgstr "Right" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.separateHandrail" +msgstr "Separate handrail" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.setTheLengthToReachThe" +msgstr "Set the length to reach the wall or post." + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.topExtension" +msgstr "Top horizontal extension" + +#: packages/nodes/src/stair/railing-controls.tsx +msgid "node.stair.railingControls.wallFacing" +msgstr "Wall-facing" + #: packages/nodes/src/i18n/definition-messages.ts msgid "node.stairSegment.description" msgstr "A single flight of a parent stair." @@ -8223,6 +8575,14 @@ msgstr "Report" msgid "node.unit.unitPanel.unit" msgstr "Unit" +#: packages/nodes/src/wall/actions.tsx +msgid "node.wall.actions.mergeWalls" +msgstr "Merge walls" + +#: packages/nodes/src/wall/actions.tsx +msgid "node.wall.actions.splitWall" +msgstr "Split wall" + #: packages/nodes/src/wall/curtain-wall-panel.tsx msgid "node.wall.curtain.cell" msgstr "Column {column}, row {row}: {type, select, glass {glass} solid {solid} other {empty}}" @@ -8803,6 +9163,26 @@ msgstr "Which face is outside is undetermined (no room detected on either side) msgid "node.wall.panel.woodStuds" msgstr "Wood studs" +#: packages/nodes/src/wall/panel.tsx +msgid "node.wall.reference.center" +msgstr "Center" + +#: packages/nodes/src/wall/panel.tsx +msgid "node.wall.reference.inside" +msgstr "Inside face" + +#: packages/nodes/src/wall/panel.tsx +msgid "node.wall.reference.left" +msgstr "Left" + +#: packages/nodes/src/wall/panel.tsx +msgid "node.wall.reference.outside" +msgstr "Outside face" + +#: packages/nodes/src/wall/panel.tsx +msgid "node.wall.reference.right" +msgstr "Right" + #: packages/nodes/src/wall/panel.tsx msgid "node.wall.trim.hide" msgstr "{trim, select, skirting {Hide skirting} crown {Hide crown molding} other {Hide chair rail}}" @@ -9051,6 +9431,90 @@ msgstr "Wraps the corner with its partner" msgid "node.window.panel.wrapTheCorner" msgstr "Wrap the corner" +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.casement" +msgstr "Casement" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.doubleHung" +msgstr "Double-hung" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.grid" +msgstr "Grid" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.horizontalBands" +msgstr "Horizontal bands" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.picture" +msgstr "Picture" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.single" +msgstr "Single" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.sliding" +msgstr "Sliding" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.tallGrid" +msgstr "Tall grid" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.transom" +msgstr "Transom" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.tripleHung" +msgstr "Triple-hung" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.style.wideGrid" +msgstr "Wide grid" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.awning" +msgstr "Awning" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.bay" +msgstr "Bay" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.bow" +msgstr "Bow" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.casement" +msgstr "Casement" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.doubleHung" +msgstr "Double Hung" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.fixed" +msgstr "Fixed" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.hopper" +msgstr "Hopper" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.louvered" +msgstr "Louvered" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.singleHung" +msgstr "Single Hung" + +#: packages/nodes/src/shared/opening-labels.ts +msgid "node.window.type.sliding" +msgstr "Sliding" + #: packages/nodes/src/i18n/definition-messages.ts msgid "node.zone.description" msgstr "A polygonal site zone (lawn, water, paving) with a TSL gradient material." diff --git a/packages/editor/src/i18n/locales/en/messages.ts b/packages/editor/src/i18n/locales/en/messages.ts index 24a83d9377..b1987e18f5 100644 --- a/packages/editor/src/i18n/locales/en/messages.ts +++ b/packages/editor/src/i18n/locales/en/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"app.appShell.pascalHome\":[\"Pascal home\"],\"app.buildTab.addGate\":[\"Add Gate\"],\"app.buildTab.addOpenPassage\":[\"Add Open Passage\"],\"app.buildTab.addToRooms\":[\"Add to rooms\"],\"app.buildTab.allBuildTools\":[\"← All build tools\"],\"app.buildTab.chooseGateOrOpenPassageThen\":[\"Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph.\"],\"app.buildTab.clickALinesetToLayThe\":[\"Click a lineset to lay the line beside it.\"],\"app.buildTab.doubleGate\":[\"Double gate\"],\"app.buildTab.featuresExtensions\":[\"Features & extensions\"],\"app.buildTab.fenceFeatures\":[\"Fence features\"],\"app.buildTab.followLineset\":[\"Follow lineset\"],\"app.buildTab.gate\":[\"Gate\"],\"app.buildTab.gateStyle\":[\"Gate style\"],\"app.buildTab.horizontalBoards\":[\"Horizontal boards\"],\"app.buildTab.hoverAFenceToPreviewClick\":[\"Hover a fence to preview. Click to place. Esc cancels. Leave room between openings.\"],\"app.buildTab.leaves\":[\"Leaves\"],\"app.buildTab.liquidLine\":[\"Liquid Line\"],\"app.buildTab.matchFenceStyle\":[\"Match fence style\"],\"app.buildTab.mep\":[\"MEP\"],\"app.buildTab.off\":[\"Off\"],\"app.buildTab.on\":[\"On\"],\"app.buildTab.openRails\":[\"Open rails\"],\"app.buildTab.opening\":[\"Opening\"],\"app.buildTab.openingWidthM\":[\"Opening width (m)\"],\"app.buildTab.outdoor\":[\"Outdoor\"],\"app.buildTab.picket\":[\"Picket\"],\"app.buildTab.roofType\":[\"Roof type\"],\"app.buildTab.roomsAlreadyCreateTheirFloorAnd\":[\"Rooms already create their floor and ceiling. Use these for platforms and one-off structure.\"],\"app.buildTab.searchBuildToolsAndKitchenItems\":[\"Search build tools and kitchen items\"],\"app.buildTab.searchToolsFridgeSink\":[\"Search tools, fridge, sink…\"],\"app.buildTab.selectACurvedWallToMatch\":[\"Select a curved wall to match its radius and arc.\"],\"app.buildTab.singleGate\":[\"Single gate\"],\"app.buildTab.slabCeilingColumn\":[\"Slab, ceiling, column…\"],\"app.buildTab.solidPrivacy\":[\"Solid privacy\"],\"app.buildTab.traceALineAlongsideAnExisting\":[\"Trace a line alongside an existing lineset (F).\"],\"app.buildTab.verticalSlats\":[\"Vertical slats\"],\"app.editorNavbar.allProjects\":[\"All projects\"],\"app.editorNavbar.preview\":[\"Preview\"],\"app.editorNavbar.projectName\":[\"Project name\"],\"app.editorNavbar.renameProject\":[\"Rename project\"],\"app.editorNavbar.share\":[\"Share\"],\"app.kitchenBrowser.addLabel\":[\"Add \",[\"label\"]],\"app.kitchenBrowser.addToKitchen\":[\"Add to kitchen\"],\"app.kitchenBrowser.chooseAnItemThenClickTo\":[\"Choose an item, then click to place it. Appliances include their cabinetry.\"],\"app.kitchenBrowser.findInThisProjectLength\":[\"Find in this project · \",[\"length\"]],\"app.kitchenBrowser.findName\":[\"Find \",[\"name\"]],\"app.kitchenBrowser.groupAdd\":[\"Kitchen · Add\"],\"app.kitchenBrowser.groupInThisProject\":[\"Kitchen · In this project\"],\"app.kitchenBrowser.kitchenCabinet\":[\"Kitchen cabinet\"],\"app.kitchenBrowser.noMatchingKitchenItemsPlacedYet\":[\"No matching kitchen items placed yet.\"],\"app.kitchenBrowser.selectAndShowInScene\":[\"Select and show in scene\"],\"app.lib.buildPalette.ceiling\":[\"Ceiling\"],\"app.lib.buildPalette.column\":[\"Column\"],\"app.lib.buildPalette.door\":[\"Door\"],\"app.lib.buildPalette.duct\":[\"Duct\"],\"app.lib.buildPalette.dwvPipe\":[\"DWV Pipe\"],\"app.lib.buildPalette.elevator\":[\"Elevator\"],\"app.lib.buildPalette.fence\":[\"Fence\"],\"app.lib.buildPalette.hvacUnit\":[\"HVAC Unit\"],\"app.lib.buildPalette.kitchen\":[\"Kitchen\"],\"app.lib.buildPalette.lineset\":[\"Lineset\"],\"app.lib.buildPalette.liquidLine\":[\"Liquid Line\"],\"app.lib.buildPalette.mep\":[\"MEP\"],\"app.lib.buildPalette.register\":[\"Register\"],\"app.lib.buildPalette.roof\":[\"Roof\"],\"app.lib.buildPalette.shelf\":[\"Shelf\"],\"app.lib.buildPalette.slab\":[\"Slab\"],\"app.lib.buildPalette.spawnPoint\":[\"Spawn point\"],\"app.lib.buildPalette.stairs\":[\"Stairs\"],\"app.lib.buildPalette.terrace\":[\"Terrace\"],\"app.lib.buildPalette.terrain\":[\"Terrain\"],\"app.lib.buildPalette.wall\":[\"Wall\"],\"app.lib.buildPalette.window\":[\"Window\"],\"app.lib.buildPanelModel.addFitting\":[\"Add Fitting\"],\"app.lib.buildPanelModel.addGate\":[\"Add Gate\"],\"app.lib.buildPanelModel.addOpenPassage\":[\"Add Open Passage\"],\"app.lib.buildPanelModel.addTrap\":[\"Add Trap\"],\"app.lib.buildPanelModel.build\":[\"Build\"],\"app.lib.buildPanelModel.createFrom\":[\"Create from\"],\"app.lib.buildPanelModel.drawTheRoofFootprintWithTwo\":[\"Draw the roof footprint with two corner clicks.\"],\"app.lib.buildPanelModel.duct\":[\"Duct\"],\"app.lib.buildPanelModel.dwvPipe\":[\"DWV Pipe\"],\"app.lib.buildPanelModel.featuresExtensions\":[\"Features & extensions\"],\"app.lib.buildPanelModel.fence\":[\"Fence\"],\"app.lib.buildPanelModel.followLineset\":[\"Follow lineset\"],\"app.lib.buildPanelModel.gatesOpenings\":[\"Gates & openings\"],\"app.lib.buildPanelModel.hoverARoomToPreviewIts\":[\"Hover a room to preview its boundary, then click to place.\"],\"app.lib.buildPanelModel.kitchen\":[\"Kitchen\"],\"app.lib.buildPanelModel.mep\":[\"MEP\"],\"app.lib.buildPanelModel.modularCabinet\":[\"Modular Cabinet\"],\"app.lib.buildPanelModel.off\":[\"Off\"],\"app.lib.buildPanelModel.on\":[\"On\"],\"app.lib.buildPanelModel.painting\":[\"Painting\"],\"app.lib.buildPanelModel.roof\":[\"Roof\"],\"app.lib.buildPanelModel.roofType\":[\"Roof type\"],\"app.lib.buildPanelModel.toolCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" tool\"],\"other\":[\"#\",\" tools\"]}]],\"app.lib.buildTabState.conical\":[\"Conical\"],\"app.lib.buildTabState.draw\":[\"Draw\"],\"app.lib.buildTabState.dutch\":[\"Dutch\"],\"app.lib.buildTabState.flat\":[\"Flat\"],\"app.lib.buildTabState.gable\":[\"Gable\"],\"app.lib.buildTabState.gambrel\":[\"Gambrel\"],\"app.lib.buildTabState.hip\":[\"Hip\"],\"app.lib.buildTabState.mansard\":[\"Mansard\"],\"app.lib.buildTabState.room\":[\"Room\"],\"app.lib.buildTabState.shed\":[\"Shed\"],\"app.lib.buildTabState.wall\":[\"Wall\"],\"app.sharePanel.anyoneWithTheLinkCanView\":[\"Anyone with the link can view this project. They cannot edit it.\"],\"app.sharePanel.copied\":[\"Copied\"],\"app.sharePanel.copy\":[\"Copy\"],\"app.sharePanel.couldNotReadTheSharingState\":[\"Could not read the sharing state.\"],\"app.sharePanel.couldNotTurnOffThePublic\":[\"Could not turn off the public link.\"],\"app.sharePanel.couldNotTurnOnThePublic\":[\"Could not turn on the public link.\"],\"app.sharePanel.embedCode\":[\"Embed code\"],\"app.sharePanel.embedLink\":[\"Embed link\"],\"app.sharePanel.hideControls\":[\"Hide controls\"],\"app.sharePanel.link\":[\"Link\"],\"app.sharePanel.onlyThe3dViewNoHeader\":[\"Only the 3D view, no header or toolbar.\"],\"app.sharePanel.open\":[\"Open\"],\"app.sharePanel.publicLink\":[\"Public link\"],\"app.sharePanel.shareProject\":[\"Share project\"],\"app.viewerToolbar.automaticDimensions\":[\"Automatic dimensions\"],\"app.viewerToolbar.camera\":[\"Camera\"],\"app.viewerToolbar.cleanPlanDimensionsAppearWithSelection\":[\"Clean plan; dimensions appear with selection\"],\"app.viewerToolbar.collapseSidebar\":[\"Collapse sidebar\"],\"app.viewerToolbar.crispOpaqueEdgeLines\":[\"Crisp, opaque edge lines\"],\"app.viewerToolbar.cutaway\":[\"Cutaway\"],\"app.viewerToolbar.default\":[\"Default\"],\"app.viewerToolbar.display\":[\"Display\"],\"app.viewerToolbar.displaySettings\":[\"Display settings\"],\"app.viewerToolbar.doorWindowMarks\":[\"Door/window marks\"],\"app.viewerToolbar.edges\":[\"Edges\"],\"app.viewerToolbar.enterVr\":[\"Enter VR\"],\"app.viewerToolbar.exitVr\":[\"Exit VR\"],\"app.viewerToolbar.expandSidebar\":[\"Expand sidebar\"],\"app.viewerToolbar.expert\":[\"Expert\"],\"app.viewerToolbar.exploded\":[\"Exploded\"],\"app.viewerToolbar.faceOfStud\":[\"Face of stud\"],\"app.viewerToolbar.faintOutlineOfMajorCreases\":[\"Faint outline of major creases\"],\"app.viewerToolbar.feetInches\":[\"Feet & inches\"],\"app.viewerToolbar.finishedFaces\":[\"Finished faces\"],\"app.viewerToolbar.flatAndFastNoAmbientOcclusion\":[\"Flat and fast — no ambient occlusion\"],\"app.viewerToolbar.floorPlanAnnotations\":[\"Floor plan annotations\"],\"app.viewerToolbar.floorPlanMode\":[\"Floor plan mode\"],\"app.viewerToolbar.fullAmbientOcclusion\":[\"Full ambient occlusion\"],\"app.viewerToolbar.fullDocumentationAndAnnotationControls\":[\"Full documentation and annotation controls\"],\"app.viewerToolbar.fullHeight\":[\"Full height\"],\"app.viewerToolbar.fullWallThickness\":[\"Full wall thickness\"],\"app.viewerToolbar.grid\":[\"Grid\"],\"app.viewerToolbar.levelsMode\":[\"Levels: \",[\"mode\"]],\"app.viewerToolbar.low\":[\"Low\"],\"app.viewerToolbar.magneticSnap\":[\"Magnetic snap\"],\"app.viewerToolbar.manual\":[\"Manual\"],\"app.viewerToolbar.manualDimensions\":[\"Manual dimensions\"],\"app.viewerToolbar.measurements\":[\"Measurements\"],\"app.viewerToolbar.meters\":[\"Meters\"],\"app.viewerToolbar.millimeters\":[\"Millimeters\"],\"app.viewerToolbar.n3dMeasurements\":[\"3D measurements\"],\"app.viewerToolbar.noEdgeLines\":[\"No edge lines\"],\"app.viewerToolbar.off\":[\"Off\"],\"app.viewerToolbar.on\":[\"On\"],\"app.viewerToolbar.orthographic\":[\"Orthographic\"],\"app.viewerToolbar.perspective\":[\"Perspective\"],\"app.viewerToolbar.preview\":[\"Preview\"],\"app.viewerToolbar.previewMode\":[\"Preview mode\"],\"app.viewerToolbar.render\":[\"Render\"],\"app.viewerToolbar.rendered\":[\"Rendered\"],\"app.viewerToolbar.roomLabels\":[\"Room labels\"],\"app.viewerToolbar.sceneTheme\":[\"Scene theme\"],\"app.viewerToolbar.shadows\":[\"Shadows\"],\"app.viewerToolbar.singleWallAxis\":[\"Single wall axis\"],\"app.viewerToolbar.soft\":[\"Soft\"],\"app.viewerToolbar.solid\":[\"Solid\"],\"app.viewerToolbar.solo\":[\"Solo\"],\"app.viewerToolbar.stack\":[\"Stack\"],\"app.viewerToolbar.stairAnnotations\":[\"Stair annotations\"],\"app.viewerToolbar.strong\":[\"Strong\"],\"app.viewerToolbar.structuralCoreFace\":[\"Structural core face\"],\"app.viewerToolbar.structuralGridsColumnCenters\":[\"Structural grids & column centers\"],\"app.viewerToolbar.translucent\":[\"Translucent\"],\"app.viewerToolbar.units\":[\"Units\"],\"app.viewerToolbar.walkthrough\":[\"Walkthrough\"],\"app.viewerToolbar.wallCenterline\":[\"Wall centerline\"],\"app.viewerToolbar.wallDimensions\":[\"Wall dimensions\"],\"app.viewerToolbar.wallsLabel\":[\"Walls: \",[\"label\"]],\"core.level.basement\":[\"Basement\"],\"core.level.basementNumber\":[\"Basement \",[\"number\"]],\"core.level.floorNumber\":[\"Floor \",[\"number\"]],\"core.level.groundFloor\":[\"Ground floor\"],\"editor.actionMenu.cameraActions.orbitLeft\":[\"Orbit Left\"],\"editor.actionMenu.cameraActions.orbitRight\":[\"Orbit Right\"],\"editor.actionMenu.cameraActions.topView\":[\"Top View\"],\"editor.actionMenu.controlModes.delete\":[\"Delete\"],\"editor.actionMenu.controlModes.select\":[\"Select\"],\"editor.actionMenu.followPascalPill.resumeFollowing\":[\"Resume following\"],\"editor.actionMenu.followPascalToggle.off\":[\"Follow Pascal: Off\"],\"editor.actionMenu.followPascalToggle.on\":[\"Follow Pascal: On\"],\"editor.actionMenu.furnishTools.appliance\":[\"Appliance\"],\"editor.actionMenu.furnishTools.bathroom\":[\"Bathroom\"],\"editor.actionMenu.furnishTools.furniture\":[\"Furniture\"],\"editor.actionMenu.furnishTools.kitchen\":[\"Kitchen\"],\"editor.actionMenu.furnishTools.outdoor\":[\"Outdoor\"],\"editor.actionMenu.measurementControl.angle\":[\"Angle\"],\"editor.actionMenu.measurementControl.angularDimension\":[\"Angular dimension\"],\"editor.actionMenu.measurementControl.arcLength\":[\"Arc length\"],\"editor.actionMenu.measurementControl.area\":[\"Area\"],\"editor.actionMenu.measurementControl.centerMark\":[\"Center mark\"],\"editor.actionMenu.measurementControl.chordDimension\":[\"Chord dimension\"],\"editor.actionMenu.measurementControl.continuousDimension\":[\"Continuous dimension\"],\"editor.actionMenu.measurementControl.coordinateDimensions\":[\"Coordinate dimensions\"],\"editor.actionMenu.measurementControl.diameterDimension\":[\"Diameter dimension\"],\"editor.actionMenu.measurementControl.distance\":[\"Distance\"],\"editor.actionMenu.measurementControl.floorPlan\":[\"Floor plan\"],\"editor.actionMenu.measurementControl.linearDimension\":[\"Linear dimension\"],\"editor.actionMenu.measurementControl.measureSelectedlabel\":[\"Measure: \",[\"selectedLabel\"]],\"editor.actionMenu.measurementControl.measurementOptions\":[\"Measurement options\"],\"editor.actionMenu.measurementControl.measurementType\":[\"Measurement type\"],\"editor.actionMenu.measurementControl.perimeter\":[\"Perimeter\"],\"editor.actionMenu.measurementControl.radiusDimension\":[\"Radius dimension\"],\"editor.actionMenu.measurementControl.smart\":[\"Smart\"],\"editor.actionMenu.measurementControl.volume\":[\"Volume\"],\"editor.actionMenu.pointAskButton.pointAndAsk\":[\"Point and ask\"],\"editor.actionMenu.pointAskButton.pointAndAskC\":[\"Point and ask (C)\"],\"editor.actionMenu.pointAskButton.pointAndAskWorksInThe\":[\"Point and ask works in the 3D view\"],\"editor.actionMenu.structureTools.ceiling\":[\"Ceiling\"],\"editor.actionMenu.structureTools.column\":[\"Column\"],\"editor.actionMenu.structureTools.door\":[\"Door\"],\"editor.actionMenu.structureTools.duct\":[\"Duct\"],\"editor.actionMenu.structureTools.ductFitting\":[\"Duct Fitting\"],\"editor.actionMenu.structureTools.dwvPipe\":[\"DWV Pipe\"],\"editor.actionMenu.structureTools.elevator\":[\"Elevator\"],\"editor.actionMenu.structureTools.fence\":[\"Fence\"],\"editor.actionMenu.structureTools.gableRoof\":[\"Gable Roof\"],\"editor.actionMenu.structureTools.hvacUnit\":[\"HVAC Unit\"],\"editor.actionMenu.structureTools.lineset\":[\"Lineset\"],\"editor.actionMenu.structureTools.liquidLine\":[\"Liquid Line\"],\"editor.actionMenu.structureTools.pipeFitting\":[\"Pipe Fitting\"],\"editor.actionMenu.structureTools.register\":[\"Register\"],\"editor.actionMenu.structureTools.shelf\":[\"Shelf\"],\"editor.actionMenu.structureTools.slab\":[\"Slab\"],\"editor.actionMenu.structureTools.spawnPoint\":[\"Spawn Point\"],\"editor.actionMenu.structureTools.stairs\":[\"Stairs\"],\"editor.actionMenu.structureTools.trap\":[\"Trap\"],\"editor.actionMenu.structureTools.wall\":[\"Wall\"],\"editor.actionMenu.structureTools.window\":[\"Window\"],\"editor.actionMenu.structureTools.zone\":[\"Zone\"],\"editor.actionMenu.viewToggles.deleteGuideImage\":[\"Delete guide image\"],\"editor.actionMenu.viewToggles.deleteScan\":[\"Delete scan\"],\"editor.actionMenu.viewToggles.guideCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" guide image on this level\"],\"other\":[\"#\",\" guide images on this level\"]}]],\"editor.actionMenu.viewToggles.guideImageNumber\":[\"Guide image \",[\"number\"]],\"editor.actionMenu.viewToggles.guideImageSettings\":[\"Guide image settings\"],\"editor.actionMenu.viewToggles.guideImages\":[\"Guide images\"],\"editor.actionMenu.viewToggles.guides\":[\"Guides\"],\"editor.actionMenu.viewToggles.guidesHidden\":[\"Guides: Hidden\"],\"editor.actionMenu.viewToggles.guidesVisible\":[\"Guides: Visible\"],\"editor.actionMenu.viewToggles.hideGuideImages\":[\"Hide guide images\"],\"editor.actionMenu.viewToggles.hideReferenceFloor\":[\"Hide reference floor\"],\"editor.actionMenu.viewToggles.hideScans\":[\"Hide scans\"],\"editor.actionMenu.viewToggles.levelsBelow\":[[\"count\"],\" below\"],\"editor.actionMenu.viewToggles.noLowerFloorAvailable\":[\"No lower floor available.\"],\"editor.actionMenu.viewToggles.opacity\":[\"Opacity\"],\"editor.actionMenu.viewToggles.referenceFloor\":[\"Reference floor\"],\"editor.actionMenu.viewToggles.referenceFloorSelectedlevelname\":[\"Reference floor: \",[\"selectedLevelName\"]],\"editor.actionMenu.viewToggles.referenceFloorSettings\":[\"Reference floor settings\"],\"editor.actionMenu.viewToggles.referenceSettings\":[\"Reference settings\"],\"editor.actionMenu.viewToggles.references\":[\"References\"],\"editor.actionMenu.viewToggles.referencesEmpty\":[\"Upload GLB meshes as scan references or blueprint images as guide references.\"],\"editor.actionMenu.viewToggles.referencesHidden\":[\"References: Hidden\"],\"editor.actionMenu.viewToggles.referencesVisible\":[\"References: Visible\"],\"editor.actionMenu.viewToggles.riserDiagram\":[\"Riser diagram\"],\"editor.actionMenu.viewToggles.scanCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" scan on this level\"],\"other\":[\"#\",\" scans on this level\"]}]],\"editor.actionMenu.viewToggles.scanNumber\":[\"Scan \",[\"number\"]],\"editor.actionMenu.viewToggles.scanSettings\":[\"Scan settings\"],\"editor.actionMenu.viewToggles.scans\":[\"Scans\"],\"editor.actionMenu.viewToggles.scansHidden\":[\"Scans: Hidden\"],\"editor.actionMenu.viewToggles.scansVisible\":[\"Scans: Visible\"],\"editor.actionMenu.viewToggles.showGuideImages\":[\"Show guide images\"],\"editor.actionMenu.viewToggles.showReferenceFloor\":[\"Show reference floor\"],\"editor.actionMenu.viewToggles.showScans\":[\"Show scans\"],\"editor.actionMenu.viewToggles.uploadScanOrGuideImage\":[\"Upload scan or guide image\"],\"editor.backToHome\":[\"Back to home\"],\"editor.buildPanel.advanced\":[\"Advanced\"],\"editor.buildPanel.rooms.hint\":[\"walls · floor · ceiling\"],\"editor.buildPanel.rooms.idle\":[\"Pick a shape to start. Every room brings its own walls, floor and ceiling.\"],\"editor.buildPanel.rooms.polygon.caption\":[[\"lead\"],\" then the first one again to close. For L-shapes and angled rooms.\"],\"editor.buildPanel.rooms.polygon.label\":[\"Polygon\"],\"editor.buildPanel.rooms.polygon.lead\":[\"Click each corner,\"],\"editor.buildPanel.rooms.polygon.title\":[\"Polygon room\"],\"editor.buildPanel.rooms.rectangle.caption\":[[\"lead\"],\" on the grid. Walls, floor and ceiling are created together.\"],\"editor.buildPanel.rooms.rectangle.label\":[\"Rectangle\"],\"editor.buildPanel.rooms.rectangle.lead\":[\"Click two corners\"],\"editor.buildPanel.rooms.rectangle.title\":[\"Rectangle room\"],\"editor.buildPanel.rooms.title\":[\"Rooms\"],\"editor.buildPanel.rooms.walls.caption\":[[\"lead\"],\" Close a loop and it becomes a room; leave it open for partitions.\"],\"editor.buildPanel.rooms.walls.label\":[\"Walls\"],\"editor.buildPanel.rooms.walls.lead\":[\"Draw one wall at a time.\"],\"editor.buildPanel.rooms.walls.title\":[\"Walls\"],\"editor.cameraControlsHint\":[\"Camera controls hint\"],\"editor.cameraHint.pan\":[\"Pan\"],\"editor.cameraHint.rotate\":[\"Rotate\"],\"editor.cameraHint.zoom\":[\"Zoom\"],\"editor.dismiss\":[\"Dismiss\"],\"editor.dismissCameraControlsHint\":[\"Dismiss camera controls hint\"],\"editor.expandSidebar\":[\"Expand sidebar\"],\"editor.floatingActionMenu.axis\":[\"Axis\"],\"editor.floatingActionMenu.axis2\":[\"⌥ axis\"],\"editor.floatingActionMenu.noEquipment\":[\"⚠ no equipment\"],\"editor.floatingActionMenu.rTRotate\":[\"R/T rotate\"],\"editor.floatingActionMenu.registerCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" register\"],\"other\":[\"#\",\" registers\"]}]],\"editor.floatingActionMenu.runCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" run\"],\"other\":[\"#\",\" runs\"]}]],\"editor.floatingActionMenu.system\":[\"System\"],\"editor.floorFootprint.area\":[\"Floor area\"],\"editor.floorFootprint.room\":[[\"room\"],\" floor\"],\"editor.floorFootprint.shared\":[\"Shared floor\"],\"editor.helpers.buildingHelper.cancel\":[\"Cancel\"],\"editor.helpers.buildingHelper.placeBuilding\":[\"Place building\"],\"editor.helpers.buildingHelper.rotate\":[\"Rotate\"],\"editor.helpers.contextualHelperPanel.cancelPlacement\":[\"Cancel placement\"],\"editor.helpers.contextualHelperPanel.continuationClickOrPressCTo\":[\"Continuation — click or press C to cycle\"],\"editor.helpers.contextualHelperPanel.continuationLabel\":[\"Continuation: \",[\"label\"]],\"editor.helpers.contextualHelperPanel.dragToDrawFence\":[\"Drag to draw fence\"],\"editor.helpers.contextualHelperPanel.eraseScope\":[\"Erase: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.eraseScopeClickOrPressShift\":[\"Erase scope — click or press Shift to cycle\"],\"editor.helpers.contextualHelperPanel.eraseScopeLabel\":[\"Erase scope: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT\":[\"Fence type — click or press T to switch between straight, curved and freehand\"],\"editor.helpers.contextualHelperPanel.fewerShortcuts\":[\"Fewer shortcuts\"],\"editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick\":[\"Finish curve (or double-click)\"],\"editor.helpers.contextualHelperPanel.gridLength\":[\"Grid: \",[\"length\"]],\"editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl\":[\"Grid step — click or tap Ctrl to cycle\"],\"editor.helpers.contextualHelperPanel.gridStepLength\":[\"Grid step: \",[\"length\"]],\"editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase\":[\"Hover a painted surface to erase\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPaint\":[\"Hover a surface to paint\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts\":[\"Hover a surface to pick its material\"],\"editor.helpers.contextualHelperPanel.moreShortcuts\":[\"More shortcuts\"],\"editor.helpers.contextualHelperPanel.paintScope\":[\"Paint: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.paintScopeClickOrPressShift\":[\"Paint scope — click or press Shift to cycle\"],\"editor.helpers.contextualHelperPanel.paintScopeLabel\":[\"Paint scope: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.pickScope\":[\"Pick: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.placeGateOnAFence\":[\"Place gate on a fence\"],\"editor.helpers.contextualHelperPanel.placePassageOnAFence\":[\"Place passage on a fence\"],\"editor.helpers.contextualHelperPanel.selectAMaterialToPaint\":[\"Select a material to paint\"],\"editor.helpers.contextualHelperPanel.snappingAngles\":[\"Snapping: Angles\"],\"editor.helpers.contextualHelperPanel.snappingGrid\":[\"Snapping: Grid\"],\"editor.helpers.contextualHelperPanel.snappingLines\":[\"Snapping: Lines\"],\"editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift\":[\"Snapping mode — click or press Shift to cycle\"],\"editor.helpers.contextualHelperPanel.snappingOff\":[\"Snapping: Off\"],\"editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved\":[\"Straight continuation is unavailable for curved or freehand fences\"],\"editor.helpers.contextualHelperPanel.straightContinuous\":[\"Straight: Continuous\"],\"editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress\":[\"Straight fence continuation — click or press C to toggle\"],\"editor.helpers.contextualHelperPanel.straightSingle\":[\"Straight: Single\"],\"editor.helpers.helperManager.addPoint\":[\"Add point\"],\"editor.helpers.helperManager.addPointClickTheFirstTo\":[\"Add point · click the first to close\"],\"editor.helpers.helperManager.brushSize\":[\"Brush size\"],\"editor.helpers.helperManager.cancel\":[\"Cancel\"],\"editor.helpers.helperManager.cancelPicking\":[\"Cancel picking\"],\"editor.helpers.helperManager.cancelStroke\":[\"Cancel stroke\"],\"editor.helpers.helperManager.done\":[\"Done\"],\"editor.helpers.helperManager.drawTheMezzanine\":[\"Draw the mezzanine\"],\"editor.helpers.helperManager.drawTheOpening\":[\"Draw the opening\"],\"editor.helpers.helperManager.drawTheTerrace\":[\"Draw the terrace\"],\"editor.helpers.helperManager.exitSmartMeasure\":[\"Exit smart measure\"],\"editor.helpers.helperManager.finish\":[\"Finish\"],\"editor.helpers.helperManager.finishAtTheEdge\":[\"Finish at the edge\"],\"editor.helpers.helperManager.freeMove\":[\"Free move\"],\"editor.helpers.helperManager.freeMoveSlideDoorsAndWindows\":[\"Free move · slide doors and windows\"],\"editor.helpers.helperManager.holdToPickAMaterial\":[\"Hold to pick a material\"],\"editor.helpers.helperManager.inspectSurfaceDimensions\":[\"Inspect surface dimensions\"],\"editor.helpers.helperManager.paintWithThisMaterial\":[\"Paint with this material\"],\"editor.helpers.helperManager.pickTargetHeight\":[\"Pick target height\"],\"editor.helpers.helperManager.pinMeasurementLens\":[\"Pin measurement lens\"],\"editor.helpers.helperManager.place\":[\"Place\"],\"editor.helpers.helperManager.placeInsideTheRoom\":[\"Place inside the room\"],\"editor.helpers.helperManager.pressAnywhereDragToTheOpposite\":[\"Press anywhere, drag to the opposite corner\"],\"editor.helpers.helperManager.raiseOrLower\":[\"Raise or lower\"],\"editor.helpers.helperManager.removeAPaintedPartOrReset\":[\"Remove a painted part, or reset a surface\"],\"editor.helpers.helperManager.removeLastPoint\":[\"Remove last point\"],\"editor.helpers.helperManager.resize\":[\"Resize\"],\"editor.helpers.helperManager.rotate45\":[\"Rotate ±45°\"],\"editor.helpers.helperManager.rotateTheSelection45\":[\"Rotate the selection ±45°\"],\"editor.helpers.helperManager.setOneCornerThenTheOpposite\":[\"Set one corner, then the opposite\"],\"editor.helpers.itemHelper.cancel\":[\"Cancel\"],\"editor.helpers.itemHelper.forcePlace\":[\"Force place\"],\"editor.helpers.itemHelper.place\":[\"Place\"],\"editor.helpers.itemHelper.rotate\":[\"Rotate\"],\"editor.helpers.registeredToolHelper.guidedConstraintsBypassed\":[\"Guided constraints bypassed\"],\"editor.inspector.field.angle.g10zaw\":[\"Angle\"],\"editor.inspector.field.armLengthM.1jclqgw\":[\"Arm length m\"],\"editor.inspector.field.attachmentSide.6n9s5v\":[\"Attachment side\"],\"editor.inspector.field.autoHangers.10554ka\":[\"Auto hangers\"],\"editor.inspector.field.autoMiterCorners.zxr5lt\":[\"Auto miter corners\"],\"editor.inspector.field.autoSpan.1gas9r6\":[\"Auto span\"],\"editor.inspector.field.backRatio.1ughd99\":[\"Back ratio\"],\"editor.inspector.field.baseHeight.1hs4zdf\":[\"Base height\"],\"editor.inspector.field.baseStyle.24vty5\":[\"Base style\"],\"editor.inspector.field.beamHeight.1kq0oh1\":[\"Beam height\"],\"editor.inspector.field.beamWidth.1q1mzbe\":[\"Beam width\"],\"editor.inspector.field.bodyShape.arvkuw\":[\"Body shape\"],\"editor.inspector.field.bracketStyle.1vvoptm\":[\"Bracket style\"],\"editor.inspector.field.branchAngle.v56zme\":[\"Branch angle\"],\"editor.inspector.field.cabHeight.1yn34mk\":[\"Cab height\"],\"editor.inspector.field.canopyForm.1czzggp\":[\"Canopy form\"],\"editor.inspector.field.cap.s0thej\":[\"Cap\"],\"editor.inspector.field.capOverhang.kxxz9j\":[\"Cap overhang\"],\"editor.inspector.field.capShape.17mbxhu\":[\"Cap shape\"],\"editor.inspector.field.capThickness.u835q9\":[\"Cap thickness\"],\"editor.inspector.field.carcassHeight.1aks0zy\":[\"Carcass height\"],\"editor.inspector.field.cleanoutStyle.127zz6z\":[\"Cleanout style\"],\"editor.inspector.field.collarDiameter.1d5k28r\":[\"Collar diameter\"],\"editor.inspector.field.collarHeight.1dqwsrf\":[\"Collar height\"],\"editor.inspector.field.collarShape.1gacv11\":[\"Collar shape\"],\"editor.inspector.field.collarWidth.qvc9ik\":[\"Collar width\"],\"editor.inspector.field.columns.1sy73ks\":[\"Columns\"],\"editor.inspector.field.conicalFullCircle.1pgkpz5\":[\"Conical full circle\"],\"editor.inspector.field.connectionMode.1nty478\":[\"Connection mode\"],\"editor.inspector.field.connectionOffset.2m70s8\":[\"Connection offset\"],\"editor.inspector.field.cornerBevel.16iniho\":[\"Corner bevel\"],\"editor.inspector.field.coveringType.95yd3k\":[\"Covering type\"],\"editor.inspector.field.cricketHeight.pok31n\":[\"Cricket height\"],\"editor.inspector.field.cricketLength.i2aht8\":[\"Cricket length\"],\"editor.inspector.field.cricketSide.1xnwil7\":[\"Cricket side\"],\"editor.inspector.field.cricketStyle.10j0lat\":[\"Cricket style\"],\"editor.inspector.field.curb.5xi2ol\":[\"Curb\"],\"editor.inspector.field.curbHeight.1yn97sg\":[\"Curb height\"],\"editor.inspector.field.curveOffset.l4xhvr\":[\"Curve offset\"],\"editor.inspector.field.damperAngle.h5fxn7\":[\"Damper angle\"],\"editor.inspector.field.deckThickness.4jmqze\":[\"Deck thickness\"],\"editor.inspector.field.defaultLevelId.xmrjzp\":[\"Default level id\"],\"editor.inspector.field.depth.1lu11u2\":[\"Depth\"],\"editor.inspector.field.diameter.s3robe\":[\"Diameter\"],\"editor.inspector.field.diameter2.pm6cl4\":[\"Diameter2\"],\"editor.inspector.field.doorDurationMs.13nx909\":[\"Door duration ms\"],\"editor.inspector.field.doorHeight.92r9k4\":[\"Door height\"],\"editor.inspector.field.doorPanelStyle.2qog4q\":[\"Door panel style\"],\"editor.inspector.field.doorStyle.gerpos\":[\"Door style\"],\"editor.inspector.field.doorWidth.sy732l\":[\"Door width\"],\"editor.inspector.field.downspoutEnabled.1gn00nv\":[\"Downspout enabled\"],\"editor.inspector.field.downspoutPosition.fxcsop\":[\"Downspout position\"],\"editor.inspector.field.ductMaterial.i8eonq\":[\"Duct material\"],\"editor.inspector.field.dutchGabletRake.6paydp\":[\"Dutch gablet rake\"],\"editor.inspector.field.dutchHipHeightRatio.1etnwgg\":[\"Dutch hip height ratio\"],\"editor.inspector.field.dutchHipWidthRatio.1dopfvb\":[\"Dutch hip width ratio\"],\"editor.inspector.field.dutchTopRakeThickness.1w9khxt\":[\"Dutch top rake thickness\"],\"editor.inspector.field.dutchWaistLengthRatio.agtoxw\":[\"Dutch waist length ratio\"],\"editor.inspector.field.dwellMs.1lkk0o5\":[\"Dwell ms\"],\"editor.inspector.field.edgeInset.1obeimx\":[\"Edge inset\"],\"editor.inspector.field.elevation.4jbp44\":[\"Elevation\"],\"editor.inspector.field.endCapLeft.19jel4v\":[\"End cap left\"],\"editor.inspector.field.endCapRight.lhse9c\":[\"End cap right\"],\"editor.inspector.field.endCaps.4fsb5b\":[\"End caps\"],\"editor.inspector.field.endPost.1guwsk0\":[\"End post\"],\"editor.inspector.field.equipmentType.1mc2ywt\":[\"Equipment type\"],\"editor.inspector.field.fillToFloor.1oppnkf\":[\"Fill to floor\"],\"editor.inspector.field.finial.1ertf4s\":[\"Finial\"],\"editor.inspector.field.fittingType.18mz17s\":[\"Fitting type\"],\"editor.inspector.field.flashingHeight.3e8nn6\":[\"Flashing height\"],\"editor.inspector.field.flashingProjection.hhf0fk\":[\"Flashing projection\"],\"editor.inspector.field.flueCount.j3t2ci\":[\"Flue count\"],\"editor.inspector.field.flueDiameter.cjhubg\":[\"Flue diameter\"],\"editor.inspector.field.flueHeight.1dhc4y4\":[\"Flue height\"],\"editor.inspector.field.flueShape.1ealiy4\":[\"Flue shape\"],\"editor.inspector.field.flueSpacing.exhzco\":[\"Flue spacing\"],\"editor.inspector.field.footingStyle.e3btg6\":[\"Footing style\"],\"editor.inspector.field.frameDepth.1934a5n\":[\"Frame depth\"],\"editor.inspector.field.frameThickness.1agxzd8\":[\"Frame thickness\"],\"editor.inspector.field.framingStrategy.3jx9qe\":[\"Framing strategy\"],\"editor.inspector.field.fromLevelId.15ieejs\":[\"From level id\"],\"editor.inspector.field.gableOverhang.2z0obw\":[\"Gable overhang\"],\"editor.inspector.field.gambrelLowerHeightRatio.wqq7lg\":[\"Gambrel lower height ratio\"],\"editor.inspector.field.gambrelLowerWidthRatio.uvyb1v\":[\"Gambrel lower width ratio\"],\"editor.inspector.field.gapX.wjxa7\":[\"Gap x\"],\"editor.inspector.field.gapY.mkbl8\":[\"Gap y\"],\"editor.inspector.field.glassThickness.s97b0x\":[\"Glass thickness\"],\"editor.inspector.field.groundClearance.4os7f0\":[\"Ground clearance\"],\"editor.inspector.field.guardInfill.16heiig\":[\"Guard infill\"],\"editor.inspector.field.gutterEnabled.1oxiltf\":[\"Gutter enabled\"],\"editor.inspector.field.gutterProfile.1ngzqi3\":[\"Gutter profile\"],\"editor.inspector.field.gutterSize.jgavtz\":[\"Gutter size\"],\"editor.inspector.field.hangerMaxReach.1869epv\":[\"Hanger max reach\"],\"editor.inspector.field.hangerSpacing.i2b5d7\":[\"Hanger spacing\"],\"editor.inspector.field.hangerStyle.l7v7gb\":[\"Hanger style\"],\"editor.inspector.field.height.7puwki\":[\"Height\"],\"editor.inspector.field.height2.7b3jlc\":[\"Height2\"],\"editor.inspector.field.heightAboveRidge.1k99brk\":[\"Height above ridge\"],\"editor.inspector.field.highEdgeHeight.1s7v90t\":[\"High edge height\"],\"editor.inspector.field.highOverhang.67w55d\":[\"High overhang\"],\"editor.inspector.field.highSideMode.1rc1r5j\":[\"High side mode\"],\"editor.inspector.field.hoodOverhang.1q1hcin\":[\"Hood overhang\"],\"editor.inspector.field.infillPlacement.11dxzpo\":[\"Infill placement\"],\"editor.inspector.field.inletShape.ypayh2\":[\"Inlet shape\"],\"editor.inspector.field.innerRadius.1fkmg0j\":[\"Inner radius\"],\"editor.inspector.field.insulated.iwziey\":[\"Insulated\"],\"editor.inspector.field.insulationR.663ufx\":[\"Insulation r\"],\"editor.inspector.field.lanternHeight.oz7zpm\":[\"Lantern height\"],\"editor.inspector.field.lanternTopScale.hkmpp2\":[\"Lantern top scale\"],\"editor.inspector.field.ledgerDepth.7av8k9\":[\"Ledger depth\"],\"editor.inspector.field.ledgerHeight.zo2oif\":[\"Ledger height\"],\"editor.inspector.field.ledgerVerticalOffset.1athbgt\":[\"Ledger vertical offset\"],\"editor.inspector.field.leftEndCondition.1syqlaw\":[\"Left end condition\"],\"editor.inspector.field.leftOverhang.1ydl9ma\":[\"Left overhang\"],\"editor.inspector.field.length.1kpdcfp\":[\"Length\"],\"editor.inspector.field.liquidDiameter.w3pk7c\":[\"Liquid diameter\"],\"editor.inspector.field.louverCount.lhw2gr\":[\"Louver count\"],\"editor.inspector.field.lowBeamInset.1g7yw5l\":[\"Low beam inset\"],\"editor.inspector.field.lowEdgeHeight.47mae1\":[\"Low edge height\"],\"editor.inspector.field.lowOverhang.t4nz1h\":[\"Low overhang\"],\"editor.inspector.field.mansardSteepHeightRatio.1hbb8rq\":[\"Mansard steep height ratio\"],\"editor.inspector.field.mansardSteepWidthRatio.6xk6vd\":[\"Mansard steep width ratio\"],\"editor.inspector.field.matchHostRoofMaterial.s56zwj\":[\"Match host roof material\"],\"editor.inspector.field.matchHostRoofStructure.bojht3\":[\"Match host roof structure\"],\"editor.inspector.field.mount.h80tay\":[\"Mount\"],\"editor.inspector.field.mountingType.1xvin1e\":[\"Mounting type\"],\"editor.inspector.field.neckHeight.19ym8n1\":[\"Neck height\"],\"editor.inspector.field.opacity.1pmpfd2\":[\"Opacity\"],\"editor.inspector.field.openingAngle.brhi7c\":[\"Opening angle\"],\"editor.inspector.field.openingOffset.wpoqt6\":[\"Opening offset\"],\"editor.inspector.field.openingSide.18l2iwe\":[\"Opening side\"],\"editor.inspector.field.operationState.1lwrz07\":[\"Operation state\"],\"editor.inspector.field.outletShape.lgpqhx\":[\"Outlet shape\"],\"editor.inspector.field.overhang.b5ljpv\":[\"Overhang\"],\"editor.inspector.field.panelHeight.1kf31vk\":[\"Panel height\"],\"editor.inspector.field.panelWidth.946581\":[\"Panel width\"],\"editor.inspector.field.patternAlignment.jd1ht0\":[\"Pattern alignment\"],\"editor.inspector.field.patternCount.1r37pve\":[\"Pattern count\"],\"editor.inspector.field.patternDistribution.fmam51\":[\"Pattern distribution\"],\"editor.inspector.field.patternRemainder.i47p5y\":[\"Pattern remainder\"],\"editor.inspector.field.picketProfile.1xgzuyc\":[\"Picket profile\"],\"editor.inspector.field.picketRailCount.atgt6w\":[\"Picket rail count\"],\"editor.inspector.field.picketSpacing.p8d98w\":[\"Picket spacing\"],\"editor.inspector.field.picketTop.1tskplu\":[\"Picket top\"],\"editor.inspector.field.picketTopClearance.16eq1k0\":[\"Picket top clearance\"],\"editor.inspector.field.picketVariation.f7vl1c\":[\"Picket variation\"],\"editor.inspector.field.picketWidth.3fr3rh\":[\"Picket width\"],\"editor.inspector.field.pipeMaterial.1ggc2wy\":[\"Pipe material\"],\"editor.inspector.field.pitch.xe6ekx\":[\"Pitch\"],\"editor.inspector.field.position.1quewx6\":[\"Position\"],\"editor.inspector.field.postBracing.crq8nn\":[\"Post bracing\"],\"editor.inspector.field.postCap.1xcvxrv\":[\"Post cap\"],\"editor.inspector.field.postCount.22r56c\":[\"Post count\"],\"editor.inspector.field.postDepth.1ko6j1m\":[\"Post depth\"],\"editor.inspector.field.postInset.le36li\":[\"Post inset\"],\"editor.inspector.field.postLayoutMode.16jre62\":[\"Post layout mode\"],\"editor.inspector.field.postSize.1jodxek\":[\"Post size\"],\"editor.inspector.field.postSpacing.voppfi\":[\"Post spacing\"],\"editor.inspector.field.postThrough.1abgu4a\":[\"Post through\"],\"editor.inspector.field.postWidth.rk26fz\":[\"Post width\"],\"editor.inspector.field.profile.1kwlci6\":[\"Profile\"],\"editor.inspector.field.projection.jhtig0\":[\"Projection\"],\"editor.inspector.field.purlinHeight.eo9cjm\":[\"Purlin height\"],\"editor.inspector.field.purlinSpacing.4gbzb2\":[\"Purlin spacing\"],\"editor.inspector.field.purlinWidth.r6tu3j\":[\"Purlin width\"],\"editor.inspector.field.rafterEndInset.14c0wy5\":[\"Rafter end inset\"],\"editor.inspector.field.rafterHeight.1e1n99w\":[\"Rafter height\"],\"editor.inspector.field.rafterSpacing.19subc0\":[\"Rafter spacing\"],\"editor.inspector.field.rafterWidth.eksj4t\":[\"Rafter width\"],\"editor.inspector.field.railingHeight.6wf4bm\":[\"Railing height\"],\"editor.inspector.field.railingMode.ov7xpu\":[\"Railing mode\"],\"editor.inspector.field.railingStyle.1nyd2u\":[\"Railing style\"],\"editor.inspector.field.resizeLock.b2hbr0\":[\"Resize lock\"],\"editor.inspector.field.returnDiameter.166ozhe\":[\"Return diameter\"],\"editor.inspector.field.returnHeight.b9sq6y\":[\"Return height\"],\"editor.inspector.field.returnShape.1e3a27i\":[\"Return shape\"],\"editor.inspector.field.returnWidth.z9r3h3\":[\"Return width\"],\"editor.inspector.field.rightEndCondition.tjlw3l\":[\"Right end condition\"],\"editor.inspector.field.rightOverhang.yqbeft\":[\"Right overhang\"],\"editor.inspector.field.roofHeight.1uhy6qy\":[\"Roof height\"],\"editor.inspector.field.roofStyle.pawqfy\":[\"Roof style\"],\"editor.inspector.field.roofThickness.1xlr3rx\":[\"Roof thickness\"],\"editor.inspector.field.roofType.1m9kv5h\":[\"Roof type\"],\"editor.inspector.field.rotation.ly2rj\":[\"Rotation\"],\"editor.inspector.field.rows.1ba1neg\":[\"Rows\"],\"editor.inspector.field.scale.b6rpxt\":[\"Scale\"],\"editor.inspector.field.seamDetail.197za48\":[\"Seam detail\"],\"editor.inspector.field.segmentType.l667sy\":[\"Segment type\"],\"editor.inspector.field.shaftStyle.1i5ampa\":[\"Shaft style\"],\"editor.inspector.field.shaftWallThickness.bduslr\":[\"Shaft wall thickness\"],\"editor.inspector.field.shape.iq9t52\":[\"Shape\"],\"editor.inspector.field.shape2.fi0nx8\":[\"Shape2\"],\"editor.inspector.field.shedHighSide.bzzddg\":[\"Shed high side\"],\"editor.inspector.field.shingleThickness.1hn5wxr\":[\"Shingle thickness\"],\"editor.inspector.field.shoulderExtent.11j8uiv\":[\"Shoulder extent\"],\"editor.inspector.field.shoulderHeight.xyqn6g\":[\"Shoulder height\"],\"editor.inspector.field.shoulderStyle.1hkcv2w\":[\"Shoulder style\"],\"editor.inspector.field.showCenterColumn.1uggg45\":[\"Show center column\"],\"editor.inspector.field.showInfill.33rv7u\":[\"Show infill\"],\"editor.inspector.field.showStepSupports.1kg8h8m\":[\"Show step supports\"],\"editor.inspector.field.sideFlashing.cv744o\":[\"Side flashing\"],\"editor.inspector.field.size.1a4x3zw\":[\"Size\"],\"editor.inspector.field.skylightType.1a5vj3i\":[\"Skylight type\"],\"editor.inspector.field.slabOpeningMode.g4f730\":[\"Slab opening mode\"],\"editor.inspector.field.slatGap.slmk93\":[\"Slat gap\"],\"editor.inspector.field.slideDirection.1527q13\":[\"Slide direction\"],\"editor.inspector.field.span.1bmmuw1\":[\"Span\"],\"editor.inspector.field.speed.2w2xwg\":[\"Speed\"],\"editor.inspector.field.spinSpeed.1ozx746\":[\"Spin speed\"],\"editor.inspector.field.stairType.1u05e02\":[\"Stair type\"],\"editor.inspector.field.standoff.4wv2g0\":[\"Standoff\"],\"editor.inspector.field.standoffHeight.1qdnff\":[\"Standoff height\"],\"editor.inspector.field.startPost.1ood9kv\":[\"Start post\"],\"editor.inspector.field.stepCount.nzorrw\":[\"Step count\"],\"editor.inspector.field.strapSpacing.1cyt3dc\":[\"Strap spacing\"],\"editor.inspector.field.strapStyle.fh1oy4\":[\"Strap style\"],\"editor.inspector.field.style.nf3vcm\":[\"Style\"],\"editor.inspector.field.suctionDiameter.nutxtj\":[\"Suction diameter\"],\"editor.inspector.field.supplyDiameter.h5ldh5\":[\"Supply diameter\"],\"editor.inspector.field.supplyHeight.zy6ru1\":[\"Supply height\"],\"editor.inspector.field.supplyShape.k39wnb\":[\"Supply shape\"],\"editor.inspector.field.supplyWidth.g66axi\":[\"Supply width\"],\"editor.inspector.field.supportOffset.1w4cocr\":[\"Support offset\"],\"editor.inspector.field.sweepAngle.ucmmlw\":[\"Sweep angle\"],\"editor.inspector.field.system.13qbhrw\":[\"System\"],\"editor.inspector.field.terminal.1501knl\":[\"Terminal\"],\"editor.inspector.field.terminalType.1ne8lgb\":[\"Terminal type\"],\"editor.inspector.field.thickness.1l8hu45\":[\"Thickness\"],\"editor.inspector.field.tiltAngle.1312yw1\":[\"Tilt angle\"],\"editor.inspector.field.toLevelId.8i5qx7\":[\"To level id\"],\"editor.inspector.field.topLandingDepth.ki7gk2\":[\"Top landing depth\"],\"editor.inspector.field.topLandingMode.zk0h7e\":[\"Top landing mode\"],\"editor.inspector.field.topRailHeight.fscisv\":[\"Top rail height\"],\"editor.inspector.field.transitionMode.f3evgt\":[\"Transition mode\"],\"editor.inspector.field.transitionWidth.rtgz3m\":[\"Transition width\"],\"editor.inspector.field.vaneCount.55vtye\":[\"Vane count\"],\"editor.inspector.field.wallHeight.18vmh5c\":[\"Wall height\"],\"editor.inspector.field.wallShell.vqsyhv\":[\"Wall shell\"],\"editor.inspector.field.wallSkirtHeight.1uea2ad\":[\"Wall skirt height\"],\"editor.inspector.field.wallThickness.17wn4iv\":[\"Wall thickness\"],\"editor.inspector.field.width.gfxz9b\":[\"Width\"],\"editor.inspector.field.width2.1nqawvr\":[\"Width2\"],\"editor.inspector.field.withBack.1ay8nus\":[\"With back\"],\"editor.inspector.field.withBottom.1x1z1vo\":[\"With bottom\"],\"editor.inspector.field.withSides.uq066x\":[\"With sides\"],\"editor.inspector.group.advanced.qwfkor\":[\"Advanced\"],\"editor.inspector.group.air.15jotdj\":[\"Air\"],\"editor.inspector.group.appearance.dli9wf\":[\"Appearance\"],\"editor.inspector.group.body.ign4wl\":[\"Body\"],\"editor.inspector.group.cab.o4z1ox\":[\"Cab\"],\"editor.inspector.group.cabinet.rzvymr\":[\"Cabinet\"],\"editor.inspector.group.cap.s0thej\":[\"Cap\"],\"editor.inspector.group.collar.1am2iqo\":[\"Collar\"],\"editor.inspector.group.connection.2r1h4p\":[\"Connection\"],\"editor.inspector.group.connections.ai4w8u\":[\"Connections\"],\"editor.inspector.group.construction.j6p9kc\":[\"Construction\"],\"editor.inspector.group.cricket.6iwg8g\":[\"Cricket\"],\"editor.inspector.group.curb.5xi2ol\":[\"Curb\"],\"editor.inspector.group.curvePoints.ztdcnn\":[\"Curve points\"],\"editor.inspector.group.dimensions.pewa8g\":[\"Dimensions\"],\"editor.inspector.group.doors.18w2kpa\":[\"Doors\"],\"editor.inspector.group.dormer.1fjs5tq\":[\"Dormer\"],\"editor.inspector.group.dormerRoof.u9uy2g\":[\"Dormer roof\"],\"editor.inspector.group.drainage.7easy0\":[\"Drainage\"],\"editor.inspector.group.elevation.4jbp44\":[\"Elevation\"],\"editor.inspector.group.endCaps.4fsb5b\":[\"End caps\"],\"editor.inspector.group.equipment.1xtq0ev\":[\"Equipment\"],\"editor.inspector.group.face.1531fr0\":[\"Face\"],\"editor.inspector.group.fitting.171z1r4\":[\"Fitting\"],\"editor.inspector.group.flues.nq6pye\":[\"Flues\"],\"editor.inspector.group.footprint.g8q2pg\":[\"Footprint\"],\"editor.inspector.group.frame.q7q9fq\":[\"Frame\"],\"editor.inspector.group.geometry.a21os1\":[\"Geometry\"],\"editor.inspector.group.grid.d8gwxd\":[\"Grid\"],\"editor.inspector.group.hangers.agnfzn\":[\"Hangers\"],\"editor.inspector.group.hardware.1nygwm1\":[\"Hardware\"],\"editor.inspector.group.hungWall.1ftr1gz\":[\"Hung wall\"],\"editor.inspector.group.insulation.1kyo5e7\":[\"Insulation\"],\"editor.inspector.group.lantern.1h7o2xb\":[\"Lantern\"],\"editor.inspector.group.levels.1s6yaru\":[\"Levels\"],\"editor.inspector.group.line.166mv5z\":[\"Line\"],\"editor.inspector.group.lines.12bghr0\":[\"Lines\"],\"editor.inspector.group.motion.1be7sjr\":[\"Motion\"],\"editor.inspector.group.mounting.feutd2\":[\"Mounting\"],\"editor.inspector.group.opening.dfet3\":[\"Opening\"],\"editor.inspector.group.panelDimensions.b59qe6\":[\"Panel dimensions\"],\"editor.inspector.group.patternDistribution.fmam51\":[\"Pattern distribution\"],\"editor.inspector.group.placement.13lcvts\":[\"Placement\"],\"editor.inspector.group.position.1quewx6\":[\"Position\"],\"editor.inspector.group.profile.1kwlci6\":[\"Profile\"],\"editor.inspector.group.railing.19a5bnr\":[\"Railing\"],\"editor.inspector.group.return.1klrjrz\":[\"Return\"],\"editor.inspector.group.settings.ktdb8o\":[\"Settings\"],\"editor.inspector.group.shaft.mad9cv\":[\"Shaft\"],\"editor.inspector.group.shape.iq9t52\":[\"Shape\"],\"editor.inspector.group.shoulder.1nyfx25\":[\"Shoulder\"],\"editor.inspector.group.size.1a4x3zw\":[\"Size\"],\"editor.inspector.group.structure.gezdra\":[\"Structure\"],\"editor.inspector.group.style.nf3vcm\":[\"Style\"],\"editor.inspector.group.supply.1oy2zwu\":[\"Supply\"],\"editor.inspector.group.surface.wtamqk\":[\"Surface\"],\"editor.inspector.group.terminal.1501knl\":[\"Terminal\"],\"editor.inspector.group.topology.18t8dyc\":[\"Topology\"],\"editor.inspector.group.transform.1c55ayj\":[\"Transform\"],\"editor.inspector.group.trap.1qc7vhe\":[\"Trap\"],\"editor.inspector.group.type.1m2zofh\":[\"Type\"],\"editor.inspector.option.abs.132mz8b\":[\"Abs\"],\"editor.inspector.option.accessPanel.13sptb5\":[\"Access panel\"],\"editor.inspector.option.airHandler.1crnyg3\":[\"Air handler\"],\"editor.inspector.option.alternating.5jashi\":[\"Alternating\"],\"editor.inspector.option.arched.14188w0\":[\"Arched\"],\"editor.inspector.option.auto.540b06\":[\"Auto\"],\"editor.inspector.option.automatic.r122ro\":[\"Automatic\"],\"editor.inspector.option.back.1hzmxtu\":[\"Back\"],\"editor.inspector.option.balusters.1j3w6ng\":[\"Balusters\"],\"editor.inspector.option.band.160umau\":[\"Band\"],\"editor.inspector.option.basePlate.17fcg8k\":[\"Base plate\"],\"editor.inspector.option.boards.u14hig\":[\"Boards\"],\"editor.inspector.option.bookshelf.ls0zqk\":[\"Bookshelf\"],\"editor.inspector.option.both.mkyb42\":[\"Both\"],\"editor.inspector.option.bottom.9mpruy\":[\"Bottom\"],\"editor.inspector.option.box.1nbjcuq\":[\"Box\"],\"editor.inspector.option.break.17spnvc\":[\"Break\"],\"editor.inspector.option.butterfly.pvv0g4\":[\"Butterfly\"],\"editor.inspector.option.cable.fp50zq\":[\"Cable\"],\"editor.inspector.option.castIron.1q2z4qk\":[\"Cast iron\"],\"editor.inspector.option.ceiling.1t2zaqo\":[\"Ceiling\"],\"editor.inspector.option.center.kzdxno\":[\"Center\"],\"editor.inspector.option.centerOpening.bn1rvw\":[\"Center opening\"],\"editor.inspector.option.cleanout.lww8bm\":[\"Cleanout\"],\"editor.inspector.option.concretePad.m1zdij\":[\"Concrete pad\"],\"editor.inspector.option.condenser.a74nps\":[\"Condenser\"],\"editor.inspector.option.corbeled.bovs4v\":[\"Corbeled\"],\"editor.inspector.option.count.1qoi4r8\":[\"Count\"],\"editor.inspector.option.coupling.111aap2\":[\"Coupling\"],\"editor.inspector.option.coveringSpecific.1h9fo8w\":[\"Covering specific\"],\"editor.inspector.option.cross.1elubzv\":[\"Cross\"],\"editor.inspector.option.cubby.ivq4qc\":[\"Cubby\"],\"editor.inspector.option.curved.6noz1s\":[\"Curved\"],\"editor.inspector.option.cylinder.eol6vj\":[\"Cylinder\"],\"editor.inspector.option.damper.wgri80\":[\"Damper\"],\"editor.inspector.option.destination.gfzm1r\":[\"Destination\"],\"editor.inspector.option.diffuser.1igj0jh\":[\"Diffuser\"],\"editor.inspector.option.dogEar.xhtvjt\":[\"Dog ear\"],\"editor.inspector.option.dome.1c87e56\":[\"Dome\"],\"editor.inspector.option.double.13h5354\":[\"Double\"],\"editor.inspector.option.ductBoard.lc3o4t\":[\"Duct board\"],\"editor.inspector.option.dutch.1djx429\":[\"Dutch\"],\"editor.inspector.option.elbow.1flup74\":[\"Elbow\"],\"editor.inspector.option.end.1llf32i\":[\"End\"],\"editor.inspector.option.endCap.1p4v4na\":[\"End cap\"],\"editor.inspector.option.equalFit.11vw52c\":[\"Equal fit\"],\"editor.inspector.option.fixedCount.1o3dznu\":[\"Fixed count\"],\"editor.inspector.option.fixedSpacing.hl4dr4\":[\"Fixed spacing\"],\"editor.inspector.option.flat.ly0bei\":[\"Flat\"],\"editor.inspector.option.flex.ktpamq\":[\"Flex\"],\"editor.inspector.option.floating.1oadpln\":[\"Floating\"],\"editor.inspector.option.floor.q9caf1\":[\"Floor\"],\"editor.inspector.option.flush.olwwu5\":[\"Flush\"],\"editor.inspector.option.front.uhugl4\":[\"Front\"],\"editor.inspector.option.furnace.w0mzpf\":[\"Furnace\"],\"editor.inspector.option.gable.1ekyx6\":[\"Gable\"],\"editor.inspector.option.gambrel.1yo90d9\":[\"Gambrel\"],\"editor.inspector.option.generic.1074oey\":[\"Generic\"],\"editor.inspector.option.glass.163tc5n\":[\"Glass\"],\"editor.inspector.option.glassFrame.jp9s3m\":[\"Glass frame\"],\"editor.inspector.option.globe.1avkqoy\":[\"Globe\"],\"editor.inspector.option.grounded.jwoq73\":[\"Grounded\"],\"editor.inspector.option.guard.1m575se\":[\"Guard\"],\"editor.inspector.option.halfRound.m5hob0\":[\"Half round\"],\"editor.inspector.option.hidden.gp48rd\":[\"Hidden\"],\"editor.inspector.option.hip.r0jnjy\":[\"Hip\"],\"editor.inspector.option.horizontal.tyapah\":[\"Horizontal\"],\"editor.inspector.option.include.1a27vnr\":[\"Include\"],\"editor.inspector.option.independentHighBeam.1tn0zvy\":[\"Independent high beam\"],\"editor.inspector.option.industrial.8sd9u\":[\"Industrial\"],\"editor.inspector.option.inline.1uh05lg\":[\"Inline\"],\"editor.inspector.option.integrated.1xd9lv0\":[\"Integrated\"],\"editor.inspector.option.joined.1x2o8ds\":[\"Joined\"],\"editor.inspector.option.kStyle.m8kfwz\":[\"K style\"],\"editor.inspector.option.kickout.vt8s6p\":[\"Kickout\"],\"editor.inspector.option.knee.186hcui\":[\"Knee\"],\"editor.inspector.option.landing.tyqarg\":[\"Landing\"],\"editor.inspector.option.lantern.1h7o2xb\":[\"Lantern\"],\"editor.inspector.option.leave.1xf0sbk\":[\"Leave\"],\"editor.inspector.option.left.14n06mo\":[\"Left\"],\"editor.inspector.option.level.i4lhtp\":[\"Level\"],\"editor.inspector.option.lowProfile.1h9lgzg\":[\"Low profile\"],\"editor.inspector.option.mansard.dwzck9\":[\"Mansard\"],\"editor.inspector.option.manual.1wu7r43\":[\"Manual\"],\"editor.inspector.option.maximumSpacing.n1fzl4\":[\"Maximum spacing\"],\"editor.inspector.option.metal.1az9fgc\":[\"Metal\"],\"editor.inspector.option.metalPanel.1xdz476\":[\"Metal panel\"],\"editor.inspector.option.minimal.fwmiwg\":[\"Minimal\"],\"editor.inspector.option.mono.oszvd6\":[\"Mono\"],\"editor.inspector.option.none.deku7v\":[\"None\"],\"editor.inspector.option.omit.okcs7w\":[\"Omit\"],\"editor.inspector.option.open.n6hn1l\":[\"Open\"],\"editor.inspector.option.openRack.mvt1x0\":[\"Open rack\"],\"editor.inspector.option.opening.dfet3\":[\"Opening\"],\"editor.inspector.option.oval.1jiqzxx\":[\"Oval\"],\"editor.inspector.option.picket.zyeoy1\":[\"Picket\"],\"editor.inspector.option.pointed.effedk\":[\"Pointed\"],\"editor.inspector.option.postAndRail.lajk2u\":[\"Post and rail\"],\"editor.inspector.option.preserveHighEdge.y6ywf0\":[\"Preserve high edge\"],\"editor.inspector.option.preserveLowEdge.196m5pk\":[\"Preserve low edge\"],\"editor.inspector.option.preservePitch.1uq973r\":[\"Preserve pitch\"],\"editor.inspector.option.privacy.1th4hrb\":[\"Privacy\"],\"editor.inspector.option.purlins.od124c\":[\"Purlins\"],\"editor.inspector.option.pvc.1oc4u2w\":[\"Pvc\"],\"editor.inspector.option.pyramid.17ucsqv\":[\"Pyramid\"],\"editor.inspector.option.rafters.16tzbby\":[\"Rafters\"],\"editor.inspector.option.rail.39zqc9\":[\"Rail\"],\"editor.inspector.option.raised.4kyx9h\":[\"Raised\"],\"editor.inspector.option.rect.tpfvaf\":[\"Rect\"],\"editor.inspector.option.reducer.18byt67\":[\"Reducer\"],\"editor.inspector.option.return.1klrjrz\":[\"Return\"],\"editor.inspector.option.returnGrille.r28ncm\":[\"Return grille\"],\"editor.inspector.option.right.8humpx\":[\"Right\"],\"editor.inspector.option.round.1vx0wyj\":[\"Round\"],\"editor.inspector.option.rounded.199nwpm\":[\"Rounded\"],\"editor.inspector.option.sanitaryTee.oro3d4\":[\"Sanitary tee\"],\"editor.inspector.option.scalloped.1eltba0\":[\"Scalloped\"],\"editor.inspector.option.scoop.qy5zdv\":[\"Scoop\"],\"editor.inspector.option.segmentedPanel.5r3hwl\":[\"Segmented panel\"],\"editor.inspector.option.shed.6t994v\":[\"Shed\"],\"editor.inspector.option.sheetMetal.l164lv\":[\"Sheet metal\"],\"editor.inspector.option.shingle.pfmynh\":[\"Shingle\"],\"editor.inspector.option.shingled.1nm9inf\":[\"Shingled\"],\"editor.inspector.option.simple.12mfu73\":[\"Simple\"],\"editor.inspector.option.single.1uzxurt\":[\"Single\"],\"editor.inspector.option.singleLeft.1atdh02\":[\"Single left\"],\"editor.inspector.option.singleRight.1axbu67\":[\"Single right\"],\"editor.inspector.option.slantBox.1ta99vy\":[\"Slant box\"],\"editor.inspector.option.slat.1p9njbz\":[\"Slat\"],\"editor.inspector.option.sliding.cd0jox\":[\"Sliding\"],\"editor.inspector.option.slope.1bn2qw\":[\"Slope\"],\"editor.inspector.option.sloped.lo4sh0\":[\"Sloped\"],\"editor.inspector.option.solid.o4uy6s\":[\"Solid\"],\"editor.inspector.option.solidPanel.2yaw62\":[\"Solid panel\"],\"editor.inspector.option.spiral.91hcl4\":[\"Spiral\"],\"editor.inspector.option.splash.1uke4cm\":[\"Splash\"],\"editor.inspector.option.spread.1g1zysu\":[\"Spread\"],\"editor.inspector.option.square.1xl1lk6\":[\"Square\"],\"editor.inspector.option.stair.1xf86e\":[\"Stair\"],\"editor.inspector.option.standard.vuco\":[\"Standard\"],\"editor.inspector.option.start.30xvgf\":[\"Start\"],\"editor.inspector.option.step.jtn9kf\":[\"Step\"],\"editor.inspector.option.stepped.naxzh0\":[\"Stepped\"],\"editor.inspector.option.straight.lxqbfr\":[\"Straight\"],\"editor.inspector.option.strap.14q0ps9\":[\"Strap\"],\"editor.inspector.option.supply.1oy2zwu\":[\"Supply\"],\"editor.inspector.option.supplyRegister.1lzdbbn\":[\"Supply register\"],\"editor.inspector.option.tapered.3y5blo\":[\"Tapered\"],\"editor.inspector.option.targetSpacing.14uibc9\":[\"Target spacing\"],\"editor.inspector.option.tee.7d6tjp\":[\"Tee\"],\"editor.inspector.option.tilted.6n0u5j\":[\"Tilted\"],\"editor.inspector.option.top.2nypcs\":[\"Top\"],\"editor.inspector.option.transition.1rziz9e\":[\"Transition\"],\"editor.inspector.option.vent.xda5j2\":[\"Vent\"],\"editor.inspector.option.walkOn.1n5sg9l\":[\"Walk on\"],\"editor.inspector.option.wall.blj585\":[\"Wall\"],\"editor.inspector.option.wallAbutment.lza941\":[\"Wall abutment\"],\"editor.inspector.option.wallLedger.5m8ana\":[\"Wall ledger\"],\"editor.inspector.option.wallShelf.yiozfl\":[\"Wall shelf\"],\"editor.inspector.option.waste.3xrp79\":[\"Waste\"],\"editor.inspector.option.wye.14vupc8\":[\"Wye\"],\"editor.lib.contextualHelp.addOrRemoveObjectsFromThe\":[\"Add or remove objects from the selection\"],\"editor.lib.contextualHelp.adjustOneSideSCornerRadius\":[\"Adjust one side’s corner radius\"],\"editor.lib.contextualHelp.clearTheSelectionOrClickOutside\":[\"Clear the selection (or click outside)\"],\"editor.lib.contextualHelp.clickAHandleDotToShow\":[\"Click a handle dot to show move arrows\"],\"editor.lib.contextualHelp.clickOrDragTheSelectionTo\":[\"Click or drag the selection to move it as one\"],\"editor.lib.contextualHelp.clickTheHandleDotToShow\":[\"Click the handle dot to show move + rotate handles\"],\"editor.lib.contextualHelp.detachTheJointWhileDraggingAn\":[\"Detach the joint while dragging an arrow\"],\"editor.lib.contextualHelp.dragLeftOrRightToRotate\":[\"Drag left or right to rotate selected object\"],\"editor.lib.contextualHelp.dragSelectedMovableObject\":[\"Drag selected movable object\"],\"editor.lib.contextualHelp.groupSelectionSessionOnly\":[\"Group selection (session only)\"],\"editor.lib.contextualHelp.holdToRotateFreely\":[\"Hold to rotate freely\"],\"editor.lib.contextualHelp.rotate45\":[\"Rotate ±45°\"],\"editor.lib.contextualHelp.rotateTheSelection45\":[\"Rotate the selection ±45°\"],\"editor.lib.contextualHelp.rotatingFreely\":[\"Rotating freely (no angle step)\"],\"editor.lib.contextualHelp.switchTheRotationAxisYX\":[\"Switch the rotation axis (Y → X → Z)\"],\"editor.lib.contextualHelp.ungroupSessionSelection\":[\"Ungroup session selection\"],\"editor.lib.continuation.continuous\":[\"Continuous\"],\"editor.lib.continuation.continuousCanopy\":[\"Continuous canopy\"],\"editor.lib.continuation.continuousRun\":[\"Continuous run\"],\"editor.lib.continuation.curvedFence\":[\"Curved fence\"],\"editor.lib.continuation.freehandFence\":[\"Freehand fence\"],\"editor.lib.continuation.placeMultiple\":[\"Place multiple\"],\"editor.lib.continuation.placeOnce\":[\"Place once\"],\"editor.lib.continuation.polygonRoom\":[\"Polygon room\"],\"editor.lib.continuation.rectangleRoom\":[\"Rectangle room\"],\"editor.lib.continuation.singleCabinet\":[\"Single cabinet\"],\"editor.lib.continuation.singleCanopy\":[\"Single canopy\"],\"editor.lib.continuation.singleFence\":[\"Single fence\"],\"editor.lib.continuation.walls\":[\"Walls\"],\"editor.lib.hudTitle.cutOpening\":[\"Cut opening\"],\"editor.lib.hudTitle.divideRoom\":[\"Divide room\"],\"editor.lib.hudTitle.editKind\":[\"Edit \",[\"kind\"]],\"editor.lib.hudTitle.erase\":[\"Erase\"],\"editor.lib.hudTitle.levelTerrain\":[\"Level terrain\"],\"editor.lib.hudTitle.lowerTerrain\":[\"Lower terrain\"],\"editor.lib.hudTitle.mezzanine\":[\"Mezzanine\"],\"editor.lib.hudTitle.moveKind\":[\"Move \",[\"kind\"]],\"editor.lib.hudTitle.moveRoom\":[\"Move room\"],\"editor.lib.hudTitle.moveSelection\":[\"Move selection\"],\"editor.lib.hudTitle.paint\":[\"Paint\"],\"editor.lib.hudTitle.paintARectangle\":[\"Paint a rectangle\"],\"editor.lib.hudTitle.paintAShape\":[\"Paint a shape\"],\"editor.lib.hudTitle.pickMaterial\":[\"Pick material\"],\"editor.lib.hudTitle.raiseTerrain\":[\"Raise terrain\"],\"editor.lib.hudTitle.resize\":[\"Resize\"],\"editor.lib.hudTitle.rotate\":[\"Rotate\"],\"editor.lib.hudTitle.select\":[\"Select\"],\"editor.lib.hudTitle.smartMeasure\":[\"Smart measure\"],\"editor.lib.hudTitle.smoothTerrain\":[\"Smooth terrain\"],\"editor.lib.hudTitle.splitKind\":[\"Split \",[\"kind\"]],\"editor.lib.hudTitle.terrace\":[\"Terrace\"],\"editor.lib.wallDrawVariant.polygonRoom\":[\"Polygon room\"],\"editor.lib.wallDrawVariant.rectangleRoom\":[\"Rectangle room\"],\"editor.lib.wallDrawVariant.walls\":[\"Walls\"],\"editor.nodeDisplay.ceiling\":[\"Ceiling\"],\"editor.nodeDisplay.column\":[\"Column\"],\"editor.nodeDisplay.door\":[\"Door\"],\"editor.nodeDisplay.elevator\":[\"Elevator\"],\"editor.nodeDisplay.fence\":[\"Fence\"],\"editor.nodeDisplay.guide\":[\"Guide image\"],\"editor.nodeDisplay.item\":[\"Item\"],\"editor.nodeDisplay.roof\":[\"Roof\"],\"editor.nodeDisplay.roofSegment\":[\"Roof segment\"],\"editor.nodeDisplay.room\":[\"Room\"],\"editor.nodeDisplay.scan\":[\"3D Scan\"],\"editor.nodeDisplay.selection\":[\"Selection\"],\"editor.nodeDisplay.slab\":[\"Slab\"],\"editor.nodeDisplay.stair\":[\"Stair\"],\"editor.nodeDisplay.stairSegment\":[\"Stair segment\"],\"editor.nodeDisplay.wall\":[\"Wall\"],\"editor.nodeDisplay.window\":[\"Window\"],\"editor.nodeDisplay.zone\":[\"Zone\"],\"editor.panels.collections.collectionsPopover.cancel\":[\"Cancel\"],\"editor.panels.collections.collectionsPopover.collectionName\":[\"Collection name…\"],\"editor.panels.collections.collectionsPopover.collections\":[\"Collections\"],\"editor.panels.collections.collectionsPopover.delete\":[\"Delete\"],\"editor.panels.collections.collectionsPopover.deleteName\":[\"Delete \\\"\",[\"name\"],\"\\\"?\"],\"editor.panels.collections.collectionsPopover.new\":[\"New\"],\"editor.panels.collections.collectionsPopover.noCollectionsYetCreateOneTo\":[\"No collections yet. Create one to group elements together.\"],\"editor.panels.collections.collectionsPopover.rename\":[\"Rename\"],\"editor.panels.floorFoundationPanel.aThickerFloorGrowsUpwardThe\":[\"A thicker floor grows upward: the rooms below keep their height.\"],\"editor.panels.floorFoundationPanel.edgeFinish\":[\"Edge finish\"],\"editor.panels.floorFoundationPanel.floorPlate\":[\"Floor plate\"],\"editor.panels.floorFoundationPanel.floorPlateThicknesslabelThickRestingOn\":[\"Floor plate \",[\"thicknessLabel\"],\" thick, resting on the walls below\"],\"editor.panels.floorFoundationPanel.floorThickness\":[\"Floor thickness\"],\"editor.panels.floorFoundationPanel.floorTopAbove\":[\"Floor top +\",[\"height\"]],\"editor.panels.floorFoundationPanel.floorTopValue\":[\"Floor top \",[\"height\"]],\"editor.panels.floorFoundationPanel.foundationFinish\":[\"Foundation finish\"],\"editor.panels.floorFoundationPanel.foundationHeight\":[\"Foundation height\"],\"editor.panels.floorFoundationPanel.kicker\":[\"Floor plate\"],\"editor.panels.floorFoundationPanel.kickerLevel\":[\"Floor plate · \",[\"level\"]],\"editor.panels.floorFoundationPanel.kickerRestsOn\":[\"Floor plate · \",[\"level\"],\" · rests on \",[\"below\"]],\"editor.panels.floorFoundationPanel.lowerTogether\":[[\"count\",\"plural\",{\"2\":[\"Lower both\"],\"other\":[\"Lower all \",\"#\"]}]],\"editor.panels.floorFoundationPanel.notToScale\":[\"Not to scale\"],\"editor.panels.floorFoundationPanel.onTheGround\":[\"On the ground\"],\"editor.panels.floorFoundationPanel.raiseTogether\":[[\"count\",\"plural\",{\"2\":[\"Raise both\"],\"other\":[\"Raise all \",\"#\"]}]],\"editor.panels.floorFoundationPanel.raisedOnAFoundation\":[\"Raised on a foundation\"],\"editor.panels.floorFoundationPanel.section.floorPlate\":[\"Floor plate · \",[\"thickness\"]],\"editor.panels.floorFoundationPanel.section.floorTop\":[\"Floor top\"],\"editor.panels.floorFoundationPanel.section.foundation\":[\"Foundation\"],\"editor.panels.floorFoundationPanel.section.foundationKind\":[\"Foundation · \",[\"foundation\"]],\"editor.panels.floorFoundationPanel.section.ground\":[\"Ground\"],\"editor.panels.floorFoundationPanel.section.slab\":[\"Slab · \",[\"thickness\"]],\"editor.panels.floorFoundationPanel.section.wallsBelow\":[\"Walls below\"],\"editor.panels.floorFoundationPanel.sectionOnGround\":[\"Slab \",[\"thickness\"],\" thick on the ground, floor top \",[\"top\"],\" above the ground\"],\"editor.panels.floorFoundationPanel.sectionRaised\":[\"Slab \",[\"thickness\"],\" thick on a \",[\"foundation\"],\" foundation, floor top \",[\"top\"],\" above the ground\"],\"editor.panels.floorFoundationPanel.slab\":[\"Slab\"],\"editor.panels.floorFoundationPanel.slabThickness\":[\"Slab thickness\"],\"editor.panels.floorFoundationPanel.theFloorSOutsideEdgeAll\":[\"The floor's outside edge, all around the footprint.\"],\"editor.panels.floorFoundationPanel.theFoundationStandsOnTheGround\":[\"The foundation stands on the ground; the slab sits on it.\"],\"editor.panels.floorFoundationPanel.theSlabSitsOnTheFoundation\":[\"The slab sits on the foundation (or the ground): a thicker slab raises the floor top and everything on it.\"],\"editor.panels.floorFoundationPanel.underTheFloor\":[\"Under the floor\"],\"editor.panels.floorOpeningPanel.aHatchInTheMezzanineIt\":[\"A hatch in the mezzanine: it cuts only the mezzanine’s floor.\"],\"editor.panels.floorOpeningPanel.alsoCutTheCeilingBelow\":[\"Also cut the ceiling below\"],\"editor.panels.floorOpeningPanel.alsoCutTheFloorAbove\":[\"Also cut the floor above\"],\"editor.panels.floorOpeningPanel.areaDragCorners\":[[\"area\"],\" · Drag its corners to change the shape.\"],\"editor.panels.floorOpeningPanel.areaOwned\":[[\"area\"],\" · Shape follows its owner.\"],\"editor.panels.floorOpeningPanel.delete\":[\"Delete\"],\"editor.panels.floorOpeningPanel.done\":[\"Done\"],\"editor.panels.floorOpeningPanel.kicker\":[\"Opening\"],\"editor.panels.floorOpeningPanel.kickerLevel\":[\"Opening · \",[\"level\"]],\"editor.panels.floorOpeningPanel.kickerRoom\":[\"Opening · in \",[\"room\"]],\"editor.panels.floorOpeningPanel.kickerRoomLevel\":[\"Opening · in \",[\"room\"],\" · \",[\"level\"]],\"editor.panels.floorOpeningPanel.oneVoidWith\":[\"On \",[\"level\"],\", as one void with this opening.\"],\"editor.panels.floorOpeningPanel.ownedByElevator\":[\"Owned by Elevator\"],\"editor.panels.floorOpeningPanel.ownedByStaircase\":[\"Owned by Staircase\"],\"editor.panels.floorOpeningPanel.thereIsNoFloorAboveThis\":[\"There is no floor above this storey.\"],\"editor.panels.floorOpeningPanel.thereIsNoStoreyBelow\":[\"There is no storey below.\"],\"editor.panels.floorOpeningPanel.title\":[[\"source\",\"select\",{\"stair\":[\"Stair opening\"],\"elevator\":[\"Elevator opening\"],\"ceiling\":[\"Ceiling opening\"],\"other\":[\"Floor opening\"]}]],\"editor.panels.mergeRefusal.alreadyJoined\":[\"One of them already wraps another corner. Unwrap it first.\"],\"editor.panels.mergeRefusal.cannotMerge\":[\"These windows cannot be merged.\"],\"editor.panels.mergeRefusal.cornerAngle\":[\"Their walls meet at too sharp or too flat an angle for a corner window.\"],\"editor.panels.mergeRefusal.heightExceedsWall\":[\"The window selected first is taller than the other wall. Select the other one first.\"],\"editor.panels.mergeRefusal.kindBetween\":[\"A \",[\"kind\"],\" is between them.\"],\"editor.panels.mergeRefusal.kindOverlap\":[\"Sliding them to the corner would overlap a \",[\"kind\"],\".\"],\"editor.panels.mergeRefusal.notAdjacent\":[\"They are too far apart. Windows merge with at most \",[\"reach\"],\" between them.\"],\"editor.panels.mergeRefusal.notAtCorner\":[\"One of them is too far from the corner. A window joins one within \",[\"reach\"],\" of it.\"],\"editor.panels.mergeRefusal.notOnWall\":[\"A roof or dormer window cannot join another window.\"],\"editor.panels.mergeRefusal.somethingBetween\":[\"There is something between them.\"],\"editor.panels.mergeRefusal.somethingOverlap\":[\"Sliding them to the corner would overlap something.\"],\"editor.panels.mergeRefusal.wallsNotMeeting\":[\"Their walls do not meet at a corner.\"],\"editor.panels.mixed\":[\"Mixed\"],\"editor.panels.mobilePanelSheet.close\":[\"Close\"],\"editor.panels.mobileSelectionBar.delete\":[\"Delete\"],\"editor.panels.mobileSelectionBar.duplicate\":[\"Duplicate\"],\"editor.panels.mobileSelectionBar.editProperties\":[\"Edit properties\"],\"editor.panels.mobileSelectionBar.editResolvedlabel\":[\"Edit \",[\"resolvedLabel\"]],\"editor.panels.mobileSelectionBar.move\":[\"Move\"],\"editor.panels.multiHeightMode.currentlyCurrentlabel\":[\"Currently \",[\"currentLabel\"]],\"editor.panels.multiHeightMode.customHeight\":[\"Custom height\"],\"editor.panels.multiHeightMode.followsLevel\":[\"Follows level\"],\"editor.panels.multiHeightMode.height\":[\"Height\"],\"editor.panels.multiHeightMode.top\":[\"Top\"],\"editor.panels.multiParametricInspector.labelSessionOnlyPlainClickReselects\":[[\"label\"],\" (session only). Plain click reselects all members. Not saved with the project.\"],\"editor.panels.multiSelectionPanel.delete\":[\"Delete\"],\"editor.panels.multiSelectionPanel.duplicate\":[\"Duplicate\"],\"editor.panels.multiSelectionPanel.group\":[\"Group\"],\"editor.panels.multiSelectionPanel.groupCtrlCmdG\":[\"Group (Ctrl/Cmd+G)\"],\"editor.panels.multiSelectionPanel.labelSessionOnlyPlainClickReselects\":[[\"label\"],\" (session only). Plain click reselects all members. Not saved with the project.\"],\"editor.panels.multiSelectionPanel.lengthSelected\":[[\"length\"],\" selected\"],\"editor.panels.multiSelectionPanel.mergeWindows\":[\"Merge windows\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoACornerWindow\":[\"Merge windows into a corner window: both take the height, sill and type of the one you selected first\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoOneAcrossBoth\":[\"Merge windows into one across both: it keeps the type and style of the one you selected first\"],\"editor.panels.multiSelectionPanel.selectBuilding\":[\"Select building\"],\"editor.panels.multiSelectionPanel.selectTheWholeBuildingToMove\":[\"Select the whole building to move all its levels\"],\"editor.panels.multiSelectionPanel.ungroup\":[\"Ungroup\"],\"editor.panels.multiSelectionPanel.ungroupCtrlCmdShiftG\":[\"Ungroup (Ctrl/Cmd+Shift+G)\"],\"editor.panels.multiSelectionPanel.unwrapTheCorner\":[\"Unwrap the corner\"],\"editor.panels.multiSelectionPanel.unwrapTheCornerBothWindowsStay\":[\"Unwrap the corner: both windows stay, each framed at the corner\"],\"editor.panels.panelManager.selection\":[\"Selection\"],\"editor.panels.panelWrapper.closeTitle\":[\"Close \",[\"title\"]],\"editor.panels.panelWrapper.collapsePanel\":[\"Collapse panel\"],\"editor.panels.panelWrapper.collections\":[\"Collections\"],\"editor.panels.panelWrapper.expandPanel\":[\"Expand panel\"],\"editor.panels.panelWrapper.manageCollections\":[\"Manage collections…\"],\"editor.panels.panelWrapper.openTitle\":[\"Open \",[\"title\"]],\"editor.panels.panelWrapper.titleHitAnErrorAndWas\":[\"“\",[\"title\"],\"” hit an error and was unloaded for this session.\"],\"editor.panels.parametricFieldControl.mixed\":[\"Mixed\"],\"editor.panels.parametricInspector.actions\":[\"Actions\"],\"editor.panels.parametricInspector.delete\":[\"Delete\"],\"editor.panels.parametricInspector.deleteWithContents\":[\"Delete with contents\"],\"editor.panels.parametricInspector.move\":[\"Move\"],\"editor.panels.referencePanel.cancel\":[\"Cancel\"],\"editor.panels.referencePanel.capture\":[\"Capture\"],\"editor.panels.referencePanel.center\":[\"Center\"],\"editor.panels.referencePanel.clearScale\":[\"Clear Scale\"],\"editor.panels.referencePanel.clickBothEndsOfAKnown\":[\"Click both ends of a known distance on the plan, then type its real length.\"],\"editor.panels.referencePanel.delete\":[\"Delete\"],\"editor.panels.referencePanel.drawALineOverAKnown\":[\"Draw a line over a known dimension on the plan, then type its real length to scale the image exactly.\"],\"editor.panels.referencePanel.editScale\":[\"Edit Scale\"],\"editor.panels.referencePanel.guideImage\":[\"Guide Image\"],\"editor.panels.referencePanel.hide\":[\"Hide\"],\"editor.panels.referencePanel.hideScale\":[\"Hide Scale\"],\"editor.panels.referencePanel.image\":[\"Image\"],\"editor.panels.referencePanel.lock\":[\"Lock\"],\"editor.panels.referencePanel.move\":[\"Move\"],\"editor.panels.referencePanel.opacity\":[\"Opacity\"],\"editor.panels.referencePanel.overlayImageUnavailableReplaceTheImage\":[\"Overlay image unavailable. Replace the image to restore it.\"],\"editor.panels.referencePanel.pos\":[\"pos\"],\"editor.panels.referencePanel.position\":[\"Position\"],\"editor.panels.referencePanel.quickActions\":[\"Quick Actions\"],\"editor.panels.referencePanel.referenceScale\":[\"Reference Scale\"],\"editor.panels.referencePanel.replace\":[\"Replace\"],\"editor.panels.referencePanel.replacing\":[\"Replacing...\"],\"editor.panels.referencePanel.resetImageScale\":[\"Reset Image Scale\"],\"editor.panels.referencePanel.resetRotation\":[\"Reset Rotation\"],\"editor.panels.referencePanel.rot\":[\"rot\"],\"editor.panels.referencePanel.rotation\":[\"Rotation\"],\"editor.panels.referencePanel.scale\":[\"scale\"],\"editor.panels.referencePanel.scaleOpacity\":[\"Scale & Opacity\"],\"editor.panels.referencePanel.scaled\":[\"Scaled · \",[\"scale\"]],\"editor.panels.referencePanel.scaledHidden\":[\"Scaled (hidden) · \",[\"scale\"]],\"editor.panels.referencePanel.setScale\":[\"Set Scale\"],\"editor.panels.referencePanel.show\":[\"Show\"],\"editor.panels.referencePanel.showScale\":[\"Show Scale\"],\"editor.panels.referencePanel.uncalibrated\":[\"Uncalibrated\"],\"editor.panels.referencePanel.unlock\":[\"Unlock\"],\"editor.panels.referencePanel.xyz\":[\"XYZ\"],\"editor.panels.roomConstructionRows.aDrawnSlabSetItsThickness\":[\"A drawn slab: set its thickness and finishes here. It has no footprint height or foundation.\"],\"editor.panels.roomConstructionRows.addMezzanine\":[\"+ Add mezzanine\"],\"editor.panels.roomConstructionRows.atFloorLevel\":[\"At floor level\"],\"editor.panels.roomConstructionRows.builtOn\":[\"Built on\"],\"editor.panels.roomConstructionRows.builtWith\":[\"Built with\"],\"editor.panels.roomConstructionRows.ceiling\":[\"Ceiling\"],\"editor.panels.roomConstructionRows.ceilingAt\":[\"At \",[\"height\"]],\"editor.panels.roomConstructionRows.closeWithWalls\":[\"Close with walls\"],\"editor.panels.roomConstructionRows.drawnFloor\":[[\"ambiguous\",\"select\",{\"yes\":[\"Floor is several drawn slabs, mostly \",[\"name\"]],\"other\":[\"Floor is a drawn slab: \",[\"name\"]]}],[\"shared\",\"plural\",{\"0\":[],\"one\":[\" (shared with \",\"#\",\" room)\"],\"other\":[\" (shared with \",\"#\",\" rooms)\"]}]],\"editor.panels.roomConstructionRows.drawnFloorSwitchHint\":[\"This floor is a drawn slab: select it to edit or delete it.\"],\"editor.panels.roomConstructionRows.drawnSlab\":[\"Drawn slab\"],\"editor.panels.roomConstructionRows.drawnSlabAt\":[\"Drawn slab at \",[\"height\"]],\"editor.panels.roomConstructionRows.editShape\":[\"Edit shape\"],\"editor.panels.roomConstructionRows.flatAtWallHeight\":[\"Flat, at wall height\"],\"editor.panels.roomConstructionRows.floor\":[\"Floor\"],\"editor.panels.roomConstructionRows.floorDown\":[[\"distance\"],\" down\"],\"editor.panels.roomConstructionRows.floorThickness\":[\"Floor thickness\"],\"editor.panels.roomConstructionRows.floorUp\":[[\"distance\"],\" up\"],\"editor.panels.roomConstructionRows.handDrawnCeiling\":[\"Hand-drawn ceiling\"],\"editor.panels.roomConstructionRows.height\":[\"Height\"],\"editor.panels.roomConstructionRows.includeFloor\":[\"Include floor\"],\"editor.panels.roomConstructionRows.includePart\":[[\"part\",\"select\",{\"floor\":[\"Include floor\"],\"walls\":[\"Include walls\"],\"other\":[\"Include ceiling\"]}]],\"editor.panels.roomConstructionRows.includeWalls\":[\"Include walls\"],\"editor.panels.roomConstructionRows.keepOutsideDimensions\":[\"Keep outside dimensions\"],\"editor.panels.roomConstructionRows.lowered\":[\"Lowered \",[\"lift\"]],\"editor.panels.roomConstructionRows.newFloor\":[\"+ New floor\"],\"editor.panels.roomConstructionRows.noFloor\":[\"No floor\"],\"editor.panels.roomConstructionRows.notIncluded\":[\"Not included\"],\"editor.panels.roomConstructionRows.nothingToChange\":[\"Nothing to change.\"],\"editor.panels.roomConstructionRows.onTheGround\":[\"On the ground\"],\"editor.panels.roomConstructionRows.onTheWallsBelow\":[\"On the walls below\"],\"editor.panels.roomConstructionRows.openSides\":[[\"openSides\",\"plural\",{\"one\":[\"#\",\" open side\"],\"other\":[\"#\",\" open sides\"]}]],\"editor.panels.roomConstructionRows.partialCovered\":[\"Partial · \",[\"coverage\",\"number\",\"percent\"],\" covered\"],\"editor.panels.roomConstructionRows.partialWalls\":[\"Partial · \",[\"walls\",\"plural\",{\"one\":[\"#\",\" wall\"],\"other\":[\"#\",\" walls\"]}],\", \",[\"openSides\",\"plural\",{\"one\":[\"#\",\" open side\"],\"other\":[\"#\",\" open sides\"]}]],\"editor.panels.roomConstructionRows.raised\":[\"Raised \",[\"lift\"]],\"editor.panels.roomConstructionRows.replace\":[\"Replace\"],\"editor.panels.roomConstructionRows.select\":[\"Select\"],\"editor.panels.roomConstructionRows.shape\":[\"Shape\"],\"editor.panels.roomConstructionRows.sharedWallsNote\":[\"Turning walls off keeps the ones shared with \",[\"rooms\"],\".\"],\"editor.panels.roomConstructionRows.sitsOnPreset\":[\"Sits on: \",[\"name\"],\" · \",[\"preset\"]],\"editor.panels.roomConstructionRows.useExisting\":[\"Use existing\"],\"editor.panels.roomConstructionRows.wallCount\":[[\"walls\",\"plural\",{\"one\":[\"#\",\" wall\"],\"other\":[\"#\",\" walls\"]}]],\"editor.panels.roomConstructionRows.walls\":[\"Walls\"],\"editor.panels.roomConstructionRows.wallsThickenInwardSoTheBuilding\":[\"Walls thicken inward, so the building's outer size stays the same.\"],\"editor.panels.roomOpeningsField.cutOpening\":[\"Cut opening\"],\"editor.panels.roomOpeningsField.done\":[\"Done\"],\"editor.panels.roomOpeningsField.editFloor\":[\"Edit floor\"],\"editor.panels.roomOpeningsField.elevatorOpening\":[\"Elevator opening\"],\"editor.panels.roomOpeningsField.noOpenings\":[\"No openings\"],\"editor.panels.roomOpeningsField.noOpeningsYetCutOneFor\":[\"No openings yet. Cut one for a stair void or a hatch.\"],\"editor.panels.roomOpeningsField.openingNumber\":[\"Opening \",[\"number\"]],\"editor.panels.roomOpeningsField.stairOpening\":[\"Stair opening\"],\"editor.panels.roomPanel.addStairs\":[\"Add stairs\"],\"editor.panels.roomPanel.addToAUnit\":[\"Add to a unit\"],\"editor.panels.roomPanel.area\":[\"Area\"],\"editor.panels.roomPanel.browse\":[\"Browse\"],\"editor.panels.roomPanel.builtWith\":[\"Built with\"],\"editor.panels.roomPanel.ceiling\":[\"Ceiling\"],\"editor.panels.roomPanel.deleteRoom\":[\"Delete room\"],\"editor.panels.roomPanel.editShape\":[\"Edit shape\"],\"editor.panels.roomPanel.floor\":[\"Floor\"],\"editor.panels.roomPanel.headroom\":[[\"height\"],\" headroom\"],\"editor.panels.roomPanel.height\":[\"Height\"],\"editor.panels.roomPanel.hideCode\":[\"Hide code\"],\"editor.panels.roomPanel.kickerLevel\":[\"Room · \",[\"level\"]],\"editor.panels.roomPanel.kickerMezzanineIn\":[\"Mezzanine · in \",[\"room\"]],\"editor.panels.roomPanel.kickerNotEnclosed\":[\"Room · not enclosed\"],\"editor.panels.roomPanel.loading\":[\"Loading…\"],\"editor.panels.roomPanel.mezzanine\":[\"Mezzanine\"],\"editor.panels.roomPanel.mezzanineName\":[\"Mezzanine name\"],\"editor.panels.roomPanel.mezzanineNames\":[\"Mezzanine names\"],\"editor.panels.roomPanel.newUnit\":[\"New unit\"],\"editor.panels.roomPanel.none\":[\"None\"],\"editor.panels.roomPanel.notEnoughHeadroom\":[\"Not enough headroom\"],\"editor.panels.roomPanel.openRoomArea\":[[\"area\"],\" · Close its walls to build its floor and ceiling.\"],\"editor.panels.roomPanel.overTheMezzanine\":[\"Over the mezzanine\"],\"editor.panels.roomPanel.perimeter\":[\"Perimeter\"],\"editor.panels.roomPanel.pick\":[\"Pick\"],\"editor.panels.roomPanel.pickingItAddsANumber\":[\"Picking it adds a number\"],\"editor.panels.roomPanel.remove\":[\"Remove\"],\"editor.panels.roomPanel.removeFromUnit\":[\"Remove from unit\"],\"editor.panels.roomPanel.removeFromUnitNamed\":[\"Remove from \",[\"unit\"]],\"editor.panels.roomPanel.rename\":[\"Rename\"],\"editor.panels.roomPanel.renameNamed\":[[\"name\"],\" · Rename\"],\"editor.panels.roomPanel.revert\":[\"Revert\"],\"editor.panels.roomPanel.room\":[\"Room\"],\"editor.panels.roomPanel.roomColourUsedInThePlan\":[\"Room colour — used in the plan and labels\"],\"editor.panels.roomPanel.roomName\":[\"Room name\"],\"editor.panels.roomPanel.roomNames\":[\"Room names\"],\"editor.panels.roomPanel.scriptedFinish\":[\"Scripted finish\"],\"editor.panels.roomPanel.shape\":[\"Shape\"],\"editor.panels.roomPanel.showMezzanineNames\":[\"Show mezzanine names\"],\"editor.panels.roomPanel.showRoomNames\":[\"Show room names\"],\"editor.panels.roomPanel.stairs\":[\"Stairs\"],\"editor.panels.roomPanel.unit\":[\"Unit\"],\"editor.panels.roomPanel.use\":[\"Use\"],\"editor.panels.roomPanel.useTyped\":[[\"use\"],\" “\",[\"name\"],\"”\"],\"editor.panels.roomPanel.usedOnThisLevel\":[[\"used\"],\" on this level\"],\"editor.panels.roomPanel.viewCode\":[\"View code\"],\"editor.panels.scriptUnreadable\":[\"The script could not be read.\"],\"editor.panels.shapeChoice.polygon\":[\"Polygon\"],\"editor.panels.shapeChoice.rectangle\":[\"Rectangle\"],\"editor.panels.wallRegionList.deleteRegion\":[\"Delete region\"],\"editor.panels.wallRegionList.paintRegions\":[\"Paint regions\"],\"editor.reloadEditor\":[\"Reload editor\"],\"editor.room.builtOn.above\":[[\"current\"],\" · \",[\"distance\"],\" above \",[\"shared\"]],\"editor.room.builtOn.below\":[[\"current\"],\" · \",[\"distance\"],\" below \",[\"shared\"]],\"editor.room.builtOn.levelWith\":[[\"current\"],\" · level with \",[\"shared\"]],\"editor.roomName.attic\":[\"Attic\"],\"editor.roomName.balcony\":[\"Balcony\"],\"editor.roomName.basement\":[\"Basement\"],\"editor.roomName.bathroom\":[\"Bathroom\"],\"editor.roomName.bedroom\":[\"Bedroom\"],\"editor.roomName.boilerRoom\":[\"Boiler room\"],\"editor.roomName.carport\":[\"Carport\"],\"editor.roomName.cellar\":[\"Cellar\"],\"editor.roomName.closet\":[\"Closet\"],\"editor.roomName.corridor\":[\"Corridor\"],\"editor.roomName.courtyard\":[\"Courtyard\"],\"editor.roomName.deck\":[\"Deck\"],\"editor.roomName.den\":[\"Den\"],\"editor.roomName.diningRoom\":[\"Dining room\"],\"editor.roomName.dressingRoom\":[\"Dressing room\"],\"editor.roomName.enSuite\":[\"En-suite\"],\"editor.roomName.entrance\":[\"Entrance\"],\"editor.roomName.familyRoom\":[\"Family room\"],\"editor.roomName.gallery\":[\"Gallery\"],\"editor.roomName.gamesRoom\":[\"Games room\"],\"editor.roomName.garage\":[\"Garage\"],\"editor.roomName.garden\":[\"Garden\"],\"editor.roomName.gardenShed\":[\"Garden shed\"],\"editor.roomName.guestRoom\":[\"Guest room\"],\"editor.roomName.gym\":[\"Gym\"],\"editor.roomName.hallway\":[\"Hallway\"],\"editor.roomName.homeCinema\":[\"Home cinema\"],\"editor.roomName.kidsRoom\":[\"Kids' room\"],\"editor.roomName.kitchen\":[\"Kitchen\"],\"editor.roomName.kitchenette\":[\"Kitchenette\"],\"editor.roomName.landing\":[\"Landing\"],\"editor.roomName.laundry\":[\"Laundry\"],\"editor.roomName.library\":[\"Library\"],\"editor.roomName.livingRoom\":[\"Living room\"],\"editor.roomName.loft\":[\"Loft\"],\"editor.roomName.lounge\":[\"Lounge\"],\"editor.roomName.mezzanine\":[\"Mezzanine\"],\"editor.roomName.mudroom\":[\"Mudroom\"],\"editor.roomName.nursery\":[\"Nursery\"],\"editor.roomName.office\":[\"Office\"],\"editor.roomName.pantry\":[\"Pantry\"],\"editor.roomName.patio\":[\"Patio\"],\"editor.roomName.playroom\":[\"Playroom\"],\"editor.roomName.poolArea\":[\"Pool area\"],\"editor.roomName.porch\":[\"Porch\"],\"editor.roomName.powderRoom\":[\"Powder room\"],\"editor.roomName.primaryBedroom\":[\"Primary bedroom\"],\"editor.roomName.readingNook\":[\"Reading nook\"],\"editor.roomName.section.bathrooms\":[\"Bathrooms\"],\"editor.roomName.section.circulation\":[\"Circulation\"],\"editor.roomName.section.living\":[\"Living\"],\"editor.roomName.section.mezzanine\":[\"Mezzanine\"],\"editor.roomName.section.outdoor\":[\"Outdoor\"],\"editor.roomName.section.sleeping\":[\"Sleeping\"],\"editor.roomName.section.utility\":[\"Utility & storage\"],\"editor.roomName.section.work\":[\"Work & hobbies\"],\"editor.roomName.showerRoom\":[\"Shower room\"],\"editor.roomName.stairwell\":[\"Stairwell\"],\"editor.roomName.storage\":[\"Storage\"],\"editor.roomName.studio\":[\"Studio\"],\"editor.roomName.study\":[\"Study\"],\"editor.roomName.sunroom\":[\"Sunroom\"],\"editor.roomName.terrace\":[\"Terrace\"],\"editor.roomName.toilet\":[\"Toilet\"],\"editor.roomName.utilityRoom\":[\"Utility room\"],\"editor.roomName.veranda\":[\"Veranda\"],\"editor.roomName.walkInCloset\":[\"Walk-in closet\"],\"editor.roomName.workshop\":[\"Workshop\"],\"editor.theEditorSceneFailedToRender\":[\"The editor scene failed to render\"],\"editor.toolHint.aCurtainWallTakesNoCorner.1qxjv5i\":[\"A curtain wall takes no corner window\"],\"editor.toolHint.aCurvedWallTakesNoCorner.1vdnaw5\":[\"A curved wall takes no corner window\"],\"editor.toolHint.addACornerClickTheFirst.o4r67t\":[\"Add a corner · click the first to close\"],\"editor.toolHint.anotherOpeningIsInTheWay.11l9dd0\":[\"Another opening is in the way at the corner\"],\"editor.toolHint.autoHangers.10554ka\":[\"Auto hangers\"],\"editor.toolHint.autoHangersClickOrPressH.rwa3ka\":[\"Auto hangers - click or press H to toggle\"],\"editor.toolHint.autoHangersOff.7yx01x\":[\"Auto hangers: Off\"],\"editor.toolHint.autoHangersOn.10b1umh\":[\"Auto hangers: On\"],\"editor.toolHint.bypassSnapping.w5lmdv\":[\"Bypass snapping\"],\"editor.toolHint.cancel.ew9em3\":[\"Cancel\"],\"editor.toolHint.cancelMove.lvp31c\":[\"Cancel move\"],\"editor.toolHint.cancelRunExit.zqjf3h\":[\"Cancel run / exit\"],\"editor.toolHint.cancelStartPoint.1xbq2lh\":[\"Cancel start point\"],\"editor.toolHint.cornerWindow.1avkzpo\":[\"Corner window\"],\"editor.toolHint.cuts.1y0axps\":[\"Cuts\"],\"editor.toolHint.cutsValue.ouzhvb\":[\"Cuts: \",[\"value\"]],\"editor.toolHint.cutsValueEven.1ngsz3\":[\"Cuts: \",[\"value\"],\", even\"],\"editor.toolHint.cycleMonoGableButterfly.1poga3m\":[\"Cycle mono / gable / butterfly\"],\"editor.toolHint.cycleSnappingMode.1ct0gn6\":[\"Cycle snapping mode\"],\"editor.toolHint.doorStyleClickOrPressL.33pe65\":[\"Door style — click or press L to cycle\"],\"editor.toolHint.doorTypeClickOrPressO.1hhh8gt\":[\"Door type — click or press O to cycle\"],\"editor.toolHint.dropDownspoutFromOutlet.1k4h1m4\":[\"Drop downspout from outlet\"],\"editor.toolHint.ductDiameterDownUp.1wdz5vq\":[\"Duct diameter down / up\"],\"editor.toolHint.endRunCancel.59dh2w\":[\"End run / cancel\"],\"editor.toolHint.exit.engmg5\":[\"Exit\"],\"editor.toolHint.exitDrawing.9noxyb\":[\"Exit drawing\"],\"editor.toolHint.finishAndContinue.1gpfsks\":[\"Finish and continue\"],\"editor.toolHint.finishCeiling.1c1lfel\":[\"Finish ceiling\"],\"editor.toolHint.finishGridAxis.1wvrfhr\":[\"Finish grid axis\"],\"editor.toolHint.finishMeasurement.1e4gv16\":[\"Finish measurement\"],\"editor.toolHint.finishMultiPointWitnesses.8wzskz\":[\"Finish multi-point witnesses\"],\"editor.toolHint.finishSlab.xmnm8e\":[\"Finish slab\"],\"editor.toolHint.flipSide.172xku9\":[\"Flip side\"],\"editor.toolHint.followTraceALineset.mgquwe\":[\"Follow: trace a lineset\"],\"editor.toolHint.forcePlace.1hq1nr\":[\"Force place\"],\"editor.toolHint.freePlacement.1nztdac\":[\"Free placement\"],\"editor.toolHint.goVerticalClickToPlace.dg8g6m\":[\"Go vertical ↕, click to place\"],\"editor.toolHint.highlightOutlet.65hoq8\":[\"Highlight outlet\"],\"editor.toolHint.joinAsACornerWindow.jvdp4j\":[\"Join as a corner window\"],\"editor.toolHint.key.altDrag.ai3wn9\":[\"Alt + drag\"],\"editor.toolHint.key.backspace.qy6qx8\":[\"Backspace\"],\"editor.toolHint.key.click.m8sun\":[\"Click\"],\"editor.toolHint.key.clickAgain.190ws9j\":[\"Click again\"],\"editor.toolHint.key.command.1j2mkia\":[\"Command\"],\"editor.toolHint.key.control.10fbl8e\":[\"Control\"],\"editor.toolHint.key.delete.oay2cq\":[\"Delete\"],\"editor.toolHint.key.doubleClick.vlma6o\":[\"Double click\"],\"editor.toolHint.key.drag.8pwtpf\":[\"Drag\"],\"editor.toolHint.key.enter.1ctpui5\":[\"Enter\"],\"editor.toolHint.key.hover.6xw79p\":[\"Hover\"],\"editor.toolHint.key.hoverADuctEnd.19axr3b\":[\"Hover a duct end\"],\"editor.toolHint.key.hoverAPipeEnd.1jbum5f\":[\"Hover a pipe end\"],\"editor.toolHint.key.hoverGutter.1dwcsno\":[\"Hover gutter\"],\"editor.toolHint.key.leftClick.s4gwfc\":[\"Left click\"],\"editor.toolHint.key.middleClick.1jbaan4\":[\"Middle click\"],\"editor.toolHint.key.rShiftR.13bnobh\":[\"R / Shift+R\"],\"editor.toolHint.key.rightClick.1ovld0h\":[\"Right click\"],\"editor.toolHint.key.scroll.ai6wr0\":[\"Scroll\"],\"editor.toolHint.key.scrollWheel.18j0ix7\":[\"Scroll wheel\"],\"editor.toolHint.key.space.1hrh82t\":[\"Space\"],\"editor.toolHint.key.tab.1xsal0s\":[\"Tab\"],\"editor.toolHint.mountFloorCeilingWall.32dxpv\":[\"Mount: floor / ceiling / wall\"],\"editor.toolHint.noRoomForTheMatchingWindow.1755948\":[\"No room for the matching window on the other wall\"],\"editor.toolHint.noWallMeetsHere.19n99yc\":[\"No wall meets here\"],\"editor.toolHint.numberOfCutsScrollOrClick.1kqe84b\":[\"Number of cuts — scroll or click to change\"],\"editor.toolHint.pickWitnessPoint.k3hgh1\":[\"Pick witness point\"],\"editor.toolHint.pipeSizeDownUp.wp04og\":[\"Pipe size down / up\"],\"editor.toolHint.placeAndContinue.qfwkrq\":[\"Place and continue\"],\"editor.toolHint.placeBlock.1aylwrx\":[\"Place block\"],\"editor.toolHint.placeBoxVentOnRoof.kf88e5\":[\"Place box vent on roof\"],\"editor.toolHint.placeCabinet.b0ouyk\":[\"Place cabinet\"],\"editor.toolHint.placeCanopyOrSetTheNext.12l7zf8\":[\"Place canopy or set the next run point\"],\"editor.toolHint.placeChimneyOnRoof.19dbqu\":[\"Place chimney on roof\"],\"editor.toolHint.placeColumn.1w2vq86\":[\"Place column\"],\"editor.toolHint.placeCupolaOnRoof.ofx3bn\":[\"Place cupola on roof\"],\"editor.toolHint.placeDimensionLineWhenNeeded.bjw2cj\":[\"Place dimension line when needed\"],\"editor.toolHint.placeDoorOnWall.1jwadf\":[\"Place door on wall\"],\"editor.toolHint.placeDormerOnRoof.1w518a6\":[\"Place dormer on roof\"],\"editor.toolHint.placeElevator.1f65zva\":[\"Place elevator\"],\"editor.toolHint.placeEyebrowVentOnRoof.1h1tqxn\":[\"Place eyebrow vent on roof\"],\"editor.toolHint.placeFitting.1pmx3vn\":[\"Place fitting\"],\"editor.toolHint.placeGutterOnRoofEave.llwzf9\":[\"Place gutter on roof eave\"],\"editor.toolHint.placeItLockedTo45.16e4csk\":[\"Place it (locked to 45°)\"],\"editor.toolHint.placeItem.teynf\":[\"Place item\"],\"editor.toolHint.placeMeasurementPoint.bsatli\":[\"Place measurement point\"],\"editor.toolHint.placeOnAFence.1dptstr\":[\"Place on a fence\"],\"editor.toolHint.placeRegister.1uebycd\":[\"Place register\"],\"editor.toolHint.placeRidgeVentOnRoof.2tpd8r\":[\"Place ridge vent on roof\"],\"editor.toolHint.placeShelf.y4l3iw\":[\"Place shelf\"],\"editor.toolHint.placeSkylightOnRoof.e215pe\":[\"Place skylight on roof\"],\"editor.toolHint.placeSolarPanelArrayOnRoof.kk11fn\":[\"Place solar panel array on roof\"],\"editor.toolHint.placeSpawnPoint.205o25\":[\"Place spawn point\"],\"editor.toolHint.placeStairs.zwxxu2\":[\"Place stairs\"],\"editor.toolHint.placeTrap.1gxemn3\":[\"Place trap\"],\"editor.toolHint.placeTurbineVentOnRoof.1iqeluf\":[\"Place turbine vent on roof\"],\"editor.toolHint.placeUnit.8zkx4q\":[\"Place unit\"],\"editor.toolHint.placeWindowOnWall.1k3qnfb\":[\"Place window on wall\"],\"editor.toolHint.placeWithoutTheCornerSnap.1nifqew\":[\"Place without the corner snap\"],\"editor.toolHint.placement.13lcvts\":[\"Placement\"],\"editor.toolHint.placementAuto.1caa52d\":[\"Placement: Auto\"],\"editor.toolHint.placementGround.1ruz145\":[\"Placement: Ground\"],\"editor.toolHint.placementRoof.renkw8\":[\"Placement: Roof\"],\"editor.toolHint.placementSurfaceClickOrPressP.w56h19\":[\"Placement surface - click or press P to cycle\"],\"editor.toolHint.placementType.1mdpl60\":[\"Placement type\"],\"editor.toolHint.placementTypeClickOrPressI.10cgxh2\":[\"Placement type — click or press I to toggle\"],\"editor.toolHint.removeLastPoint.2dmdcx\":[\"Remove last point\"],\"editor.toolHint.removeLastWitness.1b6vvzw\":[\"Remove last witness\"],\"editor.toolHint.rotate.1thqa0a\":[\"Rotate\"],\"editor.toolHint.rotate45.9zq68u\":[\"Rotate ±45°\"],\"editor.toolHint.rotate45FloorCeiling.m9t57d\":[\"Rotate ±45° (floor / ceiling)\"],\"editor.toolHint.rotateGhost15.rsa52c\":[\"Rotate ghost ±15°\"],\"editor.toolHint.rotateOrFlipTheRunSide.t5ior7\":[\"Rotate or flip the run side\"],\"editor.toolHint.rotateRoofDirection90.tvbji2\":[\"Rotate roof direction 90°\"],\"editor.toolHint.rotateSpawnPoint.1opcuu7\":[\"Rotate spawn point\"],\"editor.toolHint.roundRectangularOval.e4nh6x\":[\"Round / rectangular / oval\"],\"editor.toolHint.setFenceStartEnd.1phbwsq\":[\"Set fence start / end\"],\"editor.toolHint.setOneCornerThenTheOpposite.8tsl49\":[\"Set one corner, then the opposite\"],\"editor.toolHint.setRoofFootprint.p50n0o\":[\"Set roof footprint\"],\"editor.toolHint.setWallStartEnd.1r8ubcx\":[\"Set wall start / end\"],\"editor.toolHint.slopeLevel.ftqp67\":[\"Slope / level\"],\"editor.toolHint.snapOntoTheRun.86yhmp\":[\"Snap onto the run\"],\"editor.toolHint.splitAtTheMarks.x5tpdd\":[\"Split at the marks\"],\"editor.toolHint.startGridAxis.k92yza\":[\"Start grid axis\"],\"editor.toolHint.startLineset.23q8dh\":[\"Start lineset\"],\"editor.toolHint.startLiquidLine.1rlxsgd\":[\"Start liquid line\"],\"editor.toolHint.startRun.r6fc5u\":[\"Start run\"],\"editor.toolHint.startSegment.rolym6\":[\"Start segment\"],\"editor.toolHint.stepBackOrCancel.zbfdkn\":[\"Step back or cancel\"],\"editor.toolHint.style.nf3vcm\":[\"Style\"],\"editor.toolHint.styleBarn.k9n1x\":[\"Style: Barn\"],\"editor.toolHint.styleCasement.ziklec\":[\"Style: Casement\"],\"editor.toolHint.styleCraftsman.52e6a9\":[\"Style: Craftsman\"],\"editor.toolHint.styleDoubleHung.1lg8pkg\":[\"Style: Double-hung\"],\"editor.toolHint.styleFrench.1ue3j64\":[\"Style: French\"],\"editor.toolHint.styleGlass.qudnb4\":[\"Style: Glass\"],\"editor.toolHint.styleGrid.1vuq4po\":[\"Style: Grid\"],\"editor.toolHint.styleHalfLouvered.13b1few\":[\"Style: Half-louvered\"],\"editor.toolHint.styleHorizontalBands.12ethxk\":[\"Style: Horizontal bands\"],\"editor.toolHint.styleModern.1fh8hhn\":[\"Style: Modern\"],\"editor.toolHint.stylePanel.922jze\":[\"Style: Panel\"],\"editor.toolHint.stylePaneledGlass.17a17en\":[\"Style: Paneled glass\"],\"editor.toolHint.styleShaker.49z17k\":[\"Style: Shaker\"],\"editor.toolHint.styleSingle.6f3cm0\":[\"Style: Single\"],\"editor.toolHint.styleSixPanel.u49laj\":[\"Style: Six-panel\"],\"editor.toolHint.styleSliding.q81s0i\":[\"Style: Sliding\"],\"editor.toolHint.styleTallGrid.1eotg3x\":[\"Style: Tall grid\"],\"editor.toolHint.styleTransom.kb9bh6\":[\"Style: Transom\"],\"editor.toolHint.styleTripleHung.pxnqi3\":[\"Style: Triple-hung\"],\"editor.toolHint.styleWideGrid.12n27et\":[\"Style: Wide grid\"],\"editor.toolHint.switchRotationAxisYXZ.15lohm6\":[\"Switch rotation axis (Y → X → Z)\"],\"editor.toolHint.theWallsMeetAtTooSharp.kh3wi3\":[\"The walls meet at too sharp or too flat an angle\"],\"editor.toolHint.theWindowWaitingThereIsTaller.1tqwez4\":[\"The window waiting there is taller than this wall\"],\"editor.toolHint.threeOrMoreWallsMeetHere.rgifif\":[\"Three or more walls meet here\"],\"editor.toolHint.traceCeilingOutline.1b639wv\":[\"Trace ceiling outline\"],\"editor.toolHint.traceSlabOutline.z0j2lc\":[\"Trace slab outline\"],\"editor.toolHint.type.1m2zofh\":[\"Type\"],\"editor.toolHint.typeAwning.1cj59al\":[\"Type: Awning\"],\"editor.toolHint.typeBarn.sbnygq\":[\"Type: Barn\"],\"editor.toolHint.typeBay.1200hc1\":[\"Type: Bay\"],\"editor.toolHint.typeBow.14s2t9p\":[\"Type: Bow\"],\"editor.toolHint.typeCabinet.1r68je5\":[\"Type: Cabinet\"],\"editor.toolHint.typeCasement.176uo9j\":[\"Type: Casement\"],\"editor.toolHint.typeDouble.af7w4i\":[\"Type: Double\"],\"editor.toolHint.typeDoubleHung.t482fu\":[\"Type: Double Hung\"],\"editor.toolHint.typeFixed.v1cjez\":[\"Type: Fixed\"],\"editor.toolHint.typeFolding.sxxyng\":[\"Type: Folding\"],\"editor.toolHint.typeFrench.1y57z1b\":[\"Type: French\"],\"editor.toolHint.typeHinged.1xrcfju\":[\"Type: Hinged\"],\"editor.toolHint.typeIsland.ufr3ce\":[\"Type: Island\"],\"editor.toolHint.typeLouvered.oxl1cz\":[\"Type: Louvered\"],\"editor.toolHint.typePocket.hc65x9\":[\"Type: Pocket\"],\"editor.toolHint.typeSingleHung.p53pyl\":[\"Type: Single Hung\"],\"editor.toolHint.typeSliding.nwmr3f\":[\"Type: Sliding\"],\"editor.toolHint.verticalStackClickToPlace.ijcn4q\":[\"Vertical stack ↕, click to place\"],\"editor.toolHint.wasteVent.1hvi3vj\":[\"Waste / vent\"],\"editor.toolHint.windowStyleClickOrPressL.ah7qm9\":[\"Window style — click or press L to cycle\"],\"editor.toolHint.windowTypeClickOrPressO.wv4x35\":[\"Window type — click or press O to cycle\"],\"editor.views.plugins\":[\"Plugins\"],\"editor.views.view2d\":[\"2D\"],\"editor.views.view3d\":[\"3D\"],\"editor.views.viewBar.auto\":[\"Auto\"],\"editor.views.viewBar.browsePlugins\":[\"Browse plugins\"],\"editor.views.viewBar.closeLabel\":[\"Close \",[\"label\"]],\"editor.views.viewBar.closeSplit\":[\"Close split (\\\\)\"],\"editor.views.viewBar.ground\":[\"Ground\"],\"editor.views.viewBar.groundSolid\":[[\"standing\",\"select\",{\"partly\":[\"Partly below grade · ground solid\"],\"below\":[\"Below grade · ground solid\"],\"other\":[\"Ground solid\"]}]],\"editor.views.viewBar.groundVeiled\":[[\"standing\",\"select\",{\"partly\":[\"Partly below grade · ground veiled\"],\"below\":[\"Below grade · ground veiled\"],\"other\":[\"Ground veiled\"]}]],\"editor.views.viewBar.keepTheGroundSolid\":[\"Keep the ground solid\"],\"editor.views.viewBar.moreViews\":[\"More views\"],\"editor.views.viewBar.paneViews\":[\"Pane \",[\"pane\"],\" views\"],\"editor.views.viewBar.pinLabel\":[\"Pin \",[\"label\"]],\"editor.views.viewBar.pinToTheViewBar\":[\"Pin to the view bar\"],\"editor.views.viewBar.solid\":[\"Solid\"],\"editor.views.viewBar.split\":[\"Split (\\\\)\"],\"editor.views.viewBar.split2\":[\"Split\"],\"editor.views.viewBar.swapPanes\":[\"Swap panes\"],\"editor.views.viewBar.unpinFromTheViewBar\":[\"Unpin from the view bar\"],\"editor.views.viewBar.unpinLabel\":[\"Unpin \",[\"label\"]],\"editor.views.viewBar.veilTheGroundOverALevel\":[\"Veil the ground over a level below grade\"],\"editor.views.viewBar.views\":[\"Views\"],\"editor.youCanRetryTheSceneOr\":[\"You can retry the scene or return home without reloading the whole app shell.\"],\"node.block.description\":[\"A topology-backed solid edited directly in the canvas.\"],\"node.block.label\":[\"Block\"],\"node.boxVent.description\":[\"Small louvered exhaust vent that sits on a roof slope.\"],\"node.boxVent.label\":[\"Box Vent\"],\"node.building.description\":[\"A building container holding one or more levels.\"],\"node.building.label\":[\"Building\"],\"node.cabinet.description\":[\"A configurable parametric base cabinet.\"],\"node.cabinet.label\":[\"Modular Cabinet\"],\"node.cabinetModule.description\":[\"An editable module inside a modular cabinet run.\"],\"node.cabinetModule.label\":[\"Cabinet Module\"],\"node.ceiling.description\":[\"A polygon-bounded ceiling surface that hosts ceiling-mounted items.\"],\"node.ceiling.label\":[\"Ceiling\"],\"node.ceiling.panel.addHole\":[\"Add Hole\"],\"node.ceiling.panel.area\":[\"Area\"],\"node.ceiling.panel.auto\":[\"Auto\"],\"node.ceiling.panel.ceiling\":[\"Ceiling\"],\"node.ceiling.panel.customHeight\":[\"Custom height\"],\"node.ceiling.panel.cutOpening\":[\"Cut opening\"],\"node.ceiling.panel.done\":[\"Done\"],\"node.ceiling.panel.followsLevel\":[\"Follows level\"],\"node.ceiling.panel.height\":[\"Height\"],\"node.ceiling.panel.high30m\":[\"High (3.0m)\"],\"node.ceiling.panel.high90\":[\"High (9'0\\\")\"],\"node.ceiling.panel.holes\":[\"Holes\"],\"node.ceiling.panel.info\":[\"Info\"],\"node.ceiling.panel.limitedByLevel\":[\"Limited by the level to \",[\"height\"],\" — raise the level height for a taller ceiling.\"],\"node.ceiling.panel.low24m\":[\"Low (2.4m)\"],\"node.ceiling.panel.low80\":[\"Low (8'0\\\")\"],\"node.ceiling.panel.move\":[\"Move\"],\"node.ceiling.panel.noHoles\":[\"No holes\"],\"node.ceiling.panel.standard25m\":[\"Standard (2.5m)\"],\"node.ceiling.panel.standard86\":[\"Standard (8'6\\\")\"],\"node.ceiling.panel.tallerThanLevel\":[\"Taller than this level (\",[\"available\"],\" available). Raise the level height first.\"],\"node.chimney.description\":[\"Vertical masonry stack on a roof segment.\"],\"node.chimney.label\":[\"Chimney\"],\"node.column.description\":[\"A parametric column with configurable cross-section, base, and capital.\"],\"node.column.label\":[\"Column\"],\"node.constructionDimension.description\":[\"Associative linear, curved, circular, angular, or coordinate plan dimension.\"],\"node.constructionDimension.label\":[\"Construction Dimension\"],\"node.cornerRadius.bottomLeft\":[\"Bottom Left\"],\"node.cornerRadius.bottomRight\":[\"Bottom Right\"],\"node.cornerRadius.topLeft\":[\"Top Left\"],\"node.cornerRadius.topRight\":[\"Top Right\"],\"node.cupola.description\":[\"Louvered roof lantern with a dome or pyramid cap and optional finial.\"],\"node.cupola.label\":[\"Cupola\"],\"node.cutout.autoElevator\":[\"Auto elevator cutout\"],\"node.cutout.autoStair\":[\"Auto stair cutout\"],\"node.cutout.opening\":[\"Opening\"],\"node.cutout.room\":[\"Room cutout\"],\"node.door.description\":[\"A door cut into a wall. Animated open/close state.\"],\"node.door.label\":[\"Door\"],\"node.door.panel.actions\":[\"Actions\"],\"node.door.panel.addSegment\":[\"+ Add Segment\"],\"node.door.panel.all\":[\"All\"],\"node.door.panel.arch\":[\"Arch\"],\"node.door.panel.archHeight\":[\"Arch Height\"],\"node.door.panel.barHeight\":[\"Bar Height\"],\"node.door.panel.columns\":[\"Columns\"],\"node.door.panel.contentPadding\":[\"Content Padding\"],\"node.door.panel.cornerRadius\":[\"Corner Radius\"],\"node.door.panel.customTheSegmentsMatchNoStyle\":[\"Custom: the segments match no style.\"],\"node.door.panel.delete\":[\"Delete\"],\"node.door.panel.depth\":[\"Depth\"],\"node.door.panel.dimensions\":[\"Dimensions\"],\"node.door.panel.direction\":[\"Direction\"],\"node.door.panel.divider\":[\"Divider\"],\"node.door.panel.door\":[\"Door\"],\"node.door.panel.doorCloser\":[\"Door Closer\"],\"node.door.panel.duplicate\":[\"Duplicate\"],\"node.door.panel.empty\":[\"Empty\"],\"node.door.panel.enableHandle\":[\"Enable Handle\"],\"node.door.panel.enableThreshold\":[\"Enable Threshold\"],\"node.door.panel.flipSide\":[\"Flip Side\"],\"node.door.panel.fold\":[\"Fold\"],\"node.door.panel.frame\":[\"Frame\"],\"node.door.panel.garage\":[\"Garage\"],\"node.door.panel.glass\":[\"Glass\"],\"node.door.panel.handle\":[\"Handle\"],\"node.door.panel.handleSide\":[\"Handle Side\"],\"node.door.panel.hardware\":[\"Hardware\"],\"node.door.panel.height\":[\"Height\"],\"node.door.panel.hingesSide\":[\"Hinges Side\"],\"node.door.panel.horizontal\":[\"Horizontal\"],\"node.door.panel.individual\":[\"Individual\"],\"node.door.panel.inset\":[\"Inset\"],\"node.door.panel.inward\":[\"Inward\"],\"node.door.panel.left\":[\"Left\"],\"node.door.panel.move\":[\"Move\"],\"node.door.panel.open\":[\"Open\"],\"node.door.panel.opening\":[\"Opening\"],\"node.door.panel.openingShape\":[\"Opening Shape\"],\"node.door.panel.outward\":[\"Outward\"],\"node.door.panel.panel\":[\"Panel\"],\"node.door.panel.panels\":[\"Panels\"],\"node.door.panel.panicBar\":[\"Panic Bar\"],\"node.door.panel.pocket\":[\"Pocket\"],\"node.door.panel.position\":[\"Position\"],\"node.door.panel.rail\":[\"Rail\"],\"node.door.panel.rect\":[\"Rect\"],\"node.door.panel.remove\":[\"- Remove\"],\"node.door.panel.revealRadius\":[\"Reveal Radius\"],\"node.door.panel.right\":[\"Right\"],\"node.door.panel.rounded\":[\"Rounded\"],\"node.door.panel.segments\":[\"Segments\"],\"node.door.panel.sizeIsLimitedToTheWall\":[\"Size is limited to the wall, including clearance for the opening frame.\"],\"node.door.panel.slide\":[\"Slide\"],\"node.door.panel.style\":[\"Style\"],\"node.door.panel.swing\":[\"Swing\"],\"node.door.panel.thickness\":[\"Thickness\"],\"node.door.panel.threshold\":[\"Threshold\"],\"node.door.panel.topShape\":[\"Top Shape\"],\"node.door.panel.type\":[\"Type\"],\"node.door.panel.vertical\":[\"Vertical\"],\"node.door.panel.wall\":[\"wall\"],\"node.door.panel.width\":[\"Width\"],\"node.door.type.barn\":[\"Barn\"],\"node.door.type.double\":[\"Double\"],\"node.door.type.folding\":[\"Folding\"],\"node.door.type.french\":[\"French\"],\"node.door.type.garageRollup\":[\"Roll-up\"],\"node.door.type.garageSectional\":[\"Sectional\"],\"node.door.type.garageTiltup\":[\"Tilt-up\"],\"node.door.type.hinged\":[\"Hinged\"],\"node.door.type.pocket\":[\"Pocket\"],\"node.door.type.sliding\":[\"Sliding\"],\"node.dormer.description\":[\"House-shaped protrusion on a roof segment.\"],\"node.dormer.label\":[\"Dormer\"],\"node.downspout.description\":[\"Vertical drop pipe from a gutter outlet to the ground.\"],\"node.downspout.label\":[\"Downspout\"],\"node.ductFitting.description\":[\"Elbow, tee, reducer, or square-to-round transition connecting duct runs.\"],\"node.ductFitting.label\":[\"Duct Fitting\"],\"node.ductSegment.description\":[\"HVAC duct run — polyline of round, rect, or flat-oval sections.\"],\"node.ductSegment.label\":[\"Duct\"],\"node.ductTerminal.description\":[\"Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar.\"],\"node.ductTerminal.label\":[\"Register\"],\"node.elevator.description\":[\"A multi-level elevator shaft with configurable openings per level.\"],\"node.elevator.label\":[\"Elevator\"],\"node.eyebrowVent.description\":[\"Low curved lens-shaped roof vent with a louvered front.\"],\"node.eyebrowVent.label\":[\"Eyebrow Vent\"],\"node.fence.description\":[\"A straight or curved fence segment with configurable posts and infill.\"],\"node.fence.label\":[\"Fence\"],\"node.fenceGate.description\":[\"A gate hosted by a fence.\"],\"node.fenceGate.label\":[\"Gate\"],\"node.fenceOpening.description\":[\"An intentional opening in a fence.\"],\"node.fenceOpening.label\":[\"Open Passage\"],\"node.floorOpening.label\":[\"Floor opening\"],\"node.guide.description\":[\"A measurement / reference annotation (linear, area, or arc).\"],\"node.guide.label\":[\"Guide\"],\"node.gutter.description\":[\"Rain-water channel running along the eave of a roof segment.\"],\"node.gutter.label\":[\"Gutter\"],\"node.hole.manual\":[\"Manual\"],\"node.holeEditing\":[\"Hole \",[\"number\"],\" (Editing)\"],\"node.holeNumber\":[\"Hole \",[\"number\"]],\"node.holeSummary\":[[\"area\"],\" m² · \",[\"count\",\"plural\",{\"one\":[\"#\",\" pt\"],\"other\":[\"#\",\" pts\"]}],\" · \",[\"source\"]],\"node.hvacEquipment.description\":[\"Furnace, air handler, or condenser — duct runs connect to its supply/return collars.\"],\"node.hvacEquipment.label\":[\"HVAC Unit\"],\"node.importedMesh.description\":[\"Geometry preserved from an imported model when no native Pascal shape exists.\"],\"node.importedMesh.label\":[\"Imported Mesh\"],\"node.item.description\":[\"A catalog-backed item (furniture, fixtures, decorations).\"],\"node.item.label\":[\"Item\"],\"node.item.panel.actions\":[\"Actions\"],\"node.item.panel.delete\":[\"Delete\"],\"node.item.panel.dimensions\":[\"Dimensions\"],\"node.item.panel.duplicate\":[\"Duplicate\"],\"node.item.panel.info\":[\"Info\"],\"node.item.panel.move\":[\"Move\"],\"node.item.panel.pos\":[\"pos\"],\"node.item.panel.position\":[\"Position\"],\"node.item.panel.rot\":[\"rot\"],\"node.item.panel.rotation\":[\"Rotation\"],\"node.item.panel.scale\":[\"Scale\"],\"node.item.panel.scale2\":[\"scale\"],\"node.item.panel.uniformScale\":[\"Uniform Scale\"],\"node.item.panel.xyz\":[\"XYZ\"],\"node.leanToExtension.description\":[\"An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage.\"],\"node.leanToExtension.label\":[\"Canopy\"],\"node.level.description\":[\"A single floor of a building, holding walls / slabs / ceilings / items.\"],\"node.level.label\":[\"Level\"],\"node.lineset.description\":[\"Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil.\"],\"node.lineset.label\":[\"Lineset\"],\"node.liquidLine.description\":[\"Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset.\"],\"node.liquidLine.label\":[\"Liquid Line\"],\"node.measurement.description\":[\"A persistent distance, angle, area, perimeter, or volume annotation.\"],\"node.measurement.label\":[\"Measurement\"],\"node.numberedName\":[[\"kind\"],\" \",[\"number\"]],\"node.panel.currently\":[\"Currently \",[\"value\"]],\"node.pipeFitting.description\":[\"DWV joint — elbow bend, 45° wye, or sanitary tee.\"],\"node.pipeFitting.label\":[\"Pipe Fitting\"],\"node.pipeSegment.description\":[\"Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S.\"],\"node.pipeSegment.label\":[\"DWV Pipe\"],\"node.pipeTrap.description\":[\"DWV P-trap — water seal on the waste line. The trap arm runs to the vent.\"],\"node.pipeTrap.label\":[\"Trap\"],\"node.proceduralItem.description\":[\"Experimental editable recipe\"],\"node.proceduralItem.label\":[\"Procedural item\"],\"node.ridgeVent.description\":[\"Ventilation strip running along the ridge of a roof segment.\"],\"node.ridgeVent.label\":[\"Ridge Vent\"],\"node.roof.barrelPanel.archBays\":[\"Arch bays\"],\"node.roof.barrelPanel.barrelArch\":[\"Barrel arch\"],\"node.roof.barrelPanel.flatPanesFollowACircularArch\":[\"Flat panes follow a circular arch. Rise is measured from the eaves.\"],\"node.roof.barrelPanel.rise\":[\"Rise\"],\"node.roof.description\":[\"A pitched / hip / gable roof composed of one or more segments.\"],\"node.roof.glazing.face.archBay\":[\"Arch bay \",[\"number\"]],\"node.roof.glazing.face.back\":[\"Back slope\"],\"node.roof.glazing.face.endLeft\":[\"Left end\"],\"node.roof.glazing.face.endRight\":[\"Right end\"],\"node.roof.glazing.face.front\":[\"Front slope\"],\"node.roof.glazing.face.slope\":[\"Shed slope\"],\"node.roof.glazingPanel.changesApplyToAllLengthRoof\":[\"Changes apply to all \",[\"length\"],\" roof segments.\"],\"node.roof.glazingPanel.chooseOneRoofSystemToEdit\":[\"Choose one roof system to edit settings for all selected segments.\"],\"node.roof.glazingPanel.closeTheRoofEnds\":[\"Close the roof ends\"],\"node.roof.glazingPanel.defaultPanelInfill\":[\"Default panel infill\"],\"node.roof.glazingPanel.dividesEachRoofFaceIntoColumns\":[\"Divides each roof face into columns.\"],\"node.roof.glazingPanel.dividesTheLengthOfEachArch\":[\"Divides the length of each arch bay into columns.\"],\"node.roof.glazingPanel.endInfillFillsTheSpaceAbove\":[\"End infill fills the space above the walls. Edit room walls and ceilings separately.\"],\"node.roof.glazingPanel.frameColor\":[\"Frame color\"],\"node.roof.glazingPanel.frameDepth\":[\"Frame depth\"],\"node.roof.glazingPanel.frameWidth\":[\"Frame width\"],\"node.roof.glazingPanel.framing\":[\"Framing\"],\"node.roof.glazingPanel.glass\":[\"Glass\"],\"node.roof.glazingPanel.glassTint\":[\"Glass tint\"],\"node.roof.glazingPanel.glazed\":[\"Glazed\"],\"node.roof.glazingPanel.glazingIsAvailableForGableStraight\":[\"Glazing is available for gable, straight shed, and barrel roofs.\"],\"node.roof.glazingPanel.gridAcrossTheRoof\":[\"Grid across the roof\"],\"node.roof.glazingPanel.gridAlongTheLength\":[\"Grid along the length\"],\"node.roof.glazingPanel.gridAlongTheSlope\":[\"Grid along the slope\"],\"node.roof.glazingPanel.gridWithinEachArchBay\":[\"Grid within each arch bay\"],\"node.roof.glazingPanel.infill\":[\"Infill\"],\"node.roof.glazingPanel.opacity\":[\"Opacity\"],\"node.roof.glazingPanel.paneThickness\":[\"Pane thickness\"],\"node.roof.glazingPanel.roofSystem\":[\"Roof system\"],\"node.roof.glazingPanel.roughness\":[\"Roughness\"],\"node.roof.glazingPanel.spacingIsMeasuredOnTheSlope\":[\"Spacing is measured on the slope, not its horizontal projection.\"],\"node.roof.glazingPanel.standard\":[\"Standard\"],\"node.roof.glazingPanel.subdividesEachFlatArchBayArch\":[\"Subdivides each flat arch bay. Arch bays controls the divisions around the curve.\"],\"node.roof.glazingPanelEditor.chooseAPanelToOverrideIts\":[\"Choose a panel to override its default infill.\"],\"node.roof.glazingPanelEditor.column2\":[\"Column\"],\"node.roof.glazingPanelEditor.custom\":[\"Custom\"],\"node.roof.glazingPanelEditor.default\":[\"Default\"],\"node.roof.glazingPanelEditor.grid\":[[\"columns\",\"plural\",{\"one\":[\"#\",\" column\"],\"other\":[\"#\",\" columns\"]}],\" · \",[\"rows\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"node.roof.glazingPanelEditor.individualPanels\":[\"Individual panels\"],\"node.roof.glazingPanelEditor.panelInfill\":[\"Panel infill\"],\"node.roof.glazingPanelEditor.resetToDefault\":[\"Reset to default\"],\"node.roof.glazingPanelEditor.roofFace\":[\"Roof face\"],\"node.roof.glazingPanelEditor.row2\":[\"Row\"],\"node.roof.glazingPanelEditor.selectedPanelInfill\":[\"Selected panel infill\"],\"node.roof.label\":[\"Roof\"],\"node.roof.panel.actions\":[\"Actions\"],\"node.roof.panel.addChimney\":[\"Add Chimney\"],\"node.roof.panel.addCupola\":[\"Add Cupola\"],\"node.roof.panel.addDormer\":[\"Add Dormer\"],\"node.roof.panel.addEyebrowVent\":[\"Add Eyebrow Vent\"],\"node.roof.panel.addGutter\":[\"Add Gutter\"],\"node.roof.panel.addSkylight\":[\"Add Skylight\"],\"node.roof.panel.addSolarPanel\":[\"Add Solar Panel\"],\"node.roof.panel.addVent\":[\"Add Vent\"],\"node.roof.panel.box\":[\"Box\"],\"node.roof.panel.boxVent\":[\"box vent\"],\"node.roof.panel.chimney\":[\"chimney\"],\"node.roof.panel.custom\":[\"Custom\"],\"node.roof.panel.delete\":[\"Delete\"],\"node.roof.panel.dormer\":[\"dormer\"],\"node.roof.panel.drawSegment\":[\"Draw Segment\"],\"node.roof.panel.duplicate\":[\"Duplicate\"],\"node.roof.panel.elements\":[\"Elements\"],\"node.roof.panel.followsWalls\":[\"Follows walls\"],\"node.roof.panel.gutter\":[\"gutter\"],\"node.roof.panel.level\":[\"Level\"],\"node.roof.panel.move\":[\"Move\"],\"node.roof.panel.moveToLevel\":[\"Move to \",[\"level\"]],\"node.roof.panel.moveToTheRoofLevel\":[\"Move to the roof level\"],\"node.roof.panel.onStoreyWalls\":[\"On \",[\"storey\"],\" with its walls, so it hides that floor's plan in solo and exploded views.\",[\"roofs\",\"plural\",{\"0\":[],\"1\":[],\"other\":[\" The floor's \",\"#\",\" roofs move together.\"]}]],\"node.roof.panel.position\":[\"Position\"],\"node.roof.panel.ridge\":[\"Ridge\"],\"node.roof.panel.ridgeVent\":[\"ridge vent\"],\"node.roof.panel.roof\":[\"Roof\"],\"node.roof.panel.rotation\":[\"Rotation\"],\"node.roof.panel.segmentType\":[[\"roofType\",\"select\",{\"hip\":[\"Hip\"],\"gable\":[\"Gable\"],\"shed\":[\"Shed\"],\"gambrel\":[\"Gambrel\"],\"dutch\":[\"Dutch\"],\"mansard\":[\"Mansard\"],\"flat\":[\"Flat\"],\"conical\":[\"Conical\"],\"barrel\":[\"Barrel\"],\"other\":[\"Roof\"]}]],\"node.roof.panel.segments\":[\"Segments\"],\"node.roof.panel.skylight\":[\"skylight\"],\"node.roof.panel.solarPanel\":[\"solar panel\"],\"node.roof.panel.turbine\":[\"Turbine\"],\"node.roof.panel.turbineVent\":[\"turbine vent\"],\"node.roofSegment.description\":[\"A single pitched plane of a parent roof.\"],\"node.roofSegment.label\":[\"Roof Segment\"],\"node.roofSegment.panel.actions\":[\"Actions\"],\"node.roofSegment.panel.angle\":[\"Angle\"],\"node.roofSegment.panel.arc\":[\"Arc\"],\"node.roofSegment.panel.autoGutters\":[\"Auto gutters\"],\"node.roofSegment.panel.autoRidgeVent\":[\"Auto ridge vent\"],\"node.roofSegment.panel.barrel\":[\"Barrel\"],\"node.roofSegment.panel.clippedVersion\":[\"Clipped version\"],\"node.roofSegment.panel.conical\":[\"Conical\"],\"node.roofSegment.panel.conicalShape\":[\"Conical Shape\"],\"node.roofSegment.panel.deckThick\":[\"Deck Thick.\"],\"node.roofSegment.panel.delete\":[\"Delete\"],\"node.roofSegment.panel.depth\":[\"Depth\"],\"node.roofSegment.panel.diameter\":[\"Diameter\"],\"node.roofSegment.panel.doneEditing\":[\"Done editing\"],\"node.roofSegment.panel.drainage\":[\"Drainage\"],\"node.roofSegment.panel.duplicate\":[\"Duplicate\"],\"node.roofSegment.panel.dutch\":[\"Dutch\"],\"node.roofSegment.panel.eaveOverhang\":[\"Eave overhang\"],\"node.roofSegment.panel.editFootprint\":[\"Edit footprint\"],\"node.roofSegment.panel.endOverhang\":[\"End overhang\"],\"node.roofSegment.panel.fascia\":[\"Fascia\"],\"node.roofSegment.panel.fasciaHeight\":[\"Fascia height\"],\"node.roofSegment.panel.flat\":[\"Flat\"],\"node.roofSegment.panel.footprint\":[\"Footprint\"],\"node.roofSegment.panel.gable\":[\"Gable\"],\"node.roofSegment.panel.gableOverhang\":[\"Gable overhang\"],\"node.roofSegment.panel.gambrel\":[\"Gambrel\"],\"node.roofSegment.panel.hip\":[\"Hip\"],\"node.roofSegment.panel.kinkDepth\":[\"Kink Depth\"],\"node.roofSegment.panel.kinkHeight\":[\"Kink Height\"],\"node.roofSegment.panel.length\":[\"Length\"],\"node.roofSegment.panel.mansard\":[\"Mansard\"],\"node.roofSegment.panel.move\":[\"Move\"],\"node.roofSegment.panel.pitch\":[\"Pitch\"],\"node.roofSegment.panel.position\":[\"Position\"],\"node.roofSegment.panel.reset\":[\"Reset\"],\"node.roofSegment.panel.roofSegment\":[\"Roof Segment\"],\"node.roofSegment.panel.roofType\":[\"Roof Type\"],\"node.roofSegment.panel.rotation\":[\"Rotation\"],\"node.roofSegment.panel.shape\":[\"Shape\"],\"node.roofSegment.panel.shed\":[\"Shed\"],\"node.roofSegment.panel.shingleThick\":[\"Shingle Thick.\"],\"node.roofSegment.panel.span\":[\"Span\"],\"node.roofSegment.panel.startAngle\":[\"Start Angle\"],\"node.roofSegment.panel.structure\":[\"Structure\"],\"node.roofSegment.panel.topRakeLength\":[\"Top Rake Length\"],\"node.roofSegment.panel.topRakeThick\":[\"Top Rake Thick.\"],\"node.roofSegment.panel.trim\":[\"Trim\"],\"node.roofSegment.panel.waistHeight\":[\"Waist Height\"],\"node.roofSegment.panel.waistLength\":[\"Waist Length\"],\"node.roofSegment.panel.waistWidth\":[\"Waist Width\"],\"node.roofSegment.panel.wall\":[\"Wall\"],\"node.roofSegment.panel.wallHeight\":[\"Wall Height\"],\"node.roofSegment.panel.wallThick\":[\"Wall Thick.\"],\"node.roofSegment.panel.width\":[\"Width\"],\"node.scan.description\":[\"A captured session with optional mesh, motion, media, and sensor data.\"],\"node.scan.label\":[\"Capture\"],\"node.segmentNumber\":[\"Segment \",[\"number\"]],\"node.separator.label\":[\"Separator\"],\"node.shared.systemCheckPanel.aboutTheseChecks\":[\"About these checks\"],\"node.shared.systemCheckPanel.allFindings\":[\"All findings\"],\"node.shared.systemCheckPanel.allSystems\":[\"All systems\"],\"node.shared.systemCheckPanel.connections\":[\"Connections\"],\"node.shared.systemCheckPanel.drainage\":[\"Drainage\"],\"node.shared.systemCheckPanel.error\":[\"Error\"],\"node.shared.systemCheckPanel.errors\":[\"Errors\"],\"node.shared.systemCheckPanel.filterSystemChecks\":[\"Filter system checks\"],\"node.shared.systemCheckPanel.hangers\":[\"Hangers\"],\"node.shared.systemCheckPanel.intersections\":[\"Intersections\"],\"node.shared.systemCheckPanel.locate\":[\"Locate \",[\"name\"],\" (\",[\"id\"],\")\"],\"node.shared.systemCheckPanel.missingItem\":[\"Missing item\"],\"node.shared.systemCheckPanel.noFindings\":[\"No findings\"],\"node.shared.systemCheckPanel.noFindingsInThisCategory\":[\"No findings in this category\"],\"node.shared.systemCheckPanel.openEnds\":[\"Open ends\"],\"node.shared.systemCheckPanel.openEndsAndSeparateBranchesMay\":[\"Open ends and separate branches may be intentional. Intersection checks use bounding boxes; inspect openings and clearances.\"],\"node.shared.systemCheckPanel.selectedConnectedSystem\":[\"Selected connected system\"],\"node.shared.systemCheckPanel.selectedRuns\":[\"Selected: \",[\"count\",\"plural\",{\"one\":[\"#\",\" run\"],\"other\":[\"#\",\" runs\"]}],\" · \",[\"length\"],\" m\"],\"node.shared.systemCheckPanel.separateBranches\":[\"Separate branches\"],\"node.shared.systemCheckPanel.showAllFindings\":[\"Show all findings\"],\"node.shared.systemCheckPanel.systemChecks\":[\"System checks\"],\"node.shared.systemCheckPanel.systemFinding\":[\"System finding\"],\"node.shared.systemCheckPanel.systemFindings\":[\"System findings\"],\"node.shared.systemCheckPanel.warning\":[\"Warning\"],\"node.shared.systemCheckPanel.warnings\":[\"Warnings\"],\"node.shelf.description\":[\"A configurable shelving unit. Items host on each row.\"],\"node.shelf.label\":[\"Shelf\"],\"node.site.description\":[\"The top-level container holding buildings, zones, and the property boundary.\"],\"node.site.label\":[\"Site\"],\"node.site.panel.address\":[\"Address\"],\"node.site.panel.apn\":[\"APN\"],\"node.site.panel.autoMostNorthFacingEdge\":[\"Auto — most north-facing edge\"],\"node.site.panel.contourIntervalSitePlanAnd3d\":[\"Contour interval (site plan and 3D)\"],\"node.site.panel.county\":[\"County\"],\"node.site.panel.eGRs60\":[\"e.g. RS-60\"],\"node.site.panel.eGTampaLdc27156\":[\"e.g. Tampa LDC §27-156\"],\"node.site.panel.every12In\":[\"every 12 in\"],\"node.site.panel.every24In\":[\"every 24 in\"],\"node.site.panel.every6In\":[\"every 6 in\"],\"node.site.panel.findParcel\":[\"Find parcel\"],\"node.site.panel.finding\":[\"Finding…\"],\"node.site.panel.frontStreetEdge\":[\"Front (street) edge\"],\"node.site.panel.lookingUpTheParcel\":[\"Looking up the parcel and the streets around it…\"],\"node.site.panel.lotArea\":[\"Lot area\"],\"node.site.panel.n1200WCassStTampaFl\":[\"1200 W Cass St, Tampa, FL\"],\"node.site.panel.noSurveyedLinesContoursAreDrawn\":[\"No surveyed lines — contours are drawn from the sculpted ground.\"],\"node.site.panel.none\":[\"none\"],\"node.site.panel.northRotation\":[\"North rotation\"],\"node.site.panel.orientation\":[\"Orientation\"],\"node.site.panel.parcel\":[\"Parcel\"],\"node.site.panel.parcelLookupFailed\":[\"Parcel lookup failed.\"],\"node.site.panel.projectLook\":[\"Project look\"],\"node.site.panel.saveCurrentLook\":[\"Save current look\"],\"node.site.panel.saveTheCurrentLightingAndDisplay\":[\"Save the current lighting and display as this project's default. Personal display changes stay in this browser.\"],\"node.site.panel.setbacks\":[\"Setbacks\"],\"node.site.panel.showGround\":[\"Show ground\"],\"node.site.panel.showTheContourLinesIn3d\":[\"Show the contour lines in 3D\"],\"node.site.panel.side\":[\"side\"],\"node.site.panel.site\":[\"Site\"],\"node.site.panel.source\":[\"Source\"],\"node.site.panel.sourceCitation\":[\"Source / citation\"],\"node.site.panel.streetAddress\":[\"Street address\"],\"node.site.panel.survey\":[\"survey\"],\"node.site.panel.surveyedContours\":[[\"count\",\"plural\",{\"one\":[\"#\",\" surveyed line\"],\"other\":[\"#\",\" surveyed lines\"]}],\" at \",[\"interval\"],\" ft (\",[\"datum\"],\") — \",[\"source\"]],\"node.site.panel.terrain\":[\"Terrain\"],\"node.site.panel.typeAnAddressFirst\":[\"Type an address first.\"],\"node.site.panel.useProjectLook\":[\"Use project look\"],\"node.site.panel.zone\":[\"Zone\"],\"node.site.setback.front\":[\"Front\"],\"node.site.setback.leftOverride\":[\"Left (override)\"],\"node.site.setback.rear\":[\"Rear\"],\"node.site.setback.rightOverride\":[\"Right (override)\"],\"node.site.setback.side\":[\"Side\"],\"node.skylight.description\":[\"Framed glass opening on a roof segment.\"],\"node.skylight.label\":[\"Skylight\"],\"node.slab.description\":[\"A polygon-bounded floor surface that hosts items on top.\"],\"node.slab.label\":[\"Slab\"],\"node.slab.panel.addHole\":[\"Add Hole\"],\"node.slab.panel.area\":[\"Area\"],\"node.slab.panel.auto\":[\"Auto\"],\"node.slab.panel.base\":[\"Base\"],\"node.slab.panel.cutHatch\":[\"Cut hatch\"],\"node.slab.panel.cutOpening\":[\"Cut opening\"],\"node.slab.panel.depth\":[\"Depth\"],\"node.slab.panel.done\":[\"Done\"],\"node.slab.panel.elevation\":[\"Elevation\"],\"node.slab.panel.extendsThePerimeterDownToTerrain\":[\"Extends the perimeter down to terrain. The flat surface, base, and thickness stay unchanged.\"],\"node.slab.panel.fixed\":[\"Fixed\"],\"node.slab.panel.floor\":[\"Floor\"],\"node.slab.panel.followsTerrain\":[\"Follows terrain\"],\"node.slab.panel.foundation\":[\"Foundation\"],\"node.slab.panel.holes\":[\"Holes\"],\"node.slab.panel.info\":[\"Info\"],\"node.slab.panel.move\":[\"Move\"],\"node.slab.panel.noHoles\":[\"No holes\"],\"node.slab.panel.rim\":[\"Rim\"],\"node.slab.panel.slab\":[\"Slab\"],\"node.slab.panel.standard2\":[\"Standard (2\\\")\"],\"node.slab.panel.standard5cm\":[\"Standard (5cm)\"],\"node.slab.panel.sunken15cm\":[\"Sunken (15cm)\"],\"node.slab.panel.sunken6\":[\"Sunken (6\\\")\"],\"node.slab.panel.surface\":[\"Surface\"],\"node.slab.panel.thick15cm\":[\"Thick (15cm)\"],\"node.slab.panel.thick6\":[\"Thick (6\\\")\"],\"node.slab.panel.thickness\":[\"Thickness\"],\"node.slab.panel.thin1\":[\"Thin (1\\\")\"],\"node.slab.panel.thin2cm\":[\"Thin (2cm)\"],\"node.solarPanel.description\":[\"Grid of photovoltaic panels mounted on a roof segment.\"],\"node.solarPanel.label\":[\"Solar Panel\"],\"node.spawn.description\":[\"Player or camera origin within a level. One per level.\"],\"node.spawn.label\":[\"Spawn Point\"],\"node.stair.description\":[\"A stair composed of one or more flights with configurable treads, risers, railings.\"],\"node.stair.label\":[\"Stair\"],\"node.stair.layout.straight\":[\"Straight\"],\"node.stair.layout.turn\":[[\"layout\"],\" turn\"],\"node.stair.panel.actions\":[\"Actions\"],\"node.stair.panel.addFlight\":[\"Add flight\"],\"node.stair.panel.addLanding\":[\"Add landing\"],\"node.stair.panel.applyLabelLayout\":[\"Apply \",[\"label\"],\" layout\"],\"node.stair.panel.autoCutout\":[\"Auto Cutout\"],\"node.stair.panel.balusters\":[\"Balusters\"],\"node.stair.panel.boards\":[\"Boards\"],\"node.stair.panel.both\":[\"Both\"],\"node.stair.panel.cable\":[\"Cable\"],\"node.stair.panel.centerColumn\":[\"Center Column\"],\"node.stair.panel.clockwise\":[\"Clockwise\"],\"node.stair.panel.connectedTo\":[\"Connected to \",[\"surface\"],\". Move the stair to connect to another edge.\"],\"node.stair.panel.connectedToSurface\":[\"Connected to a surface. Move the stair to connect to another edge.\"],\"node.stair.panel.construction\":[\"Construction\"],\"node.stair.panel.counterclockwise\":[\"Counterclockwise\"],\"node.stair.panel.curved\":[\"Curved\"],\"node.stair.panel.customRise\":[\"Custom rise\"],\"node.stair.panel.deck\":[\"Deck\"],\"node.stair.panel.delete\":[\"Delete\"],\"node.stair.panel.designTargets\":[\"Design targets\"],\"node.stair.panel.destination\":[\"Destination\"],\"node.stair.panel.dragNearADeckPatioConcrete\":[\"Drag near a deck, patio, concrete slab, or landing edge to fit the stair.\"],\"node.stair.panel.duplicate\":[\"Duplicate\"],\"node.stair.panel.equalAngle\":[\"Equal angle\"],\"node.stair.panel.equalGoing\":[\"Equal going\"],\"node.stair.panel.fitRisersAndGoing\":[\"Fit risers and going\"],\"node.stair.panel.fitToFloor\":[\"Fit To Floor\"],\"node.stair.panel.fitUniformRisers\":[\"Fit uniform risers\"],\"node.stair.panel.flightMeasurements\":[\"Flight \",[\"number\"],\": \",[\"count\",\"plural\",{\"one\":[\"#\",\" riser\"],\"other\":[\"#\",\" risers\"]}],\" · R \",[\"riser\"],\" · T \",[\"going\"],\" · \",[\"slope\"]],\"node.stair.panel.floorsCeilingsAndStairsOnly\":[\"Floors, ceilings and stairs only.\"],\"node.stair.panel.followsDeck\":[\"Follows deck\"],\"node.stair.panel.followsLevel\":[\"Follows level\"],\"node.stair.panel.fromLevel\":[\"From Level\"],\"node.stair.panel.geometry\":[\"Geometry\"],\"node.stair.panel.glass\":[\"Glass\"],\"node.stair.panel.headroom\":[\"Headroom:\"],\"node.stair.panel.height\":[\"Height\"],\"node.stair.panel.innerGap\":[\"Inner gap\"],\"node.stair.panel.innerRadius\":[\"Inner Radius\"],\"node.stair.panel.integrated\":[\"Integrated\"],\"node.stair.panel.landing\":[\"Landing\"],\"node.stair.panel.layout\":[\"Layout\"],\"node.stair.panel.left\":[\"Left\"],\"node.stair.panel.leftTurn\":[\"Left turn\"],\"node.stair.panel.measurements\":[\"Measurements\"],\"node.stair.panel.metal\":[\"Metal\"],\"node.stair.panel.move\":[\"Move\"],\"node.stair.panel.movingThisStairKeepsItsCurrent\":[\"Moving this stair keeps its current rise, steps, and run.\"],\"node.stair.panel.noOverheadSurface\":[\"No overhead surface\"],\"node.stair.panel.none\":[\"None\"],\"node.stair.panel.notEvaluated\":[\"Not evaluated\"],\"node.stair.panel.opening\":[\"Opening\"],\"node.stair.panel.openingOffset\":[\"Opening Offset\"],\"node.stair.panel.position\":[\"Position\"],\"node.stair.panel.postRail\":[\"Post & rail\"],\"node.stair.panel.railing\":[\"Railing\"],\"node.stair.panel.right\":[\"Right\"],\"node.stair.panel.rightTurn\":[\"Right turn\"],\"node.stair.panel.rise\":[\"Rise\"],\"node.stair.panel.rotation\":[\"Rotation\"],\"node.stair.panel.segmentType\":[[\"type\",\"select\",{\"landing\":[\"Landing\"],\"other\":[\"Stair\"]}]],\"node.stair.panel.segments\":[\"Segments\"],\"node.stair.panel.sizing\":[\"Sizing\"],\"node.stair.panel.snapToNearbySurfaces\":[\"Snap to nearby surfaces\"],\"node.stair.panel.spiral\":[\"Spiral\"],\"node.stair.panel.staircase\":[\"Staircase\"],\"node.stair.panel.stepSupports\":[\"Step Supports\"],\"node.stair.panel.steps\":[\"Steps\"],\"node.stair.panel.straight\":[\"Straight\"],\"node.stair.panel.style\":[\"Style\"],\"node.stair.panel.surfaceConnection\":[\"Surface connection\"],\"node.stair.panel.sweep\":[\"Sweep\"],\"node.stair.panel.targetGoing\":[\"Target going\"],\"node.stair.panel.targetHeadroom\":[\"Target headroom\"],\"node.stair.panel.targetMaxRiser\":[\"Target max riser\"],\"node.stair.panel.targetMinimumGoing\":[\"Target minimum going\"],\"node.stair.panel.thickness\":[\"Thickness\"],\"node.stair.panel.to\":[\"To\"],\"node.stair.panel.topLanding\":[\"Top Landing\"],\"node.stair.panel.type\":[\"Type\"],\"node.stair.panel.unavailable\":[\"Unavailable\"],\"node.stair.panel.walkingLineOffset\":[\"Walking line offset\"],\"node.stair.panel.width\":[\"Width\"],\"node.stair.panel.winder\":[\"Winder\"],\"node.stairSegment.description\":[\"A single flight of a parent stair.\"],\"node.stairSegment.label\":[\"Stair Segment\"],\"node.stairSegment.panel.actions\":[\"Actions\"],\"node.stairSegment.panel.attachment\":[\"Attachment\"],\"node.stairSegment.panel.delete\":[\"Delete\"],\"node.stairSegment.panel.dimensions\":[\"Dimensions\"],\"node.stairSegment.panel.duplicate\":[\"Duplicate\"],\"node.stairSegment.panel.editingSwitchesTheStairToCustom\":[\"Editing switches the stair to Custom rise\"],\"node.stairSegment.panel.equalAngle\":[\"Equal angle\"],\"node.stairSegment.panel.equalGoing\":[\"Equal going\"],\"node.stairSegment.panel.fillToFloor\":[\"Fill to floor\"],\"node.stairSegment.panel.flight\":[\"Flight\"],\"node.stairSegment.panel.flightShape\":[\"Flight shape\"],\"node.stairSegment.panel.front\":[\"Front\"],\"node.stairSegment.panel.height\":[\"Height\"],\"node.stairSegment.panel.innerGap\":[\"Inner gap\"],\"node.stairSegment.panel.landing\":[\"Landing\"],\"node.stairSegment.panel.left\":[\"Left\"],\"node.stairSegment.panel.leftTurn\":[\"Left turn\"],\"node.stairSegment.panel.length\":[\"Length\"],\"node.stairSegment.panel.move\":[\"Move\"],\"node.stairSegment.panel.position\":[\"Position\"],\"node.stairSegment.panel.right\":[\"Right\"],\"node.stairSegment.panel.rightTurn\":[\"Right turn\"],\"node.stairSegment.panel.rotation\":[\"Rotation\"],\"node.stairSegment.panel.stairSegment\":[\"Stair Segment\"],\"node.stairSegment.panel.steps\":[\"Steps\"],\"node.stairSegment.panel.straight\":[\"Straight\"],\"node.stairSegment.panel.structure\":[\"Structure\"],\"node.stairSegment.panel.thickness\":[\"Thickness\"],\"node.stairSegment.panel.type\":[\"Type\"],\"node.stairSegment.panel.walkingLineOffset\":[\"Walking line offset\"],\"node.stairSegment.panel.width\":[\"Width\"],\"node.stairSegment.panel.winder\":[\"Winder\"],\"node.structuralGrid.description\":[\"Persistent construction grid axis with identification bubbles.\"],\"node.structuralGrid.label\":[\"Structural Grid\"],\"node.turbineVent.description\":[\"Wind-driven spinning whirlybird exhaust vent for a roof slope.\"],\"node.turbineVent.label\":[\"Turbine Vent\"],\"node.unit.description\":[\"A named group of zones forming one apartment, hotel room or commercial lot.\"],\"node.unit.kind.apartment\":[\"Apartment\"],\"node.unit.kind.commercial\":[\"Commercial\"],\"node.unit.kind.common\":[\"Common\"],\"node.unit.kind.hotelRoom\":[\"Hotel room\"],\"node.unit.label\":[\"Unit\"],\"node.unit.panel.noZonesAssigned\":[\"No zones assigned yet.\"],\"node.unit.panel.nonAdjacentLevels\":[\"Members sit on levels that are not adjacent.\"],\"node.unit.panel.removeMember\":[\"Remove \",[\"name\"],\" from unit\"],\"node.unit.panel.removeZone\":[\"Remove zone from unit\"],\"node.unit.unitPanel.actions\":[\"Actions\"],\"node.unit.unitPanel.color\":[\"Color\"],\"node.unit.unitPanel.delete\":[\"Delete\"],\"node.unit.unitPanel.focus\":[\"Focus\"],\"node.unit.unitPanel.grossArea\":[\"Gross area\"],\"node.unit.unitPanel.kind\":[\"Kind\"],\"node.unit.unitPanel.levels\":[\"Levels\"],\"node.unit.unitPanel.members\":[\"Members\"],\"node.unit.unitPanel.name\":[\"Name\"],\"node.unit.unitPanel.noRoomsYetPickThisUnit\":[\"No rooms yet. Pick this unit from a room's panel, or draw zones while it is focused.\"],\"node.unit.unitPanel.report\":[\"Report\"],\"node.unit.unitPanel.unit\":[\"Unit\"],\"node.wall.curtain.cell\":[\"Column \",[\"column\"],\", row \",[\"row\"],\": \",[\"type\",\"select\",{\"glass\":[\"glass\"],\"solid\":[\"solid\"],\"other\":[\"empty\"]}]],\"node.wall.curtain.columnSpacing\":[[\"count\",\"plural\",{\"one\":[\"#\",\" column\"],\"other\":[\"#\",\" columns\"]}],\" · \",[\"spacing\"],\" grid spacing\"],\"node.wall.curtain.noPanels\":[\"No panels\"],\"node.wall.curtain.rowSpacing\":[[\"count\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}],\" · \",[\"spacing\"],\" grid spacing\"],\"node.wall.curtainWallPanel.applyTint\":[\"Apply tint\"],\"node.wall.curtainWallPanel.borderOpeningFrame\":[\"Border / opening frame\"],\"node.wall.curtainWallPanel.bottom\":[\"Bottom\"],\"node.wall.curtainWallPanel.bottomRow\":[\"Bottom row\"],\"node.wall.curtainWallPanel.cancelTint\":[\"Cancel tint\"],\"node.wall.curtainWallPanel.center\":[\"Center\"],\"node.wall.curtainWallPanel.chooseACellOrEnterIts\":[\"Choose a cell or enter its column and row. Use arrow keys to move between cells. Columns run from the wall start; rows count upward.\"],\"node.wall.curtainWallPanel.clearHiddenOverrides\":[\"Clear hidden overrides\"],\"node.wall.curtainWallPanel.column\":[\"Column\"],\"node.wall.curtainWallPanel.columnLayout\":[\"Column layout\"],\"node.wall.curtainWallPanel.columnRow\":[\"Column \",[\"column\"],\", row \",[\"row\"]],\"node.wall.curtainWallPanel.construction\":[\"Construction\"],\"node.wall.curtainWallPanel.continuousMullionsAndTransomsAssembledAlong\":[\"Continuous mullions and transoms assembled along the wall.\"],\"node.wall.curtainWallPanel.curtainWallPanelSelection\":[\"Curtain wall panel selection\"],\"node.wall.curtainWallPanel.customInfill\":[\"Custom infill\"],\"node.wall.curtainWallPanel.defaultPanel\":[\"Default panel\"],\"node.wall.curtainWallPanel.editIndividualPanels\":[\"Edit individual panels\"],\"node.wall.curtainWallPanel.effectiveThicknessLimited\":[\"Effective thickness: \",[\"thickness\"],\", limited by frame depth.\"],\"node.wall.curtainWallPanel.empty\":[\"Empty\"],\"node.wall.curtainWallPanel.enablePanelEditing\":[\"Enable panel editing\"],\"node.wall.curtainWallPanel.end\":[\"End\"],\"node.wall.curtainWallPanel.fixedSpacing\":[\"Fixed spacing\"],\"node.wall.curtainWallPanel.followingWallDefaults\":[\"Following wall defaults\"],\"node.wall.curtainWallPanel.frameDimensions\":[\"Frame dimensions\"],\"node.wall.curtainWallPanel.framing\":[\"Framing\"],\"node.wall.curtainWallPanel.fullyCapped\":[\"Fully capped\"],\"node.wall.curtainWallPanel.glass\":[\"Glass\"],\"node.wall.curtainWallPanel.glassAppearance\":[\"Glass appearance\"],\"node.wall.curtainWallPanel.glassAppearanceIsControlledByThe\":[\"Glass appearance is controlled by the paint tool.\"],\"node.wall.curtainWallPanel.glassTint\":[\"Glass tint\"],\"node.wall.curtainWallPanel.glazingGap\":[\"Glazing gap\"],\"node.wall.curtainWallPanel.gridLimitedTo32PanelsPer\":[\"Grid limited to 32 panels per axis. Spacing expands to fit this wall.\"],\"node.wall.curtainWallPanel.horizontalCaps\":[\"Horizontal caps\"],\"node.wall.curtainWallPanel.horizontalFrameWidth\":[\"Horizontal frame width\"],\"node.wall.curtainWallPanel.layout\":[\"Layout\"],\"node.wall.curtainWallPanel.lengthCustomPanelsAreOutsideThis\":[[\"length\"],\" custom panels are outside this grid. They return if the grid expands.\"],\"node.wall.curtainWallPanel.lowRoughnessIsSmoothHighRoughness\":[\"Low roughness is smooth; high roughness gives a matte surface in rendered shading.\"],\"node.wall.curtainWallPanel.maximumSpacing\":[\"Maximum spacing\"],\"node.wall.curtainWallPanel.moduleJointWidth\":[\"Module joint width\"],\"node.wall.curtainWallPanel.none\":[\"None\"],\"node.wall.curtainWallPanel.opacity\":[\"Opacity\"],\"node.wall.curtainWallPanel.opaqueBand\":[\"Opaque band\"],\"node.wall.curtainWallPanel.opaqueBandsReplaceAFullRow\":[\"Opaque bands replace a full row with solid panels. Apply their finish with the paint tool.\"],\"node.wall.curtainWallPanel.panelCount\":[\"Panel count\"],\"node.wall.curtainWallPanel.panelInfill\":[\"Panel infill\"],\"node.wall.curtainWallPanel.panelThickness\":[\"Panel thickness\"],\"node.wall.curtainWallPanel.panels\":[\"Panels\"],\"node.wall.curtainWallPanel.resetThisPanel\":[\"Reset this panel\"],\"node.wall.curtainWallPanel.row2\":[\"Row\"],\"node.wall.curtainWallPanel.rowLayout\":[\"Row layout\"],\"node.wall.curtainWallPanel.separateFramedModulesWithJointsBetween\":[\"Separate framed modules with joints between units.\"],\"node.wall.curtainWallPanel.solid\":[\"Solid\"],\"node.wall.curtainWallPanel.spacing\":[\"Spacing\"],\"node.wall.curtainWallPanel.start\":[\"Start\"],\"node.wall.curtainWallPanel.stickBuilt\":[\"Stick-built\"],\"node.wall.curtainWallPanel.structuralGlazing\":[\"Structural glazing\"],\"node.wall.curtainWallPanel.surfaceRoughness\":[\"Surface roughness\"],\"node.wall.curtainWallPanel.top\":[\"Top\"],\"node.wall.curtainWallPanel.topRow\":[\"Top row\"],\"node.wall.curtainWallPanel.uncappedMembersSitBehindTheGlazing\":[\"Uncapped members sit behind the glazing.\"],\"node.wall.curtainWallPanel.unitized\":[\"Unitized\"],\"node.wall.curtainWallPanel.useGlassSettingsInstead\":[\"Use glass settings instead\"],\"node.wall.curtainWallPanel.useTheDoorOrWindowTool\":[\"Use the Door or Window tool to add an opening through the wall.\"],\"node.wall.curtainWallPanel.verticalCaps\":[\"Vertical caps\"],\"node.wall.curtainWallPanel.verticalFrameWidth\":[\"Vertical frame width\"],\"node.wall.curtainWallPanel.wallSystem\":[\"Wall system\"],\"node.wall.description\":[\"A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items.\"],\"node.wall.label\":[\"Wall\"],\"node.wall.panel.actions\":[\"Actions\"],\"node.wall.panel.assembly\":[\"Assembly\"],\"node.wall.panel.auto\":[\"Auto\"],\"node.wall.panel.both\":[\"Both\"],\"node.wall.panel.bottom\":[\"Bottom\"],\"node.wall.panel.brickVeneer\":[\"Brick veneer\"],\"node.wall.panel.chairRail\":[\"Chair rail\"],\"node.wall.panel.cmu\":[\"CMU\"],\"node.wall.panel.colonial\":[\"Colonial\"],\"node.wall.panel.cove\":[\"Cove\"],\"node.wall.panel.craft\":[\"Craft\"],\"node.wall.panel.crownMolding\":[\"Crown molding\"],\"node.wall.panel.curtainWall\":[\"Curtain wall\"],\"node.wall.panel.curve\":[\"Curve\"],\"node.wall.panel.custom\":[\"Custom\"],\"node.wall.panel.customHeight\":[\"Custom height\"],\"node.wall.panel.depth\":[\"Depth\"],\"node.wall.panel.dimensions\":[\"Dimensions\"],\"node.wall.panel.drywall\":[\"Drywall\"],\"node.wall.panel.extendsDownwardToMeetTheTerrain\":[\"Extends downward to meet the terrain. Height and top stay unchanged.\"],\"node.wall.panel.exterior\":[\"Exterior\"],\"node.wall.panel.fiberCement\":[\"Fiber cement\"],\"node.wall.panel.fillToTerrain\":[\"Fill to terrain\"],\"node.wall.panel.flat\":[\"Flat\"],\"node.wall.panel.followsLevel\":[\"Follows level\"],\"node.wall.panel.frameDepth\":[\"Frame depth\"],\"node.wall.panel.framing\":[\"Framing\"],\"node.wall.panel.gypsum\":[\"Gypsum\"],\"node.wall.panel.height\":[\"Height\"],\"node.wall.panel.hideCode\":[\"Hide code\"],\"node.wall.panel.icf\":[\"ICF\"],\"node.wall.panel.interior\":[\"Interior\"],\"node.wall.panel.lapSiding\":[\"Lap siding\"],\"node.wall.panel.layerThicknessesFollowThe2021Irc\":[\"Layer thicknesses follow the 2021 IRC assembly data. Drafting aid, not engineering — verify with the authority having jurisdiction.\"],\"node.wall.panel.layered\":[\"Layered\"],\"node.wall.panel.length\":[\"Length\"],\"node.wall.panel.loading\":[\"Loading…\"],\"node.wall.panel.modern\":[\"Modern\"],\"node.wall.panel.none\":[\"None\"],\"node.wall.panel.noneSingleLayer\":[\"None (single layer)\"],\"node.wall.panel.offset\":[\"Offset\"],\"node.wall.panel.ogee\":[\"Ogee\"],\"node.wall.panel.osb\":[\"OSB\"],\"node.wall.panel.partitionTheInteriorFinishIsApplied\":[\"Partition: the interior finish is applied to both faces.\"],\"node.wall.panel.picture\":[\"Picture\"],\"node.wall.panel.plaster\":[\"Plaster\"],\"node.wall.panel.plywood\":[\"Plywood\"],\"node.wall.panel.preset\":[\"Preset\"],\"node.wall.panel.reference\":[\"Reference\"],\"node.wall.panel.remove\":[\"Remove\"],\"node.wall.panel.round\":[\"Round\"],\"node.wall.panel.scriptedFinish\":[\"Scripted finish\"],\"node.wall.panel.sheathing\":[\"Sheathing\"],\"node.wall.panel.shoe\":[\"Shoe\"],\"node.wall.panel.sideA\":[\"Side A\"],\"node.wall.panel.sideB\":[\"Side B\"],\"node.wall.panel.sideFace\":[\"Side \",[\"face\"]],\"node.wall.panel.skirting\":[\"Skirting\"],\"node.wall.panel.standard\":[\"Standard\"],\"node.wall.panel.steelStuds\":[\"Steel studs\"],\"node.wall.panel.step\":[\"Step\"],\"node.wall.panel.stoneVeneer\":[\"Stone veneer\"],\"node.wall.panel.stucco\":[\"Stucco\"],\"node.wall.panel.thickness\":[\"Thickness\"],\"node.wall.panel.thicknessFromAssembly\":[[\"thickness\"],\" · from assembly\"],\"node.wall.panel.top\":[\"Top\"],\"node.wall.panel.totalThickness\":[\"Total thickness\"],\"node.wall.panel.unverifiedPresetnote\":[\"Unverified: \",[\"presetNote\"]],\"node.wall.panel.viewCode\":[\"View code\"],\"node.wall.panel.wall\":[\"Wall\"],\"node.wall.panel.wallType\":[\"Wall type\"],\"node.wall.panel.whichFaceIsOutsideIsUndetermined\":[\"Which face is outside is undetermined (no room detected on either side) — the exterior layers are drawn on side B.\"],\"node.wall.panel.woodStuds\":[\"Wood studs\"],\"node.wall.trim.hide\":[[\"trim\",\"select\",{\"skirting\":[\"Hide skirting\"],\"crown\":[\"Hide crown molding\"],\"other\":[\"Hide chair rail\"]}]],\"node.wall.trim.show\":[[\"trim\",\"select\",{\"skirting\":[\"Show skirting\"],\"crown\":[\"Show crown molding\"],\"other\":[\"Show chair rail\"]}]],\"node.window.description\":[\"A window cut into a wall. Animated open/close for opening windows.\"],\"node.window.label\":[\"Window\"],\"node.window.operation.raise\":[\"Raise\"],\"node.window.operation.slats\":[\"Slats\"],\"node.window.operation.slide\":[\"Slide\"],\"node.window.operation.swing\":[\"Swing\"],\"node.window.operation.tilt\":[\"Tilt\"],\"node.window.panel.actions\":[\"Actions\"],\"node.window.panel.all\":[\"All\"],\"node.window.panel.arch\":[\"Arch\"],\"node.window.panel.archHeight\":[\"Arch Height\"],\"node.window.panel.colWidths\":[\"Col Widths\"],\"node.window.panel.columns\":[\"Columns\"],\"node.window.panel.corner\":[\"Corner\"],\"node.window.panel.cornerPost\":[\"Corner post\"],\"node.window.panel.cornerRadius\":[\"Corner Radius\"],\"node.window.panel.customThePanesMatchNoStyle\":[\"Custom: the panes match no style.\"],\"node.window.panel.delete\":[\"Delete\"],\"node.window.panel.depth\":[\"Depth\"],\"node.window.panel.dimensions\":[\"Dimensions\"],\"node.window.panel.divider\":[\"Divider\"],\"node.window.panel.down\":[\"Down\"],\"node.window.panel.duplicate\":[\"Duplicate\"],\"node.window.panel.enableSill\":[\"Enable Sill\"],\"node.window.panel.flipSide\":[\"Flip Side\"],\"node.window.panel.frame\":[\"Frame\"],\"node.window.panel.french\":[\"French\"],\"node.window.panel.fusedGlass\":[\"Fused glass\"],\"node.window.panel.grid\":[\"Grid\"],\"node.window.panel.height\":[\"Height\"],\"node.window.panel.individual\":[\"Individual\"],\"node.window.panel.left\":[\"Left\"],\"node.window.panel.move\":[\"Move\"],\"node.window.panel.opening\":[\"Opening\"],\"node.window.panel.openingShape\":[\"Opening Shape\"],\"node.window.panel.otherSide\":[\"Other side\"],\"node.window.panel.pos\":[\"pos\"],\"node.window.panel.position\":[\"Position\"],\"node.window.panel.rect\":[\"Rect\"],\"node.window.panel.revealRadius\":[\"Reveal Radius\"],\"node.window.panel.right\":[\"Right\"],\"node.window.panel.rounded\":[\"Rounded\"],\"node.window.panel.rowHeights\":[\"Row Heights\"],\"node.window.panel.rows\":[\"Rows\"],\"node.window.panel.sill\":[\"Sill\"],\"node.window.panel.single\":[\"Single\"],\"node.window.panel.sizeIsLimitedToTheWall\":[\"Size is limited to the wall, including clearance for the opening frame.\"],\"node.window.panel.style\":[\"Style\"],\"node.window.panel.thickness\":[\"Thickness\"],\"node.window.panel.thisSide\":[\"This side\"],\"node.window.panel.topShape\":[\"Top Shape\"],\"node.window.panel.type\":[\"Type\"],\"node.window.panel.unwrap\":[\"Unwrap\"],\"node.window.panel.up\":[\"Up\"],\"node.window.panel.width\":[\"Width\"],\"node.window.panel.window\":[\"Window\"],\"node.window.panel.windowType\":[\"Window Type\"],\"node.window.panel.wrapTheCorner\":[\"Wrap the corner\"],\"node.window.panel.wrapsTheCornerWithNamed\":[\"Wraps the corner with \",[\"partner\"]],\"node.window.panel.wrapsTheCornerWithPartner\":[\"Wraps the corner with its partner\"],\"node.zone.description\":[\"A polygonal site zone (lawn, water, paving) with a TSL gradient material.\"],\"node.zone.label\":[\"Zone\"],\"node.zone.quantitiesPanel.enclosedRoom\":[\"Enclosed room\"],\"node.zone.quantitiesPanel.floorSurface\":[\"Floor surface\"],\"node.zone.quantitiesPanel.footprintOnly\":[\"Footprint only\"],\"node.zone.quantitiesPanel.none\":[\"None\"],\"node.zone.quantitiesPanel.notProven\":[\"Not proven\"],\"node.zone.quantitiesPanel.roomQuantities\":[\"Room quantities\"],\"node.zone.quantitiesPanel.topViewWithZoneEdgeDimensions\":[\"Top view with zone edge dimensions\"],\"node.zone.quantitiesPanel.unit\":[\"Unit\"],\"node.zone.quantitiesPanel.volume\":[\"Volume\"],\"node.zone.quantitiesPanel.wallSurface\":[\"Wall surface\"],\"node.zone.quantitiesPanel.zoneBoundaryUnavailable\":[\"Zone boundary unavailable\"],\"node.zone.quantitiesPanel.zoneQuantities\":[\"Zone quantities\"],\"viewer.camera.orbitLeft\":[\"Orbit left\"],\"viewer.camera.orbitRight\":[\"Orbit right\"],\"viewer.camera.topView\":[\"Top view\"],\"viewer.common.off\":[\"Off\"],\"viewer.common.on\":[\"On\"],\"viewer.display.camera\":[\"Camera\"],\"viewer.display.colored\":[\"Colored\"],\"viewer.display.colors\":[\"Colors\"],\"viewer.display.edges.off\":[\"Off\"],\"viewer.display.edges.offDetail\":[\"No edge lines\"],\"viewer.display.edges.soft\":[\"Soft\"],\"viewer.display.edges.softDetail\":[\"Faint outline of major creases\"],\"viewer.display.edges.strong\":[\"Strong\"],\"viewer.display.edges.strongDetail\":[\"Crisp, opaque edge lines\"],\"viewer.display.edges.title\":[\"Edges\"],\"viewer.display.monochrome\":[\"Monochrome\"],\"viewer.display.orthographic\":[\"Orthographic\"],\"viewer.display.perspective\":[\"Perspective\"],\"viewer.display.render.rendered\":[\"Rendered\"],\"viewer.display.render.renderedDetail\":[\"Full ambient occlusion\"],\"viewer.display.render.solid\":[\"Solid\"],\"viewer.display.render.solidDetail\":[\"Flat and fast — no ambient occlusion\"],\"viewer.display.render.title\":[\"Render\"],\"viewer.display.shadows\":[\"Shadows\"],\"viewer.display.title\":[\"Display settings\"],\"viewer.floorplan.alignNorth\":[\"Align view to north\"],\"viewer.floorplan.empty\":[\"No floor plans are available for this scene.\"],\"viewer.floorplan.fit\":[\"Fit floor plan\"],\"viewer.floorplan.floor\":[\"Floor\"],\"viewer.floorplan.floorPlan\":[\"Floor plan\"],\"viewer.floorplan.viewLabel\":[[\"floor\"],\" 2D view\"],\"viewer.floorplan.zoomIn\":[\"Zoom in\"],\"viewer.floorplan.zoomOut\":[\"Zoom out\"],\"viewer.header.back\":[\"Back\"],\"viewer.header.levels\":[\"Levels\"],\"viewer.header.rooms\":[\"Rooms\"],\"viewer.header.selection\":[\"Selection\"],\"viewer.header.units\":[\"Units\"],\"viewer.header.untitled\":[\"Untitled\"],\"viewer.header.zones\":[\"Zones\"],\"viewer.levels.exploded\":[\"Exploded\"],\"viewer.levels.label\":[\"Levels: \",[\"mode\"]],\"viewer.levels.manual\":[\"Manual\"],\"viewer.levels.solo\":[\"Solo\"],\"viewer.levels.stacked\":[\"Stacked\"],\"viewer.stage.layout\":[\"Viewer layout\"],\"viewer.stage.split\":[\"Split\"],\"viewer.theme.blueprint\":[\"Blueprint\"],\"viewer.theme.mediterranean\":[\"Mediterranean\"],\"viewer.theme.night\":[\"Night\"],\"viewer.theme.overcast\":[\"Overcast\"],\"viewer.theme.paper\":[\"Paper\"],\"viewer.theme.studio\":[\"Studio\"],\"viewer.theme.sunset\":[\"Sunset\"],\"viewer.theme.title\":[\"Scene theme\"],\"viewer.theme.twilight\":[\"Twilight\"],\"viewer.theme.verdant\":[\"Verdant\"],\"viewer.visibility.guides\":[\"Guides\"],\"viewer.visibility.scans\":[\"Scans\"],\"viewer.visibility.title\":[\"Visibility\"],\"viewer.walkthrough.label\":[\"Walkthrough: \",[\"state\"]],\"viewer.walls.cutaway\":[\"Cutaway\"],\"viewer.walls.fullHeight\":[\"Full height\"],\"viewer.walls.label\":[\"Walls: \",[\"mode\"]],\"viewer.walls.low\":[\"Low\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"app.appShell.pascalHome\":[\"Pascal home\"],\"app.buildTab.addGate\":[\"Add Gate\"],\"app.buildTab.addOpenPassage\":[\"Add Open Passage\"],\"app.buildTab.addToRooms\":[\"Add to rooms\"],\"app.buildTab.allBuildTools\":[\"← All build tools\"],\"app.buildTab.chooseGateOrOpenPassageThen\":[\"Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph.\"],\"app.buildTab.clickALinesetToLayThe\":[\"Click a lineset to lay the line beside it.\"],\"app.buildTab.doubleGate\":[\"Double gate\"],\"app.buildTab.featuresExtensions\":[\"Features & extensions\"],\"app.buildTab.fenceFeatures\":[\"Fence features\"],\"app.buildTab.followLineset\":[\"Follow lineset\"],\"app.buildTab.gate\":[\"Gate\"],\"app.buildTab.gateStyle\":[\"Gate style\"],\"app.buildTab.horizontalBoards\":[\"Horizontal boards\"],\"app.buildTab.hoverAFenceToPreviewClick\":[\"Hover a fence to preview. Click to place. Esc cancels. Leave room between openings.\"],\"app.buildTab.leaves\":[\"Leaves\"],\"app.buildTab.liquidLine\":[\"Liquid Line\"],\"app.buildTab.matchFenceStyle\":[\"Match fence style\"],\"app.buildTab.mep\":[\"MEP\"],\"app.buildTab.off\":[\"Off\"],\"app.buildTab.on\":[\"On\"],\"app.buildTab.openRails\":[\"Open rails\"],\"app.buildTab.opening\":[\"Opening\"],\"app.buildTab.openingWidthM\":[\"Opening width (m)\"],\"app.buildTab.outdoor\":[\"Outdoor\"],\"app.buildTab.picket\":[\"Picket\"],\"app.buildTab.roofType\":[\"Roof type\"],\"app.buildTab.roomsAlreadyCreateTheirFloorAnd\":[\"Rooms already create their floor and ceiling. Use these for platforms and one-off structure.\"],\"app.buildTab.searchBuildToolsAndKitchenItems\":[\"Search build tools and kitchen items\"],\"app.buildTab.searchToolsFridgeSink\":[\"Search tools, fridge, sink…\"],\"app.buildTab.selectACurvedWallToMatch\":[\"Select a curved wall to match its radius and arc.\"],\"app.buildTab.singleGate\":[\"Single gate\"],\"app.buildTab.slabCeilingColumn\":[\"Slab, ceiling, column…\"],\"app.buildTab.solidPrivacy\":[\"Solid privacy\"],\"app.buildTab.traceALineAlongsideAnExisting\":[\"Trace a line alongside an existing lineset (F).\"],\"app.buildTab.verticalSlats\":[\"Vertical slats\"],\"app.editorNavbar.allProjects\":[\"All projects\"],\"app.editorNavbar.preview\":[\"Preview\"],\"app.editorNavbar.projectName\":[\"Project name\"],\"app.editorNavbar.renameProject\":[\"Rename project\"],\"app.editorNavbar.share\":[\"Share\"],\"app.kitchenBrowser.addLabel\":[\"Add \",[\"label\"]],\"app.kitchenBrowser.addToKitchen\":[\"Add to kitchen\"],\"app.kitchenBrowser.chooseAnItemThenClickTo\":[\"Choose an item, then click to place it. Appliances include their cabinetry.\"],\"app.kitchenBrowser.findInThisProjectLength\":[\"Find in this project · \",[\"length\"]],\"app.kitchenBrowser.findName\":[\"Find \",[\"name\"]],\"app.kitchenBrowser.groupAdd\":[\"Kitchen · Add\"],\"app.kitchenBrowser.groupInThisProject\":[\"Kitchen · In this project\"],\"app.kitchenBrowser.kitchenCabinet\":[\"Kitchen cabinet\"],\"app.kitchenBrowser.noMatchingKitchenItemsPlacedYet\":[\"No matching kitchen items placed yet.\"],\"app.kitchenBrowser.selectAndShowInScene\":[\"Select and show in scene\"],\"app.lib.buildPalette.ceiling\":[\"Ceiling\"],\"app.lib.buildPalette.column\":[\"Column\"],\"app.lib.buildPalette.door\":[\"Door\"],\"app.lib.buildPalette.duct\":[\"Duct\"],\"app.lib.buildPalette.dwvPipe\":[\"DWV Pipe\"],\"app.lib.buildPalette.elevator\":[\"Elevator\"],\"app.lib.buildPalette.fence\":[\"Fence\"],\"app.lib.buildPalette.hvacUnit\":[\"HVAC Unit\"],\"app.lib.buildPalette.kitchen\":[\"Kitchen\"],\"app.lib.buildPalette.lineset\":[\"Lineset\"],\"app.lib.buildPalette.liquidLine\":[\"Liquid Line\"],\"app.lib.buildPalette.mep\":[\"MEP\"],\"app.lib.buildPalette.register\":[\"Register\"],\"app.lib.buildPalette.roof\":[\"Roof\"],\"app.lib.buildPalette.shelf\":[\"Shelf\"],\"app.lib.buildPalette.slab\":[\"Slab\"],\"app.lib.buildPalette.spawnPoint\":[\"Spawn point\"],\"app.lib.buildPalette.stairs\":[\"Stairs\"],\"app.lib.buildPalette.terrace\":[\"Terrace\"],\"app.lib.buildPalette.terrain\":[\"Terrain\"],\"app.lib.buildPalette.wall\":[\"Wall\"],\"app.lib.buildPalette.window\":[\"Window\"],\"app.lib.buildPanelModel.addFitting\":[\"Add Fitting\"],\"app.lib.buildPanelModel.addGate\":[\"Add Gate\"],\"app.lib.buildPanelModel.addOpenPassage\":[\"Add Open Passage\"],\"app.lib.buildPanelModel.addTrap\":[\"Add Trap\"],\"app.lib.buildPanelModel.build\":[\"Build\"],\"app.lib.buildPanelModel.createFrom\":[\"Create from\"],\"app.lib.buildPanelModel.drawTheRoofFootprintWithTwo\":[\"Draw the roof footprint with two corner clicks.\"],\"app.lib.buildPanelModel.duct\":[\"Duct\"],\"app.lib.buildPanelModel.dwvPipe\":[\"DWV Pipe\"],\"app.lib.buildPanelModel.featuresExtensions\":[\"Features & extensions\"],\"app.lib.buildPanelModel.fence\":[\"Fence\"],\"app.lib.buildPanelModel.followLineset\":[\"Follow lineset\"],\"app.lib.buildPanelModel.gatesOpenings\":[\"Gates & openings\"],\"app.lib.buildPanelModel.hoverARoomToPreviewIts\":[\"Hover a room to preview its boundary, then click to place.\"],\"app.lib.buildPanelModel.kitchen\":[\"Kitchen\"],\"app.lib.buildPanelModel.mep\":[\"MEP\"],\"app.lib.buildPanelModel.modularCabinet\":[\"Modular Cabinet\"],\"app.lib.buildPanelModel.off\":[\"Off\"],\"app.lib.buildPanelModel.on\":[\"On\"],\"app.lib.buildPanelModel.painting\":[\"Painting\"],\"app.lib.buildPanelModel.roof\":[\"Roof\"],\"app.lib.buildPanelModel.roofType\":[\"Roof type\"],\"app.lib.buildPanelModel.toolCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" tool\"],\"other\":[\"#\",\" tools\"]}]],\"app.lib.buildTabState.conical\":[\"Conical\"],\"app.lib.buildTabState.draw\":[\"Draw\"],\"app.lib.buildTabState.dutch\":[\"Dutch\"],\"app.lib.buildTabState.flat\":[\"Flat\"],\"app.lib.buildTabState.gable\":[\"Gable\"],\"app.lib.buildTabState.gambrel\":[\"Gambrel\"],\"app.lib.buildTabState.hip\":[\"Hip\"],\"app.lib.buildTabState.mansard\":[\"Mansard\"],\"app.lib.buildTabState.room\":[\"Room\"],\"app.lib.buildTabState.shed\":[\"Shed\"],\"app.lib.buildTabState.wall\":[\"Wall\"],\"app.sharePanel.anyoneWithTheLinkCanView\":[\"Anyone with the link can view this project. They cannot edit it.\"],\"app.sharePanel.copied\":[\"Copied\"],\"app.sharePanel.copy\":[\"Copy\"],\"app.sharePanel.couldNotReadTheSharingState\":[\"Could not read the sharing state.\"],\"app.sharePanel.couldNotTurnOffThePublic\":[\"Could not turn off the public link.\"],\"app.sharePanel.couldNotTurnOnThePublic\":[\"Could not turn on the public link.\"],\"app.sharePanel.embedCode\":[\"Embed code\"],\"app.sharePanel.embedLink\":[\"Embed link\"],\"app.sharePanel.hideControls\":[\"Hide controls\"],\"app.sharePanel.link\":[\"Link\"],\"app.sharePanel.onlyThe3dViewNoHeader\":[\"Only the 3D view, no header or toolbar.\"],\"app.sharePanel.open\":[\"Open\"],\"app.sharePanel.publicLink\":[\"Public link\"],\"app.sharePanel.shareProject\":[\"Share project\"],\"app.viewerToolbar.automaticDimensions\":[\"Automatic dimensions\"],\"app.viewerToolbar.camera\":[\"Camera\"],\"app.viewerToolbar.cleanPlanDimensionsAppearWithSelection\":[\"Clean plan; dimensions appear with selection\"],\"app.viewerToolbar.collapseSidebar\":[\"Collapse sidebar\"],\"app.viewerToolbar.crispOpaqueEdgeLines\":[\"Crisp, opaque edge lines\"],\"app.viewerToolbar.cutaway\":[\"Cutaway\"],\"app.viewerToolbar.default\":[\"Default\"],\"app.viewerToolbar.display\":[\"Display\"],\"app.viewerToolbar.displaySettings\":[\"Display settings\"],\"app.viewerToolbar.doorWindowMarks\":[\"Door/window marks\"],\"app.viewerToolbar.edges\":[\"Edges\"],\"app.viewerToolbar.enterVr\":[\"Enter VR\"],\"app.viewerToolbar.exitVr\":[\"Exit VR\"],\"app.viewerToolbar.expandSidebar\":[\"Expand sidebar\"],\"app.viewerToolbar.expert\":[\"Expert\"],\"app.viewerToolbar.exploded\":[\"Exploded\"],\"app.viewerToolbar.faceOfStud\":[\"Face of stud\"],\"app.viewerToolbar.faintOutlineOfMajorCreases\":[\"Faint outline of major creases\"],\"app.viewerToolbar.feetInches\":[\"Feet & inches\"],\"app.viewerToolbar.finishedFaces\":[\"Finished faces\"],\"app.viewerToolbar.flatAndFastNoAmbientOcclusion\":[\"Flat and fast — no ambient occlusion\"],\"app.viewerToolbar.floorPlanAnnotations\":[\"Floor plan annotations\"],\"app.viewerToolbar.floorPlanMode\":[\"Floor plan mode\"],\"app.viewerToolbar.fullAmbientOcclusion\":[\"Full ambient occlusion\"],\"app.viewerToolbar.fullDocumentationAndAnnotationControls\":[\"Full documentation and annotation controls\"],\"app.viewerToolbar.fullHeight\":[\"Full height\"],\"app.viewerToolbar.fullWallThickness\":[\"Full wall thickness\"],\"app.viewerToolbar.grid\":[\"Grid\"],\"app.viewerToolbar.levelsMode\":[\"Levels: \",[\"mode\"]],\"app.viewerToolbar.low\":[\"Low\"],\"app.viewerToolbar.magneticSnap\":[\"Magnetic snap\"],\"app.viewerToolbar.manual\":[\"Manual\"],\"app.viewerToolbar.manualDimensions\":[\"Manual dimensions\"],\"app.viewerToolbar.measurements\":[\"Measurements\"],\"app.viewerToolbar.meters\":[\"Meters\"],\"app.viewerToolbar.millimeters\":[\"Millimeters\"],\"app.viewerToolbar.n3dMeasurements\":[\"3D measurements\"],\"app.viewerToolbar.noEdgeLines\":[\"No edge lines\"],\"app.viewerToolbar.off\":[\"Off\"],\"app.viewerToolbar.on\":[\"On\"],\"app.viewerToolbar.orthographic\":[\"Orthographic\"],\"app.viewerToolbar.perspective\":[\"Perspective\"],\"app.viewerToolbar.preview\":[\"Preview\"],\"app.viewerToolbar.previewMode\":[\"Preview mode\"],\"app.viewerToolbar.render\":[\"Render\"],\"app.viewerToolbar.rendered\":[\"Rendered\"],\"app.viewerToolbar.roomLabels\":[\"Room labels\"],\"app.viewerToolbar.sceneTheme\":[\"Scene theme\"],\"app.viewerToolbar.shadows\":[\"Shadows\"],\"app.viewerToolbar.singleWallAxis\":[\"Single wall axis\"],\"app.viewerToolbar.soft\":[\"Soft\"],\"app.viewerToolbar.solid\":[\"Solid\"],\"app.viewerToolbar.solo\":[\"Solo\"],\"app.viewerToolbar.stack\":[\"Stack\"],\"app.viewerToolbar.stairAnnotations\":[\"Stair annotations\"],\"app.viewerToolbar.strong\":[\"Strong\"],\"app.viewerToolbar.structuralCoreFace\":[\"Structural core face\"],\"app.viewerToolbar.structuralGridsColumnCenters\":[\"Structural grids & column centers\"],\"app.viewerToolbar.translucent\":[\"Translucent\"],\"app.viewerToolbar.units\":[\"Units\"],\"app.viewerToolbar.walkthrough\":[\"Walkthrough\"],\"app.viewerToolbar.wallCenterline\":[\"Wall centerline\"],\"app.viewerToolbar.wallDimensions\":[\"Wall dimensions\"],\"app.viewerToolbar.wallsLabel\":[\"Walls: \",[\"label\"]],\"core.level.basement\":[\"Basement\"],\"core.level.basementNumber\":[\"Basement \",[\"number\"]],\"core.level.floorNumber\":[\"Floor \",[\"number\"]],\"core.level.groundFloor\":[\"Ground floor\"],\"editor.actionMenu.cameraActions.orbitLeft\":[\"Orbit Left\"],\"editor.actionMenu.cameraActions.orbitRight\":[\"Orbit Right\"],\"editor.actionMenu.cameraActions.topView\":[\"Top View\"],\"editor.actionMenu.controlModes.delete\":[\"Delete\"],\"editor.actionMenu.controlModes.select\":[\"Select\"],\"editor.actionMenu.followPascalPill.resumeFollowing\":[\"Resume following\"],\"editor.actionMenu.followPascalToggle.off\":[\"Follow Pascal: Off\"],\"editor.actionMenu.followPascalToggle.on\":[\"Follow Pascal: On\"],\"editor.actionMenu.furnishTools.appliance\":[\"Appliance\"],\"editor.actionMenu.furnishTools.bathroom\":[\"Bathroom\"],\"editor.actionMenu.furnishTools.furniture\":[\"Furniture\"],\"editor.actionMenu.furnishTools.kitchen\":[\"Kitchen\"],\"editor.actionMenu.furnishTools.outdoor\":[\"Outdoor\"],\"editor.actionMenu.measurementControl.angle\":[\"Angle\"],\"editor.actionMenu.measurementControl.angularDimension\":[\"Angular dimension\"],\"editor.actionMenu.measurementControl.arcLength\":[\"Arc length\"],\"editor.actionMenu.measurementControl.area\":[\"Area\"],\"editor.actionMenu.measurementControl.centerMark\":[\"Center mark\"],\"editor.actionMenu.measurementControl.chordDimension\":[\"Chord dimension\"],\"editor.actionMenu.measurementControl.continuousDimension\":[\"Continuous dimension\"],\"editor.actionMenu.measurementControl.coordinateDimensions\":[\"Coordinate dimensions\"],\"editor.actionMenu.measurementControl.diameterDimension\":[\"Diameter dimension\"],\"editor.actionMenu.measurementControl.distance\":[\"Distance\"],\"editor.actionMenu.measurementControl.floorPlan\":[\"Floor plan\"],\"editor.actionMenu.measurementControl.linearDimension\":[\"Linear dimension\"],\"editor.actionMenu.measurementControl.measureSelectedlabel\":[\"Measure: \",[\"selectedLabel\"]],\"editor.actionMenu.measurementControl.measurementOptions\":[\"Measurement options\"],\"editor.actionMenu.measurementControl.measurementType\":[\"Measurement type\"],\"editor.actionMenu.measurementControl.perimeter\":[\"Perimeter\"],\"editor.actionMenu.measurementControl.radiusDimension\":[\"Radius dimension\"],\"editor.actionMenu.measurementControl.smart\":[\"Smart\"],\"editor.actionMenu.measurementControl.volume\":[\"Volume\"],\"editor.actionMenu.pointAskButton.pointAndAsk\":[\"Point and ask\"],\"editor.actionMenu.pointAskButton.pointAndAskC\":[\"Point and ask (C)\"],\"editor.actionMenu.pointAskButton.pointAndAskWorksInThe\":[\"Point and ask works in the 3D view\"],\"editor.actionMenu.structureTools.ceiling\":[\"Ceiling\"],\"editor.actionMenu.structureTools.column\":[\"Column\"],\"editor.actionMenu.structureTools.door\":[\"Door\"],\"editor.actionMenu.structureTools.duct\":[\"Duct\"],\"editor.actionMenu.structureTools.ductFitting\":[\"Duct Fitting\"],\"editor.actionMenu.structureTools.dwvPipe\":[\"DWV Pipe\"],\"editor.actionMenu.structureTools.elevator\":[\"Elevator\"],\"editor.actionMenu.structureTools.fence\":[\"Fence\"],\"editor.actionMenu.structureTools.gableRoof\":[\"Gable Roof\"],\"editor.actionMenu.structureTools.hvacUnit\":[\"HVAC Unit\"],\"editor.actionMenu.structureTools.lineset\":[\"Lineset\"],\"editor.actionMenu.structureTools.liquidLine\":[\"Liquid Line\"],\"editor.actionMenu.structureTools.pipeFitting\":[\"Pipe Fitting\"],\"editor.actionMenu.structureTools.register\":[\"Register\"],\"editor.actionMenu.structureTools.shelf\":[\"Shelf\"],\"editor.actionMenu.structureTools.slab\":[\"Slab\"],\"editor.actionMenu.structureTools.spawnPoint\":[\"Spawn Point\"],\"editor.actionMenu.structureTools.stairs\":[\"Stairs\"],\"editor.actionMenu.structureTools.trap\":[\"Trap\"],\"editor.actionMenu.structureTools.wall\":[\"Wall\"],\"editor.actionMenu.structureTools.window\":[\"Window\"],\"editor.actionMenu.structureTools.zone\":[\"Zone\"],\"editor.actionMenu.viewToggles.deleteGuideImage\":[\"Delete guide image\"],\"editor.actionMenu.viewToggles.deleteScan\":[\"Delete scan\"],\"editor.actionMenu.viewToggles.guideCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" guide image on this level\"],\"other\":[\"#\",\" guide images on this level\"]}]],\"editor.actionMenu.viewToggles.guideImageNumber\":[\"Guide image \",[\"number\"]],\"editor.actionMenu.viewToggles.guideImageSettings\":[\"Guide image settings\"],\"editor.actionMenu.viewToggles.guideImages\":[\"Guide images\"],\"editor.actionMenu.viewToggles.guides\":[\"Guides\"],\"editor.actionMenu.viewToggles.guidesHidden\":[\"Guides: Hidden\"],\"editor.actionMenu.viewToggles.guidesVisible\":[\"Guides: Visible\"],\"editor.actionMenu.viewToggles.hideGuideImages\":[\"Hide guide images\"],\"editor.actionMenu.viewToggles.hideReferenceFloor\":[\"Hide reference floor\"],\"editor.actionMenu.viewToggles.hideScans\":[\"Hide scans\"],\"editor.actionMenu.viewToggles.levelsBelow\":[[\"count\"],\" below\"],\"editor.actionMenu.viewToggles.noLowerFloorAvailable\":[\"No lower floor available.\"],\"editor.actionMenu.viewToggles.opacity\":[\"Opacity\"],\"editor.actionMenu.viewToggles.referenceFloor\":[\"Reference floor\"],\"editor.actionMenu.viewToggles.referenceFloorSelectedlevelname\":[\"Reference floor: \",[\"selectedLevelName\"]],\"editor.actionMenu.viewToggles.referenceFloorSettings\":[\"Reference floor settings\"],\"editor.actionMenu.viewToggles.referenceSettings\":[\"Reference settings\"],\"editor.actionMenu.viewToggles.references\":[\"References\"],\"editor.actionMenu.viewToggles.referencesEmpty\":[\"Upload GLB meshes as scan references or blueprint images as guide references.\"],\"editor.actionMenu.viewToggles.referencesHidden\":[\"References: Hidden\"],\"editor.actionMenu.viewToggles.referencesVisible\":[\"References: Visible\"],\"editor.actionMenu.viewToggles.riserDiagram\":[\"Riser diagram\"],\"editor.actionMenu.viewToggles.scanCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" scan on this level\"],\"other\":[\"#\",\" scans on this level\"]}]],\"editor.actionMenu.viewToggles.scanNumber\":[\"Scan \",[\"number\"]],\"editor.actionMenu.viewToggles.scanSettings\":[\"Scan settings\"],\"editor.actionMenu.viewToggles.scans\":[\"Scans\"],\"editor.actionMenu.viewToggles.scansHidden\":[\"Scans: Hidden\"],\"editor.actionMenu.viewToggles.scansVisible\":[\"Scans: Visible\"],\"editor.actionMenu.viewToggles.showGuideImages\":[\"Show guide images\"],\"editor.actionMenu.viewToggles.showReferenceFloor\":[\"Show reference floor\"],\"editor.actionMenu.viewToggles.showScans\":[\"Show scans\"],\"editor.actionMenu.viewToggles.uploadScanOrGuideImage\":[\"Upload scan or guide image\"],\"editor.backToHome\":[\"Back to home\"],\"editor.buildPanel.advanced\":[\"Advanced\"],\"editor.buildPanel.rooms.hint\":[\"walls · floor · ceiling\"],\"editor.buildPanel.rooms.idle\":[\"Pick a shape to start. Every room brings its own walls, floor and ceiling.\"],\"editor.buildPanel.rooms.polygon.caption\":[[\"lead\"],\" then the first one again to close. For L-shapes and angled rooms.\"],\"editor.buildPanel.rooms.polygon.label\":[\"Polygon\"],\"editor.buildPanel.rooms.polygon.lead\":[\"Click each corner,\"],\"editor.buildPanel.rooms.polygon.title\":[\"Polygon room\"],\"editor.buildPanel.rooms.rectangle.caption\":[[\"lead\"],\" on the grid. Walls, floor and ceiling are created together.\"],\"editor.buildPanel.rooms.rectangle.label\":[\"Rectangle\"],\"editor.buildPanel.rooms.rectangle.lead\":[\"Click two corners\"],\"editor.buildPanel.rooms.rectangle.title\":[\"Rectangle room\"],\"editor.buildPanel.rooms.title\":[\"Rooms\"],\"editor.buildPanel.rooms.walls.caption\":[[\"lead\"],\" Close a loop and it becomes a room; leave it open for partitions.\"],\"editor.buildPanel.rooms.walls.label\":[\"Walls\"],\"editor.buildPanel.rooms.walls.lead\":[\"Draw one wall at a time.\"],\"editor.buildPanel.rooms.walls.title\":[\"Walls\"],\"editor.cameraControlsHint\":[\"Camera controls hint\"],\"editor.cameraHint.pan\":[\"Pan\"],\"editor.cameraHint.rotate\":[\"Rotate\"],\"editor.cameraHint.zoom\":[\"Zoom\"],\"editor.controls.finishSwatch.ariaLabel\":[[\"label\"],\": \",[\"finish\"]],\"editor.controls.finishSwatch.default\":[\"Default\"],\"editor.dismiss\":[\"Dismiss\"],\"editor.dismissCameraControlsHint\":[\"Dismiss camera controls hint\"],\"editor.expandSidebar\":[\"Expand sidebar\"],\"editor.floatingActionMenu.axis\":[\"Axis\"],\"editor.floatingActionMenu.axis2\":[\"⌥ axis\"],\"editor.floatingActionMenu.noEquipment\":[\"⚠ no equipment\"],\"editor.floatingActionMenu.rTRotate\":[\"R/T rotate\"],\"editor.floatingActionMenu.registerCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" register\"],\"other\":[\"#\",\" registers\"]}]],\"editor.floatingActionMenu.runCount\":[[\"count\",\"plural\",{\"one\":[\"#\",\" run\"],\"other\":[\"#\",\" runs\"]}]],\"editor.floatingActionMenu.system\":[\"System\"],\"editor.floorFootprint.area\":[\"Floor area\"],\"editor.floorFootprint.room\":[[\"room\"],\" floor\"],\"editor.floorFootprint.shared\":[\"Shared floor\"],\"editor.helpers.buildingHelper.cancel\":[\"Cancel\"],\"editor.helpers.buildingHelper.placeBuilding\":[\"Place building\"],\"editor.helpers.buildingHelper.rotate\":[\"Rotate\"],\"editor.helpers.contextualHelperPanel.cancelPlacement\":[\"Cancel placement\"],\"editor.helpers.contextualHelperPanel.continuationClickOrPressCTo\":[\"Continuation — click or press C to cycle\"],\"editor.helpers.contextualHelperPanel.continuationLabel\":[\"Continuation: \",[\"label\"]],\"editor.helpers.contextualHelperPanel.dragToDrawFence\":[\"Drag to draw fence\"],\"editor.helpers.contextualHelperPanel.eraseScope\":[\"Erase: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.eraseScopeClickOrPressShift\":[\"Erase scope — click or press Shift to cycle\"],\"editor.helpers.contextualHelperPanel.eraseScopeLabel\":[\"Erase scope: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT\":[\"Fence type — click or press T to switch between straight, curved and freehand\"],\"editor.helpers.contextualHelperPanel.fewerShortcuts\":[\"Fewer shortcuts\"],\"editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick\":[\"Finish curve (or double-click)\"],\"editor.helpers.contextualHelperPanel.gridLength\":[\"Grid: \",[\"length\"]],\"editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl\":[\"Grid step — click or tap Ctrl to cycle\"],\"editor.helpers.contextualHelperPanel.gridStepLength\":[\"Grid step: \",[\"length\"]],\"editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase\":[\"Hover a painted surface to erase\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPaint\":[\"Hover a surface to paint\"],\"editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts\":[\"Hover a surface to pick its material\"],\"editor.helpers.contextualHelperPanel.moreShortcuts\":[\"More shortcuts\"],\"editor.helpers.contextualHelperPanel.paintScope\":[\"Paint: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.paintScopeClickOrPressShift\":[\"Paint scope — click or press Shift to cycle\"],\"editor.helpers.contextualHelperPanel.paintScopeLabel\":[\"Paint scope: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.pickScope\":[\"Pick: \",[\"scope\"]],\"editor.helpers.contextualHelperPanel.placeGateOnAFence\":[\"Place gate on a fence\"],\"editor.helpers.contextualHelperPanel.placePassageOnAFence\":[\"Place passage on a fence\"],\"editor.helpers.contextualHelperPanel.selectAMaterialToPaint\":[\"Select a material to paint\"],\"editor.helpers.contextualHelperPanel.snappingAngles\":[\"Snapping: Angles\"],\"editor.helpers.contextualHelperPanel.snappingGrid\":[\"Snapping: Grid\"],\"editor.helpers.contextualHelperPanel.snappingLines\":[\"Snapping: Lines\"],\"editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift\":[\"Snapping mode — click or press Shift to cycle\"],\"editor.helpers.contextualHelperPanel.snappingOff\":[\"Snapping: Off\"],\"editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved\":[\"Straight continuation is unavailable for curved or freehand fences\"],\"editor.helpers.contextualHelperPanel.straightContinuous\":[\"Straight: Continuous\"],\"editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress\":[\"Straight fence continuation — click or press C to toggle\"],\"editor.helpers.contextualHelperPanel.straightSingle\":[\"Straight: Single\"],\"editor.helpers.helperManager.addPoint\":[\"Add point\"],\"editor.helpers.helperManager.addPointClickTheFirstTo\":[\"Add point · click the first to close\"],\"editor.helpers.helperManager.brushSize\":[\"Brush size\"],\"editor.helpers.helperManager.cancel\":[\"Cancel\"],\"editor.helpers.helperManager.cancelPicking\":[\"Cancel picking\"],\"editor.helpers.helperManager.cancelStroke\":[\"Cancel stroke\"],\"editor.helpers.helperManager.done\":[\"Done\"],\"editor.helpers.helperManager.drawTheMezzanine\":[\"Draw the mezzanine\"],\"editor.helpers.helperManager.drawTheOpening\":[\"Draw the opening\"],\"editor.helpers.helperManager.drawTheTerrace\":[\"Draw the terrace\"],\"editor.helpers.helperManager.exitSmartMeasure\":[\"Exit smart measure\"],\"editor.helpers.helperManager.finish\":[\"Finish\"],\"editor.helpers.helperManager.finishAtTheEdge\":[\"Finish at the edge\"],\"editor.helpers.helperManager.freeMove\":[\"Free move\"],\"editor.helpers.helperManager.freeMoveSlideDoorsAndWindows\":[\"Free move · slide doors and windows\"],\"editor.helpers.helperManager.holdToPickAMaterial\":[\"Hold to pick a material\"],\"editor.helpers.helperManager.inspectSurfaceDimensions\":[\"Inspect surface dimensions\"],\"editor.helpers.helperManager.paintWithThisMaterial\":[\"Paint with this material\"],\"editor.helpers.helperManager.pickTargetHeight\":[\"Pick target height\"],\"editor.helpers.helperManager.pinMeasurementLens\":[\"Pin measurement lens\"],\"editor.helpers.helperManager.place\":[\"Place\"],\"editor.helpers.helperManager.placeInsideTheRoom\":[\"Place inside the room\"],\"editor.helpers.helperManager.pressAnywhereDragToTheOpposite\":[\"Press anywhere, drag to the opposite corner\"],\"editor.helpers.helperManager.raiseOrLower\":[\"Raise or lower\"],\"editor.helpers.helperManager.removeAPaintedPartOrReset\":[\"Remove a painted part, or reset a surface\"],\"editor.helpers.helperManager.removeLastPoint\":[\"Remove last point\"],\"editor.helpers.helperManager.resize\":[\"Resize\"],\"editor.helpers.helperManager.rotate45\":[\"Rotate ±45°\"],\"editor.helpers.helperManager.rotateTheSelection45\":[\"Rotate the selection ±45°\"],\"editor.helpers.helperManager.setOneCornerThenTheOpposite\":[\"Set one corner, then the opposite\"],\"editor.helpers.itemHelper.cancel\":[\"Cancel\"],\"editor.helpers.itemHelper.forcePlace\":[\"Force place\"],\"editor.helpers.itemHelper.place\":[\"Place\"],\"editor.helpers.itemHelper.rotate\":[\"Rotate\"],\"editor.helpers.registeredToolHelper.guidedConstraintsBypassed\":[\"Guided constraints bypassed\"],\"editor.inspector.field.angle.g10zaw\":[\"Angle\"],\"editor.inspector.field.armLengthM.1jclqgw\":[\"Arm length m\"],\"editor.inspector.field.attachmentSide.6n9s5v\":[\"Attachment side\"],\"editor.inspector.field.autoHangers.10554ka\":[\"Auto hangers\"],\"editor.inspector.field.autoMiterCorners.zxr5lt\":[\"Auto miter corners\"],\"editor.inspector.field.autoSpan.1gas9r6\":[\"Auto span\"],\"editor.inspector.field.backRatio.1ughd99\":[\"Back ratio\"],\"editor.inspector.field.baseHeight.1hs4zdf\":[\"Base height\"],\"editor.inspector.field.baseStyle.24vty5\":[\"Base style\"],\"editor.inspector.field.beamHeight.1kq0oh1\":[\"Beam height\"],\"editor.inspector.field.beamWidth.1q1mzbe\":[\"Beam width\"],\"editor.inspector.field.bodyShape.arvkuw\":[\"Body shape\"],\"editor.inspector.field.bracketStyle.1vvoptm\":[\"Bracket style\"],\"editor.inspector.field.branchAngle.v56zme\":[\"Branch angle\"],\"editor.inspector.field.cabHeight.1yn34mk\":[\"Cab height\"],\"editor.inspector.field.canopyForm.1czzggp\":[\"Canopy form\"],\"editor.inspector.field.cap.s0thej\":[\"Cap\"],\"editor.inspector.field.capOverhang.kxxz9j\":[\"Cap overhang\"],\"editor.inspector.field.capShape.17mbxhu\":[\"Cap shape\"],\"editor.inspector.field.capThickness.u835q9\":[\"Cap thickness\"],\"editor.inspector.field.carcassHeight.1aks0zy\":[\"Carcass height\"],\"editor.inspector.field.cleanoutStyle.127zz6z\":[\"Cleanout style\"],\"editor.inspector.field.collarDiameter.1d5k28r\":[\"Collar diameter\"],\"editor.inspector.field.collarHeight.1dqwsrf\":[\"Collar height\"],\"editor.inspector.field.collarShape.1gacv11\":[\"Collar shape\"],\"editor.inspector.field.collarWidth.qvc9ik\":[\"Collar width\"],\"editor.inspector.field.columns.1sy73ks\":[\"Columns\"],\"editor.inspector.field.conicalFullCircle.1pgkpz5\":[\"Conical full circle\"],\"editor.inspector.field.connectionMode.1nty478\":[\"Connection mode\"],\"editor.inspector.field.connectionOffset.2m70s8\":[\"Connection offset\"],\"editor.inspector.field.cornerBevel.16iniho\":[\"Corner bevel\"],\"editor.inspector.field.coveringType.95yd3k\":[\"Covering type\"],\"editor.inspector.field.cricketHeight.pok31n\":[\"Cricket height\"],\"editor.inspector.field.cricketLength.i2aht8\":[\"Cricket length\"],\"editor.inspector.field.cricketSide.1xnwil7\":[\"Cricket side\"],\"editor.inspector.field.cricketStyle.10j0lat\":[\"Cricket style\"],\"editor.inspector.field.curb.5xi2ol\":[\"Curb\"],\"editor.inspector.field.curbHeight.1yn97sg\":[\"Curb height\"],\"editor.inspector.field.curveOffset.l4xhvr\":[\"Curve offset\"],\"editor.inspector.field.damperAngle.h5fxn7\":[\"Damper angle\"],\"editor.inspector.field.deckThickness.4jmqze\":[\"Deck thickness\"],\"editor.inspector.field.defaultLevelId.xmrjzp\":[\"Default level id\"],\"editor.inspector.field.depth.1lu11u2\":[\"Depth\"],\"editor.inspector.field.diameter.s3robe\":[\"Diameter\"],\"editor.inspector.field.diameter2.pm6cl4\":[\"Diameter2\"],\"editor.inspector.field.doorDurationMs.13nx909\":[\"Door duration ms\"],\"editor.inspector.field.doorHeight.92r9k4\":[\"Door height\"],\"editor.inspector.field.doorPanelStyle.2qog4q\":[\"Door panel style\"],\"editor.inspector.field.doorStyle.gerpos\":[\"Door style\"],\"editor.inspector.field.doorWidth.sy732l\":[\"Door width\"],\"editor.inspector.field.downspoutEnabled.1gn00nv\":[\"Downspout enabled\"],\"editor.inspector.field.downspoutPosition.fxcsop\":[\"Downspout position\"],\"editor.inspector.field.ductMaterial.i8eonq\":[\"Duct material\"],\"editor.inspector.field.dutchGabletRake.6paydp\":[\"Dutch gablet rake\"],\"editor.inspector.field.dutchHipHeightRatio.1etnwgg\":[\"Dutch hip height ratio\"],\"editor.inspector.field.dutchHipWidthRatio.1dopfvb\":[\"Dutch hip width ratio\"],\"editor.inspector.field.dutchTopRakeThickness.1w9khxt\":[\"Dutch top rake thickness\"],\"editor.inspector.field.dutchWaistLengthRatio.agtoxw\":[\"Dutch waist length ratio\"],\"editor.inspector.field.dwellMs.1lkk0o5\":[\"Dwell ms\"],\"editor.inspector.field.edgeInset.1obeimx\":[\"Edge inset\"],\"editor.inspector.field.elevation.4jbp44\":[\"Elevation\"],\"editor.inspector.field.endCapLeft.19jel4v\":[\"End cap left\"],\"editor.inspector.field.endCapRight.lhse9c\":[\"End cap right\"],\"editor.inspector.field.endCaps.4fsb5b\":[\"End caps\"],\"editor.inspector.field.endPost.1guwsk0\":[\"End post\"],\"editor.inspector.field.equipmentType.1mc2ywt\":[\"Equipment type\"],\"editor.inspector.field.fillToFloor.1oppnkf\":[\"Fill to floor\"],\"editor.inspector.field.finial.1ertf4s\":[\"Finial\"],\"editor.inspector.field.fittingType.18mz17s\":[\"Fitting type\"],\"editor.inspector.field.flashingHeight.3e8nn6\":[\"Flashing height\"],\"editor.inspector.field.flashingProjection.hhf0fk\":[\"Flashing projection\"],\"editor.inspector.field.flueCount.j3t2ci\":[\"Flue count\"],\"editor.inspector.field.flueDiameter.cjhubg\":[\"Flue diameter\"],\"editor.inspector.field.flueHeight.1dhc4y4\":[\"Flue height\"],\"editor.inspector.field.flueShape.1ealiy4\":[\"Flue shape\"],\"editor.inspector.field.flueSpacing.exhzco\":[\"Flue spacing\"],\"editor.inspector.field.footingStyle.e3btg6\":[\"Footing style\"],\"editor.inspector.field.frameDepth.1934a5n\":[\"Frame depth\"],\"editor.inspector.field.frameThickness.1agxzd8\":[\"Frame thickness\"],\"editor.inspector.field.framingStrategy.3jx9qe\":[\"Framing strategy\"],\"editor.inspector.field.fromLevelId.15ieejs\":[\"From level id\"],\"editor.inspector.field.gableOverhang.2z0obw\":[\"Gable overhang\"],\"editor.inspector.field.gambrelLowerHeightRatio.wqq7lg\":[\"Gambrel lower height ratio\"],\"editor.inspector.field.gambrelLowerWidthRatio.uvyb1v\":[\"Gambrel lower width ratio\"],\"editor.inspector.field.gapX.wjxa7\":[\"Gap x\"],\"editor.inspector.field.gapY.mkbl8\":[\"Gap y\"],\"editor.inspector.field.glassThickness.s97b0x\":[\"Glass thickness\"],\"editor.inspector.field.groundClearance.4os7f0\":[\"Ground clearance\"],\"editor.inspector.field.guardInfill.16heiig\":[\"Guard infill\"],\"editor.inspector.field.gutterEnabled.1oxiltf\":[\"Gutter enabled\"],\"editor.inspector.field.gutterProfile.1ngzqi3\":[\"Gutter profile\"],\"editor.inspector.field.gutterSize.jgavtz\":[\"Gutter size\"],\"editor.inspector.field.hangerMaxReach.1869epv\":[\"Hanger max reach\"],\"editor.inspector.field.hangerSpacing.i2b5d7\":[\"Hanger spacing\"],\"editor.inspector.field.hangerStyle.l7v7gb\":[\"Hanger style\"],\"editor.inspector.field.height.7puwki\":[\"Height\"],\"editor.inspector.field.height2.7b3jlc\":[\"Height2\"],\"editor.inspector.field.heightAboveRidge.1k99brk\":[\"Height above ridge\"],\"editor.inspector.field.highEdgeHeight.1s7v90t\":[\"High edge height\"],\"editor.inspector.field.highOverhang.67w55d\":[\"High overhang\"],\"editor.inspector.field.highSideMode.1rc1r5j\":[\"High side mode\"],\"editor.inspector.field.hoodOverhang.1q1hcin\":[\"Hood overhang\"],\"editor.inspector.field.infillPlacement.11dxzpo\":[\"Infill placement\"],\"editor.inspector.field.inletShape.ypayh2\":[\"Inlet shape\"],\"editor.inspector.field.innerRadius.1fkmg0j\":[\"Inner radius\"],\"editor.inspector.field.insulated.iwziey\":[\"Insulated\"],\"editor.inspector.field.insulationR.663ufx\":[\"Insulation r\"],\"editor.inspector.field.lanternHeight.oz7zpm\":[\"Lantern height\"],\"editor.inspector.field.lanternTopScale.hkmpp2\":[\"Lantern top scale\"],\"editor.inspector.field.ledgerDepth.7av8k9\":[\"Ledger depth\"],\"editor.inspector.field.ledgerHeight.zo2oif\":[\"Ledger height\"],\"editor.inspector.field.ledgerVerticalOffset.1athbgt\":[\"Ledger vertical offset\"],\"editor.inspector.field.leftEndCondition.1syqlaw\":[\"Left end condition\"],\"editor.inspector.field.leftOverhang.1ydl9ma\":[\"Left overhang\"],\"editor.inspector.field.length.1kpdcfp\":[\"Length\"],\"editor.inspector.field.liquidDiameter.w3pk7c\":[\"Liquid diameter\"],\"editor.inspector.field.louverCount.lhw2gr\":[\"Louver count\"],\"editor.inspector.field.lowBeamInset.1g7yw5l\":[\"Low beam inset\"],\"editor.inspector.field.lowEdgeHeight.47mae1\":[\"Low edge height\"],\"editor.inspector.field.lowOverhang.t4nz1h\":[\"Low overhang\"],\"editor.inspector.field.mansardSteepHeightRatio.1hbb8rq\":[\"Mansard steep height ratio\"],\"editor.inspector.field.mansardSteepWidthRatio.6xk6vd\":[\"Mansard steep width ratio\"],\"editor.inspector.field.matchHostRoofMaterial.s56zwj\":[\"Match host roof material\"],\"editor.inspector.field.matchHostRoofStructure.bojht3\":[\"Match host roof structure\"],\"editor.inspector.field.mount.h80tay\":[\"Mount\"],\"editor.inspector.field.mountingType.1xvin1e\":[\"Mounting type\"],\"editor.inspector.field.neckHeight.19ym8n1\":[\"Neck height\"],\"editor.inspector.field.opacity.1pmpfd2\":[\"Opacity\"],\"editor.inspector.field.openingAngle.brhi7c\":[\"Opening angle\"],\"editor.inspector.field.openingOffset.wpoqt6\":[\"Opening offset\"],\"editor.inspector.field.openingSide.18l2iwe\":[\"Opening side\"],\"editor.inspector.field.operationState.1lwrz07\":[\"Operation state\"],\"editor.inspector.field.outletShape.lgpqhx\":[\"Outlet shape\"],\"editor.inspector.field.overhang.b5ljpv\":[\"Overhang\"],\"editor.inspector.field.panelHeight.1kf31vk\":[\"Panel height\"],\"editor.inspector.field.panelWidth.946581\":[\"Panel width\"],\"editor.inspector.field.patternAlignment.jd1ht0\":[\"Pattern alignment\"],\"editor.inspector.field.patternCount.1r37pve\":[\"Pattern count\"],\"editor.inspector.field.patternDistribution.fmam51\":[\"Pattern distribution\"],\"editor.inspector.field.patternRemainder.i47p5y\":[\"Pattern remainder\"],\"editor.inspector.field.picketProfile.1xgzuyc\":[\"Picket profile\"],\"editor.inspector.field.picketRailCount.atgt6w\":[\"Picket rail count\"],\"editor.inspector.field.picketSpacing.p8d98w\":[\"Picket spacing\"],\"editor.inspector.field.picketTop.1tskplu\":[\"Picket top\"],\"editor.inspector.field.picketTopClearance.16eq1k0\":[\"Picket top clearance\"],\"editor.inspector.field.picketVariation.f7vl1c\":[\"Picket variation\"],\"editor.inspector.field.picketWidth.3fr3rh\":[\"Picket width\"],\"editor.inspector.field.pipeMaterial.1ggc2wy\":[\"Pipe material\"],\"editor.inspector.field.pitch.xe6ekx\":[\"Pitch\"],\"editor.inspector.field.position.1quewx6\":[\"Position\"],\"editor.inspector.field.postBracing.crq8nn\":[\"Post bracing\"],\"editor.inspector.field.postCap.1xcvxrv\":[\"Post cap\"],\"editor.inspector.field.postCount.22r56c\":[\"Post count\"],\"editor.inspector.field.postDepth.1ko6j1m\":[\"Post depth\"],\"editor.inspector.field.postInset.le36li\":[\"Post inset\"],\"editor.inspector.field.postLayoutMode.16jre62\":[\"Post layout mode\"],\"editor.inspector.field.postSize.1jodxek\":[\"Post size\"],\"editor.inspector.field.postSpacing.voppfi\":[\"Post spacing\"],\"editor.inspector.field.postThrough.1abgu4a\":[\"Post through\"],\"editor.inspector.field.postWidth.rk26fz\":[\"Post width\"],\"editor.inspector.field.profile.1kwlci6\":[\"Profile\"],\"editor.inspector.field.projection.jhtig0\":[\"Projection\"],\"editor.inspector.field.purlinHeight.eo9cjm\":[\"Purlin height\"],\"editor.inspector.field.purlinSpacing.4gbzb2\":[\"Purlin spacing\"],\"editor.inspector.field.purlinWidth.r6tu3j\":[\"Purlin width\"],\"editor.inspector.field.rafterEndInset.14c0wy5\":[\"Rafter end inset\"],\"editor.inspector.field.rafterHeight.1e1n99w\":[\"Rafter height\"],\"editor.inspector.field.rafterSpacing.19subc0\":[\"Rafter spacing\"],\"editor.inspector.field.rafterWidth.eksj4t\":[\"Rafter width\"],\"editor.inspector.field.railingHeight.6wf4bm\":[\"Railing height\"],\"editor.inspector.field.railingMode.ov7xpu\":[\"Railing mode\"],\"editor.inspector.field.railingStyle.1nyd2u\":[\"Railing style\"],\"editor.inspector.field.resizeLock.b2hbr0\":[\"Resize lock\"],\"editor.inspector.field.returnDiameter.166ozhe\":[\"Return diameter\"],\"editor.inspector.field.returnHeight.b9sq6y\":[\"Return height\"],\"editor.inspector.field.returnShape.1e3a27i\":[\"Return shape\"],\"editor.inspector.field.returnWidth.z9r3h3\":[\"Return width\"],\"editor.inspector.field.rightEndCondition.tjlw3l\":[\"Right end condition\"],\"editor.inspector.field.rightOverhang.yqbeft\":[\"Right overhang\"],\"editor.inspector.field.roofHeight.1uhy6qy\":[\"Roof height\"],\"editor.inspector.field.roofStyle.pawqfy\":[\"Roof style\"],\"editor.inspector.field.roofThickness.1xlr3rx\":[\"Roof thickness\"],\"editor.inspector.field.roofType.1m9kv5h\":[\"Roof type\"],\"editor.inspector.field.rotation.ly2rj\":[\"Rotation\"],\"editor.inspector.field.rows.1ba1neg\":[\"Rows\"],\"editor.inspector.field.scale.b6rpxt\":[\"Scale\"],\"editor.inspector.field.seamDetail.197za48\":[\"Seam detail\"],\"editor.inspector.field.segmentType.l667sy\":[\"Segment type\"],\"editor.inspector.field.shaftStyle.1i5ampa\":[\"Shaft style\"],\"editor.inspector.field.shaftWallThickness.bduslr\":[\"Shaft wall thickness\"],\"editor.inspector.field.shape.iq9t52\":[\"Shape\"],\"editor.inspector.field.shape2.fi0nx8\":[\"Shape2\"],\"editor.inspector.field.shedHighSide.bzzddg\":[\"Shed high side\"],\"editor.inspector.field.shingleThickness.1hn5wxr\":[\"Shingle thickness\"],\"editor.inspector.field.shoulderExtent.11j8uiv\":[\"Shoulder extent\"],\"editor.inspector.field.shoulderHeight.xyqn6g\":[\"Shoulder height\"],\"editor.inspector.field.shoulderStyle.1hkcv2w\":[\"Shoulder style\"],\"editor.inspector.field.showCenterColumn.1uggg45\":[\"Show center column\"],\"editor.inspector.field.showInfill.33rv7u\":[\"Show infill\"],\"editor.inspector.field.showStepSupports.1kg8h8m\":[\"Show step supports\"],\"editor.inspector.field.sideFlashing.cv744o\":[\"Side flashing\"],\"editor.inspector.field.size.1a4x3zw\":[\"Size\"],\"editor.inspector.field.skylightType.1a5vj3i\":[\"Skylight type\"],\"editor.inspector.field.slabOpeningMode.g4f730\":[\"Slab opening mode\"],\"editor.inspector.field.slatGap.slmk93\":[\"Slat gap\"],\"editor.inspector.field.slideDirection.1527q13\":[\"Slide direction\"],\"editor.inspector.field.span.1bmmuw1\":[\"Span\"],\"editor.inspector.field.speed.2w2xwg\":[\"Speed\"],\"editor.inspector.field.spinSpeed.1ozx746\":[\"Spin speed\"],\"editor.inspector.field.stairType.1u05e02\":[\"Stair type\"],\"editor.inspector.field.standoff.4wv2g0\":[\"Standoff\"],\"editor.inspector.field.standoffHeight.1qdnff\":[\"Standoff height\"],\"editor.inspector.field.startPost.1ood9kv\":[\"Start post\"],\"editor.inspector.field.stepCount.nzorrw\":[\"Step count\"],\"editor.inspector.field.strapSpacing.1cyt3dc\":[\"Strap spacing\"],\"editor.inspector.field.strapStyle.fh1oy4\":[\"Strap style\"],\"editor.inspector.field.style.nf3vcm\":[\"Style\"],\"editor.inspector.field.suctionDiameter.nutxtj\":[\"Suction diameter\"],\"editor.inspector.field.supplyDiameter.h5ldh5\":[\"Supply diameter\"],\"editor.inspector.field.supplyHeight.zy6ru1\":[\"Supply height\"],\"editor.inspector.field.supplyShape.k39wnb\":[\"Supply shape\"],\"editor.inspector.field.supplyWidth.g66axi\":[\"Supply width\"],\"editor.inspector.field.supportOffset.1w4cocr\":[\"Support offset\"],\"editor.inspector.field.sweepAngle.ucmmlw\":[\"Sweep angle\"],\"editor.inspector.field.system.13qbhrw\":[\"System\"],\"editor.inspector.field.terminal.1501knl\":[\"Terminal\"],\"editor.inspector.field.terminalType.1ne8lgb\":[\"Terminal type\"],\"editor.inspector.field.thickness.1l8hu45\":[\"Thickness\"],\"editor.inspector.field.tiltAngle.1312yw1\":[\"Tilt angle\"],\"editor.inspector.field.toLevelId.8i5qx7\":[\"To level id\"],\"editor.inspector.field.topLandingDepth.ki7gk2\":[\"Top landing depth\"],\"editor.inspector.field.topLandingMode.zk0h7e\":[\"Top landing mode\"],\"editor.inspector.field.topRailHeight.fscisv\":[\"Top rail height\"],\"editor.inspector.field.transitionMode.f3evgt\":[\"Transition mode\"],\"editor.inspector.field.transitionWidth.rtgz3m\":[\"Transition width\"],\"editor.inspector.field.vaneCount.55vtye\":[\"Vane count\"],\"editor.inspector.field.wallHeight.18vmh5c\":[\"Wall height\"],\"editor.inspector.field.wallShell.vqsyhv\":[\"Wall shell\"],\"editor.inspector.field.wallSkirtHeight.1uea2ad\":[\"Wall skirt height\"],\"editor.inspector.field.wallThickness.17wn4iv\":[\"Wall thickness\"],\"editor.inspector.field.width.gfxz9b\":[\"Width\"],\"editor.inspector.field.width2.1nqawvr\":[\"Width2\"],\"editor.inspector.field.withBack.1ay8nus\":[\"With back\"],\"editor.inspector.field.withBottom.1x1z1vo\":[\"With bottom\"],\"editor.inspector.field.withSides.uq066x\":[\"With sides\"],\"editor.inspector.group.advanced.qwfkor\":[\"Advanced\"],\"editor.inspector.group.air.15jotdj\":[\"Air\"],\"editor.inspector.group.appearance.dli9wf\":[\"Appearance\"],\"editor.inspector.group.body.ign4wl\":[\"Body\"],\"editor.inspector.group.cab.o4z1ox\":[\"Cab\"],\"editor.inspector.group.cabinet.rzvymr\":[\"Cabinet\"],\"editor.inspector.group.cap.s0thej\":[\"Cap\"],\"editor.inspector.group.collar.1am2iqo\":[\"Collar\"],\"editor.inspector.group.connection.2r1h4p\":[\"Connection\"],\"editor.inspector.group.connections.ai4w8u\":[\"Connections\"],\"editor.inspector.group.construction.j6p9kc\":[\"Construction\"],\"editor.inspector.group.cricket.6iwg8g\":[\"Cricket\"],\"editor.inspector.group.curb.5xi2ol\":[\"Curb\"],\"editor.inspector.group.curvePoints.ztdcnn\":[\"Curve points\"],\"editor.inspector.group.dimensions.pewa8g\":[\"Dimensions\"],\"editor.inspector.group.doors.18w2kpa\":[\"Doors\"],\"editor.inspector.group.dormer.1fjs5tq\":[\"Dormer\"],\"editor.inspector.group.dormerRoof.u9uy2g\":[\"Dormer roof\"],\"editor.inspector.group.drainage.7easy0\":[\"Drainage\"],\"editor.inspector.group.elevation.4jbp44\":[\"Elevation\"],\"editor.inspector.group.endCaps.4fsb5b\":[\"End caps\"],\"editor.inspector.group.equipment.1xtq0ev\":[\"Equipment\"],\"editor.inspector.group.face.1531fr0\":[\"Face\"],\"editor.inspector.group.fitting.171z1r4\":[\"Fitting\"],\"editor.inspector.group.flues.nq6pye\":[\"Flues\"],\"editor.inspector.group.footprint.g8q2pg\":[\"Footprint\"],\"editor.inspector.group.frame.q7q9fq\":[\"Frame\"],\"editor.inspector.group.geometry.a21os1\":[\"Geometry\"],\"editor.inspector.group.grid.d8gwxd\":[\"Grid\"],\"editor.inspector.group.hangers.agnfzn\":[\"Hangers\"],\"editor.inspector.group.hardware.1nygwm1\":[\"Hardware\"],\"editor.inspector.group.hungWall.1ftr1gz\":[\"Hung wall\"],\"editor.inspector.group.insulation.1kyo5e7\":[\"Insulation\"],\"editor.inspector.group.lantern.1h7o2xb\":[\"Lantern\"],\"editor.inspector.group.levels.1s6yaru\":[\"Levels\"],\"editor.inspector.group.line.166mv5z\":[\"Line\"],\"editor.inspector.group.lines.12bghr0\":[\"Lines\"],\"editor.inspector.group.motion.1be7sjr\":[\"Motion\"],\"editor.inspector.group.mounting.feutd2\":[\"Mounting\"],\"editor.inspector.group.opening.dfet3\":[\"Opening\"],\"editor.inspector.group.panelDimensions.b59qe6\":[\"Panel dimensions\"],\"editor.inspector.group.patternDistribution.fmam51\":[\"Pattern distribution\"],\"editor.inspector.group.placement.13lcvts\":[\"Placement\"],\"editor.inspector.group.position.1quewx6\":[\"Position\"],\"editor.inspector.group.profile.1kwlci6\":[\"Profile\"],\"editor.inspector.group.railing.19a5bnr\":[\"Railing\"],\"editor.inspector.group.return.1klrjrz\":[\"Return\"],\"editor.inspector.group.settings.ktdb8o\":[\"Settings\"],\"editor.inspector.group.shaft.mad9cv\":[\"Shaft\"],\"editor.inspector.group.shape.iq9t52\":[\"Shape\"],\"editor.inspector.group.shoulder.1nyfx25\":[\"Shoulder\"],\"editor.inspector.group.size.1a4x3zw\":[\"Size\"],\"editor.inspector.group.structure.gezdra\":[\"Structure\"],\"editor.inspector.group.style.nf3vcm\":[\"Style\"],\"editor.inspector.group.supply.1oy2zwu\":[\"Supply\"],\"editor.inspector.group.surface.wtamqk\":[\"Surface\"],\"editor.inspector.group.terminal.1501knl\":[\"Terminal\"],\"editor.inspector.group.topology.18t8dyc\":[\"Topology\"],\"editor.inspector.group.transform.1c55ayj\":[\"Transform\"],\"editor.inspector.group.trap.1qc7vhe\":[\"Trap\"],\"editor.inspector.group.type.1m2zofh\":[\"Type\"],\"editor.inspector.option.abs.132mz8b\":[\"Abs\"],\"editor.inspector.option.accessPanel.13sptb5\":[\"Access panel\"],\"editor.inspector.option.airHandler.1crnyg3\":[\"Air handler\"],\"editor.inspector.option.alternating.5jashi\":[\"Alternating\"],\"editor.inspector.option.arched.14188w0\":[\"Arched\"],\"editor.inspector.option.auto.540b06\":[\"Auto\"],\"editor.inspector.option.automatic.r122ro\":[\"Automatic\"],\"editor.inspector.option.back.1hzmxtu\":[\"Back\"],\"editor.inspector.option.balusters.1j3w6ng\":[\"Balusters\"],\"editor.inspector.option.band.160umau\":[\"Band\"],\"editor.inspector.option.basePlate.17fcg8k\":[\"Base plate\"],\"editor.inspector.option.boards.u14hig\":[\"Boards\"],\"editor.inspector.option.bookshelf.ls0zqk\":[\"Bookshelf\"],\"editor.inspector.option.both.mkyb42\":[\"Both\"],\"editor.inspector.option.bottom.9mpruy\":[\"Bottom\"],\"editor.inspector.option.box.1nbjcuq\":[\"Box\"],\"editor.inspector.option.break.17spnvc\":[\"Break\"],\"editor.inspector.option.butterfly.pvv0g4\":[\"Butterfly\"],\"editor.inspector.option.cable.fp50zq\":[\"Cable\"],\"editor.inspector.option.castIron.1q2z4qk\":[\"Cast iron\"],\"editor.inspector.option.ceiling.1t2zaqo\":[\"Ceiling\"],\"editor.inspector.option.center.kzdxno\":[\"Center\"],\"editor.inspector.option.centerOpening.bn1rvw\":[\"Center opening\"],\"editor.inspector.option.cleanout.lww8bm\":[\"Cleanout\"],\"editor.inspector.option.concretePad.m1zdij\":[\"Concrete pad\"],\"editor.inspector.option.condenser.a74nps\":[\"Condenser\"],\"editor.inspector.option.corbeled.bovs4v\":[\"Corbeled\"],\"editor.inspector.option.count.1qoi4r8\":[\"Count\"],\"editor.inspector.option.coupling.111aap2\":[\"Coupling\"],\"editor.inspector.option.coveringSpecific.1h9fo8w\":[\"Covering specific\"],\"editor.inspector.option.cross.1elubzv\":[\"Cross\"],\"editor.inspector.option.cubby.ivq4qc\":[\"Cubby\"],\"editor.inspector.option.curved.6noz1s\":[\"Curved\"],\"editor.inspector.option.cylinder.eol6vj\":[\"Cylinder\"],\"editor.inspector.option.damper.wgri80\":[\"Damper\"],\"editor.inspector.option.destination.gfzm1r\":[\"Destination\"],\"editor.inspector.option.diffuser.1igj0jh\":[\"Diffuser\"],\"editor.inspector.option.dogEar.xhtvjt\":[\"Dog ear\"],\"editor.inspector.option.dome.1c87e56\":[\"Dome\"],\"editor.inspector.option.double.13h5354\":[\"Double\"],\"editor.inspector.option.ductBoard.lc3o4t\":[\"Duct board\"],\"editor.inspector.option.dutch.1djx429\":[\"Dutch\"],\"editor.inspector.option.elbow.1flup74\":[\"Elbow\"],\"editor.inspector.option.end.1llf32i\":[\"End\"],\"editor.inspector.option.endCap.1p4v4na\":[\"End cap\"],\"editor.inspector.option.equalFit.11vw52c\":[\"Equal fit\"],\"editor.inspector.option.fixedCount.1o3dznu\":[\"Fixed count\"],\"editor.inspector.option.fixedSpacing.hl4dr4\":[\"Fixed spacing\"],\"editor.inspector.option.flat.ly0bei\":[\"Flat\"],\"editor.inspector.option.flex.ktpamq\":[\"Flex\"],\"editor.inspector.option.floating.1oadpln\":[\"Floating\"],\"editor.inspector.option.floor.q9caf1\":[\"Floor\"],\"editor.inspector.option.flush.olwwu5\":[\"Flush\"],\"editor.inspector.option.front.uhugl4\":[\"Front\"],\"editor.inspector.option.furnace.w0mzpf\":[\"Furnace\"],\"editor.inspector.option.gable.1ekyx6\":[\"Gable\"],\"editor.inspector.option.gambrel.1yo90d9\":[\"Gambrel\"],\"editor.inspector.option.generic.1074oey\":[\"Generic\"],\"editor.inspector.option.glass.163tc5n\":[\"Glass\"],\"editor.inspector.option.glassFrame.jp9s3m\":[\"Glass frame\"],\"editor.inspector.option.globe.1avkqoy\":[\"Globe\"],\"editor.inspector.option.grounded.jwoq73\":[\"Grounded\"],\"editor.inspector.option.guard.1m575se\":[\"Guard\"],\"editor.inspector.option.halfRound.m5hob0\":[\"Half round\"],\"editor.inspector.option.hidden.gp48rd\":[\"Hidden\"],\"editor.inspector.option.hip.r0jnjy\":[\"Hip\"],\"editor.inspector.option.horizontal.tyapah\":[\"Horizontal\"],\"editor.inspector.option.include.1a27vnr\":[\"Include\"],\"editor.inspector.option.independentHighBeam.1tn0zvy\":[\"Independent high beam\"],\"editor.inspector.option.industrial.8sd9u\":[\"Industrial\"],\"editor.inspector.option.inline.1uh05lg\":[\"Inline\"],\"editor.inspector.option.integrated.1xd9lv0\":[\"Integrated\"],\"editor.inspector.option.joined.1x2o8ds\":[\"Joined\"],\"editor.inspector.option.kStyle.m8kfwz\":[\"K style\"],\"editor.inspector.option.kickout.vt8s6p\":[\"Kickout\"],\"editor.inspector.option.knee.186hcui\":[\"Knee\"],\"editor.inspector.option.landing.tyqarg\":[\"Landing\"],\"editor.inspector.option.lantern.1h7o2xb\":[\"Lantern\"],\"editor.inspector.option.leave.1xf0sbk\":[\"Leave\"],\"editor.inspector.option.left.14n06mo\":[\"Left\"],\"editor.inspector.option.level.i4lhtp\":[\"Level\"],\"editor.inspector.option.lowProfile.1h9lgzg\":[\"Low profile\"],\"editor.inspector.option.mansard.dwzck9\":[\"Mansard\"],\"editor.inspector.option.manual.1wu7r43\":[\"Manual\"],\"editor.inspector.option.maximumSpacing.n1fzl4\":[\"Maximum spacing\"],\"editor.inspector.option.metal.1az9fgc\":[\"Metal\"],\"editor.inspector.option.metalPanel.1xdz476\":[\"Metal panel\"],\"editor.inspector.option.minimal.fwmiwg\":[\"Minimal\"],\"editor.inspector.option.mono.oszvd6\":[\"Mono\"],\"editor.inspector.option.none.deku7v\":[\"None\"],\"editor.inspector.option.omit.okcs7w\":[\"Omit\"],\"editor.inspector.option.open.n6hn1l\":[\"Open\"],\"editor.inspector.option.openRack.mvt1x0\":[\"Open rack\"],\"editor.inspector.option.opening.dfet3\":[\"Opening\"],\"editor.inspector.option.oval.1jiqzxx\":[\"Oval\"],\"editor.inspector.option.picket.zyeoy1\":[\"Picket\"],\"editor.inspector.option.pointed.effedk\":[\"Pointed\"],\"editor.inspector.option.postAndRail.lajk2u\":[\"Post and rail\"],\"editor.inspector.option.preserveHighEdge.y6ywf0\":[\"Preserve high edge\"],\"editor.inspector.option.preserveLowEdge.196m5pk\":[\"Preserve low edge\"],\"editor.inspector.option.preservePitch.1uq973r\":[\"Preserve pitch\"],\"editor.inspector.option.privacy.1th4hrb\":[\"Privacy\"],\"editor.inspector.option.purlins.od124c\":[\"Purlins\"],\"editor.inspector.option.pvc.1oc4u2w\":[\"Pvc\"],\"editor.inspector.option.pyramid.17ucsqv\":[\"Pyramid\"],\"editor.inspector.option.rafters.16tzbby\":[\"Rafters\"],\"editor.inspector.option.rail.39zqc9\":[\"Rail\"],\"editor.inspector.option.raised.4kyx9h\":[\"Raised\"],\"editor.inspector.option.rect.tpfvaf\":[\"Rect\"],\"editor.inspector.option.reducer.18byt67\":[\"Reducer\"],\"editor.inspector.option.return.1klrjrz\":[\"Return\"],\"editor.inspector.option.returnGrille.r28ncm\":[\"Return grille\"],\"editor.inspector.option.right.8humpx\":[\"Right\"],\"editor.inspector.option.round.1vx0wyj\":[\"Round\"],\"editor.inspector.option.rounded.199nwpm\":[\"Rounded\"],\"editor.inspector.option.sanitaryTee.oro3d4\":[\"Sanitary tee\"],\"editor.inspector.option.scalloped.1eltba0\":[\"Scalloped\"],\"editor.inspector.option.scoop.qy5zdv\":[\"Scoop\"],\"editor.inspector.option.segmentedPanel.5r3hwl\":[\"Segmented panel\"],\"editor.inspector.option.shed.6t994v\":[\"Shed\"],\"editor.inspector.option.sheetMetal.l164lv\":[\"Sheet metal\"],\"editor.inspector.option.shingle.pfmynh\":[\"Shingle\"],\"editor.inspector.option.shingled.1nm9inf\":[\"Shingled\"],\"editor.inspector.option.simple.12mfu73\":[\"Simple\"],\"editor.inspector.option.single.1uzxurt\":[\"Single\"],\"editor.inspector.option.singleLeft.1atdh02\":[\"Single left\"],\"editor.inspector.option.singleRight.1axbu67\":[\"Single right\"],\"editor.inspector.option.slantBox.1ta99vy\":[\"Slant box\"],\"editor.inspector.option.slat.1p9njbz\":[\"Slat\"],\"editor.inspector.option.sliding.cd0jox\":[\"Sliding\"],\"editor.inspector.option.slope.1bn2qw\":[\"Slope\"],\"editor.inspector.option.sloped.lo4sh0\":[\"Sloped\"],\"editor.inspector.option.solid.o4uy6s\":[\"Solid\"],\"editor.inspector.option.solidPanel.2yaw62\":[\"Solid panel\"],\"editor.inspector.option.spiral.91hcl4\":[\"Spiral\"],\"editor.inspector.option.splash.1uke4cm\":[\"Splash\"],\"editor.inspector.option.spread.1g1zysu\":[\"Spread\"],\"editor.inspector.option.square.1xl1lk6\":[\"Square\"],\"editor.inspector.option.stair.1xf86e\":[\"Stair\"],\"editor.inspector.option.standard.vuco\":[\"Standard\"],\"editor.inspector.option.start.30xvgf\":[\"Start\"],\"editor.inspector.option.step.jtn9kf\":[\"Step\"],\"editor.inspector.option.stepped.naxzh0\":[\"Stepped\"],\"editor.inspector.option.straight.lxqbfr\":[\"Straight\"],\"editor.inspector.option.strap.14q0ps9\":[\"Strap\"],\"editor.inspector.option.supply.1oy2zwu\":[\"Supply\"],\"editor.inspector.option.supplyRegister.1lzdbbn\":[\"Supply register\"],\"editor.inspector.option.tapered.3y5blo\":[\"Tapered\"],\"editor.inspector.option.targetSpacing.14uibc9\":[\"Target spacing\"],\"editor.inspector.option.tee.7d6tjp\":[\"Tee\"],\"editor.inspector.option.tilted.6n0u5j\":[\"Tilted\"],\"editor.inspector.option.top.2nypcs\":[\"Top\"],\"editor.inspector.option.transition.1rziz9e\":[\"Transition\"],\"editor.inspector.option.vent.xda5j2\":[\"Vent\"],\"editor.inspector.option.walkOn.1n5sg9l\":[\"Walk on\"],\"editor.inspector.option.wall.blj585\":[\"Wall\"],\"editor.inspector.option.wallAbutment.lza941\":[\"Wall abutment\"],\"editor.inspector.option.wallLedger.5m8ana\":[\"Wall ledger\"],\"editor.inspector.option.wallShelf.yiozfl\":[\"Wall shelf\"],\"editor.inspector.option.waste.3xrp79\":[\"Waste\"],\"editor.inspector.option.wye.14vupc8\":[\"Wye\"],\"editor.lib.contextualHelp.addOrRemoveObjectsFromThe\":[\"Add or remove objects from the selection\"],\"editor.lib.contextualHelp.adjustOneSideSCornerRadius\":[\"Adjust one side’s corner radius\"],\"editor.lib.contextualHelp.clearTheSelectionOrClickOutside\":[\"Clear the selection (or click outside)\"],\"editor.lib.contextualHelp.clickAHandleDotToShow\":[\"Click a handle dot to show move arrows\"],\"editor.lib.contextualHelp.clickOrDragTheSelectionTo\":[\"Click or drag the selection to move it as one\"],\"editor.lib.contextualHelp.clickTheHandleDotToShow\":[\"Click the handle dot to show move + rotate handles\"],\"editor.lib.contextualHelp.detachTheJointWhileDraggingAn\":[\"Detach the joint while dragging an arrow\"],\"editor.lib.contextualHelp.dragLeftOrRightToRotate\":[\"Drag left or right to rotate selected object\"],\"editor.lib.contextualHelp.dragSelectedMovableObject\":[\"Drag selected movable object\"],\"editor.lib.contextualHelp.groupSelectionSessionOnly\":[\"Group selection (session only)\"],\"editor.lib.contextualHelp.holdToRotateFreely\":[\"Hold to rotate freely\"],\"editor.lib.contextualHelp.rotate45\":[\"Rotate ±45°\"],\"editor.lib.contextualHelp.rotateTheSelection45\":[\"Rotate the selection ±45°\"],\"editor.lib.contextualHelp.rotatingFreely\":[\"Rotating freely (no angle step)\"],\"editor.lib.contextualHelp.switchTheRotationAxisYX\":[\"Switch the rotation axis (Y → X → Z)\"],\"editor.lib.contextualHelp.ungroupSessionSelection\":[\"Ungroup session selection\"],\"editor.lib.continuation.continuous\":[\"Continuous\"],\"editor.lib.continuation.continuousCanopy\":[\"Continuous canopy\"],\"editor.lib.continuation.continuousRun\":[\"Continuous run\"],\"editor.lib.continuation.curvedFence\":[\"Curved fence\"],\"editor.lib.continuation.freehandFence\":[\"Freehand fence\"],\"editor.lib.continuation.placeMultiple\":[\"Place multiple\"],\"editor.lib.continuation.placeOnce\":[\"Place once\"],\"editor.lib.continuation.polygonRoom\":[\"Polygon room\"],\"editor.lib.continuation.rectangleRoom\":[\"Rectangle room\"],\"editor.lib.continuation.singleCabinet\":[\"Single cabinet\"],\"editor.lib.continuation.singleCanopy\":[\"Single canopy\"],\"editor.lib.continuation.singleFence\":[\"Single fence\"],\"editor.lib.continuation.walls\":[\"Walls\"],\"editor.lib.hudTitle.cutOpening\":[\"Cut opening\"],\"editor.lib.hudTitle.divideRoom\":[\"Divide room\"],\"editor.lib.hudTitle.editKind\":[\"Edit \",[\"kind\"]],\"editor.lib.hudTitle.erase\":[\"Erase\"],\"editor.lib.hudTitle.levelTerrain\":[\"Level terrain\"],\"editor.lib.hudTitle.lowerTerrain\":[\"Lower terrain\"],\"editor.lib.hudTitle.mezzanine\":[\"Mezzanine\"],\"editor.lib.hudTitle.moveKind\":[\"Move \",[\"kind\"]],\"editor.lib.hudTitle.moveRoom\":[\"Move room\"],\"editor.lib.hudTitle.moveSelection\":[\"Move selection\"],\"editor.lib.hudTitle.paint\":[\"Paint\"],\"editor.lib.hudTitle.paintARectangle\":[\"Paint a rectangle\"],\"editor.lib.hudTitle.paintAShape\":[\"Paint a shape\"],\"editor.lib.hudTitle.pickMaterial\":[\"Pick material\"],\"editor.lib.hudTitle.raiseTerrain\":[\"Raise terrain\"],\"editor.lib.hudTitle.resize\":[\"Resize\"],\"editor.lib.hudTitle.rotate\":[\"Rotate\"],\"editor.lib.hudTitle.select\":[\"Select\"],\"editor.lib.hudTitle.smartMeasure\":[\"Smart measure\"],\"editor.lib.hudTitle.smoothTerrain\":[\"Smooth terrain\"],\"editor.lib.hudTitle.splitKind\":[\"Split \",[\"kind\"]],\"editor.lib.hudTitle.terrace\":[\"Terrace\"],\"editor.lib.wallDrawVariant.polygonRoom\":[\"Polygon room\"],\"editor.lib.wallDrawVariant.rectangleRoom\":[\"Rectangle room\"],\"editor.lib.wallDrawVariant.walls\":[\"Walls\"],\"editor.nodeDisplay.ceiling\":[\"Ceiling\"],\"editor.nodeDisplay.column\":[\"Column\"],\"editor.nodeDisplay.door\":[\"Door\"],\"editor.nodeDisplay.elevator\":[\"Elevator\"],\"editor.nodeDisplay.fence\":[\"Fence\"],\"editor.nodeDisplay.guide\":[\"Guide image\"],\"editor.nodeDisplay.item\":[\"Item\"],\"editor.nodeDisplay.roof\":[\"Roof\"],\"editor.nodeDisplay.roofSegment\":[\"Roof segment\"],\"editor.nodeDisplay.room\":[\"Room\"],\"editor.nodeDisplay.scan\":[\"3D Scan\"],\"editor.nodeDisplay.selection\":[\"Selection\"],\"editor.nodeDisplay.slab\":[\"Slab\"],\"editor.nodeDisplay.stair\":[\"Stair\"],\"editor.nodeDisplay.stairSegment\":[\"Stair segment\"],\"editor.nodeDisplay.wall\":[\"Wall\"],\"editor.nodeDisplay.window\":[\"Window\"],\"editor.nodeDisplay.zone\":[\"Zone\"],\"editor.panels.collections.collectionsPopover.cancel\":[\"Cancel\"],\"editor.panels.collections.collectionsPopover.collectionName\":[\"Collection name…\"],\"editor.panels.collections.collectionsPopover.collections\":[\"Collections\"],\"editor.panels.collections.collectionsPopover.delete\":[\"Delete\"],\"editor.panels.collections.collectionsPopover.deleteName\":[\"Delete \\\"\",[\"name\"],\"\\\"?\"],\"editor.panels.collections.collectionsPopover.new\":[\"New\"],\"editor.panels.collections.collectionsPopover.noCollectionsYetCreateOneTo\":[\"No collections yet. Create one to group elements together.\"],\"editor.panels.collections.collectionsPopover.rename\":[\"Rename\"],\"editor.panels.floorFoundationPanel.aThickerFloorGrowsUpwardThe\":[\"A thicker floor grows upward: the rooms below keep their height.\"],\"editor.panels.floorFoundationPanel.edgeFinish\":[\"Edge finish\"],\"editor.panels.floorFoundationPanel.floorPlate\":[\"Floor plate\"],\"editor.panels.floorFoundationPanel.floorPlateThicknesslabelThickRestingOn\":[\"Floor plate \",[\"thicknessLabel\"],\" thick, resting on the walls below\"],\"editor.panels.floorFoundationPanel.floorThickness\":[\"Floor thickness\"],\"editor.panels.floorFoundationPanel.floorTopAbove\":[\"Floor top +\",[\"height\"]],\"editor.panels.floorFoundationPanel.floorTopValue\":[\"Floor top \",[\"height\"]],\"editor.panels.floorFoundationPanel.foundationFinish\":[\"Foundation finish\"],\"editor.panels.floorFoundationPanel.foundationHeight\":[\"Foundation height\"],\"editor.panels.floorFoundationPanel.kicker\":[\"Floor plate\"],\"editor.panels.floorFoundationPanel.kickerLevel\":[\"Floor plate · \",[\"level\"]],\"editor.panels.floorFoundationPanel.kickerRestsOn\":[\"Floor plate · \",[\"level\"],\" · rests on \",[\"below\"]],\"editor.panels.floorFoundationPanel.lowerTogether\":[[\"count\",\"plural\",{\"2\":[\"Lower both\"],\"other\":[\"Lower all \",\"#\"]}]],\"editor.panels.floorFoundationPanel.notToScale\":[\"Not to scale\"],\"editor.panels.floorFoundationPanel.onTheGround\":[\"On the ground\"],\"editor.panels.floorFoundationPanel.raiseTogether\":[[\"count\",\"plural\",{\"2\":[\"Raise both\"],\"other\":[\"Raise all \",\"#\"]}]],\"editor.panels.floorFoundationPanel.raisedOnAFoundation\":[\"Raised on a foundation\"],\"editor.panels.floorFoundationPanel.section.floorPlate\":[\"Floor plate · \",[\"thickness\"]],\"editor.panels.floorFoundationPanel.section.floorTop\":[\"Floor top\"],\"editor.panels.floorFoundationPanel.section.foundation\":[\"Foundation\"],\"editor.panels.floorFoundationPanel.section.foundationKind\":[\"Foundation · \",[\"foundation\"]],\"editor.panels.floorFoundationPanel.section.ground\":[\"Ground\"],\"editor.panels.floorFoundationPanel.section.slab\":[\"Slab · \",[\"thickness\"]],\"editor.panels.floorFoundationPanel.section.wallsBelow\":[\"Walls below\"],\"editor.panels.floorFoundationPanel.sectionOnGround\":[\"Slab \",[\"thickness\"],\" thick on the ground, floor top \",[\"top\"],\" above the ground\"],\"editor.panels.floorFoundationPanel.sectionRaised\":[\"Slab \",[\"thickness\"],\" thick on a \",[\"foundation\"],\" foundation, floor top \",[\"top\"],\" above the ground\"],\"editor.panels.floorFoundationPanel.slab\":[\"Slab\"],\"editor.panels.floorFoundationPanel.slabThickness\":[\"Slab thickness\"],\"editor.panels.floorFoundationPanel.theFloorSOutsideEdgeAll\":[\"The floor's outside edge, all around the footprint.\"],\"editor.panels.floorFoundationPanel.theFoundationStandsOnTheGround\":[\"The foundation stands on the ground; the slab sits on it.\"],\"editor.panels.floorFoundationPanel.theSlabSitsOnTheFoundation\":[\"The slab sits on the foundation (or the ground): a thicker slab raises the floor top and everything on it.\"],\"editor.panels.floorFoundationPanel.underTheFloor\":[\"Under the floor\"],\"editor.panels.floorOpeningPanel.aHatchInTheMezzanineIt\":[\"A hatch in the mezzanine: it cuts only the mezzanine’s floor.\"],\"editor.panels.floorOpeningPanel.alsoCutTheCeilingBelow\":[\"Also cut the ceiling below\"],\"editor.panels.floorOpeningPanel.alsoCutTheFloorAbove\":[\"Also cut the floor above\"],\"editor.panels.floorOpeningPanel.areaDragCorners\":[[\"area\"],\" · Drag its corners to change the shape.\"],\"editor.panels.floorOpeningPanel.areaOwned\":[[\"area\"],\" · Shape follows its owner.\"],\"editor.panels.floorOpeningPanel.delete\":[\"Delete\"],\"editor.panels.floorOpeningPanel.done\":[\"Done\"],\"editor.panels.floorOpeningPanel.kicker\":[\"Opening\"],\"editor.panels.floorOpeningPanel.kickerLevel\":[\"Opening · \",[\"level\"]],\"editor.panels.floorOpeningPanel.kickerRoom\":[\"Opening · in \",[\"room\"]],\"editor.panels.floorOpeningPanel.kickerRoomLevel\":[\"Opening · in \",[\"room\"],\" · \",[\"level\"]],\"editor.panels.floorOpeningPanel.oneVoidWith\":[\"On \",[\"level\"],\", as one void with this opening.\"],\"editor.panels.floorOpeningPanel.ownedByElevator\":[\"Owned by Elevator\"],\"editor.panels.floorOpeningPanel.ownedByStaircase\":[\"Owned by Staircase\"],\"editor.panels.floorOpeningPanel.thereIsNoFloorAboveThis\":[\"There is no floor above this storey.\"],\"editor.panels.floorOpeningPanel.thereIsNoStoreyBelow\":[\"There is no storey below.\"],\"editor.panels.floorOpeningPanel.title\":[[\"source\",\"select\",{\"stair\":[\"Stair opening\"],\"elevator\":[\"Elevator opening\"],\"ceiling\":[\"Ceiling opening\"],\"other\":[\"Floor opening\"]}]],\"editor.panels.mergeRefusal.alreadyJoined\":[\"One of them already wraps another corner. Unwrap it first.\"],\"editor.panels.mergeRefusal.cannotMerge\":[\"These windows cannot be merged.\"],\"editor.panels.mergeRefusal.cornerAngle\":[\"Their walls meet at too sharp or too flat an angle for a corner window.\"],\"editor.panels.mergeRefusal.heightExceedsWall\":[\"The window selected first is taller than the other wall. Select the other one first.\"],\"editor.panels.mergeRefusal.kindBetween\":[\"A \",[\"kind\"],\" is between them.\"],\"editor.panels.mergeRefusal.kindOverlap\":[\"Sliding them to the corner would overlap a \",[\"kind\"],\".\"],\"editor.panels.mergeRefusal.notAdjacent\":[\"They are too far apart. Windows merge with at most \",[\"reach\"],\" between them.\"],\"editor.panels.mergeRefusal.notAtCorner\":[\"One of them is too far from the corner. A window joins one within \",[\"reach\"],\" of it.\"],\"editor.panels.mergeRefusal.notOnWall\":[\"A roof or dormer window cannot join another window.\"],\"editor.panels.mergeRefusal.somethingBetween\":[\"There is something between them.\"],\"editor.panels.mergeRefusal.somethingOverlap\":[\"Sliding them to the corner would overlap something.\"],\"editor.panels.mergeRefusal.wallsNotMeeting\":[\"Their walls do not meet at a corner.\"],\"editor.panels.mixed\":[\"Mixed\"],\"editor.panels.mobilePanelSheet.close\":[\"Close\"],\"editor.panels.mobileSelectionBar.delete\":[\"Delete\"],\"editor.panels.mobileSelectionBar.duplicate\":[\"Duplicate\"],\"editor.panels.mobileSelectionBar.editProperties\":[\"Edit properties\"],\"editor.panels.mobileSelectionBar.editResolvedlabel\":[\"Edit \",[\"resolvedLabel\"]],\"editor.panels.mobileSelectionBar.move\":[\"Move\"],\"editor.panels.multiHeightMode.currentlyCurrentlabel\":[\"Currently \",[\"currentLabel\"]],\"editor.panels.multiHeightMode.customHeight\":[\"Custom height\"],\"editor.panels.multiHeightMode.followsLevel\":[\"Follows level\"],\"editor.panels.multiHeightMode.height\":[\"Height\"],\"editor.panels.multiHeightMode.top\":[\"Top\"],\"editor.panels.multiParametricInspector.labelSessionOnlyPlainClickReselects\":[[\"label\"],\" (session only). Plain click reselects all members. Not saved with the project.\"],\"editor.panels.multiSelectionPanel.delete\":[\"Delete\"],\"editor.panels.multiSelectionPanel.duplicate\":[\"Duplicate\"],\"editor.panels.multiSelectionPanel.group\":[\"Group\"],\"editor.panels.multiSelectionPanel.groupCtrlCmdG\":[\"Group (Ctrl/Cmd+G)\"],\"editor.panels.multiSelectionPanel.labelSessionOnlyPlainClickReselects\":[[\"label\"],\" (session only). Plain click reselects all members. Not saved with the project.\"],\"editor.panels.multiSelectionPanel.lengthSelected\":[[\"length\"],\" selected\"],\"editor.panels.multiSelectionPanel.mergeWindows\":[\"Merge windows\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoACornerWindow\":[\"Merge windows into a corner window: both take the height, sill and type of the one you selected first\"],\"editor.panels.multiSelectionPanel.mergeWindowsIntoOneAcrossBoth\":[\"Merge windows into one across both: it keeps the type and style of the one you selected first\"],\"editor.panels.multiSelectionPanel.selectBuilding\":[\"Select building\"],\"editor.panels.multiSelectionPanel.selectTheWholeBuildingToMove\":[\"Select the whole building to move all its levels\"],\"editor.panels.multiSelectionPanel.ungroup\":[\"Ungroup\"],\"editor.panels.multiSelectionPanel.ungroupCtrlCmdShiftG\":[\"Ungroup (Ctrl/Cmd+Shift+G)\"],\"editor.panels.multiSelectionPanel.unwrapTheCorner\":[\"Unwrap the corner\"],\"editor.panels.multiSelectionPanel.unwrapTheCornerBothWindowsStay\":[\"Unwrap the corner: both windows stay, each framed at the corner\"],\"editor.panels.panelManager.selection\":[\"Selection\"],\"editor.panels.panelWrapper.back\":[\"Back\"],\"editor.panels.panelWrapper.close\":[\"Close\"],\"editor.panels.panelWrapper.closeTitle\":[\"Close \",[\"title\"]],\"editor.panels.panelWrapper.collapsePanel\":[\"Collapse panel\"],\"editor.panels.panelWrapper.collections\":[\"Collections\"],\"editor.panels.panelWrapper.expandPanel\":[\"Expand panel\"],\"editor.panels.panelWrapper.manageCollections\":[\"Manage collections…\"],\"editor.panels.panelWrapper.openTitle\":[\"Open \",[\"title\"]],\"editor.panels.panelWrapper.reset\":[\"Reset\"],\"editor.panels.panelWrapper.titleHitAnErrorAndWas\":[\"“\",[\"title\"],\"” hit an error and was unloaded for this session.\"],\"editor.panels.parametricFieldControl.mixed\":[\"Mixed\"],\"editor.panels.parametricInspector.actions\":[\"Actions\"],\"editor.panels.parametricInspector.delete\":[\"Delete\"],\"editor.panels.parametricInspector.deleteWithContents\":[\"Delete with contents\"],\"editor.panels.parametricInspector.move\":[\"Move\"],\"editor.panels.referencePanel.cancel\":[\"Cancel\"],\"editor.panels.referencePanel.capture\":[\"Capture\"],\"editor.panels.referencePanel.center\":[\"Center\"],\"editor.panels.referencePanel.clearScale\":[\"Clear Scale\"],\"editor.panels.referencePanel.clickBothEndsOfAKnown\":[\"Click both ends of a known distance on the plan, then type its real length.\"],\"editor.panels.referencePanel.delete\":[\"Delete\"],\"editor.panels.referencePanel.drawALineOverAKnown\":[\"Draw a line over a known dimension on the plan, then type its real length to scale the image exactly.\"],\"editor.panels.referencePanel.editScale\":[\"Edit Scale\"],\"editor.panels.referencePanel.guideImage\":[\"Guide Image\"],\"editor.panels.referencePanel.hide\":[\"Hide\"],\"editor.panels.referencePanel.hideScale\":[\"Hide Scale\"],\"editor.panels.referencePanel.image\":[\"Image\"],\"editor.panels.referencePanel.lock\":[\"Lock\"],\"editor.panels.referencePanel.move\":[\"Move\"],\"editor.panels.referencePanel.opacity\":[\"Opacity\"],\"editor.panels.referencePanel.overlayImageUnavailableReplaceTheImage\":[\"Overlay image unavailable. Replace the image to restore it.\"],\"editor.panels.referencePanel.pos\":[\"pos\"],\"editor.panels.referencePanel.position\":[\"Position\"],\"editor.panels.referencePanel.quickActions\":[\"Quick Actions\"],\"editor.panels.referencePanel.referenceScale\":[\"Reference Scale\"],\"editor.panels.referencePanel.replace\":[\"Replace\"],\"editor.panels.referencePanel.replacing\":[\"Replacing...\"],\"editor.panels.referencePanel.resetImageScale\":[\"Reset Image Scale\"],\"editor.panels.referencePanel.resetRotation\":[\"Reset Rotation\"],\"editor.panels.referencePanel.rot\":[\"rot\"],\"editor.panels.referencePanel.rotation\":[\"Rotation\"],\"editor.panels.referencePanel.scale\":[\"scale\"],\"editor.panels.referencePanel.scaleOpacity\":[\"Scale & Opacity\"],\"editor.panels.referencePanel.scaled\":[\"Scaled · \",[\"scale\"]],\"editor.panels.referencePanel.scaledHidden\":[\"Scaled (hidden) · \",[\"scale\"]],\"editor.panels.referencePanel.setScale\":[\"Set Scale\"],\"editor.panels.referencePanel.show\":[\"Show\"],\"editor.panels.referencePanel.showScale\":[\"Show Scale\"],\"editor.panels.referencePanel.uncalibrated\":[\"Uncalibrated\"],\"editor.panels.referencePanel.unlock\":[\"Unlock\"],\"editor.panels.referencePanel.xyz\":[\"XYZ\"],\"editor.panels.roomConstructionRows.aDrawnSlabSetItsThickness\":[\"A drawn slab: set its thickness and finishes here. It has no footprint height or foundation.\"],\"editor.panels.roomConstructionRows.addMezzanine\":[\"+ Add mezzanine\"],\"editor.panels.roomConstructionRows.atFloorLevel\":[\"At floor level\"],\"editor.panels.roomConstructionRows.builtOn\":[\"Built on\"],\"editor.panels.roomConstructionRows.builtWith\":[\"Built with\"],\"editor.panels.roomConstructionRows.ceiling\":[\"Ceiling\"],\"editor.panels.roomConstructionRows.ceilingAt\":[\"At \",[\"height\"]],\"editor.panels.roomConstructionRows.closeWithWalls\":[\"Close with walls\"],\"editor.panels.roomConstructionRows.drawnFloor\":[[\"ambiguous\",\"select\",{\"yes\":[\"Floor is several drawn slabs, mostly \",[\"name\"]],\"other\":[\"Floor is a drawn slab: \",[\"name\"]]}],[\"shared\",\"plural\",{\"0\":[],\"one\":[\" (shared with \",\"#\",\" room)\"],\"other\":[\" (shared with \",\"#\",\" rooms)\"]}]],\"editor.panels.roomConstructionRows.drawnFloorSwitchHint\":[\"This floor is a drawn slab: select it to edit or delete it.\"],\"editor.panels.roomConstructionRows.drawnSlab\":[\"Drawn slab\"],\"editor.panels.roomConstructionRows.drawnSlabAt\":[\"Drawn slab at \",[\"height\"]],\"editor.panels.roomConstructionRows.editShape\":[\"Edit shape\"],\"editor.panels.roomConstructionRows.flatAtWallHeight\":[\"Flat, at wall height\"],\"editor.panels.roomConstructionRows.floor\":[\"Floor\"],\"editor.panels.roomConstructionRows.floorDown\":[[\"distance\"],\" down\"],\"editor.panels.roomConstructionRows.floorThickness\":[\"Floor thickness\"],\"editor.panels.roomConstructionRows.floorUp\":[[\"distance\"],\" up\"],\"editor.panels.roomConstructionRows.handDrawnCeiling\":[\"Hand-drawn ceiling\"],\"editor.panels.roomConstructionRows.height\":[\"Height\"],\"editor.panels.roomConstructionRows.includeFloor\":[\"Include floor\"],\"editor.panels.roomConstructionRows.includePart\":[[\"part\",\"select\",{\"floor\":[\"Include floor\"],\"walls\":[\"Include walls\"],\"other\":[\"Include ceiling\"]}]],\"editor.panels.roomConstructionRows.includeWalls\":[\"Include walls\"],\"editor.panels.roomConstructionRows.keepOutsideDimensions\":[\"Keep outside dimensions\"],\"editor.panels.roomConstructionRows.lowered\":[\"Lowered \",[\"lift\"]],\"editor.panels.roomConstructionRows.newFloor\":[\"+ New floor\"],\"editor.panels.roomConstructionRows.noFloor\":[\"No floor\"],\"editor.panels.roomConstructionRows.notIncluded\":[\"Not included\"],\"editor.panels.roomConstructionRows.nothingToChange\":[\"Nothing to change.\"],\"editor.panels.roomConstructionRows.onTheGround\":[\"On the ground\"],\"editor.panels.roomConstructionRows.onTheWallsBelow\":[\"On the walls below\"],\"editor.panels.roomConstructionRows.openSides\":[[\"openSides\",\"plural\",{\"one\":[\"#\",\" open side\"],\"other\":[\"#\",\" open sides\"]}]],\"editor.panels.roomConstructionRows.partialCovered\":[\"Partial · \",[\"coverage\",\"number\",\"percent\"],\" covered\"],\"editor.panels.roomConstructionRows.partialWalls\":[\"Partial · \",[\"walls\",\"plural\",{\"one\":[\"#\",\" wall\"],\"other\":[\"#\",\" walls\"]}],\", \",[\"openSides\",\"plural\",{\"one\":[\"#\",\" open side\"],\"other\":[\"#\",\" open sides\"]}]],\"editor.panels.roomConstructionRows.raised\":[\"Raised \",[\"lift\"]],\"editor.panels.roomConstructionRows.replace\":[\"Replace\"],\"editor.panels.roomConstructionRows.select\":[\"Select\"],\"editor.panels.roomConstructionRows.shape\":[\"Shape\"],\"editor.panels.roomConstructionRows.sharedWallsNote\":[\"Turning walls off keeps the ones shared with \",[\"rooms\"],\".\"],\"editor.panels.roomConstructionRows.sitsOnPreset\":[\"Sits on: \",[\"name\"],\" · \",[\"preset\"]],\"editor.panels.roomConstructionRows.useExisting\":[\"Use existing\"],\"editor.panels.roomConstructionRows.wallCount\":[[\"walls\",\"plural\",{\"one\":[\"#\",\" wall\"],\"other\":[\"#\",\" walls\"]}]],\"editor.panels.roomConstructionRows.walls\":[\"Walls\"],\"editor.panels.roomConstructionRows.wallsThickenInwardSoTheBuilding\":[\"Walls thicken inward, so the building's outer size stays the same.\"],\"editor.panels.roomOpeningsField.cutOpening\":[\"Cut opening\"],\"editor.panels.roomOpeningsField.done\":[\"Done\"],\"editor.panels.roomOpeningsField.editFloor\":[\"Edit floor\"],\"editor.panels.roomOpeningsField.elevatorOpening\":[\"Elevator opening\"],\"editor.panels.roomOpeningsField.noOpenings\":[\"No openings\"],\"editor.panels.roomOpeningsField.noOpeningsYetCutOneFor\":[\"No openings yet. Cut one for a stair void or a hatch.\"],\"editor.panels.roomOpeningsField.openingNumber\":[\"Opening \",[\"number\"]],\"editor.panels.roomOpeningsField.stairOpening\":[\"Stair opening\"],\"editor.panels.roomPanel.addStairs\":[\"Add stairs\"],\"editor.panels.roomPanel.addToAUnit\":[\"Add to a unit\"],\"editor.panels.roomPanel.area\":[\"Area\"],\"editor.panels.roomPanel.browse\":[\"Browse\"],\"editor.panels.roomPanel.builtWith\":[\"Built with\"],\"editor.panels.roomPanel.ceiling\":[\"Ceiling\"],\"editor.panels.roomPanel.deleteRoom\":[\"Delete room\"],\"editor.panels.roomPanel.editShape\":[\"Edit shape\"],\"editor.panels.roomPanel.floor\":[\"Floor\"],\"editor.panels.roomPanel.headroom\":[[\"height\"],\" headroom\"],\"editor.panels.roomPanel.height\":[\"Height\"],\"editor.panels.roomPanel.hideCode\":[\"Hide code\"],\"editor.panels.roomPanel.kickerLevel\":[\"Room · \",[\"level\"]],\"editor.panels.roomPanel.kickerMezzanineIn\":[\"Mezzanine · in \",[\"room\"]],\"editor.panels.roomPanel.kickerNotEnclosed\":[\"Room · not enclosed\"],\"editor.panels.roomPanel.loading\":[\"Loading…\"],\"editor.panels.roomPanel.mezzanine\":[\"Mezzanine\"],\"editor.panels.roomPanel.mezzanineName\":[\"Mezzanine name\"],\"editor.panels.roomPanel.mezzanineNames\":[\"Mezzanine names\"],\"editor.panels.roomPanel.newUnit\":[\"New unit\"],\"editor.panels.roomPanel.none\":[\"None\"],\"editor.panels.roomPanel.notEnoughHeadroom\":[\"Not enough headroom\"],\"editor.panels.roomPanel.openRoomArea\":[[\"area\"],\" · Close its walls to build its floor and ceiling.\"],\"editor.panels.roomPanel.openingCounts\":[[\"doors\",\"plural\",{\"one\":[\"#\",\" door\"],\"other\":[\"#\",\" doors\"]}],\" · \",[\"windows\",\"plural\",{\"one\":[\"#\",\" window\"],\"other\":[\"#\",\" windows\"]}]],\"editor.panels.roomPanel.overTheMezzanine\":[\"Over the mezzanine\"],\"editor.panels.roomPanel.perimeter\":[\"Perimeter\"],\"editor.panels.roomPanel.pick\":[\"Pick\"],\"editor.panels.roomPanel.pickingItAddsANumber\":[\"Picking it adds a number\"],\"editor.panels.roomPanel.remove\":[\"Remove\"],\"editor.panels.roomPanel.removeFromUnit\":[\"Remove from unit\"],\"editor.panels.roomPanel.removeFromUnitNamed\":[\"Remove from \",[\"unit\"]],\"editor.panels.roomPanel.rename\":[\"Rename\"],\"editor.panels.roomPanel.renameNamed\":[[\"name\"],\" · Rename\"],\"editor.panels.roomPanel.revert\":[\"Revert\"],\"editor.panels.roomPanel.room\":[\"Room\"],\"editor.panels.roomPanel.roomColourUsedInThePlan\":[\"Room colour — used in the plan and labels\"],\"editor.panels.roomPanel.roomName\":[\"Room name\"],\"editor.panels.roomPanel.roomNames\":[\"Room names\"],\"editor.panels.roomPanel.scriptedFinish\":[\"Scripted finish\"],\"editor.panels.roomPanel.shape\":[\"Shape\"],\"editor.panels.roomPanel.showMezzanineNames\":[\"Show mezzanine names\"],\"editor.panels.roomPanel.showRoomNames\":[\"Show room names\"],\"editor.panels.roomPanel.stairs\":[\"Stairs\"],\"editor.panels.roomPanel.unit\":[\"Unit\"],\"editor.panels.roomPanel.use\":[\"Use\"],\"editor.panels.roomPanel.useTyped\":[[\"use\"],\" “\",[\"name\"],\"”\"],\"editor.panels.roomPanel.usedOnThisLevel\":[[\"used\"],\" on this level\"],\"editor.panels.roomPanel.viewCode\":[\"View code\"],\"editor.panels.scriptUnreadable\":[\"The script could not be read.\"],\"editor.panels.shapeChoice.polygon\":[\"Polygon\"],\"editor.panels.shapeChoice.rectangle\":[\"Rectangle\"],\"editor.panels.wallRegionList.deleteRegion\":[\"Delete region\"],\"editor.panels.wallRegionList.paintRegions\":[\"Paint regions\"],\"editor.reloadEditor\":[\"Reload editor\"],\"editor.room.builtOn.above\":[[\"current\"],\" · \",[\"distance\"],\" above \",[\"shared\"]],\"editor.room.builtOn.below\":[[\"current\"],\" · \",[\"distance\"],\" below \",[\"shared\"]],\"editor.room.builtOn.levelWith\":[[\"current\"],\" · level with \",[\"shared\"]],\"editor.roomName.attic\":[\"Attic\"],\"editor.roomName.balcony\":[\"Balcony\"],\"editor.roomName.basement\":[\"Basement\"],\"editor.roomName.bathroom\":[\"Bathroom\"],\"editor.roomName.bedroom\":[\"Bedroom\"],\"editor.roomName.boilerRoom\":[\"Boiler room\"],\"editor.roomName.carport\":[\"Carport\"],\"editor.roomName.cellar\":[\"Cellar\"],\"editor.roomName.closet\":[\"Closet\"],\"editor.roomName.corridor\":[\"Corridor\"],\"editor.roomName.courtyard\":[\"Courtyard\"],\"editor.roomName.deck\":[\"Deck\"],\"editor.roomName.den\":[\"Den\"],\"editor.roomName.diningRoom\":[\"Dining room\"],\"editor.roomName.dressingRoom\":[\"Dressing room\"],\"editor.roomName.enSuite\":[\"En-suite\"],\"editor.roomName.entrance\":[\"Entrance\"],\"editor.roomName.familyRoom\":[\"Family room\"],\"editor.roomName.gallery\":[\"Gallery\"],\"editor.roomName.gamesRoom\":[\"Games room\"],\"editor.roomName.garage\":[\"Garage\"],\"editor.roomName.garden\":[\"Garden\"],\"editor.roomName.gardenShed\":[\"Garden shed\"],\"editor.roomName.guestRoom\":[\"Guest room\"],\"editor.roomName.gym\":[\"Gym\"],\"editor.roomName.hallway\":[\"Hallway\"],\"editor.roomName.homeCinema\":[\"Home cinema\"],\"editor.roomName.kidsRoom\":[\"Kids' room\"],\"editor.roomName.kitchen\":[\"Kitchen\"],\"editor.roomName.kitchenette\":[\"Kitchenette\"],\"editor.roomName.landing\":[\"Landing\"],\"editor.roomName.laundry\":[\"Laundry\"],\"editor.roomName.library\":[\"Library\"],\"editor.roomName.livingRoom\":[\"Living room\"],\"editor.roomName.loft\":[\"Loft\"],\"editor.roomName.lounge\":[\"Lounge\"],\"editor.roomName.mezzanine\":[\"Mezzanine\"],\"editor.roomName.mudroom\":[\"Mudroom\"],\"editor.roomName.nursery\":[\"Nursery\"],\"editor.roomName.office\":[\"Office\"],\"editor.roomName.pantry\":[\"Pantry\"],\"editor.roomName.patio\":[\"Patio\"],\"editor.roomName.playroom\":[\"Playroom\"],\"editor.roomName.poolArea\":[\"Pool area\"],\"editor.roomName.porch\":[\"Porch\"],\"editor.roomName.powderRoom\":[\"Powder room\"],\"editor.roomName.primaryBedroom\":[\"Primary bedroom\"],\"editor.roomName.readingNook\":[\"Reading nook\"],\"editor.roomName.section.bathrooms\":[\"Bathrooms\"],\"editor.roomName.section.circulation\":[\"Circulation\"],\"editor.roomName.section.living\":[\"Living\"],\"editor.roomName.section.mezzanine\":[\"Mezzanine\"],\"editor.roomName.section.outdoor\":[\"Outdoor\"],\"editor.roomName.section.sleeping\":[\"Sleeping\"],\"editor.roomName.section.utility\":[\"Utility & storage\"],\"editor.roomName.section.work\":[\"Work & hobbies\"],\"editor.roomName.showerRoom\":[\"Shower room\"],\"editor.roomName.stairwell\":[\"Stairwell\"],\"editor.roomName.storage\":[\"Storage\"],\"editor.roomName.studio\":[\"Studio\"],\"editor.roomName.study\":[\"Study\"],\"editor.roomName.sunroom\":[\"Sunroom\"],\"editor.roomName.terrace\":[\"Terrace\"],\"editor.roomName.toilet\":[\"Toilet\"],\"editor.roomName.utilityRoom\":[\"Utility room\"],\"editor.roomName.veranda\":[\"Veranda\"],\"editor.roomName.walkInCloset\":[\"Walk-in closet\"],\"editor.roomName.workshop\":[\"Workshop\"],\"editor.theEditorSceneFailedToRender\":[\"The editor scene failed to render\"],\"editor.toolHint.aCurtainWallTakesNoCorner.1qxjv5i\":[\"A curtain wall takes no corner window\"],\"editor.toolHint.aCurvedWallTakesNoCorner.1vdnaw5\":[\"A curved wall takes no corner window\"],\"editor.toolHint.addACornerClickTheFirst.o4r67t\":[\"Add a corner · click the first to close\"],\"editor.toolHint.anotherOpeningIsInTheWay.11l9dd0\":[\"Another opening is in the way at the corner\"],\"editor.toolHint.autoHangers.10554ka\":[\"Auto hangers\"],\"editor.toolHint.autoHangersClickOrPressH.rwa3ka\":[\"Auto hangers - click or press H to toggle\"],\"editor.toolHint.autoHangersOff.7yx01x\":[\"Auto hangers: Off\"],\"editor.toolHint.autoHangersOn.10b1umh\":[\"Auto hangers: On\"],\"editor.toolHint.bypassSnapping.w5lmdv\":[\"Bypass snapping\"],\"editor.toolHint.cancel.ew9em3\":[\"Cancel\"],\"editor.toolHint.cancelMove.lvp31c\":[\"Cancel move\"],\"editor.toolHint.cancelRunExit.zqjf3h\":[\"Cancel run / exit\"],\"editor.toolHint.cancelStartPoint.1xbq2lh\":[\"Cancel start point\"],\"editor.toolHint.cornerWindow.1avkzpo\":[\"Corner window\"],\"editor.toolHint.cuts.1y0axps\":[\"Cuts\"],\"editor.toolHint.cutsValue.ouzhvb\":[\"Cuts: \",[\"value\"]],\"editor.toolHint.cutsValueEven.1ngsz3\":[\"Cuts: \",[\"value\"],\", even\"],\"editor.toolHint.cycleMonoGableButterfly.1poga3m\":[\"Cycle mono / gable / butterfly\"],\"editor.toolHint.cycleSnappingMode.1ct0gn6\":[\"Cycle snapping mode\"],\"editor.toolHint.doorStyleClickOrPressL.33pe65\":[\"Door style — click or press L to cycle\"],\"editor.toolHint.doorTypeClickOrPressO.1hhh8gt\":[\"Door type — click or press O to cycle\"],\"editor.toolHint.dropDownspoutFromOutlet.1k4h1m4\":[\"Drop downspout from outlet\"],\"editor.toolHint.ductDiameterDownUp.1wdz5vq\":[\"Duct diameter down / up\"],\"editor.toolHint.endRunCancel.59dh2w\":[\"End run / cancel\"],\"editor.toolHint.exit.engmg5\":[\"Exit\"],\"editor.toolHint.exitDrawing.9noxyb\":[\"Exit drawing\"],\"editor.toolHint.finishAndContinue.1gpfsks\":[\"Finish and continue\"],\"editor.toolHint.finishCeiling.1c1lfel\":[\"Finish ceiling\"],\"editor.toolHint.finishGridAxis.1wvrfhr\":[\"Finish grid axis\"],\"editor.toolHint.finishMeasurement.1e4gv16\":[\"Finish measurement\"],\"editor.toolHint.finishMultiPointWitnesses.8wzskz\":[\"Finish multi-point witnesses\"],\"editor.toolHint.finishSlab.xmnm8e\":[\"Finish slab\"],\"editor.toolHint.flipSide.172xku9\":[\"Flip side\"],\"editor.toolHint.followTraceALineset.mgquwe\":[\"Follow: trace a lineset\"],\"editor.toolHint.forcePlace.1hq1nr\":[\"Force place\"],\"editor.toolHint.freePlacement.1nztdac\":[\"Free placement\"],\"editor.toolHint.goVerticalClickToPlace.dg8g6m\":[\"Go vertical ↕, click to place\"],\"editor.toolHint.highlightOutlet.65hoq8\":[\"Highlight outlet\"],\"editor.toolHint.joinAsACornerWindow.jvdp4j\":[\"Join as a corner window\"],\"editor.toolHint.key.altDrag.ai3wn9\":[\"Alt + drag\"],\"editor.toolHint.key.backspace.qy6qx8\":[\"Backspace\"],\"editor.toolHint.key.click.m8sun\":[\"Click\"],\"editor.toolHint.key.clickAgain.190ws9j\":[\"Click again\"],\"editor.toolHint.key.command.1j2mkia\":[\"Command\"],\"editor.toolHint.key.control.10fbl8e\":[\"Control\"],\"editor.toolHint.key.delete.oay2cq\":[\"Delete\"],\"editor.toolHint.key.doubleClick.vlma6o\":[\"Double click\"],\"editor.toolHint.key.drag.8pwtpf\":[\"Drag\"],\"editor.toolHint.key.enter.1ctpui5\":[\"Enter\"],\"editor.toolHint.key.hover.6xw79p\":[\"Hover\"],\"editor.toolHint.key.hoverADuctEnd.19axr3b\":[\"Hover a duct end\"],\"editor.toolHint.key.hoverAPipeEnd.1jbum5f\":[\"Hover a pipe end\"],\"editor.toolHint.key.hoverGutter.1dwcsno\":[\"Hover gutter\"],\"editor.toolHint.key.leftClick.s4gwfc\":[\"Left click\"],\"editor.toolHint.key.middleClick.1jbaan4\":[\"Middle click\"],\"editor.toolHint.key.rShiftR.13bnobh\":[\"R / Shift+R\"],\"editor.toolHint.key.rightClick.1ovld0h\":[\"Right click\"],\"editor.toolHint.key.scroll.ai6wr0\":[\"Scroll\"],\"editor.toolHint.key.scrollWheel.18j0ix7\":[\"Scroll wheel\"],\"editor.toolHint.key.space.1hrh82t\":[\"Space\"],\"editor.toolHint.key.tab.1xsal0s\":[\"Tab\"],\"editor.toolHint.mountFloorCeilingWall.32dxpv\":[\"Mount: floor / ceiling / wall\"],\"editor.toolHint.noRoomForTheMatchingWindow.1755948\":[\"No room for the matching window on the other wall\"],\"editor.toolHint.noWallMeetsHere.19n99yc\":[\"No wall meets here\"],\"editor.toolHint.numberOfCutsScrollOrClick.1kqe84b\":[\"Number of cuts — scroll or click to change\"],\"editor.toolHint.pickWitnessPoint.k3hgh1\":[\"Pick witness point\"],\"editor.toolHint.pipeSizeDownUp.wp04og\":[\"Pipe size down / up\"],\"editor.toolHint.placeAndContinue.qfwkrq\":[\"Place and continue\"],\"editor.toolHint.placeBlock.1aylwrx\":[\"Place block\"],\"editor.toolHint.placeBoxVentOnRoof.kf88e5\":[\"Place box vent on roof\"],\"editor.toolHint.placeCabinet.b0ouyk\":[\"Place cabinet\"],\"editor.toolHint.placeCanopyOrSetTheNext.12l7zf8\":[\"Place canopy or set the next run point\"],\"editor.toolHint.placeChimneyOnRoof.19dbqu\":[\"Place chimney on roof\"],\"editor.toolHint.placeColumn.1w2vq86\":[\"Place column\"],\"editor.toolHint.placeCupolaOnRoof.ofx3bn\":[\"Place cupola on roof\"],\"editor.toolHint.placeDimensionLineWhenNeeded.bjw2cj\":[\"Place dimension line when needed\"],\"editor.toolHint.placeDoorOnWall.1jwadf\":[\"Place door on wall\"],\"editor.toolHint.placeDormerOnRoof.1w518a6\":[\"Place dormer on roof\"],\"editor.toolHint.placeElevator.1f65zva\":[\"Place elevator\"],\"editor.toolHint.placeEyebrowVentOnRoof.1h1tqxn\":[\"Place eyebrow vent on roof\"],\"editor.toolHint.placeFitting.1pmx3vn\":[\"Place fitting\"],\"editor.toolHint.placeGutterOnRoofEave.llwzf9\":[\"Place gutter on roof eave\"],\"editor.toolHint.placeItLockedTo45.16e4csk\":[\"Place it (locked to 45°)\"],\"editor.toolHint.placeItem.teynf\":[\"Place item\"],\"editor.toolHint.placeMeasurementPoint.bsatli\":[\"Place measurement point\"],\"editor.toolHint.placeOnAFence.1dptstr\":[\"Place on a fence\"],\"editor.toolHint.placeRegister.1uebycd\":[\"Place register\"],\"editor.toolHint.placeRidgeVentOnRoof.2tpd8r\":[\"Place ridge vent on roof\"],\"editor.toolHint.placeShelf.y4l3iw\":[\"Place shelf\"],\"editor.toolHint.placeSkylightOnRoof.e215pe\":[\"Place skylight on roof\"],\"editor.toolHint.placeSolarPanelArrayOnRoof.kk11fn\":[\"Place solar panel array on roof\"],\"editor.toolHint.placeSpawnPoint.205o25\":[\"Place spawn point\"],\"editor.toolHint.placeStairs.zwxxu2\":[\"Place stairs\"],\"editor.toolHint.placeTrap.1gxemn3\":[\"Place trap\"],\"editor.toolHint.placeTurbineVentOnRoof.1iqeluf\":[\"Place turbine vent on roof\"],\"editor.toolHint.placeUnit.8zkx4q\":[\"Place unit\"],\"editor.toolHint.placeWindowOnWall.1k3qnfb\":[\"Place window on wall\"],\"editor.toolHint.placeWithoutTheCornerSnap.1nifqew\":[\"Place without the corner snap\"],\"editor.toolHint.placement.13lcvts\":[\"Placement\"],\"editor.toolHint.placementAuto.1caa52d\":[\"Placement: Auto\"],\"editor.toolHint.placementGround.1ruz145\":[\"Placement: Ground\"],\"editor.toolHint.placementRoof.renkw8\":[\"Placement: Roof\"],\"editor.toolHint.placementSurfaceClickOrPressP.w56h19\":[\"Placement surface - click or press P to cycle\"],\"editor.toolHint.placementType.1mdpl60\":[\"Placement type\"],\"editor.toolHint.placementTypeClickOrPressI.10cgxh2\":[\"Placement type — click or press I to toggle\"],\"editor.toolHint.removeLastPoint.2dmdcx\":[\"Remove last point\"],\"editor.toolHint.removeLastWitness.1b6vvzw\":[\"Remove last witness\"],\"editor.toolHint.rotate.1thqa0a\":[\"Rotate\"],\"editor.toolHint.rotate45.9zq68u\":[\"Rotate ±45°\"],\"editor.toolHint.rotate45FloorCeiling.m9t57d\":[\"Rotate ±45° (floor / ceiling)\"],\"editor.toolHint.rotateGhost15.rsa52c\":[\"Rotate ghost ±15°\"],\"editor.toolHint.rotateOrFlipTheRunSide.t5ior7\":[\"Rotate or flip the run side\"],\"editor.toolHint.rotateRoofDirection90.tvbji2\":[\"Rotate roof direction 90°\"],\"editor.toolHint.rotateSpawnPoint.1opcuu7\":[\"Rotate spawn point\"],\"editor.toolHint.roundRectangularOval.e4nh6x\":[\"Round / rectangular / oval\"],\"editor.toolHint.setFenceStartEnd.1phbwsq\":[\"Set fence start / end\"],\"editor.toolHint.setOneCornerThenTheOpposite.8tsl49\":[\"Set one corner, then the opposite\"],\"editor.toolHint.setRoofFootprint.p50n0o\":[\"Set roof footprint\"],\"editor.toolHint.setWallStartEnd.1r8ubcx\":[\"Set wall start / end\"],\"editor.toolHint.slopeLevel.ftqp67\":[\"Slope / level\"],\"editor.toolHint.snapOntoTheRun.86yhmp\":[\"Snap onto the run\"],\"editor.toolHint.splitAtTheMarks.x5tpdd\":[\"Split at the marks\"],\"editor.toolHint.startGridAxis.k92yza\":[\"Start grid axis\"],\"editor.toolHint.startLineset.23q8dh\":[\"Start lineset\"],\"editor.toolHint.startLiquidLine.1rlxsgd\":[\"Start liquid line\"],\"editor.toolHint.startRun.r6fc5u\":[\"Start run\"],\"editor.toolHint.startSegment.rolym6\":[\"Start segment\"],\"editor.toolHint.stepBackOrCancel.zbfdkn\":[\"Step back or cancel\"],\"editor.toolHint.style.nf3vcm\":[\"Style\"],\"editor.toolHint.styleBarn.k9n1x\":[\"Style: Barn\"],\"editor.toolHint.styleCasement.ziklec\":[\"Style: Casement\"],\"editor.toolHint.styleCraftsman.52e6a9\":[\"Style: Craftsman\"],\"editor.toolHint.styleDoubleHung.1lg8pkg\":[\"Style: Double-hung\"],\"editor.toolHint.styleFrench.1ue3j64\":[\"Style: French\"],\"editor.toolHint.styleGlass.qudnb4\":[\"Style: Glass\"],\"editor.toolHint.styleGrid.1vuq4po\":[\"Style: Grid\"],\"editor.toolHint.styleHalfLouvered.13b1few\":[\"Style: Half-louvered\"],\"editor.toolHint.styleHorizontalBands.12ethxk\":[\"Style: Horizontal bands\"],\"editor.toolHint.styleModern.1fh8hhn\":[\"Style: Modern\"],\"editor.toolHint.stylePanel.922jze\":[\"Style: Panel\"],\"editor.toolHint.stylePaneledGlass.17a17en\":[\"Style: Paneled glass\"],\"editor.toolHint.styleShaker.49z17k\":[\"Style: Shaker\"],\"editor.toolHint.styleSingle.6f3cm0\":[\"Style: Single\"],\"editor.toolHint.styleSixPanel.u49laj\":[\"Style: Six-panel\"],\"editor.toolHint.styleSliding.q81s0i\":[\"Style: Sliding\"],\"editor.toolHint.styleTallGrid.1eotg3x\":[\"Style: Tall grid\"],\"editor.toolHint.styleTransom.kb9bh6\":[\"Style: Transom\"],\"editor.toolHint.styleTripleHung.pxnqi3\":[\"Style: Triple-hung\"],\"editor.toolHint.styleWideGrid.12n27et\":[\"Style: Wide grid\"],\"editor.toolHint.switchRotationAxisYXZ.15lohm6\":[\"Switch rotation axis (Y → X → Z)\"],\"editor.toolHint.theWallsMeetAtTooSharp.kh3wi3\":[\"The walls meet at too sharp or too flat an angle\"],\"editor.toolHint.theWindowWaitingThereIsTaller.1tqwez4\":[\"The window waiting there is taller than this wall\"],\"editor.toolHint.threeOrMoreWallsMeetHere.rgifif\":[\"Three or more walls meet here\"],\"editor.toolHint.traceCeilingOutline.1b639wv\":[\"Trace ceiling outline\"],\"editor.toolHint.traceSlabOutline.z0j2lc\":[\"Trace slab outline\"],\"editor.toolHint.type.1m2zofh\":[\"Type\"],\"editor.toolHint.typeAwning.1cj59al\":[\"Type: Awning\"],\"editor.toolHint.typeBarn.sbnygq\":[\"Type: Barn\"],\"editor.toolHint.typeBay.1200hc1\":[\"Type: Bay\"],\"editor.toolHint.typeBow.14s2t9p\":[\"Type: Bow\"],\"editor.toolHint.typeCabinet.1r68je5\":[\"Type: Cabinet\"],\"editor.toolHint.typeCasement.176uo9j\":[\"Type: Casement\"],\"editor.toolHint.typeDouble.af7w4i\":[\"Type: Double\"],\"editor.toolHint.typeDoubleHung.t482fu\":[\"Type: Double Hung\"],\"editor.toolHint.typeFixed.v1cjez\":[\"Type: Fixed\"],\"editor.toolHint.typeFolding.sxxyng\":[\"Type: Folding\"],\"editor.toolHint.typeFrench.1y57z1b\":[\"Type: French\"],\"editor.toolHint.typeHinged.1xrcfju\":[\"Type: Hinged\"],\"editor.toolHint.typeIsland.ufr3ce\":[\"Type: Island\"],\"editor.toolHint.typeLouvered.oxl1cz\":[\"Type: Louvered\"],\"editor.toolHint.typePocket.hc65x9\":[\"Type: Pocket\"],\"editor.toolHint.typeSingleHung.p53pyl\":[\"Type: Single Hung\"],\"editor.toolHint.typeSliding.nwmr3f\":[\"Type: Sliding\"],\"editor.toolHint.verticalStackClickToPlace.ijcn4q\":[\"Vertical stack ↕, click to place\"],\"editor.toolHint.wasteVent.1hvi3vj\":[\"Waste / vent\"],\"editor.toolHint.windowStyleClickOrPressL.ah7qm9\":[\"Window style — click or press L to cycle\"],\"editor.toolHint.windowTypeClickOrPressO.wv4x35\":[\"Window type — click or press O to cycle\"],\"editor.views.plugins\":[\"Plugins\"],\"editor.views.view2d\":[\"2D\"],\"editor.views.view3d\":[\"3D\"],\"editor.views.viewBar.auto\":[\"Auto\"],\"editor.views.viewBar.browsePlugins\":[\"Browse plugins\"],\"editor.views.viewBar.closeLabel\":[\"Close \",[\"label\"]],\"editor.views.viewBar.closeSplit\":[\"Close split (\\\\)\"],\"editor.views.viewBar.ground\":[\"Ground\"],\"editor.views.viewBar.groundSolid\":[[\"standing\",\"select\",{\"partly\":[\"Partly below grade · ground solid\"],\"below\":[\"Below grade · ground solid\"],\"other\":[\"Ground solid\"]}]],\"editor.views.viewBar.groundVeiled\":[[\"standing\",\"select\",{\"partly\":[\"Partly below grade · ground veiled\"],\"below\":[\"Below grade · ground veiled\"],\"other\":[\"Ground veiled\"]}]],\"editor.views.viewBar.keepTheGroundSolid\":[\"Keep the ground solid\"],\"editor.views.viewBar.moreViews\":[\"More views\"],\"editor.views.viewBar.paneViews\":[\"Pane \",[\"pane\"],\" views\"],\"editor.views.viewBar.pinLabel\":[\"Pin \",[\"label\"]],\"editor.views.viewBar.pinToTheViewBar\":[\"Pin to the view bar\"],\"editor.views.viewBar.solid\":[\"Solid\"],\"editor.views.viewBar.split\":[\"Split (\\\\)\"],\"editor.views.viewBar.split2\":[\"Split\"],\"editor.views.viewBar.swapPanes\":[\"Swap panes\"],\"editor.views.viewBar.unpinFromTheViewBar\":[\"Unpin from the view bar\"],\"editor.views.viewBar.unpinLabel\":[\"Unpin \",[\"label\"]],\"editor.views.viewBar.veilTheGroundOverALevel\":[\"Veil the ground over a level below grade\"],\"editor.views.viewBar.views\":[\"Views\"],\"editor.youCanRetryTheSceneOr\":[\"You can retry the scene or return home without reloading the whole app shell.\"],\"node.block.description\":[\"A topology-backed solid edited directly in the canvas.\"],\"node.block.label\":[\"Block\"],\"node.boxVent.description\":[\"Small louvered exhaust vent that sits on a roof slope.\"],\"node.boxVent.label\":[\"Box Vent\"],\"node.building.description\":[\"A building container holding one or more levels.\"],\"node.building.label\":[\"Building\"],\"node.cabinet.description\":[\"A configurable parametric base cabinet.\"],\"node.cabinet.label\":[\"Modular Cabinet\"],\"node.cabinetModule.description\":[\"An editable module inside a modular cabinet run.\"],\"node.cabinetModule.label\":[\"Cabinet Module\"],\"node.ceiling.description\":[\"A polygon-bounded ceiling surface that hosts ceiling-mounted items.\"],\"node.ceiling.label\":[\"Ceiling\"],\"node.ceiling.panel.addHole\":[\"Add Hole\"],\"node.ceiling.panel.area\":[\"Area\"],\"node.ceiling.panel.auto\":[\"Auto\"],\"node.ceiling.panel.ceiling\":[\"Ceiling\"],\"node.ceiling.panel.customHeight\":[\"Custom height\"],\"node.ceiling.panel.cutOpening\":[\"Cut opening\"],\"node.ceiling.panel.done\":[\"Done\"],\"node.ceiling.panel.followsLevel\":[\"Follows level\"],\"node.ceiling.panel.height\":[\"Height\"],\"node.ceiling.panel.high30m\":[\"High (3.0m)\"],\"node.ceiling.panel.high90\":[\"High (9'0\\\")\"],\"node.ceiling.panel.holes\":[\"Holes\"],\"node.ceiling.panel.info\":[\"Info\"],\"node.ceiling.panel.limitedByLevel\":[\"Limited by the level to \",[\"height\"],\" — raise the level height for a taller ceiling.\"],\"node.ceiling.panel.low24m\":[\"Low (2.4m)\"],\"node.ceiling.panel.low80\":[\"Low (8'0\\\")\"],\"node.ceiling.panel.move\":[\"Move\"],\"node.ceiling.panel.noHoles\":[\"No holes\"],\"node.ceiling.panel.standard25m\":[\"Standard (2.5m)\"],\"node.ceiling.panel.standard86\":[\"Standard (8'6\\\")\"],\"node.ceiling.panel.tallerThanLevel\":[\"Taller than this level (\",[\"available\"],\" available). Raise the level height first.\"],\"node.chimney.description\":[\"Vertical masonry stack on a roof segment.\"],\"node.chimney.label\":[\"Chimney\"],\"node.column.description\":[\"A parametric column with configurable cross-section, base, and capital.\"],\"node.column.label\":[\"Column\"],\"node.constructionDimension.description\":[\"Associative linear, curved, circular, angular, or coordinate plan dimension.\"],\"node.constructionDimension.label\":[\"Construction Dimension\"],\"node.cornerRadius.bottomLeft\":[\"Bottom Left\"],\"node.cornerRadius.bottomRight\":[\"Bottom Right\"],\"node.cornerRadius.topLeft\":[\"Top Left\"],\"node.cornerRadius.topRight\":[\"Top Right\"],\"node.cupola.description\":[\"Louvered roof lantern with a dome or pyramid cap and optional finial.\"],\"node.cupola.label\":[\"Cupola\"],\"node.cutout.autoElevator\":[\"Auto elevator cutout\"],\"node.cutout.autoStair\":[\"Auto stair cutout\"],\"node.cutout.opening\":[\"Opening\"],\"node.cutout.room\":[\"Room cutout\"],\"node.door.description\":[\"A door cut into a wall. Animated open/close state.\"],\"node.door.label\":[\"Door\"],\"node.door.panel.actions\":[\"Actions\"],\"node.door.panel.addSegment\":[\"+ Add Segment\"],\"node.door.panel.all\":[\"All\"],\"node.door.panel.arch\":[\"Arch\"],\"node.door.panel.archHeight\":[\"Arch Height\"],\"node.door.panel.barHeight\":[\"Bar Height\"],\"node.door.panel.columns\":[\"Columns\"],\"node.door.panel.contentPadding\":[\"Content Padding\"],\"node.door.panel.cornerRadius\":[\"Corner Radius\"],\"node.door.panel.customTheSegmentsMatchNoStyle\":[\"Custom: the segments match no style.\"],\"node.door.panel.delete\":[\"Delete\"],\"node.door.panel.depth\":[\"Depth\"],\"node.door.panel.dimensions\":[\"Dimensions\"],\"node.door.panel.direction\":[\"Direction\"],\"node.door.panel.divider\":[\"Divider\"],\"node.door.panel.door\":[\"Door\"],\"node.door.panel.doorCloser\":[\"Door Closer\"],\"node.door.panel.duplicate\":[\"Duplicate\"],\"node.door.panel.empty\":[\"Empty\"],\"node.door.panel.enableHandle\":[\"Enable Handle\"],\"node.door.panel.enableThreshold\":[\"Enable Threshold\"],\"node.door.panel.flipSide\":[\"Flip Side\"],\"node.door.panel.fold\":[\"Fold\"],\"node.door.panel.frame\":[\"Frame\"],\"node.door.panel.garage\":[\"Garage\"],\"node.door.panel.glass\":[\"Glass\"],\"node.door.panel.handle\":[\"Handle\"],\"node.door.panel.handleSide\":[\"Handle Side\"],\"node.door.panel.hardware\":[\"Hardware\"],\"node.door.panel.height\":[\"Height\"],\"node.door.panel.hingesSide\":[\"Hinges Side\"],\"node.door.panel.horizontal\":[\"Horizontal\"],\"node.door.panel.individual\":[\"Individual\"],\"node.door.panel.inset\":[\"Inset\"],\"node.door.panel.inward\":[\"Inward\"],\"node.door.panel.left\":[\"Left\"],\"node.door.panel.move\":[\"Move\"],\"node.door.panel.open\":[\"Open\"],\"node.door.panel.opening\":[\"Opening\"],\"node.door.panel.openingShape\":[\"Opening Shape\"],\"node.door.panel.outward\":[\"Outward\"],\"node.door.panel.panel\":[\"Panel\"],\"node.door.panel.panels\":[\"Panels\"],\"node.door.panel.panicBar\":[\"Panic Bar\"],\"node.door.panel.pocket\":[\"Pocket\"],\"node.door.panel.position\":[\"Position\"],\"node.door.panel.rail\":[\"Rail\"],\"node.door.panel.rect\":[\"Rect\"],\"node.door.panel.remove\":[\"- Remove\"],\"node.door.panel.revealRadius\":[\"Reveal Radius\"],\"node.door.panel.right\":[\"Right\"],\"node.door.panel.rounded\":[\"Rounded\"],\"node.door.panel.segments\":[\"Segments\"],\"node.door.panel.sizeIsLimitedToTheWall\":[\"Size is limited to the wall, including clearance for the opening frame.\"],\"node.door.panel.slide\":[\"Slide\"],\"node.door.panel.style\":[\"Style\"],\"node.door.panel.swing\":[\"Swing\"],\"node.door.panel.thickness\":[\"Thickness\"],\"node.door.panel.threshold\":[\"Threshold\"],\"node.door.panel.topShape\":[\"Top Shape\"],\"node.door.panel.type\":[\"Type\"],\"node.door.panel.vertical\":[\"Vertical\"],\"node.door.panel.wall\":[\"wall\"],\"node.door.panel.width\":[\"Width\"],\"node.door.style.barn\":[\"Barn\"],\"node.door.style.craftsman\":[\"Craftsman\"],\"node.door.style.french\":[\"French\"],\"node.door.style.glass\":[\"Glass\"],\"node.door.style.halfLouvered\":[\"Half-louvered\"],\"node.door.style.modern\":[\"Modern\"],\"node.door.style.panel\":[\"Panel\"],\"node.door.style.paneledGlass\":[\"Paneled glass\"],\"node.door.style.shaker\":[\"Shaker\"],\"node.door.style.sixPanel\":[\"Six-panel\"],\"node.door.type.barn\":[\"Barn\"],\"node.door.type.double\":[\"Double\"],\"node.door.type.folding\":[\"Folding\"],\"node.door.type.french\":[\"French\"],\"node.door.type.garageRollup\":[\"Roll-up\"],\"node.door.type.garageSectional\":[\"Sectional\"],\"node.door.type.garageTiltup\":[\"Tilt-up\"],\"node.door.type.hinged\":[\"Hinged\"],\"node.door.type.pocket\":[\"Pocket\"],\"node.door.type.sliding\":[\"Sliding\"],\"node.dormer.description\":[\"House-shaped protrusion on a roof segment.\"],\"node.dormer.label\":[\"Dormer\"],\"node.downspout.description\":[\"Vertical drop pipe from a gutter outlet to the ground.\"],\"node.downspout.label\":[\"Downspout\"],\"node.ductFitting.description\":[\"Elbow, tee, reducer, or square-to-round transition connecting duct runs.\"],\"node.ductFitting.label\":[\"Duct Fitting\"],\"node.ductSegment.description\":[\"HVAC duct run — polyline of round, rect, or flat-oval sections.\"],\"node.ductSegment.label\":[\"Duct\"],\"node.ductTerminal.description\":[\"Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar.\"],\"node.ductTerminal.label\":[\"Register\"],\"node.elevator.description\":[\"A multi-level elevator shaft with configurable openings per level.\"],\"node.elevator.label\":[\"Elevator\"],\"node.eyebrowVent.description\":[\"Low curved lens-shaped roof vent with a louvered front.\"],\"node.eyebrowVent.label\":[\"Eyebrow Vent\"],\"node.fence.description\":[\"A straight or curved fence segment with configurable posts and infill.\"],\"node.fence.label\":[\"Fence\"],\"node.fenceGate.description\":[\"A gate hosted by a fence.\"],\"node.fenceGate.label\":[\"Gate\"],\"node.fenceOpening.description\":[\"An intentional opening in a fence.\"],\"node.fenceOpening.label\":[\"Open Passage\"],\"node.floorOpening.label\":[\"Floor opening\"],\"node.guide.description\":[\"A measurement / reference annotation (linear, area, or arc).\"],\"node.guide.label\":[\"Guide\"],\"node.gutter.description\":[\"Rain-water channel running along the eave of a roof segment.\"],\"node.gutter.label\":[\"Gutter\"],\"node.hole.manual\":[\"Manual\"],\"node.holeEditing\":[\"Hole \",[\"number\"],\" (Editing)\"],\"node.holeNumber\":[\"Hole \",[\"number\"]],\"node.holeSummary\":[[\"area\"],\" m² · \",[\"count\",\"plural\",{\"one\":[\"#\",\" pt\"],\"other\":[\"#\",\" pts\"]}],\" · \",[\"source\"]],\"node.hvacEquipment.description\":[\"Furnace, air handler, or condenser — duct runs connect to its supply/return collars.\"],\"node.hvacEquipment.label\":[\"HVAC Unit\"],\"node.importedMesh.description\":[\"Geometry preserved from an imported model when no native Pascal shape exists.\"],\"node.importedMesh.label\":[\"Imported Mesh\"],\"node.item.authoredParams.couldnTRebuildWithTheseValues\":[\"Couldn't rebuild with these values.\"],\"node.item.authoredParams.parameters\":[\"Parameters\"],\"node.item.authoredParams.rebuilding\":[\"Rebuilding…\"],\"node.item.authoredParams.rebuildingInBlender\":[\"Rebuilding in Blender…\"],\"node.item.authoredParams.resetParam\":[\"Reset \",[\"param\"]],\"node.item.authoredParams.resetParameters\":[\"Reset parameters\"],\"node.item.authoredParams.resetToDefault\":[\"Reset to default\"],\"node.item.description\":[\"A catalog-backed item (furniture, fixtures, decorations).\"],\"node.item.label\":[\"Item\"],\"node.item.panel.actions\":[\"Actions\"],\"node.item.panel.delete\":[\"Delete\"],\"node.item.panel.dimensions\":[\"Dimensions\"],\"node.item.panel.duplicate\":[\"Duplicate\"],\"node.item.panel.info\":[\"Info\"],\"node.item.panel.move\":[\"Move\"],\"node.item.panel.pos\":[\"pos\"],\"node.item.panel.position\":[\"Position\"],\"node.item.panel.rot\":[\"rot\"],\"node.item.panel.rotation\":[\"Rotation\"],\"node.item.panel.scale\":[\"Scale\"],\"node.item.panel.scale2\":[\"scale\"],\"node.item.panel.uniformScale\":[\"Uniform Scale\"],\"node.item.panel.xyz\":[\"XYZ\"],\"node.leanToExtension.description\":[\"An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage.\"],\"node.leanToExtension.label\":[\"Canopy\"],\"node.level.description\":[\"A single floor of a building, holding walls / slabs / ceilings / items.\"],\"node.level.label\":[\"Level\"],\"node.lineset.description\":[\"Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil.\"],\"node.lineset.label\":[\"Lineset\"],\"node.liquidLine.description\":[\"Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset.\"],\"node.liquidLine.label\":[\"Liquid Line\"],\"node.measurement.description\":[\"A persistent distance, angle, area, perimeter, or volume annotation.\"],\"node.measurement.label\":[\"Measurement\"],\"node.numberedName\":[[\"kind\"],\" \",[\"number\"]],\"node.panel.currently\":[\"Currently \",[\"value\"]],\"node.pipeFitting.description\":[\"DWV joint — elbow bend, 45° wye, or sanitary tee.\"],\"node.pipeFitting.label\":[\"Pipe Fitting\"],\"node.pipeSegment.description\":[\"Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S.\"],\"node.pipeSegment.label\":[\"DWV Pipe\"],\"node.pipeTrap.description\":[\"DWV P-trap — water seal on the waste line. The trap arm runs to the vent.\"],\"node.pipeTrap.label\":[\"Trap\"],\"node.proceduralItem.description\":[\"Experimental editable recipe\"],\"node.proceduralItem.label\":[\"Procedural item\"],\"node.ridgeVent.description\":[\"Ventilation strip running along the ridge of a roof segment.\"],\"node.ridgeVent.label\":[\"Ridge Vent\"],\"node.roof.barrelPanel.archBays\":[\"Arch bays\"],\"node.roof.barrelPanel.barrelArch\":[\"Barrel arch\"],\"node.roof.barrelPanel.flatPanesFollowACircularArch\":[\"Flat panes follow a circular arch. Rise is measured from the eaves.\"],\"node.roof.barrelPanel.rise\":[\"Rise\"],\"node.roof.description\":[\"A pitched / hip / gable roof composed of one or more segments.\"],\"node.roof.glazing.face.archBay\":[\"Arch bay \",[\"number\"]],\"node.roof.glazing.face.back\":[\"Back slope\"],\"node.roof.glazing.face.endLeft\":[\"Left end\"],\"node.roof.glazing.face.endRight\":[\"Right end\"],\"node.roof.glazing.face.front\":[\"Front slope\"],\"node.roof.glazing.face.slope\":[\"Shed slope\"],\"node.roof.glazingControls.alignment\":[\"Alignment\"],\"node.roof.glazingControls.center\":[\"Center\"],\"node.roof.glazingControls.chooseALayoutToEditThe\":[\"Choose a layout to edit the grid.\"],\"node.roof.glazingControls.empty\":[\"Empty\"],\"node.roof.glazingControls.end\":[\"End\"],\"node.roof.glazingControls.fixedSpacing\":[\"Fixed spacing\"],\"node.roof.glazingControls.glass\":[\"Glass\"],\"node.roof.glazingControls.layout\":[\"Layout\"],\"node.roof.glazingControls.maxSpacing\":[\"Max spacing\"],\"node.roof.glazingControls.maximumSpacing\":[\"Maximum spacing\"],\"node.roof.glazingControls.mixed\":[\"Mixed\"],\"node.roof.glazingControls.panelCount\":[\"Panel count\"],\"node.roof.glazingControls.panels\":[\"Panels\"],\"node.roof.glazingControls.solid\":[\"Solid\"],\"node.roof.glazingControls.spacing\":[\"Spacing\"],\"node.roof.glazingControls.start\":[\"Start\"],\"node.roof.glazingControls.titleAlignment\":[[\"title\"],\" alignment\"],\"node.roof.glazingPanel.changesApplyToAllLengthRoof\":[\"Changes apply to all \",[\"length\"],\" roof segments.\"],\"node.roof.glazingPanel.chooseOneRoofSystemToEdit\":[\"Choose one roof system to edit settings for all selected segments.\"],\"node.roof.glazingPanel.closeTheRoofEnds\":[\"Close the roof ends\"],\"node.roof.glazingPanel.defaultPanelInfill\":[\"Default panel infill\"],\"node.roof.glazingPanel.dividesEachRoofFaceIntoColumns\":[\"Divides each roof face into columns.\"],\"node.roof.glazingPanel.dividesTheLengthOfEachArch\":[\"Divides the length of each arch bay into columns.\"],\"node.roof.glazingPanel.endInfillFillsTheSpaceAbove\":[\"End infill fills the space above the walls. Edit room walls and ceilings separately.\"],\"node.roof.glazingPanel.frameColor\":[\"Frame color\"],\"node.roof.glazingPanel.frameDepth\":[\"Frame depth\"],\"node.roof.glazingPanel.frameWidth\":[\"Frame width\"],\"node.roof.glazingPanel.framing\":[\"Framing\"],\"node.roof.glazingPanel.glass\":[\"Glass\"],\"node.roof.glazingPanel.glassTint\":[\"Glass tint\"],\"node.roof.glazingPanel.glazed\":[\"Glazed\"],\"node.roof.glazingPanel.glazingIsAvailableForGableStraight\":[\"Glazing is available for gable, straight shed, and barrel roofs.\"],\"node.roof.glazingPanel.gridAcrossTheRoof\":[\"Grid across the roof\"],\"node.roof.glazingPanel.gridAlongTheLength\":[\"Grid along the length\"],\"node.roof.glazingPanel.gridAlongTheSlope\":[\"Grid along the slope\"],\"node.roof.glazingPanel.gridWithinEachArchBay\":[\"Grid within each arch bay\"],\"node.roof.glazingPanel.infill\":[\"Infill\"],\"node.roof.glazingPanel.opacity\":[\"Opacity\"],\"node.roof.glazingPanel.paneThickness\":[\"Pane thickness\"],\"node.roof.glazingPanel.roofSystem\":[\"Roof system\"],\"node.roof.glazingPanel.roughness\":[\"Roughness\"],\"node.roof.glazingPanel.spacingIsMeasuredOnTheSlope\":[\"Spacing is measured on the slope, not its horizontal projection.\"],\"node.roof.glazingPanel.standard\":[\"Standard\"],\"node.roof.glazingPanel.subdividesEachFlatArchBayArch\":[\"Subdivides each flat arch bay. Arch bays controls the divisions around the curve.\"],\"node.roof.glazingPanelEditor.chooseAPanelToOverrideIts\":[\"Choose a panel to override its default infill.\"],\"node.roof.glazingPanelEditor.column2\":[\"Column\"],\"node.roof.glazingPanelEditor.custom\":[\"Custom\"],\"node.roof.glazingPanelEditor.default\":[\"Default\"],\"node.roof.glazingPanelEditor.grid\":[[\"columns\",\"plural\",{\"one\":[\"#\",\" column\"],\"other\":[\"#\",\" columns\"]}],\" · \",[\"rows\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}]],\"node.roof.glazingPanelEditor.individualPanels\":[\"Individual panels\"],\"node.roof.glazingPanelEditor.panelInfill\":[\"Panel infill\"],\"node.roof.glazingPanelEditor.resetToDefault\":[\"Reset to default\"],\"node.roof.glazingPanelEditor.roofFace\":[\"Roof face\"],\"node.roof.glazingPanelEditor.row2\":[\"Row\"],\"node.roof.glazingPanelEditor.selectedPanelInfill\":[\"Selected panel infill\"],\"node.roof.label\":[\"Roof\"],\"node.roof.panel.actions\":[\"Actions\"],\"node.roof.panel.addChimney\":[\"Add Chimney\"],\"node.roof.panel.addCupola\":[\"Add Cupola\"],\"node.roof.panel.addDormer\":[\"Add Dormer\"],\"node.roof.panel.addEyebrowVent\":[\"Add Eyebrow Vent\"],\"node.roof.panel.addGutter\":[\"Add Gutter\"],\"node.roof.panel.addSkylight\":[\"Add Skylight\"],\"node.roof.panel.addSolarPanel\":[\"Add Solar Panel\"],\"node.roof.panel.addVent\":[\"Add Vent\"],\"node.roof.panel.box\":[\"Box\"],\"node.roof.panel.boxVent\":[\"box vent\"],\"node.roof.panel.chimney\":[\"chimney\"],\"node.roof.panel.custom\":[\"Custom\"],\"node.roof.panel.delete\":[\"Delete\"],\"node.roof.panel.dormer\":[\"dormer\"],\"node.roof.panel.drawSegment\":[\"Draw Segment\"],\"node.roof.panel.duplicate\":[\"Duplicate\"],\"node.roof.panel.elements\":[\"Elements\"],\"node.roof.panel.followsWalls\":[\"Follows walls\"],\"node.roof.panel.gutter\":[\"gutter\"],\"node.roof.panel.level\":[\"Level\"],\"node.roof.panel.move\":[\"Move\"],\"node.roof.panel.moveToLevel\":[\"Move to \",[\"level\"]],\"node.roof.panel.moveToTheRoofLevel\":[\"Move to the roof level\"],\"node.roof.panel.onStoreyWalls\":[\"On \",[\"storey\"],\" with its walls, so it hides that floor's plan in solo and exploded views.\",[\"roofs\",\"plural\",{\"0\":[],\"1\":[],\"other\":[\" The floor's \",\"#\",\" roofs move together.\"]}]],\"node.roof.panel.position\":[\"Position\"],\"node.roof.panel.ridge\":[\"Ridge\"],\"node.roof.panel.ridgeVent\":[\"ridge vent\"],\"node.roof.panel.roof\":[\"Roof\"],\"node.roof.panel.rotation\":[\"Rotation\"],\"node.roof.panel.segmentType\":[[\"roofType\",\"select\",{\"hip\":[\"Hip\"],\"gable\":[\"Gable\"],\"shed\":[\"Shed\"],\"gambrel\":[\"Gambrel\"],\"dutch\":[\"Dutch\"],\"mansard\":[\"Mansard\"],\"flat\":[\"Flat\"],\"conical\":[\"Conical\"],\"barrel\":[\"Barrel\"],\"other\":[\"Roof\"]}]],\"node.roof.panel.segments\":[\"Segments\"],\"node.roof.panel.skylight\":[\"skylight\"],\"node.roof.panel.solarPanel\":[\"solar panel\"],\"node.roof.panel.turbine\":[\"Turbine\"],\"node.roof.panel.turbineVent\":[\"turbine vent\"],\"node.roofSegment.description\":[\"A single pitched plane of a parent roof.\"],\"node.roofSegment.label\":[\"Roof Segment\"],\"node.roofSegment.panel.actions\":[\"Actions\"],\"node.roofSegment.panel.angle\":[\"Angle\"],\"node.roofSegment.panel.arc\":[\"Arc\"],\"node.roofSegment.panel.autoGutters\":[\"Auto gutters\"],\"node.roofSegment.panel.autoRidgeVent\":[\"Auto ridge vent\"],\"node.roofSegment.panel.barrel\":[\"Barrel\"],\"node.roofSegment.panel.clippedVersion\":[\"Clipped version\"],\"node.roofSegment.panel.conical\":[\"Conical\"],\"node.roofSegment.panel.conicalShape\":[\"Conical Shape\"],\"node.roofSegment.panel.deckThick\":[\"Deck Thick.\"],\"node.roofSegment.panel.delete\":[\"Delete\"],\"node.roofSegment.panel.depth\":[\"Depth\"],\"node.roofSegment.panel.diameter\":[\"Diameter\"],\"node.roofSegment.panel.doneEditing\":[\"Done editing\"],\"node.roofSegment.panel.drainage\":[\"Drainage\"],\"node.roofSegment.panel.duplicate\":[\"Duplicate\"],\"node.roofSegment.panel.dutch\":[\"Dutch\"],\"node.roofSegment.panel.eaveOverhang\":[\"Eave overhang\"],\"node.roofSegment.panel.editFootprint\":[\"Edit footprint\"],\"node.roofSegment.panel.endOverhang\":[\"End overhang\"],\"node.roofSegment.panel.fascia\":[\"Fascia\"],\"node.roofSegment.panel.fasciaHeight\":[\"Fascia height\"],\"node.roofSegment.panel.flat\":[\"Flat\"],\"node.roofSegment.panel.footprint\":[\"Footprint\"],\"node.roofSegment.panel.gable\":[\"Gable\"],\"node.roofSegment.panel.gableOverhang\":[\"Gable overhang\"],\"node.roofSegment.panel.gambrel\":[\"Gambrel\"],\"node.roofSegment.panel.hip\":[\"Hip\"],\"node.roofSegment.panel.kinkDepth\":[\"Kink Depth\"],\"node.roofSegment.panel.kinkHeight\":[\"Kink Height\"],\"node.roofSegment.panel.length\":[\"Length\"],\"node.roofSegment.panel.mansard\":[\"Mansard\"],\"node.roofSegment.panel.move\":[\"Move\"],\"node.roofSegment.panel.pitch\":[\"Pitch\"],\"node.roofSegment.panel.position\":[\"Position\"],\"node.roofSegment.panel.reset\":[\"Reset\"],\"node.roofSegment.panel.roofSegment\":[\"Roof Segment\"],\"node.roofSegment.panel.roofType\":[\"Roof Type\"],\"node.roofSegment.panel.rotation\":[\"Rotation\"],\"node.roofSegment.panel.shape\":[\"Shape\"],\"node.roofSegment.panel.shed\":[\"Shed\"],\"node.roofSegment.panel.shingleThick\":[\"Shingle Thick.\"],\"node.roofSegment.panel.span\":[\"Span\"],\"node.roofSegment.panel.startAngle\":[\"Start Angle\"],\"node.roofSegment.panel.structure\":[\"Structure\"],\"node.roofSegment.panel.topRakeLength\":[\"Top Rake Length\"],\"node.roofSegment.panel.topRakeThick\":[\"Top Rake Thick.\"],\"node.roofSegment.panel.trim\":[\"Trim\"],\"node.roofSegment.panel.waistHeight\":[\"Waist Height\"],\"node.roofSegment.panel.waistLength\":[\"Waist Length\"],\"node.roofSegment.panel.waistWidth\":[\"Waist Width\"],\"node.roofSegment.panel.wall\":[\"Wall\"],\"node.roofSegment.panel.wallHeight\":[\"Wall Height\"],\"node.roofSegment.panel.wallThick\":[\"Wall Thick.\"],\"node.roofSegment.panel.width\":[\"Width\"],\"node.scan.description\":[\"A captured session with optional mesh, motion, media, and sensor data.\"],\"node.scan.label\":[\"Capture\"],\"node.segmentNumber\":[\"Segment \",[\"number\"]],\"node.separator.label\":[\"Separator\"],\"node.shared.itemInteractionActions.turnLightOff\":[\"Turn light off\"],\"node.shared.itemInteractionActions.turnLightOn\":[\"Turn light on\"],\"node.shared.systemCheckPanel.aboutTheseChecks\":[\"About these checks\"],\"node.shared.systemCheckPanel.allFindings\":[\"All findings\"],\"node.shared.systemCheckPanel.allSystems\":[\"All systems\"],\"node.shared.systemCheckPanel.connections\":[\"Connections\"],\"node.shared.systemCheckPanel.drainage\":[\"Drainage\"],\"node.shared.systemCheckPanel.error\":[\"Error\"],\"node.shared.systemCheckPanel.errors\":[\"Errors\"],\"node.shared.systemCheckPanel.filterSystemChecks\":[\"Filter system checks\"],\"node.shared.systemCheckPanel.hangers\":[\"Hangers\"],\"node.shared.systemCheckPanel.intersections\":[\"Intersections\"],\"node.shared.systemCheckPanel.locate\":[\"Locate \",[\"name\"],\" (\",[\"id\"],\")\"],\"node.shared.systemCheckPanel.missingItem\":[\"Missing item\"],\"node.shared.systemCheckPanel.noFindings\":[\"No findings\"],\"node.shared.systemCheckPanel.noFindingsInThisCategory\":[\"No findings in this category\"],\"node.shared.systemCheckPanel.openEnds\":[\"Open ends\"],\"node.shared.systemCheckPanel.openEndsAndSeparateBranchesMay\":[\"Open ends and separate branches may be intentional. Intersection checks use bounding boxes; inspect openings and clearances.\"],\"node.shared.systemCheckPanel.selectedConnectedSystem\":[\"Selected connected system\"],\"node.shared.systemCheckPanel.selectedRuns\":[\"Selected: \",[\"count\",\"plural\",{\"one\":[\"#\",\" run\"],\"other\":[\"#\",\" runs\"]}],\" · \",[\"length\"],\" m\"],\"node.shared.systemCheckPanel.separateBranches\":[\"Separate branches\"],\"node.shared.systemCheckPanel.showAllFindings\":[\"Show all findings\"],\"node.shared.systemCheckPanel.systemChecks\":[\"System checks\"],\"node.shared.systemCheckPanel.systemFinding\":[\"System finding\"],\"node.shared.systemCheckPanel.systemFindings\":[\"System findings\"],\"node.shared.systemCheckPanel.warning\":[\"Warning\"],\"node.shared.systemCheckPanel.warnings\":[\"Warnings\"],\"node.shelf.description\":[\"A configurable shelving unit. Items host on each row.\"],\"node.shelf.label\":[\"Shelf\"],\"node.site.description\":[\"The top-level container holding buildings, zones, and the property boundary.\"],\"node.site.label\":[\"Site\"],\"node.site.panel.address\":[\"Address\"],\"node.site.panel.apn\":[\"APN\"],\"node.site.panel.autoMostNorthFacingEdge\":[\"Auto — most north-facing edge\"],\"node.site.panel.contourIntervalSitePlanAnd3d\":[\"Contour interval (site plan and 3D)\"],\"node.site.panel.county\":[\"County\"],\"node.site.panel.eGRs60\":[\"e.g. RS-60\"],\"node.site.panel.eGTampaLdc27156\":[\"e.g. Tampa LDC §27-156\"],\"node.site.panel.every12In\":[\"every 12 in\"],\"node.site.panel.every24In\":[\"every 24 in\"],\"node.site.panel.every6In\":[\"every 6 in\"],\"node.site.panel.findParcel\":[\"Find parcel\"],\"node.site.panel.finding\":[\"Finding…\"],\"node.site.panel.frontStreetEdge\":[\"Front (street) edge\"],\"node.site.panel.lookingUpTheParcel\":[\"Looking up the parcel and the streets around it…\"],\"node.site.panel.lotArea\":[\"Lot area\"],\"node.site.panel.n1200WCassStTampaFl\":[\"1200 W Cass St, Tampa, FL\"],\"node.site.panel.noSurveyedLinesContoursAreDrawn\":[\"No surveyed lines — contours are drawn from the sculpted ground.\"],\"node.site.panel.none\":[\"none\"],\"node.site.panel.northRotation\":[\"North rotation\"],\"node.site.panel.orientation\":[\"Orientation\"],\"node.site.panel.parcel\":[\"Parcel\"],\"node.site.panel.parcelLookupFailed\":[\"Parcel lookup failed.\"],\"node.site.panel.projectLook\":[\"Project look\"],\"node.site.panel.saveCurrentLook\":[\"Save current look\"],\"node.site.panel.saveTheCurrentLightingAndDisplay\":[\"Save the current lighting and display as this project's default. Personal display changes stay in this browser.\"],\"node.site.panel.setbacks\":[\"Setbacks\"],\"node.site.panel.showGround\":[\"Show ground\"],\"node.site.panel.showTheContourLinesIn3d\":[\"Show the contour lines in 3D\"],\"node.site.panel.side\":[\"side\"],\"node.site.panel.site\":[\"Site\"],\"node.site.panel.source\":[\"Source\"],\"node.site.panel.sourceCitation\":[\"Source / citation\"],\"node.site.panel.streetAddress\":[\"Street address\"],\"node.site.panel.survey\":[\"survey\"],\"node.site.panel.surveyedContours\":[[\"count\",\"plural\",{\"one\":[\"#\",\" surveyed line\"],\"other\":[\"#\",\" surveyed lines\"]}],\" at \",[\"interval\"],\" ft (\",[\"datum\"],\") — \",[\"source\"]],\"node.site.panel.terrain\":[\"Terrain\"],\"node.site.panel.typeAnAddressFirst\":[\"Type an address first.\"],\"node.site.panel.useProjectLook\":[\"Use project look\"],\"node.site.panel.zone\":[\"Zone\"],\"node.site.setback.front\":[\"Front\"],\"node.site.setback.leftOverride\":[\"Left (override)\"],\"node.site.setback.rear\":[\"Rear\"],\"node.site.setback.rightOverride\":[\"Right (override)\"],\"node.site.setback.side\":[\"Side\"],\"node.skylight.description\":[\"Framed glass opening on a roof segment.\"],\"node.skylight.label\":[\"Skylight\"],\"node.slab.description\":[\"A polygon-bounded floor surface that hosts items on top.\"],\"node.slab.label\":[\"Slab\"],\"node.slab.panel.addHole\":[\"Add Hole\"],\"node.slab.panel.area\":[\"Area\"],\"node.slab.panel.auto\":[\"Auto\"],\"node.slab.panel.base\":[\"Base\"],\"node.slab.panel.cutHatch\":[\"Cut hatch\"],\"node.slab.panel.cutOpening\":[\"Cut opening\"],\"node.slab.panel.depth\":[\"Depth\"],\"node.slab.panel.done\":[\"Done\"],\"node.slab.panel.elevation\":[\"Elevation\"],\"node.slab.panel.extendsThePerimeterDownToTerrain\":[\"Extends the perimeter down to terrain. The flat surface, base, and thickness stay unchanged.\"],\"node.slab.panel.fixed\":[\"Fixed\"],\"node.slab.panel.floor\":[\"Floor\"],\"node.slab.panel.followsTerrain\":[\"Follows terrain\"],\"node.slab.panel.foundation\":[\"Foundation\"],\"node.slab.panel.holes\":[\"Holes\"],\"node.slab.panel.info\":[\"Info\"],\"node.slab.panel.move\":[\"Move\"],\"node.slab.panel.noHoles\":[\"No holes\"],\"node.slab.panel.rim\":[\"Rim\"],\"node.slab.panel.slab\":[\"Slab\"],\"node.slab.panel.standard2\":[\"Standard (2\\\")\"],\"node.slab.panel.standard5cm\":[\"Standard (5cm)\"],\"node.slab.panel.sunken15cm\":[\"Sunken (15cm)\"],\"node.slab.panel.sunken6\":[\"Sunken (6\\\")\"],\"node.slab.panel.surface\":[\"Surface\"],\"node.slab.panel.thick15cm\":[\"Thick (15cm)\"],\"node.slab.panel.thick6\":[\"Thick (6\\\")\"],\"node.slab.panel.thickness\":[\"Thickness\"],\"node.slab.panel.thin1\":[\"Thin (1\\\")\"],\"node.slab.panel.thin2cm\":[\"Thin (2cm)\"],\"node.solarPanel.description\":[\"Grid of photovoltaic panels mounted on a roof segment.\"],\"node.solarPanel.label\":[\"Solar Panel\"],\"node.spawn.description\":[\"Player or camera origin within a level. One per level.\"],\"node.spawn.label\":[\"Spawn Point\"],\"node.stair.constructionControls.body\":[\"Body\"],\"node.stair.constructionControls.centerStringer\":[\"Center stringer\"],\"node.stair.constructionControls.closedRisers\":[\"Closed risers\"],\"node.stair.constructionControls.inherit\":[\"Inherit\"],\"node.stair.constructionControls.nosing\":[\"Nosing\"],\"node.stair.constructionControls.open\":[\"Open\"],\"node.stair.constructionControls.original\":[\"Original\"],\"node.stair.constructionControls.riserThickness\":[\"Riser thickness\"],\"node.stair.constructionControls.sideStringers\":[\"Side stringers\"],\"node.stair.constructionControls.solid\":[\"Solid\"],\"node.stair.constructionControls.stringerDepth\":[\"Stringer depth\"],\"node.stair.constructionControls.stringerWidth\":[\"Stringer width\"],\"node.stair.constructionControls.treadFinish\":[\"Tread finish\"],\"node.stair.constructionControls.treadThickness\":[\"Tread thickness\"],\"node.stair.constructionControls.waist\":[\"Waist\"],\"node.stair.constructionControls.waistThickness\":[\"Waist thickness\"],\"node.stair.description\":[\"A stair composed of one or more flights with configurable treads, risers, railings.\"],\"node.stair.diagnostic.arrivalMismatch\":[\"The flight chain does not reach the declared destination.\"],\"node.stair.diagnostic.comfortTarget\":[\"Two risers plus going is outside the 0.60–0.65 m design range.\"],\"node.stair.diagnostic.goingTarget\":[\"Going is below the design target.\"],\"node.stair.diagnostic.headroomTarget\":[\"Overhead surfaces leave less than the target headroom.\"],\"node.stair.diagnostic.headroomUnresolved\":[\"Detailed headroom could not be evaluated: check riser counts and the surface query budget.\"],\"node.stair.diagnostic.invalidFlight\":[\"Flight dimensions and integer riser count must be positive.\"],\"node.stair.diagnostic.invalidRise\":[\"The destination must be above the stair base.\"],\"node.stair.diagnostic.landingOverlap\":[\"Landing depth exceeds a full circle at the walking line; the visible landing is limited to one circle.\"],\"node.stair.diagnostic.narrowWinderEnd\":[\"The narrow end of a winder tread is below 0.10 m; check the intended stair use.\"],\"node.stair.diagnostic.nonuniformRisers\":[\"Flight riser heights differ. Use uniform-riser repair only if this is a proposed design.\"],\"node.stair.diagnostic.raisedLanding\":[\"A landing has a stored rise; inspect its transition before repair.\"],\"node.stair.diagnostic.riserTarget\":[\"Riser height exceeds the design target.\"],\"node.stair.label\":[\"Stair\"],\"node.stair.layout.straight\":[\"Straight\"],\"node.stair.layout.turn\":[[\"layout\"],\" turn\"],\"node.stair.panel.actions\":[\"Actions\"],\"node.stair.panel.addFlight\":[\"Add flight\"],\"node.stair.panel.addLanding\":[\"Add landing\"],\"node.stair.panel.applyLabelLayout\":[\"Apply \",[\"label\"],\" layout\"],\"node.stair.panel.autoCutout\":[\"Auto Cutout\"],\"node.stair.panel.balusters\":[\"Balusters\"],\"node.stair.panel.boards\":[\"Boards\"],\"node.stair.panel.both\":[\"Both\"],\"node.stair.panel.cable\":[\"Cable\"],\"node.stair.panel.centerColumn\":[\"Center Column\"],\"node.stair.panel.clockwise\":[\"Clockwise\"],\"node.stair.panel.connectedTo\":[\"Connected to \",[\"surface\"],\". Move the stair to connect to another edge.\"],\"node.stair.panel.connectedToSurface\":[\"Connected to a surface. Move the stair to connect to another edge.\"],\"node.stair.panel.construction\":[\"Construction\"],\"node.stair.panel.counterclockwise\":[\"Counterclockwise\"],\"node.stair.panel.curved\":[\"Curved\"],\"node.stair.panel.customRise\":[\"Custom rise\"],\"node.stair.panel.deck\":[\"Deck\"],\"node.stair.panel.delete\":[\"Delete\"],\"node.stair.panel.designTargets\":[\"Design targets\"],\"node.stair.panel.destination\":[\"Destination\"],\"node.stair.panel.dragNearADeckPatioConcrete\":[\"Drag near a deck, patio, concrete slab, or landing edge to fit the stair.\"],\"node.stair.panel.duplicate\":[\"Duplicate\"],\"node.stair.panel.equalAngle\":[\"Equal angle\"],\"node.stair.panel.equalGoing\":[\"Equal going\"],\"node.stair.panel.fitRisersAndGoing\":[\"Fit risers and going\"],\"node.stair.panel.fitToFloor\":[\"Fit To Floor\"],\"node.stair.panel.fitUniformRisers\":[\"Fit uniform risers\"],\"node.stair.panel.flightMeasurements\":[\"Flight \",[\"number\"],\": \",[\"count\",\"plural\",{\"one\":[\"#\",\" riser\"],\"other\":[\"#\",\" risers\"]}],\" · R \",[\"riser\"],\" · T \",[\"going\"],\" · \",[\"slope\"]],\"node.stair.panel.floorsCeilingsAndStairsOnly\":[\"Floors, ceilings and stairs only.\"],\"node.stair.panel.followsDeck\":[\"Follows deck\"],\"node.stair.panel.followsLevel\":[\"Follows level\"],\"node.stair.panel.fromLevel\":[\"From Level\"],\"node.stair.panel.geometry\":[\"Geometry\"],\"node.stair.panel.glass\":[\"Glass\"],\"node.stair.panel.headroom\":[\"Headroom:\"],\"node.stair.panel.height\":[\"Height\"],\"node.stair.panel.innerGap\":[\"Inner gap\"],\"node.stair.panel.innerRadius\":[\"Inner Radius\"],\"node.stair.panel.integrated\":[\"Integrated\"],\"node.stair.panel.landing\":[\"Landing\"],\"node.stair.panel.layout\":[\"Layout\"],\"node.stair.panel.left\":[\"Left\"],\"node.stair.panel.leftTurn\":[\"Left turn\"],\"node.stair.panel.measurements\":[\"Measurements\"],\"node.stair.panel.metal\":[\"Metal\"],\"node.stair.panel.move\":[\"Move\"],\"node.stair.panel.movingThisStairKeepsItsCurrent\":[\"Moving this stair keeps its current rise, steps, and run.\"],\"node.stair.panel.noOverheadSurface\":[\"No overhead surface\"],\"node.stair.panel.none\":[\"None\"],\"node.stair.panel.notEvaluated\":[\"Not evaluated\"],\"node.stair.panel.opening\":[\"Opening\"],\"node.stair.panel.openingOffset\":[\"Opening Offset\"],\"node.stair.panel.position\":[\"Position\"],\"node.stair.panel.postRail\":[\"Post & rail\"],\"node.stair.panel.railing\":[\"Railing\"],\"node.stair.panel.right\":[\"Right\"],\"node.stair.panel.rightTurn\":[\"Right turn\"],\"node.stair.panel.rise\":[\"Rise\"],\"node.stair.panel.rotation\":[\"Rotation\"],\"node.stair.panel.segmentType\":[[\"type\",\"select\",{\"landing\":[\"Landing\"],\"other\":[\"Stair\"]}]],\"node.stair.panel.segments\":[\"Segments\"],\"node.stair.panel.sizing\":[\"Sizing\"],\"node.stair.panel.snapToNearbySurfaces\":[\"Snap to nearby surfaces\"],\"node.stair.panel.spiral\":[\"Spiral\"],\"node.stair.panel.staircase\":[\"Staircase\"],\"node.stair.panel.stepSupports\":[\"Step Supports\"],\"node.stair.panel.steps\":[\"Steps\"],\"node.stair.panel.straight\":[\"Straight\"],\"node.stair.panel.style\":[\"Style\"],\"node.stair.panel.surfaceConnection\":[\"Surface connection\"],\"node.stair.panel.sweep\":[\"Sweep\"],\"node.stair.panel.targetGoing\":[\"Target going\"],\"node.stair.panel.targetHeadroom\":[\"Target headroom\"],\"node.stair.panel.targetMaxRiser\":[\"Target max riser\"],\"node.stair.panel.targetMinimumGoing\":[\"Target minimum going\"],\"node.stair.panel.thickness\":[\"Thickness\"],\"node.stair.panel.to\":[\"To\"],\"node.stair.panel.topLanding\":[\"Top Landing\"],\"node.stair.panel.type\":[\"Type\"],\"node.stair.panel.unavailable\":[\"Unavailable\"],\"node.stair.panel.walkingLineOffset\":[\"Walking line offset\"],\"node.stair.panel.width\":[\"Width\"],\"node.stair.panel.winder\":[\"Winder\"],\"node.stair.railingControls.both\":[\"Both\"],\"node.stair.railingControls.bottomExtension\":[\"Bottom sloped extension\"],\"node.stair.railingControls.continuous\":[\"Continuous\"],\"node.stair.railingControls.floor\":[\"Floor\"],\"node.stair.railingControls.handrailDiameter\":[\"Handrail diameter\"],\"node.stair.railingControls.handrailHeight\":[\"Handrail height\"],\"node.stair.railingControls.handrailInset\":[\"Handrail inset\"],\"node.stair.railingControls.left\":[\"Left\"],\"node.stair.railingControls.noReturn\":[\"No return\"],\"node.stair.railingControls.none\":[\"None\"],\"node.stair.railingControls.originalLayout\":[\"Original layout\"],\"node.stair.railingControls.postFacing\":[\"Post-facing\"],\"node.stair.railingControls.returnLength\":[\"Return length\"],\"node.stair.railingControls.right\":[\"Right\"],\"node.stair.railingControls.separateHandrail\":[\"Separate handrail\"],\"node.stair.railingControls.setTheLengthToReachThe\":[\"Set the length to reach the wall or post.\"],\"node.stair.railingControls.topExtension\":[\"Top horizontal extension\"],\"node.stair.railingControls.wallFacing\":[\"Wall-facing\"],\"node.stairSegment.description\":[\"A single flight of a parent stair.\"],\"node.stairSegment.label\":[\"Stair Segment\"],\"node.stairSegment.panel.actions\":[\"Actions\"],\"node.stairSegment.panel.attachment\":[\"Attachment\"],\"node.stairSegment.panel.delete\":[\"Delete\"],\"node.stairSegment.panel.dimensions\":[\"Dimensions\"],\"node.stairSegment.panel.duplicate\":[\"Duplicate\"],\"node.stairSegment.panel.editingSwitchesTheStairToCustom\":[\"Editing switches the stair to Custom rise\"],\"node.stairSegment.panel.equalAngle\":[\"Equal angle\"],\"node.stairSegment.panel.equalGoing\":[\"Equal going\"],\"node.stairSegment.panel.fillToFloor\":[\"Fill to floor\"],\"node.stairSegment.panel.flight\":[\"Flight\"],\"node.stairSegment.panel.flightShape\":[\"Flight shape\"],\"node.stairSegment.panel.front\":[\"Front\"],\"node.stairSegment.panel.height\":[\"Height\"],\"node.stairSegment.panel.innerGap\":[\"Inner gap\"],\"node.stairSegment.panel.landing\":[\"Landing\"],\"node.stairSegment.panel.left\":[\"Left\"],\"node.stairSegment.panel.leftTurn\":[\"Left turn\"],\"node.stairSegment.panel.length\":[\"Length\"],\"node.stairSegment.panel.move\":[\"Move\"],\"node.stairSegment.panel.position\":[\"Position\"],\"node.stairSegment.panel.right\":[\"Right\"],\"node.stairSegment.panel.rightTurn\":[\"Right turn\"],\"node.stairSegment.panel.rotation\":[\"Rotation\"],\"node.stairSegment.panel.stairSegment\":[\"Stair Segment\"],\"node.stairSegment.panel.steps\":[\"Steps\"],\"node.stairSegment.panel.straight\":[\"Straight\"],\"node.stairSegment.panel.structure\":[\"Structure\"],\"node.stairSegment.panel.thickness\":[\"Thickness\"],\"node.stairSegment.panel.type\":[\"Type\"],\"node.stairSegment.panel.walkingLineOffset\":[\"Walking line offset\"],\"node.stairSegment.panel.width\":[\"Width\"],\"node.stairSegment.panel.winder\":[\"Winder\"],\"node.structuralGrid.description\":[\"Persistent construction grid axis with identification bubbles.\"],\"node.structuralGrid.label\":[\"Structural Grid\"],\"node.turbineVent.description\":[\"Wind-driven spinning whirlybird exhaust vent for a roof slope.\"],\"node.turbineVent.label\":[\"Turbine Vent\"],\"node.unit.description\":[\"A named group of zones forming one apartment, hotel room or commercial lot.\"],\"node.unit.kind.apartment\":[\"Apartment\"],\"node.unit.kind.commercial\":[\"Commercial\"],\"node.unit.kind.common\":[\"Common\"],\"node.unit.kind.hotelRoom\":[\"Hotel room\"],\"node.unit.label\":[\"Unit\"],\"node.unit.panel.noZonesAssigned\":[\"No zones assigned yet.\"],\"node.unit.panel.nonAdjacentLevels\":[\"Members sit on levels that are not adjacent.\"],\"node.unit.panel.removeMember\":[\"Remove \",[\"name\"],\" from unit\"],\"node.unit.panel.removeZone\":[\"Remove zone from unit\"],\"node.unit.unitPanel.actions\":[\"Actions\"],\"node.unit.unitPanel.color\":[\"Color\"],\"node.unit.unitPanel.delete\":[\"Delete\"],\"node.unit.unitPanel.focus\":[\"Focus\"],\"node.unit.unitPanel.grossArea\":[\"Gross area\"],\"node.unit.unitPanel.kind\":[\"Kind\"],\"node.unit.unitPanel.levels\":[\"Levels\"],\"node.unit.unitPanel.members\":[\"Members\"],\"node.unit.unitPanel.name\":[\"Name\"],\"node.unit.unitPanel.noRoomsYetPickThisUnit\":[\"No rooms yet. Pick this unit from a room's panel, or draw zones while it is focused.\"],\"node.unit.unitPanel.report\":[\"Report\"],\"node.unit.unitPanel.unit\":[\"Unit\"],\"node.wall.actions.mergeWalls\":[\"Merge walls\"],\"node.wall.actions.splitWall\":[\"Split wall\"],\"node.wall.curtain.cell\":[\"Column \",[\"column\"],\", row \",[\"row\"],\": \",[\"type\",\"select\",{\"glass\":[\"glass\"],\"solid\":[\"solid\"],\"other\":[\"empty\"]}]],\"node.wall.curtain.columnSpacing\":[[\"count\",\"plural\",{\"one\":[\"#\",\" column\"],\"other\":[\"#\",\" columns\"]}],\" · \",[\"spacing\"],\" grid spacing\"],\"node.wall.curtain.noPanels\":[\"No panels\"],\"node.wall.curtain.rowSpacing\":[[\"count\",\"plural\",{\"one\":[\"#\",\" row\"],\"other\":[\"#\",\" rows\"]}],\" · \",[\"spacing\"],\" grid spacing\"],\"node.wall.curtainWallPanel.applyTint\":[\"Apply tint\"],\"node.wall.curtainWallPanel.borderOpeningFrame\":[\"Border / opening frame\"],\"node.wall.curtainWallPanel.bottom\":[\"Bottom\"],\"node.wall.curtainWallPanel.bottomRow\":[\"Bottom row\"],\"node.wall.curtainWallPanel.cancelTint\":[\"Cancel tint\"],\"node.wall.curtainWallPanel.center\":[\"Center\"],\"node.wall.curtainWallPanel.chooseACellOrEnterIts\":[\"Choose a cell or enter its column and row. Use arrow keys to move between cells. Columns run from the wall start; rows count upward.\"],\"node.wall.curtainWallPanel.clearHiddenOverrides\":[\"Clear hidden overrides\"],\"node.wall.curtainWallPanel.column\":[\"Column\"],\"node.wall.curtainWallPanel.columnLayout\":[\"Column layout\"],\"node.wall.curtainWallPanel.columnRow\":[\"Column \",[\"column\"],\", row \",[\"row\"]],\"node.wall.curtainWallPanel.construction\":[\"Construction\"],\"node.wall.curtainWallPanel.continuousMullionsAndTransomsAssembledAlong\":[\"Continuous mullions and transoms assembled along the wall.\"],\"node.wall.curtainWallPanel.curtainWallPanelSelection\":[\"Curtain wall panel selection\"],\"node.wall.curtainWallPanel.customInfill\":[\"Custom infill\"],\"node.wall.curtainWallPanel.defaultPanel\":[\"Default panel\"],\"node.wall.curtainWallPanel.editIndividualPanels\":[\"Edit individual panels\"],\"node.wall.curtainWallPanel.effectiveThicknessLimited\":[\"Effective thickness: \",[\"thickness\"],\", limited by frame depth.\"],\"node.wall.curtainWallPanel.empty\":[\"Empty\"],\"node.wall.curtainWallPanel.enablePanelEditing\":[\"Enable panel editing\"],\"node.wall.curtainWallPanel.end\":[\"End\"],\"node.wall.curtainWallPanel.fixedSpacing\":[\"Fixed spacing\"],\"node.wall.curtainWallPanel.followingWallDefaults\":[\"Following wall defaults\"],\"node.wall.curtainWallPanel.frameDimensions\":[\"Frame dimensions\"],\"node.wall.curtainWallPanel.framing\":[\"Framing\"],\"node.wall.curtainWallPanel.fullyCapped\":[\"Fully capped\"],\"node.wall.curtainWallPanel.glass\":[\"Glass\"],\"node.wall.curtainWallPanel.glassAppearance\":[\"Glass appearance\"],\"node.wall.curtainWallPanel.glassAppearanceIsControlledByThe\":[\"Glass appearance is controlled by the paint tool.\"],\"node.wall.curtainWallPanel.glassTint\":[\"Glass tint\"],\"node.wall.curtainWallPanel.glazingGap\":[\"Glazing gap\"],\"node.wall.curtainWallPanel.gridLimitedTo32PanelsPer\":[\"Grid limited to 32 panels per axis. Spacing expands to fit this wall.\"],\"node.wall.curtainWallPanel.horizontalCaps\":[\"Horizontal caps\"],\"node.wall.curtainWallPanel.horizontalFrameWidth\":[\"Horizontal frame width\"],\"node.wall.curtainWallPanel.layout\":[\"Layout\"],\"node.wall.curtainWallPanel.lengthCustomPanelsAreOutsideThis\":[[\"length\"],\" custom panels are outside this grid. They return if the grid expands.\"],\"node.wall.curtainWallPanel.lowRoughnessIsSmoothHighRoughness\":[\"Low roughness is smooth; high roughness gives a matte surface in rendered shading.\"],\"node.wall.curtainWallPanel.maximumSpacing\":[\"Maximum spacing\"],\"node.wall.curtainWallPanel.moduleJointWidth\":[\"Module joint width\"],\"node.wall.curtainWallPanel.none\":[\"None\"],\"node.wall.curtainWallPanel.opacity\":[\"Opacity\"],\"node.wall.curtainWallPanel.opaqueBand\":[\"Opaque band\"],\"node.wall.curtainWallPanel.opaqueBandsReplaceAFullRow\":[\"Opaque bands replace a full row with solid panels. Apply their finish with the paint tool.\"],\"node.wall.curtainWallPanel.panelCount\":[\"Panel count\"],\"node.wall.curtainWallPanel.panelInfill\":[\"Panel infill\"],\"node.wall.curtainWallPanel.panelThickness\":[\"Panel thickness\"],\"node.wall.curtainWallPanel.panels\":[\"Panels\"],\"node.wall.curtainWallPanel.resetThisPanel\":[\"Reset this panel\"],\"node.wall.curtainWallPanel.row2\":[\"Row\"],\"node.wall.curtainWallPanel.rowLayout\":[\"Row layout\"],\"node.wall.curtainWallPanel.separateFramedModulesWithJointsBetween\":[\"Separate framed modules with joints between units.\"],\"node.wall.curtainWallPanel.solid\":[\"Solid\"],\"node.wall.curtainWallPanel.spacing\":[\"Spacing\"],\"node.wall.curtainWallPanel.start\":[\"Start\"],\"node.wall.curtainWallPanel.stickBuilt\":[\"Stick-built\"],\"node.wall.curtainWallPanel.structuralGlazing\":[\"Structural glazing\"],\"node.wall.curtainWallPanel.surfaceRoughness\":[\"Surface roughness\"],\"node.wall.curtainWallPanel.top\":[\"Top\"],\"node.wall.curtainWallPanel.topRow\":[\"Top row\"],\"node.wall.curtainWallPanel.uncappedMembersSitBehindTheGlazing\":[\"Uncapped members sit behind the glazing.\"],\"node.wall.curtainWallPanel.unitized\":[\"Unitized\"],\"node.wall.curtainWallPanel.useGlassSettingsInstead\":[\"Use glass settings instead\"],\"node.wall.curtainWallPanel.useTheDoorOrWindowTool\":[\"Use the Door or Window tool to add an opening through the wall.\"],\"node.wall.curtainWallPanel.verticalCaps\":[\"Vertical caps\"],\"node.wall.curtainWallPanel.verticalFrameWidth\":[\"Vertical frame width\"],\"node.wall.curtainWallPanel.wallSystem\":[\"Wall system\"],\"node.wall.description\":[\"A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items.\"],\"node.wall.label\":[\"Wall\"],\"node.wall.panel.actions\":[\"Actions\"],\"node.wall.panel.assembly\":[\"Assembly\"],\"node.wall.panel.auto\":[\"Auto\"],\"node.wall.panel.both\":[\"Both\"],\"node.wall.panel.bottom\":[\"Bottom\"],\"node.wall.panel.brickVeneer\":[\"Brick veneer\"],\"node.wall.panel.chairRail\":[\"Chair rail\"],\"node.wall.panel.cmu\":[\"CMU\"],\"node.wall.panel.colonial\":[\"Colonial\"],\"node.wall.panel.cove\":[\"Cove\"],\"node.wall.panel.craft\":[\"Craft\"],\"node.wall.panel.crownMolding\":[\"Crown molding\"],\"node.wall.panel.curtainWall\":[\"Curtain wall\"],\"node.wall.panel.curve\":[\"Curve\"],\"node.wall.panel.custom\":[\"Custom\"],\"node.wall.panel.customHeight\":[\"Custom height\"],\"node.wall.panel.depth\":[\"Depth\"],\"node.wall.panel.dimensions\":[\"Dimensions\"],\"node.wall.panel.drywall\":[\"Drywall\"],\"node.wall.panel.extendsDownwardToMeetTheTerrain\":[\"Extends downward to meet the terrain. Height and top stay unchanged.\"],\"node.wall.panel.exterior\":[\"Exterior\"],\"node.wall.panel.fiberCement\":[\"Fiber cement\"],\"node.wall.panel.fillToTerrain\":[\"Fill to terrain\"],\"node.wall.panel.flat\":[\"Flat\"],\"node.wall.panel.followsLevel\":[\"Follows level\"],\"node.wall.panel.frameDepth\":[\"Frame depth\"],\"node.wall.panel.framing\":[\"Framing\"],\"node.wall.panel.gypsum\":[\"Gypsum\"],\"node.wall.panel.height\":[\"Height\"],\"node.wall.panel.hideCode\":[\"Hide code\"],\"node.wall.panel.icf\":[\"ICF\"],\"node.wall.panel.interior\":[\"Interior\"],\"node.wall.panel.lapSiding\":[\"Lap siding\"],\"node.wall.panel.layerThicknessesFollowThe2021Irc\":[\"Layer thicknesses follow the 2021 IRC assembly data. Drafting aid, not engineering — verify with the authority having jurisdiction.\"],\"node.wall.panel.layered\":[\"Layered\"],\"node.wall.panel.length\":[\"Length\"],\"node.wall.panel.loading\":[\"Loading…\"],\"node.wall.panel.modern\":[\"Modern\"],\"node.wall.panel.none\":[\"None\"],\"node.wall.panel.noneSingleLayer\":[\"None (single layer)\"],\"node.wall.panel.offset\":[\"Offset\"],\"node.wall.panel.ogee\":[\"Ogee\"],\"node.wall.panel.osb\":[\"OSB\"],\"node.wall.panel.partitionTheInteriorFinishIsApplied\":[\"Partition: the interior finish is applied to both faces.\"],\"node.wall.panel.picture\":[\"Picture\"],\"node.wall.panel.plaster\":[\"Plaster\"],\"node.wall.panel.plywood\":[\"Plywood\"],\"node.wall.panel.preset\":[\"Preset\"],\"node.wall.panel.reference\":[\"Reference\"],\"node.wall.panel.remove\":[\"Remove\"],\"node.wall.panel.round\":[\"Round\"],\"node.wall.panel.scriptedFinish\":[\"Scripted finish\"],\"node.wall.panel.sheathing\":[\"Sheathing\"],\"node.wall.panel.shoe\":[\"Shoe\"],\"node.wall.panel.sideA\":[\"Side A\"],\"node.wall.panel.sideB\":[\"Side B\"],\"node.wall.panel.sideFace\":[\"Side \",[\"face\"]],\"node.wall.panel.skirting\":[\"Skirting\"],\"node.wall.panel.standard\":[\"Standard\"],\"node.wall.panel.steelStuds\":[\"Steel studs\"],\"node.wall.panel.step\":[\"Step\"],\"node.wall.panel.stoneVeneer\":[\"Stone veneer\"],\"node.wall.panel.stucco\":[\"Stucco\"],\"node.wall.panel.thickness\":[\"Thickness\"],\"node.wall.panel.thicknessFromAssembly\":[[\"thickness\"],\" · from assembly\"],\"node.wall.panel.top\":[\"Top\"],\"node.wall.panel.totalThickness\":[\"Total thickness\"],\"node.wall.panel.unverifiedPresetnote\":[\"Unverified: \",[\"presetNote\"]],\"node.wall.panel.viewCode\":[\"View code\"],\"node.wall.panel.wall\":[\"Wall\"],\"node.wall.panel.wallType\":[\"Wall type\"],\"node.wall.panel.whichFaceIsOutsideIsUndetermined\":[\"Which face is outside is undetermined (no room detected on either side) — the exterior layers are drawn on side B.\"],\"node.wall.panel.woodStuds\":[\"Wood studs\"],\"node.wall.reference.center\":[\"Center\"],\"node.wall.reference.inside\":[\"Inside face\"],\"node.wall.reference.left\":[\"Left\"],\"node.wall.reference.outside\":[\"Outside face\"],\"node.wall.reference.right\":[\"Right\"],\"node.wall.trim.hide\":[[\"trim\",\"select\",{\"skirting\":[\"Hide skirting\"],\"crown\":[\"Hide crown molding\"],\"other\":[\"Hide chair rail\"]}]],\"node.wall.trim.show\":[[\"trim\",\"select\",{\"skirting\":[\"Show skirting\"],\"crown\":[\"Show crown molding\"],\"other\":[\"Show chair rail\"]}]],\"node.window.description\":[\"A window cut into a wall. Animated open/close for opening windows.\"],\"node.window.label\":[\"Window\"],\"node.window.operation.raise\":[\"Raise\"],\"node.window.operation.slats\":[\"Slats\"],\"node.window.operation.slide\":[\"Slide\"],\"node.window.operation.swing\":[\"Swing\"],\"node.window.operation.tilt\":[\"Tilt\"],\"node.window.panel.actions\":[\"Actions\"],\"node.window.panel.all\":[\"All\"],\"node.window.panel.arch\":[\"Arch\"],\"node.window.panel.archHeight\":[\"Arch Height\"],\"node.window.panel.colWidths\":[\"Col Widths\"],\"node.window.panel.columns\":[\"Columns\"],\"node.window.panel.corner\":[\"Corner\"],\"node.window.panel.cornerPost\":[\"Corner post\"],\"node.window.panel.cornerRadius\":[\"Corner Radius\"],\"node.window.panel.customThePanesMatchNoStyle\":[\"Custom: the panes match no style.\"],\"node.window.panel.delete\":[\"Delete\"],\"node.window.panel.depth\":[\"Depth\"],\"node.window.panel.dimensions\":[\"Dimensions\"],\"node.window.panel.divider\":[\"Divider\"],\"node.window.panel.down\":[\"Down\"],\"node.window.panel.duplicate\":[\"Duplicate\"],\"node.window.panel.enableSill\":[\"Enable Sill\"],\"node.window.panel.flipSide\":[\"Flip Side\"],\"node.window.panel.frame\":[\"Frame\"],\"node.window.panel.french\":[\"French\"],\"node.window.panel.fusedGlass\":[\"Fused glass\"],\"node.window.panel.grid\":[\"Grid\"],\"node.window.panel.height\":[\"Height\"],\"node.window.panel.individual\":[\"Individual\"],\"node.window.panel.left\":[\"Left\"],\"node.window.panel.move\":[\"Move\"],\"node.window.panel.opening\":[\"Opening\"],\"node.window.panel.openingShape\":[\"Opening Shape\"],\"node.window.panel.otherSide\":[\"Other side\"],\"node.window.panel.pos\":[\"pos\"],\"node.window.panel.position\":[\"Position\"],\"node.window.panel.rect\":[\"Rect\"],\"node.window.panel.revealRadius\":[\"Reveal Radius\"],\"node.window.panel.right\":[\"Right\"],\"node.window.panel.rounded\":[\"Rounded\"],\"node.window.panel.rowHeights\":[\"Row Heights\"],\"node.window.panel.rows\":[\"Rows\"],\"node.window.panel.sill\":[\"Sill\"],\"node.window.panel.single\":[\"Single\"],\"node.window.panel.sizeIsLimitedToTheWall\":[\"Size is limited to the wall, including clearance for the opening frame.\"],\"node.window.panel.style\":[\"Style\"],\"node.window.panel.thickness\":[\"Thickness\"],\"node.window.panel.thisSide\":[\"This side\"],\"node.window.panel.topShape\":[\"Top Shape\"],\"node.window.panel.type\":[\"Type\"],\"node.window.panel.unwrap\":[\"Unwrap\"],\"node.window.panel.up\":[\"Up\"],\"node.window.panel.width\":[\"Width\"],\"node.window.panel.window\":[\"Window\"],\"node.window.panel.windowType\":[\"Window Type\"],\"node.window.panel.wrapTheCorner\":[\"Wrap the corner\"],\"node.window.panel.wrapsTheCornerWithNamed\":[\"Wraps the corner with \",[\"partner\"]],\"node.window.panel.wrapsTheCornerWithPartner\":[\"Wraps the corner with its partner\"],\"node.window.style.casement\":[\"Casement\"],\"node.window.style.doubleHung\":[\"Double-hung\"],\"node.window.style.grid\":[\"Grid\"],\"node.window.style.horizontalBands\":[\"Horizontal bands\"],\"node.window.style.picture\":[\"Picture\"],\"node.window.style.single\":[\"Single\"],\"node.window.style.sliding\":[\"Sliding\"],\"node.window.style.tallGrid\":[\"Tall grid\"],\"node.window.style.transom\":[\"Transom\"],\"node.window.style.tripleHung\":[\"Triple-hung\"],\"node.window.style.wideGrid\":[\"Wide grid\"],\"node.window.type.awning\":[\"Awning\"],\"node.window.type.bay\":[\"Bay\"],\"node.window.type.bow\":[\"Bow\"],\"node.window.type.casement\":[\"Casement\"],\"node.window.type.doubleHung\":[\"Double Hung\"],\"node.window.type.fixed\":[\"Fixed\"],\"node.window.type.hopper\":[\"Hopper\"],\"node.window.type.louvered\":[\"Louvered\"],\"node.window.type.singleHung\":[\"Single Hung\"],\"node.window.type.sliding\":[\"Sliding\"],\"node.zone.description\":[\"A polygonal site zone (lawn, water, paving) with a TSL gradient material.\"],\"node.zone.label\":[\"Zone\"],\"node.zone.quantitiesPanel.enclosedRoom\":[\"Enclosed room\"],\"node.zone.quantitiesPanel.floorSurface\":[\"Floor surface\"],\"node.zone.quantitiesPanel.footprintOnly\":[\"Footprint only\"],\"node.zone.quantitiesPanel.none\":[\"None\"],\"node.zone.quantitiesPanel.notProven\":[\"Not proven\"],\"node.zone.quantitiesPanel.roomQuantities\":[\"Room quantities\"],\"node.zone.quantitiesPanel.topViewWithZoneEdgeDimensions\":[\"Top view with zone edge dimensions\"],\"node.zone.quantitiesPanel.unit\":[\"Unit\"],\"node.zone.quantitiesPanel.volume\":[\"Volume\"],\"node.zone.quantitiesPanel.wallSurface\":[\"Wall surface\"],\"node.zone.quantitiesPanel.zoneBoundaryUnavailable\":[\"Zone boundary unavailable\"],\"node.zone.quantitiesPanel.zoneQuantities\":[\"Zone quantities\"],\"viewer.camera.orbitLeft\":[\"Orbit left\"],\"viewer.camera.orbitRight\":[\"Orbit right\"],\"viewer.camera.topView\":[\"Top view\"],\"viewer.common.off\":[\"Off\"],\"viewer.common.on\":[\"On\"],\"viewer.display.camera\":[\"Camera\"],\"viewer.display.colored\":[\"Colored\"],\"viewer.display.colors\":[\"Colors\"],\"viewer.display.edges.off\":[\"Off\"],\"viewer.display.edges.offDetail\":[\"No edge lines\"],\"viewer.display.edges.soft\":[\"Soft\"],\"viewer.display.edges.softDetail\":[\"Faint outline of major creases\"],\"viewer.display.edges.strong\":[\"Strong\"],\"viewer.display.edges.strongDetail\":[\"Crisp, opaque edge lines\"],\"viewer.display.edges.title\":[\"Edges\"],\"viewer.display.monochrome\":[\"Monochrome\"],\"viewer.display.orthographic\":[\"Orthographic\"],\"viewer.display.perspective\":[\"Perspective\"],\"viewer.display.render.rendered\":[\"Rendered\"],\"viewer.display.render.renderedDetail\":[\"Full ambient occlusion\"],\"viewer.display.render.solid\":[\"Solid\"],\"viewer.display.render.solidDetail\":[\"Flat and fast — no ambient occlusion\"],\"viewer.display.render.title\":[\"Render\"],\"viewer.display.shadows\":[\"Shadows\"],\"viewer.display.title\":[\"Display settings\"],\"viewer.floorplan.alignNorth\":[\"Align view to north\"],\"viewer.floorplan.empty\":[\"No floor plans are available for this scene.\"],\"viewer.floorplan.fit\":[\"Fit floor plan\"],\"viewer.floorplan.floor\":[\"Floor\"],\"viewer.floorplan.floorPlan\":[\"Floor plan\"],\"viewer.floorplan.viewLabel\":[[\"floor\"],\" 2D view\"],\"viewer.floorplan.zoomIn\":[\"Zoom in\"],\"viewer.floorplan.zoomOut\":[\"Zoom out\"],\"viewer.header.back\":[\"Back\"],\"viewer.header.levels\":[\"Levels\"],\"viewer.header.rooms\":[\"Rooms\"],\"viewer.header.selection\":[\"Selection\"],\"viewer.header.units\":[\"Units\"],\"viewer.header.untitled\":[\"Untitled\"],\"viewer.header.zones\":[\"Zones\"],\"viewer.levels.exploded\":[\"Exploded\"],\"viewer.levels.label\":[\"Levels: \",[\"mode\"]],\"viewer.levels.manual\":[\"Manual\"],\"viewer.levels.solo\":[\"Solo\"],\"viewer.levels.stacked\":[\"Stacked\"],\"viewer.stage.layout\":[\"Viewer layout\"],\"viewer.stage.split\":[\"Split\"],\"viewer.theme.blueprint\":[\"Blueprint\"],\"viewer.theme.mediterranean\":[\"Mediterranean\"],\"viewer.theme.night\":[\"Night\"],\"viewer.theme.overcast\":[\"Overcast\"],\"viewer.theme.paper\":[\"Paper\"],\"viewer.theme.studio\":[\"Studio\"],\"viewer.theme.sunset\":[\"Sunset\"],\"viewer.theme.title\":[\"Scene theme\"],\"viewer.theme.twilight\":[\"Twilight\"],\"viewer.theme.verdant\":[\"Verdant\"],\"viewer.visibility.guides\":[\"Guides\"],\"viewer.visibility.scans\":[\"Scans\"],\"viewer.visibility.title\":[\"Visibility\"],\"viewer.walkthrough.label\":[\"Walkthrough: \",[\"state\"]],\"viewer.walls.cutaway\":[\"Cutaway\"],\"viewer.walls.fullHeight\":[\"Full height\"],\"viewer.walls.label\":[\"Walls: \",[\"mode\"]],\"viewer.walls.low\":[\"Low\"]}")as Messages; \ No newline at end of file diff --git a/packages/editor/src/i18n/locales/es/messages.po b/packages/editor/src/i18n/locales/es/messages.po index 6ab3f961ae..7c85f08616 100644 --- a/packages/editor/src/i18n/locales/es/messages.po +++ b/packages/editor/src/i18n/locales/es/messages.po @@ -2963,6 +2963,26 @@ msgstr "Girar" msgid "editor.cameraHint.zoom" msgstr "Zoom" +# Source-Hash: 34b7ca7ff46c44a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{label}: {finish}" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.ariaLabel" +msgstr "{label}: {finish}" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.default" +msgstr "Predeterminado" + # Source-Hash: a2bd204e93e90598 # Review: required # AI-Provider: cursor-agent @@ -10175,6 +10195,26 @@ msgstr "Separar la esquina: ambas ventanas se mantienen, cada una con su marco e msgid "editor.panels.panelManager.selection" msgstr "Selección" +# Source-Hash: 7ceade8f25b58fe9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.back" +msgstr "Volver" + +# Source-Hash: d7cf5045c01b2eb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.close" +msgstr "Cerrar" + # Source-Hash: 2dff25ca30c80559 # Review: required # AI-Provider: cursor-agent @@ -10235,6 +10275,16 @@ msgstr "Gestionar colecciones…" msgid "editor.panels.panelWrapper.openTitle" msgstr "Abrir {title}" +# Source-Hash: bf91b71a9aa76e94 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.reset" +msgstr "Restablecer" + # Source-Hash: 04a212d6317f6787 # Review: required # AI-Provider: cursor-agent @@ -11395,6 +11445,16 @@ msgstr "Ninguno" msgid "editor.panels.roomPanel.notEnoughHeadroom" msgstr "Altura libre insuficiente" +# Source-Hash: 92f7bc961d784f6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{doors, plural, one {# door} other {# doors}} · {windows, plural, one {# window} other {# windows}}" +#: packages/editor/src/components/ui/panels/room-panel.tsx +#, fuzzy +msgid "editor.panels.roomPanel.openingCounts" +msgstr "{doors, plural, one {# puerta} many {# puertas} other {# puertas}} · {windows, plural, one {# ventana} many {# ventanas} other {# ventanas}}" + # Source-Hash: a8cd9507ce472a48 # Review: required # AI-Provider: cursor-agent @@ -15590,6 +15650,106 @@ msgstr "muro" msgid "node.door.panel.width" msgstr "Ancho" +# Source-Hash: 8421deea35cb5afc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Barn" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.barn" +msgstr "Granero" + +# Source-Hash: f747fbe71717772e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Craftsman" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.craftsman" +msgstr "Craftsman" + +# Source-Hash: 092033938ca2debb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "French" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.french" +msgstr "Francesa" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.glass" +msgstr "Vidrio" + +# Source-Hash: 6ab8b98b38eb2e65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Half-louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.halfLouvered" +msgstr "Media persiana" + +# Source-Hash: f6cbdaa17e989b91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modern" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.modern" +msgstr "Moderno" + +# Source-Hash: 482469f5a0873f73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.panel" +msgstr "Panel" + +# Source-Hash: ac42c328610a0edd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paneled glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.paneledGlass" +msgstr "Cuarterones con vidrio" + +# Source-Hash: 5b68e435b7210876 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shaker" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.shaker" +msgstr "Shaker" + +# Source-Hash: 9ad6ac42b4152b64 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Six-panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.sixPanel" +msgstr "Seis cuarterones" + # Source-Hash: 8421deea35cb5afc # Review: required # AI-Provider: cursor-agent @@ -16024,6 +16184,76 @@ msgstr "Geometría conservada de un modelo importado cuando no existe una forma msgid "node.importedMesh.label" msgstr "Malla importada" +# Source-Hash: 9cce89f94c673821 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Couldn't rebuild with these values." +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.couldnTRebuildWithTheseValues" +msgstr "No se ha podido reconstruir con estos valores." + +# Source-Hash: 373b929318436fe3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.parameters" +msgstr "Parámetros" + +# Source-Hash: 558cb886dbe0babe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuilding" +msgstr "Reconstruyendo…" + +# Source-Hash: a094c99dc8ad29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding in Blender…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuildingInBlender" +msgstr "Reconstruyendo en Blender…" + +# Source-Hash: 1778f93ee143cd95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset {param}" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParam" +msgstr "Restablecer {param}" + +# Source-Hash: 5a28cf5f2402dd7a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParameters" +msgstr "Restablecer parámetros" + +# Source-Hash: 6eb8025c60d6d3ca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset to default" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetToDefault" +msgstr "Restablecer valores predeterminados" + # Source-Hash: 63f79b3c467177b3 # Review: required # AI-Provider: cursor-agent @@ -16517,152 +16747,322 @@ msgstr "Faldón delantero" msgid "node.roof.glazing.face.slope" msgstr "Faldón a un agua" -# Source-Hash: c98a4e6b28f05e0f +# Source-Hash: 3bcc542295b4c61e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Changes apply to all {length} roof segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Alignment" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" -msgstr "Los cambios se aplican a los {length} segmentos de cubierta." +msgid "node.roof.glazingControls.alignment" +msgstr "Alineación" -# Source-Hash: c5d2ff7fda4787cd +# Source-Hash: 5211341ed18f33f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Choose one roof system to edit settings for all selected segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Center" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" -msgstr "Elige un sistema de cubierta para editar los ajustes de todos los segmentos seleccionados." +msgid "node.roof.glazingControls.center" +msgstr "Centro" -# Source-Hash: 80e07a119b63187c +# Source-Hash: 512e47607a37af46 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close the roof ends" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Choose a layout to edit the grid." +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.closeTheRoofEnds" -msgstr "Cerrar los extremos de la cubierta" +msgid "node.roof.glazingControls.chooseALayoutToEditThe" +msgstr "Elige una distribución para editar la retícula." -# Source-Hash: e28dd27d54aaa7ae +# Source-Hash: 65b1cbba3b92c5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default panel infill" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Empty" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.defaultPanelInfill" -msgstr "Relleno predeterminado del panel" +msgid "node.roof.glazingControls.empty" +msgstr "Vacío" -# Source-Hash: 134d33e2465937e7 +# Source-Hash: 135874d189176d13 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides each roof face into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "End" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" -msgstr "Divide cada faldón en columnas." +msgid "node.roof.glazingControls.end" +msgstr "Final" -# Source-Hash: 896a6e4da3357c39 +# Source-Hash: 4fb65101d0b1a222 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides the length of each arch bay into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Fixed spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" -msgstr "Divide la longitud de cada vano en arco en columnas." +msgid "node.roof.glazingControls.fixedSpacing" +msgstr "Separación fija" -# Source-Hash: be9c810d28d1feb9 +# Source-Hash: 8ab91094cf650204 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Glass" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" -msgstr "El relleno de testero llena el espacio sobre los muros. Edita los muros y techos de las estancias por separado." +msgid "node.roof.glazingControls.glass" +msgstr "Vidrio" -# Source-Hash: 0b8b27dbc57cca44 +# Source-Hash: 54800340a0eeab23 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame color" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Layout" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameColor" -msgstr "Color del marco" +msgid "node.roof.glazingControls.layout" +msgstr "Distribución" -# Source-Hash: fd413477f1a9e5ed +# Source-Hash: 321ca5101ab61db7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame depth" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Maximum spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameDepth" -msgstr "Profundidad del marco" +msgid "node.roof.glazingControls.maximumSpacing" +msgstr "Separación máxima" -# Source-Hash: 3519d91b7bda18a5 +# Source-Hash: d10743fce478d9f4 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame width" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Max spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameWidth" -msgstr "Ancho del marco" +msgid "node.roof.glazingControls.maxSpacing" +msgstr "Separación máx." -# Source-Hash: c7e72beff9fe4b37 +# Source-Hash: 37d9f63758abdb67 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Framing" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Mixed" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.framing" -msgstr "Entramado" +msgid "node.roof.glazingControls.mixed" +msgstr "Mixto" -# Source-Hash: 8ab91094cf650204 +# Source-Hash: b91302bf741c9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panel count" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glass" -msgstr "Vidrio" +msgid "node.roof.glazingControls.panelCount" +msgstr "Número de paneles" -# Source-Hash: 9c38875c310547ae +# Source-Hash: 6ce059aee1386f72 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass tint" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panels" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glassTint" -msgstr "Tinte del vidrio" +msgid "node.roof.glazingControls.panels" +msgstr "Paneles" -# Source-Hash: dd330a94b3f7a65a +# Source-Hash: ef3e765e692faf4c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazed" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Solid" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glazed" -msgstr "Acristalado" +msgid "node.roof.glazingControls.solid" +msgstr "Sólido" -# Source-Hash: e6be52df9197243a +# Source-Hash: e4698e83d02beb6c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazing is available for gable, straight shed, and barrel roofs." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Spacing" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.spacing" +msgstr "Separación" + +# Source-Hash: 0a26a1e61c825660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.start" +msgstr "Inicio" + +# Source-Hash: 095237e9e2df4d9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{title} alignment" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.titleAlignment" +msgstr "Alineación de {title}" + +# Source-Hash: c98a4e6b28f05e0f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Changes apply to all {length} roof segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" +msgstr "Los cambios se aplican a los {length} segmentos de cubierta." + +# Source-Hash: c5d2ff7fda4787cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Choose one roof system to edit settings for all selected segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" +msgstr "Elige un sistema de cubierta para editar los ajustes de todos los segmentos seleccionados." + +# Source-Hash: 80e07a119b63187c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close the roof ends" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.closeTheRoofEnds" +msgstr "Cerrar los extremos de la cubierta" + +# Source-Hash: e28dd27d54aaa7ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default panel infill" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.defaultPanelInfill" +msgstr "Relleno predeterminado del panel" + +# Source-Hash: 134d33e2465937e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides each roof face into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" +msgstr "Divide cada faldón en columnas." + +# Source-Hash: 896a6e4da3357c39 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides the length of each arch bay into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" +msgstr "Divide la longitud de cada vano en arco en columnas." + +# Source-Hash: be9c810d28d1feb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" +msgstr "El relleno de testero llena el espacio sobre los muros. Edita los muros y techos de las estancias por separado." + +# Source-Hash: 0b8b27dbc57cca44 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame color" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameColor" +msgstr "Color del marco" + +# Source-Hash: fd413477f1a9e5ed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame depth" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameDepth" +msgstr "Profundidad del marco" + +# Source-Hash: 3519d91b7bda18a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame width" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameWidth" +msgstr "Ancho del marco" + +# Source-Hash: c7e72beff9fe4b37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Framing" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.framing" +msgstr "Entramado" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glass" +msgstr "Vidrio" + +# Source-Hash: 9c38875c310547ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass tint" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glassTint" +msgstr "Tinte del vidrio" + +# Source-Hash: dd330a94b3f7a65a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazed" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glazed" +msgstr "Acristalado" + +# Source-Hash: e6be52df9197243a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazing is available for gable, straight shed, and barrel roofs." +#: packages/nodes/src/roof/glazing-panel.tsx #, fuzzy msgid "node.roof.glazingPanel.glazingIsAvailableForGableStraight" msgstr "El acristalamiento está disponible para cubiertas a dos aguas, a un agua rectas y abovedadas." @@ -17879,6 +18279,26 @@ msgstr "Segmento {number}" msgid "node.separator.label" msgstr "Separador" +# Source-Hash: e7512c891d8da7d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light off" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOff" +msgstr "Apagar la luz" + +# Source-Hash: d47ec95e14909fe5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light on" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOn" +msgstr "Encender la luz" + # Source-Hash: b2d703d283baf64a # Review: required # AI-Provider: cursor-agent @@ -18989,6 +19409,166 @@ msgstr "Origen del jugador o la cámara en una planta. Uno por planta." msgid "node.spawn.label" msgstr "Punto de aparición" +# Source-Hash: faaa4f6b40001667 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Body" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.body" +msgstr "Cuerpo" + +# Source-Hash: 29b9fdb127a54435 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center stringer" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.centerStringer" +msgstr "Zanca central" + +# Source-Hash: b2b2383577835a61 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Closed risers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.closedRisers" +msgstr "Contrahuellas cerradas" + +# Source-Hash: 6f6b188bff3c0223 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inherit" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.inherit" +msgstr "Heredar" + +# Source-Hash: ce25dc4a23f3ae10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Nosing" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.nosing" +msgstr "Mamperlán" + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.open" +msgstr "Abrir" + +# Source-Hash: 7717e0464ad1e7df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Original" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.original" +msgstr "Original" + +# Source-Hash: 8a6f6c6b0cca7460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.riserThickness" +msgstr "Espesor de la contrahuella" + +# Source-Hash: 2fe058966023b542 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Side stringers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.sideStringers" +msgstr "Zancas laterales" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.solid" +msgstr "Sólido" + +# Source-Hash: 4c1489839e306865 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer depth" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerDepth" +msgstr "Canto de la zanca" + +# Source-Hash: 17e1a09c422d3660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer width" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerWidth" +msgstr "Ancho de la zanca" + +# Source-Hash: 146f8e61ff310dc5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread finish" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadFinish" +msgstr "Acabado de huella" + +# Source-Hash: 9089f91f3fbbf4cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadThickness" +msgstr "Espesor de la huella" + +# Source-Hash: 44dda7136b93c8ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waist" +msgstr "Losa" + +# Source-Hash: dfd6d2ff7a94f22e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waistThickness" +msgstr "Espesor de la losa" + # Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent @@ -18999,6 +19579,126 @@ msgstr "Punto de aparición" msgid "node.stair.description" msgstr "Escalera de uno o varios tramos con huellas, contrahuellas y barandillas configurables." +# Source-Hash: c24b098693e1006d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The flight chain does not reach the declared destination." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.arrivalMismatch" +msgstr "La cadena de tramos no llega al destino declarado." + +# Source-Hash: 124ad1cd6bb00013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Two risers plus going is outside the 0.60–0.65 m design range." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.comfortTarget" +msgstr "Dos contrahuellas más una huella quedan fuera del rango de diseño de 0,60–0,65 m." + +# Source-Hash: 7452fcd8370bef34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Going is below the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.goingTarget" +msgstr "La huella es inferior al objetivo de diseño." + +# Source-Hash: 449683eb727091d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Overhead surfaces leave less than the target headroom." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomTarget" +msgstr "Las superficies superiores dejan menos altura libre que el objetivo." + +# Source-Hash: 9e9357408f6a0d08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detailed headroom could not be evaluated: check riser counts and the surface query budget." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomUnresolved" +msgstr "No se ha podido evaluar la altura libre detallada: revisa el número de contrahuellas y el presupuesto de consultas de superficie." + +# Source-Hash: 40fd019d72ff3835 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight dimensions and integer riser count must be positive." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidFlight" +msgstr "Las dimensiones del tramo y el número entero de contrahuellas deben ser positivos." + +# Source-Hash: 3d4b6f859bd8de50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The destination must be above the stair base." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidRise" +msgstr "El destino debe estar por encima de la base de la escalera." + +# Source-Hash: 5f196b22e2c8296a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Landing depth exceeds a full circle at the walking line; the visible landing is limited to one circle." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.landingOverlap" +msgstr "La profundidad del descansillo supera un círculo completo en la línea de huella; el descansillo visible se limita a un círculo." + +# Source-Hash: 0122ec92b951a114 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The narrow end of a winder tread is below 0.10 m; check the intended stair use." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.narrowWinderEnd" +msgstr "El extremo estrecho de una huella compensada es inferior a 0,10 m; revisa el uso previsto de la escalera." + +# Source-Hash: a664dc7f3b014af8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight riser heights differ. Use uniform-riser repair only if this is a proposed design." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.nonuniformRisers" +msgstr "Las contrahuellas del tramo difieren. Usa la reparación de contrahuellas uniformes solo si es un diseño propuesto." + +# Source-Hash: cd140b519d37b01e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A landing has a stored rise; inspect its transition before repair." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.raisedLanding" +msgstr "Un descansillo tiene una altura guardada; revisa su transición antes de reparar." + +# Source-Hash: a94cfa7b2a21cf14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser height exceeds the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.riserTarget" +msgstr "La contrahuella supera el objetivo de diseño." + # Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent @@ -19726,148 +20426,328 @@ msgstr "Recto" # English: "Style" #: packages/nodes/src/stair/panel.tsx #, fuzzy -msgid "node.stair.panel.style" -msgstr "Estilo" +msgid "node.stair.panel.style" +msgstr "Estilo" + +# Source-Hash: cde3878287069df2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Surface connection" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.surfaceConnection" +msgstr "Conexión a la superficie" + +# Source-Hash: 4e0f8b363503efff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sweep" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.sweep" +msgstr "Barrido" + +# Source-Hash: 4c294d88d712855a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetGoing" +msgstr "Huella objetivo" + +# Source-Hash: 74cfba22cf2e6eb8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target headroom" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetHeadroom" +msgstr "Altura libre objetivo" + +# Source-Hash: 9d05958a265a6726 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target max riser" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMaxRiser" +msgstr "Contrahuella máxima objetivo" + +# Source-Hash: d10322b16178ce37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target minimum going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMinimumGoing" +msgstr "Huella mínima objetivo" + +# Source-Hash: fdbb503f0941bd56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Thickness" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.thickness" +msgstr "Espesor" + +# Source-Hash: b3214a20e45a7aed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "To" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.to" +msgstr "Hasta" + +# Source-Hash: 846fc58043454194 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top Landing" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.topLanding" +msgstr "Descansillo superior" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.type" +msgstr "Tipo" + +# Source-Hash: b4c2f503b19443c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unavailable" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.unavailable" +msgstr "No disponible" + +# Source-Hash: 546fa6dd4e62e82d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walking line offset" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.walkingLineOffset" +msgstr "Desfase de la línea de huella" + +# Source-Hash: 3a0ccd6c46877a87 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Width" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.width" +msgstr "Ancho" + +# Source-Hash: 7b65cc10483fb191 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Winder" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.winder" +msgstr "Compensada" + +# Source-Hash: 69578b7dd7723fa1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Both" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.both" +msgstr "Ambos" + +# Source-Hash: fe633d20f198d7e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bottom sloped extension" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.bottomExtension" +msgstr "Prolongación inclinada inferior" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.continuous" +msgstr "Continuo" + +# Source-Hash: d7148fa065bc709b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.floor" +msgstr "Planta" -# Source-Hash: cde3878287069df2 +# Source-Hash: 644d2d9e9c3dd31f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Surface connection" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail diameter" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.surfaceConnection" -msgstr "Conexión a la superficie" +msgid "node.stair.railingControls.handrailDiameter" +msgstr "Diámetro del pasamanos" -# Source-Hash: 4e0f8b363503efff +# Source-Hash: 5f3f2be1e572a066 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Sweep" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail height" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.sweep" -msgstr "Barrido" +msgid "node.stair.railingControls.handrailHeight" +msgstr "Altura del pasamanos" -# Source-Hash: 4c294d88d712855a +# Source-Hash: cb3239847f068a1b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target going" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail inset" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetGoing" -msgstr "Huella objetivo" +msgid "node.stair.railingControls.handrailInset" +msgstr "Retranqueo del pasamanos" -# Source-Hash: 74cfba22cf2e6eb8 +# Source-Hash: f365c6b6dd9ebab9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target headroom" -#: packages/nodes/src/stair/panel.tsx +# English: "Left" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetHeadroom" -msgstr "Altura libre objetivo" +msgid "node.stair.railingControls.left" +msgstr "Izquierda" -# Source-Hash: 9d05958a265a6726 +# Source-Hash: f2953d2931e36d0c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target max riser" -#: packages/nodes/src/stair/panel.tsx +# English: "None" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMaxRiser" -msgstr "Contrahuella máxima objetivo" +msgid "node.stair.railingControls.none" +msgstr "Ninguno" -# Source-Hash: d10322b16178ce37 +# Source-Hash: e6ac8d7c9639c351 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target minimum going" -#: packages/nodes/src/stair/panel.tsx +# English: "No return" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMinimumGoing" -msgstr "Huella mínima objetivo" +msgid "node.stair.railingControls.noReturn" +msgstr "Sin retorno" -# Source-Hash: fdbb503f0941bd56 +# Source-Hash: 5688b2003002d03a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Thickness" -#: packages/nodes/src/stair/panel.tsx +# English: "Original layout" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.thickness" -msgstr "Espesor" +msgid "node.stair.railingControls.originalLayout" +msgstr "Distribución original" -# Source-Hash: b3214a20e45a7aed +# Source-Hash: d0d904fbd052d7b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "To" -#: packages/nodes/src/stair/panel.tsx +# English: "Post-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.to" -msgstr "Hasta" +msgid "node.stair.railingControls.postFacing" +msgstr "Hacia el poste" -# Source-Hash: 846fc58043454194 +# Source-Hash: fc4d8c6f156b0430 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Top Landing" -#: packages/nodes/src/stair/panel.tsx +# English: "Return length" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.topLanding" -msgstr "Descansillo superior" +msgid "node.stair.railingControls.returnLength" +msgstr "Longitud del retorno" -# Source-Hash: c44f7ab8bbd24858 +# Source-Hash: b34d5ee0f218221d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Type" -#: packages/nodes/src/stair/panel.tsx +# English: "Right" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.type" -msgstr "Tipo" +msgid "node.stair.railingControls.right" +msgstr "Derecha" -# Source-Hash: b4c2f503b19443c6 +# Source-Hash: e1f8354a95b5060a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unavailable" -#: packages/nodes/src/stair/panel.tsx +# English: "Separate handrail" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.unavailable" -msgstr "No disponible" +msgid "node.stair.railingControls.separateHandrail" +msgstr "Pasamanos independiente" -# Source-Hash: 546fa6dd4e62e82d +# Source-Hash: 005f0197ec3bc95a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walking line offset" -#: packages/nodes/src/stair/panel.tsx +# English: "Set the length to reach the wall or post." +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.walkingLineOffset" -msgstr "Desfase de la línea de huella" +msgid "node.stair.railingControls.setTheLengthToReachThe" +msgstr "Ajusta la longitud para llegar al muro o al poste." -# Source-Hash: 3a0ccd6c46877a87 +# Source-Hash: bef713f3ec96f758 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Width" -#: packages/nodes/src/stair/panel.tsx +# English: "Top horizontal extension" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.width" -msgstr "Ancho" +msgid "node.stair.railingControls.topExtension" +msgstr "Prolongación horizontal superior" -# Source-Hash: 7b65cc10483fb191 +# Source-Hash: bdad79929de6b142 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Winder" -#: packages/nodes/src/stair/panel.tsx +# English: "Wall-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.winder" -msgstr "Compensada" +msgid "node.stair.railingControls.wallFacing" +msgstr "Hacia el muro" # Source-Hash: ce0b6361eb77e93c # Review: required @@ -20469,6 +21349,26 @@ msgstr "Informe" msgid "node.unit.unitPanel.unit" msgstr "Unidad" +# Source-Hash: d53242481ff46157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Merge walls" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.mergeWalls" +msgstr "Unir muros" + +# Source-Hash: d7ead4708d50965f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split wall" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.splitWall" +msgstr "Dividir muro" + # Source-Hash: 96a6f084d095ea36 # Review: required # AI-Provider: cursor-agent @@ -21919,6 +22819,56 @@ msgstr "No se sabe qué cara es la exterior (no se detecta ninguna estancia a ni msgid "node.wall.panel.woodStuds" msgstr "Montantes de madera" +# Source-Hash: 5211341ed18f33f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.center" +msgstr "Centro" + +# Source-Hash: 09576259041494f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.inside" +msgstr "Cara interior" + +# Source-Hash: f365c6b6dd9ebab9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.left" +msgstr "Izquierda" + +# Source-Hash: 697001376b872e74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.outside" +msgstr "Cara exterior" + +# Source-Hash: b34d5ee0f218221d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.right" +msgstr "Derecha" + # Source-Hash: eac63d14f275db3d # Review: required # AI-Provider: cursor-agent @@ -22539,6 +23489,216 @@ msgstr "Rodea la esquina con su pareja" msgid "node.window.panel.wrapTheCorner" msgstr "Rodear la esquina" +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.casement" +msgstr "Abatible" + +# Source-Hash: e06fc5a432b74a5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.doubleHung" +msgstr "Guillotina doble" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.grid" +msgstr "Cuadrícula" + +# Source-Hash: fbb293fe8aee84b2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Horizontal bands" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.horizontalBands" +msgstr "Bandas horizontales" + +# Source-Hash: 3ee270463954f502 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Picture" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.picture" +msgstr "Marco" + +# Source-Hash: 62ab2eb3c775da95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.single" +msgstr "Simple" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.sliding" +msgstr "Corredera" + +# Source-Hash: 0c88aea2bd130193 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tall grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tallGrid" +msgstr "Retícula alta" + +# Source-Hash: 9628d0cc155e29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Transom" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.transom" +msgstr "Montante" + +# Source-Hash: 305f3aba543b1962 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Triple-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tripleHung" +msgstr "Guillotina triple" + +# Source-Hash: 8af77effb76bc6e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wide grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.wideGrid" +msgstr "Retícula ancha" + +# Source-Hash: 50393830365aaf2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Awning" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.awning" +msgstr "Proyectante" + +# Source-Hash: 8447ee52258e16e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bay" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bay" +msgstr "Mirador" + +# Source-Hash: e828c89bd0ba1ea4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bow" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bow" +msgstr "Ventana en arco" + +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.casement" +msgstr "Ventana abatible" + +# Source-Hash: b0b737fc5cb1d32a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.doubleHung" +msgstr "Guillotina doble" + +# Source-Hash: 387ce45ca2eb045f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fixed" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.fixed" +msgstr "Fijo" + +# Source-Hash: 04a40f27911c3192 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hopper" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.hopper" +msgstr "Abatible inferior" + +# Source-Hash: 5746be19ba2a53be +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.louvered" +msgstr "De lamas" + +# Source-Hash: de6ffb1cf676f270 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.singleHung" +msgstr "Guillotina simple" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.sliding" +msgstr "Corredera" + # Source-Hash: 4a4d97a4101793b7 # Review: required # AI-Provider: cursor-agent diff --git a/packages/editor/src/i18n/locales/fr/messages.po b/packages/editor/src/i18n/locales/fr/messages.po index f29680baa5..a0457e9cb3 100644 --- a/packages/editor/src/i18n/locales/fr/messages.po +++ b/packages/editor/src/i18n/locales/fr/messages.po @@ -2963,6 +2963,26 @@ msgstr "Pivoter" msgid "editor.cameraHint.zoom" msgstr "Zoom" +# Source-Hash: 34b7ca7ff46c44a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{label}: {finish}" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.ariaLabel" +msgstr "{label} : {finish}" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.default" +msgstr "Par défaut" + # Source-Hash: a2bd204e93e90598 # Review: required # AI-Provider: cursor-agent @@ -10175,6 +10195,26 @@ msgstr "Détacher l’angle : les deux fenêtres restent, chacune avec un cadre msgid "editor.panels.panelManager.selection" msgstr "Sélection" +# Source-Hash: 7ceade8f25b58fe9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.back" +msgstr "Retour" + +# Source-Hash: d7cf5045c01b2eb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.close" +msgstr "Fermer" + # Source-Hash: 2dff25ca30c80559 # Review: required # AI-Provider: cursor-agent @@ -10235,6 +10275,16 @@ msgstr "Gérer les collections…" msgid "editor.panels.panelWrapper.openTitle" msgstr "Ouvrir {title}" +# Source-Hash: bf91b71a9aa76e94 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.reset" +msgstr "Réinitialiser" + # Source-Hash: 04a212d6317f6787 # Review: required # AI-Provider: cursor-agent @@ -11395,6 +11445,16 @@ msgstr "Aucun" msgid "editor.panels.roomPanel.notEnoughHeadroom" msgstr "Échappée insuffisante" +# Source-Hash: 92f7bc961d784f6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{doors, plural, one {# door} other {# doors}} · {windows, plural, one {# window} other {# windows}}" +#: packages/editor/src/components/ui/panels/room-panel.tsx +#, fuzzy +msgid "editor.panels.roomPanel.openingCounts" +msgstr "{doors, plural, one {# porte} many {# portes} other {# portes}} · {windows, plural, one {# fenêtre} many {# fenêtres} other {# fenêtres}}" + # Source-Hash: a8cd9507ce472a48 # Review: required # AI-Provider: cursor-agent @@ -15590,6 +15650,106 @@ msgstr "mur" msgid "node.door.panel.width" msgstr "Largeur" +# Source-Hash: 8421deea35cb5afc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Barn" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.barn" +msgstr "Coulissante de grange" + +# Source-Hash: f747fbe71717772e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Craftsman" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.craftsman" +msgstr "Craftsman" + +# Source-Hash: 092033938ca2debb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "French" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.french" +msgstr "Porte-fenêtre" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.glass" +msgstr "Vitrage" + +# Source-Hash: 6ab8b98b38eb2e65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Half-louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.halfLouvered" +msgstr "Mi-persiennée" + +# Source-Hash: f6cbdaa17e989b91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modern" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.modern" +msgstr "Moderne" + +# Source-Hash: 482469f5a0873f73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.panel" +msgstr "Panneau" + +# Source-Hash: ac42c328610a0edd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paneled glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.paneledGlass" +msgstr "Vitrée à panneaux" + +# Source-Hash: 5b68e435b7210876 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shaker" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.shaker" +msgstr "Shaker" + +# Source-Hash: 9ad6ac42b4152b64 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Six-panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.sixPanel" +msgstr "Six panneaux" + # Source-Hash: 8421deea35cb5afc # Review: required # AI-Provider: cursor-agent @@ -16024,6 +16184,76 @@ msgstr "Géométrie conservée d’un modèle importé lorsqu’aucune forme Pas msgid "node.importedMesh.label" msgstr "Maillage importé" +# Source-Hash: 9cce89f94c673821 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Couldn't rebuild with these values." +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.couldnTRebuildWithTheseValues" +msgstr "Impossible de reconstruire avec ces valeurs." + +# Source-Hash: 373b929318436fe3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.parameters" +msgstr "Paramètres" + +# Source-Hash: 558cb886dbe0babe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuilding" +msgstr "Reconstruction…" + +# Source-Hash: a094c99dc8ad29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding in Blender…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuildingInBlender" +msgstr "Reconstruction dans Blender…" + +# Source-Hash: 1778f93ee143cd95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset {param}" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParam" +msgstr "Réinitialiser {param}" + +# Source-Hash: 5a28cf5f2402dd7a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParameters" +msgstr "Réinitialiser les paramètres" + +# Source-Hash: 6eb8025c60d6d3ca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset to default" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetToDefault" +msgstr "Rétablir la valeur par défaut" + # Source-Hash: 63f79b3c467177b3 # Review: required # AI-Provider: cursor-agent @@ -16517,151 +16747,321 @@ msgstr "Versant avant" msgid "node.roof.glazing.face.slope" msgstr "Versant du monopente" -# Source-Hash: c98a4e6b28f05e0f +# Source-Hash: 3bcc542295b4c61e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Changes apply to all {length} roof segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Alignment" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" -msgstr "Les modifications s’appliquent aux {length} segments de toit." +msgid "node.roof.glazingControls.alignment" +msgstr "Alignement" -# Source-Hash: c5d2ff7fda4787cd +# Source-Hash: 5211341ed18f33f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Choose one roof system to edit settings for all selected segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Center" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" -msgstr "Choisissez un système de toiture pour modifier les réglages de tous les segments sélectionnés." +msgid "node.roof.glazingControls.center" +msgstr "Centre" -# Source-Hash: 80e07a119b63187c +# Source-Hash: 512e47607a37af46 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close the roof ends" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Choose a layout to edit the grid." +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.closeTheRoofEnds" -msgstr "Fermer les extrémités du toit" +msgid "node.roof.glazingControls.chooseALayoutToEditThe" +msgstr "Choisissez une disposition pour modifier la trame." -# Source-Hash: e28dd27d54aaa7ae +# Source-Hash: 65b1cbba3b92c5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default panel infill" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Empty" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.defaultPanelInfill" -msgstr "Remplissage par défaut des panneaux" +msgid "node.roof.glazingControls.empty" +msgstr "Vide" -# Source-Hash: 134d33e2465937e7 +# Source-Hash: 135874d189176d13 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides each roof face into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "End" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" -msgstr "Divise chaque versant en colonnes." +msgid "node.roof.glazingControls.end" +msgstr "Fin" -# Source-Hash: 896a6e4da3357c39 +# Source-Hash: 4fb65101d0b1a222 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides the length of each arch bay into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Fixed spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" -msgstr "Divise la longueur de chaque travée en arc en colonnes." +msgid "node.roof.glazingControls.fixedSpacing" +msgstr "Espacement fixe" -# Source-Hash: be9c810d28d1feb9 +# Source-Hash: 8ab91094cf650204 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Glass" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" -msgstr "Le remplissage d’about comble l’espace au-dessus des murs. Modifiez séparément les murs et plafonds des pièces." +msgid "node.roof.glazingControls.glass" +msgstr "Vitrage" -# Source-Hash: 0b8b27dbc57cca44 +# Source-Hash: 54800340a0eeab23 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame color" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Layout" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameColor" -msgstr "Couleur du cadre" +msgid "node.roof.glazingControls.layout" +msgstr "Disposition" -# Source-Hash: fd413477f1a9e5ed +# Source-Hash: 321ca5101ab61db7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame depth" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Maximum spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameDepth" -msgstr "Profondeur du cadre" +msgid "node.roof.glazingControls.maximumSpacing" +msgstr "Espacement maximal" -# Source-Hash: 3519d91b7bda18a5 +# Source-Hash: d10743fce478d9f4 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame width" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Max spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameWidth" -msgstr "Largeur du cadre" +msgid "node.roof.glazingControls.maxSpacing" +msgstr "Espacement max." -# Source-Hash: c7e72beff9fe4b37 +# Source-Hash: 37d9f63758abdb67 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Framing" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Mixed" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.framing" -msgstr "Ossature" +msgid "node.roof.glazingControls.mixed" +msgstr "Mixte" -# Source-Hash: 8ab91094cf650204 +# Source-Hash: b91302bf741c9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panel count" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glass" -msgstr "Vitrage" +msgid "node.roof.glazingControls.panelCount" +msgstr "Nombre de panneaux" -# Source-Hash: 9c38875c310547ae +# Source-Hash: 6ce059aee1386f72 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass tint" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panels" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glassTint" -msgstr "Teinte du vitrage" +msgid "node.roof.glazingControls.panels" +msgstr "Panneaux" -# Source-Hash: dd330a94b3f7a65a +# Source-Hash: ef3e765e692faf4c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazed" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Solid" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glazed" -msgstr "Vitré" +msgid "node.roof.glazingControls.solid" +msgstr "Plein" -# Source-Hash: e6be52df9197243a +# Source-Hash: e4698e83d02beb6c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazing is available for gable, straight shed, and barrel roofs." +# English: "Spacing" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.spacing" +msgstr "Espacement" + +# Source-Hash: 0a26a1e61c825660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.start" +msgstr "Début" + +# Source-Hash: 095237e9e2df4d9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{title} alignment" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.titleAlignment" +msgstr "Alignement {title}" + +# Source-Hash: c98a4e6b28f05e0f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Changes apply to all {length} roof segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" +msgstr "Les modifications s’appliquent aux {length} segments de toit." + +# Source-Hash: c5d2ff7fda4787cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Choose one roof system to edit settings for all selected segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" +msgstr "Choisissez un système de toiture pour modifier les réglages de tous les segments sélectionnés." + +# Source-Hash: 80e07a119b63187c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close the roof ends" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.closeTheRoofEnds" +msgstr "Fermer les extrémités du toit" + +# Source-Hash: e28dd27d54aaa7ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default panel infill" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.defaultPanelInfill" +msgstr "Remplissage par défaut des panneaux" + +# Source-Hash: 134d33e2465937e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides each roof face into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" +msgstr "Divise chaque versant en colonnes." + +# Source-Hash: 896a6e4da3357c39 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides the length of each arch bay into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" +msgstr "Divise la longueur de chaque travée en arc en colonnes." + +# Source-Hash: be9c810d28d1feb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" +msgstr "Le remplissage d’about comble l’espace au-dessus des murs. Modifiez séparément les murs et plafonds des pièces." + +# Source-Hash: 0b8b27dbc57cca44 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame color" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameColor" +msgstr "Couleur du cadre" + +# Source-Hash: fd413477f1a9e5ed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame depth" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameDepth" +msgstr "Profondeur du cadre" + +# Source-Hash: 3519d91b7bda18a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame width" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameWidth" +msgstr "Largeur du cadre" + +# Source-Hash: c7e72beff9fe4b37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Framing" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.framing" +msgstr "Ossature" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glass" +msgstr "Vitrage" + +# Source-Hash: 9c38875c310547ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass tint" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glassTint" +msgstr "Teinte du vitrage" + +# Source-Hash: dd330a94b3f7a65a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazed" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glazed" +msgstr "Vitré" + +# Source-Hash: e6be52df9197243a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazing is available for gable, straight shed, and barrel roofs." #: packages/nodes/src/roof/glazing-panel.tsx #, fuzzy msgid "node.roof.glazingPanel.glazingIsAvailableForGableStraight" @@ -17879,6 +18279,26 @@ msgstr "Segment {number}" msgid "node.separator.label" msgstr "Séparateur" +# Source-Hash: e7512c891d8da7d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light off" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOff" +msgstr "Éteindre la lumière" + +# Source-Hash: d47ec95e14909fe5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light on" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOn" +msgstr "Allumer la lumière" + # Source-Hash: b2d703d283baf64a # Review: required # AI-Provider: cursor-agent @@ -18989,6 +19409,166 @@ msgstr "Origine du joueur ou de la caméra dans un niveau. Une par niveau." msgid "node.spawn.label" msgstr "Point d’apparition" +# Source-Hash: faaa4f6b40001667 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Body" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.body" +msgstr "Corps" + +# Source-Hash: 29b9fdb127a54435 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center stringer" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.centerStringer" +msgstr "Limon central" + +# Source-Hash: b2b2383577835a61 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Closed risers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.closedRisers" +msgstr "Contremarches fermées" + +# Source-Hash: 6f6b188bff3c0223 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inherit" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.inherit" +msgstr "Hériter" + +# Source-Hash: ce25dc4a23f3ae10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Nosing" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.nosing" +msgstr "Nez de marche" + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.open" +msgstr "Ouvrir" + +# Source-Hash: 7717e0464ad1e7df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Original" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.original" +msgstr "Original" + +# Source-Hash: 8a6f6c6b0cca7460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.riserThickness" +msgstr "Épaisseur de contremarche" + +# Source-Hash: 2fe058966023b542 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Side stringers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.sideStringers" +msgstr "Limons latéraux" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.solid" +msgstr "Plein" + +# Source-Hash: 4c1489839e306865 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer depth" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerDepth" +msgstr "Hauteur du limon" + +# Source-Hash: 17e1a09c422d3660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer width" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerWidth" +msgstr "Largeur du limon" + +# Source-Hash: 146f8e61ff310dc5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread finish" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadFinish" +msgstr "Finition des marches" + +# Source-Hash: 9089f91f3fbbf4cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadThickness" +msgstr "Épaisseur des marches" + +# Source-Hash: 44dda7136b93c8ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waist" +msgstr "Paillasse" + +# Source-Hash: dfd6d2ff7a94f22e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waistThickness" +msgstr "Épaisseur de paillasse" + # Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent @@ -18999,6 +19579,126 @@ msgstr "Point d’apparition" msgid "node.stair.description" msgstr "Escalier composé d’une ou plusieurs volées, avec marches, contremarches et garde-corps configurables." +# Source-Hash: c24b098693e1006d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The flight chain does not reach the declared destination." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.arrivalMismatch" +msgstr "La suite de volées n’atteint pas la destination déclarée." + +# Source-Hash: 124ad1cd6bb00013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Two risers plus going is outside the 0.60–0.65 m design range." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.comfortTarget" +msgstr "Deux hauteurs plus un giron sortent de la plage de conception 0,60–0,65 m." + +# Source-Hash: 7452fcd8370bef34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Going is below the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.goingTarget" +msgstr "Le giron est inférieur à l’objectif de conception." + +# Source-Hash: 449683eb727091d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Overhead surfaces leave less than the target headroom." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomTarget" +msgstr "Les surfaces au-dessus laissent moins que l’échappée cible." + +# Source-Hash: 9e9357408f6a0d08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detailed headroom could not be evaluated: check riser counts and the surface query budget." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomUnresolved" +msgstr "L’échappée détaillée n’a pas pu être évaluée : vérifiez le nombre de contremarches et le budget de requêtes de surface." + +# Source-Hash: 40fd019d72ff3835 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight dimensions and integer riser count must be positive." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidFlight" +msgstr "Les dimensions de volée et le nombre entier de contremarches doivent être positifs." + +# Source-Hash: 3d4b6f859bd8de50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The destination must be above the stair base." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidRise" +msgstr "La destination doit être au-dessus de la base de l’escalier." + +# Source-Hash: 5f196b22e2c8296a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Landing depth exceeds a full circle at the walking line; the visible landing is limited to one circle." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.landingOverlap" +msgstr "La profondeur du palier dépasse un cercle complet sur la ligne de foulée ; le palier visible est limité à un cercle." + +# Source-Hash: 0122ec92b951a114 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The narrow end of a winder tread is below 0.10 m; check the intended stair use." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.narrowWinderEnd" +msgstr "L’extrémité étroite d’une marche balancée est inférieure à 0,10 m ; vérifiez l’usage prévu de l’escalier." + +# Source-Hash: a664dc7f3b014af8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight riser heights differ. Use uniform-riser repair only if this is a proposed design." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.nonuniformRisers" +msgstr "Les hauteurs de contremarche de la volée diffèrent. N’utilisez la correction de contremarches régulières que pour un projet." + +# Source-Hash: cd140b519d37b01e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A landing has a stored rise; inspect its transition before repair." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.raisedLanding" +msgstr "Un palier a une hauteur enregistrée ; vérifiez sa transition avant de corriger." + +# Source-Hash: a94cfa7b2a21cf14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser height exceeds the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.riserTarget" +msgstr "La hauteur de contremarche dépasse l’objectif de conception." + # Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent @@ -19726,148 +20426,328 @@ msgstr "Droit" # English: "Style" #: packages/nodes/src/stair/panel.tsx #, fuzzy -msgid "node.stair.panel.style" -msgstr "Style" +msgid "node.stair.panel.style" +msgstr "Style" + +# Source-Hash: cde3878287069df2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Surface connection" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.surfaceConnection" +msgstr "Raccordement à la surface" + +# Source-Hash: 4e0f8b363503efff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sweep" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.sweep" +msgstr "Balayage" + +# Source-Hash: 4c294d88d712855a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetGoing" +msgstr "Giron cible" + +# Source-Hash: 74cfba22cf2e6eb8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target headroom" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetHeadroom" +msgstr "Échappée cible" + +# Source-Hash: 9d05958a265a6726 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target max riser" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMaxRiser" +msgstr "Hauteur de marche max. cible" + +# Source-Hash: d10322b16178ce37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target minimum going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMinimumGoing" +msgstr "Giron minimal cible" + +# Source-Hash: fdbb503f0941bd56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Thickness" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.thickness" +msgstr "Épaisseur" + +# Source-Hash: b3214a20e45a7aed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "To" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.to" +msgstr "Vers" + +# Source-Hash: 846fc58043454194 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top Landing" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.topLanding" +msgstr "Palier d’arrivée" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.type" +msgstr "Type" + +# Source-Hash: b4c2f503b19443c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unavailable" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.unavailable" +msgstr "Indisponible" + +# Source-Hash: 546fa6dd4e62e82d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walking line offset" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.walkingLineOffset" +msgstr "Décalage de la ligne de foulée" + +# Source-Hash: 3a0ccd6c46877a87 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Width" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.width" +msgstr "Largeur" + +# Source-Hash: 7b65cc10483fb191 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Winder" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.winder" +msgstr "Balancement" + +# Source-Hash: 69578b7dd7723fa1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Both" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.both" +msgstr "Les deux" + +# Source-Hash: fe633d20f198d7e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bottom sloped extension" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.bottomExtension" +msgstr "Prolongement incliné en bas" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.continuous" +msgstr "Continu" + +# Source-Hash: d7148fa065bc709b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.floor" +msgstr "Niveau" -# Source-Hash: cde3878287069df2 +# Source-Hash: 644d2d9e9c3dd31f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Surface connection" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail diameter" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.surfaceConnection" -msgstr "Raccordement à la surface" +msgid "node.stair.railingControls.handrailDiameter" +msgstr "Diamètre de la main courante" -# Source-Hash: 4e0f8b363503efff +# Source-Hash: 5f3f2be1e572a066 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Sweep" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail height" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.sweep" -msgstr "Balayage" +msgid "node.stair.railingControls.handrailHeight" +msgstr "Hauteur de la main courante" -# Source-Hash: 4c294d88d712855a +# Source-Hash: cb3239847f068a1b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target going" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail inset" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetGoing" -msgstr "Giron cible" +msgid "node.stair.railingControls.handrailInset" +msgstr "Retrait de la main courante" -# Source-Hash: 74cfba22cf2e6eb8 +# Source-Hash: f365c6b6dd9ebab9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target headroom" -#: packages/nodes/src/stair/panel.tsx +# English: "Left" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetHeadroom" -msgstr "Échappée cible" +msgid "node.stair.railingControls.left" +msgstr "Gauche" -# Source-Hash: 9d05958a265a6726 +# Source-Hash: f2953d2931e36d0c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target max riser" -#: packages/nodes/src/stair/panel.tsx +# English: "None" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMaxRiser" -msgstr "Hauteur de marche max. cible" +msgid "node.stair.railingControls.none" +msgstr "Aucun" -# Source-Hash: d10322b16178ce37 +# Source-Hash: e6ac8d7c9639c351 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target minimum going" -#: packages/nodes/src/stair/panel.tsx +# English: "No return" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMinimumGoing" -msgstr "Giron minimal cible" +msgid "node.stair.railingControls.noReturn" +msgstr "Sans retour" -# Source-Hash: fdbb503f0941bd56 +# Source-Hash: 5688b2003002d03a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Thickness" -#: packages/nodes/src/stair/panel.tsx +# English: "Original layout" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.thickness" -msgstr "Épaisseur" +msgid "node.stair.railingControls.originalLayout" +msgstr "Disposition d’origine" -# Source-Hash: b3214a20e45a7aed +# Source-Hash: d0d904fbd052d7b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "To" -#: packages/nodes/src/stair/panel.tsx +# English: "Post-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.to" -msgstr "Vers" +msgid "node.stair.railingControls.postFacing" +msgstr "Vers le poteau" -# Source-Hash: 846fc58043454194 +# Source-Hash: fc4d8c6f156b0430 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Top Landing" -#: packages/nodes/src/stair/panel.tsx +# English: "Return length" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.topLanding" -msgstr "Palier d’arrivée" +msgid "node.stair.railingControls.returnLength" +msgstr "Longueur du retour" -# Source-Hash: c44f7ab8bbd24858 +# Source-Hash: b34d5ee0f218221d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Type" -#: packages/nodes/src/stair/panel.tsx +# English: "Right" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.type" -msgstr "Type" +msgid "node.stair.railingControls.right" +msgstr "Droite" -# Source-Hash: b4c2f503b19443c6 +# Source-Hash: e1f8354a95b5060a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unavailable" -#: packages/nodes/src/stair/panel.tsx +# English: "Separate handrail" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.unavailable" -msgstr "Indisponible" +msgid "node.stair.railingControls.separateHandrail" +msgstr "Main courante séparée" -# Source-Hash: 546fa6dd4e62e82d +# Source-Hash: 005f0197ec3bc95a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walking line offset" -#: packages/nodes/src/stair/panel.tsx +# English: "Set the length to reach the wall or post." +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.walkingLineOffset" -msgstr "Décalage de la ligne de foulée" +msgid "node.stair.railingControls.setTheLengthToReachThe" +msgstr "Réglez la longueur pour atteindre le mur ou le poteau." -# Source-Hash: 3a0ccd6c46877a87 +# Source-Hash: bef713f3ec96f758 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Width" -#: packages/nodes/src/stair/panel.tsx +# English: "Top horizontal extension" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.width" -msgstr "Largeur" +msgid "node.stair.railingControls.topExtension" +msgstr "Prolongement horizontal en haut" -# Source-Hash: 7b65cc10483fb191 +# Source-Hash: bdad79929de6b142 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Winder" -#: packages/nodes/src/stair/panel.tsx +# English: "Wall-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.winder" -msgstr "Balancement" +msgid "node.stair.railingControls.wallFacing" +msgstr "Vers le mur" # Source-Hash: ce0b6361eb77e93c # Review: required @@ -20469,6 +21349,26 @@ msgstr "Rapport" msgid "node.unit.unitPanel.unit" msgstr "Lot" +# Source-Hash: d53242481ff46157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Merge walls" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.mergeWalls" +msgstr "Fusionner les murs" + +# Source-Hash: d7ead4708d50965f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split wall" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.splitWall" +msgstr "Scinder le mur" + # Source-Hash: 96a6f084d095ea36 # Review: required # AI-Provider: cursor-agent @@ -21919,6 +22819,56 @@ msgstr "Impossible de savoir quelle face est extérieure (aucune pièce détect msgid "node.wall.panel.woodStuds" msgstr "Montants bois" +# Source-Hash: 5211341ed18f33f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.center" +msgstr "Centre" + +# Source-Hash: 09576259041494f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.inside" +msgstr "Face intérieure" + +# Source-Hash: f365c6b6dd9ebab9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.left" +msgstr "Gauche" + +# Source-Hash: 697001376b872e74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.outside" +msgstr "Face extérieure" + +# Source-Hash: b34d5ee0f218221d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.right" +msgstr "Droite" + # Source-Hash: eac63d14f275db3d # Review: required # AI-Provider: cursor-agent @@ -22539,6 +23489,216 @@ msgstr "Fait l’angle avec sa jumelle" msgid "node.window.panel.wrapTheCorner" msgstr "Faire l’angle" +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.casement" +msgstr "Battant" + +# Source-Hash: e06fc5a432b74a5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.doubleHung" +msgstr "Double guillotine" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.grid" +msgstr "Grille" + +# Source-Hash: fbb293fe8aee84b2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Horizontal bands" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.horizontalBands" +msgstr "Bandes horizontales" + +# Source-Hash: 3ee270463954f502 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Picture" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.picture" +msgstr "Cadre" + +# Source-Hash: 62ab2eb3c775da95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.single" +msgstr "Simple" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.sliding" +msgstr "Coulissante" + +# Source-Hash: 0c88aea2bd130193 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tall grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tallGrid" +msgstr "Grille haute" + +# Source-Hash: 9628d0cc155e29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Transom" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.transom" +msgstr "Imposte" + +# Source-Hash: 305f3aba543b1962 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Triple-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tripleHung" +msgstr "Triple guillotine" + +# Source-Hash: 8af77effb76bc6e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wide grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.wideGrid" +msgstr "Grille large" + +# Source-Hash: 50393830365aaf2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Awning" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.awning" +msgstr "À l’italienne" + +# Source-Hash: 8447ee52258e16e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bay" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bay" +msgstr "Fenêtre en baie" + +# Source-Hash: e828c89bd0ba1ea4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bow" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bow" +msgstr "Fenêtre en arc" + +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.casement" +msgstr "Fenêtre battante" + +# Source-Hash: b0b737fc5cb1d32a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.doubleHung" +msgstr "Guillotine double" + +# Source-Hash: 387ce45ca2eb045f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fixed" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.fixed" +msgstr "Fixe" + +# Source-Hash: 04a40f27911c3192 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hopper" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.hopper" +msgstr "Soufflet" + +# Source-Hash: 5746be19ba2a53be +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.louvered" +msgstr "À lames" + +# Source-Hash: de6ffb1cf676f270 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.singleHung" +msgstr "Guillotine simple" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.sliding" +msgstr "Coulissante" + # Source-Hash: 4a4d97a4101793b7 # Review: required # AI-Provider: cursor-agent diff --git a/packages/editor/src/i18n/locales/ja/messages.po b/packages/editor/src/i18n/locales/ja/messages.po index c34df5751c..dcdf3fc20f 100644 --- a/packages/editor/src/i18n/locales/ja/messages.po +++ b/packages/editor/src/i18n/locales/ja/messages.po @@ -2963,6 +2963,26 @@ msgstr "回転" msgid "editor.cameraHint.zoom" msgstr "ズーム" +# Source-Hash: 34b7ca7ff46c44a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{label}: {finish}" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.ariaLabel" +msgstr "{label}:{finish}" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.default" +msgstr "標準" + # Source-Hash: a2bd204e93e90598 # Review: required # AI-Provider: cursor-agent @@ -10175,6 +10195,26 @@ msgstr "コーナーを解除:両方の窓は残り、それぞれコーナー msgid "editor.panels.panelManager.selection" msgstr "選択" +# Source-Hash: 7ceade8f25b58fe9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.back" +msgstr "戻る" + +# Source-Hash: d7cf5045c01b2eb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.close" +msgstr "閉じる" + # Source-Hash: 2dff25ca30c80559 # Review: required # AI-Provider: cursor-agent @@ -10235,6 +10275,16 @@ msgstr "コレクションを管理…" msgid "editor.panels.panelWrapper.openTitle" msgstr "{title}を開く" +# Source-Hash: bf91b71a9aa76e94 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.reset" +msgstr "リセット" + # Source-Hash: 04a212d6317f6787 # Review: required # AI-Provider: cursor-agent @@ -11395,6 +11445,16 @@ msgstr "なし" msgid "editor.panels.roomPanel.notEnoughHeadroom" msgstr "頭上空間が不足" +# Source-Hash: 92f7bc961d784f6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{doors, plural, one {# door} other {# doors}} · {windows, plural, one {# window} other {# windows}}" +#: packages/editor/src/components/ui/panels/room-panel.tsx +#, fuzzy +msgid "editor.panels.roomPanel.openingCounts" +msgstr "{doors, plural, other {ドア # 枚}} · {windows, plural, other {窓 # 枚}}" + # Source-Hash: a8cd9507ce472a48 # Review: required # AI-Provider: cursor-agent @@ -15590,6 +15650,106 @@ msgstr "壁" msgid "node.door.panel.width" msgstr "幅" +# Source-Hash: 8421deea35cb5afc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Barn" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.barn" +msgstr "納屋ドア" + +# Source-Hash: f747fbe71717772e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Craftsman" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.craftsman" +msgstr "クラフツマン" + +# Source-Hash: 092033938ca2debb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "French" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.french" +msgstr "フレンチドア" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.glass" +msgstr "ガラス" + +# Source-Hash: 6ab8b98b38eb2e65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Half-louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.halfLouvered" +msgstr "半ルーバー" + +# Source-Hash: f6cbdaa17e989b91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modern" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.modern" +msgstr "モダン" + +# Source-Hash: 482469f5a0873f73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.panel" +msgstr "パネル" + +# Source-Hash: ac42c328610a0edd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paneled glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.paneledGlass" +msgstr "パネルガラス" + +# Source-Hash: 5b68e435b7210876 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shaker" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.shaker" +msgstr "シェーカー" + +# Source-Hash: 9ad6ac42b4152b64 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Six-panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.sixPanel" +msgstr "6枚パネル" + # Source-Hash: 8421deea35cb5afc # Review: required # AI-Provider: cursor-agent @@ -16024,6 +16184,76 @@ msgstr "Pascal のネイティブ形状がない場合に、インポートし msgid "node.importedMesh.label" msgstr "インポートメッシュ" +# Source-Hash: 9cce89f94c673821 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Couldn't rebuild with these values." +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.couldnTRebuildWithTheseValues" +msgstr "この値では再構築できませんでした。" + +# Source-Hash: 373b929318436fe3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.parameters" +msgstr "パラメーター" + +# Source-Hash: 558cb886dbe0babe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuilding" +msgstr "再構築中…" + +# Source-Hash: a094c99dc8ad29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding in Blender…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuildingInBlender" +msgstr "Blender で再構築中…" + +# Source-Hash: 1778f93ee143cd95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset {param}" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParam" +msgstr "{param}をリセット" + +# Source-Hash: 5a28cf5f2402dd7a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParameters" +msgstr "パラメーターをリセット" + +# Source-Hash: 6eb8025c60d6d3ca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset to default" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetToDefault" +msgstr "既定に戻す" + # Source-Hash: 63f79b3c467177b3 # Review: required # AI-Provider: cursor-agent @@ -16517,151 +16747,321 @@ msgstr "前面の勾配" msgid "node.roof.glazing.face.slope" msgstr "片流れの勾配" -# Source-Hash: c98a4e6b28f05e0f +# Source-Hash: 3bcc542295b4c61e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Changes apply to all {length} roof segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Alignment" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" -msgstr "変更は {length} 個すべての屋根セグメントに適用されます。" +msgid "node.roof.glazingControls.alignment" +msgstr "揃え" -# Source-Hash: c5d2ff7fda4787cd +# Source-Hash: 5211341ed18f33f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Choose one roof system to edit settings for all selected segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Center" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" -msgstr "屋根システムを1つ選ぶと、選択したすべてのセグメントの設定を編集できます。" +msgid "node.roof.glazingControls.center" +msgstr "中央" -# Source-Hash: 80e07a119b63187c +# Source-Hash: 512e47607a37af46 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close the roof ends" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Choose a layout to edit the grid." +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.closeTheRoofEnds" -msgstr "屋根の端を閉じる" +msgid "node.roof.glazingControls.chooseALayoutToEditThe" +msgstr "レイアウトを選んでグリッドを編集します。" -# Source-Hash: e28dd27d54aaa7ae +# Source-Hash: 65b1cbba3b92c5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default panel infill" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Empty" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.defaultPanelInfill" -msgstr "パネルの既定の充填" +msgid "node.roof.glazingControls.empty" +msgstr "空" -# Source-Hash: 134d33e2465937e7 +# Source-Hash: 135874d189176d13 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides each roof face into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "End" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" -msgstr "各屋根面を列に分割します。" +msgid "node.roof.glazingControls.end" +msgstr "終点" -# Source-Hash: 896a6e4da3357c39 +# Source-Hash: 4fb65101d0b1a222 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides the length of each arch bay into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Fixed spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" -msgstr "各アーチベイの長さを列に分割します。" +msgid "node.roof.glazingControls.fixedSpacing" +msgstr "固定間隔" -# Source-Hash: be9c810d28d1feb9 +# Source-Hash: 8ab91094cf650204 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Glass" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" -msgstr "端部の充填は壁の上の空間を埋めます。部屋の壁と天井は別々に編集してください。" +msgid "node.roof.glazingControls.glass" +msgstr "ガラス" -# Source-Hash: 0b8b27dbc57cca44 +# Source-Hash: 54800340a0eeab23 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame color" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Layout" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameColor" -msgstr "枠の色" +msgid "node.roof.glazingControls.layout" +msgstr "レイアウト" -# Source-Hash: fd413477f1a9e5ed +# Source-Hash: 321ca5101ab61db7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame depth" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Maximum spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameDepth" -msgstr "枠の奥行き" +msgid "node.roof.glazingControls.maximumSpacing" +msgstr "最大間隔" -# Source-Hash: 3519d91b7bda18a5 +# Source-Hash: d10743fce478d9f4 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame width" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Max spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameWidth" -msgstr "枠の幅" +msgid "node.roof.glazingControls.maxSpacing" +msgstr "最大間隔" -# Source-Hash: c7e72beff9fe4b37 +# Source-Hash: 37d9f63758abdb67 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Framing" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Mixed" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.framing" -msgstr "下地" +msgid "node.roof.glazingControls.mixed" +msgstr "混在" -# Source-Hash: 8ab91094cf650204 +# Source-Hash: b91302bf741c9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panel count" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glass" -msgstr "ガラス" +msgid "node.roof.glazingControls.panelCount" +msgstr "パネル数" -# Source-Hash: 9c38875c310547ae +# Source-Hash: 6ce059aee1386f72 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass tint" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panels" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glassTint" -msgstr "ガラスの色合い" +msgid "node.roof.glazingControls.panels" +msgstr "パネル" -# Source-Hash: dd330a94b3f7a65a +# Source-Hash: ef3e765e692faf4c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazed" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Solid" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glazed" -msgstr "ガラス張り" +msgid "node.roof.glazingControls.solid" +msgstr "ソリッド" -# Source-Hash: e6be52df9197243a +# Source-Hash: e4698e83d02beb6c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazing is available for gable, straight shed, and barrel roofs." +# English: "Spacing" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.spacing" +msgstr "間隔" + +# Source-Hash: 0a26a1e61c825660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.start" +msgstr "始点" + +# Source-Hash: 095237e9e2df4d9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{title} alignment" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.titleAlignment" +msgstr "{title}の揃え" + +# Source-Hash: c98a4e6b28f05e0f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Changes apply to all {length} roof segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" +msgstr "変更は {length} 個すべての屋根セグメントに適用されます。" + +# Source-Hash: c5d2ff7fda4787cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Choose one roof system to edit settings for all selected segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" +msgstr "屋根システムを1つ選ぶと、選択したすべてのセグメントの設定を編集できます。" + +# Source-Hash: 80e07a119b63187c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close the roof ends" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.closeTheRoofEnds" +msgstr "屋根の端を閉じる" + +# Source-Hash: e28dd27d54aaa7ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default panel infill" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.defaultPanelInfill" +msgstr "パネルの既定の充填" + +# Source-Hash: 134d33e2465937e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides each roof face into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" +msgstr "各屋根面を列に分割します。" + +# Source-Hash: 896a6e4da3357c39 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides the length of each arch bay into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" +msgstr "各アーチベイの長さを列に分割します。" + +# Source-Hash: be9c810d28d1feb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" +msgstr "端部の充填は壁の上の空間を埋めます。部屋の壁と天井は別々に編集してください。" + +# Source-Hash: 0b8b27dbc57cca44 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame color" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameColor" +msgstr "枠の色" + +# Source-Hash: fd413477f1a9e5ed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame depth" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameDepth" +msgstr "枠の奥行き" + +# Source-Hash: 3519d91b7bda18a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame width" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameWidth" +msgstr "枠の幅" + +# Source-Hash: c7e72beff9fe4b37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Framing" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.framing" +msgstr "下地" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glass" +msgstr "ガラス" + +# Source-Hash: 9c38875c310547ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass tint" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glassTint" +msgstr "ガラスの色合い" + +# Source-Hash: dd330a94b3f7a65a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazed" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glazed" +msgstr "ガラス張り" + +# Source-Hash: e6be52df9197243a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazing is available for gable, straight shed, and barrel roofs." #: packages/nodes/src/roof/glazing-panel.tsx #, fuzzy msgid "node.roof.glazingPanel.glazingIsAvailableForGableStraight" @@ -17879,6 +18279,26 @@ msgstr "セグメント {number}" msgid "node.separator.label" msgstr "区切り" +# Source-Hash: e7512c891d8da7d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light off" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOff" +msgstr "照明を消す" + +# Source-Hash: d47ec95e14909fe5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light on" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOn" +msgstr "照明をつける" + # Source-Hash: b2d703d283baf64a # Review: required # AI-Provider: cursor-agent @@ -18989,6 +19409,166 @@ msgstr "階層内のプレイヤーまたはカメラの起点。階層ごとに msgid "node.spawn.label" msgstr "スポーン地点" +# Source-Hash: faaa4f6b40001667 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Body" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.body" +msgstr "本体" + +# Source-Hash: 29b9fdb127a54435 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center stringer" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.centerStringer" +msgstr "中央の桁" + +# Source-Hash: b2b2383577835a61 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Closed risers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.closedRisers" +msgstr "蹴込み板あり" + +# Source-Hash: 6f6b188bff3c0223 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inherit" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.inherit" +msgstr "継承" + +# Source-Hash: ce25dc4a23f3ae10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Nosing" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.nosing" +msgstr "段鼻" + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.open" +msgstr "開く" + +# Source-Hash: 7717e0464ad1e7df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Original" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.original" +msgstr "元のまま" + +# Source-Hash: 8a6f6c6b0cca7460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.riserThickness" +msgstr "蹴込み板の厚さ" + +# Source-Hash: 2fe058966023b542 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Side stringers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.sideStringers" +msgstr "側桁" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.solid" +msgstr "ソリッド" + +# Source-Hash: 4c1489839e306865 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer depth" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerDepth" +msgstr "桁の高さ" + +# Source-Hash: 17e1a09c422d3660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer width" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerWidth" +msgstr "桁の幅" + +# Source-Hash: 146f8e61ff310dc5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread finish" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadFinish" +msgstr "踏板の仕上げ" + +# Source-Hash: 9089f91f3fbbf4cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadThickness" +msgstr "踏板の厚さ" + +# Source-Hash: 44dda7136b93c8ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waist" +msgstr "スラブ式" + +# Source-Hash: dfd6d2ff7a94f22e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waistThickness" +msgstr "段板の厚さ" + # Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent @@ -18999,6 +19579,126 @@ msgstr "スポーン地点" msgid "node.stair.description" msgstr "1つ以上の段部分で構成され、踏板・蹴込み・手すりを設定できる階段。" +# Source-Hash: c24b098693e1006d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The flight chain does not reach the declared destination." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.arrivalMismatch" +msgstr "階段の連なりが指定の接続先に届いていません。" + +# Source-Hash: 124ad1cd6bb00013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Two risers plus going is outside the 0.60–0.65 m design range." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.comfortTarget" +msgstr "蹴上げ2つと踏面の合計が設計範囲 0.60–0.65 m を外れています。" + +# Source-Hash: 7452fcd8370bef34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Going is below the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.goingTarget" +msgstr "踏面が設計目標を下回っています。" + +# Source-Hash: 449683eb727091d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Overhead surfaces leave less than the target headroom." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomTarget" +msgstr "上部の面による頭上空間が目標を下回っています。" + +# Source-Hash: 9e9357408f6a0d08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detailed headroom could not be evaluated: check riser counts and the surface query budget." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomUnresolved" +msgstr "詳細な頭上空間を評価できませんでした。段数と面クエリの上限を確認してください。" + +# Source-Hash: 40fd019d72ff3835 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight dimensions and integer riser count must be positive." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidFlight" +msgstr "階段の寸法と整数の段数は正の値である必要があります。" + +# Source-Hash: 3d4b6f859bd8de50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The destination must be above the stair base." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidRise" +msgstr "接続先は階段の基部より上である必要があります。" + +# Source-Hash: 5f196b22e2c8296a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Landing depth exceeds a full circle at the walking line; the visible landing is limited to one circle." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.landingOverlap" +msgstr "踊り場の奥行きが歩行線上で一周を超えています。表示される踊り場は一周に制限されます。" + +# Source-Hash: 0122ec92b951a114 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The narrow end of a winder tread is below 0.10 m; check the intended stair use." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.narrowWinderEnd" +msgstr "回り段の狭い側が 0.10 m 未満です。階段の用途を確認してください。" + +# Source-Hash: a664dc7f3b014af8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight riser heights differ. Use uniform-riser repair only if this is a proposed design." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.nonuniformRisers" +msgstr "階段の蹴上げがそろっていません。均一化の修正は計画中の設計の場合にのみ使ってください。" + +# Source-Hash: cd140b519d37b01e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A landing has a stored rise; inspect its transition before repair." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.raisedLanding" +msgstr "踊り場に高さが保存されています。修正前に接続部を確認してください。" + +# Source-Hash: a94cfa7b2a21cf14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser height exceeds the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.riserTarget" +msgstr "蹴上げが設計目標を超えています。" + # Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent @@ -19726,148 +20426,328 @@ msgstr "直進" # English: "Style" #: packages/nodes/src/stair/panel.tsx #, fuzzy -msgid "node.stair.panel.style" -msgstr "スタイル" +msgid "node.stair.panel.style" +msgstr "スタイル" + +# Source-Hash: cde3878287069df2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Surface connection" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.surfaceConnection" +msgstr "面との接続" + +# Source-Hash: 4e0f8b363503efff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sweep" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.sweep" +msgstr "スイープ" + +# Source-Hash: 4c294d88d712855a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetGoing" +msgstr "目標の踏面" + +# Source-Hash: 74cfba22cf2e6eb8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target headroom" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetHeadroom" +msgstr "目標の頭上空間" + +# Source-Hash: 9d05958a265a6726 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target max riser" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMaxRiser" +msgstr "目標の最大蹴上げ" + +# Source-Hash: d10322b16178ce37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target minimum going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMinimumGoing" +msgstr "目標の最小踏面" + +# Source-Hash: fdbb503f0941bd56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Thickness" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.thickness" +msgstr "厚さ" + +# Source-Hash: b3214a20e45a7aed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "To" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.to" +msgstr "終点" + +# Source-Hash: 846fc58043454194 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top Landing" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.topLanding" +msgstr "上部の踊り場" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.type" +msgstr "種類" + +# Source-Hash: b4c2f503b19443c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unavailable" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.unavailable" +msgstr "利用不可" + +# Source-Hash: 546fa6dd4e62e82d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walking line offset" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.walkingLineOffset" +msgstr "歩行線のオフセット" + +# Source-Hash: 3a0ccd6c46877a87 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Width" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.width" +msgstr "幅" + +# Source-Hash: 7b65cc10483fb191 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Winder" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.winder" +msgstr "回り段" + +# Source-Hash: 69578b7dd7723fa1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Both" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.both" +msgstr "両方" + +# Source-Hash: fe633d20f198d7e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bottom sloped extension" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.bottomExtension" +msgstr "下部の傾斜延長" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.continuous" +msgstr "連続" + +# Source-Hash: d7148fa065bc709b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.floor" +msgstr "階" -# Source-Hash: cde3878287069df2 +# Source-Hash: 644d2d9e9c3dd31f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Surface connection" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail diameter" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.surfaceConnection" -msgstr "面との接続" +msgid "node.stair.railingControls.handrailDiameter" +msgstr "手すりの径" -# Source-Hash: 4e0f8b363503efff +# Source-Hash: 5f3f2be1e572a066 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Sweep" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail height" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.sweep" -msgstr "スイープ" +msgid "node.stair.railingControls.handrailHeight" +msgstr "手すりの高さ" -# Source-Hash: 4c294d88d712855a +# Source-Hash: cb3239847f068a1b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target going" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail inset" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetGoing" -msgstr "目標の踏面" +msgid "node.stair.railingControls.handrailInset" +msgstr "手すりの内側オフセット" -# Source-Hash: 74cfba22cf2e6eb8 +# Source-Hash: f365c6b6dd9ebab9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target headroom" -#: packages/nodes/src/stair/panel.tsx +# English: "Left" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetHeadroom" -msgstr "目標の頭上空間" +msgid "node.stair.railingControls.left" +msgstr "左" -# Source-Hash: 9d05958a265a6726 +# Source-Hash: f2953d2931e36d0c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target max riser" -#: packages/nodes/src/stair/panel.tsx +# English: "None" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMaxRiser" -msgstr "目標の最大蹴上げ" +msgid "node.stair.railingControls.none" +msgstr "なし" -# Source-Hash: d10322b16178ce37 +# Source-Hash: e6ac8d7c9639c351 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target minimum going" -#: packages/nodes/src/stair/panel.tsx +# English: "No return" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMinimumGoing" -msgstr "目標の最小踏面" +msgid "node.stair.railingControls.noReturn" +msgstr "返しなし" -# Source-Hash: fdbb503f0941bd56 +# Source-Hash: 5688b2003002d03a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Thickness" -#: packages/nodes/src/stair/panel.tsx +# English: "Original layout" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.thickness" -msgstr "厚さ" +msgid "node.stair.railingControls.originalLayout" +msgstr "元のレイアウト" -# Source-Hash: b3214a20e45a7aed +# Source-Hash: d0d904fbd052d7b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "To" -#: packages/nodes/src/stair/panel.tsx +# English: "Post-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.to" -msgstr "終点" +msgid "node.stair.railingControls.postFacing" +msgstr "支柱側" -# Source-Hash: 846fc58043454194 +# Source-Hash: fc4d8c6f156b0430 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Top Landing" -#: packages/nodes/src/stair/panel.tsx +# English: "Return length" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.topLanding" -msgstr "上部の踊り場" +msgid "node.stair.railingControls.returnLength" +msgstr "返しの長さ" -# Source-Hash: c44f7ab8bbd24858 +# Source-Hash: b34d5ee0f218221d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Type" -#: packages/nodes/src/stair/panel.tsx +# English: "Right" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.type" -msgstr "種類" +msgid "node.stair.railingControls.right" +msgstr "右" -# Source-Hash: b4c2f503b19443c6 +# Source-Hash: e1f8354a95b5060a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unavailable" -#: packages/nodes/src/stair/panel.tsx +# English: "Separate handrail" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.unavailable" -msgstr "利用不可" +msgid "node.stair.railingControls.separateHandrail" +msgstr "独立した手すり" -# Source-Hash: 546fa6dd4e62e82d +# Source-Hash: 005f0197ec3bc95a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walking line offset" -#: packages/nodes/src/stair/panel.tsx +# English: "Set the length to reach the wall or post." +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.walkingLineOffset" -msgstr "歩行線のオフセット" +msgid "node.stair.railingControls.setTheLengthToReachThe" +msgstr "壁または支柱に届く長さに設定します。" -# Source-Hash: 3a0ccd6c46877a87 +# Source-Hash: bef713f3ec96f758 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Width" -#: packages/nodes/src/stair/panel.tsx +# English: "Top horizontal extension" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.width" -msgstr "幅" +msgid "node.stair.railingControls.topExtension" +msgstr "上部の水平延長" -# Source-Hash: 7b65cc10483fb191 +# Source-Hash: bdad79929de6b142 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Winder" -#: packages/nodes/src/stair/panel.tsx +# English: "Wall-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.winder" -msgstr "回り段" +msgid "node.stair.railingControls.wallFacing" +msgstr "壁側" # Source-Hash: ce0b6361eb77e93c # Review: required @@ -20469,6 +21349,26 @@ msgstr "レポート" msgid "node.unit.unitPanel.unit" msgstr "住戸" +# Source-Hash: d53242481ff46157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Merge walls" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.mergeWalls" +msgstr "壁を結合" + +# Source-Hash: d7ead4708d50965f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split wall" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.splitWall" +msgstr "壁を分割" + # Source-Hash: 96a6f084d095ea36 # Review: required # AI-Provider: cursor-agent @@ -21919,6 +22819,56 @@ msgstr "どちらの面が外側か判定できません(両側とも部屋が msgid "node.wall.panel.woodStuds" msgstr "木製下地" +# Source-Hash: 5211341ed18f33f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.center" +msgstr "中央" + +# Source-Hash: 09576259041494f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.inside" +msgstr "内側の面" + +# Source-Hash: f365c6b6dd9ebab9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.left" +msgstr "左" + +# Source-Hash: 697001376b872e74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.outside" +msgstr "外側の面" + +# Source-Hash: b34d5ee0f218221d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.right" +msgstr "右" + # Source-Hash: eac63d14f275db3d # Review: required # AI-Provider: cursor-agent @@ -22539,6 +23489,216 @@ msgstr "対の窓とコーナーを回ります" msgid "node.window.panel.wrapTheCorner" msgstr "コーナーを回る" +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.casement" +msgstr "開き窓" + +# Source-Hash: e06fc5a432b74a5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.doubleHung" +msgstr "上げ下げ(両)" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.grid" +msgstr "グリッド" + +# Source-Hash: fbb293fe8aee84b2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Horizontal bands" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.horizontalBands" +msgstr "横帯" + +# Source-Hash: 3ee270463954f502 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Picture" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.picture" +msgstr "額縁" + +# Source-Hash: 62ab2eb3c775da95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.single" +msgstr "片開き" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.sliding" +msgstr "引き戸" + +# Source-Hash: 0c88aea2bd130193 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tall grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tallGrid" +msgstr "縦長グリッド" + +# Source-Hash: 9628d0cc155e29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Transom" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.transom" +msgstr "欄間" + +# Source-Hash: 305f3aba543b1962 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Triple-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tripleHung" +msgstr "上げ下げ(3枚)" + +# Source-Hash: 8af77effb76bc6e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wide grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.wideGrid" +msgstr "横長グリッド" + +# Source-Hash: 50393830365aaf2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Awning" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.awning" +msgstr "すべり出し窓" + +# Source-Hash: 8447ee52258e16e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bay" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bay" +msgstr "ベイウィンドウ" + +# Source-Hash: e828c89bd0ba1ea4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bow" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bow" +msgstr "ボウウィンドウ" + +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.casement" +msgstr "開き窓" + +# Source-Hash: b0b737fc5cb1d32a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.doubleHung" +msgstr "上げ下げ窓(両)" + +# Source-Hash: 387ce45ca2eb045f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fixed" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.fixed" +msgstr "固定" + +# Source-Hash: 04a40f27911c3192 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hopper" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.hopper" +msgstr "内倒し窓" + +# Source-Hash: 5746be19ba2a53be +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.louvered" +msgstr "ルーバー窓" + +# Source-Hash: de6ffb1cf676f270 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.singleHung" +msgstr "上げ下げ窓(片)" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.sliding" +msgstr "引き戸" + # Source-Hash: 4a4d97a4101793b7 # Review: required # AI-Provider: cursor-agent diff --git a/packages/editor/src/i18n/locales/zh-CN/messages.po b/packages/editor/src/i18n/locales/zh-CN/messages.po index a1b38596d4..3caf166177 100644 --- a/packages/editor/src/i18n/locales/zh-CN/messages.po +++ b/packages/editor/src/i18n/locales/zh-CN/messages.po @@ -2963,6 +2963,26 @@ msgstr "旋转" msgid "editor.cameraHint.zoom" msgstr "缩放" +# Source-Hash: 34b7ca7ff46c44a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{label}: {finish}" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.ariaLabel" +msgstr "{label}:{finish}" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: packages/editor/src/components/ui/controls/finish-swatch.tsx +#, fuzzy +msgid "editor.controls.finishSwatch.default" +msgstr "默认" + # Source-Hash: a2bd204e93e90598 # Review: required # AI-Provider: cursor-agent @@ -10175,6 +10195,26 @@ msgstr "解除转角:两扇窗都保留,各自在转角处加框" msgid "editor.panels.panelManager.selection" msgstr "当前选择" +# Source-Hash: 7ceade8f25b58fe9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.back" +msgstr "返回" + +# Source-Hash: d7cf5045c01b2eb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.close" +msgstr "关闭" + # Source-Hash: 2dff25ca30c80559 # Review: required # AI-Provider: cursor-agent @@ -10235,6 +10275,16 @@ msgstr "管理集合…" msgid "editor.panels.panelWrapper.openTitle" msgstr "打开{title}" +# Source-Hash: bf91b71a9aa76e94 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset" +#: packages/editor/src/components/ui/panels/panel-wrapper.tsx +#, fuzzy +msgid "editor.panels.panelWrapper.reset" +msgstr "重置" + # Source-Hash: 04a212d6317f6787 # Review: required # AI-Provider: cursor-agent @@ -11395,6 +11445,16 @@ msgstr "无" msgid "editor.panels.roomPanel.notEnoughHeadroom" msgstr "净空不足" +# Source-Hash: 92f7bc961d784f6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{doors, plural, one {# door} other {# doors}} · {windows, plural, one {# window} other {# windows}}" +#: packages/editor/src/components/ui/panels/room-panel.tsx +#, fuzzy +msgid "editor.panels.roomPanel.openingCounts" +msgstr "{doors, plural, other {# 扇门}} · {windows, plural, other {# 扇窗}}" + # Source-Hash: a8cd9507ce472a48 # Review: required # AI-Provider: cursor-agent @@ -15590,6 +15650,106 @@ msgstr "墙体" msgid "node.door.panel.width" msgstr "宽度" +# Source-Hash: 8421deea35cb5afc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Barn" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.barn" +msgstr "谷仓门" + +# Source-Hash: f747fbe71717772e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Craftsman" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.craftsman" +msgstr "工匠风" + +# Source-Hash: 092033938ca2debb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "French" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.french" +msgstr "法式门" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.glass" +msgstr "玻璃" + +# Source-Hash: 6ab8b98b38eb2e65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Half-louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.halfLouvered" +msgstr "半百叶" + +# Source-Hash: f6cbdaa17e989b91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modern" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.modern" +msgstr "现代" + +# Source-Hash: 482469f5a0873f73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.panel" +msgstr "面板" + +# Source-Hash: ac42c328610a0edd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paneled glass" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.paneledGlass" +msgstr "镶板玻璃" + +# Source-Hash: 5b68e435b7210876 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shaker" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.shaker" +msgstr "夏克风" + +# Source-Hash: 9ad6ac42b4152b64 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Six-panel" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.door.style.sixPanel" +msgstr "六镶板" + # Source-Hash: 8421deea35cb5afc # Review: required # AI-Provider: cursor-agent @@ -16024,6 +16184,76 @@ msgstr "当没有对应的 Pascal 原生形体时,保留自导入模型的几 msgid "node.importedMesh.label" msgstr "导入网格" +# Source-Hash: 9cce89f94c673821 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Couldn't rebuild with these values." +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.couldnTRebuildWithTheseValues" +msgstr "无法使用这些值重建。" + +# Source-Hash: 373b929318436fe3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.parameters" +msgstr "参数" + +# Source-Hash: 558cb886dbe0babe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuilding" +msgstr "重建中…" + +# Source-Hash: a094c99dc8ad29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rebuilding in Blender…" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.rebuildingInBlender" +msgstr "正在 Blender 中重建…" + +# Source-Hash: 1778f93ee143cd95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset {param}" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParam" +msgstr "重置{param}" + +# Source-Hash: 5a28cf5f2402dd7a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset parameters" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetParameters" +msgstr "重置参数" + +# Source-Hash: 6eb8025c60d6d3ca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reset to default" +#: packages/nodes/src/item/authored-params.tsx +#, fuzzy +msgid "node.item.authoredParams.resetToDefault" +msgstr "恢复默认" + # Source-Hash: 63f79b3c467177b3 # Review: required # AI-Provider: cursor-agent @@ -16517,151 +16747,321 @@ msgstr "前坡" msgid "node.roof.glazing.face.slope" msgstr "单坡面" -# Source-Hash: c98a4e6b28f05e0f +# Source-Hash: 3bcc542295b4c61e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Changes apply to all {length} roof segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Alignment" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" -msgstr "更改将应用于全部 {length} 个屋顶分段。" +msgid "node.roof.glazingControls.alignment" +msgstr "对齐" -# Source-Hash: c5d2ff7fda4787cd +# Source-Hash: 5211341ed18f33f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Choose one roof system to edit settings for all selected segments." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Center" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" -msgstr "选择一种屋顶系统以编辑所有选中分段的设置。" +msgid "node.roof.glazingControls.center" +msgstr "居中" -# Source-Hash: 80e07a119b63187c +# Source-Hash: 512e47607a37af46 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close the roof ends" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Choose a layout to edit the grid." +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.closeTheRoofEnds" -msgstr "封闭屋顶端部" +msgid "node.roof.glazingControls.chooseALayoutToEditThe" +msgstr "选择一种布局以编辑网格。" -# Source-Hash: e28dd27d54aaa7ae +# Source-Hash: 65b1cbba3b92c5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default panel infill" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Empty" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.defaultPanelInfill" -msgstr "默认面板填充" +msgid "node.roof.glazingControls.empty" +msgstr "空" -# Source-Hash: 134d33e2465937e7 +# Source-Hash: 135874d189176d13 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides each roof face into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "End" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" -msgstr "将每个屋面划分为列。" +msgid "node.roof.glazingControls.end" +msgstr "终点" -# Source-Hash: 896a6e4da3357c39 +# Source-Hash: 4fb65101d0b1a222 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Divides the length of each arch bay into columns." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Fixed spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" -msgstr "将每个拱跨的长度划分为列。" +msgid "node.roof.glazingControls.fixedSpacing" +msgstr "固定间距" -# Source-Hash: be9c810d28d1feb9 +# Source-Hash: 8ab91094cf650204 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Glass" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" -msgstr "端部填充会填满墙体上方的空间。请分别编辑房间的墙体和天花板。" +msgid "node.roof.glazingControls.glass" +msgstr "玻璃" -# Source-Hash: 0b8b27dbc57cca44 +# Source-Hash: 54800340a0eeab23 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame color" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Layout" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameColor" -msgstr "框架颜色" +msgid "node.roof.glazingControls.layout" +msgstr "布局" -# Source-Hash: fd413477f1a9e5ed +# Source-Hash: 321ca5101ab61db7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame depth" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Maximum spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameDepth" -msgstr "框架深度" +msgid "node.roof.glazingControls.maximumSpacing" +msgstr "最大间距" -# Source-Hash: 3519d91b7bda18a5 +# Source-Hash: d10743fce478d9f4 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Frame width" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Max spacing" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.frameWidth" -msgstr "框架宽度" +msgid "node.roof.glazingControls.maxSpacing" +msgstr "最大间距" -# Source-Hash: c7e72beff9fe4b37 +# Source-Hash: 37d9f63758abdb67 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Framing" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Mixed" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.framing" -msgstr "龙骨" +msgid "node.roof.glazingControls.mixed" +msgstr "混合" -# Source-Hash: 8ab91094cf650204 +# Source-Hash: b91302bf741c9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panel count" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glass" -msgstr "玻璃" +msgid "node.roof.glazingControls.panelCount" +msgstr "面板数量" -# Source-Hash: 9c38875c310547ae +# Source-Hash: 6ce059aee1386f72 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glass tint" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Panels" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glassTint" -msgstr "玻璃色调" +msgid "node.roof.glazingControls.panels" +msgstr "面板" -# Source-Hash: dd330a94b3f7a65a +# Source-Hash: ef3e765e692faf4c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazed" -#: packages/nodes/src/roof/glazing-panel.tsx +# English: "Solid" +#: packages/nodes/src/roof/glazing-controls.tsx #, fuzzy -msgid "node.roof.glazingPanel.glazed" -msgstr "玻璃" +msgid "node.roof.glazingControls.solid" +msgstr "实体" -# Source-Hash: e6be52df9197243a +# Source-Hash: e4698e83d02beb6c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Glazing is available for gable, straight shed, and barrel roofs." +# English: "Spacing" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.spacing" +msgstr "间距" + +# Source-Hash: 0a26a1e61c825660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.start" +msgstr "起点" + +# Source-Hash: 095237e9e2df4d9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{title} alignment" +#: packages/nodes/src/roof/glazing-controls.tsx +#, fuzzy +msgid "node.roof.glazingControls.titleAlignment" +msgstr "{title}对齐" + +# Source-Hash: c98a4e6b28f05e0f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Changes apply to all {length} roof segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.changesApplyToAllLengthRoof" +msgstr "更改将应用于全部 {length} 个屋顶分段。" + +# Source-Hash: c5d2ff7fda4787cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Choose one roof system to edit settings for all selected segments." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.chooseOneRoofSystemToEdit" +msgstr "选择一种屋顶系统以编辑所有选中分段的设置。" + +# Source-Hash: 80e07a119b63187c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close the roof ends" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.closeTheRoofEnds" +msgstr "封闭屋顶端部" + +# Source-Hash: e28dd27d54aaa7ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default panel infill" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.defaultPanelInfill" +msgstr "默认面板填充" + +# Source-Hash: 134d33e2465937e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides each roof face into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesEachRoofFaceIntoColumns" +msgstr "将每个屋面划分为列。" + +# Source-Hash: 896a6e4da3357c39 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divides the length of each arch bay into columns." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.dividesTheLengthOfEachArch" +msgstr "将每个拱跨的长度划分为列。" + +# Source-Hash: be9c810d28d1feb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End infill fills the space above the walls. Edit room walls and ceilings separately." +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.endInfillFillsTheSpaceAbove" +msgstr "端部填充会填满墙体上方的空间。请分别编辑房间的墙体和天花板。" + +# Source-Hash: 0b8b27dbc57cca44 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame color" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameColor" +msgstr "框架颜色" + +# Source-Hash: fd413477f1a9e5ed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame depth" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameDepth" +msgstr "框架深度" + +# Source-Hash: 3519d91b7bda18a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Frame width" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.frameWidth" +msgstr "框架宽度" + +# Source-Hash: c7e72beff9fe4b37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Framing" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.framing" +msgstr "龙骨" + +# Source-Hash: 8ab91094cf650204 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glass" +msgstr "玻璃" + +# Source-Hash: 9c38875c310547ae +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glass tint" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glassTint" +msgstr "玻璃色调" + +# Source-Hash: dd330a94b3f7a65a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazed" +#: packages/nodes/src/roof/glazing-panel.tsx +#, fuzzy +msgid "node.roof.glazingPanel.glazed" +msgstr "玻璃" + +# Source-Hash: e6be52df9197243a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Glazing is available for gable, straight shed, and barrel roofs." #: packages/nodes/src/roof/glazing-panel.tsx #, fuzzy msgid "node.roof.glazingPanel.glazingIsAvailableForGableStraight" @@ -17879,6 +18279,26 @@ msgstr "分段 {number}" msgid "node.separator.label" msgstr "分隔线" +# Source-Hash: e7512c891d8da7d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light off" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOff" +msgstr "关灯" + +# Source-Hash: d47ec95e14909fe5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Turn light on" +#: packages/nodes/src/shared/item-interaction-actions.tsx +#, fuzzy +msgid "node.shared.itemInteractionActions.turnLightOn" +msgstr "开灯" + # Source-Hash: b2d703d283baf64a # Review: required # AI-Provider: cursor-agent @@ -18989,6 +19409,166 @@ msgstr "楼层内的玩家或相机起点,每层一个。" msgid "node.spawn.label" msgstr "出生点" +# Source-Hash: faaa4f6b40001667 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Body" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.body" +msgstr "主体" + +# Source-Hash: 29b9fdb127a54435 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center stringer" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.centerStringer" +msgstr "中间梯梁" + +# Source-Hash: b2b2383577835a61 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Closed risers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.closedRisers" +msgstr "封闭踢面" + +# Source-Hash: 6f6b188bff3c0223 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inherit" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.inherit" +msgstr "继承" + +# Source-Hash: ce25dc4a23f3ae10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Nosing" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.nosing" +msgstr "踏步前缘" + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.open" +msgstr "打开" + +# Source-Hash: 7717e0464ad1e7df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Original" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.original" +msgstr "原始" + +# Source-Hash: 8a6f6c6b0cca7460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.riserThickness" +msgstr "踢面厚度" + +# Source-Hash: 2fe058966023b542 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Side stringers" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.sideStringers" +msgstr "侧梯梁" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.solid" +msgstr "实体" + +# Source-Hash: 4c1489839e306865 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer depth" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerDepth" +msgstr "梯梁高度" + +# Source-Hash: 17e1a09c422d3660 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stringer width" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.stringerWidth" +msgstr "梯梁宽度" + +# Source-Hash: 146f8e61ff310dc5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread finish" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadFinish" +msgstr "踏板饰面" + +# Source-Hash: 9089f91f3fbbf4cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tread thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.treadThickness" +msgstr "踏板厚度" + +# Source-Hash: 44dda7136b93c8ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waist" +msgstr "板式" + +# Source-Hash: dfd6d2ff7a94f22e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waist thickness" +#: packages/nodes/src/stair/construction-controls.tsx +#, fuzzy +msgid "node.stair.constructionControls.waistThickness" +msgstr "梯板厚度" + # Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent @@ -18999,6 +19579,126 @@ msgstr "出生点" msgid "node.stair.description" msgstr "由一个或多个梯段组成的楼梯,踏板、踢板和栏杆可配置。" +# Source-Hash: c24b098693e1006d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The flight chain does not reach the declared destination." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.arrivalMismatch" +msgstr "梯段链未到达指定的目标。" + +# Source-Hash: 124ad1cd6bb00013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Two risers plus going is outside the 0.60–0.65 m design range." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.comfortTarget" +msgstr "两倍踢面高加踏面宽不在 0.60–0.65 m 的设计范围内。" + +# Source-Hash: 7452fcd8370bef34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Going is below the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.goingTarget" +msgstr "踏面宽低于设计目标。" + +# Source-Hash: 449683eb727091d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Overhead surfaces leave less than the target headroom." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomTarget" +msgstr "上方表面留出的净空低于目标值。" + +# Source-Hash: 9e9357408f6a0d08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detailed headroom could not be evaluated: check riser counts and the surface query budget." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.headroomUnresolved" +msgstr "无法评估详细净空:请检查踢面数量和表面查询预算。" + +# Source-Hash: 40fd019d72ff3835 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight dimensions and integer riser count must be positive." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidFlight" +msgstr "梯段尺寸和整数踢面数必须为正。" + +# Source-Hash: 3d4b6f859bd8de50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The destination must be above the stair base." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.invalidRise" +msgstr "目标必须高于楼梯底部。" + +# Source-Hash: 5f196b22e2c8296a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Landing depth exceeds a full circle at the walking line; the visible landing is limited to one circle." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.landingOverlap" +msgstr "平台深度在行走线上超过一整圈;可见平台限制为一圈。" + +# Source-Hash: 0122ec92b951a114 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The narrow end of a winder tread is below 0.10 m; check the intended stair use." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.narrowWinderEnd" +msgstr "扇形踏步窄端小于 0.10 m;请检查楼梯的预期用途。" + +# Source-Hash: a664dc7f3b014af8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flight riser heights differ. Use uniform-riser repair only if this is a proposed design." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.nonuniformRisers" +msgstr "梯段踢面高度不一致。仅在此为方案设计时使用均匀踢面修复。" + +# Source-Hash: cd140b519d37b01e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A landing has a stored rise; inspect its transition before repair." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.raisedLanding" +msgstr "平台带有存储的高度;修复前请检查其过渡。" + +# Source-Hash: a94cfa7b2a21cf14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser height exceeds the design target." +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.diagnostic.riserTarget" +msgstr "踢面高度超过设计目标。" + # Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent @@ -19726,148 +20426,328 @@ msgstr "直跑" # English: "Style" #: packages/nodes/src/stair/panel.tsx #, fuzzy -msgid "node.stair.panel.style" -msgstr "样式" +msgid "node.stair.panel.style" +msgstr "样式" + +# Source-Hash: cde3878287069df2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Surface connection" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.surfaceConnection" +msgstr "表面连接" + +# Source-Hash: 4e0f8b363503efff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sweep" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.sweep" +msgstr "扫掠" + +# Source-Hash: 4c294d88d712855a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetGoing" +msgstr "目标踏面宽" + +# Source-Hash: 74cfba22cf2e6eb8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target headroom" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetHeadroom" +msgstr "目标净空" + +# Source-Hash: 9d05958a265a6726 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target max riser" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMaxRiser" +msgstr "目标最大踢面高" + +# Source-Hash: d10322b16178ce37 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Target minimum going" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.targetMinimumGoing" +msgstr "目标最小踏面宽" + +# Source-Hash: fdbb503f0941bd56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Thickness" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.thickness" +msgstr "厚度" + +# Source-Hash: b3214a20e45a7aed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "To" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.to" +msgstr "至" + +# Source-Hash: 846fc58043454194 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top Landing" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.topLanding" +msgstr "顶部平台" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.type" +msgstr "类型" + +# Source-Hash: b4c2f503b19443c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unavailable" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.unavailable" +msgstr "不可用" + +# Source-Hash: 546fa6dd4e62e82d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walking line offset" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.walkingLineOffset" +msgstr "行走线偏移" + +# Source-Hash: 3a0ccd6c46877a87 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Width" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.width" +msgstr "宽度" + +# Source-Hash: 7b65cc10483fb191 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Winder" +#: packages/nodes/src/stair/panel.tsx +#, fuzzy +msgid "node.stair.panel.winder" +msgstr "扇形踏步" + +# Source-Hash: 69578b7dd7723fa1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Both" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.both" +msgstr "两侧" + +# Source-Hash: fe633d20f198d7e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bottom sloped extension" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.bottomExtension" +msgstr "底部斜向延伸" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.continuous" +msgstr "连续" + +# Source-Hash: d7148fa065bc709b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor" +#: packages/nodes/src/stair/railing-controls.tsx +#, fuzzy +msgid "node.stair.railingControls.floor" +msgstr "楼层" -# Source-Hash: cde3878287069df2 +# Source-Hash: 644d2d9e9c3dd31f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Surface connection" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail diameter" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.surfaceConnection" -msgstr "表面连接" +msgid "node.stair.railingControls.handrailDiameter" +msgstr "扶手直径" -# Source-Hash: 4e0f8b363503efff +# Source-Hash: 5f3f2be1e572a066 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Sweep" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail height" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.sweep" -msgstr "扫掠" +msgid "node.stair.railingControls.handrailHeight" +msgstr "扶手高度" -# Source-Hash: 4c294d88d712855a +# Source-Hash: cb3239847f068a1b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target going" -#: packages/nodes/src/stair/panel.tsx +# English: "Handrail inset" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetGoing" -msgstr "目标踏面宽" +msgid "node.stair.railingControls.handrailInset" +msgstr "扶手内缩" -# Source-Hash: 74cfba22cf2e6eb8 +# Source-Hash: f365c6b6dd9ebab9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target headroom" -#: packages/nodes/src/stair/panel.tsx +# English: "Left" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetHeadroom" -msgstr "目标净空" +msgid "node.stair.railingControls.left" +msgstr "左" -# Source-Hash: 9d05958a265a6726 +# Source-Hash: f2953d2931e36d0c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target max riser" -#: packages/nodes/src/stair/panel.tsx +# English: "None" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMaxRiser" -msgstr "目标最大踢面高" +msgid "node.stair.railingControls.none" +msgstr "无" -# Source-Hash: d10322b16178ce37 +# Source-Hash: e6ac8d7c9639c351 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Target minimum going" -#: packages/nodes/src/stair/panel.tsx +# English: "No return" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.targetMinimumGoing" -msgstr "目标最小踏面宽" +msgid "node.stair.railingControls.noReturn" +msgstr "无回弯" -# Source-Hash: fdbb503f0941bd56 +# Source-Hash: 5688b2003002d03a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Thickness" -#: packages/nodes/src/stair/panel.tsx +# English: "Original layout" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.thickness" -msgstr "厚度" +msgid "node.stair.railingControls.originalLayout" +msgstr "原始布局" -# Source-Hash: b3214a20e45a7aed +# Source-Hash: d0d904fbd052d7b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "To" -#: packages/nodes/src/stair/panel.tsx +# English: "Post-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.to" -msgstr "至" +msgid "node.stair.railingControls.postFacing" +msgstr "朝向立柱" -# Source-Hash: 846fc58043454194 +# Source-Hash: fc4d8c6f156b0430 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Top Landing" -#: packages/nodes/src/stair/panel.tsx +# English: "Return length" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.topLanding" -msgstr "顶部平台" +msgid "node.stair.railingControls.returnLength" +msgstr "回弯长度" -# Source-Hash: c44f7ab8bbd24858 +# Source-Hash: b34d5ee0f218221d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Type" -#: packages/nodes/src/stair/panel.tsx +# English: "Right" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.type" -msgstr "类型" +msgid "node.stair.railingControls.right" +msgstr "右" -# Source-Hash: b4c2f503b19443c6 +# Source-Hash: e1f8354a95b5060a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unavailable" -#: packages/nodes/src/stair/panel.tsx +# English: "Separate handrail" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.unavailable" -msgstr "不可用" +msgid "node.stair.railingControls.separateHandrail" +msgstr "独立扶手" -# Source-Hash: 546fa6dd4e62e82d +# Source-Hash: 005f0197ec3bc95a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walking line offset" -#: packages/nodes/src/stair/panel.tsx +# English: "Set the length to reach the wall or post." +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.walkingLineOffset" -msgstr "行走线偏移" +msgid "node.stair.railingControls.setTheLengthToReachThe" +msgstr "设置长度以到达墙体或立柱。" -# Source-Hash: 3a0ccd6c46877a87 +# Source-Hash: bef713f3ec96f758 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Width" -#: packages/nodes/src/stair/panel.tsx +# English: "Top horizontal extension" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.width" -msgstr "宽度" +msgid "node.stair.railingControls.topExtension" +msgstr "顶部水平延伸" -# Source-Hash: 7b65cc10483fb191 +# Source-Hash: bdad79929de6b142 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Winder" -#: packages/nodes/src/stair/panel.tsx +# English: "Wall-facing" +#: packages/nodes/src/stair/railing-controls.tsx #, fuzzy -msgid "node.stair.panel.winder" -msgstr "扇形踏步" +msgid "node.stair.railingControls.wallFacing" +msgstr "朝向墙体" # Source-Hash: ce0b6361eb77e93c # Review: required @@ -20469,6 +21349,26 @@ msgstr "报告" msgid "node.unit.unitPanel.unit" msgstr "单元" +# Source-Hash: d53242481ff46157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Merge walls" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.mergeWalls" +msgstr "合并墙体" + +# Source-Hash: d7ead4708d50965f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split wall" +#: packages/nodes/src/wall/actions.tsx +#, fuzzy +msgid "node.wall.actions.splitWall" +msgstr "拆分墙体" + # Source-Hash: 96a6f084d095ea36 # Review: required # AI-Provider: cursor-agent @@ -21919,6 +22819,56 @@ msgstr "无法确定哪一面朝外(两侧都未检测到房间)— 外层 msgid "node.wall.panel.woodStuds" msgstr "木龙骨" +# Source-Hash: 5211341ed18f33f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.center" +msgstr "居中" + +# Source-Hash: 09576259041494f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.inside" +msgstr "内侧面" + +# Source-Hash: f365c6b6dd9ebab9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.left" +msgstr "左" + +# Source-Hash: 697001376b872e74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outside face" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.outside" +msgstr "外侧面" + +# Source-Hash: b34d5ee0f218221d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right" +#: packages/nodes/src/wall/panel.tsx +#, fuzzy +msgid "node.wall.reference.right" +msgstr "右" + # Source-Hash: eac63d14f275db3d # Review: required # AI-Provider: cursor-agent @@ -22539,6 +23489,216 @@ msgstr "与其配对窗户包住转角" msgid "node.window.panel.wrapTheCorner" msgstr "包住转角" +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.casement" +msgstr "平开" + +# Source-Hash: e06fc5a432b74a5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.doubleHung" +msgstr "双悬" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.grid" +msgstr "网格" + +# Source-Hash: fbb293fe8aee84b2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Horizontal bands" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.horizontalBands" +msgstr "水平条带" + +# Source-Hash: 3ee270463954f502 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Picture" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.picture" +msgstr "画框" + +# Source-Hash: 62ab2eb3c775da95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.single" +msgstr "单扇" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.sliding" +msgstr "推拉门" + +# Source-Hash: 0c88aea2bd130193 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tall grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tallGrid" +msgstr "竖长网格" + +# Source-Hash: 9628d0cc155e29a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Transom" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.transom" +msgstr "气窗" + +# Source-Hash: 305f3aba543b1962 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Triple-hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.tripleHung" +msgstr "三悬" + +# Source-Hash: 8af77effb76bc6e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wide grid" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.style.wideGrid" +msgstr "横宽网格" + +# Source-Hash: 50393830365aaf2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Awning" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.awning" +msgstr "上悬窗" + +# Source-Hash: 8447ee52258e16e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bay" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bay" +msgstr "凸窗" + +# Source-Hash: e828c89bd0ba1ea4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bow" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.bow" +msgstr "弓形窗" + +# Source-Hash: 9d63109edd8b22c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Casement" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.casement" +msgstr "平开窗" + +# Source-Hash: b0b737fc5cb1d32a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.doubleHung" +msgstr "双悬窗" + +# Source-Hash: 387ce45ca2eb045f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fixed" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.fixed" +msgstr "固定" + +# Source-Hash: 04a40f27911c3192 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hopper" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.hopper" +msgstr "下悬窗" + +# Source-Hash: 5746be19ba2a53be +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.louvered" +msgstr "百叶窗" + +# Source-Hash: de6ffb1cf676f270 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single Hung" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.singleHung" +msgstr "单悬窗" + +# Source-Hash: 18cbc73c5e1590aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Sliding" +#: packages/nodes/src/shared/opening-labels.ts +#, fuzzy +msgid "node.window.type.sliding" +msgstr "推拉门" + # Source-Hash: 4a4d97a4101793b7 # Review: required # AI-Provider: cursor-agent From 82e6616cd3c28e6faf5adcdc3021004fdc6ab412 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 11:51:50 +0000 Subject: [PATCH 10/22] Room names: a suggestion stores its English catalog name in every UI language MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Codex P1: picking a translated suggestion saved the translation (French "Chambre", unnumbered next to an existing Bedroom). Sections keep English names with translated labels; the combobox shows and searches labels, a pick stores pickedRoomName (English, numbered), typed text stays as written. displayRoomName shows catalog names translated with their number ("Bedroom 2" → "Chambre 2") without touching stored data. --- .../ui/panels/room-name-options.test.ts | 2 +- .../components/ui/panels/room-name-options.ts | 30 ++++++-- .../src/components/ui/panels/room-panel.tsx | 48 +++++++------ packages/editor/src/lib/room-name-catalog.ts | 9 ++- .../editor/src/lib/room-name-messages.test.ts | 70 +++++++++++++++++++ packages/editor/src/lib/room-name-messages.ts | 26 +++++-- 6 files changed, 149 insertions(+), 36 deletions(-) create mode 100644 packages/editor/src/lib/room-name-messages.test.ts diff --git a/packages/editor/src/components/ui/panels/room-name-options.test.ts b/packages/editor/src/components/ui/panels/room-name-options.test.ts index 6846b426ff..1984534711 100644 --- a/packages/editor/src/components/ui/panels/room-name-options.test.ts +++ b/packages/editor/src/components/ui/panels/room-name-options.test.ts @@ -40,7 +40,7 @@ describe('roomNameOptions', () => { test('free text is always offered first unless it is exactly a name', () => { const { typed, options } = roomNameOptions('Wine cellar', SECTIONS) - expect(typed).toEqual({ kind: 'typed', value: 'Wine cellar', match: null }) + expect(typed).toEqual({ kind: 'typed', value: 'Wine cellar', label: 'Wine cellar', match: null }) expect(options).toEqual([typed!]) expect(roomNameOptions('Kitchen', SECTIONS).typed).toBeNull() // A case-only difference still offers the text as typed. diff --git a/packages/editor/src/components/ui/panels/room-name-options.ts b/packages/editor/src/components/ui/panels/room-name-options.ts index fdcf6596d7..81d6f25efd 100644 --- a/packages/editor/src/components/ui/panels/room-name-options.ts +++ b/packages/editor/src/components/ui/panels/room-name-options.ts @@ -1,8 +1,12 @@ -import type { RoomNameSection } from '../../../lib/room-name-catalog' +import type { AnyNode } from '@pascal-app/core' +import { numberedRoomName, type RoomNameSection } from '../../../lib/room-name-catalog' export type RoomNameOption = { kind: 'typed' | 'suggestion' + /** What a pick stores: the English catalog name, or the typed text as written. */ value: string + /** What the row shows and the search matches, in the UI language. */ + label: string match: { start: number; end: number } | null } @@ -23,25 +27,41 @@ export function roomNameOptions( ): { typed: RoomNameOption | null; groups: RoomNameGroup[]; options: RoomNameOption[] } { const query = filtering ? typed.trim().toLowerCase() : '' const groups = sections.flatMap((section) => { - const options = section.names.flatMap((value): RoomNameOption[] => { - const start = query ? value.toLowerCase().indexOf(query) : -1 + const options = section.names.flatMap((value, index): RoomNameOption[] => { + const label = section.labels?.[index] ?? value + const start = query ? label.toLowerCase().indexOf(query) : -1 if (query && start < 0) return [] return [ { kind: 'suggestion', value, + label, match: start >= 0 ? { start, end: start + query.length } : null, }, ] }) return options.length ? [{ id: section.id, title: section.title, options }] : [] }) - const known = sections.some((section) => section.names.includes(typed)) + const known = sections.some( + (section) => section.names.includes(typed) || !!section.labels?.includes(typed), + ) const typedRow: RoomNameOption | null = - query && !known ? { kind: 'typed', value: typed, match: null } : null + query && !known ? { kind: 'typed', value: typed, label: typed, match: null } : null return { typed: typedRow, groups, options: [...(typedRow ? [typedRow] : []), ...groups.flatMap((group) => group.options)], } } + +/** + * What a pick writes to the scene: a suggestion's English catalog name, numbered + * against the level's other rooms, in every UI language; typed text as written. + */ +export function pickedRoomName( + nodes: Record, + zoneId: string, + option: RoomNameOption, +): string { + return option.kind === 'typed' ? option.value : numberedRoomName(nodes, zoneId, option.value) +} diff --git a/packages/editor/src/components/ui/panels/room-panel.tsx b/packages/editor/src/components/ui/panels/room-panel.tsx index dc98f02446..20aa875296 100644 --- a/packages/editor/src/components/ui/panels/room-panel.tsx +++ b/packages/editor/src/components/ui/panels/room-panel.tsx @@ -24,7 +24,6 @@ import { mezzanineElevationBounds } from '../../../lib/room-handle-drag' import type { RoomSelectionRecord } from '../../../lib/room-selection' import { baseRoomName, - numberedRoomName, type RoomNameSection, roomNameSections, roomNameUseCount, @@ -54,10 +53,10 @@ import { RoomConstructionRows, roomInsideHeight, } from './room-construction-rows' -import { type RoomNameOption, roomNameOptions } from './room-name-options' +import { pickedRoomName, type RoomNameOption, roomNameOptions } from './room-name-options' import { localizedLevelName } from '../../../i18n/level-name' import { messageWithSlot } from '../../../i18n/message-slot' -import { localizedRoomNameSections } from '../../../lib/room-name-messages' +import { displayRoomName, localizedRoomNameSections } from '../../../lib/room-name-messages' /** "Room · Ground floor", "Mezzanine · in Kitchen", "Room · not enclosed". */ export function roomKicker( @@ -555,29 +554,31 @@ function RoomName({ }) { const i18n = usePascalI18n() const nodes = useScene((state) => state.nodes) - const [value, setValue] = useState(name) + // The field shows the name in the UI language; the scene keeps what was stored. + const display = displayRoomName(name, i18n) + const [value, setValue] = useState(display) const [open, setOpen] = useState(false) const [typing, setTyping] = useState(false) const [active, setActive] = useState(-1) - const valueRef = useRef(name) + const valueRef = useRef(display) // Enter/click commit and then blur, and blur commits too; this keeps it one rename. - const committedRef = useRef(name) - const originalRef = useRef(name) + const committedRef = useRef(display) + const originalRef = useRef(display) const inputRef = useRef(null) const listId = useId() const { typed: typedRow, groups, options } = roomNameOptions(value, sections, typing) const expanded = open && options.length > 0 const activeId = expanded && options[active] ? `${listId}-${active}` : undefined - const current = baseRoomName(value).toLowerCase() + const current = baseRoomName(name).toLowerCase() // A rename from elsewhere (undo, a collaborator, the plan) lands in the field // unless the user is editing it (the field stays mounted across renames). useEffect(() => { if (document.activeElement === inputRef.current) return - valueRef.current = name - committedRef.current = name - setValue(name) - }, [name]) + valueRef.current = display + committedRef.current = display + setValue(display) + }, [display]) // Opening and the arrow keys bring the active row into view; the pointer // only highlights (scrolling under it would move the row being clicked). @@ -603,7 +604,7 @@ function RoomName({ setTyping(false) setOpen(true) const all = roomNameOptions(valueRef.current, sections, false).options - const here = baseRoomName(valueRef.current).toLowerCase() + const here = baseRoomName(name).toLowerCase() scrollToActive.current = true setActive(Math.max(0, all.findIndex((option) => option.value.toLowerCase() === here))) } @@ -618,10 +619,13 @@ function RoomName({ renameRoom(zoneId, next) } const pick = (option: RoomNameOption) => { - const next = - option.kind === 'typed' ? option.value : numberedRoomName(nodes, zoneId, option.value) - type(next) - commit() + // A suggestion stores the English catalog name, numbered against the level's rooms, + // whatever the UI language; typed text is stored as written. + const stored = pickedRoomName(nodes, zoneId, option) + const shown = displayRoomName(stored, i18n) + type(shown) + committedRef.current = shown + if (stored !== name) renameRoom(zoneId, stored) setOpen(false) setTyping(false) // A pick is the answer: the field lets go. To fine-tune the name, click it @@ -855,13 +859,13 @@ function RoomNameOptionLabel({ option }: { option: RoomNameOption }) { ) } - const { value, match } = option - if (!match) return {value} + const { label, match } = option + if (!match) return {label} return ( - {value.slice(0, match.start)} - {value.slice(match.start, match.end)} - {value.slice(match.end)} + {label.slice(0, match.start)} + {label.slice(match.start, match.end)} + {label.slice(match.end)} ) } diff --git a/packages/editor/src/lib/room-name-catalog.ts b/packages/editor/src/lib/room-name-catalog.ts index ca93d6129b..aa3b2d62c3 100644 --- a/packages/editor/src/lib/room-name-catalog.ts +++ b/packages/editor/src/lib/room-name-catalog.ts @@ -1,7 +1,14 @@ import type { AnyNode } from '@pascal-app/core' /** A titled group of the room-name combobox. */ -export type RoomNameSection = { id: string; title: string; names: readonly string[] } +export type RoomNameSection = { + id: string + title: string + /** Stored, matched and numbered as data: always the English catalog name. */ + names: readonly string[] + /** What the combobox shows for each name, in the UI language; defaults to the name. */ + labels?: readonly string[] +} /** What the room reads as, which decides the section shown first. */ export type RoomNameContext = 'room' | 'outdoor' | 'mezzanine' diff --git a/packages/editor/src/lib/room-name-messages.test.ts b/packages/editor/src/lib/room-name-messages.test.ts new file mode 100644 index 0000000000..8c87cbcc7a --- /dev/null +++ b/packages/editor/src/lib/room-name-messages.test.ts @@ -0,0 +1,70 @@ +import { describe, expect, test } from 'bun:test' +import { type AnyNode, type MessageDescriptor, ZoneNode } from '@pascal-app/core' +import { pickedRoomName, roomNameOptions } from '../components/ui/panels/room-name-options' +import { roomNameSections } from './room-name-catalog' +import { displayRoomName, localizedRoomNameSections } from './room-name-messages' + +const FRENCH: Record = { + 'editor.roomName.bedroom': 'Chambre', + 'editor.roomName.kitchen': 'Cuisine', + 'editor.roomName.section.sleeping': 'Nuit', +} +const french = { _: (d: MessageDescriptor) => FRENCH[d.id] ?? d.message ?? d.id } +const english = { _: (d: MessageDescriptor) => d.message ?? d.id } + +function zone(id: string, name = '') { + return ZoneNode.parse({ + id, + name, + spaceRole: 'room', + parentId: 'level_names', + polygon: [ + [0, 0], + [4, 0], + [4, 4], + [0, 4], + ], + boundaryWallIds: ['wall_a'], + }) as AnyNode +} + +/** Picks the suggestion the user sees as `label` in a UI language, and returns what it stores. */ +function pick(nodes: Record, zoneId: string, i18n: typeof french, label: string) { + const sections = localizedRoomNameSections(roomNameSections(nodes, zoneId), i18n) + const option = roomNameOptions(label, sections).options.find((row) => row.label === label) + if (!option) throw new Error(`no suggestion shown as ${label}`) + return pickedRoomName(nodes, zoneId, option) +} + +describe('room-name suggestions in another UI language', () => { + const nodes = Object.fromEntries( + [zone('zone_existing', 'Bedroom'), zone('zone_new')].map((node) => [node.id, node]), + ) + + test('a pick stores the same English, numbered name as in English', () => { + expect(pick(nodes, 'zone_new', english, 'Bedroom')).toBe('Bedroom 2') + expect(pick(nodes, 'zone_new', french, 'Chambre')).toBe('Bedroom 2') + expect(pick(nodes, 'zone_new', french, 'Cuisine')).toBe('Kitchen') + }) + + test('the rows show and match the translated labels', () => { + const sections = localizedRoomNameSections(roomNameSections(nodes, 'zone_new'), french) + const rows = roomNameOptions('chamb', sections).groups.flatMap((group) => group.options) + expect(rows.map((row) => [row.value, row.label])).toEqual([['Bedroom', 'Chambre']]) + expect(sections.find((section) => section.id === 'sleeping')?.title).toBe('Nuit') + }) + + test('typed text is stored as written', () => { + const sections = localizedRoomNameSections(roomNameSections(nodes, 'zone_new'), french) + const typed = roomNameOptions('Atelier de Marie', sections).typed + expect(typed && pickedRoomName(nodes, 'zone_new', typed)).toBe('Atelier de Marie') + }) + + test('display translates catalog names and keeps their number; other names show as written', () => { + expect(displayRoomName('Bedroom 2', french)).toBe('Chambre 2') + expect(displayRoomName('Bedroom', french)).toBe('Chambre') + expect(displayRoomName('Bedroom 2', english)).toBe('Bedroom 2') + expect(displayRoomName('Bedroom of Marie', french)).toBe('Bedroom of Marie') + expect(displayRoomName('Atelier', french)).toBe('Atelier') + }) +}) diff --git a/packages/editor/src/lib/room-name-messages.ts b/packages/editor/src/lib/room-name-messages.ts index c9f512cbf9..e23ca5e50c 100644 --- a/packages/editor/src/lib/room-name-messages.ts +++ b/packages/editor/src/lib/room-name-messages.ts @@ -1,11 +1,14 @@ -import type { MessageDescriptor, PascalI18n } from '@pascal-app/core' +import type { MessageDescriptor } from '@pascal-app/core' import type { RoomNameSection } from './room-name-catalog' /** * The room-name catalog in the UI language. The catalog stays English (it is - * matched and numbered as data); the combobox shows and stores these. + * matched, numbered and stored as data); the combobox and room labels show these. * `room-name-catalog.test.ts` fails when a catalog name has no entry here. */ +/** Anything that translates a descriptor: a `PascalI18n`, or a stand-in in tests. */ +export type DescriptorTranslator = { _(descriptor: MessageDescriptor): string } + export const ROOM_NAME_SECTION_TITLES: Record = { living: /* i18n */ { id: 'editor.roomName.section.living', message: 'Living' }, sleeping: /* i18n */ { id: 'editor.roomName.section.sleeping', message: 'Sleeping' }, @@ -85,17 +88,26 @@ export const ROOM_NAME_MESSAGES: Record = { export function localizedRoomNameSections( sections: readonly RoomNameSection[], - i18n: PascalI18n, + i18n: DescriptorTranslator, ): RoomNameSection[] { return sections.map((section) => { const title = ROOM_NAME_SECTION_TITLES[section.id] return { ...section, title: title ? i18n._(title) : section.title, - names: section.names.map((name) => { - const message = ROOM_NAME_MESSAGES[name] - return message ? i18n._(message) : name - }), + labels: section.names.map((name) => displayRoomName(name, i18n)), } }) } + +/** + * A room name in the UI language. Catalog names stay English in the scene + * (numbering, MCP and exports read them); a catalog name with the number the + * picker adds shows translated with that number ("Bedroom 2" → "Chambre 2"). + * Anything else the user typed shows as written. + */ +export function displayRoomName(name: string, i18n: DescriptorTranslator): string { + const match = /^(.*?)(\s+\d+)?$/.exec(name.trim()) + const message = match?.[1] ? ROOM_NAME_MESSAGES[match[1]] : undefined + return message ? `${i18n._(message)}${match?.[2] ?? ''}` : name +} From 8cf978e8c87745fb13511c45094f850cdc2313c2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 12:01:48 +0000 Subject: [PATCH 11/22] Room names: show catalog names in the UI language wherever a room is named displayRoomName is applied at the display boundary only: the room panel title, field and mezzanine kicker, the layers rows (as display names; editing still edits the stored name), unit and zone lists, 2D/3D room pills, viewer chrome (breadcrumb, sidebar, hover), the walkthrough HUD, node display, footprint names, the floor-opening kicker, shared-wall notes, unit members and zone quantities. Unnamed openings read "in Room" again (Codex nit). Floor-plan builders, exports and agent context keep the stored English. --- .../src/components/editor/room-labels.tsx | 24 ++++++++++++------- .../ui/panels/floor-opening-panel.tsx | 9 ++++++- .../src/components/ui/panels/node-display.ts | 5 +++- .../ui/panels/room-construction-rows.tsx | 21 ++++++++++++++-- .../src/components/ui/panels/room-panel.tsx | 11 +++++---- .../ui/sidebar/panels/site-panel/index.tsx | 2 ++ .../panels/site-panel/unit-tree-node.tsx | 3 ++- .../panels/site-panel/zone-tree-node.tsx | 3 +++ .../ui/sidebar/panels/zone-panel/index.tsx | 3 ++- .../editor/src/components/walkthrough-hud.tsx | 10 +++++++- .../editor/src/i18n/floor-footprint-name.ts | 3 ++- packages/editor/src/index.tsx | 1 + packages/editor/src/lib/viewer-selection.ts | 15 +++++++++++- packages/nodes/src/unit/unit-panel.tsx | 14 +++++++---- packages/nodes/src/zone/quantities-panel.tsx | 5 +++- 15 files changed, 102 insertions(+), 27 deletions(-) diff --git a/packages/editor/src/components/editor/room-labels.tsx b/packages/editor/src/components/editor/room-labels.tsx index 489a4eb6c1..2d102c9a0e 100644 --- a/packages/editor/src/components/editor/room-labels.tsx +++ b/packages/editor/src/components/editor/room-labels.tsx @@ -8,11 +8,13 @@ import { DEFAULT_LEVEL_HEIGHT, emitter, formatNumber, + type PascalI18n, type Polygon, polygonInteriorPoint, type Ring, sceneRegistry, useLocale, + usePascalI18n, useScene, type ZoneNode, } from '@pascal-app/core' @@ -49,13 +51,9 @@ import { useShallow } from 'zustand/react/shallow' import { useRoomRecords } from '../../hooks/use-selected-room' import { getAreaUnitLabel, type LinearUnit, squareMetersToAreaUnit } from '../../lib/measurements' import { roomFloorElevation } from '../../lib/room-handle-drag' +import { displayRoomName } from '../../lib/room-name-messages' import type { RoomSelectionRecord } from '../../lib/room-selection' -import { - clickZoneArea, - hoverZoneArea, - leaveZoneArea, - zoneKindLabel, -} from '../../lib/room-zone-routing' +import { clickZoneArea, hoverZoneArea, leaveZoneArea } from '../../lib/room-zone-routing' import { selectionModifiersFromEvent } from '../../lib/selection-routing' import useEditor from '../../store/use-editor' import useInteractionScope from '../../store/use-interaction-scope' @@ -1252,7 +1250,13 @@ function useLabelZone(zoneId: string) { return zone && zone.visible !== false ? zone : null } -const labelName = (zone: ZoneNode) => zone.name?.trim() || zoneKindLabel(zone) +const labelName = (zone: ZoneNode, i18n: PascalI18n) => { + const name = zone.name?.trim() + if (name) return displayRoomName(name, i18n) + return zone.spaceRole === 'room' + ? i18n._({ id: 'editor.roomLabel.room', message: 'Room' }) + : i18n._({ id: 'editor.roomLabel.zone', message: 'Zone' }) +} /** * One room's pill in the editor. Hover and click take the same rule as the @@ -1268,6 +1272,7 @@ function RoomPill({ view: '2d' | '3d' elements: Map }) { + const i18n = usePascalI18n() const zone = useLabelZone(entry.zoneId) // A pill that disappears under the cursor (its click selected something) // fires no leave: end the hover it set. @@ -1278,7 +1283,7 @@ function RoomPill({ areaM2={entry.area} color={zone.color} elements={elements} - name={labelName(zone)} + name={labelName(zone, i18n)} onClick={(event) => clickZoneArea(entry.zoneId, selectionModifiersFromEvent(event))} onHover={(event) => hoverZoneArea(entry.zoneId, selectionModifiersFromEvent(event))} onLeave={() => leaveZoneArea(entry.zoneId)} @@ -1289,13 +1294,14 @@ function RoomPill({ } function RoomDetail({ entry, view }: { entry: LabelEntry; view: '2d' | '3d' }) { + const i18n = usePascalI18n() const zone = useLabelZone(entry.zoneId) if (!zone) return null return ( diff --git a/packages/editor/src/components/ui/panels/floor-opening-panel.tsx b/packages/editor/src/components/ui/panels/floor-opening-panel.tsx index 1e9fa6e5d3..ca9b412197 100644 --- a/packages/editor/src/components/ui/panels/floor-opening-panel.tsx +++ b/packages/editor/src/components/ui/panels/floor-opening-panel.tsx @@ -20,6 +20,7 @@ import { Switch } from '../primitives/switch' import { PanelWrapper } from './panel-wrapper' import { localizedLevelName } from '../../../i18n/level-name' import { nodeLabel } from '../../../i18n/node-messages' +import { displayRoomName } from '../../../lib/room-name-messages' /** * A floor (or ceiling) opening: where it is, what it cuts, and the switch for @@ -39,7 +40,13 @@ export function FloorOpeningPanel({ openingId }: { openingId: string }) { const onCeiling = opening.drawnOn === 'ceiling' const zoneId = openingRoom(nodes, opening) const zone = zoneId ? nodes[zoneId as AnyNodeId] : undefined - const roomName = zone?.type === 'zone' ? zone.name?.trim() || nodeLabel('zone', 'Zone', i18n) : null + const storedRoomName = zone?.type === 'zone' ? zone.name?.trim() : undefined + const roomName = + zone?.type !== 'zone' + ? null + : storedRoomName + ? displayRoomName(storedRoomName, i18n) + : i18n._({ id: 'editor.panels.floorOpeningPanel.room', message: 'Room' }) const level = opening.parentId ? nodes[opening.parentId as AnyNodeId] : undefined const adjacentId = opening.parentId ? adjacentLevelId(nodes, opening.parentId, onCeiling ? 1 : -1) diff --git a/packages/editor/src/components/ui/panels/node-display.ts b/packages/editor/src/components/ui/panels/node-display.ts index 1a07c4967c..1a8f7c2873 100644 --- a/packages/editor/src/components/ui/panels/node-display.ts +++ b/packages/editor/src/components/ui/panels/node-display.ts @@ -1,4 +1,5 @@ import { type AnyNode, type MessageDescriptor, type PascalI18n, scriptImages } from '@pascal-app/core' +import { displayRoomName } from '../../../lib/room-name-messages' export type NodeDisplay = { icon: string @@ -47,7 +48,9 @@ export function getNodeDisplay(node: AnyNode | null | undefined, i18n: PascalI18 if (node.type === 'zone' && node.spaceRole === 'room') { return { icon: '/icons/kitchen.webp', - label: node.name || i18n._({ id: 'editor.nodeDisplay.room', message: 'Room' }), + label: + (node.name && displayRoomName(node.name, i18n)) || + i18n._({ id: 'editor.nodeDisplay.room', message: 'Room' }), } } return { diff --git a/packages/editor/src/components/ui/panels/room-construction-rows.tsx b/packages/editor/src/components/ui/panels/room-construction-rows.tsx index 28ce0f1719..18720a72a3 100644 --- a/packages/editor/src/components/ui/panels/room-construction-rows.tsx +++ b/packages/editor/src/components/ui/panels/room-construction-rows.tsx @@ -69,6 +69,7 @@ import { messageWithSlot } from '../../../i18n/message-slot' import { nodeLabel } from '../../../i18n/node-messages' import { RoomOpeningsField } from './room-openings-field' import { ShapeChoice } from './shape-choice' +import { displayRoomName } from '../../../lib/room-name-messages' /** The buttons a row offers — derived together with its presence. */ export function constructionActions(state: RoomConstructionState, part: RoomConstructionPart) { @@ -537,7 +538,7 @@ function sharingRoomNames( node.id !== zoneId && node.spaceRole === 'room' && node.boundaryWallIds.some((id) => wallIds.includes(id)) - ? [node.name?.trim() || 'the next room'] + ? [node.name?.trim() ?? ''] : [], ) } @@ -780,7 +781,23 @@ export function RoomConstructionRows({ room }: { room: RoomSelectionRecord }) { {i18n._({ id: 'editor.panels.roomConstructionRows.sharedWallsNote', message: 'Turning walls off keeps the ones shared with {rooms}.', - values: { rooms: formatList([...new Set(shared)], locale) }, + values: { + rooms: formatList( + [ + ...new Set( + shared.map((name) => + name + ? displayRoomName(name, i18n) + : i18n._({ + id: 'editor.panels.roomConstructionRows.theNextRoom', + message: 'the next room', + }), + ), + ), + ], + locale, + ), + }, })}

)} diff --git a/packages/editor/src/components/ui/panels/room-panel.tsx b/packages/editor/src/components/ui/panels/room-panel.tsx index 20aa875296..452c2e56f2 100644 --- a/packages/editor/src/components/ui/panels/room-panel.tsx +++ b/packages/editor/src/components/ui/panels/room-panel.tsx @@ -74,7 +74,7 @@ export function roomKicker( ? i18n._({ id: 'editor.panels.roomPanel.kickerMezzanineIn', message: 'Mezzanine · in {room}', - values: { room: hostName }, + values: { room: displayRoomName(hostName, i18n) }, }) : i18n._({ id: 'editor.panels.roomPanel.mezzanine', message: 'Mezzanine' }) } @@ -116,7 +116,7 @@ export function RoomPanel({ @@ -167,7 +167,10 @@ export function OpenRoomPanel({ zoneId, onClose }: { zoneId: string; onClose: () @@ -715,7 +718,7 @@ function RoomName({ ? i18n._({ id: 'editor.panels.roomPanel.renameNamed', message: '{name} · Rename', - values: { name: name.trim() }, + values: { name: displayRoomName(name, i18n) }, }) : i18n._({ id: 'editor.panels.roomPanel.rename', message: 'Rename' }) } diff --git a/packages/editor/src/components/ui/sidebar/panels/site-panel/index.tsx b/packages/editor/src/components/ui/sidebar/panels/site-panel/index.tsx index cf5641b3ca..4ffe37d3f8 100644 --- a/packages/editor/src/components/ui/sidebar/panels/site-panel/index.tsx +++ b/packages/editor/src/components/ui/sidebar/panels/site-panel/index.tsx @@ -88,6 +88,7 @@ import { TreeNodeDragProvider } from './tree-node-drag' import { zoneDefaultName } from './default-names' import { nodeLabelDescriptor } from '../../../../../i18n/node-messages' import { authoredLevelName, localizedLevelName } from '../../../../../i18n/level-name' +import { displayRoomName } from '../../../../../lib/room-name-messages' // ============================================================================ // PROPERTY LINE SECTION @@ -1299,6 +1300,7 @@ const ZoneItem = memo(function ZoneItem({
setIsEditing(true)} diff --git a/packages/editor/src/components/ui/sidebar/panels/site-panel/unit-tree-node.tsx b/packages/editor/src/components/ui/sidebar/panels/site-panel/unit-tree-node.tsx index 416f782862..20647d70bc 100644 --- a/packages/editor/src/components/ui/sidebar/panels/site-panel/unit-tree-node.tsx +++ b/packages/editor/src/components/ui/sidebar/panels/site-panel/unit-tree-node.tsx @@ -17,6 +17,7 @@ import { InlineRenameInput } from './inline-rename-input' import { TreeNodeWrapper } from './tree-node' import { nodeLabelDescriptor } from '../../../../../i18n/node-messages' import { localizedLevelName } from '../../../../../i18n/level-name' +import { displayRoomName } from '../../../../../lib/room-name-messages' type UnitWarningCode = ReturnType[number]['code'] @@ -97,7 +98,7 @@ export const UnitZoneRow = memo(function UnitZoneRow({ keepIconColor label={ - {zone.name || (zone.spaceRole === 'room' ? i18n._({ id: 'editor.sidebar.panels.sitePanel.unitTreeNode.room', message: 'Room' }) : i18n._({ id: 'editor.sidebar.panels.sitePanel.unitTreeNode.zone', message: 'Zone' }))} + {(zone.name && displayRoomName(zone.name, i18n)) || (zone.spaceRole === 'room' ? i18n._({ id: 'editor.sidebar.panels.sitePanel.unitTreeNode.room', message: 'Room' }) : i18n._({ id: 'editor.sidebar.panels.sitePanel.unitTreeNode.zone', message: 'Zone' }))} {levelLabel && ( {levelLabel} )} diff --git a/packages/editor/src/components/ui/sidebar/panels/site-panel/zone-tree-node.tsx b/packages/editor/src/components/ui/sidebar/panels/site-panel/zone-tree-node.tsx index 74546ba126..535cf372f9 100644 --- a/packages/editor/src/components/ui/sidebar/panels/site-panel/zone-tree-node.tsx +++ b/packages/editor/src/components/ui/sidebar/panels/site-panel/zone-tree-node.tsx @@ -14,6 +14,7 @@ import { TreeNodeActions } from './tree-node-actions' import { ZoneMembershipCheckbox } from './zone-membership-checkbox' import { zoneDefaultName } from './default-names' import { nodeLabelDescriptor } from '../../../../../i18n/node-messages' +import { displayRoomName } from '../../../../../lib/room-name-messages' interface ZoneTreeNodeProps { nodeId: ZoneNode['id'] @@ -30,6 +31,7 @@ export const ZoneTreeNode = memo(function ZoneTreeNode({ const [isEditing, setIsEditing] = useState(false) const updateNode = useScene((state) => state.updateNode) const isVisible = useScene((s) => s.nodes[nodeId]?.visible !== false) + const storedName = useScene((s) => s.nodes[nodeId]?.name) const color = useScene((s) => (s.nodes[nodeId] as ZoneNode | undefined)?.color) const polygon = useScene((s) => (s.nodes[nodeId] as ZoneNode | undefined)?.polygon ?? []) const isSelected = useZoneSelected(nodeId) @@ -85,6 +87,7 @@ export const ZoneTreeNode = memo(function ZoneTreeNode({ )} - {zone.name} + {displayRoomName(zone.name ?? '', i18n)} {/* Camera snapshot button */} diff --git a/packages/editor/src/components/walkthrough-hud.tsx b/packages/editor/src/components/walkthrough-hud.tsx index 14549709f5..d9fce63a70 100644 --- a/packages/editor/src/components/walkthrough-hud.tsx +++ b/packages/editor/src/components/walkthrough-hud.tsx @@ -1,6 +1,8 @@ 'use client' +import { usePascalI18n } from '@pascal-app/core' import type { ReactNode } from 'react' +import { displayRoomName } from '../lib/room-name-messages' import { cn } from '../lib/utils' import type { WalkthroughInteract } from '../store/use-first-person-hud' @@ -63,7 +65,7 @@ export function WalkthroughHud({ )} {zoneLabel && (
- {zoneLabel} +
)} {children} @@ -118,3 +120,9 @@ export function WalkthroughHud({
) } + +/** The room the walker is in, in the UI language (the scene keeps its stored name). */ +function WalkthroughZoneName({ name }: { name: string }) { + const i18n = usePascalI18n() + return displayRoomName(name, i18n) +} diff --git a/packages/editor/src/i18n/floor-footprint-name.ts b/packages/editor/src/i18n/floor-footprint-name.ts index 2bd6701376..6e4c823bee 100644 --- a/packages/editor/src/i18n/floor-footprint-name.ts +++ b/packages/editor/src/i18n/floor-footprint-name.ts @@ -4,6 +4,7 @@ import { type PascalI18n, type SlabNode, } from '@pascal-app/core' +import { displayRoomName } from '../lib/room-name-messages' /** `floorFootprintName` in the UI language; MCP and agents keep core's English. */ export function localizedFloorFootprintName( @@ -19,7 +20,7 @@ export function localizedFloorFootprintName( return i18n._({ id: 'editor.floorFootprint.room', message: '{room} floor', - values: { room: naming.room }, + values: { room: displayRoomName(naming.room, i18n) }, }) case 'shared': return i18n._({ id: 'editor.floorFootprint.shared', message: 'Shared floor' }) diff --git a/packages/editor/src/index.tsx b/packages/editor/src/index.tsx index 8303032f4c..d66cf641fa 100644 --- a/packages/editor/src/index.tsx +++ b/packages/editor/src/index.tsx @@ -815,6 +815,7 @@ export { clearRoofDuplicateMetadata, duplicateRoofSubtree } from './lib/roof-dup // placement coordinator's roof-wall strategy. export { hasRoofFaceChildOverlap, type RoofWallHit, resolveRoofWallHit } from './lib/roof-wall-hit' export { WALL_PUSH_AFFORDANCE, type WallPushArrowPayload } from './lib/room-handle-drag' +export { displayRoomName } from './lib/room-name-messages' export type { RoomKey, RoomSelectionRecord } from './lib/room-selection' export { popRoomSelection, selectRoom } from './lib/room-selection-commands' export { diff --git a/packages/editor/src/lib/viewer-selection.ts b/packages/editor/src/lib/viewer-selection.ts index c3212defcb..5052fdc547 100644 --- a/packages/editor/src/lib/viewer-selection.ts +++ b/packages/editor/src/lib/viewer-selection.ts @@ -9,9 +9,11 @@ import { emitter, getLevelDisplayName, type LevelNode, + type MessageDescriptor, type NodeEvent, resolveSelectionProxyId, sceneRegistry, + translate, type UnitNode, type ZoneNode, } from '@pascal-app/core' @@ -30,6 +32,7 @@ import { import { useBelowGrade } from './below-grade' import { nodeDisplayLabel } from './node-display-label' import { roomFloorElevation } from './room-handle-drag' +import { displayRoomName } from './room-name-messages' import { RoomSelectionIndex, type RoomSelectionRecord, resolveRoomHit } from './room-selection' import type { SelectionModifierKeys } from './selection-routing' @@ -455,8 +458,18 @@ export type ViewerCrumb = { label: string } +/** The viewer chrome's name for a zone, in the active locale (the scene keeps its stored name). */ export function zoneLabel(zone: ZoneNode): string { - return zone.name?.trim() || (zone.spaceRole === 'room' ? 'Room' : 'Zone') + const name = zone.name?.trim() + if (name) return displayRoomName(name, activeLocale) + return zone.spaceRole === 'room' + ? translate('editor.roomLabel.room', 'Room') + : translate('editor.roomLabel.zone', 'Zone') +} + +const activeLocale = { + _: (descriptor: MessageDescriptor) => + translate(descriptor.id, descriptor.message ?? descriptor.id), } /** diff --git a/packages/nodes/src/unit/unit-panel.tsx b/packages/nodes/src/unit/unit-panel.tsx index b4d8a3a5f8..d3218a8161 100644 --- a/packages/nodes/src/unit/unit-panel.tsx +++ b/packages/nodes/src/unit/unit-panel.tsx @@ -6,6 +6,7 @@ import { buildUnitReport, getLevelDisplayName, type MessageDescriptor, + type PascalI18n, UNIT_KINDS, type UnitKind, type UnitNode, @@ -16,6 +17,7 @@ import { import { ActionButton, ActionGroup, + displayRoomName, formatAreaLabel, PanelSection, PanelWrapper, @@ -158,7 +160,9 @@ export default function UnitPanel({ node }: { node: UnitNode }) { key={member.zoneId} > - {member.name || memberFallbackName(nodes, member.zoneId)} + {member.name + ? displayRoomName(member.name, i18n) + : memberFallbackName(nodes, member.zoneId, i18n)} {member.levelId ? levelNameById.get(member.levelId) : ''} @@ -172,7 +176,7 @@ export default function UnitPanel({ node }: { node: UnitNode }) { ? i18n._({ id: 'node.unit.panel.removeMember', message: 'Remove {name} from unit', - values: { name: member.name }, + values: { name: displayRoomName(member.name, i18n) }, }) : i18n._({ id: 'node.unit.panel.removeZone', message: 'Remove zone from unit' }) } @@ -231,7 +235,9 @@ export default function UnitPanel({ node }: { node: UnitNode }) { } /** An unnamed member reads as what it is: a room, or another zone. */ -function memberFallbackName(nodes: Record, zoneId: string) { +function memberFallbackName(nodes: Record, zoneId: string, i18n: PascalI18n) { const zone = nodes[zoneId] - return zone?.type === 'zone' && zone.spaceRole === 'room' ? 'Room' : 'Zone' + return zone?.type === 'zone' && zone.spaceRole === 'room' + ? i18n._({ id: 'node.unit.panel.memberRoom', message: 'Room' }) + : i18n._({ id: 'node.unit.panel.memberZone', message: 'Zone' }) } diff --git a/packages/nodes/src/zone/quantities-panel.tsx b/packages/nodes/src/zone/quantities-panel.tsx index c2210b8add..0ad12f7776 100644 --- a/packages/nodes/src/zone/quantities-panel.tsx +++ b/packages/nodes/src/zone/quantities-panel.tsx @@ -11,6 +11,7 @@ import { type ZoneQuantityValue, } from '@pascal-app/core' import { + displayRoomName, formatAreaLabel, formatLinearMeasurement, formatVolumeLabel, @@ -254,7 +255,9 @@ export default function ZoneQuantitiesPanel() { >
- {effectiveZone.name} + + {displayRoomName(effectiveZone.name ?? '', i18n)} + {report.classification === 'enclosed-room' ? i18n._({ id: 'node.zone.quantitiesPanel.enclosedRoom', message: 'Enclosed room' }) From 26a378dc929b3ae8e1d168eda0295de0a10ea414 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 27 Oct 2026 12:06:13 +0000 Subject: [PATCH 12/22] i18n inspector: whole refusal sentences, locale numbers and ICU counts (Codex P2s) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Window-merge refusals select on the blocking node's type with one sentence per kind; English reads "There is an item between them." again. - Run lengths, hole areas, curtain-wall spacing and effective thickness use formatNumber with the UI locale instead of toFixed. - Room opening counts are one ICU plural, keeping "No openings". - "1 custom panel is outside this grid. It returns…" (nit). --- .../ui/panels/multi-selection-panel.tsx | 39 +++++++------------ .../ui/panels/room-openings-field.tsx | 11 ++++-- packages/nodes/src/ceiling/panel.tsx | 7 +++- .../nodes/src/shared/system-check-panel.tsx | 10 ++++- packages/nodes/src/slab/panel.tsx | 7 +++- .../nodes/src/wall/curtain-wall-panel.tsx | 11 +++--- 6 files changed, 48 insertions(+), 37 deletions(-) diff --git a/packages/editor/src/components/ui/panels/multi-selection-panel.tsx b/packages/editor/src/components/ui/panels/multi-selection-panel.tsx index cc1b81c616..f4837eb426 100644 --- a/packages/editor/src/components/ui/panels/multi-selection-panel.tsx +++ b/packages/editor/src/components/ui/panels/multi-selection-panel.tsx @@ -7,7 +7,6 @@ import { resolveBuildingForLevel, runAsSingleSceneHistoryStep, useScene, usePascalI18n, - nodeRegistry, type PascalI18n, } from '@pascal-app/core' import { unwrapCorner, windowMergeOffer } from '@pascal-app/core/building' @@ -31,7 +30,6 @@ import useSessionGroups, { import { ActionButton, ActionGroup } from '../controls/action-button' import { PanelWrapper } from './panel-wrapper' import { formatSelectionBreakdown } from './selection-breakdown' -import { nodeLabel } from '../../../i18n/node-messages' /** The building holding the level, when the selection is everything selectable on it. */ function useWholeLevelBuildingId(selectedIds: readonly string[]) { @@ -65,9 +63,8 @@ function mergeRefusalNote( const { blockingId, limit } = refusal.details as { blockingId?: string; limit?: number } const reach = length(limit ?? 0) const blocking = nodes[blockingId ?? ''] - const blockingKind = blocking - ? nodeLabel(blocking.type, nodeRegistry.get(blocking.type)?.presentation?.label ?? blocking.type, i18n) - : undefined + // A wall's children: the openings and wall-hosted items the merge can run into. + const kind = blocking?.type ?? 'unknown' switch (refusal.code) { case 'window_already_joined': return i18n._({ @@ -86,16 +83,12 @@ function mergeRefusalNote( values: { reach }, }) case 'opening_between': - return blockingKind - ? i18n._({ - id: 'editor.panels.mergeRefusal.kindBetween', - message: 'A {kind} is between them.', - values: { kind: blockingKind.toLocaleLowerCase(i18n.getLocale()) }, - }) - : i18n._({ - id: 'editor.panels.mergeRefusal.somethingBetween', - message: 'There is something between them.', - }) + return i18n._({ + id: 'editor.panels.mergeRefusal.between', + message: + '{kind, select, item {There is an item between them.} door {There is a door between them.} window {There is a window between them.} shelf {There is a shelf between them.} other {There is something between them.}}', + values: { kind }, + }) case 'walls_not_meeting': return i18n._({ id: 'editor.panels.mergeRefusal.wallsNotMeeting', @@ -119,16 +112,12 @@ function mergeRefusalNote( 'The window selected first is taller than the other wall. Select the other one first.', }) case 'opening_overlap': - return blockingKind - ? i18n._({ - id: 'editor.panels.mergeRefusal.kindOverlap', - message: 'Sliding them to the corner would overlap a {kind}.', - values: { kind: blockingKind.toLocaleLowerCase(i18n.getLocale()) }, - }) - : i18n._({ - id: 'editor.panels.mergeRefusal.somethingOverlap', - message: 'Sliding them to the corner would overlap something.', - }) + return i18n._({ + id: 'editor.panels.mergeRefusal.overlap', + message: + '{kind, select, item {Sliding them to the corner would overlap an item.} door {Sliding them to the corner would overlap a door.} window {Sliding them to the corner would overlap a window.} shelf {Sliding them to the corner would overlap a shelf.} other {Sliding them to the corner would overlap something.}}', + values: { kind }, + }) default: return i18n._({ id: 'editor.panels.mergeRefusal.cannotMerge', diff --git a/packages/editor/src/components/ui/panels/room-openings-field.tsx b/packages/editor/src/components/ui/panels/room-openings-field.tsx index b5e3b025b2..e815083d8f 100644 --- a/packages/editor/src/components/ui/panels/room-openings-field.tsx +++ b/packages/editor/src/components/ui/panels/room-openings-field.tsx @@ -15,8 +15,6 @@ import { formatAreaLabel } from '../../../lib/measurements' import { pill } from './room-construction-rows' import { ShapeChoice } from './shape-choice' -const count = (n: number) => `${n} ${n === 1 ? 'opening' : 'openings'}` - /** * A room's openings through its floor (or its ceiling), inside the row's * settings. The floor has "Edit floor": a session that outlines the openings @@ -39,6 +37,11 @@ export function RoomOpeningsField({ () => roomSurfaceOpenings(nodes, zoneId, surface), [nodes, zoneId, surface], ) + const openingCount = i18n._({ + id: 'editor.panels.roomOpeningsField.openingCount', + message: '{count, plural, =0 {No openings} one {# opening} other {# openings}}', + values: { count: openings.length }, + }) const editing = useFloorEditSession((s) => surface === 'floor' && s.session?.zoneId === zoneId) const cut = ( - {openings.length > 0 && {count(openings.length)}} + {openings.length > 0 && {openingCount}} {cut}
) if (!editing) return (
- {openings.length ? count(openings.length) : i18n._({ id: 'editor.panels.roomOpeningsField.noOpenings', message: 'No openings' })} + {openingCount}