diff --git a/apps/editor/components/build-tab.tsx b/apps/editor/components/build-tab.tsx index efd3092f49..c829be78af 100644 --- a/apps/editor/components/build-tab.tsx +++ b/apps/editor/components/build-tab.tsx @@ -4,6 +4,7 @@ import { type AnyNodeId, isFenceFeatureNode, RoofType as RoofTypeSchema, + usePascalI18n, useRegistryVersion, useScene, } from '@pascal-app/core' @@ -59,6 +60,7 @@ const subscribeToClientMount = () => () => {} * with the kind's own `def.defaults()`. Painting has its own rail panel. */ export function BuildTab() { + const i18n = usePascalI18n() const [mepOpen, setMepOpen] = useState(false) const [kitchenOpen, setKitchenOpen] = useState(false) const [buildSearch, setBuildSearch] = useState('') @@ -181,13 +183,13 @@ export function BuildTab() { data-build-tool={type.id} iconSrc={type.iconSrc} key={type.id} - label={type.label} + label={i18n._(type.label)} onClick={() => { triggerSFX('sfx:menu-click') handleTypeClick(type) }} onMouseEnter={() => triggerSFX('sfx:menu-hover')} - title={type.label} + title={i18n._(type.label)} /> ) const typesIn = (section: NonNullable) => @@ -195,14 +197,20 @@ export function BuildTab() { const advancedTypes = typesIn('advanced') return ( -
+
setBuildSearch(event.target.value)} className="h-9 w-full shrink-0 rounded-lg border border-border bg-background px-3 text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" @@ -211,7 +219,9 @@ export function BuildTab() { <> {buildTypes - .filter((type) => type.label.toLowerCase().includes(buildSearch.toLowerCase())) + .filter((type) => + i18n._(type.label).toLocaleLowerCase().includes(buildSearch.toLocaleLowerCase()), + ) .map(renderTile)} @@ -227,7 +237,7 @@ export function BuildTab() { useEditor.getState().setMode('select') }} > - ← All build tools + {i18n._({ id: 'app.buildTab.allBuildTools', message: '← All build tools' })} ) : (
@@ -242,16 +252,29 @@ export function BuildTab() { activateBuildTool('wall') }} /> - + {typesIn('add').map(renderTile)} - + {typesIn('outdoor').map(renderTile)} {advancedTypes.map(renderTile)} @@ -266,7 +289,7 @@ export function BuildTab() {
- Roof type + {i18n._({ id: 'app.buildTab.roofType', message: 'Roof type' })}
{ROOF_TYPE_OPTIONS.map((roofType) => { @@ -288,7 +311,7 @@ export function BuildTab() { onMouseEnter={() => triggerSFX('sfx:menu-hover')} type="button" > - {roofType.label} + {i18n._(roofType.label)} ) })} @@ -306,14 +329,20 @@ export function BuildTab() { /> {activeRoofType === 'conical' && (

- Select a curved wall to match its radius and arc. + {i18n._({ + id: 'app.buildTab.selectACurvedWallToMatch', + message: 'Select a curved wall to match its radius and arc.', + })}

)} {roofFeatures.length > 0 ? (
- Features & extensions + {i18n._({ + id: 'app.buildTab.featuresExtensions', + message: 'Features & extensions', + })}
{feature.label} - {feature.label} + {i18n._(feature.label)} ) @@ -362,28 +391,41 @@ export function BuildTab() {
) : fenceContext ? (
-
Fence features
+
+ {i18n._({ id: 'app.buildTab.fenceFeatures', message: 'Fence features' })} +
{(['gate', 'opening'] as const).map((kind) => ( { triggerSFX('sfx:menu-click') activateFenceFeaturePlacement(kind) }} onMouseEnter={() => triggerSFX('sfx:menu-hover')} - title={kind === 'gate' ? 'Add Gate' : 'Add Open Passage'} + title={ + kind === 'gate' + ? i18n._({ id: 'app.buildTab.addGate', message: 'Add Gate' }) + : i18n._({ id: 'app.buildTab.addOpenPassage', message: 'Add Open Passage' }) + } /> ))} {selectedFenceFeature && (
) : isKitchenActive ? ( ) : isMepActive ? (
-
MEP
+
+ {i18n._({ id: 'app.buildTab.mep', message: 'MEP' })} +
{item.label} - {item.label} + {i18n._(item.label)} ) @@ -565,7 +632,9 @@ export function BuildTab() { {liquidLineContext ? (
- Liquid Line + + {i18n._({ id: 'app.buildTab.liquidLine', message: 'Liquid Line' })} + {follow - ? 'Click a lineset to lay the line beside it.' - : 'Trace a line alongside an existing lineset (F).'} + ? i18n._({ + id: 'app.buildTab.clickALinesetToLayThe', + message: 'Click a lineset to lay the line beside it.', + }) + : i18n._({ + id: 'app.buildTab.traceALineAlongsideAnExisting', + message: 'Trace a line alongside an existing lineset (F).', + })}
) : null} diff --git a/apps/editor/components/kitchen-browser.tsx b/apps/editor/components/kitchen-browser.tsx index d8175f72e1..fb6a7c903e 100644 --- a/apps/editor/components/kitchen-browser.tsx +++ b/apps/editor/components/kitchen-browser.tsx @@ -5,6 +5,7 @@ import { type CabinetNode, emitter, resolveLevelId, + usePascalI18n, useScene, } from '@pascal-app/core' import { useCommandPalette, useCommandRegistry, useEditor } from '@pascal-app/editor' @@ -39,6 +40,7 @@ function focusKitchenItem(id: AnyNodeId) { } export function KitchenBrowser({ query = '' }: { query?: string }) { + const i18n = usePascalI18n() const defaults = useEditor((state) => state.toolDefaults.cabinet) const mode = useEditor((state) => state.mode) // Read the scene only while a query asks for placed items. @@ -49,9 +51,14 @@ export function KitchenBrowser({ query = '' }: { query?: string }) { return (
-

Add to kitchen

+

+ {i18n._({ id: 'app.kitchenBrowser.addToKitchen', message: 'Add to kitchen' })} +

- Choose an item, then click to place it. Appliances include their cabinetry. + {i18n._({ + id: 'app.kitchenBrowser.chooseAnItemThenClickTo', + message: 'Choose an item, then click to place it. Appliances include their cabinetry.', + })}

{query.trim() && (
-

Find in this project · {matches.length}

+

+ {i18n._({ + id: 'app.kitchenBrowser.findInThisProjectLength', + message: 'Find in this project · {length}', + values: { length: matches.length }, + })} +

{matches.map((node) => ( ))} {!matches.length && ( -

No matching kitchen items placed yet.

+

+ {i18n._({ + id: 'app.kitchenBrowser.noMatchingKitchenItemsPlacedYet', + message: 'No matching kitchen items placed yet.', + })} +

)}
)} @@ -85,6 +107,7 @@ export function KitchenBrowser({ query = '' }: { query?: string }) { } export function KitchenCommands() { + const i18n = usePascalI18n() const register = useCommandRegistry((state) => state.register) // Always mounted: the placed items are read only while the palette is open to list them. const paletteOpen = useCommandPalette((state) => state.open) @@ -96,13 +119,17 @@ export function KitchenCommands() { register( KITCHEN_ITEMS.map((item) => ({ id: `kitchen.add.${item.id}`, - label: `Add ${item.label}`, - group: 'Kitchen · Add', + label: i18n._({ + id: 'app.kitchenBrowser.addLabel', + message: 'Add {label}', + values: { label: item.label }, + }), + group: i18n._({ id: 'app.kitchenBrowser.groupAdd', message: 'Kitchen · Add' }), keywords: item.keywords.split(' '), execute: () => beginKitchenPlacement(item.id), })), ), - [register], + [register, i18n], ) useEffect( () => @@ -120,14 +147,21 @@ export function KitchenCommands() { const item = KITCHEN_ITEMS.find((entry) => entry.id === preset)! return { id: `kitchen.find.${node.id}`, - label: `Find ${node.name || item.label}`, - group: 'Kitchen · In this project', + label: i18n._({ + id: 'app.kitchenBrowser.findName', + message: 'Find {name}', + values: { name: node.name || item.label }, + }), + group: i18n._({ + id: 'app.kitchenBrowser.groupInThisProject', + message: 'Kitchen · In this project', + }), keywords: item.keywords.split(' '), execute: () => focusKitchenItem(node.id), } }), ), - [register, modules], + [register, modules, i18n], ) return null } diff --git a/apps/editor/components/webxr-wand-bindings.ts b/apps/editor/components/webxr-wand-bindings.ts index 5bf9c93c59..648192fb94 100644 --- a/apps/editor/components/webxr-wand-bindings.ts +++ b/apps/editor/components/webxr-wand-bindings.ts @@ -18,6 +18,14 @@ import { import { useBuildPanelModel, useBuildToolOptions } from '@/lib/build-panel-model' import { getRoofFootprintSources, ROOF_TYPE_OPTIONS } from '@/lib/build-tab-state' +// The XR plugin takes plain labels and renders them itself, so it receives the English source. +const english = ( + entry: T, +): Omit & { label: string } => ({ + ...entry, + label: entry.label.message ?? entry.label.id, +}) + export const webXRWandBindings: PascalXRWandBindings = { useBuildPalette: useBuildPanelModel, useToolOptions: useBuildToolOptions, @@ -32,9 +40,13 @@ export const webXRWandBindings: PascalXRWandBindings = { useEditor.getState().setTool(null) }, activateTerrainSculptMode, - collectBuildTypes, - collectRoofFeatures, - getRoofFootprintSources, - roofTypeOptions: ROOF_TYPE_OPTIONS, - xrMepItems: MEP_ITEMS, + collectBuildTypes: (floorplanMode) => collectBuildTypes(floorplanMode).map(english), + collectRoofFeatures: () => collectRoofFeatures().map(english), + getRoofFootprintSources: (roofType) => + getRoofFootprintSources(roofType).map((source) => ({ + value: source.value, + label: source.label.message, + })), + roofTypeOptions: ROOF_TYPE_OPTIONS.map(english), + xrMepItems: MEP_ITEMS.map(english), } diff --git a/apps/editor/lib/build-palette.ts b/apps/editor/lib/build-palette.ts index 5b8bd1f385..7a3ba56665 100644 --- a/apps/editor/lib/build-palette.ts +++ b/apps/editor/lib/build-palette.ts @@ -1,9 +1,10 @@ -import { emitter, nodeRegistry, type RoofType } from '@pascal-app/core' +import { emitter, type MessageDescriptor, nodeRegistry, type RoofType } from '@pascal-app/core' import { CATALOG_ITEMS, type FloorplanMode, getFloorplanNodeExtension, isFloorplanToolAvailableInMode, + nodeLabelDescriptor, useEditor, useFloorplanMode, } from '@pascal-app/editor' @@ -13,7 +14,7 @@ import { getRoofFootprintSource, type RoofFootprintSource } from '@/lib/build-ta export type BuildType = { id: string - label: string + label: MessageDescriptor iconSrc: string kind?: string paletteOrder?: number @@ -27,80 +28,167 @@ export type BuildType = { export type MepItem = { id: string - label: string + label: MessageDescriptor iconSrc: string kind: string } export type RoofFeature = { id: string - label: string + label: MessageDescriptor iconSrc: string kind?: string } export const BASE_BUILD_TYPES: BuildType[] = [ - { id: 'wall', label: 'Wall', iconSrc: '/icons/wall.webp', kind: 'wall' }, - { id: 'fence', label: 'Fence', iconSrc: '/icons/fence.webp', kind: 'fence', section: 'outdoor' }, - { id: 'slab', label: 'Slab', iconSrc: '/icons/floor.webp', kind: 'slab', section: 'advanced' }, + { + id: 'wall', + label: /* i18n */ { id: 'app.lib.buildPalette.wall', message: 'Wall' }, + iconSrc: '/icons/wall.webp', + kind: 'wall', + }, + { + id: 'fence', + label: /* i18n */ { id: 'app.lib.buildPalette.fence', message: 'Fence' }, + iconSrc: '/icons/fence.webp', + kind: 'fence', + section: 'outdoor', + }, + { + id: 'slab', + label: /* i18n */ { id: 'app.lib.buildPalette.slab', message: 'Slab' }, + iconSrc: '/icons/floor.webp', + kind: 'slab', + section: 'advanced', + }, { id: 'ceiling', - label: 'Ceiling', + label: /* i18n */ { id: 'app.lib.buildPalette.ceiling', message: 'Ceiling' }, iconSrc: '/icons/ceiling.webp', kind: 'ceiling', section: 'advanced', }, - { id: 'roof', label: 'Roof', iconSrc: '/icons/roof.webp', kind: 'roof', section: 'add' }, - { id: 'stair', label: 'Stairs', iconSrc: '/icons/stairs.webp', kind: 'stair', section: 'add' }, + { + id: 'roof', + label: /* i18n */ { id: 'app.lib.buildPalette.roof', message: 'Roof' }, + iconSrc: '/icons/roof.webp', + kind: 'roof', + section: 'add', + }, + { + id: 'stair', + label: /* i18n */ { id: 'app.lib.buildPalette.stairs', message: 'Stairs' }, + iconSrc: '/icons/stairs.webp', + kind: 'stair', + section: 'add', + }, { id: 'elevator', - label: 'Elevator', + label: /* i18n */ { id: 'app.lib.buildPalette.elevator', message: 'Elevator' }, iconSrc: '/icons/elevator.webp', kind: 'elevator', section: 'advanced', }, - { id: 'door', label: 'Door', iconSrc: '/icons/door.webp', kind: 'door', section: 'add' }, - { id: 'window', label: 'Window', iconSrc: '/icons/window.webp', kind: 'window', section: 'add' }, + { + id: 'door', + label: /* i18n */ { id: 'app.lib.buildPalette.door', message: 'Door' }, + iconSrc: '/icons/door.webp', + kind: 'door', + section: 'add', + }, + { + id: 'window', + label: /* i18n */ { id: 'app.lib.buildPalette.window', message: 'Window' }, + iconSrc: '/icons/window.webp', + kind: 'window', + section: 'add', + }, { id: 'column', - label: 'Column', + label: /* i18n */ { id: 'app.lib.buildPalette.column', message: 'Column' }, iconSrc: '/icons/column.webp', kind: 'column', section: 'advanced', }, - { id: 'shelf', label: 'Shelf', iconSrc: '/icons/shelf.webp', kind: 'shelf', section: 'add' }, + { + id: 'shelf', + label: /* i18n */ { id: 'app.lib.buildPalette.shelf', message: 'Shelf' }, + iconSrc: '/icons/shelf.webp', + kind: 'shelf', + section: 'add', + }, { id: 'spawn', - label: 'Spawn point', + label: /* i18n */ { id: 'app.lib.buildPalette.spawnPoint', message: 'Spawn point' }, iconSrc: '/icons/spawn-point.webp', kind: 'spawn', section: 'advanced', }, - { id: 'kitchen', label: 'Kitchen', iconSrc: '/icons/kitchen.webp', section: 'add' }, - { id: 'mep', label: 'MEP', iconSrc: '/icons/HVAC.webp', section: 'advanced' }, + { + id: 'kitchen', + label: /* i18n */ { id: 'app.lib.buildPalette.kitchen', message: 'Kitchen' }, + iconSrc: '/icons/kitchen.webp', + section: 'add', + }, + { + id: 'mep', + label: /* i18n */ { id: 'app.lib.buildPalette.mep', message: 'MEP' }, + iconSrc: '/icons/HVAC.webp', + section: 'advanced', + }, { id: 'terrain', - label: 'Terrain', + label: /* i18n */ { id: 'app.lib.buildPalette.terrain', message: 'Terrain' }, iconSrc: '/icons/mesh.webp', mode: 'terrain-sculpt', section: 'outdoor', }, // An outdoor room (no walls, no ceiling), drawn like a room; see `startTerraceDraft`. - { id: 'terrace', label: 'Terrace', iconSrc: '/icons/floor.webp', section: 'outdoor' }, + { + id: 'terrace', + label: /* i18n */ { id: 'app.lib.buildPalette.terrace', message: 'Terrace' }, + iconSrc: '/icons/floor.webp', + section: 'outdoor', + }, ] export const MEP_ITEMS: MepItem[] = [ - { id: 'duct-segment', label: 'Duct', iconSrc: '/icons/duct.webp', kind: 'duct-segment' }, + { + id: 'duct-segment', + label: /* i18n */ { id: 'app.lib.buildPalette.duct', message: 'Duct' }, + iconSrc: '/icons/duct.webp', + kind: 'duct-segment', + }, { id: 'duct-terminal', - label: 'Register', + label: /* i18n */ { id: 'app.lib.buildPalette.register', message: 'Register' }, iconSrc: '/icons/registers.webp', kind: 'duct-terminal', }, - { id: 'hvac-equipment', label: 'HVAC Unit', iconSrc: '/icons/HVAC.webp', kind: 'hvac-equipment' }, - { id: 'lineset', label: 'Lineset', iconSrc: '/icons/lineset.webp', kind: 'lineset' }, - { id: 'liquid-line', label: 'Liquid Line', iconSrc: '/icons/lineset.webp', kind: 'liquid-line' }, - { id: 'pipe-segment', label: 'DWV Pipe', iconSrc: '/icons/dwv-pipes.webp', kind: 'pipe-segment' }, + { + id: 'hvac-equipment', + label: /* i18n */ { id: 'app.lib.buildPalette.hvacUnit', message: 'HVAC Unit' }, + iconSrc: '/icons/HVAC.webp', + kind: 'hvac-equipment', + }, + { + id: 'lineset', + label: /* i18n */ { id: 'app.lib.buildPalette.lineset', message: 'Lineset' }, + iconSrc: '/icons/lineset.webp', + kind: 'lineset', + }, + { + id: 'liquid-line', + label: /* i18n */ { id: 'app.lib.buildPalette.liquidLine', message: 'Liquid Line' }, + iconSrc: '/icons/lineset.webp', + kind: 'liquid-line', + }, + { + id: 'pipe-segment', + label: /* i18n */ { id: 'app.lib.buildPalette.dwvPipe', message: 'DWV Pipe' }, + iconSrc: '/icons/dwv-pipes.webp', + kind: 'pipe-segment', + }, ] export const MEP_TOOL_KINDS = new Set([ @@ -136,7 +224,7 @@ export function collectBuildTypes(floorplanMode: FloorplanMode): BuildType[] { tools.push({ id: kind, kind, - label: presentation.label, + label: nodeLabelDescriptor(kind, presentation.label), iconSrc: presentation.icon.kind === 'url' ? presentation.icon.src : '/icons/spawn-point.webp', paletteOrder: presentation.paletteOrder ?? Number.MAX_SAFE_INTEGER, section: 'advanced', @@ -208,14 +296,14 @@ export function collectRoofFeatures(): RoofFeature[] { features.push({ id: kind, kind, - label: definition.presentation?.label ?? kind, + label: nodeLabelDescriptor(kind, definition.presentation?.label ?? kind), iconSrc: icon?.kind === 'url' ? icon.src : '/icons/roof.webp', }) } return features } -export function activateRoofFeatureTool(feature: RoofFeature): void { +export function activateRoofFeatureTool(feature: Pick): void { const editor = useEditor.getState() useViewer.getState().setSelection({ selectedIds: [], zoneId: null }) editor.setPhase('building') diff --git a/apps/editor/lib/build-panel-model.ts b/apps/editor/lib/build-panel-model.ts index 81c47fcbcc..560e2e31c0 100644 --- a/apps/editor/lib/build-panel-model.ts +++ b/apps/editor/lib/build-panel-model.ts @@ -4,6 +4,7 @@ import { type AnyNodeId, isFenceFeatureNode, RoofType as RoofTypeSchema, + usePascalI18n, useRegistryVersion, useScene, } from '@pascal-app/core' @@ -33,6 +34,7 @@ import { } from './build-tab-state' export function useBuildToolOptions(): PanelToolOption[] { + const i18n = usePascalI18n() const mode = useEditor((state) => state.mode) const tool = useEditor((state) => state.tool) const defaults = useEditor((state) => state.toolDefaults.roof) @@ -43,11 +45,11 @@ export function useBuildToolOptions(): PanelToolOption[] { return [ { id: 'liquid-line-follow', - label: 'Follow lineset', + label: i18n._({ id: 'app.lib.buildPanelModel.followLineset', message: 'Follow lineset' }), value: follow ? 'on' : 'off', choices: [ - { value: 'on', label: 'On' }, - { value: 'off', label: 'Off' }, + { value: 'on', label: i18n._({ id: 'app.lib.buildPanelModel.on', message: 'On' }) }, + { value: 'off', label: i18n._({ id: 'app.lib.buildPanelModel.off', message: 'Off' }) }, ], set: (value) => { if ((value === 'on') !== useLiquidLineToolOptions.getState().follow) toggleFollow() @@ -61,14 +63,21 @@ export function useBuildToolOptions(): PanelToolOption[] { return [ { id: 'roof-footprint-source', - label: 'Create from', + label: i18n._({ id: 'app.lib.buildPanelModel.createFrom', message: 'Create from' }), value: getRoofFootprintSource(roofType, defaults?.footprintSource), choices: getRoofFootprintSources(roofType).map((source) => ({ - ...source, + value: source.value, + label: i18n._(source.label), description: source.value === 'room' - ? 'Hover a room to preview its boundary, then click to place.' - : 'Draw the roof footprint with two corner clicks.', + ? i18n._({ + id: 'app.lib.buildPanelModel.hoverARoomToPreviewIts', + message: 'Hover a room to preview its boundary, then click to place.', + }) + : i18n._({ + id: 'app.lib.buildPanelModel.drawTheRoofFootprintWithTwo', + message: 'Draw the roof footprint with two corner clicks.', + }), })), set: (value) => activateRoofFootprintSource(getRoofFootprintSource(roofType, value)), }, @@ -76,6 +85,7 @@ export function useBuildToolOptions(): PanelToolOption[] { } export function useBuildPanelModel(): XRWandBuildModel { + const i18n = usePascalI18n() const mode = useEditor((state) => state.mode) const tool = useEditor((state) => state.tool) const selectedId = useViewer((state) => state.selection.selectedIds[0]) @@ -102,7 +112,7 @@ export function useBuildPanelModel(): XRWandBuildModel { const buildItems = collectBuildTypes(floorplanMode).map( (type): XRWandBuildItem => ({ id: type.id, - label: type.label, + label: i18n._(type.label), icon: { src: type.iconSrc }, active: type.mode ? mode === type.mode @@ -129,7 +139,7 @@ export function useBuildPanelModel(): XRWandBuildModel { ...buildItems, { id: 'painting', - label: 'Painting', + label: i18n._({ id: 'app.lib.buildPanelModel.painting', message: 'Painting' }), icon: { src: '/icons/paint.webp' }, active: mode === 'material-paint', onSelect: activatePaintMode, @@ -139,16 +149,19 @@ export function useBuildPanelModel(): XRWandBuildModel { ? [ ...ROOF_TYPE_OPTIONS.map((type) => ({ id: `roof-${type.value}`, - label: type.label, - section: 'Roof type', + label: i18n._(type.label), + section: i18n._({ id: 'app.lib.buildPanelModel.roofType', message: 'Roof type' }), active: tool === 'roof' && roofType === type.value, onSelect: () => activateRoofType(type.value), })), ...features.map((feature) => ({ id: feature.id, - label: feature.label, + label: i18n._(feature.label), icon: { src: feature.iconSrc }, - section: 'Features & extensions', + section: i18n._({ + id: 'app.lib.buildPanelModel.featuresExtensions', + message: 'Features & extensions', + }), active: feature.kind === tool, onSelect: () => activateRoofFeatureTool(feature), })), @@ -157,8 +170,17 @@ export function useBuildPanelModel(): XRWandBuildModel { ? [ ...(['gate', 'opening'] as const).map((kind) => ({ id: `fence-add-${kind}`, - label: kind === 'gate' ? 'Add Gate' : 'Add Open Passage', - section: 'Gates & openings', + label: + kind === 'gate' + ? i18n._({ id: 'app.lib.buildPanelModel.addGate', message: 'Add Gate' }) + : i18n._({ + id: 'app.lib.buildPanelModel.addOpenPassage', + message: 'Add Open Passage', + }), + section: i18n._({ + id: 'app.lib.buildPanelModel.gatesOpenings', + message: 'Gates & openings', + }), active: false, onSelect: () => { activateFenceFeaturePlacement(kind) @@ -169,9 +191,9 @@ export function useBuildPanelModel(): XRWandBuildModel { ? [ ...MEP_ITEMS.map((item) => ({ id: item.id, - label: item.label, + label: i18n._(item.label), icon: { src: item.iconSrc }, - section: 'MEP', + section: i18n._({ id: 'app.lib.buildPanelModel.mep', message: 'MEP' }), active: item.kind === 'duct-segment' ? duct @@ -184,8 +206,11 @@ export function useBuildPanelModel(): XRWandBuildModel { ? [ { id: 'duct-fitting', - label: 'Add Fitting', - section: 'Duct', + label: i18n._({ + id: 'app.lib.buildPanelModel.addFitting', + message: 'Add Fitting', + }), + section: i18n._({ id: 'app.lib.buildPanelModel.duct', message: 'Duct' }), icon: { src: '/icons/duct-fitting.webp' }, active: tool === 'duct-fitting', onSelect: () => @@ -197,8 +222,11 @@ export function useBuildPanelModel(): XRWandBuildModel { ? [ { id: 'pipe-fitting', - label: 'Add Fitting', - section: 'DWV Pipe', + label: i18n._({ + id: 'app.lib.buildPanelModel.addFitting', + message: 'Add Fitting', + }), + section: i18n._({ id: 'app.lib.buildPanelModel.dwvPipe', message: 'DWV Pipe' }), icon: { src: '/icons/duct-fitting.webp' }, active: tool === 'pipe-fitting', onSelect: () => @@ -206,8 +234,8 @@ export function useBuildPanelModel(): XRWandBuildModel { }, { id: 'pipe-trap', - label: 'Add Trap', - section: 'DWV Pipe', + label: i18n._({ id: 'app.lib.buildPanelModel.addTrap', message: 'Add Trap' }), + section: i18n._({ id: 'app.lib.buildPanelModel.dwvPipe', message: 'DWV Pipe' }), icon: { src: '/icons/dwv-pipes.webp' }, active: tool === 'pipe-trap', onSelect: () => @@ -220,8 +248,11 @@ export function useBuildPanelModel(): XRWandBuildModel { ? [ { id: 'modular-cabinet', - label: 'Modular Cabinet', - section: 'Kitchen', + label: i18n._({ + id: 'app.lib.buildPanelModel.modularCabinet', + message: 'Modular Cabinet', + }), + section: i18n._({ id: 'app.lib.buildPanelModel.kitchen', message: 'Kitchen' }), icon: { src: MODULAR_CABINET_ICON }, active: true, onSelect: activateModularCabinetTool, @@ -240,10 +271,20 @@ export function useBuildPanelModel(): XRWandBuildModel { return { items, secondaryItems, - secondaryTitle: roofActive ? 'Roof' : fenceActive ? 'Fence' : mepActive ? 'MEP' : 'Kitchen', + secondaryTitle: roofActive + ? i18n._({ id: 'app.lib.buildPanelModel.roof', message: 'Roof' }) + : fenceActive + ? i18n._({ id: 'app.lib.buildPanelModel.fence', message: 'Fence' }) + : mepActive + ? i18n._({ id: 'app.lib.buildPanelModel.mep', message: 'MEP' }) + : i18n._({ id: 'app.lib.buildPanelModel.kitchen', message: 'Kitchen' }), section, - title: 'Build', - mark: `${items.length} tools`, + title: i18n._({ id: 'app.lib.buildPanelModel.build', message: 'Build' }), + mark: i18n._({ + id: 'app.lib.buildPanelModel.toolCount', + message: '{count, plural, one {# tool} other {# tools}}', + values: { count: items.length }, + }), page: 0, pageCount: 1, detailMode: mode === 'material-paint' ? 'paint' : undefined, diff --git a/apps/editor/lib/build-tab-state.ts b/apps/editor/lib/build-tab-state.ts index 812a60b5ec..3f89267ae6 100644 --- a/apps/editor/lib/build-tab-state.ts +++ b/apps/editor/lib/build-tab-state.ts @@ -1,4 +1,4 @@ -import type { RoofType } from '@pascal-app/core' +import type { MessageDescriptor, RoofType } from '@pascal-app/core' export type RoofFeatureIdentity = { id: string @@ -6,9 +6,9 @@ export type RoofFeatureIdentity = { } const ROOF_FOOTPRINT_SOURCES = [ - { label: 'Room', value: 'room' }, - { label: 'Wall', value: 'walls' }, - { label: 'Draw', value: 'draw' }, + { label: /* i18n */ { id: 'app.lib.buildTabState.room', message: 'Room' }, value: 'room' }, + { label: /* i18n */ { id: 'app.lib.buildTabState.wall', message: 'Wall' }, value: 'walls' }, + { label: /* i18n */ { id: 'app.lib.buildTabState.draw', message: 'Draw' }, value: 'draw' }, ] as const export type RoofFootprintSource = (typeof ROOF_FOOTPRINT_SOURCES)[number]['value'] @@ -30,15 +30,24 @@ export function getRoofFootprintSource(roofType: RoofType, value: unknown): Roof : sources[0].value } -export const ROOF_TYPE_OPTIONS: ReadonlyArray<{ label: string; value: RoofType }> = [ - { label: 'Hip', value: 'hip' }, - { label: 'Gable', value: 'gable' }, - { label: 'Shed', value: 'shed' }, - { label: 'Flat', value: 'flat' }, - { label: 'Gambrel', value: 'gambrel' }, - { label: 'Dutch', value: 'dutch' }, - { label: 'Mansard', value: 'mansard' }, - { label: 'Conical', value: 'conical' }, +export const ROOF_TYPE_OPTIONS: ReadonlyArray<{ label: MessageDescriptor; value: RoofType }> = [ + { label: /* i18n */ { id: 'app.lib.buildTabState.hip', message: 'Hip' }, value: 'hip' }, + { label: /* i18n */ { id: 'app.lib.buildTabState.gable', message: 'Gable' }, value: 'gable' }, + { label: /* i18n */ { id: 'app.lib.buildTabState.shed', message: 'Shed' }, value: 'shed' }, + { label: /* i18n */ { id: 'app.lib.buildTabState.flat', message: 'Flat' }, value: 'flat' }, + { + label: /* i18n */ { id: 'app.lib.buildTabState.gambrel', message: 'Gambrel' }, + value: 'gambrel', + }, + { label: /* i18n */ { id: 'app.lib.buildTabState.dutch', message: 'Dutch' }, value: 'dutch' }, + { + label: /* i18n */ { id: 'app.lib.buildTabState.mansard', message: 'Mansard' }, + value: 'mansard', + }, + { + label: /* i18n */ { id: 'app.lib.buildTabState.conical', message: 'Conical' }, + value: 'conical', + }, ] export function getActiveRoofFeatureId( diff --git a/biome.jsonc b/biome.jsonc index c54a71bea4..48d107a88f 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -120,6 +120,8 @@ "!**/components/ui", // Generated by `lingui compile`; source of truth is the adjacent PO file. "!packages/editor/src/i18n/locales/**/messages.ts", + // Generated by `i18n:extract` from the node definitions. + "!packages/nodes/src/i18n/definition-messages.ts", // Recorded API responses; kept byte-exact. "!**/__fixtures__", "!**/next-env.d.ts" diff --git a/i18n/literal-baseline.json b/i18n/literal-baseline.json index ec760014d6..2c702b21c9 100644 --- a/i18n/literal-baseline.json +++ b/i18n/literal-baseline.json @@ -75,45 +75,6 @@ "Set up · Pascal", "This editor is reachable but not protected yet" ], - "apps/editor/components/build-tab.tsx": [ - "Add Gate", - "Add Open Passage", - "Add to rooms", - "Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph.", - "Click a lineset to lay the line beside it.", - "Double gate", - "Features & extensions", - "Fence features", - "Follow lineset", - "Gate", - "Gate style", - "Horizontal boards", - "Hover a fence to preview. Click to place. Esc cancels. Leave room between openings.", - "Leaves", - "Liquid Line", - "MEP", - "Match fence style", - "Match fence style", - "Match fence style", - "Off", - "On", - "Open rails", - "Opening", - "Opening width (m)", - "Outdoor", - "Picket", - "Roof type", - "Rooms already create their floor and ceiling. Use these for platforms and one-off structure.", - "Search build tools and kitchen items", - "Search tools, fridge, sink…", - "Select a curved wall to match its radius and arc.", - "Single gate", - "Slab, ceiling, column…", - "Solid privacy", - "Trace a line alongside an existing lineset (F).", - "Vertical slats", - "← All build tools" - ], "apps/editor/components/create-project-button.tsx": [ "Creating…", "Failed to create project", @@ -124,16 +85,6 @@ "Made with Pascal", "This project could not be shown in 3D here. Try a browser with hardware acceleration turned on." ], - "apps/editor/components/kitchen-browser.tsx": [ - "Add to kitchen", - "Add {label}", - "Choose an item, then click to place it. Appliances include their cabinetry.", - "Find in this project · {length}", - "Find {?}", - "Kitchen cabinet", - "No matching kitchen items placed yet.", - "Select and show in scene" - ], "apps/editor/components/scene-card.tsx": [ "Actions for {name}", "Cancel", @@ -221,17 +172,6 @@ "item", "window" ], - "packages/editor/src/components/editor/floating-action-menu.tsx": [ - "Axis", - "R/T rotate", - "System", - "register", - "registers", - "run", - "runs", - "⌥ axis", - "⚠ no equipment" - ], "packages/editor/src/components/editor/floorplan-mode-coordinator.tsx": [ "Dismiss", "Switch to Expert" @@ -266,21 +206,6 @@ "Foundation", "footprint-height" ], - "packages/editor/src/components/editor/index.tsx": [ - "Back to home", - "Camera controls hint", - "Dismiss", - "Dismiss camera controls hint", - "Expand sidebar", - "Left click", - "Middle click", - "Reload editor", - "Right click", - "Scroll wheel", - "Space", - "The editor scene failed to render", - "You can retry the scene or return home without reloading the whole app shell." - ], "packages/editor/src/components/editor/join-walls-pill.tsx": [ "Join walls" ], @@ -461,127 +386,6 @@ "Tab: direction", "type a length" ], - "packages/editor/src/components/ui/action-menu/camera-actions.tsx": [ - "Orbit Left", - "Orbit Left", - "Orbit Right", - "Orbit Right", - "Top View", - "Top View" - ], - "packages/editor/src/components/ui/action-menu/control-modes.tsx": [ - "Delete", - "Select" - ], - "packages/editor/src/components/ui/action-menu/follow-pascal-pill.tsx": [ - "Resume following" - ], - "packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx": [ - "Follow Pascal: {?}" - ], - "packages/editor/src/components/ui/action-menu/furnish-tools.tsx": [ - "Appliance", - "Bathroom", - "Furniture", - "Kitchen", - "Outdoor" - ], - "packages/editor/src/components/ui/action-menu/measurement-control.tsx": [ - "Angle", - "Angular dimension", - "Arc length", - "Area", - "Center mark", - "Chord dimension", - "Continuous dimension", - "Coordinate dimensions", - "Diameter dimension", - "Distance", - "Floor plan", - "Linear dimension", - "Measure: {selectedLabel}", - "Measure: {selectedLabel}", - "Measurement options", - "Measurement type", - "Perimeter", - "Radius dimension", - "Smart", - "Volume" - ], - "packages/editor/src/components/ui/action-menu/point-ask-button.tsx": [ - "Point and ask", - "Point and ask (C)", - "Point and ask works in the 3D view" - ], - "packages/editor/src/components/ui/action-menu/structure-tools.tsx": [ - "Ceiling", - "Column", - "DWV Pipe", - "Door", - "Duct", - "Duct Fitting", - "Elevator", - "Fence", - "Gable Roof", - "HVAC Unit", - "Lineset", - "Liquid Line", - "Pipe Fitting", - "Register", - "Shelf", - "Slab", - "Spawn Point", - "Stairs", - "Trap", - "Wall", - "Window", - "Zone" - ], - "packages/editor/src/components/ui/action-menu/view-toggles.tsx": [ - "Delete guide image", - "Delete scan", - "Delete {noun}", - "Guide image settings", - "Guide image {?}", - "Guide images", - "Guide images", - "Guides", - "Guides: {?}", - "Hide reference floor", - "Hide {?}", - "No lower floor available.", - "Opacity", - "Opacity", - "Opacity", - "Opacity", - "Reference floor", - "Reference floor", - "Reference floor settings", - "Reference floor: {selectedLevelName}", - "Reference settings", - "References", - "References: {?}", - "Riser diagram", - "Scan settings", - "Scan {?}", - "Scans", - "Scans", - "Scans", - "Scans: {?}", - "Show reference floor", - "Show {?}", - "Upload GLB meshes as scan references or blueprint images as guide references.", - "Upload GLB meshes as scan references or blueprint images as guide references.", - "Upload GLB meshes as scan references or blueprint images as guide references.", - "Upload GLB meshes as scan references or blueprint images as guide references.", - "Upload scan or guide image", - "below", - "guide image", - "on this level", - "on this level", - "on this level", - "scan" - ], "packages/editor/src/components/ui/command-palette/editor-commands.tsx": [ "Add Level", "Ceiling Tool", @@ -728,97 +532,6 @@ "This floor stands at grade", "Unit" ], - "packages/editor/src/components/ui/helpers/building-helper.tsx": [ - "Cancel", - "Place building", - "Rotate" - ], - "packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx": [ - "Cancel placement", - "Continuation — click or press C to cycle", - "Drag to draw fence", - "Fence type — click or press T to switch between straight, curved and freehand", - "Fewer shortcuts", - "Finish curve (or double-click)", - "Grid step — click or tap Ctrl to cycle", - "Grid: {?} m", - "Hover a painted surface to erase", - "Hover a surface to paint", - "Hover a surface to pick its material", - "More shortcuts", - "Place gate on a fence", - "Place passage on a fence", - "Select a material to paint", - "Snapping mode — click or press Shift to cycle", - "Snapping: {?}", - "Straight continuation is unavailable for curved or freehand fences", - "Straight fence continuation — click or press C to toggle", - "Straight: Continuous", - "Straight: Single", - "{verb} scope — click or press Shift to cycle" - ], - "packages/editor/src/components/ui/helpers/helper-manager.tsx": [ - "Add point", - "Add point · click the first to close", - "Add point · click the first to close", - "Add point · click the first to close", - "Brush size", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel", - "Cancel picking", - "Cancel stroke", - "Done", - "Done", - "Draw the mezzanine", - "Draw the opening", - "Draw the terrace", - "Exit smart measure", - "Finish", - "Finish", - "Finish at the edge", - "Free move", - "Free move · slide doors and windows", - "Hold to pick a material", - "Inspect surface dimensions", - "Paint with this material", - "Pick target height", - "Pin measurement lens", - "Place", - "Place inside the room", - "Press anywhere, drag to the opposite corner", - "Raise or lower", - "Remove a painted part, or reset a surface", - "Remove last point", - "Remove last point", - "Remove last point", - "Remove last point", - "Resize", - "Resize", - "Rotate the selection ±45°", - "Rotate ±45°", - "Rotate ±45°", - "Set one corner, then the opposite", - "Set one corner, then the opposite" - ], - "packages/editor/src/components/ui/helpers/item-helper.tsx": [ - "Cancel", - "Force place", - "Place", - "Rotate" - ], - "packages/editor/src/components/ui/helpers/registered-tool-helper.tsx": [ - "Guided constraints bypassed" - ], "packages/editor/src/components/ui/item-catalog/catalog-items.tsx": [ "Intensity", "Intensity", diff --git a/i18n/pseudo-surfaces.ts b/i18n/pseudo-surfaces.ts index 0ee1e8943e..3f73feb41e 100644 --- a/i18n/pseudo-surfaces.ts +++ b/i18n/pseudo-surfaces.ts @@ -85,4 +85,64 @@ export const surfaces: PseudoSurface[] = [ steps: (page) => openInEditor(page, 'More views'), scope: '[role="menu"]', }, + { name: 'build-tab', path: editorPath, steps: openEditor, scope: '[data-surface="build-tab"]' }, + { + name: 'tool-dock', + path: editorPath, + steps: openEditor, + scope: '[data-surface="tool-dock"]', + }, + { + name: 'camera-hint', + path: editorPath, + steps: openEditor, + scope: `section[aria-label="${pseudoLocalize('Camera controls hint')}"]`, + }, + { + name: 'wall-tool-hud', + path: editorPath, + steps: async (page) => { + await openEditor(page) + await page.locator('[data-build-tool="room-rectangle"]').click() + await page.mouse.move(900, 500) + await page.waitForTimeout(800) + }, + scope: '[data-hud-card]', + }, + { + name: 'door-tool-hud', + path: editorPath, + steps: async (page) => { + await openEditor(page) + await page.locator('[data-build-tool="door"]').click() + await page.mouse.move(900, 500) + await page.waitForTimeout(800) + }, + scope: '[data-hud-card]', + }, + { + name: 'measure-menu', + path: editorPath, + steps: (page) => openInEditor(page, 'Measurement options'), + scope: '[role="menu"], [role="dialog"]', + }, + { + name: 'references-menu', + path: editorPath, + steps: (page) => openInEditor(page, 'Reference settings'), + scope: '[role="dialog"]', + }, + { + name: 'mep-tools', + path: editorPath, + steps: async (page) => { + await openEditor(page) + await page.locator('section[data-build-group="advanced"] > button').click() + await page.locator('[data-build-tool="mep"]').click() + await page.waitForTimeout(600) + }, + scope: '[data-surface="build-tab"]', + // A kind registered by the external @pascal-app/plugin-streetscape, which owns its copy. + data: ['Road'], + }, ] diff --git a/packages/editor/src/components/editor/floating-action-menu.tsx b/packages/editor/src/components/editor/floating-action-menu.tsx index 1e2dc62162..d305412157 100644 --- a/packages/editor/src/components/editor/floating-action-menu.tsx +++ b/packages/editor/src/components/editor/floating-action-menu.tsx @@ -24,6 +24,7 @@ import { sceneRegistry, summarizeSystemFor, useLiveNodeOverrides, + usePascalI18n, useScene, type WallNode, } from '@pascal-app/core' @@ -296,6 +297,7 @@ function getHeightPillDimensions(node: WallNode | FenceNode): { } export function FloatingActionMenu() { + const i18n = usePascalI18n() const reducedMotion = useReducedMotion() const selectedIds = useViewer((s) => s.selection.selectedIds) const updateNode = useScene((s) => s.updateNode) @@ -749,16 +751,21 @@ export function FloatingActionMenu() { {hasAxisCycling(node.type) ? (
- Axis {rotationAxis.toUpperCase()} + {i18n._({ id: 'editor.floatingActionMenu.axis', message: 'Axis' })}{' '} + {rotationAxis.toUpperCase()} · - R/T rotate + + {i18n._({ id: 'editor.floatingActionMenu.rTRotate', message: 'R/T rotate' })} + · - ⌥ axis + + {i18n._({ id: 'editor.floatingActionMenu.axis2', message: '⌥ axis' })} +
) : null}
@@ -788,6 +795,7 @@ function SystemSummaryPill({ nodeId: AnyNodeId unit: 'metric' | 'imperial' }) { + const i18n = usePascalI18n() const allNodes = useScene((s) => s.nodes) const summary = useMemo(() => summarizeSystemFor(nodeId, allNodes), [nodeId, allNodes]) if (!summary) return null @@ -796,7 +804,7 @@ function SystemSummaryPill({ {summary.systems.length > 0 ? summary.systems.map((sys) => sys[0]!.toUpperCase() + sys.slice(1)).join(' + ') - : 'System'} + : i18n._({ id: 'editor.floatingActionMenu.system', message: 'System' })} {summary.runCount > 0 ? ( <> @@ -804,8 +812,12 @@ function SystemSummaryPill({ · - {formatMeasurement(summary.runLengthM, unit, metricNotation)} · {summary.runCount}{' '} - {summary.runCount === 1 ? 'run' : 'runs'} + {formatMeasurement(summary.runLengthM, unit, metricNotation)} ·{' '} + {i18n._({ + id: 'editor.floatingActionMenu.runCount', + message: '{count, plural, one {# run} other {# runs}}', + values: { count: summary.runCount }, + })} ) : null} @@ -815,7 +827,11 @@ function SystemSummaryPill({ · - {summary.terminalCount} {summary.terminalCount === 1 ? 'register' : 'registers'} + {i18n._({ + id: 'editor.floatingActionMenu.registerCount', + message: '{count, plural, one {# register} other {# registers}}', + values: { count: summary.terminalCount }, + })} ) : null} @@ -824,7 +840,9 @@ function SystemSummaryPill({ · - ⚠ no equipment + + {i18n._({ id: 'editor.floatingActionMenu.noEquipment', message: '⚠ no equipment' })} + )}
diff --git a/packages/editor/src/components/editor/index.tsx b/packages/editor/src/components/editor/index.tsx index 79f7df8212..56e50c9fca 100644 --- a/packages/editor/src/components/editor/index.tsx +++ b/packages/editor/src/components/editor/index.tsx @@ -9,8 +9,10 @@ import { getSceneMaterialIdFromRef, initSpaceDetectionSync, initSpatialGridSync, + type MessageDescriptor, PascalI18nProvider, spatialGridManager, + usePascalI18n, useScene, } from '@pascal-app/core' import { @@ -44,6 +46,7 @@ import { type SaveStatus, useAutoSave } from '../../hooks/use-auto-save' import { useKeyboard } from '../../hooks/use-keyboard' import { useIsMobile } from '../../hooks/use-mobile' import { useSaveShortcut } from '../../hooks/use-save-shortcut' +import { type HINT_KEY_NAMES, toolHintKey, toolHintKeyDescriptor } from '../../i18n/node-messages' import { useCeilingEditSessionOwner } from '../../lib/ceiling-edit-session' import { showsWholeBuilding, useEditorLevelDisplay } from '../../lib/editor-level-display' import { isSceneView } from '../../lib/editor-views' @@ -320,12 +323,22 @@ export interface EditorProps { } function EditorSceneCrashFallback() { + const i18n = usePascalI18n() return (
-

The editor scene failed to render

+

+ {i18n._({ + id: 'editor.theEditorSceneFailedToRender', + message: 'The editor scene failed to render', + })} +

- You can retry the scene or return home without reloading the whole app shell. + {i18n._({ + id: 'editor.youCanRetryTheSceneOr', + message: + 'You can retry the scene or return home without reloading the whole app shell.', + })}

- Back to home + {i18n._({ id: 'editor.backToHome', message: 'Back to home' })}
@@ -350,6 +363,7 @@ function EditorSceneCrashFallback() { // ── Sidebar slot: in-flow, resizable, collapses to a grab strip ────────────── function SidebarSlot({ children }: { children: ReactNode }) { + const i18n = usePascalI18n() const width = useSidebarStore((s) => s.width) const isCollapsed = useSidebarStore((s) => s.isCollapsed) const setIsCollapsed = useSidebarStore((s) => s.setIsCollapsed) @@ -421,7 +435,7 @@ function SidebarSlot({ children }: { children: ReactNode }) {
) : ( children @@ -499,26 +513,29 @@ const CAMERA_CONTROL_HINTS: CameraControlHint[] = [ { action: 'Zoom', keys: [{ value: 'Scroll' }] }, ] -const CAMERA_SHORTCUT_KEY_META: Record = { +const CAMERA_SHORTCUT_KEY_META: Record< + string, + { icon?: string; label: MessageDescriptor; text?: string } +> = { 'Left click': { icon: 'ph:mouse-left-click-fill', - label: 'Left click', + label: hintKeyName('Left click'), }, 'Middle click': { icon: 'qlementine-icons:mouse-middle-button-16', - label: 'Middle click', + label: hintKeyName('Middle click'), }, 'Right click': { icon: 'ph:mouse-right-click-fill', - label: 'Right click', + label: hintKeyName('Right click'), }, Scroll: { icon: 'qlementine-icons:mouse-middle-button-16', - label: 'Scroll wheel', + label: hintKeyName('Scroll wheel'), }, Space: { icon: 'lucide:space', - label: 'Space', + label: hintKeyName('Space'), }, } @@ -549,8 +566,21 @@ function writeCameraControlsHintDismissed(dismissed: boolean) { } catch {} } +/** Key names shared with the tool HUD (`editor.toolHint.key.*`). */ +function hintKeyName(key: (typeof HINT_KEY_NAMES)[number]): MessageDescriptor { + return toolHintKeyDescriptor(key) ?? { id: key, message: key } +} + +const CAMERA_HINT_ACTION_LABELS: Record = { + Pan: /* i18n */ { id: 'editor.cameraHint.pan', message: 'Pan' }, + Rotate: /* i18n */ { id: 'editor.cameraHint.rotate', message: 'Rotate' }, + Zoom: /* i18n */ { id: 'editor.cameraHint.zoom', message: 'Zoom' }, +} + function InlineShortcutKey({ shortcutKey }: { shortcutKey: ShortcutKey }) { - const meta = CAMERA_SHORTCUT_KEY_META[shortcutKey.value] + const i18n = usePascalI18n() + const entry = CAMERA_SHORTCUT_KEY_META[shortcutKey.value] + const meta = entry ? { ...entry, label: i18n._(entry.label) } : undefined if (meta?.icon) { return ( @@ -568,7 +598,7 @@ function InlineShortcutKey({ shortcutKey }: { shortcutKey: ShortcutKey }) { return ( - {meta?.text ?? shortcutKey.value} + {meta?.text ?? toolHintKey(shortcutKey.value, i18n)} ) } @@ -587,10 +617,11 @@ function ShortcutSequence({ keys }: { keys: ShortcutKey[] }) { } function CameraControlHintItem({ hint }: { hint: CameraControlHint }) { + const i18n = usePascalI18n() return (
- {hint.action} + {i18n._(CAMERA_HINT_ACTION_LABELS[hint.action])}
@@ -612,6 +643,7 @@ function ViewerCanvasControlsHint({ belowTopMenu?: boolean onDismiss: () => void }) { + const i18n = usePascalI18n() const all = CAMERA_CONTROL_HINTS // A host teaching one gesture at a time narrows this to the one it is asking // for, and to nothing once it is done. Null — the default — is all of them. @@ -631,7 +663,7 @@ function ViewerCanvasControlsHint({ style={belowTopMenu ? { top: TOP_MENU_CLEARANCE } : undefined} >
diff --git a/packages/editor/src/components/tools/shared/cursor-sphere.tsx b/packages/editor/src/components/tools/shared/cursor-sphere.tsx index ea01004ef2..72293191e4 100644 --- a/packages/editor/src/components/tools/shared/cursor-sphere.tsx +++ b/packages/editor/src/components/tools/shared/cursor-sphere.tsx @@ -1,3 +1,4 @@ +import { type MessageDescriptor, usePascalI18n } from '@pascal-app/core' import { Html } from '@react-three/drei' import type { ThreeElements } from '@react-three/fiber' import { forwardRef } from 'react' @@ -51,6 +52,7 @@ export const CursorSphere = forwardRef(function Cursor }, ref, ) { + const i18n = usePascalI18n() const tool = useEditor((s) => s.tool) const mode = useEditor((s) => s.mode) const catalogCategory = useEditor((s) => s.catalogCategory) @@ -62,7 +64,8 @@ export const CursorSphere = forwardRef(function Cursor const wallMode = useEditor((s) => s.continuationByContext.wall) // Find the icon for the current tool — the wall shows its Rooms variant. - let activeToolConfig: { label: string; iconSrc: string } | null | undefined = null + let activeToolConfig: { label: string | MessageDescriptor; iconSrc: string } | null | undefined = + null if (mode === 'build' && tool) { if (tool === 'wall') { activeToolConfig = wallCursorIcon(wallMode) @@ -162,7 +165,11 @@ export const CursorSphere = forwardRef(function Cursor {tooltipContent || ( // eslint-disable-next-line @next/next/no-img-element {activeToolConfig!.label} { triggerSFX('sfx:menu-click') diff --git a/packages/editor/src/components/ui/action-menu/camera-actions.tsx b/packages/editor/src/components/ui/action-menu/camera-actions.tsx index 3397c6d77f..405f552729 100644 --- a/packages/editor/src/components/ui/action-menu/camera-actions.tsx +++ b/packages/editor/src/components/ui/action-menu/camera-actions.tsx @@ -1,6 +1,6 @@ 'use client' -import { emitter } from '@pascal-app/core' +import { emitter, usePascalI18n } from '@pascal-app/core' import Image from 'next/image' import useEditor from '../../../store/use-editor' import { visibleScene } from '../../../store/view-layout' @@ -8,6 +8,7 @@ import { ActionButton } from './action-button' import { FollowPascalToggle } from './follow-pascal-toggle' export function CameraActions({ hideOrbit = false }: { hideOrbit?: boolean }) { + const i18n = usePascalI18n() // Orbit stays useful in 2D-only (it spins the synced floorplan view), but // top view only tilts the hidden 3D camera — pointless without the canvas. const is2dOnly = useEditor((s) => visibleScene(s) === '2d') @@ -31,13 +32,13 @@ export function CameraActions({ hideOrbit = false }: { hideOrbit?: boolean }) { {/* Orbit CCW */} Orbit Left Orbit Right Top View state.mode) const selectionTool = useEditor((state) => state.floorplanSelectionTool) const armToolMode = useEditor((state) => state.armToolMode) @@ -94,7 +98,7 @@ export function ControlModes() { // tour at this button. Nothing here reads it. data-guide-target={c.id === 'select' ? 'mode-select' : undefined} isActive={isActive} - label={c.label} + label={i18n._(c.label)} onClick={() => handleClick(c.id)} shortcut={c.shortcut} size="icon" @@ -102,7 +106,7 @@ export function ControlModes() { > {c.imageSrc ? ( {c.label} state.on && state.paused && state.building) const resume = useFollowPascal((state) => state.resume) const reduced = useReducedMotion() @@ -24,7 +26,7 @@ export function FollowPascalPill() { transition={reduced ? { duration: 0.12 } : { type: 'spring', bounce: 0, duration: 0.3 }} type="button" > - Resume following + {i18n._({ id: 'editor.actionMenu.followPascalPill.resumeFollowing', message: 'Resume following' })} ) : null} diff --git a/packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx b/packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx index a86eb23bcf..f1fc7f1530 100644 --- a/packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +++ b/packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx @@ -1,5 +1,6 @@ 'use client' +import { usePascalI18n } from '@pascal-app/core' import { Video } from 'lucide-react' import { cn } from '../../../lib/utils' import useFollowPascal from '../../../store/use-follow-pascal' @@ -13,6 +14,7 @@ export function FollowPascalToggle({ className?: string tooltipClassName?: string }) { + const i18n = usePascalI18n() const on = useFollowPascal((state) => state.on) const setOn = useFollowPascal((state) => state.setOn) return ( @@ -24,7 +26,11 @@ export function FollowPascalToggle({ : 'hover:bg-black/4 hover:text-violet-600 dark:hover:text-violet-300', className, )} - label={`Follow Pascal: ${on ? 'On' : 'Off'}`} + label={ + on + ? i18n._({ id: 'editor.actionMenu.followPascalToggle.on', message: 'Follow Pascal: On' }) + : i18n._({ id: 'editor.actionMenu.followPascalToggle.off', message: 'Follow Pascal: Off' }) + } onClick={() => setOn(!on)} size="icon" tooltipClassName={tooltipClassName} diff --git a/packages/editor/src/components/ui/action-menu/furnish-tools.tsx b/packages/editor/src/components/ui/action-menu/furnish-tools.tsx index a3c629bdf3..0deee141a5 100644 --- a/packages/editor/src/components/ui/action-menu/furnish-tools.tsx +++ b/packages/editor/src/components/ui/action-menu/furnish-tools.tsx @@ -1,16 +1,17 @@ +import type { MessageDescriptor } from '@pascal-app/core' import type { CatalogCategory } from './../../../store/use-editor' export type FurnishToolConfig = { id: 'item' iconSrc: string - label: string + label: MessageDescriptor catalogCategory: CatalogCategory } export const furnishTools: FurnishToolConfig[] = [ - { id: 'item', iconSrc: '/icons/couch.webp', label: 'Furniture', catalogCategory: 'furniture' }, - { id: 'item', iconSrc: '/icons/appliance.webp', label: 'Appliance', catalogCategory: 'appliance' }, - { id: 'item', iconSrc: '/icons/kitchen.webp', label: 'Kitchen', catalogCategory: 'kitchen' }, - { id: 'item', iconSrc: '/icons/bathroom.webp', label: 'Bathroom', catalogCategory: 'bathroom' }, - { id: 'item', iconSrc: '/icons/tree.webp', label: 'Outdoor', catalogCategory: 'outdoor' }, + { id: 'item', iconSrc: '/icons/couch.webp', label: /* i18n */ { id: 'editor.actionMenu.furnishTools.furniture', message: 'Furniture' }, catalogCategory: 'furniture' }, + { id: 'item', iconSrc: '/icons/appliance.webp', label: /* i18n */ { id: 'editor.actionMenu.furnishTools.appliance', message: 'Appliance' }, catalogCategory: 'appliance' }, + { id: 'item', iconSrc: '/icons/kitchen.webp', label: /* i18n */ { id: 'editor.actionMenu.furnishTools.kitchen', message: 'Kitchen' }, catalogCategory: 'kitchen' }, + { id: 'item', iconSrc: '/icons/bathroom.webp', label: /* i18n */ { id: 'editor.actionMenu.furnishTools.bathroom', message: 'Bathroom' }, catalogCategory: 'bathroom' }, + { id: 'item', iconSrc: '/icons/tree.webp', label: /* i18n */ { id: 'editor.actionMenu.furnishTools.outdoor', message: 'Outdoor' }, catalogCategory: 'outdoor' }, ] diff --git a/packages/editor/src/components/ui/action-menu/index.tsx b/packages/editor/src/components/ui/action-menu/index.tsx index 5eb9312b89..0e85e34d3b 100644 --- a/packages/editor/src/components/ui/action-menu/index.tsx +++ b/packages/editor/src/components/ui/action-menu/index.tsx @@ -66,6 +66,7 @@ export function ActionMenu({ state.mode) @@ -98,11 +102,13 @@ export function MeasurementControl() { : isSmartActive ? ScanSearch : selectedOption.icon - const selectedLabel = isConstructionDimensionActive - ? (activeConstructionDimensionOption?.label ?? 'Linear dimension') - : isSmartActive - ? 'Smart' - : selectedOption.label + const selectedLabel = i18n._( + isConstructionDimensionActive + ? (activeConstructionDimensionOption ?? constructionDimensionOptions[0]).label + : isSmartActive + ? measurementMenuOptions[0].label + : selectedOption.label, + ) const activateMeasurement = (kind: CreatableMeasurementKind) => { setLastMeasurementKind(kind) @@ -143,7 +149,7 @@ export function MeasurementControl() {
-
+
{measurementMenuOptions.map((option) => { const OptionIcon = option.icon const isSmart = option.kind === 'smart' @@ -213,7 +219,7 @@ export function MeasurementControl() { type="button" >
) : (
- {REFERENCES_EMPTY_TEXT} + {i18n._(REFERENCES_EMPTY_TEXT)}
)}
@@ -351,6 +362,7 @@ function GuidesControl() { // ── Scans toggle + dropdown ───────────────────────────────────────────────── function ScansControl() { + const i18n = usePascalI18n() const popupSide = useActionMenuPopupSide() const showScans = useViewer((state) => state.showScans) const setShowScans = useViewer((state) => state.setShowScans) @@ -392,13 +404,17 @@ function ScansControl() { ? 'bg-black/9 hover:bg-black/9 dark:bg-white/15' : 'opacity-60 grayscale hover:bg-black/4 hover:opacity-100 hover:grayscale-0', )} - label={`Scans: ${showScans ? 'Visible' : 'Hidden'}`} + label={ + showScans + ? i18n._({ id: 'editor.actionMenu.viewToggles.scansVisible', message: 'Scans: Visible' }) + : i18n._({ id: 'editor.actionMenu.viewToggles.scansHidden', message: 'Scans: Hidden' }) + } onClick={() => setShowScans(!showScans)} size="icon" variant="ghost" >
- Scans + {i18n._({ {scans.length} @@ -409,7 +425,7 @@ function ScansControl() {
handleOpacityChange(scan.id, value)} @@ -515,7 +532,7 @@ function ScansControl() {
) : (
- {REFERENCES_EMPTY_TEXT} + {i18n._(REFERENCES_EMPTY_TEXT)}
)}
@@ -532,7 +549,7 @@ function ScansControl() { function ReferenceListSection({ title, iconSrc, - noun, + kind, emptyText, nodes, show, @@ -541,13 +558,14 @@ function ReferenceListSection({ }: { title: string iconSrc: string - noun: string - emptyText: string + kind: 'scan' | 'guide' + emptyText: MessageDescriptor nodes: (GuideNode | ScanNode)[] show: boolean setShow: (show: boolean) => void onError: (message: string | null) => void }) { + const i18n = usePascalI18n() const setSelection = useViewer((state) => state.setSelection) const updateNode = useScene((state) => state.updateNode) const deleteNode = useScene((state) => state.deleteNode) @@ -574,13 +592,22 @@ function ReferenceListSection({

{title}

{hasItems && (

- {nodes.length} {noun} - {nodes.length !== 1 ? 's' : ''} on this level + {kind === 'scan' + ? i18n._({ id: 'editor.actionMenu.viewToggles.scanCount', message: '{count, plural, one {# scan on this level} other {# scans on this level}}', values: { count: nodes.length } }) + : i18n._({ id: 'editor.actionMenu.viewToggles.guideCount', message: '{count, plural, one {# guide image on this level} other {# guide images on this level}}', values: { count: nodes.length } })}

)}
@@ -652,7 +686,7 @@ function ReferenceListSection({
) : (
- {emptyText} + {i18n._(emptyText)}
)}
@@ -660,6 +694,7 @@ function ReferenceListSection({ } function ReferencesControl() { + const i18n = usePascalI18n() const popupSide = useActionMenuPopupSide() const showScans = useViewer((state) => state.showScans) const setShowScans = useViewer((state) => state.setShowScans) @@ -689,14 +724,18 @@ function ReferencesControl() { ? 'bg-black/9 hover:bg-black/9 dark:bg-white/15' : 'opacity-60 grayscale hover:bg-black/4 hover:opacity-100 hover:grayscale-0', )} - label={`References: ${anyVisible ? 'Visible' : 'Hidden'}`} + label={ + anyVisible + ? i18n._({ id: 'editor.actionMenu.viewToggles.referencesVisible', message: 'References: Visible' }) + : i18n._({ id: 'editor.actionMenu.viewToggles.referencesHidden', message: 'References: Hidden' }) + } onClick={toggleAll} size="icon" variant="ghost" >
References @@ -709,7 +748,7 @@ function ReferencesControl() { ) })}
) : (
- No lower floor available. + {i18n._({ id: 'editor.actionMenu.viewToggles.noLowerFloorAvailable', message: 'No lower floor available.' })}
)}
@@ -926,6 +966,7 @@ function ReferenceFloorControl() { // ── Riser diagram control ──────────────────────────────────────────────────── function RiserControl() { + const i18n = usePascalI18n() const isRiserOpen = useEditor((state) => state.isRiserOpen) const toggleRiserOpen = useEditor((state) => state.toggleRiserOpen) @@ -936,7 +977,7 @@ function RiserControl() { ? 'bg-black/9 hover:bg-black/9 dark:bg-white/15' : 'opacity-60 grayscale hover:bg-black/4 hover:opacity-100 hover:grayscale-0', )} - label="Riser diagram" + label={i18n._({ id: 'editor.actionMenu.viewToggles.riserDiagram', message: 'Riser diagram' })} onClick={toggleRiserOpen} size="icon" variant="ghost" diff --git a/packages/editor/src/components/ui/helpers/building-helper.tsx b/packages/editor/src/components/ui/helpers/building-helper.tsx index 5f2cc81cd9..b41b007ced 100644 --- a/packages/editor/src/components/ui/helpers/building-helper.tsx +++ b/packages/editor/src/components/ui/helpers/building-helper.tsx @@ -1,3 +1,4 @@ +import { usePascalI18n } from '@pascal-app/core' import type { HudTitle } from '../../../lib/hud-title' import { ContextualHelperPanel } from './contextual-helper-panel' @@ -9,13 +10,14 @@ interface BuildingHelperProps { // Rotate is one hint with both keys (R / T) — never two separate // counterclockwise / clockwise rows — to match every other placement helper. export function BuildingHelper({ showRotate, title = null }: BuildingHelperProps) { + const i18n = usePascalI18n() return ( ) diff --git a/packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx b/packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx index 70cb4f5b55..50e46073f4 100644 --- a/packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +++ b/packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx @@ -1,3 +1,4 @@ +import { formatLength, type MessageDescriptor, usePascalI18n } from '@pascal-app/core' import { Icon } from '@iconify/react' import type { ToolHint } from '@pascal-app/core' import { Fragment, useEffect, useId, useState, useSyncExternalStore } from 'react' @@ -6,6 +7,7 @@ import { type ContinuationContext, } from '../../../lib/continuation' import type { ContextualShortcutHint } from '../../../lib/contextual-help' +import { hintText, nodeLabel, toolHintChipLabel, toolHintLabel } from '../../../i18n/node-messages' import type { HudTitle } from '../../../lib/hud-title' import { hasActivePaintMaterial } from '../../../lib/material-paint' import { usePaintRegionMode } from '../../../lib/paint-region-mode' @@ -169,10 +171,10 @@ const SNAPPING_MODE_ICONS = { } as const const SNAPPING_MODE_LABELS = { - grid: 'Grid', - lines: 'Lines', - angles: 'Angles', - off: 'Off', + grid: /* i18n */ { id: 'editor.helpers.contextualHelperPanel.snappingGrid', message: 'Snapping: Grid' }, + lines: /* i18n */ { id: 'editor.helpers.contextualHelperPanel.snappingLines', message: 'Snapping: Lines' }, + angles: /* i18n */ { id: 'editor.helpers.contextualHelperPanel.snappingAngles', message: 'Snapping: Angles' }, + off: /* i18n */ { id: 'editor.helpers.contextualHelperPanel.snappingOff', message: 'Snapping: Off' }, } as const const GRID_SNAP_STEPS: GridSnapStep[] = [0.5, 0.25, 0.1, 0.05] @@ -185,6 +187,7 @@ function nextGridSnapStep(step: GridSnapStep): GridSnapStep { // The active interaction's snapping controls, scoped to its context (wall / item // / polygon) so each action shows only the modes that make sense for it. function SnappingChips({ context }: { context: SnapContext }) { + const i18n = usePascalI18n() const snappingMode = useEditor((s) => s.snappingModeByContext[context]) const setSnappingMode = useEditor((s) => s.setSnappingMode) const gridSnapStep = useEditor((s) => s.gridSnapStep) @@ -195,28 +198,36 @@ function SnappingChips({ context }: { context: SnapContext }) { return ( <> { setSnappingMode(context, cycleSnappingModeIn(context, snappingMode)) sfxEmitter.emit('sfx:grid-snap') }} shortcut="Shift" - tooltip="Snapping mode — click or press Shift to cycle" + tooltip={i18n._({ id: 'editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift', message: 'Snapping mode — click or press Shift to cycle' })} /> {gridActive ? ( { setGridSnapStep(nextGridSnapStep(gridSnapStep)) sfxEmitter.emit('sfx:grid-snap') }} shortcut="Ctrl" - tooltip="Grid step — click or tap Ctrl to cycle" + tooltip={i18n._({ id: 'editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl', message: 'Grid step — click or tap Ctrl to cycle' })} /> ) : null} @@ -229,8 +240,12 @@ function SnappingChips({ context }: { context: SnapContext }) { // the tool itself) cycles it. function ToolHintChipRow({ hint }: { hint: ToolHint & { chip: NonNullable } }) { const { chip } = hint + const i18n = usePascalI18n() const value = useSyncExternalStore(chip.subscribe, chip.value, chip.value) - const label = chip.labels[value] ?? hint.label + const english = chip.labels[value] + const label = english + ? toolHintChipLabel(value, english, i18n) + : toolHintLabel(hint.label, i18n) return ( ) } function ContinuationChip({ context }: { context: ContinuationContext }) { + const i18n = usePascalI18n() const mode = useEditor((s) => s.getContinuation(context)) const cycleContinuation = useEditor((s) => s.cycleContinuation) const profile = CONTINUATION_PROFILES[context] - const label = profile.labels[mode] ?? mode + const descriptor = profile.labels[mode] + const label = descriptor ? i18n._(descriptor) : mode const icon = profile.icons[mode] ?? 'lucide:repeat' return ( cycleContinuation(context)} shortcut="C" - tooltip="Continuation — click or press C to cycle" + tooltip={i18n._({ id: 'editor.helpers.contextualHelperPanel.continuationClickOrPressCTo', message: 'Continuation — click or press C to cycle' })} /> ) } function FenceContinuationChips() { + const i18n = usePascalI18n() const mode = useEditor((s) => s.getContinuation('fence')) const setContinuation = useEditor((s) => s.setContinuation) const curveStarted = useFenceCurveDraft((s) => s.pointCount > 0) @@ -287,13 +309,13 @@ function FenceContinuationChips() { label={typeLabel} onClick={() => setContinuation('fence', nextType)} shortcut="T" - tooltip="Fence type — click or press T to switch between straight, curved and freehand" + tooltip={i18n._({ id: 'editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT', message: 'Fence type — click or press T to switch between straight, curved and freehand' })} /> {/* Curved fences are committed by a closing gesture rather than per-click, @@ -312,7 +334,7 @@ function FenceContinuationChips() { {(isCurved || isFreehand) && curveStarted ? ( ) : null} @@ -340,6 +362,7 @@ function PaintNotice() { // derived `paintHover` (scopes + labels), so it works for any kind without a // per-target table. function PaintScopeChip() { + const i18n = usePascalI18n() // What the cursor is over (that's what the next click paints). `null` when not // over a paintable surface — including an item with no slots. const paintHover = useEditor((s) => s.paintHover) @@ -354,7 +377,7 @@ function PaintScopeChip() { // Nothing to paint with yet (no material picked, not erasing) → the first step // is choosing a material, so say that before anything about scope or hovering. if (!(paintEraser || picking || hasActivePaintMaterial(activePaintMaterial))) { - return + return } // Not over anything paintable → guide the user to hover, still teaching Shift. @@ -364,10 +387,10 @@ function PaintScopeChip() { icon="lucide:mouse-pointer-click" label={ picking - ? 'Hover a surface to pick its material' + ? i18n._({ id: 'editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts', message: 'Hover a surface to pick its material' }) : paintEraser - ? 'Hover a painted surface to erase' - : 'Hover a surface to paint' + ? i18n._({ id: 'editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase', message: 'Hover a painted surface to erase' }) + : i18n._({ id: 'editor.helpers.contextualHelperPanel.hoverASurfaceToPaint', message: 'Hover a surface to paint' }) } shortcut={picking ? undefined : 'Shift'} /> @@ -397,17 +420,23 @@ function PaintScopeChip() { label={`${verb}: ${paintScopeLabel(effective, paintHover)}`} onClick={() => cyclePaintScope()} shortcut="Shift" - tooltip={`${verb} scope — click or press Shift to cycle`} + tooltip={i18n._({ id: 'editor.helpers.contextualHelperPanel.verbScopeClickOrPressShift', message: '{verb} scope — click or press Shift to cycle', values: { verb } })} /> ) } // The tool in hand: its icon, name and arming key, over a hairline. function HudHeader({ title }: { title: HudTitle }) { + const i18n = usePascalI18n() + const kind = title.kind + ? nodeLabel(title.kind.kind, title.kind.english, i18n).toLocaleLowerCase(i18n.getLocale()) + : undefined + const descriptor: MessageDescriptor = { ...title.label, values: { ...title.label.values, kind } } + const label = i18n._(descriptor) return (
{title.icon ? ( @@ -415,7 +444,7 @@ function HudHeader({ title }: { title: HudTitle }) { ) : null} - {title.label} + {label} {title.shortcut ? : null}
@@ -430,6 +459,7 @@ const isEscHint = (hint: ContextualShortcutHint) => const isNoteHint = (hint: ContextualShortcutHint) => hint.keys.length === 1 && hint.keys[0] === '!' function HintRow({ hint }: { hint: ContextualShortcutHint }) { + const i18n = usePascalI18n() return (
@@ -440,17 +470,20 @@ function HintRow({ hint }: { hint: ContextualShortcutHint }) { hint.active ? 'font-medium text-foreground dark:text-white' : 'text-muted-foreground', )} > - {hint.label} + {hintText(hint.label, i18n)}
{hint.subtitle ? ( -
{hint.subtitle}
+
+ {hintText(hint.subtitle, i18n)} +
) : null}
) } -const hintKey = (hint: ContextualShortcutHint) => `${hint.keys.join('+')}:${hint.label}` +const hintKey = (hint: ContextualShortcutHint) => + `${hint.keys.join('+')}:${typeof hint.label === 'string' ? hint.label : hint.label.id}` export function ContextualHelperPanel({ hints, @@ -475,6 +508,7 @@ export function ContextualHelperPanel({ // A warning about what is in hand (a floor item in a door's way), in the "!" row. notice?: string | null }) { + const i18n = usePascalI18n() const inStack = useInRightStack() const [showAllHints, setShowAllHints] = useState(false) const hintsId = useId() @@ -486,8 +520,8 @@ export function ContextualHelperPanel({ if (fenceFeature === 'gate' || fenceFeature === 'opening') return (
{title ? : null} - - + +
) if (hints.length === 0 && !hasChips && !notice) return null @@ -518,7 +552,7 @@ export function ContextualHelperPanel({ onClick={() => setShowAllHints((value) => !value)} type="button" > - {showAllHints ? 'Fewer shortcuts' : 'More shortcuts'} + {showAllHints ? i18n._({ id: 'editor.helpers.contextualHelperPanel.fewerShortcuts', message: 'Fewer shortcuts' }) : i18n._({ id: 'editor.helpers.contextualHelperPanel.moreShortcuts', message: 'More shortcuts' })} ) : null} {notice ? : null} diff --git a/packages/editor/src/components/ui/helpers/helper-manager.test.tsx b/packages/editor/src/components/ui/helpers/helper-manager.test.tsx index 8e961a9f20..2c678b3581 100644 --- a/packages/editor/src/components/ui/helpers/helper-manager.test.tsx +++ b/packages/editor/src/components/ui/helpers/helper-manager.test.tsx @@ -5,7 +5,7 @@ import { snapContextOf } from '../../../lib/snapping-mode' import { cornerHintRows } from '../../../store/use-corner-snap-hint' import { TooltipProvider } from '../primitives/tooltip' import { ContextualHelperPanel } from './contextual-helper-panel' -import { ROOM_DIVIDE_HINTS } from './helper-manager' +import { mezzanineHints, openingHints, ROOM_DIVIDE_HINTS } from './helper-manager' describe('Divide HUD', () => { test('uses the wall draft snapping context', () => { @@ -28,7 +28,7 @@ describe('Divide HUD', () => { , ) expect(html).toContain('Snapping: Grid') - expect(html).toContain('Grid: 0.50 m') + expect(html).toContain('Grid: 0.50\u00a0m') for (const label of ['Add point', 'More shortcuts', 'Cancel']) expect(html).toContain(label) expect(html).toContain('aria-expanded="false"') @@ -116,6 +116,20 @@ describe('HUD header', () => { }) test('select mode is titled Select with its V key', () => { - expect(SELECT_HUD_TITLE).toMatchObject({ label: 'Select', shortcut: 'V' }) + expect(SELECT_HUD_TITLE).toMatchObject({ + label: expect.objectContaining({ message: 'Select' }), + shortcut: 'V', + }) + }) +}) + +describe('Cut opening HUD', () => { + test('names the drag gesture "Draw the opening", not the mezzanine', () => { + // The drag row folds under "More shortcuts", so read the rows the HUD is given. + const english = (hints: ReturnType) => + hints.map((hint) => (typeof hint.label === 'string' ? hint.label : hint.label.message)) + expect(english(openingHints('rectangle'))).toContain('Draw the opening') + expect(english(openingHints('rectangle'))).not.toContain('Draw the mezzanine') + expect(english(mezzanineHints('rectangle'))).toContain('Draw the mezzanine') }) }) diff --git a/packages/editor/src/components/ui/helpers/helper-manager.tsx b/packages/editor/src/components/ui/helpers/helper-manager.tsx index a64a9454e6..663ba7dd0d 100644 --- a/packages/editor/src/components/ui/helpers/helper-manager.tsx +++ b/packages/editor/src/components/ui/helpers/helper-manager.tsx @@ -6,7 +6,7 @@ import { floorPlacedCollides, nodeRegistry, type TerrainVerb, - useScene, + useScene, usePascalI18n, } from '@pascal-app/core' import { useViewer } from '@pascal-app/viewer' import { useEffect, useMemo, useState, useSyncExternalStore } from 'react' @@ -94,7 +94,7 @@ function reshapingHints(reshape: ReshapeKind): ContextualShortcutHint[] { : 'Move corner' return [ { keys: ['Drag'], label: action }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ] } @@ -106,8 +106,8 @@ function reshapingHints(reshape: ReshapeKind): ContextualShortcutHint[] { function terrainSculptHints(verb: TerrainVerb, sampling: boolean): ContextualShortcutHint[] { if (sampling) { return [ - { keys: ['Click'], label: 'Pick target height' }, - { keys: ['Esc'], label: 'Cancel picking' }, + { keys: ['Click'], label: /* i18n */ { id: 'editor.helpers.helperManager.pickTargetHeight', message: 'Pick target height' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancelPicking', message: 'Cancel picking' } }, ] } const action = @@ -122,8 +122,8 @@ function terrainSculptHints(verb: TerrainVerb, sampling: boolean): ContextualSho { keys: ['Drag'], label: action }, // Nested, so the two render as alternatives ("[ / ]") rather than a chord — // a flat `['[', ']']` joins with "+" and would read as "press both". - { keys: [['[', ']']], label: 'Brush size' }, - { keys: ['Esc'], label: 'Cancel stroke' }, + { keys: [['[', ']']], label: /* i18n */ { id: 'editor.helpers.helperManager.brushSize', message: 'Brush size' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancelStroke', message: 'Cancel stroke' } }, ] } @@ -141,12 +141,12 @@ const EMPTY_CONTEXTUAL_HINTS: ContextualShortcutHint[] = [] export function paintHints(mode: PaintMode): ContextualShortcutHint[] { if (mode === 'pick') return [ - { keys: ['Left click'], label: 'Paint with this material' }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.paintWithThisMaterial', message: 'Paint with this material' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ] if (mode === 'erase') - return [{ keys: ['Left click'], label: 'Remove a painted part, or reset a surface' }] - if (mode === 'surface') return [{ keys: [['Alt', 'Option']], label: 'Hold to pick a material' }] + return [{ keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.removeAPaintedPartOrReset', message: 'Remove a painted part, or reset a surface' } }] + if (mode === 'surface') return [{ keys: [['Alt', 'Option']], label: /* i18n */ { id: 'editor.helpers.helperManager.holdToPickAMaterial', message: 'Hold to pick a material' } }] return [] } @@ -156,43 +156,45 @@ export function paintRegionHints( hovering = true, ): ContextualShortcutHint[] { const gesture: Record = { - rectangle: { keys: ['Drag'], label: 'Press anywhere, drag to the opposite corner' }, - polygon: { keys: ['Left click'], label: 'Add point · click the first to close' }, + rectangle: { keys: ['Drag'], label: /* i18n */ { id: 'editor.helpers.helperManager.pressAnywhereDragToTheOpposite', message: 'Press anywhere, drag to the opposite corner' } }, + polygon: { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.addPointClickTheFirstTo', message: 'Add point · click the first to close' } }, } // Off anything the sub-mode draws on, the HUD says where to go instead. if (!hovering) return [ ...(notice ? [{ keys: ['!'], label: notice, active: true }] : []), { keys: ['Hover'], label: paintRegionHoverHint(mode), active: true }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ] return [ ...(notice ? [{ keys: ['!'], label: notice, active: true }] : []), gesture[mode], - ...(mode === 'polygon' ? [{ keys: ['Backspace'], label: 'Remove last point' }] : []), - { keys: ['Esc'], label: 'Cancel' }, + ...(mode === 'polygon' ? [{ keys: ['Backspace'], label: /* i18n */ { id: 'editor.helpers.helperManager.removeLastPoint', message: 'Remove last point' } }] : []), + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ] } +const DRAW_MEZZANINE = /* i18n */ { id: 'editor.helpers.helperManager.drawTheMezzanine', message: 'Draw the mezzanine' } +const DRAW_OPENING = /* i18n */ { id: 'editor.helpers.helperManager.drawTheOpening', message: 'Draw the opening' } // "Add mezzanine": the outline gesture for the shape picked in the room panel, // then Esc; the snapping chip sits below. export function mezzanineHints(shape: MezzanineShape): ContextualShortcutHint[] { return shape === 'rectangle' ? [ - { keys: ['Left click'], label: 'Set one corner, then the opposite' }, - { keys: ['Drag'], label: 'Draw the mezzanine' }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.setOneCornerThenTheOpposite', message: 'Set one corner, then the opposite' } }, + { keys: ['Drag'], label: DRAW_MEZZANINE }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ] : [ - { keys: ['Left click'], label: 'Add point · click the first to close' }, - { keys: ['Backspace'], label: 'Remove last point' }, - { keys: ['Enter'], label: 'Finish' }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.addPointClickTheFirstTo', message: 'Add point · click the first to close' } }, + { keys: ['Backspace'], label: /* i18n */ { id: 'editor.helpers.helperManager.removeLastPoint', message: 'Remove last point' } }, + { keys: ['Enter'], label: /* i18n */ { id: 'editor.helpers.helperManager.finish', message: 'Finish' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ] } /** "Cut opening": the outline gesture for the chosen shape, then Esc. */ export function openingHints(shape: OpeningShape): ContextualShortcutHint[] { return mezzanineHints(shape).map((hint) => - hint.label === 'Draw the mezzanine' ? { ...hint, label: 'Draw the opening' } : hint, + typeof hint.label !== 'string' && hint.label.id === DRAW_MEZZANINE.id ? { ...hint, label: DRAW_OPENING } : hint, ) } const TERRACE_CHIP_HINTS = [TERRACE_SHAPE_HINT] @@ -200,22 +202,22 @@ const TERRACE_CHIP_HINTS = [TERRACE_SHAPE_HINT] export function terraceHints(shape: TerraceShape): ContextualShortcutHint[] { return shape === 'rectangle' ? [ - { keys: ['Left click'], label: 'Set one corner, then the opposite' }, - { keys: ['Drag'], label: 'Draw the terrace' }, - { keys: ['Esc'], label: 'Done' }, + { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.setOneCornerThenTheOpposite', message: 'Set one corner, then the opposite' } }, + { keys: ['Drag'], label: /* i18n */ { id: 'editor.helpers.helperManager.drawTheTerrace', message: 'Draw the terrace' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.done', message: 'Done' } }, ] : [ - { keys: ['Left click'], label: 'Add point · click the first to close' }, - { keys: ['Backspace'], label: 'Remove last point' }, - { keys: ['Enter'], label: 'Finish' }, - { keys: ['Esc'], label: 'Done' }, + { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.addPointClickTheFirstTo', message: 'Add point · click the first to close' } }, + { keys: ['Backspace'], label: /* i18n */ { id: 'editor.helpers.helperManager.removeLastPoint', message: 'Remove last point' } }, + { keys: ['Enter'], label: /* i18n */ { id: 'editor.helpers.helperManager.finish', message: 'Finish' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.done', message: 'Done' } }, ] } export const ROOM_DIVIDE_HINTS: ContextualShortcutHint[] = [ - { keys: ['Left click'], label: 'Add point' }, - { keys: ['Backspace'], label: 'Remove last point' }, - { keys: ['Enter'], label: 'Finish at the edge' }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.addPoint', message: 'Add point' } }, + { keys: ['Backspace'], label: /* i18n */ { id: 'editor.helpers.helperManager.removeLastPoint', message: 'Remove last point' } }, + { keys: ['Enter'], label: /* i18n */ { id: 'editor.helpers.helperManager.finishAtTheEdge', message: 'Finish at the edge' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ] const NO_CONTEXTUAL_HELP_SUBSCRIPTION = () => () => {} @@ -277,22 +279,23 @@ export function mezzanineGesture( export const MEZZANINE_GESTURE_HINTS: Record = { raise: [ - { keys: ['Drag'], label: 'Raise or lower' }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Drag'], label: /* i18n */ { id: 'editor.helpers.helperManager.raiseOrLower', message: 'Raise or lower' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ], resize: [ - { keys: ['Drag'], label: 'Resize' }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Drag'], label: /* i18n */ { id: 'editor.helpers.helperManager.resize', message: 'Resize' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ], move: [ - { keys: ['Left click'], label: 'Place inside the room' }, - { keys: [['R', 'T']], label: 'Rotate ±45°' }, - { keys: ['Alt'], label: 'Free move' }, - { keys: ['Esc'], label: 'Cancel' }, + { keys: ['Left click'], label: /* i18n */ { id: 'editor.helpers.helperManager.placeInsideTheRoom', message: 'Place inside the room' } }, + { keys: [['R', 'T']], label: /* i18n */ { id: 'editor.helpers.helperManager.rotate45', message: 'Rotate ±45°' } }, + { keys: ['Alt'], label: /* i18n */ { id: 'editor.helpers.helperManager.freeMove', message: 'Free move' } }, + { keys: ['Esc'], label: /* i18n */ { id: 'editor.helpers.helperManager.cancel', message: 'Cancel' } }, ], } export function HelperManager() { + const i18n = usePascalI18n() const mode = useEditor((s) => s.mode) const tool = useEditor((s) => s.tool) const terrainVerb = useEditor((s) => s.terrainVerb) @@ -417,7 +420,7 @@ export function HelperManager() { if (activeHandleDrag?.label === GROUP_MOVE_DRAG_LABEL) { return ( @@ -440,10 +443,10 @@ export function HelperManager() { return ( const movingContinuationContext = isFreshPlacement ? keyCyclableContinuationContext(continuationContextOf(movingNode.type)) @@ -611,7 +614,7 @@ export function HelperManager() { ) } @@ -639,9 +642,9 @@ export function HelperManager() { return ( diff --git a/packages/editor/src/components/ui/helpers/item-helper.tsx b/packages/editor/src/components/ui/helpers/item-helper.tsx index b02c906b93..2be50b18b7 100644 --- a/packages/editor/src/components/ui/helpers/item-helper.tsx +++ b/packages/editor/src/components/ui/helpers/item-helper.tsx @@ -1,3 +1,4 @@ +import { usePascalI18n } from '@pascal-app/core' import type { ContinuationContext } from '../../../lib/continuation' import type { HudTitle } from '../../../lib/hud-title' import type { SnapContext } from '../../../lib/snapping-mode' @@ -33,17 +34,18 @@ export function ItemHelper({ extraHints = [], replacesPlace = false, }: ItemHelperProps) { + const i18n = usePascalI18n() return ( {mouseShortcut ? ( @@ -96,7 +100,7 @@ function ShortcutToken({ className, displayValue, value, ...props }: ShortcutTok icon={mouseShortcut.icon} width={14} /> - {mouseShortcut.label} + {mouseLabel} ) : isShift ? ( // Icon rather than the ⇧ text glyph — the font renders the glyph's @@ -117,7 +121,7 @@ function ShortcutToken({ className, displayValue, value, ...props }: ShortcutTok // it up a touch on Mac. "Ctrl" stays at the token's normal size. {commandDisplay} ) : ( - (displayValue ?? value) + shown )} ) diff --git a/packages/editor/src/components/ui/sidebar/panels/items-panel/index.tsx b/packages/editor/src/components/ui/sidebar/panels/items-panel/index.tsx index 89f2ee65c7..22b3f2d791 100644 --- a/packages/editor/src/components/ui/sidebar/panels/items-panel/index.tsx +++ b/packages/editor/src/components/ui/sidebar/panels/items-panel/index.tsx @@ -1,5 +1,6 @@ 'use client' +import { usePascalI18n } from '@pascal-app/core' import type { AssetInput } from '@pascal-app/core' import NextImage from 'next/image' import { useEffect, useState } from 'react' @@ -98,6 +99,7 @@ function LegacyItemsPanel({ showSourceFilter?: boolean showTagFilters?: boolean }) { + const i18n = usePascalI18n() const mode = useEditor((s) => s.mode) const catalogCategory = useEditor((s) => s.catalogCategory) const setMode = useEditor((s) => s.setMode) @@ -215,13 +217,13 @@ function LegacyItemsPanel({ type="button" > - {cat.label} + {i18n._(cat.label)} ) })} diff --git a/packages/editor/src/i18n/locales/en-XA/messages.ts b/packages/editor/src/i18n/locales/en-XA/messages.ts index 4c0a28c873..8e299158fa 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.editorNavbar.allProjects\":[\"[Åļļ þŕöĵéçţš ~~~~]\"],\"app.editorNavbar.preview\":[\"[Þŕéṽîéŵ ~~~]\"],\"app.editorNavbar.projectName\":[\"[Þŕöĵéçţ ñáɱé ~~~~]\"],\"app.editorNavbar.renameProject\":[\"[Ŕéñáɱé þŕöĵéçţ ~~~~]\"],\"app.editorNavbar.share\":[\"[Šĥáŕé ~~]\"],\"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.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.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\":[\"[Ṽîéŵš ~~]\"],\"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.below\":[\"[ƀéļöŵ ~~]\"],\"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.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.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.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.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.contextualHelperPanel.verbScopeClickOrPressShift\":[\"[\",[\"verb\"],\" šçöþé — çļîçķ öŕ þŕéšš Šĥîƒţ ţö çýçļé ~~~~~~~~~]\"],\"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.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.reloadEditor\":[\"[Ŕéļöáð éðîţöŕ ~~~~]\"],\"editor.theEditorSceneFailedToRender\":[\"[Ţĥé éðîţöŕ šçéñé ƒáîļéð ţö ŕéñðéŕ ~~~~~~~~~]\"],\"editor.toolHint.aCurtainWallTakesNoCorner\":[\"[Å çûŕţáîñ ŵáļļ ţáķéš ñö çöŕñéŕ ŵîñðöŵ ~~~~~~~~~~]\"],\"editor.toolHint.aCurvedWallTakesNoCorner\":[\"[Å çûŕṽéð ŵáļļ ţáķéš ñö çöŕñéŕ ŵîñðöŵ ~~~~~~~~~]\"],\"editor.toolHint.addACornerClickTheFirst\":[\"[Åðð á çöŕñéŕ · çļîçķ ţĥé ƒîŕšţ ţö çļöšé ~~~~~~~~~]\"],\"editor.toolHint.anotherOpeningIsInTheWay\":[\"[Åñöţĥéŕ öþéñîñĝ îš îñ ţĥé ŵáý áţ ţĥé çöŕñéŕ ~~~~~~~~~~~]\"],\"editor.toolHint.autoHangers\":[\"[Åûţö ĥáñĝéŕš ~~~~]\"],\"editor.toolHint.autoHangersClickOrPressH\":[\"[Åûţö ĥáñĝéŕš - çļîçķ öŕ þŕéšš Ĥ ţö ţöĝĝļé ~~~~~~~~~~]\"],\"editor.toolHint.autoHangersOff\":[\"[Åûţö ĥáñĝéŕš: Öƒƒ ~~~~~]\"],\"editor.toolHint.autoHangersOn\":[\"[Åûţö ĥáñĝéŕš: Öñ ~~~~]\"],\"editor.toolHint.bypassSnapping\":[\"[Ɓýþášš šñáþþîñĝ ~~~~~]\"],\"editor.toolHint.cancel\":[\"[Çáñçéļ ~~]\"],\"editor.toolHint.cancelMove\":[\"[Çáñçéļ ɱöṽé ~~~]\"],\"editor.toolHint.cancelRunExit\":[\"[Çáñçéļ ŕûñ / éẋîţ ~~~~]\"],\"editor.toolHint.cancelStartPoint\":[\"[Çáñçéļ šţáŕţ þöîñţ ~~~~~]\"],\"editor.toolHint.cornerWindow\":[\"[Çöŕñéŕ ŵîñðöŵ ~~~~]\"],\"editor.toolHint.cuts\":[\"[Çûţš ~~]\"],\"editor.toolHint.cutsValue\":[\"[Çûţš: \",[\"value\"],\" ~~]\"],\"editor.toolHint.cutsValueEven\":[\"[Çûţš: \",[\"value\"],\", éṽéñ ~~~]\"],\"editor.toolHint.cycleMonoGableButterfly\":[\"[Çýçļé ɱöñö / ĝáƀļé / ƀûţţéŕƒļý ~~~~~~~]\"],\"editor.toolHint.cycleSnappingMode\":[\"[Çýçļé šñáþþîñĝ ɱöðé ~~~~~~]\"],\"editor.toolHint.doorStyleClickOrPressL\":[\"[Ðööŕ šţýļé — çļîçķ öŕ þŕéšš Ļ ţö çýçļé ~~~~~~~~~]\"],\"editor.toolHint.doorTypeClickOrPressO\":[\"[Ðööŕ ţýþé — çļîçķ öŕ þŕéšš Ö ţö çýçļé ~~~~~~~~~]\"],\"editor.toolHint.dropDownspoutFromOutlet\":[\"[Ðŕöþ ðöŵñšþöûţ ƒŕöɱ öûţļéţ ~~~~~~~]\"],\"editor.toolHint.ductDiameterDownUp\":[\"[Ðûçţ ðîáɱéţéŕ ðöŵñ / ûþ ~~~~~~]\"],\"editor.toolHint.endRunCancel\":[\"[Éñð ŕûñ / çáñçéļ ~~~~]\"],\"editor.toolHint.exit\":[\"[Éẋîţ ~~]\"],\"editor.toolHint.exitDrawing\":[\"[Éẋîţ ðŕáŵîñĝ ~~~~]\"],\"editor.toolHint.finishAndContinue\":[\"[Ƒîñîšĥ áñð çöñţîñûé ~~~~~~]\"],\"editor.toolHint.finishCeiling\":[\"[Ƒîñîšĥ çéîļîñĝ ~~~~]\"],\"editor.toolHint.finishGridAxis\":[\"[Ƒîñîšĥ ĝŕîð áẋîš ~~~~~]\"],\"editor.toolHint.finishMeasurement\":[\"[Ƒîñîšĥ ɱéášûŕéɱéñţ ~~~~~~]\"],\"editor.toolHint.finishMultiPointWitnesses\":[\"[Ƒîñîšĥ ɱûļţî-þöîñţ ŵîţñéššéš ~~~~~~~~]\"],\"editor.toolHint.finishSlab\":[\"[Ƒîñîšĥ šļáƀ ~~~]\"],\"editor.toolHint.flipSide\":[\"[Ƒļîþ šîðé ~~~]\"],\"editor.toolHint.followTraceALineset\":[\"[Ƒöļļöŵ: ţŕáçé á ļîñéšéţ ~~~~~~]\"],\"editor.toolHint.forcePlace\":[\"[Ƒöŕçé þļáçé ~~~]\"],\"editor.toolHint.freePlacement\":[\"[Ƒŕéé þļáçéɱéñţ ~~~~]\"],\"editor.toolHint.goVerticalClickToPlace\":[\"[Ĝö ṽéŕţîçáļ ↕, çļîçķ ţö þļáçé ~~~~~~~]\"],\"editor.toolHint.highlightOutlet\":[\"[Ĥîĝĥļîĝĥţ öûţļéţ ~~~~~]\"],\"editor.toolHint.joinAsACornerWindow\":[\"[Ĵöîñ áš á çöŕñéŕ ŵîñðöŵ ~~~~~~]\"],\"editor.toolHint.key.altDrag\":[\"[Åļţ + ðŕáĝ ~~~]\"],\"editor.toolHint.key.backspace\":[\"[Ɓáçķšþáçé ~~~]\"],\"editor.toolHint.key.click\":[\"[Çļîçķ ~~]\"],\"editor.toolHint.key.clickAgain\":[\"[Çļîçķ áĝáîñ ~~~]\"],\"editor.toolHint.key.command\":[\"[Çöɱɱáñð ~~~]\"],\"editor.toolHint.key.control\":[\"[Çöñţŕöļ ~~~]\"],\"editor.toolHint.key.delete\":[\"[Ðéļéţé ~~]\"],\"editor.toolHint.key.doubleClick\":[\"[Ðöûƀļé çļîçķ ~~~~]\"],\"editor.toolHint.key.drag\":[\"[Ðŕáĝ ~~]\"],\"editor.toolHint.key.enter\":[\"[Éñţéŕ ~~]\"],\"editor.toolHint.key.hover\":[\"[Ĥöṽéŕ ~~]\"],\"editor.toolHint.key.hoverADuctEnd\":[\"[Ĥöṽéŕ á ðûçţ éñð ~~~~]\"],\"editor.toolHint.key.hoverAPipeEnd\":[\"[Ĥöṽéŕ á þîþé éñð ~~~~]\"],\"editor.toolHint.key.hoverGutter\":[\"[Ĥöṽéŕ ĝûţţéŕ ~~~~]\"],\"editor.toolHint.key.leftClick\":[\"[Ļéƒţ çļîçķ ~~~]\"],\"editor.toolHint.key.middleClick\":[\"[Ṁîððļé çļîçķ ~~~~]\"],\"editor.toolHint.key.rShiftR\":[\"[Ŕ / Šĥîƒţ+Ŕ ~~~]\"],\"editor.toolHint.key.rightClick\":[\"[Ŕîĝĥţ çļîçķ ~~~]\"],\"editor.toolHint.key.scroll\":[\"[Šçŕöļļ ~~]\"],\"editor.toolHint.key.scrollWheel\":[\"[Šçŕöļļ ŵĥééļ ~~~~]\"],\"editor.toolHint.key.space\":[\"[Šþáçé ~~]\"],\"editor.toolHint.key.tab\":[\"[Ţáƀ ~]\"],\"editor.toolHint.mountFloorCeilingWall\":[\"[Ṁöûñţ: ƒļööŕ / çéîļîñĝ / ŵáļļ ~~~~~~~]\"],\"editor.toolHint.noRoomForTheMatchingWindow\":[\"[Ñö ŕööɱ ƒöŕ ţĥé ɱáţçĥîñĝ ŵîñðöŵ öñ ţĥé öţĥéŕ ŵáļļ ~~~~~~~~~~~~]\"],\"editor.toolHint.noWallMeetsHere\":[\"[Ñö ŵáļļ ɱééţš ĥéŕé ~~~~~]\"],\"editor.toolHint.numberOfCutsScrollOrClick\":[\"[Ñûɱƀéŕ öƒ çûţš — šçŕöļļ öŕ çļîçķ ţö çĥáñĝé ~~~~~~~~~~]\"],\"editor.toolHint.pickWitnessPoint\":[\"[Þîçķ ŵîţñéšš þöîñţ ~~~~~]\"],\"editor.toolHint.pipeSizeDownUp\":[\"[Þîþé šîžé ðöŵñ / ûþ ~~~~~]\"],\"editor.toolHint.placeAndContinue\":[\"[Þļáçé áñð çöñţîñûé ~~~~~]\"],\"editor.toolHint.placeBlock\":[\"[Þļáçé ƀļöçķ ~~~]\"],\"editor.toolHint.placeBoxVentOnRoof\":[\"[Þļáçé ƀöẋ ṽéñţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeCabinet\":[\"[Þļáçé çáƀîñéţ ~~~~]\"],\"editor.toolHint.placeCanopyOrSetTheNext\":[\"[Þļáçé çáñöþý öŕ šéţ ţĥé ñéẋţ ŕûñ þöîñţ ~~~~~~~~~~]\"],\"editor.toolHint.placeChimneyOnRoof\":[\"[Þļáçé çĥîɱñéý öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeColumn\":[\"[Þļáçé çöļûɱñ ~~~~]\"],\"editor.toolHint.placeCupolaOnRoof\":[\"[Þļáçé çûþöļá öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeDimensionLineWhenNeeded\":[\"[Þļáçé ðîɱéñšîöñ ļîñé ŵĥéñ ñééðéð ~~~~~~~~~]\"],\"editor.toolHint.placeDoorOnWall\":[\"[Þļáçé ðööŕ öñ ŵáļļ ~~~~~]\"],\"editor.toolHint.placeDormerOnRoof\":[\"[Þļáçé ðöŕɱéŕ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeElevator\":[\"[Þļáçé éļéṽáţöŕ ~~~~]\"],\"editor.toolHint.placeEyebrowVentOnRoof\":[\"[Þļáçé éýéƀŕöŵ ṽéñţ öñ ŕööƒ ~~~~~~~]\"],\"editor.toolHint.placeFitting\":[\"[Þļáçé ƒîţţîñĝ ~~~~]\"],\"editor.toolHint.placeGutterOnRoofEave\":[\"[Þļáçé ĝûţţéŕ öñ ŕööƒ éáṽé ~~~~~~~]\"],\"editor.toolHint.placeItLockedTo45\":[\"[Þļáçé îţ (ļöçķéð ţö 45°) ~~~~~]\"],\"editor.toolHint.placeItem\":[\"[Þļáçé îţéɱ ~~~]\"],\"editor.toolHint.placeMeasurementPoint\":[\"[Þļáçé ɱéášûŕéɱéñţ þöîñţ ~~~~~~~]\"],\"editor.toolHint.placeOnAFence\":[\"[Þļáçé öñ á ƒéñçé ~~~~]\"],\"editor.toolHint.placeRegister\":[\"[Þļáçé ŕéĝîšţéŕ ~~~~]\"],\"editor.toolHint.placeRidgeVentOnRoof\":[\"[Þļáçé ŕîðĝé ṽéñţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeShelf\":[\"[Þļáçé šĥéļƒ ~~~]\"],\"editor.toolHint.placeSkylightOnRoof\":[\"[Þļáçé šķýļîĝĥţ öñ ŕööƒ ~~~~~~]\"],\"editor.toolHint.placeSolarPanelArrayOnRoof\":[\"[Þļáçé šöļáŕ þáñéļ áŕŕáý öñ ŕööƒ ~~~~~~~~]\"],\"editor.toolHint.placeSpawnPoint\":[\"[Þļáçé šþáŵñ þöîñţ ~~~~~]\"],\"editor.toolHint.placeStairs\":[\"[Þļáçé šţáîŕš ~~~~]\"],\"editor.toolHint.placeTrap\":[\"[Þļáçé ţŕáþ ~~~]\"],\"editor.toolHint.placeTurbineVentOnRoof\":[\"[Þļáçé ţûŕƀîñé ṽéñţ öñ ŕööƒ ~~~~~~~]\"],\"editor.toolHint.placeUnit\":[\"[Þļáçé ûñîţ ~~~]\"],\"editor.toolHint.placeWindowOnWall\":[\"[Þļáçé ŵîñðöŵ öñ ŵáļļ ~~~~~~]\"],\"editor.toolHint.placeWithoutTheCornerSnap\":[\"[Þļáçé ŵîţĥöûţ ţĥé çöŕñéŕ šñáþ ~~~~~~~~]\"],\"editor.toolHint.placement\":[\"[Þļáçéɱéñţ ~~~]\"],\"editor.toolHint.placementAuto\":[\"[Þļáçéɱéñţ: Åûţö ~~~~]\"],\"editor.toolHint.placementGround\":[\"[Þļáçéɱéñţ: Ĝŕöûñð ~~~~~]\"],\"editor.toolHint.placementRoof\":[\"[Þļáçéɱéñţ: Ŕööƒ ~~~~]\"],\"editor.toolHint.placementSurfaceClickOrPressP\":[\"[Þļáçéɱéñţ šûŕƒáçé - çļîçķ öŕ þŕéšš Þ ţö çýçļé ~~~~~~~~~~~]\"],\"editor.toolHint.placementType\":[\"[Þļáçéɱéñţ ţýþé ~~~~]\"],\"editor.toolHint.placementTypeClickOrPressI\":[\"[Þļáçéɱéñţ ţýþé — çļîçķ öŕ þŕéšš Î ţö ţöĝĝļé ~~~~~~~~~~~]\"],\"editor.toolHint.removeLastPoint\":[\"[Ŕéɱöṽé ļášţ þöîñţ ~~~~~]\"],\"editor.toolHint.removeLastWitness\":[\"[Ŕéɱöṽé ļášţ ŵîţñéšš ~~~~~~]\"],\"editor.toolHint.rotate\":[\"[Ŕöţáţé ~~]\"],\"editor.toolHint.rotate45\":[\"[Ŕöţáţé ±45° ~~]\"],\"editor.toolHint.rotate45FloorCeiling\":[\"[Ŕöţáţé ±45° (ƒļööŕ / çéîļîñĝ) ~~~~~~]\"],\"editor.toolHint.rotateGhost15\":[\"[Ŕöţáţé ĝĥöšţ ±15° ~~~~]\"],\"editor.toolHint.rotateOrFlipTheRunSide\":[\"[Ŕöţáţé öŕ ƒļîþ ţĥé ŕûñ šîðé ~~~~~~~]\"],\"editor.toolHint.rotateRoofDirection90\":[\"[Ŕöţáţé ŕööƒ ðîŕéçţîöñ 90° ~~~~~~]\"],\"editor.toolHint.rotateSpawnPoint\":[\"[Ŕöţáţé šþáŵñ þöîñţ ~~~~~]\"],\"editor.toolHint.roundRectangularOval\":[\"[Ŕöûñð / ŕéçţáñĝûļáŕ / öṽáļ ~~~~~~]\"],\"editor.toolHint.setFenceStartEnd\":[\"[Šéţ ƒéñçé šţáŕţ / éñð ~~~~~]\"],\"editor.toolHint.setOneCornerThenTheOpposite\":[\"[Šéţ öñé çöŕñéŕ, ţĥéñ ţĥé öþþöšîţé ~~~~~~~~~]\"],\"editor.toolHint.setRoofFootprint\":[\"[Šéţ ŕööƒ ƒööţþŕîñţ ~~~~~]\"],\"editor.toolHint.setWallStartEnd\":[\"[Šéţ ŵáļļ šţáŕţ / éñð ~~~~~]\"],\"editor.toolHint.slopeLevel\":[\"[Šļöþé / ļéṽéļ ~~~]\"],\"editor.toolHint.snapOntoTheRun\":[\"[Šñáþ öñţö ţĥé ŕûñ ~~~~~]\"],\"editor.toolHint.splitAtTheMarks\":[\"[Šþļîţ áţ ţĥé ɱáŕķš ~~~~~]\"],\"editor.toolHint.startGridAxis\":[\"[Šţáŕţ ĝŕîð áẋîš ~~~~]\"],\"editor.toolHint.startLineset\":[\"[Šţáŕţ ļîñéšéţ ~~~~]\"],\"editor.toolHint.startLiquidLine\":[\"[Šţáŕţ ļîǫûîð ļîñé ~~~~~]\"],\"editor.toolHint.startRun\":[\"[Šţáŕţ ŕûñ ~~~]\"],\"editor.toolHint.startSegment\":[\"[Šţáŕţ šéĝɱéñţ ~~~~]\"],\"editor.toolHint.stepBackOrCancel\":[\"[Šţéþ ƀáçķ öŕ çáñçéļ ~~~~~]\"],\"editor.toolHint.style\":[\"[Šţýļé ~~]\"],\"editor.toolHint.styleBarn\":[\"[Šţýļé: Ɓáŕñ ~~~]\"],\"editor.toolHint.styleCasement\":[\"[Šţýļé: Çášéɱéñţ ~~~~]\"],\"editor.toolHint.styleCraftsman\":[\"[Šţýļé: Çŕáƒţšɱáñ ~~~~~]\"],\"editor.toolHint.styleDoubleHung\":[\"[Šţýļé: Ðöûƀļé-ĥûñĝ ~~~~~]\"],\"editor.toolHint.styleFrench\":[\"[Šţýļé: Ƒŕéñçĥ ~~~~]\"],\"editor.toolHint.styleGlass\":[\"[Šţýļé: Ĝļášš ~~~]\"],\"editor.toolHint.styleGrid\":[\"[Šţýļé: Ĝŕîð ~~~]\"],\"editor.toolHint.styleHalfLouvered\":[\"[Šţýļé: Ĥáļƒ-ļöûṽéŕéð ~~~~~~]\"],\"editor.toolHint.styleHorizontalBands\":[\"[Šţýļé: Ĥöŕîžöñţáļ ƀáñðš ~~~~~~]\"],\"editor.toolHint.styleModern\":[\"[Šţýļé: Ṁöðéŕñ ~~~~]\"],\"editor.toolHint.stylePanel\":[\"[Šţýļé: Þáñéļ ~~~]\"],\"editor.toolHint.stylePaneledGlass\":[\"[Šţýļé: Þáñéļéð ĝļášš ~~~~~~]\"],\"editor.toolHint.styleShaker\":[\"[Šţýļé: Šĥáķéŕ ~~~~]\"],\"editor.toolHint.styleSingle\":[\"[Šţýļé: Šîñĝļé ~~~~]\"],\"editor.toolHint.styleSixPanel\":[\"[Šţýļé: Šîẋ-þáñéļ ~~~~]\"],\"editor.toolHint.styleSliding\":[\"[Šţýļé: Šļîðîñĝ ~~~~]\"],\"editor.toolHint.styleTallGrid\":[\"[Šţýļé: Ţáļļ ĝŕîð ~~~~]\"],\"editor.toolHint.styleTransom\":[\"[Šţýļé: Ţŕáñšöɱ ~~~~]\"],\"editor.toolHint.styleTripleHung\":[\"[Šţýļé: Ţŕîþļé-ĥûñĝ ~~~~~]\"],\"editor.toolHint.styleWideGrid\":[\"[Šţýļé: Ŵîðé ĝŕîð ~~~~]\"],\"editor.toolHint.switchRotationAxisYXZ\":[\"[Šŵîţçĥ ŕöţáţîöñ áẋîš (Ý → Ẋ → Ž) ~~~~~~~]\"],\"editor.toolHint.theWallsMeetAtTooSharp\":[\"[Ţĥé ŵáļļš ɱééţ áţ ţöö šĥáŕþ öŕ ţöö ƒļáţ áñ áñĝļé ~~~~~~~~~~~~]\"],\"editor.toolHint.theWindowWaitingThereIsTaller\":[\"[Ţĥé ŵîñðöŵ ŵáîţîñĝ ţĥéŕé îš ţáļļéŕ ţĥáñ ţĥîš ŵáļļ ~~~~~~~~~~~~~]\"],\"editor.toolHint.threeOrMoreWallsMeetHere\":[\"[Ţĥŕéé öŕ ɱöŕé ŵáļļš ɱééţ ĥéŕé ~~~~~~~~]\"],\"editor.toolHint.traceCeilingOutline\":[\"[Ţŕáçé çéîļîñĝ öûţļîñé ~~~~~~]\"],\"editor.toolHint.traceSlabOutline\":[\"[Ţŕáçé šļáƀ öûţļîñé ~~~~~]\"],\"editor.toolHint.type\":[\"[Ţýþé ~~]\"],\"editor.toolHint.typeAwning\":[\"[Ţýþé: Åŵñîñĝ ~~~]\"],\"editor.toolHint.typeBarn\":[\"[Ţýþé: Ɓáŕñ ~~~]\"],\"editor.toolHint.typeBay\":[\"[Ţýþé: Ɓáý ~~~]\"],\"editor.toolHint.typeBow\":[\"[Ţýþé: Ɓöŵ ~~~]\"],\"editor.toolHint.typeCabinet\":[\"[Ţýþé: Çáƀîñéţ ~~~~]\"],\"editor.toolHint.typeCasement\":[\"[Ţýþé: Çášéɱéñţ ~~~~]\"],\"editor.toolHint.typeDouble\":[\"[Ţýþé: Ðöûƀļé ~~~]\"],\"editor.toolHint.typeDoubleHung\":[\"[Ţýþé: Ðöûƀļé Ĥûñĝ ~~~~~]\"],\"editor.toolHint.typeFixed\":[\"[Ţýþé: Ƒîẋéð ~~~]\"],\"editor.toolHint.typeFolding\":[\"[Ţýþé: Ƒöļðîñĝ ~~~~]\"],\"editor.toolHint.typeFrench\":[\"[Ţýþé: Ƒŕéñçĥ ~~~]\"],\"editor.toolHint.typeHinged\":[\"[Ţýþé: Ĥîñĝéð ~~~]\"],\"editor.toolHint.typeIsland\":[\"[Ţýþé: Κļáñð ~~~]\"],\"editor.toolHint.typeLouvered\":[\"[Ţýþé: Ļöûṽéŕéð ~~~~]\"],\"editor.toolHint.typePocket\":[\"[Ţýþé: Þöçķéţ ~~~]\"],\"editor.toolHint.typeSingleHung\":[\"[Ţýþé: Šîñĝļé Ĥûñĝ ~~~~~]\"],\"editor.toolHint.typeSliding\":[\"[Ţýþé: Šļîðîñĝ ~~~~]\"],\"editor.toolHint.verticalStackClickToPlace\":[\"[Ṽéŕţîçáļ šţáçķ ↕, çļîçķ ţö þļáçé ~~~~~~~~]\"],\"editor.toolHint.wasteVent\":[\"[Ŵášţé / ṽéñţ ~~~]\"],\"editor.toolHint.windowStyleClickOrPressL\":[\"[Ŵîñðöŵ šţýļé — çļîçķ öŕ þŕéšš Ļ ţö çýçļé ~~~~~~~~~~]\"],\"editor.toolHint.windowTypeClickOrPressO\":[\"[Ŵîñðöŵ ţýþé — çļîçķ öŕ þŕéšš Ö ţö çýçļé ~~~~~~~~~]\"],\"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.chimney.description\":[\"[Ṽéŕţîçáļ ɱášöñŕý šţáçķ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~]\"],\"node.chimney.label\":[\"[Çĥîɱñéý ~~~]\"],\"node.column.description\":[\"[Å þáŕáɱéţŕîç çöļûɱñ ŵîţĥ çöñƒîĝûŕáƀļé çŕöšš-šéçţîöñ, ƀášé, áñð çáþîţáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.column.label\":[\"[Çöļûɱñ ~~]\"],\"node.constructionDimension.description\":[\"[Åššöçîáţîṽé ļîñéáŕ, çûŕṽéð, çîŕçûļáŕ, áñĝûļáŕ, öŕ çööŕðîñáţé þļáñ ðîɱéñšîöñ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.constructionDimension.label\":[\"[Çöñšţŕûçţîöñ Ðîɱéñšîöñ ~~~~~~~]\"],\"node.cupola.description\":[\"[Ļöûṽéŕéð ŕööƒ ļáñţéŕñ ŵîţĥ á ðöɱé öŕ þýŕáɱîð çáþ áñð öþţîöñáļ ƒîñîáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.cupola.label\":[\"[Çûþöļá ~~]\"],\"node.door.description\":[\"[Å ðööŕ çûţ îñţö á ŵáļļ. Åñîɱáţéð öþéñ/çļöšé šţáţé. ~~~~~~~~~~~~]\"],\"node.door.label\":[\"[Ðööŕ ~~]\"],\"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.hvacEquipment.description\":[\"[Ƒûŕñáçé, áîŕ ĥáñðļéŕ, öŕ çöñðéñšéŕ — ðûçţ ŕûñš çöññéçţ ţö îţš šûþþļý/ŕéţûŕñ çöļļáŕš. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.hvacEquipment.label\":[\"[ĤṼÅÇ Ûñîţ ~~~]\"],\"node.importedMesh.description\":[\"[Ĝéöɱéţŕý þŕéšéŕṽéð ƒŕöɱ áñ îɱþöŕţéð ɱöðéļ ŵĥéñ ñö ñáţîṽé Þášçáļ šĥáþé éẋîšţš. ~~~~~~~~~~~~~~~~~~~~]\"],\"node.importedMesh.label\":[\"[Îɱþöŕţéð Ṁéšĥ ~~~~]\"],\"node.item.description\":[\"[Å çáţáļöĝ-ƀáçķéð îţéɱ (ƒûŕñîţûŕé, ƒîẋţûŕéš, ðéçöŕáţîöñš). ~~~~~~~~~~~~~~]\"],\"node.item.label\":[\"[Îţéɱ ~~]\"],\"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.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.description\":[\"[Å þîţçĥéð / ĥîþ / ĝáƀļé ŕööƒ çöɱþöšéð öƒ öñé öŕ ɱöŕé šéĝɱéñţš. ~~~~~~~~~~~~~~~]\"],\"node.roof.label\":[\"[Ŕööƒ ~~]\"],\"node.roofSegment.description\":[\"[Å šîñĝļé þîţçĥéð þļáñé öƒ á þáŕéñţ ŕööƒ. ~~~~~~~~~~]\"],\"node.roofSegment.label\":[\"[Ŕööƒ Šéĝɱéñţ ~~~~]\"],\"node.scan.description\":[\"[Å çáþţûŕéð šéššîöñ ŵîţĥ öþţîöñáļ ɱéšĥ, ɱöţîöñ, ɱéðîá, áñð šéñšöŕ ðáţá. ~~~~~~~~~~~~~~~~~]\"],\"node.scan.label\":[\"[Çáþţûŕé ~~~]\"],\"node.separator.label\":[\"[Šéþáŕáţöŕ ~~~]\"],\"node.shelf.description\":[\"[Å çöñƒîĝûŕáƀļé šĥéļṽîñĝ ûñîţ. Îţéɱš ĥöšţ öñ éáçĥ ŕöŵ. ~~~~~~~~~~~~~]\"],\"node.shelf.label\":[\"[Šĥéļƒ ~~]\"],\"node.site.description\":[\"[Ţĥé ţöþ-ļéṽéļ çöñţáîñéŕ ĥöļðîñĝ ƀûîļðîñĝš, žöñéš, áñð ţĥé þŕöþéŕţý ƀöûñðáŕý. ~~~~~~~~~~~~~~~~~~~]\"],\"node.site.label\":[\"[Šîţé ~~]\"],\"node.skylight.description\":[\"[Ƒŕáɱéð ĝļášš öþéñîñĝ öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~]\"],\"node.skylight.label\":[\"[Šķýļîĝĥţ ~~~]\"],\"node.slab.description\":[\"[Å þöļýĝöñ-ƀöûñðéð ƒļööŕ šûŕƒáçé ţĥáţ ĥöšţš îţéɱš öñ ţöþ. ~~~~~~~~~~~~~~]\"],\"node.slab.label\":[\"[Šļáƀ ~~]\"],\"node.solarPanel.description\":[\"[Ĝŕîð öƒ þĥöţöṽöļţáîç þáñéļš ɱöûñţéð öñ á ŕööƒ šéĝɱéñţ. ~~~~~~~~~~~~~~]\"],\"node.solarPanel.label\":[\"[Šöļáŕ Þáñéļ ~~~]\"],\"node.spawn.description\":[\"[Þļáýéŕ öŕ çáɱéŕá öŕîĝîñ ŵîţĥîñ á ļéṽéļ. Öñé þéŕ ļéṽéļ. ~~~~~~~~~~~~~]\"],\"node.spawn.label\":[\"[Šþáŵñ Þöîñţ ~~~]\"],\"node.stair.description\":[\"[Å šţáîŕ çöɱþöšéð öƒ öñé öŕ ɱöŕé ƒļîĝĥţš ŵîţĥ çöñƒîĝûŕáƀļé ţŕéáðš, ŕîšéŕš, ŕáîļîñĝš. ~~~~~~~~~~~~~~~~~~~~~]\"],\"node.stair.label\":[\"[Šţáîŕ ~~]\"],\"node.stairSegment.description\":[\"[Å šîñĝļé ƒļîĝĥţ öƒ á þáŕéñţ šţáîŕ. ~~~~~~~~~]\"],\"node.stairSegment.label\":[\"[Šţáîŕ Šéĝɱéñţ ~~~~]\"],\"node.structuralGrid.description\":[\"[Þéŕšîšţéñţ çöñšţŕûçţîöñ ĝŕîð áẋîš ŵîţĥ îðéñţîƒîçáţîöñ ƀûƀƀļéš. ~~~~~~~~~~~~~~~~~]\"],\"node.structuralGrid.label\":[\"[Šţŕûçţûŕáļ Ĝŕîð ~~~~~]\"],\"node.turbineVent.description\":[\"[Ŵîñð-ðŕîṽéñ šþîññîñĝ ŵĥîŕļýƀîŕð éẋĥáûšţ ṽéñţ ƒöŕ á ŕööƒ šļöþé. ~~~~~~~~~~~~~~~~]\"],\"node.turbineVent.label\":[\"[Ţûŕƀîñé Ṽéñţ ~~~~]\"],\"node.unit.description\":[\"[Å ñáɱéð ĝŕöûþ öƒ žöñéš ƒöŕɱîñĝ öñé áþáŕţɱéñţ, ĥöţéļ ŕööɱ öŕ çöɱɱéŕçîáļ ļöţ. ~~~~~~~~~~~~~~~~~~~]\"],\"node.unit.label\":[\"[Ûñîţ ~~]\"],\"node.wall.description\":[\"[Å šţŕáîĝĥţ öŕ çûŕṽéð ŵáļļ šéĝɱéñţ. Ĥöšţš ðööŕš, ŵîñðöŵš, ļéáñ-ţö éẋţéñšîöñš, áñð ŵáļļ-ɱöûñţéð îţéɱš. ~~~~~~~~~~~~~~~~~~~~~~~~]\"],\"node.wall.label\":[\"[Ŵáļļ ~~]\"],\"node.window.description\":[\"[Å ŵîñðöŵ çûţ îñţö á ŵáļļ. Åñîɱáţéð öþéñ/çļöšé ƒöŕ öþéñîñĝ ŵîñðöŵš. ~~~~~~~~~~~~~~~~]\"],\"node.window.label\":[\"[Ŵîñðöŵ ~~]\"],\"node.zone.description\":[\"[Å þöļýĝöñáļ šîţé žöñé (ļáŵñ, ŵáţéŕ, þáṽîñĝ) ŵîţĥ á ŢŠĻ ĝŕáðîéñţ ɱáţéŕîáļ. ~~~~~~~~~~~~~~~~~~]\"],\"node.zone.label\":[\"[Žöñé ~~]\"],\"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 97371e117b..0d81f86606 100644 --- a/packages/editor/src/i18n/locales/en/messages.po +++ b/packages/editor/src/i18n/locales/en/messages.po @@ -11,6 +11,146 @@ msgstr "" msgid "app.appShell.pascalHome" msgstr "Pascal home" +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.addGate" +msgstr "Add Gate" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.addOpenPassage" +msgstr "Add Open Passage" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.addToRooms" +msgstr "Add to rooms" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.allBuildTools" +msgstr "← All build tools" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.chooseGateOrOpenPassageThen" +msgstr "Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph." + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.clickALinesetToLayThe" +msgstr "Click a lineset to lay the line beside it." + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.doubleGate" +msgstr "Double gate" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.featuresExtensions" +msgstr "Features & extensions" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.fenceFeatures" +msgstr "Fence features" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.followLineset" +msgstr "Follow lineset" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.gate" +msgstr "Gate" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.gateStyle" +msgstr "Gate style" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.horizontalBoards" +msgstr "Horizontal boards" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.hoverAFenceToPreviewClick" +msgstr "Hover a fence to preview. Click to place. Esc cancels. Leave room between openings." + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.leaves" +msgstr "Leaves" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.liquidLine" +msgstr "Liquid Line" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.matchFenceStyle" +msgstr "Match fence style" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.mep" +msgstr "MEP" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.off" +msgstr "Off" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.on" +msgstr "On" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.opening" +msgstr "Opening" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.openingWidthM" +msgstr "Opening width (m)" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.openRails" +msgstr "Open rails" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.outdoor" +msgstr "Outdoor" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.picket" +msgstr "Picket" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.roofType" +msgstr "Roof type" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.roomsAlreadyCreateTheirFloorAnd" +msgstr "Rooms already create their floor and ceiling. Use these for platforms and one-off structure." + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.searchBuildToolsAndKitchenItems" +msgstr "Search build tools and kitchen items" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.searchToolsFridgeSink" +msgstr "Search tools, fridge, sink…" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.selectACurvedWallToMatch" +msgstr "Select a curved wall to match its radius and arc." + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.singleGate" +msgstr "Single gate" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.slabCeilingColumn" +msgstr "Slab, ceiling, column…" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.solidPrivacy" +msgstr "Solid privacy" + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.traceALineAlongsideAnExisting" +msgstr "Trace a line alongside an existing lineset (F)." + +#: apps/editor/components/build-tab.tsx +msgid "app.buildTab.verticalSlats" +msgstr "Vertical slats" + #: apps/editor/components/editor-navbar.tsx msgid "app.editorNavbar.allProjects" msgstr "All projects" @@ -31,6 +171,270 @@ msgstr "Rename project" msgid "app.editorNavbar.share" msgstr "Share" +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.addLabel" +msgstr "Add {label}" + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.addToKitchen" +msgstr "Add to kitchen" + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.chooseAnItemThenClickTo" +msgstr "Choose an item, then click to place it. Appliances include their cabinetry." + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.findInThisProjectLength" +msgstr "Find in this project · {length}" + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.findName" +msgstr "Find {name}" + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.groupAdd" +msgstr "Kitchen · Add" + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.groupInThisProject" +msgstr "Kitchen · In this project" + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.kitchenCabinet" +msgstr "Kitchen cabinet" + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.noMatchingKitchenItemsPlacedYet" +msgstr "No matching kitchen items placed yet." + +#: apps/editor/components/kitchen-browser.tsx +msgid "app.kitchenBrowser.selectAndShowInScene" +msgstr "Select and show in scene" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.ceiling" +msgstr "Ceiling" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.column" +msgstr "Column" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.door" +msgstr "Door" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.duct" +msgstr "Duct" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.dwvPipe" +msgstr "DWV Pipe" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.elevator" +msgstr "Elevator" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.fence" +msgstr "Fence" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.hvacUnit" +msgstr "HVAC Unit" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.kitchen" +msgstr "Kitchen" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.lineset" +msgstr "Lineset" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.liquidLine" +msgstr "Liquid Line" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.mep" +msgstr "MEP" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.register" +msgstr "Register" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.roof" +msgstr "Roof" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.shelf" +msgstr "Shelf" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.slab" +msgstr "Slab" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.spawnPoint" +msgstr "Spawn point" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.stairs" +msgstr "Stairs" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.terrace" +msgstr "Terrace" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.terrain" +msgstr "Terrain" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.wall" +msgstr "Wall" + +#: apps/editor/lib/build-palette.ts +msgid "app.lib.buildPalette.window" +msgstr "Window" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.addFitting" +msgstr "Add Fitting" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.addGate" +msgstr "Add Gate" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.addOpenPassage" +msgstr "Add Open Passage" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.addTrap" +msgstr "Add Trap" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.build" +msgstr "Build" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.createFrom" +msgstr "Create from" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.drawTheRoofFootprintWithTwo" +msgstr "Draw the roof footprint with two corner clicks." + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.duct" +msgstr "Duct" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.dwvPipe" +msgstr "DWV Pipe" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.featuresExtensions" +msgstr "Features & extensions" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.fence" +msgstr "Fence" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.followLineset" +msgstr "Follow lineset" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.gatesOpenings" +msgstr "Gates & openings" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.hoverARoomToPreviewIts" +msgstr "Hover a room to preview its boundary, then click to place." + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.kitchen" +msgstr "Kitchen" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.mep" +msgstr "MEP" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.modularCabinet" +msgstr "Modular Cabinet" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.off" +msgstr "Off" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.on" +msgstr "On" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.painting" +msgstr "Painting" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.roof" +msgstr "Roof" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.roofType" +msgstr "Roof type" + +#: apps/editor/lib/build-panel-model.ts +msgid "app.lib.buildPanelModel.toolCount" +msgstr "{count, plural, one {# tool} other {# tools}}" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.conical" +msgstr "Conical" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.draw" +msgstr "Draw" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.dutch" +msgstr "Dutch" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.flat" +msgstr "Flat" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.gable" +msgstr "Gable" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.gambrel" +msgstr "Gambrel" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.hip" +msgstr "Hip" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.mansard" +msgstr "Mansard" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.room" +msgstr "Room" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.shed" +msgstr "Shed" + +#: apps/editor/lib/build-tab-state.ts +msgid "app.lib.buildTabState.wall" +msgstr "Wall" + #: apps/editor/components/share-panel.tsx msgid "app.sharePanel.anyoneWithTheLinkCanView" msgstr "Anyone with the link can view this project. They cannot edit it." @@ -359,6 +763,374 @@ msgstr "Floor {number}" msgid "core.level.groundFloor" msgstr "Ground floor" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +msgid "editor.actionMenu.cameraActions.orbitLeft" +msgstr "Orbit Left" + +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +msgid "editor.actionMenu.cameraActions.orbitRight" +msgstr "Orbit Right" + +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +msgid "editor.actionMenu.cameraActions.topView" +msgstr "Top View" + +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +msgid "editor.actionMenu.controlModes.delete" +msgstr "Delete" + +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +msgid "editor.actionMenu.controlModes.select" +msgstr "Select" + +#: packages/editor/src/components/ui/action-menu/follow-pascal-pill.tsx +msgid "editor.actionMenu.followPascalPill.resumeFollowing" +msgstr "Resume following" + +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +msgid "editor.actionMenu.followPascalToggle.off" +msgstr "Follow Pascal: Off" + +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +msgid "editor.actionMenu.followPascalToggle.on" +msgstr "Follow Pascal: On" + +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +msgid "editor.actionMenu.furnishTools.appliance" +msgstr "Appliance" + +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +msgid "editor.actionMenu.furnishTools.bathroom" +msgstr "Bathroom" + +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +msgid "editor.actionMenu.furnishTools.furniture" +msgstr "Furniture" + +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +msgid "editor.actionMenu.furnishTools.kitchen" +msgstr "Kitchen" + +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +msgid "editor.actionMenu.furnishTools.outdoor" +msgstr "Outdoor" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.angle" +msgstr "Angle" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.angularDimension" +msgstr "Angular dimension" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.arcLength" +msgstr "Arc length" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.area" +msgstr "Area" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.centerMark" +msgstr "Center mark" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.chordDimension" +msgstr "Chord dimension" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.continuousDimension" +msgstr "Continuous dimension" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.coordinateDimensions" +msgstr "Coordinate dimensions" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.diameterDimension" +msgstr "Diameter dimension" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.distance" +msgstr "Distance" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.floorPlan" +msgstr "Floor plan" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.linearDimension" +msgstr "Linear dimension" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.measurementOptions" +msgstr "Measurement options" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.measurementType" +msgstr "Measurement type" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.measureSelectedlabel" +msgstr "Measure: {selectedLabel}" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.perimeter" +msgstr "Perimeter" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.radiusDimension" +msgstr "Radius dimension" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.smart" +msgstr "Smart" + +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +msgid "editor.actionMenu.measurementControl.volume" +msgstr "Volume" + +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +msgid "editor.actionMenu.pointAskButton.pointAndAsk" +msgstr "Point and ask" + +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +msgid "editor.actionMenu.pointAskButton.pointAndAskC" +msgstr "Point and ask (C)" + +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +msgid "editor.actionMenu.pointAskButton.pointAndAskWorksInThe" +msgstr "Point and ask works in the 3D view" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.ceiling" +msgstr "Ceiling" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.column" +msgstr "Column" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.door" +msgstr "Door" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.duct" +msgstr "Duct" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.ductFitting" +msgstr "Duct Fitting" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.dwvPipe" +msgstr "DWV Pipe" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.elevator" +msgstr "Elevator" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.fence" +msgstr "Fence" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.gableRoof" +msgstr "Gable Roof" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.hvacUnit" +msgstr "HVAC Unit" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.lineset" +msgstr "Lineset" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.liquidLine" +msgstr "Liquid Line" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.pipeFitting" +msgstr "Pipe Fitting" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.register" +msgstr "Register" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.shelf" +msgstr "Shelf" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.slab" +msgstr "Slab" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.spawnPoint" +msgstr "Spawn Point" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.stairs" +msgstr "Stairs" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.trap" +msgstr "Trap" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.wall" +msgstr "Wall" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.window" +msgstr "Window" + +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +msgid "editor.actionMenu.structureTools.zone" +msgstr "Zone" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.below" +msgstr "below" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.deleteGuideImage" +msgstr "Delete guide image" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.deleteScan" +msgstr "Delete scan" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.guideCount" +msgstr "{count, plural, one {# guide image on this level} other {# guide images on this level}}" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.guideImageNumber" +msgstr "Guide image {number}" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.guideImages" +msgstr "Guide images" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.guideImageSettings" +msgstr "Guide image settings" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.guides" +msgstr "Guides" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.guidesHidden" +msgstr "Guides: Hidden" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.guidesVisible" +msgstr "Guides: Visible" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.hideGuideImages" +msgstr "Hide guide images" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.hideReferenceFloor" +msgstr "Hide reference floor" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.hideScans" +msgstr "Hide scans" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.noLowerFloorAvailable" +msgstr "No lower floor available." + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.opacity" +msgstr "Opacity" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.referenceFloor" +msgstr "Reference floor" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.referenceFloorSelectedlevelname" +msgstr "Reference floor: {selectedLevelName}" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.referenceFloorSettings" +msgstr "Reference floor settings" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.references" +msgstr "References" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.referencesEmpty" +msgstr "Upload GLB meshes as scan references or blueprint images as guide references." + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.referenceSettings" +msgstr "Reference settings" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.referencesHidden" +msgstr "References: Hidden" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.referencesVisible" +msgstr "References: Visible" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.riserDiagram" +msgstr "Riser diagram" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.scanCount" +msgstr "{count, plural, one {# scan on this level} other {# scans on this level}}" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.scanNumber" +msgstr "Scan {number}" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.scans" +msgstr "Scans" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.scanSettings" +msgstr "Scan settings" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.scansHidden" +msgstr "Scans: Hidden" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.scansVisible" +msgstr "Scans: Visible" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.showGuideImages" +msgstr "Show guide images" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.showReferenceFloor" +msgstr "Show reference floor" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.showScans" +msgstr "Show scans" + +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +msgid "editor.actionMenu.viewToggles.uploadScanOrGuideImage" +msgstr "Upload scan or guide image" + +#: packages/editor/src/components/editor/index.tsx +msgid "editor.backToHome" +msgstr "Back to home" + #: packages/editor/src/components/ui/build-panel/build-panel.tsx msgid "editor.buildPanel.advanced" msgstr "Advanced" @@ -423,79 +1195,1327 @@ msgstr "Draw one wall at a time." msgid "editor.buildPanel.rooms.walls.title" msgstr "Walls" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.plugins" -msgstr "Plugins" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.cameraControlsHint" +msgstr "Camera controls hint" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.view2d" -msgstr "2D" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.cameraHint.pan" +msgstr "Pan" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.view3d" -msgstr "3D" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.cameraHint.rotate" +msgstr "Rotate" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.auto" -msgstr "Auto" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.cameraHint.zoom" +msgstr "Zoom" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.browsePlugins" -msgstr "Browse plugins" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.dismiss" +msgstr "Dismiss" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.closeLabel" -msgstr "Close {label}" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.dismissCameraControlsHint" +msgstr "Dismiss camera controls hint" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.closeSplit" -msgstr "Close split (\\)" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.expandSidebar" +msgstr "Expand sidebar" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.ground" -msgstr "Ground" +#: packages/editor/src/components/editor/floating-action-menu.tsx +msgid "editor.floatingActionMenu.axis" +msgstr "Axis" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.groundSolid" -msgstr "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +msgid "editor.floatingActionMenu.axis2" +msgstr "⌥ axis" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.groundVeiled" -msgstr "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +msgid "editor.floatingActionMenu.noEquipment" +msgstr "⚠ no equipment" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.keepTheGroundSolid" -msgstr "Keep the ground solid" +#: packages/editor/src/components/editor/floating-action-menu.tsx +msgid "editor.floatingActionMenu.registerCount" +msgstr "{count, plural, one {# register} other {# registers}}" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.moreViews" -msgstr "More views" +#: packages/editor/src/components/editor/floating-action-menu.tsx +msgid "editor.floatingActionMenu.rTRotate" +msgstr "R/T rotate" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.paneViews" -msgstr "Pane {pane} views" +#: packages/editor/src/components/editor/floating-action-menu.tsx +msgid "editor.floatingActionMenu.runCount" +msgstr "{count, plural, one {# run} other {# runs}}" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.pinLabel" -msgstr "Pin {label}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +msgid "editor.floatingActionMenu.system" +msgstr "System" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.pinToTheViewBar" -msgstr "Pin to the view bar" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +msgid "editor.helpers.buildingHelper.cancel" +msgstr "Cancel" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.solid" -msgstr "Solid" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +msgid "editor.helpers.buildingHelper.placeBuilding" +msgstr "Place building" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.split" -msgstr "Split (\\)" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +msgid "editor.helpers.buildingHelper.rotate" +msgstr "Rotate" -#: packages/editor/src/components/editor/views/view-bar.tsx -msgid "editor.views.viewBar.split2" -msgstr "Split" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.cancelPlacement" +msgstr "Cancel placement" -#: packages/editor/src/components/editor/views/view-bar.tsx +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.continuationClickOrPressCTo" +msgstr "Continuation — click or press C to cycle" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.continuationLabel" +msgstr "Continuation: {label}" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.dragToDrawFence" +msgstr "Drag to draw fence" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT" +msgstr "Fence type — click or press T to switch between straight, curved and freehand" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.fewerShortcuts" +msgstr "Fewer shortcuts" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick" +msgstr "Finish curve (or double-click)" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.gridLength" +msgstr "Grid: {length}" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl" +msgstr "Grid step — click or tap Ctrl to cycle" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.gridStepLength" +msgstr "Grid step: {length}" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase" +msgstr "Hover a painted surface to erase" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPaint" +msgstr "Hover a surface to paint" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts" +msgstr "Hover a surface to pick its material" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.moreShortcuts" +msgstr "More shortcuts" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.placeGateOnAFence" +msgstr "Place gate on a fence" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.placePassageOnAFence" +msgstr "Place passage on a fence" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.selectAMaterialToPaint" +msgstr "Select a material to paint" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.snappingAngles" +msgstr "Snapping: Angles" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.snappingGrid" +msgstr "Snapping: Grid" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.snappingLines" +msgstr "Snapping: Lines" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift" +msgstr "Snapping mode — click or press Shift to cycle" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.snappingOff" +msgstr "Snapping: Off" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved" +msgstr "Straight continuation is unavailable for curved or freehand fences" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.straightContinuous" +msgstr "Straight: Continuous" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress" +msgstr "Straight fence continuation — click or press C to toggle" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.straightSingle" +msgstr "Straight: Single" + +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +msgid "editor.helpers.contextualHelperPanel.verbScopeClickOrPressShift" +msgstr "{verb} scope — click or press Shift to cycle" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.addPoint" +msgstr "Add point" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.addPointClickTheFirstTo" +msgstr "Add point · click the first to close" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.brushSize" +msgstr "Brush size" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.cancel" +msgstr "Cancel" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.cancelPicking" +msgstr "Cancel picking" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.cancelStroke" +msgstr "Cancel stroke" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.done" +msgstr "Done" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.drawTheMezzanine" +msgstr "Draw the mezzanine" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.drawTheOpening" +msgstr "Draw the opening" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.drawTheTerrace" +msgstr "Draw the terrace" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.exitSmartMeasure" +msgstr "Exit smart measure" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.finish" +msgstr "Finish" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.finishAtTheEdge" +msgstr "Finish at the edge" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.freeMove" +msgstr "Free move" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.freeMoveSlideDoorsAndWindows" +msgstr "Free move · slide doors and windows" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.holdToPickAMaterial" +msgstr "Hold to pick a material" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.inspectSurfaceDimensions" +msgstr "Inspect surface dimensions" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.paintWithThisMaterial" +msgstr "Paint with this material" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.pickTargetHeight" +msgstr "Pick target height" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.pinMeasurementLens" +msgstr "Pin measurement lens" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.place" +msgstr "Place" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.placeInsideTheRoom" +msgstr "Place inside the room" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.pressAnywhereDragToTheOpposite" +msgstr "Press anywhere, drag to the opposite corner" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.raiseOrLower" +msgstr "Raise or lower" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.removeAPaintedPartOrReset" +msgstr "Remove a painted part, or reset a surface" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.removeLastPoint" +msgstr "Remove last point" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.resize" +msgstr "Resize" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.rotate45" +msgstr "Rotate ±45°" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.rotateTheSelection45" +msgstr "Rotate the selection ±45°" + +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +msgid "editor.helpers.helperManager.setOneCornerThenTheOpposite" +msgstr "Set one corner, then the opposite" + +#: packages/editor/src/components/ui/helpers/item-helper.tsx +msgid "editor.helpers.itemHelper.cancel" +msgstr "Cancel" + +#: packages/editor/src/components/ui/helpers/item-helper.tsx +msgid "editor.helpers.itemHelper.forcePlace" +msgstr "Force place" + +#: packages/editor/src/components/ui/helpers/item-helper.tsx +msgid "editor.helpers.itemHelper.place" +msgstr "Place" + +#: packages/editor/src/components/ui/helpers/item-helper.tsx +msgid "editor.helpers.itemHelper.rotate" +msgstr "Rotate" + +#: packages/editor/src/components/ui/helpers/registered-tool-helper.tsx +msgid "editor.helpers.registeredToolHelper.guidedConstraintsBypassed" +msgstr "Guided constraints bypassed" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.addOrRemoveObjectsFromThe" +msgstr "Add or remove objects from the selection" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.adjustOneSideSCornerRadius" +msgstr "Adjust one side’s corner radius" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.clearTheSelectionOrClickOutside" +msgstr "Clear the selection (or click outside)" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.clickAHandleDotToShow" +msgstr "Click a handle dot to show move arrows" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.clickOrDragTheSelectionTo" +msgstr "Click or drag the selection to move it as one" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.clickTheHandleDotToShow" +msgstr "Click the handle dot to show move + rotate handles" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.detachTheJointWhileDraggingAn" +msgstr "Detach the joint while dragging an arrow" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.dragLeftOrRightToRotate" +msgstr "Drag left or right to rotate selected object" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.dragSelectedMovableObject" +msgstr "Drag selected movable object" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.groupSelectionSessionOnly" +msgstr "Group selection (session only)" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.holdToRotateFreely" +msgstr "Hold to rotate freely" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.rotate45" +msgstr "Rotate ±45°" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.rotateTheSelection45" +msgstr "Rotate the selection ±45°" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.rotatingFreely" +msgstr "Rotating freely (no angle step)" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.switchTheRotationAxisYX" +msgstr "Switch the rotation axis (Y → X → Z)" + +#: packages/editor/src/lib/contextual-help.ts +msgid "editor.lib.contextualHelp.ungroupSessionSelection" +msgstr "Ungroup session selection" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.continuous" +msgstr "Continuous" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.continuousCanopy" +msgstr "Continuous canopy" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.continuousRun" +msgstr "Continuous run" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.curvedFence" +msgstr "Curved fence" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.freehandFence" +msgstr "Freehand fence" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.placeMultiple" +msgstr "Place multiple" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.placeOnce" +msgstr "Place once" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.polygonRoom" +msgstr "Polygon room" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.rectangleRoom" +msgstr "Rectangle room" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.singleCabinet" +msgstr "Single cabinet" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.singleCanopy" +msgstr "Single canopy" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.singleFence" +msgstr "Single fence" + +#: packages/editor/src/lib/continuation.ts +msgid "editor.lib.continuation.walls" +msgstr "Walls" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.cutOpening" +msgstr "Cut opening" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.divideRoom" +msgstr "Divide room" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.editKind" +msgstr "Edit {kind}" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.erase" +msgstr "Erase" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.levelTerrain" +msgstr "Level terrain" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.lowerTerrain" +msgstr "Lower terrain" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.mezzanine" +msgstr "Mezzanine" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.moveKind" +msgstr "Move {kind}" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.moveRoom" +msgstr "Move room" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.moveSelection" +msgstr "Move selection" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.paint" +msgstr "Paint" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.paintARectangle" +msgstr "Paint a rectangle" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.paintAShape" +msgstr "Paint a shape" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.pickMaterial" +msgstr "Pick material" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.raiseTerrain" +msgstr "Raise terrain" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.resize" +msgstr "Resize" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.rotate" +msgstr "Rotate" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.select" +msgstr "Select" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.smartMeasure" +msgstr "Smart measure" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.smoothTerrain" +msgstr "Smooth terrain" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.splitKind" +msgstr "Split {kind}" + +#: packages/editor/src/lib/hud-title.ts +msgid "editor.lib.hudTitle.terrace" +msgstr "Terrace" + +#: packages/editor/src/lib/wall-draw-variant.ts +msgid "editor.lib.wallDrawVariant.polygonRoom" +msgstr "Polygon room" + +#: packages/editor/src/lib/wall-draw-variant.ts +msgid "editor.lib.wallDrawVariant.rectangleRoom" +msgstr "Rectangle room" + +#: packages/editor/src/lib/wall-draw-variant.ts +msgid "editor.lib.wallDrawVariant.walls" +msgstr "Walls" + +#: packages/editor/src/components/editor/index.tsx +msgid "editor.reloadEditor" +msgstr "Reload editor" + +#: packages/editor/src/components/editor/index.tsx +msgid "editor.theEditorSceneFailedToRender" +msgstr "The editor scene failed to render" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.aCurtainWallTakesNoCorner" +msgstr "A curtain wall takes no corner window" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.aCurvedWallTakesNoCorner" +msgstr "A curved wall takes no corner window" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.addACornerClickTheFirst" +msgstr "Add a corner · click the first to close" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.anotherOpeningIsInTheWay" +msgstr "Another opening is in the way at the corner" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.autoHangers" +msgstr "Auto hangers" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.autoHangersClickOrPressH" +msgstr "Auto hangers - click or press H to toggle" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.autoHangersOff" +msgstr "Auto hangers: Off" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.autoHangersOn" +msgstr "Auto hangers: On" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.bypassSnapping" +msgstr "Bypass snapping" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cancel" +msgstr "Cancel" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cancelMove" +msgstr "Cancel move" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cancelRunExit" +msgstr "Cancel run / exit" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cancelStartPoint" +msgstr "Cancel start point" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cornerWindow" +msgstr "Corner window" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cuts" +msgstr "Cuts" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cutsValue" +msgstr "Cuts: {value}" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cutsValueEven" +msgstr "Cuts: {value}, even" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cycleMonoGableButterfly" +msgstr "Cycle mono / gable / butterfly" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.cycleSnappingMode" +msgstr "Cycle snapping mode" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.doorStyleClickOrPressL" +msgstr "Door style — click or press L to cycle" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.doorTypeClickOrPressO" +msgstr "Door type — click or press O to cycle" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.dropDownspoutFromOutlet" +msgstr "Drop downspout from outlet" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.ductDiameterDownUp" +msgstr "Duct diameter down / up" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.endRunCancel" +msgstr "End run / cancel" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.exit" +msgstr "Exit" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.exitDrawing" +msgstr "Exit drawing" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.finishAndContinue" +msgstr "Finish and continue" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.finishCeiling" +msgstr "Finish ceiling" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.finishGridAxis" +msgstr "Finish grid axis" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.finishMeasurement" +msgstr "Finish measurement" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.finishMultiPointWitnesses" +msgstr "Finish multi-point witnesses" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.finishSlab" +msgstr "Finish slab" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.flipSide" +msgstr "Flip side" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.followTraceALineset" +msgstr "Follow: trace a lineset" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.forcePlace" +msgstr "Force place" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.freePlacement" +msgstr "Free placement" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.goVerticalClickToPlace" +msgstr "Go vertical ↕, click to place" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.highlightOutlet" +msgstr "Highlight outlet" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.joinAsACornerWindow" +msgstr "Join as a corner window" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.altDrag" +msgstr "Alt + drag" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.backspace" +msgstr "Backspace" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.click" +msgstr "Click" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.clickAgain" +msgstr "Click again" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.command" +msgstr "Command" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.control" +msgstr "Control" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.delete" +msgstr "Delete" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.doubleClick" +msgstr "Double click" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.drag" +msgstr "Drag" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.enter" +msgstr "Enter" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.hover" +msgstr "Hover" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.hoverADuctEnd" +msgstr "Hover a duct end" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.hoverAPipeEnd" +msgstr "Hover a pipe end" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.hoverGutter" +msgstr "Hover gutter" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.leftClick" +msgstr "Left click" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.middleClick" +msgstr "Middle click" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.rightClick" +msgstr "Right click" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.rShiftR" +msgstr "R / Shift+R" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.scroll" +msgstr "Scroll" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.scrollWheel" +msgstr "Scroll wheel" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.space" +msgstr "Space" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.key.tab" +msgstr "Tab" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.mountFloorCeilingWall" +msgstr "Mount: floor / ceiling / wall" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.noRoomForTheMatchingWindow" +msgstr "No room for the matching window on the other wall" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.noWallMeetsHere" +msgstr "No wall meets here" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.numberOfCutsScrollOrClick" +msgstr "Number of cuts — scroll or click to change" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.pickWitnessPoint" +msgstr "Pick witness point" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.pipeSizeDownUp" +msgstr "Pipe size down / up" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeAndContinue" +msgstr "Place and continue" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeBlock" +msgstr "Place block" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeBoxVentOnRoof" +msgstr "Place box vent on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeCabinet" +msgstr "Place cabinet" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeCanopyOrSetTheNext" +msgstr "Place canopy or set the next run point" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeChimneyOnRoof" +msgstr "Place chimney on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeColumn" +msgstr "Place column" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeCupolaOnRoof" +msgstr "Place cupola on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeDimensionLineWhenNeeded" +msgstr "Place dimension line when needed" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeDoorOnWall" +msgstr "Place door on wall" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeDormerOnRoof" +msgstr "Place dormer on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeElevator" +msgstr "Place elevator" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeEyebrowVentOnRoof" +msgstr "Place eyebrow vent on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeFitting" +msgstr "Place fitting" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeGutterOnRoofEave" +msgstr "Place gutter on roof eave" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeItem" +msgstr "Place item" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeItLockedTo45" +msgstr "Place it (locked to 45°)" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeMeasurementPoint" +msgstr "Place measurement point" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placement" +msgstr "Placement" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placementAuto" +msgstr "Placement: Auto" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placementGround" +msgstr "Placement: Ground" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placementRoof" +msgstr "Placement: Roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placementSurfaceClickOrPressP" +msgstr "Placement surface - click or press P to cycle" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placementType" +msgstr "Placement type" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placementTypeClickOrPressI" +msgstr "Placement type — click or press I to toggle" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeOnAFence" +msgstr "Place on a fence" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeRegister" +msgstr "Place register" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeRidgeVentOnRoof" +msgstr "Place ridge vent on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeShelf" +msgstr "Place shelf" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeSkylightOnRoof" +msgstr "Place skylight on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeSolarPanelArrayOnRoof" +msgstr "Place solar panel array on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeSpawnPoint" +msgstr "Place spawn point" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeStairs" +msgstr "Place stairs" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeTrap" +msgstr "Place trap" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeTurbineVentOnRoof" +msgstr "Place turbine vent on roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeUnit" +msgstr "Place unit" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeWindowOnWall" +msgstr "Place window on wall" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.placeWithoutTheCornerSnap" +msgstr "Place without the corner snap" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.removeLastPoint" +msgstr "Remove last point" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.removeLastWitness" +msgstr "Remove last witness" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.rotate" +msgstr "Rotate" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.rotate45" +msgstr "Rotate ±45°" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.rotate45FloorCeiling" +msgstr "Rotate ±45° (floor / ceiling)" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.rotateGhost15" +msgstr "Rotate ghost ±15°" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.rotateOrFlipTheRunSide" +msgstr "Rotate or flip the run side" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.rotateRoofDirection90" +msgstr "Rotate roof direction 90°" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.rotateSpawnPoint" +msgstr "Rotate spawn point" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.roundRectangularOval" +msgstr "Round / rectangular / oval" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.setFenceStartEnd" +msgstr "Set fence start / end" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.setOneCornerThenTheOpposite" +msgstr "Set one corner, then the opposite" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.setRoofFootprint" +msgstr "Set roof footprint" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.setWallStartEnd" +msgstr "Set wall start / end" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.slopeLevel" +msgstr "Slope / level" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.snapOntoTheRun" +msgstr "Snap onto the run" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.splitAtTheMarks" +msgstr "Split at the marks" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.startGridAxis" +msgstr "Start grid axis" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.startLineset" +msgstr "Start lineset" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.startLiquidLine" +msgstr "Start liquid line" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.startRun" +msgstr "Start run" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.startSegment" +msgstr "Start segment" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.stepBackOrCancel" +msgstr "Step back or cancel" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.style" +msgstr "Style" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleBarn" +msgstr "Style: Barn" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleCasement" +msgstr "Style: Casement" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleCraftsman" +msgstr "Style: Craftsman" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleDoubleHung" +msgstr "Style: Double-hung" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleFrench" +msgstr "Style: French" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleGlass" +msgstr "Style: Glass" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleGrid" +msgstr "Style: Grid" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleHalfLouvered" +msgstr "Style: Half-louvered" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleHorizontalBands" +msgstr "Style: Horizontal bands" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleModern" +msgstr "Style: Modern" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.stylePanel" +msgstr "Style: Panel" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.stylePaneledGlass" +msgstr "Style: Paneled glass" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleShaker" +msgstr "Style: Shaker" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleSingle" +msgstr "Style: Single" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleSixPanel" +msgstr "Style: Six-panel" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleSliding" +msgstr "Style: Sliding" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleTallGrid" +msgstr "Style: Tall grid" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleTransom" +msgstr "Style: Transom" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleTripleHung" +msgstr "Style: Triple-hung" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.styleWideGrid" +msgstr "Style: Wide grid" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.switchRotationAxisYXZ" +msgstr "Switch rotation axis (Y → X → Z)" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.theWallsMeetAtTooSharp" +msgstr "The walls meet at too sharp or too flat an angle" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.theWindowWaitingThereIsTaller" +msgstr "The window waiting there is taller than this wall" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.threeOrMoreWallsMeetHere" +msgstr "Three or more walls meet here" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.traceCeilingOutline" +msgstr "Trace ceiling outline" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.traceSlabOutline" +msgstr "Trace slab outline" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.type" +msgstr "Type" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeAwning" +msgstr "Type: Awning" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeBarn" +msgstr "Type: Barn" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeBay" +msgstr "Type: Bay" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeBow" +msgstr "Type: Bow" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeCabinet" +msgstr "Type: Cabinet" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeCasement" +msgstr "Type: Casement" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeDouble" +msgstr "Type: Double" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeDoubleHung" +msgstr "Type: Double Hung" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeFixed" +msgstr "Type: Fixed" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeFolding" +msgstr "Type: Folding" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeFrench" +msgstr "Type: French" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeHinged" +msgstr "Type: Hinged" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeIsland" +msgstr "Type: Island" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeLouvered" +msgstr "Type: Louvered" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typePocket" +msgstr "Type: Pocket" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeSingleHung" +msgstr "Type: Single Hung" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.typeSliding" +msgstr "Type: Sliding" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.verticalStackClickToPlace" +msgstr "Vertical stack ↕, click to place" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.wasteVent" +msgstr "Waste / vent" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.windowStyleClickOrPressL" +msgstr "Window style — click or press L to cycle" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "editor.toolHint.windowTypeClickOrPressO" +msgstr "Window type — click or press O to cycle" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.plugins" +msgstr "Plugins" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.view2d" +msgstr "2D" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.view3d" +msgstr "3D" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.auto" +msgstr "Auto" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.browsePlugins" +msgstr "Browse plugins" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.closeLabel" +msgstr "Close {label}" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.closeSplit" +msgstr "Close split (\\)" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.ground" +msgstr "Ground" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.groundSolid" +msgstr "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.groundVeiled" +msgstr "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.keepTheGroundSolid" +msgstr "Keep the ground solid" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.moreViews" +msgstr "More views" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.paneViews" +msgstr "Pane {pane} views" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.pinLabel" +msgstr "Pin {label}" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.pinToTheViewBar" +msgstr "Pin to the view bar" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.solid" +msgstr "Solid" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.split" +msgstr "Split (\\)" + +#: packages/editor/src/components/editor/views/view-bar.tsx +msgid "editor.views.viewBar.split2" +msgstr "Split" + +#: packages/editor/src/components/editor/views/view-bar.tsx msgid "editor.views.viewBar.swapPanes" msgstr "Swap panes" @@ -515,6 +2535,442 @@ msgstr "Veil the ground over a level below grade" msgid "editor.views.viewBar.views" msgstr "Views" +#: packages/editor/src/components/editor/index.tsx +msgid "editor.youCanRetryTheSceneOr" +msgstr "You can retry the scene or return home without reloading the whole app shell." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.block.description" +msgstr "A topology-backed solid edited directly in the canvas." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.block.label" +msgstr "Block" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.boxVent.description" +msgstr "Small louvered exhaust vent that sits on a roof slope." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.boxVent.label" +msgstr "Box Vent" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.building.description" +msgstr "A building container holding one or more levels." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.building.label" +msgstr "Building" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.cabinet.description" +msgstr "A configurable parametric base cabinet." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.cabinet.label" +msgstr "Modular Cabinet" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.cabinetModule.description" +msgstr "An editable module inside a modular cabinet run." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.cabinetModule.label" +msgstr "Cabinet Module" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ceiling.description" +msgstr "A polygon-bounded ceiling surface that hosts ceiling-mounted items." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ceiling.label" +msgstr "Ceiling" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.chimney.description" +msgstr "Vertical masonry stack on a roof segment." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.chimney.label" +msgstr "Chimney" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.column.description" +msgstr "A parametric column with configurable cross-section, base, and capital." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.column.label" +msgstr "Column" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.constructionDimension.description" +msgstr "Associative linear, curved, circular, angular, or coordinate plan dimension." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.constructionDimension.label" +msgstr "Construction Dimension" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.cupola.description" +msgstr "Louvered roof lantern with a dome or pyramid cap and optional finial." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.cupola.label" +msgstr "Cupola" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.door.description" +msgstr "A door cut into a wall. Animated open/close state." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.door.label" +msgstr "Door" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.dormer.description" +msgstr "House-shaped protrusion on a roof segment." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.dormer.label" +msgstr "Dormer" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.downspout.description" +msgstr "Vertical drop pipe from a gutter outlet to the ground." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.downspout.label" +msgstr "Downspout" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ductFitting.description" +msgstr "Elbow, tee, reducer, or square-to-round transition connecting duct runs." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ductFitting.label" +msgstr "Duct Fitting" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ductSegment.description" +msgstr "HVAC duct run — polyline of round, rect, or flat-oval sections." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ductSegment.label" +msgstr "Duct" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ductTerminal.description" +msgstr "Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ductTerminal.label" +msgstr "Register" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.elevator.description" +msgstr "A multi-level elevator shaft with configurable openings per level." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.elevator.label" +msgstr "Elevator" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.eyebrowVent.description" +msgstr "Low curved lens-shaped roof vent with a louvered front." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.eyebrowVent.label" +msgstr "Eyebrow Vent" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.fence.description" +msgstr "A straight or curved fence segment with configurable posts and infill." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.fence.label" +msgstr "Fence" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.fenceGate.description" +msgstr "A gate hosted by a fence." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.fenceGate.label" +msgstr "Gate" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.fenceOpening.description" +msgstr "An intentional opening in a fence." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.fenceOpening.label" +msgstr "Open Passage" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.floorOpening.label" +msgstr "Floor opening" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.guide.description" +msgstr "A measurement / reference annotation (linear, area, or arc)." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.guide.label" +msgstr "Guide" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.gutter.description" +msgstr "Rain-water channel running along the eave of a roof segment." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.gutter.label" +msgstr "Gutter" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.hvacEquipment.description" +msgstr "Furnace, air handler, or condenser — duct runs connect to its supply/return collars." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.hvacEquipment.label" +msgstr "HVAC Unit" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.importedMesh.description" +msgstr "Geometry preserved from an imported model when no native Pascal shape exists." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.importedMesh.label" +msgstr "Imported Mesh" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.item.description" +msgstr "A catalog-backed item (furniture, fixtures, decorations)." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.item.label" +msgstr "Item" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.leanToExtension.description" +msgstr "An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.leanToExtension.label" +msgstr "Canopy" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.level.description" +msgstr "A single floor of a building, holding walls / slabs / ceilings / items." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.level.label" +msgstr "Level" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.lineset.description" +msgstr "Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.lineset.label" +msgstr "Lineset" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.liquidLine.description" +msgstr "Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.liquidLine.label" +msgstr "Liquid Line" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.measurement.description" +msgstr "A persistent distance, angle, area, perimeter, or volume annotation." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.measurement.label" +msgstr "Measurement" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.pipeFitting.description" +msgstr "DWV joint — elbow bend, 45° wye, or sanitary tee." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.pipeFitting.label" +msgstr "Pipe Fitting" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.pipeSegment.description" +msgstr "Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.pipeSegment.label" +msgstr "DWV Pipe" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.pipeTrap.description" +msgstr "DWV P-trap — water seal on the waste line. The trap arm runs to the vent." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.pipeTrap.label" +msgstr "Trap" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.proceduralItem.description" +msgstr "Experimental editable recipe" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.proceduralItem.label" +msgstr "Procedural item" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ridgeVent.description" +msgstr "Ventilation strip running along the ridge of a roof segment." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.ridgeVent.label" +msgstr "Ridge Vent" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.roof.description" +msgstr "A pitched / hip / gable roof composed of one or more segments." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.roof.label" +msgstr "Roof" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.roofSegment.description" +msgstr "A single pitched plane of a parent roof." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.roofSegment.label" +msgstr "Roof Segment" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.scan.description" +msgstr "A captured session with optional mesh, motion, media, and sensor data." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.scan.label" +msgstr "Capture" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.separator.label" +msgstr "Separator" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.shelf.description" +msgstr "A configurable shelving unit. Items host on each row." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.shelf.label" +msgstr "Shelf" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.site.description" +msgstr "The top-level container holding buildings, zones, and the property boundary." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.site.label" +msgstr "Site" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.skylight.description" +msgstr "Framed glass opening on a roof segment." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.skylight.label" +msgstr "Skylight" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.slab.description" +msgstr "A polygon-bounded floor surface that hosts items on top." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.slab.label" +msgstr "Slab" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.solarPanel.description" +msgstr "Grid of photovoltaic panels mounted on a roof segment." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.solarPanel.label" +msgstr "Solar Panel" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.spawn.description" +msgstr "Player or camera origin within a level. One per level." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.spawn.label" +msgstr "Spawn Point" + +#: 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/i18n/definition-messages.ts +msgid "node.stair.label" +msgstr "Stair" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.stairSegment.description" +msgstr "A single flight of a parent stair." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.stairSegment.label" +msgstr "Stair Segment" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.structuralGrid.description" +msgstr "Persistent construction grid axis with identification bubbles." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.structuralGrid.label" +msgstr "Structural Grid" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.turbineVent.description" +msgstr "Wind-driven spinning whirlybird exhaust vent for a roof slope." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.turbineVent.label" +msgstr "Turbine Vent" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.unit.description" +msgstr "A named group of zones forming one apartment, hotel room or commercial lot." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.unit.label" +msgstr "Unit" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.wall.description" +msgstr "A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.wall.label" +msgstr "Wall" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.window.description" +msgstr "A window cut into a wall. Animated open/close for opening windows." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.window.label" +msgstr "Window" + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.zone.description" +msgstr "A polygonal site zone (lawn, water, paving) with a TSL gradient material." + +#: packages/nodes/src/i18n/definition-messages.ts +msgid "node.zone.label" +msgstr "Zone" + #: packages/editor/src/components/viewer/viewer-controls-bar.tsx msgid "viewer.camera.orbitLeft" msgstr "Orbit left" diff --git a/packages/editor/src/i18n/locales/en/messages.ts b/packages/editor/src/i18n/locales/en/messages.ts index ec15fe933b..f6590438d1 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.editorNavbar.allProjects\":[\"All projects\"],\"app.editorNavbar.preview\":[\"Preview\"],\"app.editorNavbar.projectName\":[\"Project name\"],\"app.editorNavbar.renameProject\":[\"Rename project\"],\"app.editorNavbar.share\":[\"Share\"],\"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.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.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\"],\"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.below\":[\"below\"],\"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.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.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.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.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.contextualHelperPanel.verbScopeClickOrPressShift\":[[\"verb\"],\" scope — click or press Shift to cycle\"],\"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.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.reloadEditor\":[\"Reload editor\"],\"editor.theEditorSceneFailedToRender\":[\"The editor scene failed to render\"],\"editor.toolHint.aCurtainWallTakesNoCorner\":[\"A curtain wall takes no corner window\"],\"editor.toolHint.aCurvedWallTakesNoCorner\":[\"A curved wall takes no corner window\"],\"editor.toolHint.addACornerClickTheFirst\":[\"Add a corner · click the first to close\"],\"editor.toolHint.anotherOpeningIsInTheWay\":[\"Another opening is in the way at the corner\"],\"editor.toolHint.autoHangers\":[\"Auto hangers\"],\"editor.toolHint.autoHangersClickOrPressH\":[\"Auto hangers - click or press H to toggle\"],\"editor.toolHint.autoHangersOff\":[\"Auto hangers: Off\"],\"editor.toolHint.autoHangersOn\":[\"Auto hangers: On\"],\"editor.toolHint.bypassSnapping\":[\"Bypass snapping\"],\"editor.toolHint.cancel\":[\"Cancel\"],\"editor.toolHint.cancelMove\":[\"Cancel move\"],\"editor.toolHint.cancelRunExit\":[\"Cancel run / exit\"],\"editor.toolHint.cancelStartPoint\":[\"Cancel start point\"],\"editor.toolHint.cornerWindow\":[\"Corner window\"],\"editor.toolHint.cuts\":[\"Cuts\"],\"editor.toolHint.cutsValue\":[\"Cuts: \",[\"value\"]],\"editor.toolHint.cutsValueEven\":[\"Cuts: \",[\"value\"],\", even\"],\"editor.toolHint.cycleMonoGableButterfly\":[\"Cycle mono / gable / butterfly\"],\"editor.toolHint.cycleSnappingMode\":[\"Cycle snapping mode\"],\"editor.toolHint.doorStyleClickOrPressL\":[\"Door style — click or press L to cycle\"],\"editor.toolHint.doorTypeClickOrPressO\":[\"Door type — click or press O to cycle\"],\"editor.toolHint.dropDownspoutFromOutlet\":[\"Drop downspout from outlet\"],\"editor.toolHint.ductDiameterDownUp\":[\"Duct diameter down / up\"],\"editor.toolHint.endRunCancel\":[\"End run / cancel\"],\"editor.toolHint.exit\":[\"Exit\"],\"editor.toolHint.exitDrawing\":[\"Exit drawing\"],\"editor.toolHint.finishAndContinue\":[\"Finish and continue\"],\"editor.toolHint.finishCeiling\":[\"Finish ceiling\"],\"editor.toolHint.finishGridAxis\":[\"Finish grid axis\"],\"editor.toolHint.finishMeasurement\":[\"Finish measurement\"],\"editor.toolHint.finishMultiPointWitnesses\":[\"Finish multi-point witnesses\"],\"editor.toolHint.finishSlab\":[\"Finish slab\"],\"editor.toolHint.flipSide\":[\"Flip side\"],\"editor.toolHint.followTraceALineset\":[\"Follow: trace a lineset\"],\"editor.toolHint.forcePlace\":[\"Force place\"],\"editor.toolHint.freePlacement\":[\"Free placement\"],\"editor.toolHint.goVerticalClickToPlace\":[\"Go vertical ↕, click to place\"],\"editor.toolHint.highlightOutlet\":[\"Highlight outlet\"],\"editor.toolHint.joinAsACornerWindow\":[\"Join as a corner window\"],\"editor.toolHint.key.altDrag\":[\"Alt + drag\"],\"editor.toolHint.key.backspace\":[\"Backspace\"],\"editor.toolHint.key.click\":[\"Click\"],\"editor.toolHint.key.clickAgain\":[\"Click again\"],\"editor.toolHint.key.command\":[\"Command\"],\"editor.toolHint.key.control\":[\"Control\"],\"editor.toolHint.key.delete\":[\"Delete\"],\"editor.toolHint.key.doubleClick\":[\"Double click\"],\"editor.toolHint.key.drag\":[\"Drag\"],\"editor.toolHint.key.enter\":[\"Enter\"],\"editor.toolHint.key.hover\":[\"Hover\"],\"editor.toolHint.key.hoverADuctEnd\":[\"Hover a duct end\"],\"editor.toolHint.key.hoverAPipeEnd\":[\"Hover a pipe end\"],\"editor.toolHint.key.hoverGutter\":[\"Hover gutter\"],\"editor.toolHint.key.leftClick\":[\"Left click\"],\"editor.toolHint.key.middleClick\":[\"Middle click\"],\"editor.toolHint.key.rShiftR\":[\"R / Shift+R\"],\"editor.toolHint.key.rightClick\":[\"Right click\"],\"editor.toolHint.key.scroll\":[\"Scroll\"],\"editor.toolHint.key.scrollWheel\":[\"Scroll wheel\"],\"editor.toolHint.key.space\":[\"Space\"],\"editor.toolHint.key.tab\":[\"Tab\"],\"editor.toolHint.mountFloorCeilingWall\":[\"Mount: floor / ceiling / wall\"],\"editor.toolHint.noRoomForTheMatchingWindow\":[\"No room for the matching window on the other wall\"],\"editor.toolHint.noWallMeetsHere\":[\"No wall meets here\"],\"editor.toolHint.numberOfCutsScrollOrClick\":[\"Number of cuts — scroll or click to change\"],\"editor.toolHint.pickWitnessPoint\":[\"Pick witness point\"],\"editor.toolHint.pipeSizeDownUp\":[\"Pipe size down / up\"],\"editor.toolHint.placeAndContinue\":[\"Place and continue\"],\"editor.toolHint.placeBlock\":[\"Place block\"],\"editor.toolHint.placeBoxVentOnRoof\":[\"Place box vent on roof\"],\"editor.toolHint.placeCabinet\":[\"Place cabinet\"],\"editor.toolHint.placeCanopyOrSetTheNext\":[\"Place canopy or set the next run point\"],\"editor.toolHint.placeChimneyOnRoof\":[\"Place chimney on roof\"],\"editor.toolHint.placeColumn\":[\"Place column\"],\"editor.toolHint.placeCupolaOnRoof\":[\"Place cupola on roof\"],\"editor.toolHint.placeDimensionLineWhenNeeded\":[\"Place dimension line when needed\"],\"editor.toolHint.placeDoorOnWall\":[\"Place door on wall\"],\"editor.toolHint.placeDormerOnRoof\":[\"Place dormer on roof\"],\"editor.toolHint.placeElevator\":[\"Place elevator\"],\"editor.toolHint.placeEyebrowVentOnRoof\":[\"Place eyebrow vent on roof\"],\"editor.toolHint.placeFitting\":[\"Place fitting\"],\"editor.toolHint.placeGutterOnRoofEave\":[\"Place gutter on roof eave\"],\"editor.toolHint.placeItLockedTo45\":[\"Place it (locked to 45°)\"],\"editor.toolHint.placeItem\":[\"Place item\"],\"editor.toolHint.placeMeasurementPoint\":[\"Place measurement point\"],\"editor.toolHint.placeOnAFence\":[\"Place on a fence\"],\"editor.toolHint.placeRegister\":[\"Place register\"],\"editor.toolHint.placeRidgeVentOnRoof\":[\"Place ridge vent on roof\"],\"editor.toolHint.placeShelf\":[\"Place shelf\"],\"editor.toolHint.placeSkylightOnRoof\":[\"Place skylight on roof\"],\"editor.toolHint.placeSolarPanelArrayOnRoof\":[\"Place solar panel array on roof\"],\"editor.toolHint.placeSpawnPoint\":[\"Place spawn point\"],\"editor.toolHint.placeStairs\":[\"Place stairs\"],\"editor.toolHint.placeTrap\":[\"Place trap\"],\"editor.toolHint.placeTurbineVentOnRoof\":[\"Place turbine vent on roof\"],\"editor.toolHint.placeUnit\":[\"Place unit\"],\"editor.toolHint.placeWindowOnWall\":[\"Place window on wall\"],\"editor.toolHint.placeWithoutTheCornerSnap\":[\"Place without the corner snap\"],\"editor.toolHint.placement\":[\"Placement\"],\"editor.toolHint.placementAuto\":[\"Placement: Auto\"],\"editor.toolHint.placementGround\":[\"Placement: Ground\"],\"editor.toolHint.placementRoof\":[\"Placement: Roof\"],\"editor.toolHint.placementSurfaceClickOrPressP\":[\"Placement surface - click or press P to cycle\"],\"editor.toolHint.placementType\":[\"Placement type\"],\"editor.toolHint.placementTypeClickOrPressI\":[\"Placement type — click or press I to toggle\"],\"editor.toolHint.removeLastPoint\":[\"Remove last point\"],\"editor.toolHint.removeLastWitness\":[\"Remove last witness\"],\"editor.toolHint.rotate\":[\"Rotate\"],\"editor.toolHint.rotate45\":[\"Rotate ±45°\"],\"editor.toolHint.rotate45FloorCeiling\":[\"Rotate ±45° (floor / ceiling)\"],\"editor.toolHint.rotateGhost15\":[\"Rotate ghost ±15°\"],\"editor.toolHint.rotateOrFlipTheRunSide\":[\"Rotate or flip the run side\"],\"editor.toolHint.rotateRoofDirection90\":[\"Rotate roof direction 90°\"],\"editor.toolHint.rotateSpawnPoint\":[\"Rotate spawn point\"],\"editor.toolHint.roundRectangularOval\":[\"Round / rectangular / oval\"],\"editor.toolHint.setFenceStartEnd\":[\"Set fence start / end\"],\"editor.toolHint.setOneCornerThenTheOpposite\":[\"Set one corner, then the opposite\"],\"editor.toolHint.setRoofFootprint\":[\"Set roof footprint\"],\"editor.toolHint.setWallStartEnd\":[\"Set wall start / end\"],\"editor.toolHint.slopeLevel\":[\"Slope / level\"],\"editor.toolHint.snapOntoTheRun\":[\"Snap onto the run\"],\"editor.toolHint.splitAtTheMarks\":[\"Split at the marks\"],\"editor.toolHint.startGridAxis\":[\"Start grid axis\"],\"editor.toolHint.startLineset\":[\"Start lineset\"],\"editor.toolHint.startLiquidLine\":[\"Start liquid line\"],\"editor.toolHint.startRun\":[\"Start run\"],\"editor.toolHint.startSegment\":[\"Start segment\"],\"editor.toolHint.stepBackOrCancel\":[\"Step back or cancel\"],\"editor.toolHint.style\":[\"Style\"],\"editor.toolHint.styleBarn\":[\"Style: Barn\"],\"editor.toolHint.styleCasement\":[\"Style: Casement\"],\"editor.toolHint.styleCraftsman\":[\"Style: Craftsman\"],\"editor.toolHint.styleDoubleHung\":[\"Style: Double-hung\"],\"editor.toolHint.styleFrench\":[\"Style: French\"],\"editor.toolHint.styleGlass\":[\"Style: Glass\"],\"editor.toolHint.styleGrid\":[\"Style: Grid\"],\"editor.toolHint.styleHalfLouvered\":[\"Style: Half-louvered\"],\"editor.toolHint.styleHorizontalBands\":[\"Style: Horizontal bands\"],\"editor.toolHint.styleModern\":[\"Style: Modern\"],\"editor.toolHint.stylePanel\":[\"Style: Panel\"],\"editor.toolHint.stylePaneledGlass\":[\"Style: Paneled glass\"],\"editor.toolHint.styleShaker\":[\"Style: Shaker\"],\"editor.toolHint.styleSingle\":[\"Style: Single\"],\"editor.toolHint.styleSixPanel\":[\"Style: Six-panel\"],\"editor.toolHint.styleSliding\":[\"Style: Sliding\"],\"editor.toolHint.styleTallGrid\":[\"Style: Tall grid\"],\"editor.toolHint.styleTransom\":[\"Style: Transom\"],\"editor.toolHint.styleTripleHung\":[\"Style: Triple-hung\"],\"editor.toolHint.styleWideGrid\":[\"Style: Wide grid\"],\"editor.toolHint.switchRotationAxisYXZ\":[\"Switch rotation axis (Y → X → Z)\"],\"editor.toolHint.theWallsMeetAtTooSharp\":[\"The walls meet at too sharp or too flat an angle\"],\"editor.toolHint.theWindowWaitingThereIsTaller\":[\"The window waiting there is taller than this wall\"],\"editor.toolHint.threeOrMoreWallsMeetHere\":[\"Three or more walls meet here\"],\"editor.toolHint.traceCeilingOutline\":[\"Trace ceiling outline\"],\"editor.toolHint.traceSlabOutline\":[\"Trace slab outline\"],\"editor.toolHint.type\":[\"Type\"],\"editor.toolHint.typeAwning\":[\"Type: Awning\"],\"editor.toolHint.typeBarn\":[\"Type: Barn\"],\"editor.toolHint.typeBay\":[\"Type: Bay\"],\"editor.toolHint.typeBow\":[\"Type: Bow\"],\"editor.toolHint.typeCabinet\":[\"Type: Cabinet\"],\"editor.toolHint.typeCasement\":[\"Type: Casement\"],\"editor.toolHint.typeDouble\":[\"Type: Double\"],\"editor.toolHint.typeDoubleHung\":[\"Type: Double Hung\"],\"editor.toolHint.typeFixed\":[\"Type: Fixed\"],\"editor.toolHint.typeFolding\":[\"Type: Folding\"],\"editor.toolHint.typeFrench\":[\"Type: French\"],\"editor.toolHint.typeHinged\":[\"Type: Hinged\"],\"editor.toolHint.typeIsland\":[\"Type: Island\"],\"editor.toolHint.typeLouvered\":[\"Type: Louvered\"],\"editor.toolHint.typePocket\":[\"Type: Pocket\"],\"editor.toolHint.typeSingleHung\":[\"Type: Single Hung\"],\"editor.toolHint.typeSliding\":[\"Type: Sliding\"],\"editor.toolHint.verticalStackClickToPlace\":[\"Vertical stack ↕, click to place\"],\"editor.toolHint.wasteVent\":[\"Waste / vent\"],\"editor.toolHint.windowStyleClickOrPressL\":[\"Window style — click or press L to cycle\"],\"editor.toolHint.windowTypeClickOrPressO\":[\"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.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.cupola.description\":[\"Louvered roof lantern with a dome or pyramid cap and optional finial.\"],\"node.cupola.label\":[\"Cupola\"],\"node.door.description\":[\"A door cut into a wall. Animated open/close state.\"],\"node.door.label\":[\"Door\"],\"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.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.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.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.description\":[\"A pitched / hip / gable roof composed of one or more segments.\"],\"node.roof.label\":[\"Roof\"],\"node.roofSegment.description\":[\"A single pitched plane of a parent roof.\"],\"node.roofSegment.label\":[\"Roof Segment\"],\"node.scan.description\":[\"A captured session with optional mesh, motion, media, and sensor data.\"],\"node.scan.label\":[\"Capture\"],\"node.separator.label\":[\"Separator\"],\"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.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.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.stairSegment.description\":[\"A single flight of a parent stair.\"],\"node.stairSegment.label\":[\"Stair Segment\"],\"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.label\":[\"Unit\"],\"node.wall.description\":[\"A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items.\"],\"node.wall.label\":[\"Wall\"],\"node.window.description\":[\"A window cut into a wall. Animated open/close for opening windows.\"],\"node.window.label\":[\"Window\"],\"node.zone.description\":[\"A polygonal site zone (lawn, water, paving) with a TSL gradient material.\"],\"node.zone.label\":[\"Zone\"],\"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 f338cea5ed..ec0367e8d0 100644 --- a/packages/editor/src/i18n/locales/es/messages.po +++ b/packages/editor/src/i18n/locales/es/messages.po @@ -23,1205 +23,7345 @@ msgstr "" msgid "app.appShell.pascalHome" msgstr "Inicio de Pascal" -# Source-Hash: 2ee62be78ba76f53 +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "All projects" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.allProjects" -msgstr "Todos los proyectos" +msgid "app.buildTab.addGate" +msgstr "Añadir puerta de valla" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Open Passage" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.preview" -msgstr "Vista previa" +msgid "app.buildTab.addOpenPassage" +msgstr "Añadir paso abierto" -# Source-Hash: 9f2cbc9214c8f7b0 +# Source-Hash: 9a4d56454dc89966 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Project name" -#: apps/editor/components/editor-navbar.tsx +# English: "Add to rooms" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.projectName" -msgstr "Nombre del proyecto" +msgid "app.buildTab.addToRooms" +msgstr "Añadir a las estancias" -# Source-Hash: 150e143a84240eee +# Source-Hash: a17210912addc85f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rename project" -#: apps/editor/components/editor-navbar.tsx +# English: "← All build tools" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.renameProject" -msgstr "Cambiar nombre del proyecto" +msgid "app.buildTab.allBuildTools" +msgstr "← Todas las herramientas de construcción" -# Source-Hash: 331e1584943b09b9 +# Source-Hash: 6b63404967e1d5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share" -#: apps/editor/components/editor-navbar.tsx +# English: "Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.share" -msgstr "Compartir" +msgid "app.buildTab.chooseGateOrOpenPassageThen" +msgstr "Elige Puerta de valla o Paso abierto y haz clic en su posición en cualquier valla. Las puertas y aberturas colocadas están bajo su valla en el grafo de escena." -# Source-Hash: 703e1b4b9b715d3b +# Source-Hash: 8fd051e1e1a6c1a1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Anyone with the link can view this project. They cannot edit it." -#: apps/editor/components/share-panel.tsx +# English: "Click a lineset to lay the line beside it." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.anyoneWithTheLinkCanView" -msgstr "Cualquier persona con el enlace puede ver este proyecto, pero no editarlo." +msgid "app.buildTab.clickALinesetToLayThe" +msgstr "Haz clic en una línea frigorífica para tender la línea junto a ella." -# Source-Hash: 07e04484867c17d3 +# Source-Hash: 7308869944020839 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copied" -#: apps/editor/components/share-panel.tsx +# English: "Double gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copied" -msgstr "Copiado" +msgid "app.buildTab.doubleGate" +msgstr "Puerta doble" -# Source-Hash: 4f60d1e142affa9c +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copy" -#: apps/editor/components/share-panel.tsx +# English: "Features & extensions" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copy" -msgstr "Copiar" +msgid "app.buildTab.featuresExtensions" +msgstr "Elementos y ampliaciones" -# Source-Hash: 8ff50e1a9962a4db +# Source-Hash: b18788f1d889c1d0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not read the sharing state." -#: apps/editor/components/share-panel.tsx +# English: "Fence features" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotReadTheSharingState" -msgstr "No se pudo leer el estado de uso compartido." +msgid "app.buildTab.fenceFeatures" +msgstr "Elementos de valla" -# Source-Hash: 791e281338a51483 +# Source-Hash: 62803100bd6e7cc2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn off the public link." -#: apps/editor/components/share-panel.tsx +# English: "Follow lineset" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOffThePublic" -msgstr "No se pudo desactivar el enlace público." +msgid "app.buildTab.followLineset" +msgstr "Seguir la línea frigorífica" -# Source-Hash: 2c5ddecfd652ba63 +# Source-Hash: 4a479aa23542d766 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn on the public link." -#: apps/editor/components/share-panel.tsx +# English: "Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOnThePublic" -msgstr "No se pudo activar el enlace público." +msgid "app.buildTab.gate" +msgstr "Puerta de valla" -# Source-Hash: 15e49d4da8765318 +# Source-Hash: 54098b5ee574737a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed code" -#: apps/editor/components/share-panel.tsx +# English: "Gate style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedCode" -msgstr "Código de inserción" +msgid "app.buildTab.gateStyle" +msgstr "Estilo de puerta de valla" -# Source-Hash: d4523c2d303f99b0 +# Source-Hash: 8fec7e969045a8e7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed link" -#: apps/editor/components/share-panel.tsx +# English: "Horizontal boards" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedLink" -msgstr "Enlace de inserción" +msgid "app.buildTab.horizontalBoards" +msgstr "Tablas horizontales" -# Source-Hash: 252f2cbf5e1609a5 +# Source-Hash: 09197c4fea516277 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Hide controls" -#: apps/editor/components/share-panel.tsx +# English: "Hover a fence to preview. Click to place. Esc cancels. Leave room between openings." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.hideControls" -msgstr "Ocultar controles" +msgid "app.buildTab.hoverAFenceToPreviewClick" +msgstr "Pasa el cursor por una valla para previsualizar. Haz clic para colocar. Esc cancela. Deja espacio entre aberturas." -# Source-Hash: ba77c0610a63bb2b +# Source-Hash: c390ba248e629b9e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Link" -#: apps/editor/components/share-panel.tsx +# English: "Leaves" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.link" -msgstr "Enlace" +msgid "app.buildTab.leaves" +msgstr "Hojas" -# Source-Hash: a2560430aaec31d9 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Only the 3D view, no header or toolbar." -#: apps/editor/components/share-panel.tsx +# English: "Liquid Line" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.onlyThe3dViewNoHeader" -msgstr "Solo la vista 3D, sin encabezado ni barra de herramientas." +msgid "app.buildTab.liquidLine" +msgstr "Línea de líquido" -# Source-Hash: 3e52f04f92e08070 +# Source-Hash: c15c1af69ec5c1eb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Open" -#: apps/editor/components/share-panel.tsx +# English: "Match fence style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.open" -msgstr "Abrir" +msgid "app.buildTab.matchFenceStyle" +msgstr "Igualar el estilo de la valla" -# Source-Hash: b34faaa5378056c6 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Public link" -#: apps/editor/components/share-panel.tsx +# English: "MEP" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.publicLink" -msgstr "Enlace público" +msgid "app.buildTab.mep" +msgstr "Instalaciones" -# Source-Hash: 7525e8007fcab09b +# Source-Hash: 50accd740fa2e736 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share project" -#: apps/editor/components/share-panel.tsx +# English: "Off" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.shareProject" -msgstr "Compartir proyecto" +msgid "app.buildTab.off" +msgstr "Desactivado" -# Source-Hash: 3d3f438d5a49eba7 +# Source-Hash: 9cc01faad79c28da # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Automatic dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "On" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.automaticDimensions" -msgstr "Cotas automáticas" +msgid "app.buildTab.on" +msgstr "Activado" -# Source-Hash: 14622745dbf93f4c +# Source-Hash: e04298381837252f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Camera" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.camera" -msgstr "Cámara" +msgid "app.buildTab.opening" +msgstr "Abertura" -# Source-Hash: e6bce525c47ba3ac +# Source-Hash: 9514d3c022e68808 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Clean plan; dimensions appear with selection" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening width (m)" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" -msgstr "Plano limpio; las cotas aparecen al seleccionar" +msgid "app.buildTab.openingWidthM" +msgstr "Ancho de la abertura (m)" -# Source-Hash: 61ce356577cfb04a +# Source-Hash: 6b108fb1d0eb8f9d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Collapse sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Open rails" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.collapseSidebar" -msgstr "Contraer barra lateral" +msgid "app.buildTab.openRails" +msgstr "Barandas abiertas" -# Source-Hash: 2416a48df28d6205 +# Source-Hash: a5a7af5e5fff1c81 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Crisp, opaque edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Outdoor" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.crispOpaqueEdgeLines" -msgstr "Aristas nítidas y opacas" +msgid "app.buildTab.outdoor" +msgstr "Exterior" -# Source-Hash: 4da8b3678ed77b45 +# Source-Hash: 9295ddc2805b21e2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Cutaway" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Picket" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cutaway" -msgstr "Corte" +msgid "app.buildTab.picket" +msgstr "Estacas" -# Source-Hash: 4ca0e0e73229540c +# Source-Hash: 3a08ede9e51d5395 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof type" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.default" -msgstr "Predeterminado" +msgid "app.buildTab.roofType" +msgstr "Tipo de cubierta" -# Source-Hash: a313661ef9dd0a65 +# Source-Hash: 0f9daa442776a317 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rooms already create their floor and ceiling. Use these for platforms and one-off structure." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.display" -msgstr "Visualización" +msgid "app.buildTab.roomsAlreadyCreateTheirFloorAnd" +msgstr "Las estancias ya crean su suelo y su techo. Usa esto para plataformas y estructuras puntuales." -# Source-Hash: d0db46f206a88e2e +# Source-Hash: fc79fd0c7730de76 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display settings" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search build tools and kitchen items" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.displaySettings" -msgstr "Ajustes de visualización" +msgid "app.buildTab.searchBuildToolsAndKitchenItems" +msgstr "Buscar herramientas de construcción y elementos de cocina" -# Source-Hash: 0286962ab8e9cfcd +# Source-Hash: dc1901f276edca6f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Door/window marks" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search tools, fridge, sink…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.doorWindowMarks" -msgstr "Marcas de puertas y ventanas" +msgid "app.buildTab.searchToolsFridgeSink" +msgstr "Buscar herramientas, nevera, fregadero…" -# Source-Hash: 027bbc8b7287c06a +# Source-Hash: 9558db89023d4f05 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Edges" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select a curved wall to match its radius and arc." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.edges" -msgstr "Aristas" +msgid "app.buildTab.selectACurvedWallToMatch" +msgstr "Selecciona un muro curvo para igualar su radio y su arco." -# Source-Hash: d86126c5d16c6238 +# Source-Hash: d327097d9ac1099f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Enter VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Single gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.enterVr" -msgstr "Entrar en RV" +msgid "app.buildTab.singleGate" +msgstr "Puerta simple" -# Source-Hash: eb99fb0b382e58cd +# Source-Hash: 99acd5128c51c8a7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exit VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab, ceiling, column…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exitVr" -msgstr "Salir de RV" +msgid "app.buildTab.slabCeilingColumn" +msgstr "Forjado, techo, pilar…" -# Source-Hash: aeac665749d3101d +# Source-Hash: af6f8885fe0fa4e9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expand sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Solid privacy" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expandSidebar" -msgstr "Expandir barra lateral" +msgid "app.buildTab.solidPrivacy" +msgstr "Privacidad total" -# Source-Hash: 08c178ee733ff009 +# Source-Hash: e2b1a3bb9630b33b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expert" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Trace a line alongside an existing lineset (F)." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expert" -msgstr "Experto" +msgid "app.buildTab.traceALineAlongsideAnExisting" +msgstr "Trazar una línea junto a una línea frigorífica existente (F)." -# Source-Hash: be12f8788f1f0a05 +# Source-Hash: eba3df14a2de0812 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exploded" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Vertical slats" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exploded" -msgstr "Despiece" +msgid "app.buildTab.verticalSlats" +msgstr "Lamas verticales" -# Source-Hash: c6f865a366ef5755 +# Source-Hash: 2ee62be78ba76f53 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Face of stud" -#: apps/editor/components/viewer-toolbar.tsx +# English: "All projects" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faceOfStud" -msgstr "Cara del montante" +msgid "app.editorNavbar.allProjects" +msgstr "Todos los proyectos" -# Source-Hash: 0c583f1d4201293b +# Source-Hash: 20226b68d5467072 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Faint outline of major creases" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Preview" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faintOutlineOfMajorCreases" -msgstr "Contorno tenue de los pliegues principales" +msgid "app.editorNavbar.preview" +msgstr "Vista previa" -# Source-Hash: 08ecd5878b08139d +# Source-Hash: 9f2cbc9214c8f7b0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Feet & inches" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Project name" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.feetInches" -msgstr "Pies y pulgadas" +msgid "app.editorNavbar.projectName" +msgstr "Nombre del proyecto" -# Source-Hash: 43b8017fa821c46c +# Source-Hash: 150e143a84240eee # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Finished faces" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rename project" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.finishedFaces" -msgstr "Caras acabadas" +msgid "app.editorNavbar.renameProject" +msgstr "Cambiar nombre del proyecto" -# Source-Hash: 8827df1cdeb02ed9 +# Source-Hash: 331e1584943b09b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Flat and fast — no ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Share" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" -msgstr "Plano y rápido: sin oclusión ambiental" +msgid "app.editorNavbar.share" +msgstr "Compartir" -# Source-Hash: 060a718cdcff61b3 +# Source-Hash: 4b2f676fb4c9ec63 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add {label}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanAnnotations" -msgstr "Anotaciones del plano de planta" +msgid "app.kitchenBrowser.addLabel" +msgstr "Añadir {label}" -# Source-Hash: 483171f79dc32ae5 +# Source-Hash: 53f98cc505aacbb1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add to kitchen" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanMode" -msgstr "Modo plano de planta" +msgid "app.kitchenBrowser.addToKitchen" +msgstr "Añadir a la cocina" -# Source-Hash: 8bb9e54fc786ca77 +# Source-Hash: 923a2e81dcc77852 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Choose an item, then click to place it. Appliances include their cabinetry." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullAmbientOcclusion" -msgstr "Oclusión ambiental completa" +msgid "app.kitchenBrowser.chooseAnItemThenClickTo" +msgstr "Elige un elemento y haz clic para colocarlo. Los electrodomésticos incluyen su mueble." -# Source-Hash: 91fd3544d9ce16bf +# Source-Hash: 44156a2c888e8a4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full documentation and annotation controls" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find in this project · {length}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" -msgstr "Documentación y anotaciones completas" +msgid "app.kitchenBrowser.findInThisProjectLength" +msgstr "Buscar en este proyecto · {length}" -# Source-Hash: 131bac2467f4fdf6 +# Source-Hash: aeda65db67edac21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full height" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find {name}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullHeight" -msgstr "Altura completa" +msgid "app.kitchenBrowser.findName" +msgstr "Buscar {name}" -# Source-Hash: c9838bc98cb35125 +# Source-Hash: c1d847411ba09cd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full wall thickness" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · Add" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullWallThickness" -msgstr "Espesor total del muro" +msgid "app.kitchenBrowser.groupAdd" +msgstr "Cocina · Añadir" -# Source-Hash: 7e4a0a38f694be6b +# Source-Hash: bb3f4f8d3407c409 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Grid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · In this project" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.grid" -msgstr "Cuadrícula" +msgid "app.kitchenBrowser.groupInThisProject" +msgstr "Cocina · En este proyecto" -# Source-Hash: 4bf4a6861d7d633e +# Source-Hash: 25ffad31086309f1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Levels: {mode}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen cabinet" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.levelsMode" -msgstr "Plantas: {mode}" +msgid "app.kitchenBrowser.kitchenCabinet" +msgstr "Mueble de cocina" -# Source-Hash: 803532407fb5962b +# Source-Hash: a5af7817a7e8947d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Low" -#: apps/editor/components/viewer-toolbar.tsx +# English: "No matching kitchen items placed yet." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.low" -msgstr "Bajo" +msgid "app.kitchenBrowser.noMatchingKitchenItemsPlacedYet" +msgstr "Todavía no hay elementos de cocina coincidentes." -# Source-Hash: 32f9a404c0bdce10 +# Source-Hash: 640155f99c25773b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Magnetic snap" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select and show in scene" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.magneticSnap" -msgstr "Ajuste magnético" +msgid "app.kitchenBrowser.selectAndShowInScene" +msgstr "Seleccionar y mostrar en la escena" -# Source-Hash: 387082cd5f118bed +# Source-Hash: 4275c05172abd7fb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Ceiling" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manual" -msgstr "Manual" +msgid "app.lib.buildPalette.ceiling" +msgstr "Techo" -# Source-Hash: 2fb69122dd996c0a +# Source-Hash: 3530ac1f4046cd22 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Column" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manualDimensions" -msgstr "Cotas manuales" +msgid "app.lib.buildPalette.column" +msgstr "Pilar" -# Source-Hash: c6aa74075f37313a +# Source-Hash: 787e10f5db16904e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Door" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.measurements" -msgstr "Medidas" +msgid "app.lib.buildPalette.door" +msgstr "Puerta" -# Source-Hash: 0a39470be3b84536 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Meters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.meters" -msgstr "Metros" +msgid "app.lib.buildPalette.duct" +msgstr "Conducto" -# Source-Hash: 83cce6c521e71d01 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Millimeters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.millimeters" -msgstr "Milímetros" +msgid "app.lib.buildPalette.dwvPipe" +msgstr "Tubería de desagüe" -# Source-Hash: b784527bb90b9c5e +# Source-Hash: ab5cbab7be160a1c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Elevator" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.n3dMeasurements" -msgstr "Medidas 3D" +msgid "app.lib.buildPalette.elevator" +msgstr "Ascensor" -# Source-Hash: 4ff58913a4492199 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "No edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.noEdgeLines" -msgstr "Sin aristas" +msgid "app.lib.buildPalette.fence" +msgstr "Valla" -# Source-Hash: 50accd740fa2e736 +# Source-Hash: 3bf1c1a8dbb93743 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Off" -#: apps/editor/components/viewer-toolbar.tsx +# English: "HVAC Unit" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.off" -msgstr "Desactivado" +msgid "app.lib.buildPalette.hvacUnit" +msgstr "Equipo de climatización" -# Source-Hash: 9cc01faad79c28da +# Source-Hash: 1176d2568d093bf1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "On" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.on" -msgstr "Activado" +msgid "app.lib.buildPalette.kitchen" +msgstr "Cocina" -# Source-Hash: ed59dd8ce7797a66 +# Source-Hash: 362b03eba9d8234c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Orthographic" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Lineset" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.orthographic" -msgstr "Ortográfica" +msgid "app.lib.buildPalette.lineset" +msgstr "Línea frigorífica" -# Source-Hash: 316e25993ff72b88 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Perspective" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Liquid Line" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.perspective" -msgstr "Perspectiva" +msgid "app.lib.buildPalette.liquidLine" +msgstr "Línea de líquido" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/viewer-toolbar.tsx +# English: "MEP" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.preview" -msgstr "Vista previa" +msgid "app.lib.buildPalette.mep" +msgstr "Instalaciones" -# Source-Hash: 34c20b72a42ca618 +# Source-Hash: 161e5386b939e1bc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Register" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.previewMode" -msgstr "Modo de vista previa" +msgid "app.lib.buildPalette.register" +msgstr "Rejilla" -# Source-Hash: 5e58af99d6d4fa6a +# Source-Hash: f5f730969df63d1d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Render" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.render" -msgstr "Renderizado" +msgid "app.lib.buildPalette.roof" +msgstr "Cubierta" -# Source-Hash: f363702a10aedaeb +# Source-Hash: d7145f84f8e0e3fe # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rendered" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Shelf" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.rendered" -msgstr "Renderizado" +msgid "app.lib.buildPalette.shelf" +msgstr "Estantería" -# Source-Hash: 4959d5538efc595c +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Room labels" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.roomLabels" -msgstr "Etiquetas de estancias" +msgid "app.lib.buildPalette.slab" +msgstr "Forjado" -# Source-Hash: 82720864e5034398 +# Source-Hash: 95e8af5d2b3ca73d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Scene theme" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Spawn point" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.sceneTheme" -msgstr "Tema de la escena" +msgid "app.lib.buildPalette.spawnPoint" +msgstr "Punto de aparición" -# Source-Hash: 4c6bcb30b40047fc +# Source-Hash: f05bc67c57e4d530 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Shadows" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Stairs" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.shadows" -msgstr "Sombras" +msgid "app.lib.buildPalette.stairs" +msgstr "Escalera" -# Source-Hash: 59dc62417b44931d +# Source-Hash: 96281876ce53ba08 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Single wall axis" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrace" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.singleWallAxis" -msgstr "Eje único del muro" +msgid "app.lib.buildPalette.terrace" +msgstr "Terraza" -# Source-Hash: d266d83ec490df4e +# Source-Hash: d457508edd5bb8cf # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Soft" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrain" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.soft" -msgstr "Suaves" +msgid "app.lib.buildPalette.terrain" +msgstr "Terreno" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Wall" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solid" -msgstr "Sólido" +msgid "app.lib.buildPalette.wall" +msgstr "Muro" -# Source-Hash: e9f59b513f2f45ac +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solo" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Window" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solo" -msgstr "Aislado" +msgid "app.lib.buildPalette.window" +msgstr "Ventana" -# Source-Hash: 481b7608ce12139b +# Source-Hash: d40c50013043284f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stack" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Fitting" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stack" -msgstr "Apilado" +msgid "app.lib.buildPanelModel.addFitting" +msgstr "Añadir accesorio" -# Source-Hash: 61ad94ca68b0458e +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stair annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Gate" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stairAnnotations" -msgstr "Anotaciones de escaleras" +msgid "app.lib.buildPanelModel.addGate" +msgstr "Añadir puerta de valla" -# Source-Hash: f82927a01d4c5e45 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Strong" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Open Passage" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.strong" -msgstr "Marcadas" +msgid "app.lib.buildPanelModel.addOpenPassage" +msgstr "Añadir paso abierto" -# Source-Hash: e1be031e67d95382 +# Source-Hash: 7136b5836de6e69f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural core face" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Trap" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralCoreFace" -msgstr "Cara del núcleo estructural" +msgid "app.lib.buildPanelModel.addTrap" +msgstr "Añadir sifón" -# Source-Hash: efc50964d7b0ec47 +# Source-Hash: 8f4b2028ad75465d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural grids & column centers" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Build" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralGridsColumnCenters" -msgstr "Ejes estructurales y centros de pilares" +msgid "app.lib.buildPanelModel.build" +msgstr "Construir" -# Source-Hash: 5ce4f6b80cd30f86 +# Source-Hash: a23831beeb35ad3a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Translucent" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Create from" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.translucent" -msgstr "Translúcido" +msgid "app.lib.buildPanelModel.createFrom" +msgstr "Crear a partir de" -# Source-Hash: b404dded35241274 +# Source-Hash: 8146c309bd8326f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Units" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Draw the roof footprint with two corner clicks." +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.units" -msgstr "Unidades" +msgid "app.lib.buildPanelModel.drawTheRoofFootprintWithTwo" +msgstr "Dibuja la planta de la cubierta con dos clics en esquinas." -# Source-Hash: faf51e28b748e0d9 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walkthrough" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.walkthrough" -msgstr "Recorrido" +msgid "app.lib.buildPanelModel.duct" +msgstr "Conducto" -# Source-Hash: 62281975e51da7e3 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall centerline" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallCenterline" -msgstr "Eje del muro" +msgid "app.lib.buildPanelModel.dwvPipe" +msgstr "Tubería de desagüe" -# Source-Hash: ff145d7003118ec6 +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Features & extensions" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallDimensions" -msgstr "Cotas de muros" +msgid "app.lib.buildPanelModel.featuresExtensions" +msgstr "Elementos y ampliaciones" -# Source-Hash: 13969d1d6e310aa4 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walls: {label}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallsLabel" -msgstr "Muros: {label}" +msgid "app.lib.buildPanelModel.fence" +msgstr "Valla" -# Source-Hash: 8caa959c0ae800c3 -# Review: human -# English: "Basement" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basement" -msgstr "Sótano" +# Source-Hash: 62803100bd6e7cc2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow lineset" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.followLineset" +msgstr "Seguir la línea frigorífica" -# Source-Hash: 14927085ee91ba05 -# Review: human -# English: "Basement {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basementNumber" -msgstr "Sótano {number}" +# Source-Hash: c80972ec078ac551 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gates & openings" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.gatesOpenings" +msgstr "Puertas y aberturas" -# Source-Hash: e59074a7b9b3f56e -# Review: human -# English: "Floor {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.floorNumber" -msgstr "Planta {number}" +# Source-Hash: 3720347aa16ee777 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a room to preview its boundary, then click to place." +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.hoverARoomToPreviewIts" +msgstr "Pasa el cursor por una estancia para ver su contorno y haz clic para colocar." -# Source-Hash: cde3efc9b7ddfa41 -# Review: human -# English: "Ground floor" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.groundFloor" -msgstr "Planta baja" +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.kitchen" +msgstr "Cocina" -# Source-Hash: f571cb2d06ae01ae -# Review: human -# English: "Advanced" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.advanced" -msgstr "Avanzado" +# Source-Hash: 95057eef5cd69340 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "MEP" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.mep" +msgstr "Instalaciones" -# Source-Hash: fb40866c2d6db5fb -# Review: human -# English: "walls · floor · ceiling" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.hint" -msgstr "muros · suelo · techo" +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.modularCabinet" +msgstr "Mueble modular" -# Source-Hash: 271039bd919dc4c1 -# Review: human -# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.idle" +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.off" +msgstr "Desactivado" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.on" +msgstr "Activado" + +# Source-Hash: 3fafdc69e7756f19 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Painting" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.painting" +msgstr "Pintura" + +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roof" +msgstr "Cubierta" + +# Source-Hash: 3a08ede9e51d5395 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof type" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roofType" +msgstr "Tipo de cubierta" + +# Source-Hash: 0c35bee851cc57a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# tool} other {# tools}}" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.toolCount" +msgstr "{count, plural, one {# herramienta} many {# herramientas} other {# herramientas}}" + +# Source-Hash: 3241ecabee8221a1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Conical" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.conical" +msgstr "Cónica" + +# Source-Hash: b5c56dd8c68de309 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.draw" +msgstr "Dibujar" + +# Source-Hash: 6949d667043bee0b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dutch" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.dutch" +msgstr "Holandesa" + +# Source-Hash: 9cab4d4c95f63cdd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.flat" +msgstr "Plana" + +# Source-Hash: deaffa095d126dfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gable" +msgstr "Dos aguas" + +# Source-Hash: 7f53d9ffca39984a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gambrel" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gambrel" +msgstr "Holandés de buhardilla" + +# Source-Hash: 9eda0ea8d447066d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hip" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.hip" +msgstr "Cuatro aguas" + +# Source-Hash: 7f7bb0e875af3260 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mansard" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.mansard" +msgstr "Mansarda" + +# Source-Hash: 612dcd5bf06a79c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.room" +msgstr "Estancia" + +# Source-Hash: c8d0df27faa3feaa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shed" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.shed" +msgstr "Un agua" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.wall" +msgstr "Muro" + +# Source-Hash: 703e1b4b9b715d3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Anyone with the link can view this project. They cannot edit it." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.anyoneWithTheLinkCanView" +msgstr "Cualquier persona con el enlace puede ver este proyecto, pero no editarlo." + +# Source-Hash: 07e04484867c17d3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copied" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copied" +msgstr "Copiado" + +# Source-Hash: 4f60d1e142affa9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copy" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copy" +msgstr "Copiar" + +# Source-Hash: 8ff50e1a9962a4db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not read the sharing state." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotReadTheSharingState" +msgstr "No se pudo leer el estado de uso compartido." + +# Source-Hash: 791e281338a51483 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn off the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOffThePublic" +msgstr "No se pudo desactivar el enlace público." + +# Source-Hash: 2c5ddecfd652ba63 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn on the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOnThePublic" +msgstr "No se pudo activar el enlace público." + +# Source-Hash: 15e49d4da8765318 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed code" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedCode" +msgstr "Código de inserción" + +# Source-Hash: d4523c2d303f99b0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedLink" +msgstr "Enlace de inserción" + +# Source-Hash: 252f2cbf5e1609a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide controls" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.hideControls" +msgstr "Ocultar controles" + +# Source-Hash: ba77c0610a63bb2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.link" +msgstr "Enlace" + +# Source-Hash: a2560430aaec31d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Only the 3D view, no header or toolbar." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.onlyThe3dViewNoHeader" +msgstr "Solo la vista 3D, sin encabezado ni barra de herramientas." + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.open" +msgstr "Abrir" + +# Source-Hash: b34faaa5378056c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Public link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.publicLink" +msgstr "Enlace público" + +# Source-Hash: 7525e8007fcab09b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Share project" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.shareProject" +msgstr "Compartir proyecto" + +# Source-Hash: 3d3f438d5a49eba7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Automatic dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.automaticDimensions" +msgstr "Cotas automáticas" + +# Source-Hash: 14622745dbf93f4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.camera" +msgstr "Cámara" + +# Source-Hash: e6bce525c47ba3ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clean plan; dimensions appear with selection" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" +msgstr "Plano limpio; las cotas aparecen al seleccionar" + +# Source-Hash: 61ce356577cfb04a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Collapse sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.collapseSidebar" +msgstr "Contraer barra lateral" + +# Source-Hash: 2416a48df28d6205 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Crisp, opaque edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.crispOpaqueEdgeLines" +msgstr "Aristas nítidas y opacas" + +# Source-Hash: 4da8b3678ed77b45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cutaway" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cutaway" +msgstr "Corte" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.default" +msgstr "Predeterminado" + +# Source-Hash: a313661ef9dd0a65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.display" +msgstr "Visualización" + +# Source-Hash: d0db46f206a88e2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display settings" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.displaySettings" +msgstr "Ajustes de visualización" + +# Source-Hash: 0286962ab8e9cfcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door/window marks" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.doorWindowMarks" +msgstr "Marcas de puertas y ventanas" + +# Source-Hash: 027bbc8b7287c06a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edges" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.edges" +msgstr "Aristas" + +# Source-Hash: d86126c5d16c6238 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.enterVr" +msgstr "Entrar en RV" + +# Source-Hash: eb99fb0b382e58cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exitVr" +msgstr "Salir de RV" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expandSidebar" +msgstr "Expandir barra lateral" + +# Source-Hash: 08c178ee733ff009 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expert" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expert" +msgstr "Experto" + +# Source-Hash: be12f8788f1f0a05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exploded" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exploded" +msgstr "Despiece" + +# Source-Hash: c6f865a366ef5755 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Face of stud" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faceOfStud" +msgstr "Cara del montante" + +# Source-Hash: 0c583f1d4201293b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Faint outline of major creases" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faintOutlineOfMajorCreases" +msgstr "Contorno tenue de los pliegues principales" + +# Source-Hash: 08ecd5878b08139d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Feet & inches" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.feetInches" +msgstr "Pies y pulgadas" + +# Source-Hash: 43b8017fa821c46c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finished faces" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.finishedFaces" +msgstr "Caras acabadas" + +# Source-Hash: 8827df1cdeb02ed9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat and fast — no ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" +msgstr "Plano y rápido: sin oclusión ambiental" + +# Source-Hash: 060a718cdcff61b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanAnnotations" +msgstr "Anotaciones del plano de planta" + +# Source-Hash: 483171f79dc32ae5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanMode" +msgstr "Modo plano de planta" + +# Source-Hash: 8bb9e54fc786ca77 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullAmbientOcclusion" +msgstr "Oclusión ambiental completa" + +# Source-Hash: 91fd3544d9ce16bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full documentation and annotation controls" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" +msgstr "Documentación y anotaciones completas" + +# Source-Hash: 131bac2467f4fdf6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full height" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullHeight" +msgstr "Altura completa" + +# Source-Hash: c9838bc98cb35125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full wall thickness" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullWallThickness" +msgstr "Espesor total del muro" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.grid" +msgstr "Cuadrícula" + +# Source-Hash: 4bf4a6861d7d633e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Levels: {mode}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.levelsMode" +msgstr "Plantas: {mode}" + +# Source-Hash: 803532407fb5962b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.low" +msgstr "Bajo" + +# Source-Hash: 32f9a404c0bdce10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Magnetic snap" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.magneticSnap" +msgstr "Ajuste magnético" + +# Source-Hash: 387082cd5f118bed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manual" +msgstr "Manual" + +# Source-Hash: 2fb69122dd996c0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manualDimensions" +msgstr "Cotas manuales" + +# Source-Hash: c6aa74075f37313a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.measurements" +msgstr "Medidas" + +# Source-Hash: 0a39470be3b84536 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Meters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.meters" +msgstr "Metros" + +# Source-Hash: 83cce6c521e71d01 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Millimeters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.millimeters" +msgstr "Milímetros" + +# Source-Hash: b784527bb90b9c5e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.n3dMeasurements" +msgstr "Medidas 3D" + +# Source-Hash: 4ff58913a4492199 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.noEdgeLines" +msgstr "Sin aristas" + +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.off" +msgstr "Desactivado" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.on" +msgstr "Activado" + +# Source-Hash: ed59dd8ce7797a66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orthographic" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.orthographic" +msgstr "Ortográfica" + +# Source-Hash: 316e25993ff72b88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perspective" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.perspective" +msgstr "Perspectiva" + +# Source-Hash: 20226b68d5467072 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.preview" +msgstr "Vista previa" + +# Source-Hash: 34c20b72a42ca618 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.previewMode" +msgstr "Modo de vista previa" + +# Source-Hash: 5e58af99d6d4fa6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Render" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.render" +msgstr "Renderizado" + +# Source-Hash: f363702a10aedaeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rendered" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.rendered" +msgstr "Renderizado" + +# Source-Hash: 4959d5538efc595c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room labels" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.roomLabels" +msgstr "Etiquetas de estancias" + +# Source-Hash: 82720864e5034398 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scene theme" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.sceneTheme" +msgstr "Tema de la escena" + +# Source-Hash: 4c6bcb30b40047fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shadows" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.shadows" +msgstr "Sombras" + +# Source-Hash: 59dc62417b44931d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single wall axis" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.singleWallAxis" +msgstr "Eje único del muro" + +# Source-Hash: d266d83ec490df4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Soft" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.soft" +msgstr "Suaves" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solid" +msgstr "Sólido" + +# Source-Hash: e9f59b513f2f45ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solo" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solo" +msgstr "Aislado" + +# Source-Hash: 481b7608ce12139b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stack" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stack" +msgstr "Apilado" + +# Source-Hash: 61ad94ca68b0458e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stair annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stairAnnotations" +msgstr "Anotaciones de escaleras" + +# Source-Hash: f82927a01d4c5e45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Strong" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.strong" +msgstr "Marcadas" + +# Source-Hash: e1be031e67d95382 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural core face" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralCoreFace" +msgstr "Cara del núcleo estructural" + +# Source-Hash: efc50964d7b0ec47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural grids & column centers" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralGridsColumnCenters" +msgstr "Ejes estructurales y centros de pilares" + +# Source-Hash: 5ce4f6b80cd30f86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Translucent" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.translucent" +msgstr "Translúcido" + +# Source-Hash: b404dded35241274 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Units" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.units" +msgstr "Unidades" + +# Source-Hash: faf51e28b748e0d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walkthrough" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.walkthrough" +msgstr "Recorrido" + +# Source-Hash: 62281975e51da7e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall centerline" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallCenterline" +msgstr "Eje del muro" + +# Source-Hash: ff145d7003118ec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallDimensions" +msgstr "Cotas de muros" + +# Source-Hash: 13969d1d6e310aa4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls: {label}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallsLabel" +msgstr "Muros: {label}" + +# Source-Hash: 8caa959c0ae800c3 +# Review: human +# English: "Basement" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basement" +msgstr "Sótano" + +# Source-Hash: 14927085ee91ba05 +# Review: human +# English: "Basement {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basementNumber" +msgstr "Sótano {number}" + +# Source-Hash: e59074a7b9b3f56e +# Review: human +# English: "Floor {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.floorNumber" +msgstr "Planta {number}" + +# Source-Hash: cde3efc9b7ddfa41 +# Review: human +# English: "Ground floor" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.groundFloor" +msgstr "Planta baja" + +# Source-Hash: fdd8b3366021a1cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Left" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitLeft" +msgstr "Orbitar a la izquierda" + +# Source-Hash: 4a56359f284a3b17 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Right" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitRight" +msgstr "Orbitar a la derecha" + +# Source-Hash: f5c12d738240f889 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top View" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.topView" +msgstr "Vista superior" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.delete" +msgstr "Eliminar" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.select" +msgstr "Seleccionar" + +# Source-Hash: d9a257653600d5a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resume following" +#: packages/editor/src/components/ui/action-menu/follow-pascal-pill.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalPill.resumeFollowing" +msgstr "Reanudar seguimiento" + +# Source-Hash: 4f073f8051cca3ef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: Off" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.off" +msgstr "Seguir a Pascal: desactivado" + +# Source-Hash: 328ea04bb8cd12f4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: On" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.on" +msgstr "Seguir a Pascal: activado" + +# Source-Hash: 7f4dcb90defe1ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Appliance" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.appliance" +msgstr "Electrodoméstico" + +# Source-Hash: 0655333424a8b6fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bathroom" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.bathroom" +msgstr "Baño" + +# Source-Hash: ed68e72f5353712b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furniture" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.furniture" +msgstr "Muebles" + +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.kitchen" +msgstr "Cocina" + +# Source-Hash: a5a7af5e5fff1c81 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outdoor" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.outdoor" +msgstr "Exterior" + +# Source-Hash: c69865ec5d9d1ac9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angle" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angle" +msgstr "Ángulo" + +# Source-Hash: 622f566fe1e3d8e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angular dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angularDimension" +msgstr "Cota angular" + +# Source-Hash: 7e3b0d541355305e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Arc length" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.arcLength" +msgstr "Longitud de arco" + +# Source-Hash: 8332ab41e22958f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Area" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.area" +msgstr "Área" + +# Source-Hash: 88c7750ed51d47a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center mark" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.centerMark" +msgstr "Marca de centro" + +# Source-Hash: 634912dabb092872 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chord dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.chordDimension" +msgstr "Cota de cuerda" + +# Source-Hash: 3cb090120253f68f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.continuousDimension" +msgstr "Cota continua" + +# Source-Hash: fb91b1d43b8362d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Coordinate dimensions" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.coordinateDimensions" +msgstr "Cotas de coordenadas" + +# Source-Hash: 530cb7ea461e8298 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Diameter dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.diameterDimension" +msgstr "Cota de diámetro" + +# Source-Hash: fe7ddb094aa8ff4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Distance" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.distance" +msgstr "Distancia" + +# Source-Hash: fee6203bb9046929 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.floorPlan" +msgstr "Plano de planta" + +# Source-Hash: a73539fc472e2e12 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Linear dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.linearDimension" +msgstr "Cota lineal" + +# Source-Hash: 6bba239f244c3d28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement options" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementOptions" +msgstr "Opciones de medida" + +# Source-Hash: 2cf5ca9b834ce8d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement type" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementType" +msgstr "Tipo de medida" + +# Source-Hash: 0431574a0e6d69d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measure: {selectedLabel}" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measureSelectedlabel" +msgstr "Medir: {selectedLabel}" + +# Source-Hash: ac87e14dabd5a256 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perimeter" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.perimeter" +msgstr "Perímetro" + +# Source-Hash: 6c9acc0589bdd4d6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Radius dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.radiusDimension" +msgstr "Cota de radio" + +# Source-Hash: 01b0015e4e176124 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.smart" +msgstr "Inteligente" + +# Source-Hash: 429bd43d726de417 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Volume" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.volume" +msgstr "Volumen" + +# Source-Hash: 64f3eb5e1936906d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAsk" +msgstr "Señalar y preguntar" + +# Source-Hash: d86d31e83f6f0888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask (C)" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskC" +msgstr "Señalar y preguntar (C)" + +# Source-Hash: 65622d2ef53c1f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask works in the 3D view" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskWorksInThe" +msgstr "Señalar y preguntar funciona en la vista 3D" + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ceiling" +msgstr "Techo" + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.column" +msgstr "Pilar" + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.door" +msgstr "Puerta" + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.duct" +msgstr "Conducto" + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ductFitting" +msgstr "Accesorio de conducto" + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.dwvPipe" +msgstr "Tubería de desagüe" + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.elevator" +msgstr "Ascensor" + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.fence" +msgstr "Valla" + +# Source-Hash: 7f4d93d5f2083844 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable Roof" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.gableRoof" +msgstr "Cubierta a dos aguas" + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.hvacUnit" +msgstr "Equipo de climatización" + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.lineset" +msgstr "Línea frigorífica" + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.liquidLine" +msgstr "Línea de líquido" + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.pipeFitting" +msgstr "Accesorio de tubería" + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.register" +msgstr "Rejilla" + +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.shelf" +msgstr "Estantería" + +# Source-Hash: 8775bc8dc9593964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slab" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.slab" +msgstr "Forjado" + +# Source-Hash: 3e2f6b4274f592c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Spawn Point" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.spawnPoint" +msgstr "Punto de aparición" + +# Source-Hash: f05bc67c57e4d530 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stairs" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.stairs" +msgstr "Escalera" + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.trap" +msgstr "Sifón" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.wall" +msgstr "Muro" + +# Source-Hash: aa3c35ed33e181e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.window" +msgstr "Ventana" + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.zone" +msgstr "Zona" + +# Source-Hash: 43af78ba61aaa8ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "below" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.below" +msgstr "debajo" + +# Source-Hash: cdf3f12939ba108c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteGuideImage" +msgstr "Eliminar imagen guía" + +# Source-Hash: 6add06abbafa8289 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete scan" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteScan" +msgstr "Eliminar escaneo 3D" + +# Source-Hash: 6f5e541cb5fb502f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# guide image on this level} other {# guide images on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideCount" +msgstr "{count, plural, one {# imagen guía en esta planta} many {# imágenes guía en esta planta} other {# imágenes guía en esta planta}}" + +# Source-Hash: 8a832a2f33757bf8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageNumber" +msgstr "Imagen guía {number}" + +# Source-Hash: 7f3aaccfe8d1af1f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImages" +msgstr "Imágenes guía" + +# Source-Hash: 9b1de02505434d74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageSettings" +msgstr "Ajustes de imágenes guía" + +# Source-Hash: 892d5dd34372028b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guides" +msgstr "Guías" + +# Source-Hash: ccfb05c78d47d6f9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesHidden" +msgstr "Guías: ocultas" + +# Source-Hash: 6d7ca85c4f389991 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesVisible" +msgstr "Guías: visibles" + +# Source-Hash: 5f6264ac469f57c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideGuideImages" +msgstr "Ocultar imágenes guía" + +# Source-Hash: cae234c23229c80b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideReferenceFloor" +msgstr "Ocultar planta de referencia" + +# Source-Hash: 469a8416de876e0e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideScans" +msgstr "Ocultar escaneos 3D" + +# Source-Hash: 22a59ae72d8c9504 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No lower floor available." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.noLowerFloorAvailable" +msgstr "No hay ninguna planta inferior." + +# Source-Hash: 1c0b8a5503c5daeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Opacity" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.opacity" +msgstr "Opacidad" + +# Source-Hash: 8bbd9bc90ac70a4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloor" +msgstr "Planta de referencia" + +# Source-Hash: 45493691a23c7690 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor: {selectedLevelName}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSelectedlevelname" +msgstr "Planta de referencia: {selectedLevelName}" + +# Source-Hash: 7178c7b5a4581367 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSettings" +msgstr "Ajustes de la planta de referencia" + +# Source-Hash: a52848021f822f5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.references" +msgstr "Referencias" + +# Source-Hash: e59c9eec7dbd6ba1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload GLB meshes as scan references or blueprint images as guide references." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesEmpty" +msgstr "Sube mallas GLB como escaneos 3D de referencia o imágenes de planos como guías." + +# Source-Hash: 3e73d06c3e96efba +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceSettings" +msgstr "Ajustes de referencias" + +# Source-Hash: aa0df2c2f00672e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesHidden" +msgstr "Referencias: ocultas" + +# Source-Hash: 9976708fc92bfa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesVisible" +msgstr "Referencias: visibles" + +# Source-Hash: 320a5f1ec012900b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser diagram" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.riserDiagram" +msgstr "Esquema de montantes" + +# Source-Hash: 357b3d3eaf878a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# scan on this level} other {# scans on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanCount" +msgstr "{count, plural, one {# escaneo 3D en esta planta} many {# escaneos 3D en esta planta} other {# escaneos 3D en esta planta}}" + +# Source-Hash: f09f12547484c888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanNumber" +msgstr "Escaneo 3D {number}" + +# Source-Hash: 3260bfa69cca50e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scans" +msgstr "Escaneos 3D" + +# Source-Hash: c9c52015095997e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanSettings" +msgstr "Ajustes de escaneos 3D" + +# Source-Hash: 60abc9f1a8aec65c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansHidden" +msgstr "Escaneos 3D: ocultos" + +# Source-Hash: 2d2ff119a7dd7911 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansVisible" +msgstr "Escaneos 3D: visibles" + +# Source-Hash: 8211234b205fd9a6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showGuideImages" +msgstr "Mostrar imágenes guía" + +# Source-Hash: 7786cae6acb04cfa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showReferenceFloor" +msgstr "Mostrar planta de referencia" + +# Source-Hash: 6066f0b6cff8a910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showScans" +msgstr "Mostrar escaneos 3D" + +# Source-Hash: def6dff836767bda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload scan or guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.uploadScanOrGuideImage" +msgstr "Subir escaneo 3D o imagen guía" + +# Source-Hash: 6aee0962fc18c0f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back to home" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.backToHome" +msgstr "Volver al inicio" + +# Source-Hash: f571cb2d06ae01ae +# Review: human +# English: "Advanced" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.advanced" +msgstr "Avanzado" + +# Source-Hash: fb40866c2d6db5fb +# Review: human +# English: "walls · floor · ceiling" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.hint" +msgstr "muros · suelo · techo" + +# Source-Hash: 271039bd919dc4c1 +# Review: human +# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.idle" msgstr "Elige una forma para empezar. Cada estancia incluye sus muros, suelo y techo." -# Source-Hash: ae2800b6c9e2b6ed -# Review: human -# English: "{lead} then the first one again to close. For L-shapes and angled rooms." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.caption" -msgstr "{lead} y vuelve a pulsar la primera para cerrar. Para estancias en L o con ángulos." +# Source-Hash: ae2800b6c9e2b6ed +# Review: human +# English: "{lead} then the first one again to close. For L-shapes and angled rooms." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.caption" +msgstr "{lead} y vuelve a pulsar la primera para cerrar. Para estancias en L o con ángulos." + +# Source-Hash: 4e186fc057733162 +# Review: human +# English: "Polygon" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.label" +msgstr "Polígono" + +# Source-Hash: 345e3aca3879b5c5 +# Review: human +# English: "Click each corner," +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.lead" +msgstr "Haz clic en cada esquina" + +# Source-Hash: 8ec6152e139b0e3f +# Review: human +# English: "Polygon room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.title" +msgstr "Estancia poligonal" + +# Source-Hash: 9b46295eedcbedae +# Review: human +# English: "{lead} on the grid. Walls, floor and ceiling are created together." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.caption" +msgstr "{lead} en la cuadrícula. Los muros, el suelo y el techo se crean a la vez." + +# Source-Hash: 2c2c20272b0370cc +# Review: human +# English: "Rectangle" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.label" +msgstr "Rectángulo" + +# Source-Hash: 060faa48e299d7c9 +# Review: human +# English: "Click two corners" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.lead" +msgstr "Haz clic en dos esquinas" + +# Source-Hash: 83a45603ac7f41e8 +# Review: human +# English: "Rectangle room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.title" +msgstr "Estancia rectangular" + +# Source-Hash: 3e7408ed44676176 +# Review: human +# English: "Rooms" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.title" +msgstr "Estancias" + +# Source-Hash: 8a21a03c4acf396b +# Review: human +# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.caption" +msgstr "{lead} Cierra el contorno para crear una estancia o déjalo abierto para tabiques." + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.label" +msgstr "Muros" + +# Source-Hash: 9843edd68426fa2d +# Review: human +# English: "Draw one wall at a time." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.lead" +msgstr "Dibuja un muro cada vez." + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.title" +msgstr "Muros" + +# Source-Hash: 1f3650da23603008 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraControlsHint" +msgstr "Ayuda de controles de cámara" + +# Source-Hash: 101b6a54c377049a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pan" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.pan" +msgstr "Desplazar" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.rotate" +msgstr "Girar" + +# Source-Hash: 663cecc316eb91b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zoom" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.zoom" +msgstr "Zoom" + +# Source-Hash: a2bd204e93e90598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismiss" +msgstr "Cerrar" + +# Source-Hash: 9222f970dce6cc60 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismissCameraControlsHint" +msgstr "Cerrar la ayuda de controles de cámara" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.expandSidebar" +msgstr "Expandir barra lateral" + +# Source-Hash: dd86efcab72fc5c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis" +msgstr "Eje" + +# Source-Hash: 5232a826549f915e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⌥ axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis2" +msgstr "⌥ eje" + +# Source-Hash: 7001600001844c92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⚠ no equipment" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.noEquipment" +msgstr "⚠ sin equipo" + +# Source-Hash: eae0194029f96edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# register} other {# registers}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.registerCount" +msgstr "{count, plural, one {# rejilla} many {# rejillas} other {# rejillas}}" + +# Source-Hash: 8fb180251a321cef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R/T rotate" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.rTRotate" +msgstr "R/T girar" + +# Source-Hash: 3744cfc0c0329bfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# run} other {# runs}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.runCount" +msgstr "{count, plural, one {# tramo} many {# tramos} other {# tramos}}" + +# Source-Hash: 88e6c2e1c344b2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "System" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.system" +msgstr "Sistema" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.cancel" +msgstr "Cancelar" + +# Source-Hash: 4c6ca3441c74da9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place building" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.placeBuilding" +msgstr "Colocar edificio" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.rotate" +msgstr "Girar" + +# Source-Hash: 832470d3aeee82fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel placement" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.cancelPlacement" +msgstr "Cancelar colocación" + +# Source-Hash: e374fcaee33c3e2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation — click or press C to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationClickOrPressCTo" +msgstr "Continuación: haz clic o pulsa C para cambiar" + +# Source-Hash: b108c7dc2ec2b9de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation: {label}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationLabel" +msgstr "Continuación: {label}" + +# Source-Hash: 729d87891cb7dbb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag to draw fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.dragToDrawFence" +msgstr "Arrastra para dibujar la valla" + +# Source-Hash: a4bdcbc6cab772bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence type — click or press T to switch between straight, curved and freehand" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT" +msgstr "Tipo de valla: haz clic o pulsa T para alternar entre recta, curva y a mano alzada" + +# Source-Hash: 2a9ed258727078ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fewer shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fewerShortcuts" +msgstr "Menos atajos" + +# Source-Hash: 698fa6e78af4d4b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish curve (or double-click)" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick" +msgstr "Terminar la curva (o doble clic)" + +# Source-Hash: 09f6d79edf5cfd16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridLength" +msgstr "Cuadrícula: {length}" + +# Source-Hash: c493b562040c4328 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step — click or tap Ctrl to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl" +msgstr "Paso de cuadrícula: haz clic o pulsa Ctrl para cambiar" + +# Source-Hash: d36a8c93d81b3a36 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepLength" +msgstr "Paso de cuadrícula: {length}" + +# Source-Hash: abea993ede7daa7e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a painted surface to erase" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase" +msgstr "Pasa el cursor por una superficie pintada para borrarla" + +# Source-Hash: fc1ed0ddc0cfcef5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPaint" +msgstr "Pasa el cursor por una superficie para pintarla" + +# Source-Hash: 63dec5de4a337015 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to pick its material" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts" +msgstr "Pasa el cursor por una superficie para tomar su material" + +# Source-Hash: 7ad6dc1b1f03f970 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.moreShortcuts" +msgstr "Más atajos" + +# Source-Hash: 69c1044e6ea87ccf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gate on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placeGateOnAFence" +msgstr "Colocar puerta en una valla" + +# Source-Hash: 3754255b8affc7a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place passage on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placePassageOnAFence" +msgstr "Colocar paso en una valla" + +# Source-Hash: a8328c8964e947fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select a material to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.selectAMaterialToPaint" +msgstr "Elige un material para pintar" + +# Source-Hash: 6f95d7116aea5738 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Angles" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingAngles" +msgstr "Ajuste: ángulos" + +# Source-Hash: 2d6d8d85d2ebed47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Grid" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingGrid" +msgstr "Ajuste: cuadrícula" + +# Source-Hash: 9096c5f9d8ce0f7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Lines" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingLines" +msgstr "Ajuste: líneas" + +# Source-Hash: b663afbf0835cf32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping mode — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift" +msgstr "Modo de ajuste: haz clic o pulsa Mayús para cambiar" + +# Source-Hash: d00e984fc88f71aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Off" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingOff" +msgstr "Ajuste: desactivado" + +# Source-Hash: 6be9d0d312200761 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight continuation is unavailable for curved or freehand fences" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved" +msgstr "La continuación recta no está disponible en vallas curvas o a mano alzada" + +# Source-Hash: 0d56b1f0a0493302 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Continuous" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuous" +msgstr "Recta: continua" + +# Source-Hash: c034e85d3e7fd27e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight fence continuation — click or press C to toggle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress" +msgstr "Continuación de valla recta: haz clic o pulsa C para alternar" + +# Source-Hash: e3f679cdb4a3d603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Single" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightSingle" +msgstr "Recta: simple" + +# Source-Hash: 83e56140165f2535 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{verb} scope — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.verbScopeClickOrPressShift" +msgstr "Alcance de {verb}: haz clic o pulsa Mayús para cambiar" + +# Source-Hash: 9a56d90d461b4bca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPoint" +msgstr "Añadir punto" + +# Source-Hash: c3dc3918c823a5e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point · click the first to close" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPointClickTheFirstTo" +msgstr "Añadir punto · haz clic en el primero para cerrar" + +# Source-Hash: d8cf72d482d56cd7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Brush size" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.brushSize" +msgstr "Tamaño del pincel" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancel" +msgstr "Cancelar" + +# Source-Hash: 104fdab7934ec66c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel picking" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelPicking" +msgstr "Cancelar selección" + +# Source-Hash: c318cf0ce70b8977 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel stroke" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelStroke" +msgstr "Cancelar trazo" + +# Source-Hash: 16552c2580bbe8b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Done" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.done" +msgstr "Hecho" + +# Source-Hash: e297db9ca0ce6d31 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the mezzanine" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheMezzanine" +msgstr "Dibujar el altillo" + +# Source-Hash: c8be604718a7a9fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the opening" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheOpening" +msgstr "Dibujar la abertura" + +# Source-Hash: 231386ae6d534163 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the terrace" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheTerrace" +msgstr "Dibujar la terraza" + +# Source-Hash: e092e803eb60af69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit smart measure" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.exitSmartMeasure" +msgstr "Salir de la medida inteligente" + +# Source-Hash: b3907da0ad234f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finish" +msgstr "Terminar" + +# Source-Hash: f74bd937ae2e3a40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish at the edge" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finishAtTheEdge" +msgstr "Terminar en el borde" + +# Source-Hash: 21029cf1c45697cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMove" +msgstr "Movimiento libre" + +# Source-Hash: 3247d8689bed6ff6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move · slide doors and windows" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMoveSlideDoorsAndWindows" +msgstr "Movimiento libre · deslizar puertas y ventanas" + +# Source-Hash: b5ad765b43e75a5c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to pick a material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.holdToPickAMaterial" +msgstr "Mantén pulsado para tomar un material" + +# Source-Hash: 46b53c5449c98964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inspect surface dimensions" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.inspectSurfaceDimensions" +msgstr "Inspeccionar las dimensiones de la superficie" + +# Source-Hash: 63f1f7006ae14177 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint with this material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.paintWithThisMaterial" +msgstr "Pintar con este material" + +# Source-Hash: 188f55cc5afbe34f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick target height" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pickTargetHeight" +msgstr "Elegir altura objetivo" + +# Source-Hash: 2880fc9752eababa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin measurement lens" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pinMeasurementLens" +msgstr "Fijar la lupa de medida" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.place" +msgstr "Colocar" + +# Source-Hash: 82010a7fd6350c93 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place inside the room" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.placeInsideTheRoom" +msgstr "Colocar dentro de la estancia" + +# Source-Hash: 8b97f4503edb27b9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Press anywhere, drag to the opposite corner" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pressAnywhereDragToTheOpposite" +msgstr "Pulsa en cualquier punto y arrastra hasta la esquina opuesta" + +# Source-Hash: 786f0b1c81b2a6c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise or lower" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.raiseOrLower" +msgstr "Subir o bajar" + +# Source-Hash: b033f46ae3a0cbb7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove a painted part, or reset a surface" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeAPaintedPartOrReset" +msgstr "Quitar una parte pintada o restablecer una superficie" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeLastPoint" +msgstr "Quitar el último punto" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.resize" +msgstr "Cambiar tamaño" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotate45" +msgstr "Girar ±45°" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotateTheSelection45" +msgstr "Girar la selección ±45°" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.setOneCornerThenTheOpposite" +msgstr "Fija una esquina y luego la opuesta" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.cancel" +msgstr "Cancelar" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.forcePlace" +msgstr "Forzar colocación" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.place" +msgstr "Colocar" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.rotate" +msgstr "Girar" + +# Source-Hash: e9dfc2a178bca5f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guided constraints bypassed" +#: packages/editor/src/components/ui/helpers/registered-tool-helper.tsx +#, fuzzy +msgid "editor.helpers.registeredToolHelper.guidedConstraintsBypassed" +msgstr "Restricciones guiadas omitidas" + +# Source-Hash: 395fd0821b203517 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add or remove objects from the selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.addOrRemoveObjectsFromThe" +msgstr "Añadir o quitar objetos de la selección" + +# Source-Hash: 8428cb0af9c6d6a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Adjust one side’s corner radius" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.adjustOneSideSCornerRadius" +msgstr "Ajustar el radio de esquina de un lado" + +# Source-Hash: d63b45c195713993 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clear the selection (or click outside)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clearTheSelectionOrClickOutside" +msgstr "Borrar la selección (o hacer clic fuera)" + +# Source-Hash: 40b1afbeadbd6213 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click a handle dot to show move arrows" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickAHandleDotToShow" +msgstr "Haz clic en un punto de control para ver las flechas de movimiento" + +# Source-Hash: 0b82a35c71549580 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click or drag the selection to move it as one" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickOrDragTheSelectionTo" +msgstr "Haz clic o arrastra la selección para moverla en bloque" + +# Source-Hash: 73a761f393f69cb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click the handle dot to show move + rotate handles" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickTheHandleDotToShow" +msgstr "Haz clic en el punto de control para ver los controles de mover y girar" + +# Source-Hash: c0045cef191fee69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detach the joint while dragging an arrow" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.detachTheJointWhileDraggingAn" +msgstr "Separar la unión al arrastrar una flecha" + +# Source-Hash: a019c8948c104a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag left or right to rotate selected object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragLeftOrRightToRotate" +msgstr "Arrastra a izquierda o derecha para girar el objeto seleccionado" + +# Source-Hash: 7db0364deb12f06e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag selected movable object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragSelectedMovableObject" +msgstr "Arrastrar el objeto móvil seleccionado" + +# Source-Hash: 0f258dd389afdc73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Group selection (session only)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.groupSelectionSessionOnly" +msgstr "Agrupar la selección (solo esta sesión)" + +# Source-Hash: 85330d62893a45c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to rotate freely" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.holdToRotateFreely" +msgstr "Mantén pulsado para girar libremente" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotate45" +msgstr "Girar ±45°" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotateTheSelection45" +msgstr "Girar la selección ±45°" + +# Source-Hash: 0f6b418b18ff96f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotating freely (no angle step)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotatingFreely" +msgstr "Giro libre (sin pasos de ángulo)" + +# Source-Hash: 7ed174d6b03563b1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch the rotation axis (Y → X → Z)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.switchTheRotationAxisYX" +msgstr "Cambiar el eje de giro (Y → X → Z)" + +# Source-Hash: d6f2c5cea683de62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ungroup session selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.ungroupSessionSelection" +msgstr "Desagrupar la selección de la sesión" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuous" +msgstr "Continuo" + +# Source-Hash: ebf0eb7af4636a16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousCanopy" +msgstr "Marquesina continua" + +# Source-Hash: 1d8e87cd807e8d40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous run" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousRun" +msgstr "Línea continua" + +# Source-Hash: 8990683667567c6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Curved fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.curvedFence" +msgstr "Valla curva" + +# Source-Hash: edf1b9a2ad3ab910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Freehand fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.freehandFence" +msgstr "Valla a mano alzada" + +# Source-Hash: 2cdb7c1c7cd7c4fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place multiple" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeMultiple" +msgstr "Colocar varios" + +# Source-Hash: 90bf945df6f9c979 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place once" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeOnce" +msgstr "Colocar una vez" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.polygonRoom" +msgstr "Estancia poligonal" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.rectangleRoom" +msgstr "Estancia rectangular" + +# Source-Hash: 7fd85d0408141157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single cabinet" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCabinet" +msgstr "Mueble individual" + +# Source-Hash: dd1bdbc26165baa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCanopy" +msgstr "Marquesina individual" + +# Source-Hash: 5fb1a69316be983e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleFence" +msgstr "Valla simple" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.walls" +msgstr "Muros" + +# Source-Hash: 4e4f1a24e4a9d61e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cut opening" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.cutOpening" +msgstr "Abrir hueco" + +# Source-Hash: 60e8d235f3084a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divide room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.divideRoom" +msgstr "Dividir estancia" + +# Source-Hash: aa496ec33d21ab03 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edit {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.editKind" +msgstr "Editar {kind}" + +# Source-Hash: f3ea3efa7102844f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Erase" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.erase" +msgstr "Borrar" + +# Source-Hash: 3f907e76526472bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.levelTerrain" +msgstr "Nivelar el terreno" + +# Source-Hash: 4e911c300d74eb47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lower terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.lowerTerrain" +msgstr "Bajar el terreno" + +# Source-Hash: 194a147d4618a994 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mezzanine" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.mezzanine" +msgstr "Altillo" + +# Source-Hash: c48c4129c9ed249a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveKind" +msgstr "Mover {kind}" + +# Source-Hash: 89f6b7ca8904c656 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveRoom" +msgstr "Mover estancia" + +# Source-Hash: 9c707069572fb3db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move selection" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveSelection" +msgstr "Mover selección" + +# Source-Hash: cf2e870fce0f2f51 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paint" +msgstr "Pintar" + +# Source-Hash: ca197314cb70aa56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a rectangle" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintARectangle" +msgstr "Pintar un rectángulo" + +# Source-Hash: ea4ce729e17254f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a shape" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintAShape" +msgstr "Pintar una forma" + +# Source-Hash: 01359502b07284d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick material" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.pickMaterial" +msgstr "Tomar material" + +# Source-Hash: 4066e8a3f60b1711 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.raiseTerrain" +msgstr "Elevar el terreno" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.resize" +msgstr "Cambiar tamaño" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.rotate" +msgstr "Girar" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.select" +msgstr "Seleccionar" + +# Source-Hash: ec1f1d68af469867 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart measure" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smartMeasure" +msgstr "Medida inteligente" + +# Source-Hash: 5ba5f22bd1a69e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smooth terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smoothTerrain" +msgstr "Suavizar el terreno" + +# Source-Hash: cbb4687261739397 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.splitKind" +msgstr "Dividir {kind}" + +# Source-Hash: 96281876ce53ba08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Terrace" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.terrace" +msgstr "Terraza" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.polygonRoom" +msgstr "Estancia poligonal" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.rectangleRoom" +msgstr "Estancia rectangular" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.walls" +msgstr "Muros" + +# Source-Hash: 5eab376947d29a50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reload editor" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.reloadEditor" +msgstr "Recargar el editor" + +# Source-Hash: 834de1a7027c4da1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The editor scene failed to render" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.theEditorSceneFailedToRender" +msgstr "No se pudo mostrar la escena del editor" + +# Source-Hash: 151f7c7e4110016f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curtain wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurtainWallTakesNoCorner" +msgstr "Un muro cortina no admite ventana de esquina" + +# Source-Hash: 97f5e044d46501fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curved wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurvedWallTakesNoCorner" +msgstr "Un muro curvo no admite ventana de esquina" + +# Source-Hash: 776d8ebece7fe1bb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add a corner · click the first to close" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.addACornerClickTheFirst" +msgstr "Añadir esquina · haz clic en la primera para cerrar" + +# Source-Hash: 6a0745dd047b149a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Another opening is in the way at the corner" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.anotherOpeningIsInTheWay" +msgstr "Otra abertura estorba en la esquina" + +# Source-Hash: 441124187e7da2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangers" +msgstr "Colgadores automáticos" + +# Source-Hash: 47a7f9a6a81156c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers - click or press H to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersClickOrPressH" +msgstr "Colgadores automáticos: haz clic o pulsa H para alternar" + +# Source-Hash: d7944f31cba90e26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: Off" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOff" +msgstr "Colgadores automáticos: desactivados" + +# Source-Hash: 295882d015d08742 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: On" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOn" +msgstr "Colgadores automáticos: activados" + +# Source-Hash: 8c039e5182b01c4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bypass snapping" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.bypassSnapping" +msgstr "Omitir el ajuste" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancel" +msgstr "Cancelar" + +# Source-Hash: 5b33b576fd30b74e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel move" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelMove" +msgstr "Cancelar movimiento" + +# Source-Hash: 136fa29b9ae419bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel run / exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelRunExit" +msgstr "Cancelar tramo / salir" + +# Source-Hash: 75b406824be91ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel start point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelStartPoint" +msgstr "Cancelar punto inicial" + +# Source-Hash: ffa5aaa1746303c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cornerWindow" +msgstr "Ventana de esquina" + +# Source-Hash: b0afdd855a02e4a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cuts" +msgstr "Cortes" + +# Source-Hash: dc9fe7601cc525f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValue" +msgstr "Cortes: {value}" + +# Source-Hash: a2e13bc4dc82624c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}, even" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValueEven" +msgstr "Cortes: {value}, uniformes" + +# Source-Hash: 04152b4cec726f34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle mono / gable / butterfly" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleMonoGableButterfly" +msgstr "Cambiar un agua / dos aguas / mariposa" + +# Source-Hash: 4fb6c83edb6652b5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle snapping mode" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleSnappingMode" +msgstr "Cambiar el modo de ajuste" + +# Source-Hash: 5d550a3ac76279de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorStyleClickOrPressL" +msgstr "Estilo de puerta: haz clic o pulsa L para cambiar" + +# Source-Hash: 3272a7df5d7c6a9a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorTypeClickOrPressO" +msgstr "Tipo de puerta: haz clic o pulsa O para cambiar" + +# Source-Hash: 366222b4435eefda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drop downspout from outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.dropDownspoutFromOutlet" +msgstr "Bajar la bajante desde la salida" + +# Source-Hash: 03f306371f345007 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct diameter down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.ductDiameterDownUp" +msgstr "Diámetro del conducto menos / más" + +# Source-Hash: 7b4137e27f8327d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End run / cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.endRunCancel" +msgstr "Terminar tramo / cancelar" + +# Source-Hash: 938aacb119b29dc1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exit" +msgstr "Salir" + +# Source-Hash: 7cb4e0688cabcb00 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit drawing" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exitDrawing" +msgstr "Salir del dibujo" + +# Source-Hash: 47025a103c456125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishAndContinue" +msgstr "Terminar y continuar" + +# Source-Hash: 000918429b74128f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishCeiling" +msgstr "Terminar el techo" + +# Source-Hash: 51a80a0dba5a6f30 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishGridAxis" +msgstr "Terminar el eje" + +# Source-Hash: 87c7b98fc2e010e1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMeasurement" +msgstr "Terminar la medida" + +# Source-Hash: 5e1a0af7dc506826 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish multi-point witnesses" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMultiPointWitnesses" +msgstr "Terminar los testigos de varios puntos" + +# Source-Hash: 30fc0862501ba2e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish slab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishSlab" +msgstr "Terminar el forjado" + +# Source-Hash: 66ed7c7598d3aa29 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flip side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.flipSide" +msgstr "Invertir el lado" + +# Source-Hash: f5717f6a0905ffab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow: trace a lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.followTraceALineset" +msgstr "Seguir: trazar junto a una línea frigorífica" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.forcePlace" +msgstr "Forzar colocación" + +# Source-Hash: cc0c14065951444d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.freePlacement" +msgstr "Colocación libre" + +# Source-Hash: f098a27096a9c1ea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Go vertical ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.goVerticalClickToPlace" +msgstr "Pasar a vertical ↕, haz clic para colocar" + +# Source-Hash: fd47f1820d8799c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Highlight outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.highlightOutlet" +msgstr "Resaltar la salida" + +# Source-Hash: eb90058d0f856f67 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Join as a corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.joinAsACornerWindow" +msgstr "Unir como ventana de esquina" + +# Source-Hash: 225b3161f2e59757 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Alt + drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.altDrag" +msgstr "Alt + arrastrar" + +# Source-Hash: dd66f883b173fc72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Backspace" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.backspace" +msgstr "Retroceso" + +# Source-Hash: a18387bc0be54c32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.click" +msgstr "Clic" + +# Source-Hash: db9e60c1d30b8499 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click again" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.clickAgain" +msgstr "Volver a hacer clic" + +# Source-Hash: f400330b9c9c12e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Command" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.command" +msgstr "Comando" + +# Source-Hash: 976c63285a510b09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Control" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.control" +msgstr "Control" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.delete" +msgstr "Eliminar" + +# Source-Hash: 88888c9d2719fa92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.doubleClick" +msgstr "Doble clic" + +# Source-Hash: dfb85b2addb7b9fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.drag" +msgstr "Arrastrar" + +# Source-Hash: ed9140d42148c99b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.enter" +msgstr "Intro" + +# Source-Hash: 9195fa8b9c8ebdfb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hover" +msgstr "Pasar el cursor" + +# Source-Hash: 2d78441b741bc562 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a duct end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverADuctEnd" +msgstr "Pasa el cursor por un extremo del conducto" + +# Source-Hash: 6083405086f61c76 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a pipe end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverAPipeEnd" +msgstr "Pasa el cursor por un extremo de la tubería" + +# Source-Hash: a5a337eb76fdb066 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverGutter" +msgstr "Pasa el cursor por el canalón" + +# Source-Hash: a58533594411e088 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.leftClick" +msgstr "Clic izquierdo" + +# Source-Hash: bc4ab608ec3d3b4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Middle click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.middleClick" +msgstr "Clic central" + +# Source-Hash: 6791879c651108c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rightClick" +msgstr "Clic derecho" + +# Source-Hash: c836b21b42198868 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R / Shift+R" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rShiftR" +msgstr "R / Mayús+R" + +# Source-Hash: 9812aa06d8bb7544 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scroll" +msgstr "Desplazar" + +# Source-Hash: f2174536230657c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll wheel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scrollWheel" +msgstr "Rueda del ratón" + +# Source-Hash: 82dd231086d87f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Space" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.space" +msgstr "Espacio" + +# Source-Hash: 9e68aa2f472cad56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.tab" +msgstr "Tab" + +# Source-Hash: 4b221b73f9496a49 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mount: floor / ceiling / wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.mountFloorCeilingWall" +msgstr "Montaje: suelo / techo / muro" + +# Source-Hash: 225edfb1e45aed95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No room for the matching window on the other wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noRoomForTheMatchingWindow" +msgstr "No hay espacio para la ventana correspondiente en el otro muro" + +# Source-Hash: a7045d6b678bcd13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No wall meets here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noWallMeetsHere" +msgstr "Aquí no se une ningún muro" + +# Source-Hash: a639341dc21fed2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Number of cuts — scroll or click to change" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.numberOfCutsScrollOrClick" +msgstr "Número de cortes: desplaza o haz clic para cambiar" + +# Source-Hash: af01bde3ae4b7e59 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick witness point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pickWitnessPoint" +msgstr "Elegir punto testigo" + +# Source-Hash: ecfd58576b28a9f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe size down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pipeSizeDownUp" +msgstr "Diámetro de tubería menos / más" + +# Source-Hash: 7a1eb7b64f06bad0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeAndContinue" +msgstr "Colocar y continuar" + +# Source-Hash: c6cda39e2e4b5d3a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBlock" +msgstr "Colocar bloque" + +# Source-Hash: 45a743c52a1d72de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place box vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBoxVentOnRoof" +msgstr "Colocar aireador en la cubierta" + +# Source-Hash: 75142dd1d557efe2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCabinet" +msgstr "Colocar mueble" + +# Source-Hash: da603a713d4c9909 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place canopy or set the next run point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCanopyOrSetTheNext" +msgstr "Colocar la marquesina o el siguiente punto" + +# Source-Hash: 8b3a30c6b7a5612d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place chimney on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeChimneyOnRoof" +msgstr "Colocar chimenea en la cubierta" + +# Source-Hash: 710d41e4e2f259fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeColumn" +msgstr "Colocar pilar" + +# Source-Hash: ee1da4e12a71d9a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cupola on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCupolaOnRoof" +msgstr "Colocar linterna en la cubierta" + +# Source-Hash: 19c1fe8c46d213a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dimension line when needed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDimensionLineWhenNeeded" +msgstr "Colocar la línea de cota cuando haga falta" + +# Source-Hash: 58f3e7efb6ea120b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place door on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDoorOnWall" +msgstr "Colocar puerta en el muro" + +# Source-Hash: de04e9d03d937c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dormer on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDormerOnRoof" +msgstr "Colocar buhardilla en la cubierta" + +# Source-Hash: c581645f2ee447c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeElevator" +msgstr "Colocar ascensor" + +# Source-Hash: 096b8d6482717358 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place eyebrow vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeEyebrowVentOnRoof" +msgstr "Colocar respiradero de ceja en la cubierta" + +# Source-Hash: e8d42c1c8370773f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeFitting" +msgstr "Colocar accesorio" + +# Source-Hash: 2340a4b70cb0d9ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gutter on roof eave" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeGutterOnRoofEave" +msgstr "Colocar canalón en el alero" + +# Source-Hash: 706a8eafb6212833 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItem" +msgstr "Colocar elemento" + +# Source-Hash: 1815c482e249932e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place it (locked to 45°)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItLockedTo45" +msgstr "Colocar (bloqueado a 45°)" + +# Source-Hash: 4a14340657532838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place measurement point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeMeasurementPoint" +msgstr "Colocar punto de medida" + +# Source-Hash: b3be684ac62fbf53 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placement" +msgstr "Colocación" + +# Source-Hash: 2bb2ce6276c69b1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Auto" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementAuto" +msgstr "Colocación: automática" + +# Source-Hash: ed78ac5354a1dcd8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Ground" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementGround" +msgstr "Colocación: suelo" + +# Source-Hash: a066a2c9d5e65a1a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementRoof" +msgstr "Colocación: cubierta" + +# Source-Hash: 8f74dbe5064c4c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement surface - click or press P to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementSurfaceClickOrPressP" +msgstr "Superficie de colocación: haz clic o pulsa P para cambiar" + +# Source-Hash: fe119955c925feaf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementType" +msgstr "Tipo de colocación" + +# Source-Hash: 33043a35500168f5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type — click or press I to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementTypeClickOrPressI" +msgstr "Tipo de colocación: haz clic o pulsa I para alternar" + +# Source-Hash: 9945f412e6a9a446 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place on a fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeOnAFence" +msgstr "Colocar en una valla" + +# Source-Hash: 6708118775a7da7f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRegister" +msgstr "Colocar rejilla" + +# Source-Hash: ebd2731f5c79306e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place ridge vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRidgeVentOnRoof" +msgstr "Colocar ventilación de cumbrera en la cubierta" + +# Source-Hash: 9b3c66a867c23326 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeShelf" +msgstr "Colocar estantería" + +# Source-Hash: f11cf5c1c9fe862d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place skylight on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSkylightOnRoof" +msgstr "Colocar claraboya en la cubierta" + +# Source-Hash: e989a58d6709cc16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place solar panel array on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSolarPanelArrayOnRoof" +msgstr "Colocar paneles solares en la cubierta" + +# Source-Hash: b67f7036d5180cf5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSpawnPoint" +msgstr "Colocar punto de aparición" + +# Source-Hash: 6c7f32a17e5636c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place stairs" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeStairs" +msgstr "Colocar escalera" + +# Source-Hash: 641c0d3debd798a8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTrap" +msgstr "Colocar sifón" + +# Source-Hash: 6f0a6f6c4b7588a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place turbine vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTurbineVentOnRoof" +msgstr "Colocar extractor eólico en la cubierta" + +# Source-Hash: e65cf5edb4f51ed5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeUnit" +msgstr "Colocar equipo" + +# Source-Hash: 86ce1c730154f68b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place window on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWindowOnWall" +msgstr "Colocar ventana en el muro" + +# Source-Hash: 2b612180a7617901 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place without the corner snap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWithoutTheCornerSnap" +msgstr "Colocar sin el ajuste a la esquina" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastPoint" +msgstr "Quitar el último punto" + +# Source-Hash: 8b74b1d962be10fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last witness" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastWitness" +msgstr "Quitar el último testigo" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate" +msgstr "Girar" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45" +msgstr "Girar ±45°" + +# Source-Hash: be2240289aa74df5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45° (floor / ceiling)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45FloorCeiling" +msgstr "Girar ±45° (suelo / techo)" + +# Source-Hash: d5fb78b07c0f8138 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ghost ±15°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateGhost15" +msgstr "Girar la vista previa ±15°" + +# Source-Hash: 912d340cd16e27fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate or flip the run side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateOrFlipTheRunSide" +msgstr "Girar o invertir el lado de la línea" + +# Source-Hash: ad1dc0b5536cceef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate roof direction 90°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateRoofDirection90" +msgstr "Girar la orientación de la cubierta 90°" + +# Source-Hash: fa24651e9e5f595a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateSpawnPoint" +msgstr "Girar el punto de aparición" + +# Source-Hash: 2d693d87fe9b59e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Round / rectangular / oval" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.roundRectangularOval" +msgstr "Redondo / rectangular / ovalado" + +# Source-Hash: f7d2c9cdcc637c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set fence start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setFenceStartEnd" +msgstr "Fijar inicio / fin de la valla" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setOneCornerThenTheOpposite" +msgstr "Fija una esquina y luego la opuesta" + +# Source-Hash: 4f55171f10c6ceeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set roof footprint" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setRoofFootprint" +msgstr "Fijar la planta de la cubierta" + +# Source-Hash: 0243859b1d64c21e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set wall start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setWallStartEnd" +msgstr "Fijar inicio / fin del muro" + +# Source-Hash: c2806cce9612fa50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slope / level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.slopeLevel" +msgstr "Pendiente / horizontal" + +# Source-Hash: 06c0ec40606db679 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snap onto the run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.snapOntoTheRun" +msgstr "Ajustar al tramo" + +# Source-Hash: e214cccbac9c4fd2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split at the marks" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.splitAtTheMarks" +msgstr "Dividir en las marcas" + +# Source-Hash: 94455c35bfeac6b4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startGridAxis" +msgstr "Iniciar el eje" + +# Source-Hash: 2edb4c29bbe7c513 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLineset" +msgstr "Iniciar la línea frigorífica" + +# Source-Hash: 9e50f1b30e325208 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start liquid line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLiquidLine" +msgstr "Iniciar la línea de líquido" + +# Source-Hash: 877ddcb778c211cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startRun" +msgstr "Iniciar el tramo" + +# Source-Hash: 8a62bee64174bbc0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startSegment" +msgstr "Iniciar el segmento" + +# Source-Hash: 6cc5dc51a8e66779 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Step back or cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stepBackOrCancel" +msgstr "Retroceder o cancelar" + +# Source-Hash: 1a79a485d91f3f28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.style" +msgstr "Estilo" + +# Source-Hash: 81f595b1c47c0080 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleBarn" +msgstr "Estilo: granero" + +# Source-Hash: 3a82c718fe215273 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCasement" +msgstr "Estilo: abatible" + +# Source-Hash: 072e3331d1d105c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Craftsman" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCraftsman" +msgstr "Estilo: artesano" + +# Source-Hash: b64d07557dec1714 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Double-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleDoubleHung" +msgstr "Estilo: guillotina doble" + +# Source-Hash: 55ef8761a537637f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleFrench" +msgstr "Estilo: francesa" + +# Source-Hash: bc8a751d87536dc3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGlass" +msgstr "Estilo: vidrio" + +# Source-Hash: 40c1eb0bc83e207d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGrid" +msgstr "Estilo: cuadrícula" + +# Source-Hash: f516886bab2e7f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Half-louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHalfLouvered" +msgstr "Estilo: media lama" + +# Source-Hash: 64e4389a695371a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Horizontal bands" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHorizontalBands" +msgstr "Estilo: bandas horizontales" + +# Source-Hash: ff6d226a425b00c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Modern" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleModern" +msgstr "Estilo: moderno" + +# Source-Hash: c6d17ba078ff47e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePanel" +msgstr "Estilo: panel" + +# Source-Hash: 5e6baad0d2ce3a62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Paneled glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePaneledGlass" +msgstr "Estilo: vidrio con paneles" + +# Source-Hash: 6314388e6832c252 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Shaker" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleShaker" +msgstr "Estilo: shaker" + +# Source-Hash: a0f8e524f3ca121f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Single" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSingle" +msgstr "Estilo: simple" + +# Source-Hash: 368279df3a472c86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Six-panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSixPanel" +msgstr "Estilo: seis paneles" + +# Source-Hash: 8f3c2571d8168fee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSliding" +msgstr "Estilo: corredera" + +# Source-Hash: aa9d9eb137ca38d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Tall grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTallGrid" +msgstr "Estilo: cuadrícula alta" + +# Source-Hash: bc164648722b63e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Transom" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTransom" +msgstr "Estilo: montante" + +# Source-Hash: 9a218f0c9ceb4697 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Triple-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTripleHung" +msgstr "Estilo: guillotina triple" + +# Source-Hash: 9f6df1344bd3d694 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Wide grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleWideGrid" +msgstr "Estilo: cuadrícula ancha" + +# Source-Hash: 711d4050c0cb95d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch rotation axis (Y → X → Z)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.switchRotationAxisYXZ" +msgstr "Cambiar el eje de giro (Y → X → Z)" + +# Source-Hash: d650c71e042c2598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The walls meet at too sharp or too flat an angle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWallsMeetAtTooSharp" +msgstr "Los muros se unen en un ángulo demasiado agudo o demasiado plano" + +# Source-Hash: ab206ac56e65f190 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The window waiting there is taller than this wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWindowWaitingThereIsTaller" +msgstr "La ventana prevista ahí es más alta que este muro" + +# Source-Hash: 9c1f47138ed5c7ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Three or more walls meet here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.threeOrMoreWallsMeetHere" +msgstr "Aquí se unen tres o más muros" + +# Source-Hash: c3ca56fa28e15f07 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace ceiling outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceCeilingOutline" +msgstr "Trazar el contorno del techo" + +# Source-Hash: bdf71499d30a29de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace slab outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceSlabOutline" +msgstr "Trazar el contorno del forjado" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.type" +msgstr "Tipo" + +# Source-Hash: b54eaaff3349dcb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Awning" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeAwning" +msgstr "Tipo: proyectante" + +# Source-Hash: f399572a27417c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBarn" +msgstr "Tipo: granero" + +# Source-Hash: a1df9782200b5f1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bay" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBay" +msgstr "Tipo: mirador" + +# Source-Hash: ff069a390e8e3f66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bow" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBow" +msgstr "Tipo: mirador curvo" + +# Source-Hash: bdac5f3f2ea70fff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCabinet" +msgstr "Tipo: armario" + +# Source-Hash: e0754fc03997cbf9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCasement" +msgstr "Tipo: abatible" + +# Source-Hash: 47d873446d6e173b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDouble" +msgstr "Tipo: doble" + +# Source-Hash: 5942e484513aaab5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDoubleHung" +msgstr "Tipo: guillotina doble" + +# Source-Hash: f9497fbfceefda27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Fixed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFixed" +msgstr "Tipo: fija" + +# Source-Hash: 0dcf07acc9cbf000 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Folding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFolding" +msgstr "Tipo: plegable" + +# Source-Hash: bff7331f87f279aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFrench" +msgstr "Tipo: francesa" + +# Source-Hash: 9d2c3b82079eb769 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Hinged" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeHinged" +msgstr "Tipo: batiente" + +# Source-Hash: b8001b90ff522838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Island" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeIsland" +msgstr "Tipo: isla" + +# Source-Hash: 516833c5160d412e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeLouvered" +msgstr "Tipo: de lamas" + +# Source-Hash: 291272bf848ad6ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Pocket" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typePocket" +msgstr "Tipo: corredera empotrada" + +# Source-Hash: 46d0e53d6ae07c72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Single Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSingleHung" +msgstr "Tipo: guillotina simple" + +# Source-Hash: b11115b50df8faac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSliding" +msgstr "Tipo: corredera" + +# Source-Hash: bff0c1694ee0a37e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical stack ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.verticalStackClickToPlace" +msgstr "Montante vertical ↕, haz clic para colocar" + +# Source-Hash: bac471ee67af6412 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waste / vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.wasteVent" +msgstr "Desagüe / ventilación" + +# Source-Hash: 1c744b7e24fc786e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowStyleClickOrPressL" +msgstr "Estilo de ventana: haz clic o pulsa L para cambiar" + +# Source-Hash: dd6f0ab314fea26c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowTypeClickOrPressO" +msgstr "Tipo de ventana: haz clic o pulsa O para cambiar" + +# Source-Hash: 9fc7a39bc32f287a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.plugins" +msgstr "Complementos" + +# Source-Hash: c54f9bac358893d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "2D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view2d" +msgstr "2D" + +# Source-Hash: f78f2fa035f25f85 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view3d" +msgstr "3D" + +# Source-Hash: 05b65242d8c48791 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.auto" +msgstr "Auto" + +# Source-Hash: 7890c110650ad1e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Browse plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.browsePlugins" +msgstr "Explorar complementos" + +# Source-Hash: 3b11e7af681a9dcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeLabel" +msgstr "Cerrar {label}" + +# Source-Hash: 3f00e92517e3f4a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeSplit" +msgstr "Cerrar vista dividida (\\)" + +# Source-Hash: 94cc8e9f1ee16edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ground" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.ground" +msgstr "Terreno" + +# Source-Hash: 0d472502a4d36e86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundSolid" +msgstr "{standing, select, partly {Parcialmente bajo rasante · terreno sólido} below {Bajo rasante · terreno sólido} other {Terreno sólido}}" + +# Source-Hash: 1b6798c307ac1b96 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundVeiled" +msgstr "{standing, select, partly {Parcialmente bajo rasante · terreno velado} below {Bajo rasante · terreno velado} other {Terreno velado}}" + +# Source-Hash: ebdc976a98e82626 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Keep the ground solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.keepTheGroundSolid" +msgstr "Mantener el terreno sólido" + +# Source-Hash: 5f827686a006d88c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.moreViews" +msgstr "Más vistas" + +# Source-Hash: f175bbcf457ab73c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pane {pane} views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.paneViews" +msgstr "Vistas del panel {pane}" + +# Source-Hash: 33c20cc33dce9a9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinLabel" +msgstr "Fijar {label}" + +# Source-Hash: 3f7231b1eb2f93f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin to the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinToTheViewBar" +msgstr "Fijar a la barra de vistas" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.solid" +msgstr "Sólido" + +# Source-Hash: 98f22f3f89f17686 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split" +msgstr "Vista dividida (\\)" + +# Source-Hash: e4cd64b1680ac0d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split2" +msgstr "Dividir" + +# Source-Hash: 15b0adc705923a27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Swap panes" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.swapPanes" +msgstr "Intercambiar paneles" + +# Source-Hash: 9781bcdb7a8549e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin from the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinFromTheViewBar" +msgstr "Quitar de la barra de vistas" + +# Source-Hash: f667358dec4abdea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinLabel" +msgstr "Dejar de fijar {label}" + +# Source-Hash: e96581f0bbf9fa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Veil the ground over a level below grade" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.veilTheGroundOverALevel" +msgstr "Velar el terreno sobre una planta bajo rasante" + +# Source-Hash: fb82f09f8ed3059e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.views" +msgstr "Vistas" + +# Source-Hash: fdece5c2158dfe88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "You can retry the scene or return home without reloading the whole app shell." +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.youCanRetryTheSceneOr" +msgstr "Puedes reintentar la escena o volver al inicio sin recargar toda la aplicación." + +# Source-Hash: a273dacdf51b26f2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A topology-backed solid edited directly in the canvas." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.description" +msgstr "Sólido con topología que se edita directamente en el lienzo." + +# Source-Hash: 279f456ebb2f5da0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.label" +msgstr "Bloque" + +# Source-Hash: b2a371b4041b5e38 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Small louvered exhaust vent that sits on a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.description" +msgstr "Pequeño respiradero de extracción con lamas sobre un faldón." + +# Source-Hash: f736ca24e84825c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Box Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.label" +msgstr "Aireador de cubierta" + +# Source-Hash: f49d8836ae037dde +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A building container holding one or more levels." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.description" +msgstr "Contenedor de edificio con una o varias plantas." + +# Source-Hash: d42f7d29e3fc4af7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Building" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.label" +msgstr "Edificio" + +# Source-Hash: 693a0d8896f5cc43 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable parametric base cabinet." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.description" +msgstr "Mueble bajo paramétrico configurable." + +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.label" +msgstr "Mueble modular" + +# Source-Hash: ffc8d80e438f40b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An editable module inside a modular cabinet run." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.description" +msgstr "Módulo editable dentro de una línea de muebles modulares." + +# Source-Hash: d5c19ec529e26a98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cabinet Module" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.label" +msgstr "Módulo de mueble" + +# Source-Hash: 4d6d5e9439f40e9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A polygon-bounded ceiling surface that hosts ceiling-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.description" +msgstr "Superficie de techo delimitada por un polígono que aloja elementos de techo." + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.label" +msgstr "Techo" + +# Source-Hash: ea12ce3c2b3588e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical masonry stack on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.description" +msgstr "Chimenea vertical de obra sobre un faldón." + +# Source-Hash: 95169058fec6db14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chimney" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.label" +msgstr "Chimenea" + +# Source-Hash: 6a06e628257f3393 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A parametric column with configurable cross-section, base, and capital." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.description" +msgstr "Pilar paramétrico con sección, basa y capitel configurables." + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.label" +msgstr "Pilar" + +# Source-Hash: 895766ad1b766c2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Associative linear, curved, circular, angular, or coordinate plan dimension." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.description" +msgstr "Cota de plano asociativa: lineal, curva, circular, angular o de coordenadas." + +# Source-Hash: 6875b60ee8a7cc3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Construction Dimension" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.label" +msgstr "Cota de construcción" + +# Source-Hash: a276c9693f01dec7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered roof lantern with a dome or pyramid cap and optional finial." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.description" +msgstr "Linterna de cubierta con lamas, remate en cúpula o pirámide y pináculo opcional." + +# Source-Hash: e679dd19f96eba0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cupola" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.label" +msgstr "Linterna" + +# Source-Hash: 6123b20edb9569de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A door cut into a wall. Animated open/close state." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.description" +msgstr "Puerta abierta en un muro, con apertura y cierre animados." + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.label" +msgstr "Puerta" + +# Source-Hash: 387e57242c8d110a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "House-shaped protrusion on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.description" +msgstr "Saliente con forma de casa en un faldón." + +# Source-Hash: 6b6f8068bbc4c902 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dormer" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.label" +msgstr "Buhardilla" + +# Source-Hash: b46392d2ea865760 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical drop pipe from a gutter outlet to the ground." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.description" +msgstr "Tubo vertical desde la salida del canalón hasta el suelo." + +# Source-Hash: 1a1ec08a311f1b35 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Downspout" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.label" +msgstr "Bajante" + +# Source-Hash: 29eadb8c84ae9632 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elbow, tee, reducer, or square-to-round transition connecting duct runs." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.description" +msgstr "Codo, T, reducción o transición cuadrado-redondo que une conductos." + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.label" +msgstr "Accesorio de conducto" + +# Source-Hash: 09eb45a9b35d1a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC duct run — polyline of round, rect, or flat-oval sections." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.description" +msgstr "Conducto de climatización: polilínea de secciones redondas, rectangulares u ovaladas planas." + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.label" +msgstr "Conducto" + +# Source-Hash: 33181d0f42421013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.description" +msgstr "Terminal de conducto: rejilla de impulsión, difusor de techo o rejilla de retorno. Los conductos terminan en su collarín." + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.label" +msgstr "Rejilla" + +# Source-Hash: d0afa386e65cd3a4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A multi-level elevator shaft with configurable openings per level." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.description" +msgstr "Hueco de ascensor de varias plantas con aberturas configurables por planta." + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.label" +msgstr "Ascensor" + +# Source-Hash: 7b22c91cf520e161 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low curved lens-shaped roof vent with a louvered front." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.description" +msgstr "Respiradero de cubierta bajo, curvo y lenticular con frente de lamas." + +# Source-Hash: 654b29319185ac66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Eyebrow Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.label" +msgstr "Respiradero de ceja" + +# Source-Hash: 20032fe9430f610d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A straight or curved fence segment with configurable posts and infill." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.description" +msgstr "Tramo de valla recto o curvo con postes y relleno configurables." + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.label" +msgstr "Valla" + +# Source-Hash: df61821ed00852d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A gate hosted by a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.description" +msgstr "Puerta alojada en una valla." + +# Source-Hash: 4a479aa23542d766 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.label" +msgstr "Puerta de valla" + +# Source-Hash: 8f9c927d79796c26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An intentional opening in a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.description" +msgstr "Abertura intencionada en una valla." + +# Source-Hash: ab67bb47e647d594 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open Passage" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.label" +msgstr "Paso abierto" + +# Source-Hash: dc3adf0c2d50dba6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor opening" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.floorOpening.label" +msgstr "Hueco de forjado" + +# Source-Hash: 2f4fac2b1d39fdb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A measurement / reference annotation (linear, area, or arc)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.description" +msgstr "Anotación de medida o referencia (lineal, área o arco)." + +# Source-Hash: 1344ea2602e3aa9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.label" +msgstr "Guía" + +# Source-Hash: 5402d634f40b2f97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rain-water channel running along the eave of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.description" +msgstr "Canal de agua de lluvia a lo largo del alero de un faldón." + +# Source-Hash: 14ba981da3627ae2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.label" +msgstr "Canalón" + +# Source-Hash: 50e9252d30f3fb4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furnace, air handler, or condenser — duct runs connect to its supply/return collars." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.description" +msgstr "Caldera, climatizadora o condensadora: los conductos se conectan a sus collarines de impulsión y retorno." + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.label" +msgstr "Equipo de climatización" + +# Source-Hash: f24a1089d9256460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Geometry preserved from an imported model when no native Pascal shape exists." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.description" +msgstr "Geometría conservada de un modelo importado cuando no existe una forma nativa de Pascal." + +# Source-Hash: 9f9d11f287f722d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Imported Mesh" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.label" +msgstr "Malla importada" + +# Source-Hash: 63f79b3c467177b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A catalog-backed item (furniture, fixtures, decorations)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.description" +msgstr "Elemento del catálogo (muebles, equipamiento, decoración)." + +# Source-Hash: 2743a0e9d2743807 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.label" +msgstr "Elemento" + +# Source-Hash: a9e2d7b215696e2a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.description" +msgstr "Marquesina adosada a un agua o exenta (un agua, dos aguas o mariposa) con estructura y desagüe gestionados." + +# Source-Hash: 8503bedfbafde9a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Canopy" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.label" +msgstr "Marquesina" + +# Source-Hash: 45673462f914d3df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single floor of a building, holding walls / slabs / ceilings / items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.description" +msgstr "Una planta de un edificio con muros, forjados, techos y elementos." + +# Source-Hash: 0608743fc1736d86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.label" +msgstr "Planta" + +# Source-Hash: 156bdee8fee5bec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.description" +msgstr "Línea frigorífica: par de cobre de aspiración y líquido que une la condensadora con la batería interior." + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.label" +msgstr "Línea frigorífica" + +# Source-Hash: 2bd4a85bed158269 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.description" +msgstr "Línea de líquido frigorífico independiente: un tubo fino de cobre desnudo; el modo Seguir traza junto a una línea existente." + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.label" +msgstr "Línea de líquido" + +# Source-Hash: ff4e3bb72267859e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A persistent distance, angle, area, perimeter, or volume annotation." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.description" +msgstr "Anotación persistente de distancia, ángulo, área, perímetro o volumen." + +# Source-Hash: ec3567fd058bab7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.label" +msgstr "Medida" + +# Source-Hash: 7764b50334e9f71d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV joint — elbow bend, 45° wye, or sanitary tee." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.description" +msgstr "Unión de desagüe: codo, Y a 45° o T sanitaria." + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.label" +msgstr "Accesorio de tubería" + +# Source-Hash: a0bb4762aa66fa3e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.description" +msgstr "Tubería de desagüe y ventilación: dibújala horizontal o alterna una pendiente de ¼″ por pie con S." + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.label" +msgstr "Tubería de desagüe" + +# Source-Hash: 6d0cdd14d0675e05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV P-trap — water seal on the waste line. The trap arm runs to the vent." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.description" +msgstr "Sifón en P: cierre hidráulico en el desagüe. El brazo del sifón llega a la ventilación." + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.label" +msgstr "Sifón" + +# Source-Hash: 0efe82436b915f6d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Experimental editable recipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.description" +msgstr "Receta editable experimental" + +# Source-Hash: c8bbcc888cce7b8a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Procedural item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.label" +msgstr "Elemento procedural" -# Source-Hash: 4e186fc057733162 -# Review: human -# English: "Polygon" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.label" -msgstr "Polígono" +# Source-Hash: 356aa0ed69cb8ec5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ventilation strip running along the ridge of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.description" +msgstr "Banda de ventilación a lo largo de la cumbrera de un faldón." -# Source-Hash: 345e3aca3879b5c5 -# Review: human -# English: "Click each corner," -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.lead" -msgstr "Haz clic en cada esquina" +# Source-Hash: 54b74080f33c8c4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ridge Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.label" +msgstr "Ventilación de cumbrera" -# Source-Hash: 8ec6152e139b0e3f -# Review: human -# English: "Polygon room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.title" -msgstr "Estancia poligonal" +# Source-Hash: 6afeec8de7ed618d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A pitched / hip / gable roof composed of one or more segments." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.description" +msgstr "Cubierta inclinada, a cuatro aguas o a dos aguas compuesta por uno o varios faldones." -# Source-Hash: 9b46295eedcbedae -# Review: human -# English: "{lead} on the grid. Walls, floor and ceiling are created together." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.caption" -msgstr "{lead} en la cuadrícula. Los muros, el suelo y el techo se crean a la vez." +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.label" +msgstr "Cubierta" -# Source-Hash: 2c2c20272b0370cc -# Review: human -# English: "Rectangle" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.label" -msgstr "Rectángulo" +# Source-Hash: 99afd827dbe5d647 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single pitched plane of a parent roof." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.description" +msgstr "Un faldón inclinado de una cubierta padre." -# Source-Hash: 060faa48e299d7c9 -# Review: human -# English: "Click two corners" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.lead" -msgstr "Haz clic en dos esquinas" +# Source-Hash: e72a64b3e00aad98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof Segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.label" +msgstr "Faldón" -# Source-Hash: 83a45603ac7f41e8 -# Review: human -# English: "Rectangle room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.title" -msgstr "Estancia rectangular" +# Source-Hash: 6600a850000b98ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A captured session with optional mesh, motion, media, and sensor data." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.description" +msgstr "Sesión capturada con malla, movimiento, medios y datos de sensores opcionales." -# Source-Hash: 3e7408ed44676176 -# Review: human -# English: "Rooms" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.title" -msgstr "Estancias" +# Source-Hash: 3a0701ebcb9f26cb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Capture" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.label" +msgstr "Captura" -# Source-Hash: 8a21a03c4acf396b -# Review: human -# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.caption" -msgstr "{lead} Cierra el contorno para crear una estancia o déjalo abierto para tabiques." +# Source-Hash: acb8cb92b3674b50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Separator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.separator.label" +msgstr "Separador" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.label" -msgstr "Muros" +# Source-Hash: 26aff27b7284fc84 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable shelving unit. Items host on each row." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.description" +msgstr "Estantería configurable. Los elementos se apoyan en cada fila." -# Source-Hash: 9843edd68426fa2d -# Review: human -# English: "Draw one wall at a time." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.lead" -msgstr "Dibuja un muro cada vez." +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.label" +msgstr "Estantería" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.title" -msgstr "Muros" +# Source-Hash: c52492c73312a922 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The top-level container holding buildings, zones, and the property boundary." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.site.description" +msgstr "Contenedor de nivel superior con edificios, zonas y el límite de la parcela." -# Source-Hash: 9fc7a39bc32f287a +# Source-Hash: 91f90818d42a984e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Site" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.plugins" -msgstr "Complementos" +msgid "node.site.label" +msgstr "Parcela" -# Source-Hash: c54f9bac358893d8 +# Source-Hash: 67d903d7fe0c69c1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "2D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Framed glass opening on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view2d" -msgstr "2D" +msgid "node.skylight.description" +msgstr "Abertura acristalada con marco en un faldón." -# Source-Hash: f78f2fa035f25f85 +# Source-Hash: 358826fbdeaf72b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Skylight" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view3d" -msgstr "3D" +msgid "node.skylight.label" +msgstr "Claraboya" -# Source-Hash: 05b65242d8c48791 +# Source-Hash: ad8f8036d34f6cea # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Auto" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A polygon-bounded floor surface that hosts items on top." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.auto" -msgstr "Auto" +msgid "node.slab.description" +msgstr "Superficie de suelo delimitada por un polígono que aloja elementos encima." -# Source-Hash: 7890c110650ad1e5 +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Browse plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Slab" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.browsePlugins" -msgstr "Explorar complementos" +msgid "node.slab.label" +msgstr "Forjado" -# Source-Hash: 3b11e7af681a9dcd +# Source-Hash: 065ffaaf64ab479d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Grid of photovoltaic panels mounted on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeLabel" -msgstr "Cerrar {label}" +msgid "node.solarPanel.description" +msgstr "Conjunto de paneles fotovoltaicos montados en un faldón." -# Source-Hash: 3f00e92517e3f4a5 +# Source-Hash: 4d18446ff8eaa680 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Solar Panel" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeSplit" -msgstr "Cerrar vista dividida (\\)" +msgid "node.solarPanel.label" +msgstr "Panel solar" -# Source-Hash: 94cc8e9f1ee16edb +# Source-Hash: 638f17c80f424dd3 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Ground" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Player or camera origin within a level. One per level." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.ground" -msgstr "Terreno" +msgid "node.spawn.description" +msgstr "Origen del jugador o la cámara en una planta. Uno por planta." -# Source-Hash: 0d472502a4d36e86 +# Source-Hash: 3e2f6b4274f592c0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Spawn Point" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundSolid" -msgstr "{standing, select, partly {Parcialmente bajo rasante · terreno sólido} below {Bajo rasante · terreno sólido} other {Terreno sólido}}" +msgid "node.spawn.label" +msgstr "Punto de aparición" -# Source-Hash: 1b6798c307ac1b96 +# Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A stair composed of one or more flights with configurable treads, risers, railings." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundVeiled" -msgstr "{standing, select, partly {Parcialmente bajo rasante · terreno velado} below {Bajo rasante · terreno velado} other {Terreno velado}}" +msgid "node.stair.description" +msgstr "Escalera de uno o varios tramos con huellas, contrahuellas y barandillas configurables." -# Source-Hash: ebdc976a98e82626 +# Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Keep the ground solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.keepTheGroundSolid" -msgstr "Mantener el terreno sólido" +msgid "node.stair.label" +msgstr "Escalera" -# Source-Hash: 5f827686a006d88c +# Source-Hash: ce0b6361eb77e93c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "More views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A single flight of a parent stair." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.moreViews" -msgstr "Más vistas" +msgid "node.stairSegment.description" +msgstr "Un tramo de una escalera padre." -# Source-Hash: f175bbcf457ab73c +# Source-Hash: 2159ec5769e1c59a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pane {pane} views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair Segment" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.paneViews" -msgstr "Vistas del panel {pane}" +msgid "node.stairSegment.label" +msgstr "Tramo de escalera" -# Source-Hash: 33c20cc33dce9a9b +# Source-Hash: 5434a3189441c913 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Persistent construction grid axis with identification bubbles." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinLabel" -msgstr "Fijar {label}" +msgid "node.structuralGrid.description" +msgstr "Eje de replanteo persistente con burbujas de identificación." -# Source-Hash: 3f7231b1eb2f93f3 +# Source-Hash: 0cfe636f7fdd9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin to the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Structural Grid" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinToTheViewBar" -msgstr "Fijar a la barra de vistas" +msgid "node.structuralGrid.label" +msgstr "Retícula estructural" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 36b714210f25c284 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wind-driven spinning whirlybird exhaust vent for a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.solid" -msgstr "Sólido" +msgid "node.turbineVent.description" +msgstr "Extractor eólico giratorio para un faldón." -# Source-Hash: 98f22f3f89f17686 +# Source-Hash: 4a855abb962f5e7a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Turbine Vent" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split" -msgstr "Vista dividida (\\)" +msgid "node.turbineVent.label" +msgstr "Extractor eólico" -# Source-Hash: e4cd64b1680ac0d2 +# Source-Hash: e3d2aaaf5c72bc3b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A named group of zones forming one apartment, hotel room or commercial lot." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split2" -msgstr "Dividir" +msgid "node.unit.description" +msgstr "Grupo con nombre de zonas que forma un piso, una habitación de hotel o un local comercial." -# Source-Hash: 15b0adc705923a27 +# Source-Hash: 062cc0f1afef0c52 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Swap panes" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Unit" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.swapPanes" -msgstr "Intercambiar paneles" +msgid "node.unit.label" +msgstr "Unidad" -# Source-Hash: 9781bcdb7a8549e2 +# Source-Hash: 6c753f6234766116 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin from the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinFromTheViewBar" -msgstr "Quitar de la barra de vistas" +msgid "node.wall.description" +msgstr "Tramo de muro recto o curvo. Aloja puertas, ventanas, anexos a un agua y elementos de pared." -# Source-Hash: f667358dec4abdea +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wall" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinLabel" -msgstr "Dejar de fijar {label}" +msgid "node.wall.label" +msgstr "Muro" -# Source-Hash: e96581f0bbf9fa91 +# Source-Hash: ea6a51e66eb0c0dc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Veil the ground over a level below grade" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A window cut into a wall. Animated open/close for opening windows." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.veilTheGroundOverALevel" -msgstr "Velar el terreno sobre una planta bajo rasante" +msgid "node.window.description" +msgstr "Ventana abierta en un muro, con apertura animada en las practicables." -# Source-Hash: fb82f09f8ed3059e +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Window" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.views" -msgstr "Vistas" +msgid "node.window.label" +msgstr "Ventana" + +# Source-Hash: 4a4d97a4101793b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A polygonal site zone (lawn, water, paving) with a TSL gradient material." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.zone.description" +msgstr "Zona poligonal del terreno (césped, agua, pavimento) con un material de degradado TSL." + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.zone.label" +msgstr "Zona" # Source-Hash: 8bf25afa3cb8baea # Review: human diff --git a/packages/editor/src/i18n/locales/fr/messages.po b/packages/editor/src/i18n/locales/fr/messages.po index 42ea155cfd..b4d494c9d9 100644 --- a/packages/editor/src/i18n/locales/fr/messages.po +++ b/packages/editor/src/i18n/locales/fr/messages.po @@ -23,1205 +23,7345 @@ msgstr "" msgid "app.appShell.pascalHome" msgstr "Accueil Pascal" -# Source-Hash: 2ee62be78ba76f53 +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "All projects" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.allProjects" -msgstr "Tous les projets" +msgid "app.buildTab.addGate" +msgstr "Ajouter un portail" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Open Passage" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.preview" -msgstr "Aperçu" +msgid "app.buildTab.addOpenPassage" +msgstr "Ajouter un passage" -# Source-Hash: 9f2cbc9214c8f7b0 +# Source-Hash: 9a4d56454dc89966 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Project name" -#: apps/editor/components/editor-navbar.tsx +# English: "Add to rooms" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.projectName" -msgstr "Nom du projet" +msgid "app.buildTab.addToRooms" +msgstr "Ajouter aux pièces" -# Source-Hash: 150e143a84240eee +# Source-Hash: a17210912addc85f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rename project" -#: apps/editor/components/editor-navbar.tsx +# English: "← All build tools" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.renameProject" -msgstr "Renommer le projet" +msgid "app.buildTab.allBuildTools" +msgstr "← Tous les outils de construction" -# Source-Hash: 331e1584943b09b9 +# Source-Hash: 6b63404967e1d5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share" -#: apps/editor/components/editor-navbar.tsx +# English: "Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.share" -msgstr "Partager" +msgid "app.buildTab.chooseGateOrOpenPassageThen" +msgstr "Choisissez Portail ou Passage, puis cliquez sur sa position sur une clôture. Les portails et ouvertures placés se trouvent sous leur clôture dans le graphe de scène." -# Source-Hash: 703e1b4b9b715d3b +# Source-Hash: 8fd051e1e1a6c1a1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Anyone with the link can view this project. They cannot edit it." -#: apps/editor/components/share-panel.tsx +# English: "Click a lineset to lay the line beside it." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.anyoneWithTheLinkCanView" -msgstr "Toute personne disposant du lien peut voir ce projet, sans pouvoir le modifier." +msgid "app.buildTab.clickALinesetToLayThe" +msgstr "Cliquez sur une liaison frigorifique pour poser la ligne à côté." -# Source-Hash: 07e04484867c17d3 +# Source-Hash: 7308869944020839 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copied" -#: apps/editor/components/share-panel.tsx +# English: "Double gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copied" -msgstr "Copié" +msgid "app.buildTab.doubleGate" +msgstr "Portail double" -# Source-Hash: 4f60d1e142affa9c +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copy" -#: apps/editor/components/share-panel.tsx +# English: "Features & extensions" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copy" -msgstr "Copier" +msgid "app.buildTab.featuresExtensions" +msgstr "Éléments et extensions" -# Source-Hash: 8ff50e1a9962a4db +# Source-Hash: b18788f1d889c1d0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not read the sharing state." -#: apps/editor/components/share-panel.tsx +# English: "Fence features" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotReadTheSharingState" -msgstr "Impossible de lire l’état du partage." +msgid "app.buildTab.fenceFeatures" +msgstr "Éléments de clôture" -# Source-Hash: 791e281338a51483 +# Source-Hash: 62803100bd6e7cc2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn off the public link." -#: apps/editor/components/share-panel.tsx +# English: "Follow lineset" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOffThePublic" -msgstr "Impossible de désactiver le lien public." +msgid "app.buildTab.followLineset" +msgstr "Suivre la liaison frigorifique" -# Source-Hash: 2c5ddecfd652ba63 +# Source-Hash: 4a479aa23542d766 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn on the public link." -#: apps/editor/components/share-panel.tsx +# English: "Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOnThePublic" -msgstr "Impossible d’activer le lien public." +msgid "app.buildTab.gate" +msgstr "Portail" -# Source-Hash: 15e49d4da8765318 +# Source-Hash: 54098b5ee574737a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed code" -#: apps/editor/components/share-panel.tsx +# English: "Gate style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedCode" -msgstr "Code d’intégration" +msgid "app.buildTab.gateStyle" +msgstr "Style de portail" -# Source-Hash: d4523c2d303f99b0 +# Source-Hash: 8fec7e969045a8e7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed link" -#: apps/editor/components/share-panel.tsx +# English: "Horizontal boards" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedLink" -msgstr "Lien d’intégration" +msgid "app.buildTab.horizontalBoards" +msgstr "Lames horizontales" -# Source-Hash: 252f2cbf5e1609a5 +# Source-Hash: 09197c4fea516277 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Hide controls" -#: apps/editor/components/share-panel.tsx +# English: "Hover a fence to preview. Click to place. Esc cancels. Leave room between openings." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.hideControls" -msgstr "Masquer les commandes" +msgid "app.buildTab.hoverAFenceToPreviewClick" +msgstr "Survolez une clôture pour prévisualiser. Cliquez pour placer. Échap pour annuler. Laissez de l’espace entre les ouvertures." -# Source-Hash: ba77c0610a63bb2b +# Source-Hash: c390ba248e629b9e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Link" -#: apps/editor/components/share-panel.tsx +# English: "Leaves" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.link" -msgstr "Lien" +msgid "app.buildTab.leaves" +msgstr "Vantaux" -# Source-Hash: a2560430aaec31d9 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Only the 3D view, no header or toolbar." -#: apps/editor/components/share-panel.tsx +# English: "Liquid Line" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.onlyThe3dViewNoHeader" -msgstr "Uniquement la vue 3D, sans en-tête ni barre d’outils." +msgid "app.buildTab.liquidLine" +msgstr "Ligne liquide" -# Source-Hash: 3e52f04f92e08070 +# Source-Hash: c15c1af69ec5c1eb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Open" -#: apps/editor/components/share-panel.tsx +# English: "Match fence style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.open" -msgstr "Ouvrir" +msgid "app.buildTab.matchFenceStyle" +msgstr "Assortir au style de clôture" -# Source-Hash: b34faaa5378056c6 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Public link" -#: apps/editor/components/share-panel.tsx +# English: "MEP" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.publicLink" -msgstr "Lien public" +msgid "app.buildTab.mep" +msgstr "CVC-P" -# Source-Hash: 7525e8007fcab09b +# Source-Hash: 50accd740fa2e736 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share project" -#: apps/editor/components/share-panel.tsx +# English: "Off" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.shareProject" -msgstr "Partager le projet" +msgid "app.buildTab.off" +msgstr "Désactivé" -# Source-Hash: 3d3f438d5a49eba7 +# Source-Hash: 9cc01faad79c28da # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Automatic dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "On" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.automaticDimensions" -msgstr "Cotes automatiques" +msgid "app.buildTab.on" +msgstr "Activé" -# Source-Hash: 14622745dbf93f4c +# Source-Hash: e04298381837252f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Camera" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.camera" -msgstr "Caméra" +msgid "app.buildTab.opening" +msgstr "Ouverture" -# Source-Hash: e6bce525c47ba3ac +# Source-Hash: 9514d3c022e68808 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Clean plan; dimensions appear with selection" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening width (m)" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" -msgstr "Plan épuré ; les cotes apparaissent à la sélection" +msgid "app.buildTab.openingWidthM" +msgstr "Largeur de l’ouverture (m)" -# Source-Hash: 61ce356577cfb04a +# Source-Hash: 6b108fb1d0eb8f9d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Collapse sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Open rails" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.collapseSidebar" -msgstr "Réduire la barre latérale" +msgid "app.buildTab.openRails" +msgstr "Lisses ajourées" -# Source-Hash: 2416a48df28d6205 +# Source-Hash: a5a7af5e5fff1c81 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Crisp, opaque edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Outdoor" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.crispOpaqueEdgeLines" -msgstr "Arêtes nettes et opaques" +msgid "app.buildTab.outdoor" +msgstr "Extérieur" -# Source-Hash: 4da8b3678ed77b45 +# Source-Hash: 9295ddc2805b21e2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Cutaway" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Picket" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cutaway" -msgstr "Coupe" +msgid "app.buildTab.picket" +msgstr "Piquets" -# Source-Hash: 4ca0e0e73229540c +# Source-Hash: 3a08ede9e51d5395 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof type" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.default" -msgstr "Par défaut" +msgid "app.buildTab.roofType" +msgstr "Type de toit" -# Source-Hash: a313661ef9dd0a65 +# Source-Hash: 0f9daa442776a317 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rooms already create their floor and ceiling. Use these for platforms and one-off structure." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.display" -msgstr "Affichage" +msgid "app.buildTab.roomsAlreadyCreateTheirFloorAnd" +msgstr "Les pièces créent déjà leur sol et leur plafond. Utilisez ces outils pour les plateformes et les structures ponctuelles." -# Source-Hash: d0db46f206a88e2e +# Source-Hash: fc79fd0c7730de76 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display settings" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search build tools and kitchen items" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.displaySettings" -msgstr "Paramètres d’affichage" +msgid "app.buildTab.searchBuildToolsAndKitchenItems" +msgstr "Rechercher des outils de construction et des éléments de cuisine" -# Source-Hash: 0286962ab8e9cfcd +# Source-Hash: dc1901f276edca6f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Door/window marks" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search tools, fridge, sink…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.doorWindowMarks" -msgstr "Repères de portes et fenêtres" +msgid "app.buildTab.searchToolsFridgeSink" +msgstr "Rechercher des outils, frigo, évier…" -# Source-Hash: 027bbc8b7287c06a +# Source-Hash: 9558db89023d4f05 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Edges" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select a curved wall to match its radius and arc." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.edges" -msgstr "Arêtes" +msgid "app.buildTab.selectACurvedWallToMatch" +msgstr "Sélectionnez un mur courbe pour reprendre son rayon et son arc." -# Source-Hash: d86126c5d16c6238 +# Source-Hash: d327097d9ac1099f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Enter VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Single gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.enterVr" -msgstr "Entrer en VR" +msgid "app.buildTab.singleGate" +msgstr "Portail simple" -# Source-Hash: eb99fb0b382e58cd +# Source-Hash: 99acd5128c51c8a7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exit VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab, ceiling, column…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exitVr" -msgstr "Quitter la VR" +msgid "app.buildTab.slabCeilingColumn" +msgstr "Dalle, plafond, poteau…" -# Source-Hash: aeac665749d3101d +# Source-Hash: af6f8885fe0fa4e9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expand sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Solid privacy" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expandSidebar" -msgstr "Développer la barre latérale" +msgid "app.buildTab.solidPrivacy" +msgstr "Occultant plein" -# Source-Hash: 08c178ee733ff009 +# Source-Hash: e2b1a3bb9630b33b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expert" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Trace a line alongside an existing lineset (F)." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expert" -msgstr "Expert" +msgid "app.buildTab.traceALineAlongsideAnExisting" +msgstr "Tracer une ligne le long d’une liaison existante (F)." -# Source-Hash: be12f8788f1f0a05 +# Source-Hash: eba3df14a2de0812 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exploded" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Vertical slats" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exploded" -msgstr "Éclatée" +msgid "app.buildTab.verticalSlats" +msgstr "Lames verticales" -# Source-Hash: c6f865a366ef5755 +# Source-Hash: 2ee62be78ba76f53 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Face of stud" -#: apps/editor/components/viewer-toolbar.tsx +# English: "All projects" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faceOfStud" -msgstr "Nu de l’ossature" +msgid "app.editorNavbar.allProjects" +msgstr "Tous les projets" -# Source-Hash: 0c583f1d4201293b +# Source-Hash: 20226b68d5467072 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Faint outline of major creases" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Preview" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faintOutlineOfMajorCreases" -msgstr "Contour léger des arêtes principales" +msgid "app.editorNavbar.preview" +msgstr "Aperçu" -# Source-Hash: 08ecd5878b08139d +# Source-Hash: 9f2cbc9214c8f7b0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Feet & inches" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Project name" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.feetInches" -msgstr "Pieds et pouces" +msgid "app.editorNavbar.projectName" +msgstr "Nom du projet" -# Source-Hash: 43b8017fa821c46c +# Source-Hash: 150e143a84240eee # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Finished faces" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rename project" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.finishedFaces" -msgstr "Faces finies" +msgid "app.editorNavbar.renameProject" +msgstr "Renommer le projet" -# Source-Hash: 8827df1cdeb02ed9 +# Source-Hash: 331e1584943b09b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Flat and fast — no ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Share" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" -msgstr "Plat et rapide — sans occlusion ambiante" +msgid "app.editorNavbar.share" +msgstr "Partager" -# Source-Hash: 060a718cdcff61b3 +# Source-Hash: 4b2f676fb4c9ec63 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add {label}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanAnnotations" -msgstr "Annotations du plan d’étage" +msgid "app.kitchenBrowser.addLabel" +msgstr "Ajouter {label}" -# Source-Hash: 483171f79dc32ae5 +# Source-Hash: 53f98cc505aacbb1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add to kitchen" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanMode" -msgstr "Mode plan d’étage" +msgid "app.kitchenBrowser.addToKitchen" +msgstr "Ajouter à la cuisine" -# Source-Hash: 8bb9e54fc786ca77 +# Source-Hash: 923a2e81dcc77852 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Choose an item, then click to place it. Appliances include their cabinetry." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullAmbientOcclusion" -msgstr "Occlusion ambiante complète" +msgid "app.kitchenBrowser.chooseAnItemThenClickTo" +msgstr "Choisissez un élément, puis cliquez pour le placer. L’électroménager inclut ses meubles." -# Source-Hash: 91fd3544d9ce16bf +# Source-Hash: 44156a2c888e8a4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full documentation and annotation controls" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find in this project · {length}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" -msgstr "Documentation et annotations complètes" +msgid "app.kitchenBrowser.findInThisProjectLength" +msgstr "Rechercher dans ce projet · {length}" -# Source-Hash: 131bac2467f4fdf6 +# Source-Hash: aeda65db67edac21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full height" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find {name}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullHeight" -msgstr "Pleine hauteur" +msgid "app.kitchenBrowser.findName" +msgstr "Trouver {name}" -# Source-Hash: c9838bc98cb35125 +# Source-Hash: c1d847411ba09cd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full wall thickness" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · Add" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullWallThickness" -msgstr "Épaisseur totale du mur" +msgid "app.kitchenBrowser.groupAdd" +msgstr "Cuisine · Ajouter" -# Source-Hash: 7e4a0a38f694be6b +# Source-Hash: bb3f4f8d3407c409 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Grid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · In this project" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.grid" -msgstr "Grille" +msgid "app.kitchenBrowser.groupInThisProject" +msgstr "Cuisine · Dans ce projet" -# Source-Hash: 4bf4a6861d7d633e +# Source-Hash: 25ffad31086309f1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Levels: {mode}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen cabinet" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.levelsMode" -msgstr "Niveaux : {mode}" +msgid "app.kitchenBrowser.kitchenCabinet" +msgstr "Meuble de cuisine" -# Source-Hash: 803532407fb5962b +# Source-Hash: a5af7817a7e8947d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Low" -#: apps/editor/components/viewer-toolbar.tsx +# English: "No matching kitchen items placed yet." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.low" -msgstr "Bas" +msgid "app.kitchenBrowser.noMatchingKitchenItemsPlacedYet" +msgstr "Aucun élément de cuisine correspondant placé pour l’instant." -# Source-Hash: 32f9a404c0bdce10 +# Source-Hash: 640155f99c25773b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Magnetic snap" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select and show in scene" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.magneticSnap" -msgstr "Aimantation" +msgid "app.kitchenBrowser.selectAndShowInScene" +msgstr "Sélectionner et afficher dans la scène" -# Source-Hash: 387082cd5f118bed +# Source-Hash: 4275c05172abd7fb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Ceiling" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manual" -msgstr "Manuel" +msgid "app.lib.buildPalette.ceiling" +msgstr "Plafond" -# Source-Hash: 2fb69122dd996c0a +# Source-Hash: 3530ac1f4046cd22 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Column" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manualDimensions" -msgstr "Cotes manuelles" +msgid "app.lib.buildPalette.column" +msgstr "Poteau" -# Source-Hash: c6aa74075f37313a +# Source-Hash: 787e10f5db16904e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Door" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.measurements" -msgstr "Mesures" +msgid "app.lib.buildPalette.door" +msgstr "Porte" -# Source-Hash: 0a39470be3b84536 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Meters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.meters" -msgstr "Mètres" +msgid "app.lib.buildPalette.duct" +msgstr "Gaine" -# Source-Hash: 83cce6c521e71d01 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Millimeters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.millimeters" -msgstr "Millimètres" +msgid "app.lib.buildPalette.dwvPipe" +msgstr "Tuyau d’évacuation" -# Source-Hash: b784527bb90b9c5e +# Source-Hash: ab5cbab7be160a1c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Elevator" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.n3dMeasurements" -msgstr "Mesures 3D" +msgid "app.lib.buildPalette.elevator" +msgstr "Ascenseur" -# Source-Hash: 4ff58913a4492199 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "No edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.noEdgeLines" -msgstr "Aucune arête" +msgid "app.lib.buildPalette.fence" +msgstr "Clôture" -# Source-Hash: 50accd740fa2e736 +# Source-Hash: 3bf1c1a8dbb93743 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Off" -#: apps/editor/components/viewer-toolbar.tsx +# English: "HVAC Unit" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.off" -msgstr "Désactivé" +msgid "app.lib.buildPalette.hvacUnit" +msgstr "Unité CVC" -# Source-Hash: 9cc01faad79c28da +# Source-Hash: 1176d2568d093bf1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "On" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.on" -msgstr "Activé" +msgid "app.lib.buildPalette.kitchen" +msgstr "Cuisine" -# Source-Hash: ed59dd8ce7797a66 +# Source-Hash: 362b03eba9d8234c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Orthographic" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Lineset" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.orthographic" -msgstr "Orthographique" +msgid "app.lib.buildPalette.lineset" +msgstr "Liaison frigorifique" -# Source-Hash: 316e25993ff72b88 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Perspective" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Liquid Line" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.perspective" -msgstr "Perspective" +msgid "app.lib.buildPalette.liquidLine" +msgstr "Ligne liquide" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/viewer-toolbar.tsx +# English: "MEP" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.preview" -msgstr "Aperçu" +msgid "app.lib.buildPalette.mep" +msgstr "CVC-P" -# Source-Hash: 34c20b72a42ca618 +# Source-Hash: 161e5386b939e1bc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Register" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.previewMode" -msgstr "Mode aperçu" +msgid "app.lib.buildPalette.register" +msgstr "Bouche" -# Source-Hash: 5e58af99d6d4fa6a +# Source-Hash: f5f730969df63d1d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Render" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.render" -msgstr "Rendu" +msgid "app.lib.buildPalette.roof" +msgstr "Toit" -# Source-Hash: f363702a10aedaeb +# Source-Hash: d7145f84f8e0e3fe # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rendered" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Shelf" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.rendered" -msgstr "Rendu" +msgid "app.lib.buildPalette.shelf" +msgstr "Étagère" -# Source-Hash: 4959d5538efc595c +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Room labels" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.roomLabels" -msgstr "Étiquettes des pièces" +msgid "app.lib.buildPalette.slab" +msgstr "Dalle" -# Source-Hash: 82720864e5034398 +# Source-Hash: 95e8af5d2b3ca73d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Scene theme" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Spawn point" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.sceneTheme" -msgstr "Thème de la scène" +msgid "app.lib.buildPalette.spawnPoint" +msgstr "Point d’apparition" -# Source-Hash: 4c6bcb30b40047fc +# Source-Hash: f05bc67c57e4d530 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Shadows" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Stairs" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.shadows" -msgstr "Ombres" +msgid "app.lib.buildPalette.stairs" +msgstr "Escalier" -# Source-Hash: 59dc62417b44931d +# Source-Hash: 96281876ce53ba08 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Single wall axis" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrace" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.singleWallAxis" -msgstr "Axe unique du mur" +msgid "app.lib.buildPalette.terrace" +msgstr "Terrasse" -# Source-Hash: d266d83ec490df4e +# Source-Hash: d457508edd5bb8cf # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Soft" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrain" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.soft" -msgstr "Douces" +msgid "app.lib.buildPalette.terrain" +msgstr "Terrain" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Wall" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solid" -msgstr "Plein" +msgid "app.lib.buildPalette.wall" +msgstr "Mur" -# Source-Hash: e9f59b513f2f45ac +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solo" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Window" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solo" -msgstr "Isolé" +msgid "app.lib.buildPalette.window" +msgstr "Fenêtre" -# Source-Hash: 481b7608ce12139b +# Source-Hash: d40c50013043284f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stack" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Fitting" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stack" -msgstr "Empilé" +msgid "app.lib.buildPanelModel.addFitting" +msgstr "Ajouter un raccord" -# Source-Hash: 61ad94ca68b0458e +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stair annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Gate" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stairAnnotations" -msgstr "Annotations d’escalier" +msgid "app.lib.buildPanelModel.addGate" +msgstr "Ajouter un portail" -# Source-Hash: f82927a01d4c5e45 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Strong" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Open Passage" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.strong" -msgstr "Marquées" +msgid "app.lib.buildPanelModel.addOpenPassage" +msgstr "Ajouter un passage" -# Source-Hash: e1be031e67d95382 +# Source-Hash: 7136b5836de6e69f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural core face" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Trap" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralCoreFace" -msgstr "Nu du noyau structurel" +msgid "app.lib.buildPanelModel.addTrap" +msgstr "Ajouter un siphon" -# Source-Hash: efc50964d7b0ec47 +# Source-Hash: 8f4b2028ad75465d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural grids & column centers" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Build" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralGridsColumnCenters" -msgstr "Trames structurelles et axes des poteaux" +msgid "app.lib.buildPanelModel.build" +msgstr "Construire" -# Source-Hash: 5ce4f6b80cd30f86 +# Source-Hash: a23831beeb35ad3a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Translucent" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Create from" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.translucent" -msgstr "Translucide" +msgid "app.lib.buildPanelModel.createFrom" +msgstr "Créer à partir de" -# Source-Hash: b404dded35241274 +# Source-Hash: 8146c309bd8326f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Units" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Draw the roof footprint with two corner clicks." +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.units" -msgstr "Unités" +msgid "app.lib.buildPanelModel.drawTheRoofFootprintWithTwo" +msgstr "Tracez l’emprise du toit en cliquant deux angles." -# Source-Hash: faf51e28b748e0d9 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walkthrough" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.walkthrough" -msgstr "Visite" +msgid "app.lib.buildPanelModel.duct" +msgstr "Gaine" -# Source-Hash: 62281975e51da7e3 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall centerline" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallCenterline" -msgstr "Axe du mur" +msgid "app.lib.buildPanelModel.dwvPipe" +msgstr "Tuyau d’évacuation" -# Source-Hash: ff145d7003118ec6 +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Features & extensions" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallDimensions" -msgstr "Cotes des murs" +msgid "app.lib.buildPanelModel.featuresExtensions" +msgstr "Éléments et extensions" -# Source-Hash: 13969d1d6e310aa4 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walls: {label}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallsLabel" -msgstr "Murs : {label}" +msgid "app.lib.buildPanelModel.fence" +msgstr "Clôture" -# Source-Hash: 8caa959c0ae800c3 -# Review: human -# English: "Basement" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basement" -msgstr "Sous-sol" +# Source-Hash: 62803100bd6e7cc2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow lineset" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.followLineset" +msgstr "Suivre la liaison frigorifique" -# Source-Hash: 14927085ee91ba05 -# Review: human -# English: "Basement {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basementNumber" -msgstr "Sous-sol {number}" +# Source-Hash: c80972ec078ac551 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gates & openings" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.gatesOpenings" +msgstr "Portails et ouvertures" -# Source-Hash: e59074a7b9b3f56e -# Review: human -# English: "Floor {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.floorNumber" -msgstr "Étage {number}" +# Source-Hash: 3720347aa16ee777 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a room to preview its boundary, then click to place." +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.hoverARoomToPreviewIts" +msgstr "Survolez une pièce pour prévisualiser son contour, puis cliquez pour placer." -# Source-Hash: cde3efc9b7ddfa41 -# Review: human -# English: "Ground floor" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.groundFloor" -msgstr "Rez-de-chaussée" +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.kitchen" +msgstr "Cuisine" -# Source-Hash: f571cb2d06ae01ae -# Review: human -# English: "Advanced" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.advanced" -msgstr "Avancé" +# Source-Hash: 95057eef5cd69340 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "MEP" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.mep" +msgstr "CVC-P" -# Source-Hash: fb40866c2d6db5fb -# Review: human -# English: "walls · floor · ceiling" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.hint" -msgstr "murs · sol · plafond" +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.modularCabinet" +msgstr "Meuble modulaire" -# Source-Hash: 271039bd919dc4c1 -# Review: human -# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.idle" -msgstr "Choisissez une forme pour commencer. Chaque pièce crée ses murs, son sol et son plafond." +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.off" +msgstr "Désactivé" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.on" +msgstr "Activé" + +# Source-Hash: 3fafdc69e7756f19 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Painting" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.painting" +msgstr "Peinture" + +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roof" +msgstr "Toit" + +# Source-Hash: 3a08ede9e51d5395 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof type" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roofType" +msgstr "Type de toit" + +# Source-Hash: 0c35bee851cc57a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# tool} other {# tools}}" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.toolCount" +msgstr "{count, plural, one {# outil} many {# outils} other {# outils}}" + +# Source-Hash: 3241ecabee8221a1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Conical" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.conical" +msgstr "Conique" + +# Source-Hash: b5c56dd8c68de309 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.draw" +msgstr "Dessiner" + +# Source-Hash: 6949d667043bee0b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dutch" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.dutch" +msgstr "Demi-croupe" + +# Source-Hash: 9cab4d4c95f63cdd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.flat" +msgstr "Plat" + +# Source-Hash: deaffa095d126dfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gable" +msgstr "Deux pans" + +# Source-Hash: 7f53d9ffca39984a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gambrel" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gambrel" +msgstr "Brisé" + +# Source-Hash: 9eda0ea8d447066d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hip" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.hip" +msgstr "Croupe" + +# Source-Hash: 7f7bb0e875af3260 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mansard" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.mansard" +msgstr "Mansarde" + +# Source-Hash: 612dcd5bf06a79c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.room" +msgstr "Pièce" + +# Source-Hash: c8d0df27faa3feaa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shed" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.shed" +msgstr "Appentis" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.wall" +msgstr "Mur" + +# Source-Hash: 703e1b4b9b715d3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Anyone with the link can view this project. They cannot edit it." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.anyoneWithTheLinkCanView" +msgstr "Toute personne disposant du lien peut voir ce projet, sans pouvoir le modifier." + +# Source-Hash: 07e04484867c17d3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copied" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copied" +msgstr "Copié" + +# Source-Hash: 4f60d1e142affa9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copy" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copy" +msgstr "Copier" + +# Source-Hash: 8ff50e1a9962a4db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not read the sharing state." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotReadTheSharingState" +msgstr "Impossible de lire l’état du partage." + +# Source-Hash: 791e281338a51483 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn off the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOffThePublic" +msgstr "Impossible de désactiver le lien public." + +# Source-Hash: 2c5ddecfd652ba63 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn on the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOnThePublic" +msgstr "Impossible d’activer le lien public." + +# Source-Hash: 15e49d4da8765318 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed code" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedCode" +msgstr "Code d’intégration" + +# Source-Hash: d4523c2d303f99b0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedLink" +msgstr "Lien d’intégration" + +# Source-Hash: 252f2cbf5e1609a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide controls" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.hideControls" +msgstr "Masquer les commandes" + +# Source-Hash: ba77c0610a63bb2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.link" +msgstr "Lien" + +# Source-Hash: a2560430aaec31d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Only the 3D view, no header or toolbar." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.onlyThe3dViewNoHeader" +msgstr "Uniquement la vue 3D, sans en-tête ni barre d’outils." + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.open" +msgstr "Ouvrir" + +# Source-Hash: b34faaa5378056c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Public link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.publicLink" +msgstr "Lien public" + +# Source-Hash: 7525e8007fcab09b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Share project" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.shareProject" +msgstr "Partager le projet" + +# Source-Hash: 3d3f438d5a49eba7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Automatic dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.automaticDimensions" +msgstr "Cotes automatiques" + +# Source-Hash: 14622745dbf93f4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.camera" +msgstr "Caméra" + +# Source-Hash: e6bce525c47ba3ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clean plan; dimensions appear with selection" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" +msgstr "Plan épuré ; les cotes apparaissent à la sélection" + +# Source-Hash: 61ce356577cfb04a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Collapse sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.collapseSidebar" +msgstr "Réduire la barre latérale" + +# Source-Hash: 2416a48df28d6205 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Crisp, opaque edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.crispOpaqueEdgeLines" +msgstr "Arêtes nettes et opaques" + +# Source-Hash: 4da8b3678ed77b45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cutaway" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cutaway" +msgstr "Coupe" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.default" +msgstr "Par défaut" + +# Source-Hash: a313661ef9dd0a65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.display" +msgstr "Affichage" + +# Source-Hash: d0db46f206a88e2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display settings" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.displaySettings" +msgstr "Paramètres d’affichage" + +# Source-Hash: 0286962ab8e9cfcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door/window marks" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.doorWindowMarks" +msgstr "Repères de portes et fenêtres" + +# Source-Hash: 027bbc8b7287c06a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edges" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.edges" +msgstr "Arêtes" + +# Source-Hash: d86126c5d16c6238 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.enterVr" +msgstr "Entrer en VR" + +# Source-Hash: eb99fb0b382e58cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exitVr" +msgstr "Quitter la VR" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expandSidebar" +msgstr "Développer la barre latérale" + +# Source-Hash: 08c178ee733ff009 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expert" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expert" +msgstr "Expert" + +# Source-Hash: be12f8788f1f0a05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exploded" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exploded" +msgstr "Éclatée" + +# Source-Hash: c6f865a366ef5755 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Face of stud" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faceOfStud" +msgstr "Nu de l’ossature" + +# Source-Hash: 0c583f1d4201293b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Faint outline of major creases" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faintOutlineOfMajorCreases" +msgstr "Contour léger des arêtes principales" + +# Source-Hash: 08ecd5878b08139d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Feet & inches" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.feetInches" +msgstr "Pieds et pouces" + +# Source-Hash: 43b8017fa821c46c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finished faces" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.finishedFaces" +msgstr "Faces finies" + +# Source-Hash: 8827df1cdeb02ed9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat and fast — no ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" +msgstr "Plat et rapide — sans occlusion ambiante" + +# Source-Hash: 060a718cdcff61b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanAnnotations" +msgstr "Annotations du plan d’étage" + +# Source-Hash: 483171f79dc32ae5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanMode" +msgstr "Mode plan d’étage" + +# Source-Hash: 8bb9e54fc786ca77 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullAmbientOcclusion" +msgstr "Occlusion ambiante complète" + +# Source-Hash: 91fd3544d9ce16bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full documentation and annotation controls" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" +msgstr "Documentation et annotations complètes" + +# Source-Hash: 131bac2467f4fdf6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full height" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullHeight" +msgstr "Pleine hauteur" + +# Source-Hash: c9838bc98cb35125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full wall thickness" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullWallThickness" +msgstr "Épaisseur totale du mur" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.grid" +msgstr "Grille" + +# Source-Hash: 4bf4a6861d7d633e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Levels: {mode}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.levelsMode" +msgstr "Niveaux : {mode}" + +# Source-Hash: 803532407fb5962b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.low" +msgstr "Bas" + +# Source-Hash: 32f9a404c0bdce10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Magnetic snap" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.magneticSnap" +msgstr "Aimantation" + +# Source-Hash: 387082cd5f118bed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manual" +msgstr "Manuel" + +# Source-Hash: 2fb69122dd996c0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manualDimensions" +msgstr "Cotes manuelles" + +# Source-Hash: c6aa74075f37313a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.measurements" +msgstr "Mesures" + +# Source-Hash: 0a39470be3b84536 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Meters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.meters" +msgstr "Mètres" + +# Source-Hash: 83cce6c521e71d01 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Millimeters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.millimeters" +msgstr "Millimètres" + +# Source-Hash: b784527bb90b9c5e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.n3dMeasurements" +msgstr "Mesures 3D" + +# Source-Hash: 4ff58913a4492199 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.noEdgeLines" +msgstr "Aucune arête" + +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.off" +msgstr "Désactivé" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.on" +msgstr "Activé" + +# Source-Hash: ed59dd8ce7797a66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orthographic" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.orthographic" +msgstr "Orthographique" + +# Source-Hash: 316e25993ff72b88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perspective" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.perspective" +msgstr "Perspective" + +# Source-Hash: 20226b68d5467072 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.preview" +msgstr "Aperçu" + +# Source-Hash: 34c20b72a42ca618 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.previewMode" +msgstr "Mode aperçu" + +# Source-Hash: 5e58af99d6d4fa6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Render" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.render" +msgstr "Rendu" + +# Source-Hash: f363702a10aedaeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rendered" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.rendered" +msgstr "Rendu" + +# Source-Hash: 4959d5538efc595c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room labels" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.roomLabels" +msgstr "Étiquettes des pièces" + +# Source-Hash: 82720864e5034398 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scene theme" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.sceneTheme" +msgstr "Thème de la scène" + +# Source-Hash: 4c6bcb30b40047fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shadows" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.shadows" +msgstr "Ombres" + +# Source-Hash: 59dc62417b44931d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single wall axis" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.singleWallAxis" +msgstr "Axe unique du mur" + +# Source-Hash: d266d83ec490df4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Soft" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.soft" +msgstr "Douces" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solid" +msgstr "Plein" + +# Source-Hash: e9f59b513f2f45ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solo" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solo" +msgstr "Isolé" + +# Source-Hash: 481b7608ce12139b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stack" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stack" +msgstr "Empilé" + +# Source-Hash: 61ad94ca68b0458e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stair annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stairAnnotations" +msgstr "Annotations d’escalier" + +# Source-Hash: f82927a01d4c5e45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Strong" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.strong" +msgstr "Marquées" + +# Source-Hash: e1be031e67d95382 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural core face" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralCoreFace" +msgstr "Nu du noyau structurel" + +# Source-Hash: efc50964d7b0ec47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural grids & column centers" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralGridsColumnCenters" +msgstr "Trames structurelles et axes des poteaux" + +# Source-Hash: 5ce4f6b80cd30f86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Translucent" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.translucent" +msgstr "Translucide" + +# Source-Hash: b404dded35241274 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Units" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.units" +msgstr "Unités" + +# Source-Hash: faf51e28b748e0d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walkthrough" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.walkthrough" +msgstr "Visite" + +# Source-Hash: 62281975e51da7e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall centerline" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallCenterline" +msgstr "Axe du mur" + +# Source-Hash: ff145d7003118ec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallDimensions" +msgstr "Cotes des murs" + +# Source-Hash: 13969d1d6e310aa4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls: {label}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallsLabel" +msgstr "Murs : {label}" + +# Source-Hash: 8caa959c0ae800c3 +# Review: human +# English: "Basement" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basement" +msgstr "Sous-sol" + +# Source-Hash: 14927085ee91ba05 +# Review: human +# English: "Basement {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basementNumber" +msgstr "Sous-sol {number}" + +# Source-Hash: e59074a7b9b3f56e +# Review: human +# English: "Floor {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.floorNumber" +msgstr "Étage {number}" + +# Source-Hash: cde3efc9b7ddfa41 +# Review: human +# English: "Ground floor" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.groundFloor" +msgstr "Rez-de-chaussée" + +# Source-Hash: fdd8b3366021a1cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Left" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitLeft" +msgstr "Orbiter à gauche" + +# Source-Hash: 4a56359f284a3b17 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Right" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitRight" +msgstr "Orbiter à droite" + +# Source-Hash: f5c12d738240f889 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top View" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.topView" +msgstr "Vue de dessus" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.delete" +msgstr "Supprimer" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.select" +msgstr "Sélectionner" + +# Source-Hash: d9a257653600d5a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resume following" +#: packages/editor/src/components/ui/action-menu/follow-pascal-pill.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalPill.resumeFollowing" +msgstr "Reprendre le suivi" + +# Source-Hash: 4f073f8051cca3ef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: Off" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.off" +msgstr "Suivre Pascal : désactivé" + +# Source-Hash: 328ea04bb8cd12f4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: On" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.on" +msgstr "Suivre Pascal : activé" + +# Source-Hash: 7f4dcb90defe1ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Appliance" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.appliance" +msgstr "Électroménager" + +# Source-Hash: 0655333424a8b6fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bathroom" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.bathroom" +msgstr "Salle de bain" + +# Source-Hash: ed68e72f5353712b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furniture" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.furniture" +msgstr "Mobilier" + +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.kitchen" +msgstr "Cuisine" + +# Source-Hash: a5a7af5e5fff1c81 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outdoor" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.outdoor" +msgstr "Extérieur" + +# Source-Hash: c69865ec5d9d1ac9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angle" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angle" +msgstr "Angle" + +# Source-Hash: 622f566fe1e3d8e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angular dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angularDimension" +msgstr "Cote angulaire" + +# Source-Hash: 7e3b0d541355305e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Arc length" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.arcLength" +msgstr "Longueur d’arc" + +# Source-Hash: 8332ab41e22958f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Area" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.area" +msgstr "Surface" + +# Source-Hash: 88c7750ed51d47a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center mark" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.centerMark" +msgstr "Repère de centre" + +# Source-Hash: 634912dabb092872 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chord dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.chordDimension" +msgstr "Cote de corde" + +# Source-Hash: 3cb090120253f68f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.continuousDimension" +msgstr "Cote continue" + +# Source-Hash: fb91b1d43b8362d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Coordinate dimensions" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.coordinateDimensions" +msgstr "Cotes en coordonnées" + +# Source-Hash: 530cb7ea461e8298 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Diameter dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.diameterDimension" +msgstr "Cote de diamètre" + +# Source-Hash: fe7ddb094aa8ff4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Distance" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.distance" +msgstr "Distance" + +# Source-Hash: fee6203bb9046929 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.floorPlan" +msgstr "Plan d’étage" + +# Source-Hash: a73539fc472e2e12 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Linear dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.linearDimension" +msgstr "Cote linéaire" + +# Source-Hash: 6bba239f244c3d28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement options" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementOptions" +msgstr "Options de mesure" + +# Source-Hash: 2cf5ca9b834ce8d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement type" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementType" +msgstr "Type de mesure" + +# Source-Hash: 0431574a0e6d69d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measure: {selectedLabel}" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measureSelectedlabel" +msgstr "Mesure : {selectedLabel}" + +# Source-Hash: ac87e14dabd5a256 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perimeter" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.perimeter" +msgstr "Périmètre" + +# Source-Hash: 6c9acc0589bdd4d6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Radius dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.radiusDimension" +msgstr "Cote de rayon" + +# Source-Hash: 01b0015e4e176124 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.smart" +msgstr "Intelligente" + +# Source-Hash: 429bd43d726de417 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Volume" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.volume" +msgstr "Volume" + +# Source-Hash: 64f3eb5e1936906d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAsk" +msgstr "Pointer et demander" + +# Source-Hash: d86d31e83f6f0888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask (C)" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskC" +msgstr "Pointer et demander (C)" + +# Source-Hash: 65622d2ef53c1f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask works in the 3D view" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskWorksInThe" +msgstr "Pointer et demander fonctionne dans la vue 3D" + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ceiling" +msgstr "Plafond" + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.column" +msgstr "Poteau" + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.door" +msgstr "Porte" + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.duct" +msgstr "Gaine" + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ductFitting" +msgstr "Raccord de gaine" + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.dwvPipe" +msgstr "Tuyau d’évacuation" + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.elevator" +msgstr "Ascenseur" + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.fence" +msgstr "Clôture" + +# Source-Hash: 7f4d93d5f2083844 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable Roof" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.gableRoof" +msgstr "Toit à deux pans" + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.hvacUnit" +msgstr "Unité CVC" + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.lineset" +msgstr "Liaison frigorifique" + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.liquidLine" +msgstr "Ligne liquide" + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.pipeFitting" +msgstr "Raccord de tuyau" + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.register" +msgstr "Bouche" + +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.shelf" +msgstr "Étagère" + +# Source-Hash: 8775bc8dc9593964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slab" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.slab" +msgstr "Dalle" + +# Source-Hash: 3e2f6b4274f592c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Spawn Point" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.spawnPoint" +msgstr "Point d’apparition" + +# Source-Hash: f05bc67c57e4d530 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stairs" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.stairs" +msgstr "Escalier" + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.trap" +msgstr "Siphon" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.wall" +msgstr "Mur" + +# Source-Hash: aa3c35ed33e181e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.window" +msgstr "Fenêtre" + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.zone" +msgstr "Zone" + +# Source-Hash: 43af78ba61aaa8ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "below" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.below" +msgstr "en dessous" + +# Source-Hash: cdf3f12939ba108c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteGuideImage" +msgstr "Supprimer l’image guide" + +# Source-Hash: 6add06abbafa8289 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete scan" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteScan" +msgstr "Supprimer le relevé 3D" + +# Source-Hash: 6f5e541cb5fb502f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# guide image on this level} other {# guide images on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideCount" +msgstr "{count, plural, one {# image guide sur ce niveau} many {# images guides sur ce niveau} other {# images guides sur ce niveau}}" + +# Source-Hash: 8a832a2f33757bf8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageNumber" +msgstr "Image guide {number}" + +# Source-Hash: 7f3aaccfe8d1af1f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImages" +msgstr "Images guides" + +# Source-Hash: 9b1de02505434d74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageSettings" +msgstr "Réglages des images guides" + +# Source-Hash: 892d5dd34372028b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guides" +msgstr "Guides" + +# Source-Hash: ccfb05c78d47d6f9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesHidden" +msgstr "Guides : masqués" + +# Source-Hash: 6d7ca85c4f389991 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesVisible" +msgstr "Guides : visibles" + +# Source-Hash: 5f6264ac469f57c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideGuideImages" +msgstr "Masquer les images guides" + +# Source-Hash: cae234c23229c80b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideReferenceFloor" +msgstr "Masquer le niveau de référence" + +# Source-Hash: 469a8416de876e0e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideScans" +msgstr "Masquer les relevés 3D" + +# Source-Hash: 22a59ae72d8c9504 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No lower floor available." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.noLowerFloorAvailable" +msgstr "Aucun niveau inférieur disponible." + +# Source-Hash: 1c0b8a5503c5daeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Opacity" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.opacity" +msgstr "Opacité" + +# Source-Hash: 8bbd9bc90ac70a4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloor" +msgstr "Niveau de référence" + +# Source-Hash: 45493691a23c7690 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor: {selectedLevelName}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSelectedlevelname" +msgstr "Niveau de référence : {selectedLevelName}" + +# Source-Hash: 7178c7b5a4581367 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSettings" +msgstr "Réglages du niveau de référence" + +# Source-Hash: a52848021f822f5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.references" +msgstr "Références" + +# Source-Hash: e59c9eec7dbd6ba1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload GLB meshes as scan references or blueprint images as guide references." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesEmpty" +msgstr "Importez des maillages GLB comme relevés 3D de référence ou des plans en image comme guides." + +# Source-Hash: 3e73d06c3e96efba +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceSettings" +msgstr "Réglages des références" + +# Source-Hash: aa0df2c2f00672e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesHidden" +msgstr "Références : masquées" + +# Source-Hash: 9976708fc92bfa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesVisible" +msgstr "Références : visibles" + +# Source-Hash: 320a5f1ec012900b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser diagram" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.riserDiagram" +msgstr "Schéma des colonnes" + +# Source-Hash: 357b3d3eaf878a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# scan on this level} other {# scans on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanCount" +msgstr "{count, plural, one {# relevé 3D sur ce niveau} many {# relevés 3D sur ce niveau} other {# relevés 3D sur ce niveau}}" + +# Source-Hash: f09f12547484c888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanNumber" +msgstr "Relevé 3D {number}" + +# Source-Hash: 3260bfa69cca50e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scans" +msgstr "Relevés 3D" + +# Source-Hash: c9c52015095997e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanSettings" +msgstr "Réglages des relevés 3D" + +# Source-Hash: 60abc9f1a8aec65c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansHidden" +msgstr "Relevés 3D : masqués" + +# Source-Hash: 2d2ff119a7dd7911 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansVisible" +msgstr "Relevés 3D : visibles" + +# Source-Hash: 8211234b205fd9a6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showGuideImages" +msgstr "Afficher les images guides" + +# Source-Hash: 7786cae6acb04cfa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showReferenceFloor" +msgstr "Afficher le niveau de référence" + +# Source-Hash: 6066f0b6cff8a910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showScans" +msgstr "Afficher les relevés 3D" + +# Source-Hash: def6dff836767bda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload scan or guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.uploadScanOrGuideImage" +msgstr "Importer un relevé 3D ou une image guide" + +# Source-Hash: 6aee0962fc18c0f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back to home" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.backToHome" +msgstr "Retour à l’accueil" + +# Source-Hash: f571cb2d06ae01ae +# Review: human +# English: "Advanced" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.advanced" +msgstr "Avancé" + +# Source-Hash: fb40866c2d6db5fb +# Review: human +# English: "walls · floor · ceiling" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.hint" +msgstr "murs · sol · plafond" + +# Source-Hash: 271039bd919dc4c1 +# Review: human +# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.idle" +msgstr "Choisissez une forme pour commencer. Chaque pièce crée ses murs, son sol et son plafond." + +# Source-Hash: ae2800b6c9e2b6ed +# Review: human +# English: "{lead} then the first one again to close. For L-shapes and angled rooms." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.caption" +msgstr "{lead} puis de nouveau sur le premier pour fermer. Pour les pièces en L et les angles obliques." + +# Source-Hash: 4e186fc057733162 +# Review: human +# English: "Polygon" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.label" +msgstr "Polygone" + +# Source-Hash: 345e3aca3879b5c5 +# Review: human +# English: "Click each corner," +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.lead" +msgstr "Cliquez sur chaque angle," + +# Source-Hash: 8ec6152e139b0e3f +# Review: human +# English: "Polygon room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.title" +msgstr "Pièce polygonale" + +# Source-Hash: 9b46295eedcbedae +# Review: human +# English: "{lead} on the grid. Walls, floor and ceiling are created together." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.caption" +msgstr "{lead} sur la grille. Les murs, le sol et le plafond sont créés ensemble." + +# Source-Hash: 2c2c20272b0370cc +# Review: human +# English: "Rectangle" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.label" +msgstr "Rectangle" + +# Source-Hash: 060faa48e299d7c9 +# Review: human +# English: "Click two corners" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.lead" +msgstr "Cliquez sur deux angles" + +# Source-Hash: 83a45603ac7f41e8 +# Review: human +# English: "Rectangle room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.title" +msgstr "Pièce rectangulaire" + +# Source-Hash: 3e7408ed44676176 +# Review: human +# English: "Rooms" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.title" +msgstr "Pièces" + +# Source-Hash: 8a21a03c4acf396b +# Review: human +# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.caption" +msgstr "{lead} Fermez la boucle pour créer une pièce, ou laissez-la ouverte pour une cloison." + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.label" +msgstr "Murs" + +# Source-Hash: 9843edd68426fa2d +# Review: human +# English: "Draw one wall at a time." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.lead" +msgstr "Tracez un mur à la fois." + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.title" +msgstr "Murs" + +# Source-Hash: 1f3650da23603008 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraControlsHint" +msgstr "Aide sur les commandes de caméra" + +# Source-Hash: 101b6a54c377049a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pan" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.pan" +msgstr "Panoramique" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.rotate" +msgstr "Pivoter" + +# Source-Hash: 663cecc316eb91b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zoom" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.zoom" +msgstr "Zoom" + +# Source-Hash: a2bd204e93e90598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismiss" +msgstr "Fermer" + +# Source-Hash: 9222f970dce6cc60 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismissCameraControlsHint" +msgstr "Fermer l’aide sur les commandes de caméra" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.expandSidebar" +msgstr "Développer la barre latérale" + +# Source-Hash: dd86efcab72fc5c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis" +msgstr "Axe" + +# Source-Hash: 5232a826549f915e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⌥ axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis2" +msgstr "⌥ axe" + +# Source-Hash: 7001600001844c92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⚠ no equipment" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.noEquipment" +msgstr "⚠ aucun équipement" + +# Source-Hash: eae0194029f96edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# register} other {# registers}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.registerCount" +msgstr "{count, plural, one {# bouche} many {# bouches} other {# bouches}}" + +# Source-Hash: 8fb180251a321cef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R/T rotate" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.rTRotate" +msgstr "R/T pivoter" + +# Source-Hash: 3744cfc0c0329bfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# run} other {# runs}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.runCount" +msgstr "{count, plural, one {# tronçon} many {# tronçons} other {# tronçons}}" + +# Source-Hash: 88e6c2e1c344b2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "System" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.system" +msgstr "Système" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.cancel" +msgstr "Annuler" + +# Source-Hash: 4c6ca3441c74da9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place building" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.placeBuilding" +msgstr "Placer le bâtiment" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.rotate" +msgstr "Pivoter" + +# Source-Hash: 832470d3aeee82fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel placement" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.cancelPlacement" +msgstr "Annuler le placement" + +# Source-Hash: e374fcaee33c3e2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation — click or press C to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationClickOrPressCTo" +msgstr "Enchaînement — cliquez ou appuyez sur C pour changer" + +# Source-Hash: b108c7dc2ec2b9de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation: {label}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationLabel" +msgstr "Enchaînement : {label}" + +# Source-Hash: 729d87891cb7dbb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag to draw fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.dragToDrawFence" +msgstr "Faites glisser pour tracer la clôture" + +# Source-Hash: a4bdcbc6cab772bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence type — click or press T to switch between straight, curved and freehand" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT" +msgstr "Type de clôture — cliquez ou appuyez sur T pour passer de droite à courbe ou libre" + +# Source-Hash: 2a9ed258727078ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fewer shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fewerShortcuts" +msgstr "Moins de raccourcis" + +# Source-Hash: 698fa6e78af4d4b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish curve (or double-click)" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick" +msgstr "Terminer la courbe (ou double-clic)" + +# Source-Hash: 09f6d79edf5cfd16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridLength" +msgstr "Grille : {length}" + +# Source-Hash: c493b562040c4328 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step — click or tap Ctrl to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl" +msgstr "Pas de grille — cliquez ou appuyez sur Ctrl pour changer" + +# Source-Hash: d36a8c93d81b3a36 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepLength" +msgstr "Pas de grille : {length}" + +# Source-Hash: abea993ede7daa7e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a painted surface to erase" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase" +msgstr "Survolez une surface peinte pour l’effacer" + +# Source-Hash: fc1ed0ddc0cfcef5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPaint" +msgstr "Survolez une surface pour la peindre" + +# Source-Hash: 63dec5de4a337015 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to pick its material" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts" +msgstr "Survolez une surface pour prélever son matériau" + +# Source-Hash: 7ad6dc1b1f03f970 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.moreShortcuts" +msgstr "Plus de raccourcis" + +# Source-Hash: 69c1044e6ea87ccf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gate on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placeGateOnAFence" +msgstr "Placer le portail sur une clôture" + +# Source-Hash: 3754255b8affc7a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place passage on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placePassageOnAFence" +msgstr "Placer le passage sur une clôture" + +# Source-Hash: a8328c8964e947fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select a material to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.selectAMaterialToPaint" +msgstr "Choisissez un matériau à peindre" + +# Source-Hash: 6f95d7116aea5738 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Angles" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingAngles" +msgstr "Aimantation : angles" + +# Source-Hash: 2d6d8d85d2ebed47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Grid" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingGrid" +msgstr "Aimantation : grille" + +# Source-Hash: 9096c5f9d8ce0f7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Lines" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingLines" +msgstr "Aimantation : lignes" + +# Source-Hash: b663afbf0835cf32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping mode — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift" +msgstr "Mode d’aimantation — cliquez ou appuyez sur Maj pour changer" + +# Source-Hash: d00e984fc88f71aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Off" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingOff" +msgstr "Aimantation : désactivée" + +# Source-Hash: 6be9d0d312200761 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight continuation is unavailable for curved or freehand fences" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved" +msgstr "L’enchaînement droit n’est pas disponible pour les clôtures courbes ou libres" + +# Source-Hash: 0d56b1f0a0493302 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Continuous" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuous" +msgstr "Droite : continue" + +# Source-Hash: c034e85d3e7fd27e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight fence continuation — click or press C to toggle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress" +msgstr "Enchaînement de clôture droite — cliquez ou appuyez sur C pour basculer" + +# Source-Hash: e3f679cdb4a3d603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Single" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightSingle" +msgstr "Droite : simple" + +# Source-Hash: 83e56140165f2535 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{verb} scope — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.verbScopeClickOrPressShift" +msgstr "Portée : {verb} — cliquez ou appuyez sur Maj pour changer" + +# Source-Hash: 9a56d90d461b4bca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPoint" +msgstr "Ajouter un point" + +# Source-Hash: c3dc3918c823a5e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point · click the first to close" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPointClickTheFirstTo" +msgstr "Ajouter un point · cliquez sur le premier pour fermer" + +# Source-Hash: d8cf72d482d56cd7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Brush size" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.brushSize" +msgstr "Taille du pinceau" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancel" +msgstr "Annuler" + +# Source-Hash: 104fdab7934ec66c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel picking" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelPicking" +msgstr "Annuler la sélection" + +# Source-Hash: c318cf0ce70b8977 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel stroke" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelStroke" +msgstr "Annuler le tracé" + +# Source-Hash: 16552c2580bbe8b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Done" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.done" +msgstr "Terminé" + +# Source-Hash: e297db9ca0ce6d31 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the mezzanine" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheMezzanine" +msgstr "Dessiner la mezzanine" + +# Source-Hash: c8be604718a7a9fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the opening" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheOpening" +msgstr "Dessiner l’ouverture" + +# Source-Hash: 231386ae6d534163 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the terrace" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheTerrace" +msgstr "Dessiner la terrasse" + +# Source-Hash: e092e803eb60af69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit smart measure" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.exitSmartMeasure" +msgstr "Quitter la mesure intelligente" + +# Source-Hash: b3907da0ad234f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finish" +msgstr "Terminer" + +# Source-Hash: f74bd937ae2e3a40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish at the edge" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finishAtTheEdge" +msgstr "Terminer au bord" + +# Source-Hash: 21029cf1c45697cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMove" +msgstr "Déplacement libre" + +# Source-Hash: 3247d8689bed6ff6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move · slide doors and windows" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMoveSlideDoorsAndWindows" +msgstr "Déplacement libre · faire glisser portes et fenêtres" + +# Source-Hash: b5ad765b43e75a5c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to pick a material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.holdToPickAMaterial" +msgstr "Maintenez pour prélever un matériau" + +# Source-Hash: 46b53c5449c98964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inspect surface dimensions" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.inspectSurfaceDimensions" +msgstr "Inspecter les dimensions de la surface" + +# Source-Hash: 63f1f7006ae14177 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint with this material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.paintWithThisMaterial" +msgstr "Peindre avec ce matériau" + +# Source-Hash: 188f55cc5afbe34f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick target height" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pickTargetHeight" +msgstr "Choisir la hauteur cible" + +# Source-Hash: 2880fc9752eababa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin measurement lens" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pinMeasurementLens" +msgstr "Épingler la loupe de mesure" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.place" +msgstr "Placer" + +# Source-Hash: 82010a7fd6350c93 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place inside the room" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.placeInsideTheRoom" +msgstr "Placer dans la pièce" + +# Source-Hash: 8b97f4503edb27b9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Press anywhere, drag to the opposite corner" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pressAnywhereDragToTheOpposite" +msgstr "Appuyez n’importe où, faites glisser jusqu’à l’angle opposé" + +# Source-Hash: 786f0b1c81b2a6c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise or lower" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.raiseOrLower" +msgstr "Monter ou descendre" + +# Source-Hash: b033f46ae3a0cbb7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove a painted part, or reset a surface" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeAPaintedPartOrReset" +msgstr "Retirer une partie peinte ou réinitialiser une surface" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeLastPoint" +msgstr "Retirer le dernier point" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.resize" +msgstr "Redimensionner" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotate45" +msgstr "Pivoter de ±45°" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotateTheSelection45" +msgstr "Pivoter la sélection de ±45°" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.setOneCornerThenTheOpposite" +msgstr "Placez un angle, puis l’angle opposé" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.cancel" +msgstr "Annuler" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.forcePlace" +msgstr "Forcer le placement" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.place" +msgstr "Placer" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.rotate" +msgstr "Pivoter" + +# Source-Hash: e9dfc2a178bca5f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guided constraints bypassed" +#: packages/editor/src/components/ui/helpers/registered-tool-helper.tsx +#, fuzzy +msgid "editor.helpers.registeredToolHelper.guidedConstraintsBypassed" +msgstr "Contraintes guidées ignorées" + +# Source-Hash: 395fd0821b203517 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add or remove objects from the selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.addOrRemoveObjectsFromThe" +msgstr "Ajouter ou retirer des objets de la sélection" + +# Source-Hash: 8428cb0af9c6d6a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Adjust one side’s corner radius" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.adjustOneSideSCornerRadius" +msgstr "Ajuster le rayon d’angle d’un côté" + +# Source-Hash: d63b45c195713993 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clear the selection (or click outside)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clearTheSelectionOrClickOutside" +msgstr "Effacer la sélection (ou cliquer à l’extérieur)" + +# Source-Hash: 40b1afbeadbd6213 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click a handle dot to show move arrows" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickAHandleDotToShow" +msgstr "Cliquez sur une poignée pour afficher les flèches de déplacement" + +# Source-Hash: 0b82a35c71549580 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click or drag the selection to move it as one" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickOrDragTheSelectionTo" +msgstr "Cliquez ou faites glisser la sélection pour la déplacer d’un bloc" + +# Source-Hash: 73a761f393f69cb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click the handle dot to show move + rotate handles" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickTheHandleDotToShow" +msgstr "Cliquez sur la poignée pour afficher les poignées de déplacement et de rotation" + +# Source-Hash: c0045cef191fee69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detach the joint while dragging an arrow" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.detachTheJointWhileDraggingAn" +msgstr "Détacher la jonction en faisant glisser une flèche" + +# Source-Hash: a019c8948c104a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag left or right to rotate selected object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragLeftOrRightToRotate" +msgstr "Faites glisser à gauche ou à droite pour faire pivoter l’objet sélectionné" + +# Source-Hash: 7db0364deb12f06e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag selected movable object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragSelectedMovableObject" +msgstr "Faire glisser l’objet mobile sélectionné" + +# Source-Hash: 0f258dd389afdc73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Group selection (session only)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.groupSelectionSessionOnly" +msgstr "Grouper la sélection (session uniquement)" + +# Source-Hash: 85330d62893a45c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to rotate freely" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.holdToRotateFreely" +msgstr "Maintenez pour pivoter librement" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotate45" +msgstr "Pivoter de ±45°" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotateTheSelection45" +msgstr "Pivoter la sélection de ±45°" + +# Source-Hash: 0f6b418b18ff96f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotating freely (no angle step)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotatingFreely" +msgstr "Rotation libre (sans pas d’angle)" + +# Source-Hash: 7ed174d6b03563b1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch the rotation axis (Y → X → Z)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.switchTheRotationAxisYX" +msgstr "Changer l’axe de rotation (Y → X → Z)" + +# Source-Hash: d6f2c5cea683de62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ungroup session selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.ungroupSessionSelection" +msgstr "Dissocier la sélection de session" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuous" +msgstr "Continu" + +# Source-Hash: ebf0eb7af4636a16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousCanopy" +msgstr "Auvent continu" + +# Source-Hash: 1d8e87cd807e8d40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous run" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousRun" +msgstr "Rangée continue" + +# Source-Hash: 8990683667567c6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Curved fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.curvedFence" +msgstr "Clôture courbe" + +# Source-Hash: edf1b9a2ad3ab910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Freehand fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.freehandFence" +msgstr "Clôture libre" + +# Source-Hash: 2cdb7c1c7cd7c4fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place multiple" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeMultiple" +msgstr "Placer plusieurs" + +# Source-Hash: 90bf945df6f9c979 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place once" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeOnce" +msgstr "Placer une fois" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.polygonRoom" +msgstr "Pièce polygonale" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.rectangleRoom" +msgstr "Pièce rectangulaire" + +# Source-Hash: 7fd85d0408141157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single cabinet" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCabinet" +msgstr "Meuble seul" + +# Source-Hash: dd1bdbc26165baa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCanopy" +msgstr "Auvent seul" + +# Source-Hash: 5fb1a69316be983e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleFence" +msgstr "Clôture simple" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.walls" +msgstr "Murs" + +# Source-Hash: 4e4f1a24e4a9d61e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cut opening" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.cutOpening" +msgstr "Découper une ouverture" + +# Source-Hash: 60e8d235f3084a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divide room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.divideRoom" +msgstr "Diviser la pièce" + +# Source-Hash: aa496ec33d21ab03 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edit {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.editKind" +msgstr "Modifier : {kind}" + +# Source-Hash: f3ea3efa7102844f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Erase" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.erase" +msgstr "Effacer" + +# Source-Hash: 3f907e76526472bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.levelTerrain" +msgstr "Niveler le terrain" + +# Source-Hash: 4e911c300d74eb47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lower terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.lowerTerrain" +msgstr "Abaisser le terrain" + +# Source-Hash: 194a147d4618a994 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mezzanine" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.mezzanine" +msgstr "Mezzanine" + +# Source-Hash: c48c4129c9ed249a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveKind" +msgstr "Déplacer : {kind}" + +# Source-Hash: 89f6b7ca8904c656 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveRoom" +msgstr "Déplacer la pièce" + +# Source-Hash: 9c707069572fb3db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move selection" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveSelection" +msgstr "Déplacer la sélection" + +# Source-Hash: cf2e870fce0f2f51 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paint" +msgstr "Peindre" + +# Source-Hash: ca197314cb70aa56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a rectangle" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintARectangle" +msgstr "Peindre un rectangle" + +# Source-Hash: ea4ce729e17254f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a shape" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintAShape" +msgstr "Peindre une forme" + +# Source-Hash: 01359502b07284d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick material" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.pickMaterial" +msgstr "Prélever un matériau" + +# Source-Hash: 4066e8a3f60b1711 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.raiseTerrain" +msgstr "Surélever le terrain" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.resize" +msgstr "Redimensionner" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.rotate" +msgstr "Pivoter" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.select" +msgstr "Sélectionner" + +# Source-Hash: ec1f1d68af469867 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart measure" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smartMeasure" +msgstr "Mesure intelligente" + +# Source-Hash: 5ba5f22bd1a69e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smooth terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smoothTerrain" +msgstr "Lisser le terrain" + +# Source-Hash: cbb4687261739397 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.splitKind" +msgstr "Diviser : {kind}" + +# Source-Hash: 96281876ce53ba08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Terrace" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.terrace" +msgstr "Terrasse" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.polygonRoom" +msgstr "Pièce polygonale" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.rectangleRoom" +msgstr "Pièce rectangulaire" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.walls" +msgstr "Murs" + +# Source-Hash: 5eab376947d29a50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reload editor" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.reloadEditor" +msgstr "Recharger l’éditeur" + +# Source-Hash: 834de1a7027c4da1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The editor scene failed to render" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.theEditorSceneFailedToRender" +msgstr "La scène de l’éditeur n’a pas pu s’afficher" + +# Source-Hash: 151f7c7e4110016f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curtain wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurtainWallTakesNoCorner" +msgstr "Un mur-rideau n’accepte pas de fenêtre d’angle" + +# Source-Hash: 97f5e044d46501fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curved wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurvedWallTakesNoCorner" +msgstr "Un mur courbe n’accepte pas de fenêtre d’angle" + +# Source-Hash: 776d8ebece7fe1bb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add a corner · click the first to close" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.addACornerClickTheFirst" +msgstr "Ajouter un angle · cliquez sur le premier pour fermer" + +# Source-Hash: 6a0745dd047b149a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Another opening is in the way at the corner" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.anotherOpeningIsInTheWay" +msgstr "Une autre ouverture gêne à l’angle" + +# Source-Hash: 441124187e7da2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangers" +msgstr "Suspentes auto" + +# Source-Hash: 47a7f9a6a81156c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers - click or press H to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersClickOrPressH" +msgstr "Suspentes auto - cliquez ou appuyez sur H pour basculer" + +# Source-Hash: d7944f31cba90e26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: Off" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOff" +msgstr "Suspentes auto : désactivées" + +# Source-Hash: 295882d015d08742 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: On" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOn" +msgstr "Suspentes auto : activées" + +# Source-Hash: 8c039e5182b01c4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bypass snapping" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.bypassSnapping" +msgstr "Ignorer l’aimantation" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancel" +msgstr "Annuler" + +# Source-Hash: 5b33b576fd30b74e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel move" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelMove" +msgstr "Annuler le déplacement" + +# Source-Hash: 136fa29b9ae419bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel run / exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelRunExit" +msgstr "Annuler le tronçon / quitter" + +# Source-Hash: 75b406824be91ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel start point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelStartPoint" +msgstr "Annuler le point de départ" + +# Source-Hash: ffa5aaa1746303c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cornerWindow" +msgstr "Fenêtre d’angle" + +# Source-Hash: b0afdd855a02e4a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cuts" +msgstr "Coupes" + +# Source-Hash: dc9fe7601cc525f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValue" +msgstr "Coupes : {value}" + +# Source-Hash: a2e13bc4dc82624c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}, even" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValueEven" +msgstr "Coupes : {value}, régulières" + +# Source-Hash: 04152b4cec726f34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle mono / gable / butterfly" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleMonoGableButterfly" +msgstr "Basculer un pan / deux pans / papillon" + +# Source-Hash: 4fb6c83edb6652b5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle snapping mode" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleSnappingMode" +msgstr "Changer le mode d’aimantation" + +# Source-Hash: 5d550a3ac76279de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorStyleClickOrPressL" +msgstr "Style de porte — cliquez ou appuyez sur L pour changer" + +# Source-Hash: 3272a7df5d7c6a9a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorTypeClickOrPressO" +msgstr "Type de porte — cliquez ou appuyez sur O pour changer" + +# Source-Hash: 366222b4435eefda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drop downspout from outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.dropDownspoutFromOutlet" +msgstr "Descendre la descente depuis la sortie" + +# Source-Hash: 03f306371f345007 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct diameter down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.ductDiameterDownUp" +msgstr "Diamètre de gaine moins / plus" + +# Source-Hash: 7b4137e27f8327d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End run / cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.endRunCancel" +msgstr "Terminer le tronçon / annuler" + +# Source-Hash: 938aacb119b29dc1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exit" +msgstr "Quitter" + +# Source-Hash: 7cb4e0688cabcb00 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit drawing" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exitDrawing" +msgstr "Quitter le tracé" + +# Source-Hash: 47025a103c456125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishAndContinue" +msgstr "Terminer et continuer" + +# Source-Hash: 000918429b74128f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishCeiling" +msgstr "Terminer le plafond" + +# Source-Hash: 51a80a0dba5a6f30 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishGridAxis" +msgstr "Terminer l’axe de trame" + +# Source-Hash: 87c7b98fc2e010e1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMeasurement" +msgstr "Terminer la mesure" + +# Source-Hash: 5e1a0af7dc506826 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish multi-point witnesses" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMultiPointWitnesses" +msgstr "Terminer les repères multipoints" + +# Source-Hash: 30fc0862501ba2e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish slab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishSlab" +msgstr "Terminer la dalle" + +# Source-Hash: 66ed7c7598d3aa29 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flip side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.flipSide" +msgstr "Inverser le côté" + +# Source-Hash: f5717f6a0905ffab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow: trace a lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.followTraceALineset" +msgstr "Suivre : longer une liaison frigorifique" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.forcePlace" +msgstr "Forcer le placement" + +# Source-Hash: cc0c14065951444d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.freePlacement" +msgstr "Placement libre" + +# Source-Hash: f098a27096a9c1ea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Go vertical ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.goVerticalClickToPlace" +msgstr "Passer en vertical ↕, cliquez pour placer" + +# Source-Hash: fd47f1820d8799c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Highlight outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.highlightOutlet" +msgstr "Mettre en évidence la sortie" + +# Source-Hash: eb90058d0f856f67 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Join as a corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.joinAsACornerWindow" +msgstr "Joindre en fenêtre d’angle" + +# Source-Hash: 225b3161f2e59757 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Alt + drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.altDrag" +msgstr "Alt + glisser" + +# Source-Hash: dd66f883b173fc72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Backspace" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.backspace" +msgstr "Retour arrière" + +# Source-Hash: a18387bc0be54c32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.click" +msgstr "Clic" + +# Source-Hash: db9e60c1d30b8499 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click again" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.clickAgain" +msgstr "Cliquer à nouveau" + +# Source-Hash: f400330b9c9c12e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Command" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.command" +msgstr "Commande" + +# Source-Hash: 976c63285a510b09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Control" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.control" +msgstr "Contrôle" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.delete" +msgstr "Supprimer" + +# Source-Hash: 88888c9d2719fa92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.doubleClick" +msgstr "Double-clic" + +# Source-Hash: dfb85b2addb7b9fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.drag" +msgstr "Glisser" + +# Source-Hash: ed9140d42148c99b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.enter" +msgstr "Entrée" + +# Source-Hash: 9195fa8b9c8ebdfb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hover" +msgstr "Survoler" + +# Source-Hash: 2d78441b741bc562 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a duct end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverADuctEnd" +msgstr "Survolez une extrémité de gaine" + +# Source-Hash: 6083405086f61c76 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a pipe end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverAPipeEnd" +msgstr "Survolez une extrémité de tuyau" + +# Source-Hash: a5a337eb76fdb066 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverGutter" +msgstr "Survolez la gouttière" + +# Source-Hash: a58533594411e088 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.leftClick" +msgstr "Clic gauche" + +# Source-Hash: bc4ab608ec3d3b4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Middle click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.middleClick" +msgstr "Clic central" + +# Source-Hash: 6791879c651108c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rightClick" +msgstr "Clic droit" + +# Source-Hash: c836b21b42198868 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R / Shift+R" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rShiftR" +msgstr "R / Maj+R" + +# Source-Hash: 9812aa06d8bb7544 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scroll" +msgstr "Défilement" + +# Source-Hash: f2174536230657c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll wheel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scrollWheel" +msgstr "Molette" + +# Source-Hash: 82dd231086d87f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Space" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.space" +msgstr "Espace" + +# Source-Hash: 9e68aa2f472cad56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.tab" +msgstr "Tab" + +# Source-Hash: 4b221b73f9496a49 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mount: floor / ceiling / wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.mountFloorCeilingWall" +msgstr "Pose : sol / plafond / mur" + +# Source-Hash: 225edfb1e45aed95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No room for the matching window on the other wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noRoomForTheMatchingWindow" +msgstr "Pas de place pour la fenêtre correspondante sur l’autre mur" + +# Source-Hash: a7045d6b678bcd13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No wall meets here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noWallMeetsHere" +msgstr "Aucun mur ne se rejoint ici" + +# Source-Hash: a639341dc21fed2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Number of cuts — scroll or click to change" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.numberOfCutsScrollOrClick" +msgstr "Nombre de coupes — faites défiler ou cliquez pour modifier" + +# Source-Hash: af01bde3ae4b7e59 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick witness point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pickWitnessPoint" +msgstr "Choisir un point de repère" + +# Source-Hash: ecfd58576b28a9f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe size down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pipeSizeDownUp" +msgstr "Diamètre de tuyau moins / plus" + +# Source-Hash: 7a1eb7b64f06bad0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeAndContinue" +msgstr "Placer et continuer" + +# Source-Hash: c6cda39e2e4b5d3a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBlock" +msgstr "Placer le bloc" + +# Source-Hash: 45a743c52a1d72de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place box vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBoxVentOnRoof" +msgstr "Placer l’aérateur sur le toit" + +# Source-Hash: 75142dd1d557efe2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCabinet" +msgstr "Placer le meuble" + +# Source-Hash: da603a713d4c9909 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place canopy or set the next run point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCanopyOrSetTheNext" +msgstr "Placer l’auvent ou le point suivant" + +# Source-Hash: 8b3a30c6b7a5612d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place chimney on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeChimneyOnRoof" +msgstr "Placer la cheminée sur le toit" + +# Source-Hash: 710d41e4e2f259fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeColumn" +msgstr "Placer le poteau" + +# Source-Hash: ee1da4e12a71d9a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cupola on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCupolaOnRoof" +msgstr "Placer le lanterneau sur le toit" + +# Source-Hash: 19c1fe8c46d213a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dimension line when needed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDimensionLineWhenNeeded" +msgstr "Placer la ligne de cote si nécessaire" + +# Source-Hash: 58f3e7efb6ea120b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place door on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDoorOnWall" +msgstr "Placer la porte sur le mur" + +# Source-Hash: de04e9d03d937c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dormer on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDormerOnRoof" +msgstr "Placer la lucarne sur le toit" + +# Source-Hash: c581645f2ee447c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeElevator" +msgstr "Placer l’ascenseur" + +# Source-Hash: 096b8d6482717358 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place eyebrow vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeEyebrowVentOnRoof" +msgstr "Placer le chien-assis sur le toit" + +# Source-Hash: e8d42c1c8370773f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeFitting" +msgstr "Placer le raccord" + +# Source-Hash: 2340a4b70cb0d9ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gutter on roof eave" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeGutterOnRoofEave" +msgstr "Placer la gouttière sur l’égout du toit" + +# Source-Hash: 706a8eafb6212833 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItem" +msgstr "Placer l’élément" + +# Source-Hash: 1815c482e249932e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place it (locked to 45°)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItLockedTo45" +msgstr "Placer (verrouillé à 45°)" + +# Source-Hash: 4a14340657532838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place measurement point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeMeasurementPoint" +msgstr "Placer le point de mesure" + +# Source-Hash: b3be684ac62fbf53 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placement" +msgstr "Placement" + +# Source-Hash: 2bb2ce6276c69b1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Auto" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementAuto" +msgstr "Placement : auto" + +# Source-Hash: ed78ac5354a1dcd8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Ground" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementGround" +msgstr "Placement : sol" + +# Source-Hash: a066a2c9d5e65a1a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementRoof" +msgstr "Placement : toit" + +# Source-Hash: 8f74dbe5064c4c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement surface - click or press P to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementSurfaceClickOrPressP" +msgstr "Surface de placement - cliquez ou appuyez sur P pour changer" + +# Source-Hash: fe119955c925feaf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementType" +msgstr "Type de placement" + +# Source-Hash: 33043a35500168f5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type — click or press I to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementTypeClickOrPressI" +msgstr "Type de placement — cliquez ou appuyez sur I pour basculer" + +# Source-Hash: 9945f412e6a9a446 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place on a fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeOnAFence" +msgstr "Placer sur une clôture" + +# Source-Hash: 6708118775a7da7f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRegister" +msgstr "Placer la bouche" + +# Source-Hash: ebd2731f5c79306e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place ridge vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRidgeVentOnRoof" +msgstr "Placer la ventilation de faîtage sur le toit" + +# Source-Hash: 9b3c66a867c23326 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeShelf" +msgstr "Placer l’étagère" + +# Source-Hash: f11cf5c1c9fe862d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place skylight on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSkylightOnRoof" +msgstr "Placer la fenêtre de toit" + +# Source-Hash: e989a58d6709cc16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place solar panel array on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSolarPanelArrayOnRoof" +msgstr "Placer les panneaux solaires sur le toit" + +# Source-Hash: b67f7036d5180cf5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSpawnPoint" +msgstr "Placer le point d’apparition" + +# Source-Hash: 6c7f32a17e5636c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place stairs" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeStairs" +msgstr "Placer l’escalier" + +# Source-Hash: 641c0d3debd798a8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTrap" +msgstr "Placer le siphon" + +# Source-Hash: 6f0a6f6c4b7588a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place turbine vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTurbineVentOnRoof" +msgstr "Placer l’extracteur éolien sur le toit" + +# Source-Hash: e65cf5edb4f51ed5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeUnit" +msgstr "Placer l’unité" + +# Source-Hash: 86ce1c730154f68b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place window on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWindowOnWall" +msgstr "Placer la fenêtre sur le mur" + +# Source-Hash: 2b612180a7617901 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place without the corner snap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWithoutTheCornerSnap" +msgstr "Placer sans l’aimantation d’angle" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastPoint" +msgstr "Retirer le dernier point" + +# Source-Hash: 8b74b1d962be10fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last witness" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastWitness" +msgstr "Retirer le dernier repère" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate" +msgstr "Pivoter" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45" +msgstr "Pivoter de ±45°" + +# Source-Hash: be2240289aa74df5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45° (floor / ceiling)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45FloorCeiling" +msgstr "Pivoter de ±45° (sol / plafond)" + +# Source-Hash: d5fb78b07c0f8138 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ghost ±15°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateGhost15" +msgstr "Pivoter l’aperçu de ±15°" + +# Source-Hash: 912d340cd16e27fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate or flip the run side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateOrFlipTheRunSide" +msgstr "Pivoter ou inverser le côté de la rangée" + +# Source-Hash: ad1dc0b5536cceef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate roof direction 90°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateRoofDirection90" +msgstr "Pivoter l’orientation du toit de 90°" + +# Source-Hash: fa24651e9e5f595a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateSpawnPoint" +msgstr "Pivoter le point d’apparition" + +# Source-Hash: 2d693d87fe9b59e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Round / rectangular / oval" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.roundRectangularOval" +msgstr "Rond / rectangulaire / oblong" + +# Source-Hash: f7d2c9cdcc637c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set fence start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setFenceStartEnd" +msgstr "Définir le début / la fin de la clôture" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setOneCornerThenTheOpposite" +msgstr "Placez un angle, puis l’angle opposé" + +# Source-Hash: 4f55171f10c6ceeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set roof footprint" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setRoofFootprint" +msgstr "Définir l’emprise du toit" + +# Source-Hash: 0243859b1d64c21e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set wall start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setWallStartEnd" +msgstr "Définir le début / la fin du mur" + +# Source-Hash: c2806cce9612fa50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slope / level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.slopeLevel" +msgstr "Pente / à plat" + +# Source-Hash: 06c0ec40606db679 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snap onto the run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.snapOntoTheRun" +msgstr "Aimanter sur le tronçon" + +# Source-Hash: e214cccbac9c4fd2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split at the marks" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.splitAtTheMarks" +msgstr "Diviser aux repères" + +# Source-Hash: 94455c35bfeac6b4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startGridAxis" +msgstr "Commencer l’axe de trame" + +# Source-Hash: 2edb4c29bbe7c513 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLineset" +msgstr "Commencer la liaison frigorifique" + +# Source-Hash: 9e50f1b30e325208 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start liquid line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLiquidLine" +msgstr "Commencer la ligne liquide" + +# Source-Hash: 877ddcb778c211cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startRun" +msgstr "Commencer le tronçon" + +# Source-Hash: 8a62bee64174bbc0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startSegment" +msgstr "Commencer le segment" + +# Source-Hash: 6cc5dc51a8e66779 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Step back or cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stepBackOrCancel" +msgstr "Revenir en arrière ou annuler" + +# Source-Hash: 1a79a485d91f3f28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.style" +msgstr "Style" + +# Source-Hash: 81f595b1c47c0080 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleBarn" +msgstr "Style : grange" + +# Source-Hash: 3a82c718fe215273 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCasement" +msgstr "Style : battant" + +# Source-Hash: 072e3331d1d105c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Craftsman" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCraftsman" +msgstr "Style : artisan" + +# Source-Hash: b64d07557dec1714 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Double-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleDoubleHung" +msgstr "Style : guillotine double" + +# Source-Hash: 55ef8761a537637f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleFrench" +msgstr "Style : à la française" + +# Source-Hash: bc8a751d87536dc3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGlass" +msgstr "Style : vitré" + +# Source-Hash: 40c1eb0bc83e207d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGrid" +msgstr "Style : petits bois" + +# Source-Hash: f516886bab2e7f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Half-louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHalfLouvered" +msgstr "Style : demi-persienne" + +# Source-Hash: 64e4389a695371a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Horizontal bands" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHorizontalBands" +msgstr "Style : bandes horizontales" + +# Source-Hash: ff6d226a425b00c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Modern" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleModern" +msgstr "Style : moderne" + +# Source-Hash: c6d17ba078ff47e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePanel" +msgstr "Style : panneau" + +# Source-Hash: 5e6baad0d2ce3a62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Paneled glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePaneledGlass" +msgstr "Style : vitré à panneaux" + +# Source-Hash: 6314388e6832c252 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Shaker" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleShaker" +msgstr "Style : shaker" + +# Source-Hash: a0f8e524f3ca121f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Single" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSingle" +msgstr "Style : simple" + +# Source-Hash: 368279df3a472c86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Six-panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSixPanel" +msgstr "Style : six panneaux" + +# Source-Hash: 8f3c2571d8168fee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSliding" +msgstr "Style : coulissant" + +# Source-Hash: aa9d9eb137ca38d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Tall grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTallGrid" +msgstr "Style : petits bois hauts" + +# Source-Hash: bc164648722b63e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Transom" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTransom" +msgstr "Style : imposte" + +# Source-Hash: 9a218f0c9ceb4697 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Triple-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTripleHung" +msgstr "Style : guillotine triple" + +# Source-Hash: 9f6df1344bd3d694 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Wide grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleWideGrid" +msgstr "Style : petits bois larges" + +# Source-Hash: 711d4050c0cb95d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch rotation axis (Y → X → Z)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.switchRotationAxisYXZ" +msgstr "Changer l’axe de rotation (Y → X → Z)" + +# Source-Hash: d650c71e042c2598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The walls meet at too sharp or too flat an angle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWallsMeetAtTooSharp" +msgstr "Les murs se rejoignent selon un angle trop aigu ou trop plat" + +# Source-Hash: ab206ac56e65f190 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The window waiting there is taller than this wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWindowWaitingThereIsTaller" +msgstr "La fenêtre prévue à cet endroit est plus haute que ce mur" + +# Source-Hash: 9c1f47138ed5c7ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Three or more walls meet here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.threeOrMoreWallsMeetHere" +msgstr "Trois murs ou plus se rejoignent ici" + +# Source-Hash: c3ca56fa28e15f07 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace ceiling outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceCeilingOutline" +msgstr "Tracer le contour du plafond" + +# Source-Hash: bdf71499d30a29de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace slab outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceSlabOutline" +msgstr "Tracer le contour de la dalle" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.type" +msgstr "Type" + +# Source-Hash: b54eaaff3349dcb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Awning" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeAwning" +msgstr "Type : à l’italienne" + +# Source-Hash: f399572a27417c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBarn" +msgstr "Type : grange" + +# Source-Hash: a1df9782200b5f1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bay" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBay" +msgstr "Type : oriel" + +# Source-Hash: ff069a390e8e3f66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bow" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBow" +msgstr "Type : bow-window" + +# Source-Hash: bdac5f3f2ea70fff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCabinet" +msgstr "Type : placard" + +# Source-Hash: e0754fc03997cbf9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCasement" +msgstr "Type : battant" + +# Source-Hash: 47d873446d6e173b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDouble" +msgstr "Type : double" + +# Source-Hash: 5942e484513aaab5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDoubleHung" +msgstr "Type : guillotine double" + +# Source-Hash: f9497fbfceefda27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Fixed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFixed" +msgstr "Type : fixe" + +# Source-Hash: 0dcf07acc9cbf000 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Folding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFolding" +msgstr "Type : pliante" + +# Source-Hash: bff7331f87f279aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFrench" +msgstr "Type : à la française" + +# Source-Hash: 9d2c3b82079eb769 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Hinged" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeHinged" +msgstr "Type : battante" + +# Source-Hash: b8001b90ff522838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Island" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeIsland" +msgstr "Type : îlot" + +# Source-Hash: 516833c5160d412e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeLouvered" +msgstr "Type : à persiennes" + +# Source-Hash: 291272bf848ad6ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Pocket" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typePocket" +msgstr "Type : galandage" + +# Source-Hash: 46d0e53d6ae07c72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Single Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSingleHung" +msgstr "Type : guillotine simple" + +# Source-Hash: b11115b50df8faac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSliding" +msgstr "Type : coulissante" + +# Source-Hash: bff0c1694ee0a37e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical stack ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.verticalStackClickToPlace" +msgstr "Colonne verticale ↕, cliquez pour placer" + +# Source-Hash: bac471ee67af6412 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waste / vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.wasteVent" +msgstr "Évacuation / ventilation" + +# Source-Hash: 1c744b7e24fc786e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowStyleClickOrPressL" +msgstr "Style de fenêtre — cliquez ou appuyez sur L pour changer" + +# Source-Hash: dd6f0ab314fea26c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowTypeClickOrPressO" +msgstr "Type de fenêtre — cliquez ou appuyez sur O pour changer" + +# Source-Hash: 9fc7a39bc32f287a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.plugins" +msgstr "Plugins" + +# Source-Hash: c54f9bac358893d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "2D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view2d" +msgstr "2D" + +# Source-Hash: f78f2fa035f25f85 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view3d" +msgstr "3D" + +# Source-Hash: 05b65242d8c48791 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.auto" +msgstr "Auto" + +# Source-Hash: 7890c110650ad1e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Browse plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.browsePlugins" +msgstr "Parcourir les plugins" + +# Source-Hash: 3b11e7af681a9dcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeLabel" +msgstr "Fermer {label}" + +# Source-Hash: 3f00e92517e3f4a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeSplit" +msgstr "Fermer la vue partagée (\\)" + +# Source-Hash: 94cc8e9f1ee16edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ground" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.ground" +msgstr "Sol" + +# Source-Hash: 0d472502a4d36e86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundSolid" +msgstr "{standing, select, partly {Partiellement sous le terrain · sol plein} below {Sous le terrain · sol plein} other {Sol plein}}" + +# Source-Hash: 1b6798c307ac1b96 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundVeiled" +msgstr "{standing, select, partly {Partiellement sous le terrain · sol voilé} below {Sous le terrain · sol voilé} other {Sol voilé}}" + +# Source-Hash: ebdc976a98e82626 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Keep the ground solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.keepTheGroundSolid" +msgstr "Garder le sol plein" + +# Source-Hash: 5f827686a006d88c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.moreViews" +msgstr "Plus de vues" + +# Source-Hash: f175bbcf457ab73c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pane {pane} views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.paneViews" +msgstr "Vues du volet {pane}" + +# Source-Hash: 33c20cc33dce9a9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinLabel" +msgstr "Épingler {label}" + +# Source-Hash: 3f7231b1eb2f93f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin to the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinToTheViewBar" +msgstr "Épingler à la barre de vues" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.solid" +msgstr "Plein" + +# Source-Hash: 98f22f3f89f17686 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split" +msgstr "Vue partagée (\\)" + +# Source-Hash: e4cd64b1680ac0d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split2" +msgstr "Partager" + +# Source-Hash: 15b0adc705923a27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Swap panes" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.swapPanes" +msgstr "Inverser les volets" + +# Source-Hash: 9781bcdb7a8549e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin from the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinFromTheViewBar" +msgstr "Désépingler de la barre de vues" + +# Source-Hash: f667358dec4abdea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinLabel" +msgstr "Désépingler {label}" + +# Source-Hash: e96581f0bbf9fa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Veil the ground over a level below grade" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.veilTheGroundOverALevel" +msgstr "Voiler le sol au-dessus d’un niveau sous le terrain" + +# Source-Hash: fb82f09f8ed3059e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.views" +msgstr "Vues" + +# Source-Hash: fdece5c2158dfe88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "You can retry the scene or return home without reloading the whole app shell." +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.youCanRetryTheSceneOr" +msgstr "Vous pouvez relancer la scène ou revenir à l’accueil sans recharger toute l’application." + +# Source-Hash: a273dacdf51b26f2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A topology-backed solid edited directly in the canvas." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.description" +msgstr "Solide à topologie, modifiable directement dans le canevas." + +# Source-Hash: 279f456ebb2f5da0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.label" +msgstr "Bloc" + +# Source-Hash: b2a371b4041b5e38 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Small louvered exhaust vent that sits on a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.description" +msgstr "Petit aérateur d’extraction à persiennes posé sur un versant." + +# Source-Hash: f736ca24e84825c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Box Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.label" +msgstr "Aérateur de toit" + +# Source-Hash: f49d8836ae037dde +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A building container holding one or more levels." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.description" +msgstr "Conteneur de bâtiment contenant un ou plusieurs niveaux." + +# Source-Hash: d42f7d29e3fc4af7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Building" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.label" +msgstr "Bâtiment" + +# Source-Hash: 693a0d8896f5cc43 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable parametric base cabinet." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.description" +msgstr "Meuble bas paramétrique configurable." + +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.label" +msgstr "Meuble modulaire" + +# Source-Hash: ffc8d80e438f40b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An editable module inside a modular cabinet run." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.description" +msgstr "Module modifiable dans une rangée de meubles modulaires." + +# Source-Hash: d5c19ec529e26a98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cabinet Module" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.label" +msgstr "Module de meuble" + +# Source-Hash: 4d6d5e9439f40e9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A polygon-bounded ceiling surface that hosts ceiling-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.description" +msgstr "Surface de plafond délimitée par un polygone, qui accueille les éléments fixés au plafond." + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.label" +msgstr "Plafond" + +# Source-Hash: ea12ce3c2b3588e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical masonry stack on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.description" +msgstr "Souche maçonnée verticale sur un pan de toit." + +# Source-Hash: 95169058fec6db14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chimney" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.label" +msgstr "Cheminée" + +# Source-Hash: 6a06e628257f3393 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A parametric column with configurable cross-section, base, and capital." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.description" +msgstr "Poteau paramétrique avec section, base et chapiteau configurables." + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.label" +msgstr "Poteau" + +# Source-Hash: 895766ad1b766c2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Associative linear, curved, circular, angular, or coordinate plan dimension." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.description" +msgstr "Cote de plan associative : linéaire, courbe, circulaire, angulaire ou en coordonnées." + +# Source-Hash: 6875b60ee8a7cc3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Construction Dimension" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.label" +msgstr "Cote de construction" + +# Source-Hash: a276c9693f01dec7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered roof lantern with a dome or pyramid cap and optional finial." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.description" +msgstr "Lanterneau à persiennes avec coiffe en dôme ou pyramide et épi facultatif." + +# Source-Hash: e679dd19f96eba0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cupola" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.label" +msgstr "Lanterneau" + +# Source-Hash: 6123b20edb9569de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A door cut into a wall. Animated open/close state." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.description" +msgstr "Porte découpée dans un mur, avec ouverture et fermeture animées." + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.label" +msgstr "Porte" + +# Source-Hash: 387e57242c8d110a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "House-shaped protrusion on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.description" +msgstr "Saillie en forme de maison sur un pan de toit." + +# Source-Hash: 6b6f8068bbc4c902 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dormer" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.label" +msgstr "Lucarne" + +# Source-Hash: b46392d2ea865760 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical drop pipe from a gutter outlet to the ground." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.description" +msgstr "Tuyau vertical de la sortie de gouttière jusqu’au sol." + +# Source-Hash: 1a1ec08a311f1b35 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Downspout" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.label" +msgstr "Descente pluviale" + +# Source-Hash: 29eadb8c84ae9632 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elbow, tee, reducer, or square-to-round transition connecting duct runs." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.description" +msgstr "Coude, té, réduction ou transition carré-rond reliant des gaines." + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.label" +msgstr "Raccord de gaine" + +# Source-Hash: 09eb45a9b35d1a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC duct run — polyline of round, rect, or flat-oval sections." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.description" +msgstr "Réseau de gaines CVC — polyligne de sections rondes, rectangulaires ou oblongues." + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.label" +msgstr "Gaine" + +# Source-Hash: 33181d0f42421013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.description" +msgstr "Terminal aéraulique — bouche de soufflage, diffuseur plafonnier ou grille de reprise. Les gaines se terminent sur son collet." + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.label" +msgstr "Bouche" + +# Source-Hash: d0afa386e65cd3a4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A multi-level elevator shaft with configurable openings per level." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.description" +msgstr "Gaine d’ascenseur sur plusieurs niveaux, ouvertures configurables par niveau." + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.label" +msgstr "Ascenseur" + +# Source-Hash: 7b22c91cf520e161 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low curved lens-shaped roof vent with a louvered front." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.description" +msgstr "Aérateur de toit bas, courbe et lenticulaire avec façade à persiennes." + +# Source-Hash: 654b29319185ac66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Eyebrow Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.label" +msgstr "Chien-assis de ventilation" + +# Source-Hash: 20032fe9430f610d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A straight or curved fence segment with configurable posts and infill." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.description" +msgstr "Tronçon de clôture droit ou courbe, poteaux et remplissage configurables." + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.label" +msgstr "Clôture" + +# Source-Hash: df61821ed00852d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A gate hosted by a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.description" +msgstr "Portail porté par une clôture." + +# Source-Hash: 4a479aa23542d766 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.label" +msgstr "Portail" + +# Source-Hash: 8f9c927d79796c26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An intentional opening in a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.description" +msgstr "Ouverture volontaire dans une clôture." + +# Source-Hash: ab67bb47e647d594 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open Passage" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.label" +msgstr "Passage" + +# Source-Hash: dc3adf0c2d50dba6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor opening" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.floorOpening.label" +msgstr "Trémie" + +# Source-Hash: 2f4fac2b1d39fdb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A measurement / reference annotation (linear, area, or arc)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.description" +msgstr "Annotation de mesure ou de référence (linéaire, surface ou arc)." + +# Source-Hash: 1344ea2602e3aa9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.label" +msgstr "Guide" + +# Source-Hash: 5402d634f40b2f97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rain-water channel running along the eave of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.description" +msgstr "Chéneau d’eau pluviale le long de l’égout d’un pan de toit." + +# Source-Hash: 14ba981da3627ae2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.label" +msgstr "Gouttière" + +# Source-Hash: 50e9252d30f3fb4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furnace, air handler, or condenser — duct runs connect to its supply/return collars." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.description" +msgstr "Chaudière, centrale de traitement d’air ou condenseur — les gaines se raccordent à ses collets de soufflage et de reprise." + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.label" +msgstr "Unité CVC" + +# Source-Hash: f24a1089d9256460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Geometry preserved from an imported model when no native Pascal shape exists." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.description" +msgstr "Géométrie conservée d’un modèle importé lorsqu’aucune forme Pascal native n’existe." + +# Source-Hash: 9f9d11f287f722d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Imported Mesh" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.label" +msgstr "Maillage importé" + +# Source-Hash: 63f79b3c467177b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A catalog-backed item (furniture, fixtures, decorations)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.description" +msgstr "Élément issu du catalogue (mobilier, équipements, décoration)." + +# Source-Hash: 2743a0e9d2743807 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.label" +msgstr "Élément" + +# Source-Hash: a9e2d7b215696e2a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.description" +msgstr "Auvent adossé à un pan ou autoportant (un pan, deux pans ou papillon) avec structure et évacuation gérées." + +# Source-Hash: 8503bedfbafde9a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Canopy" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.label" +msgstr "Auvent" + +# Source-Hash: 45673462f914d3df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single floor of a building, holding walls / slabs / ceilings / items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.description" +msgstr "Un étage d’un bâtiment, avec murs, dalles, plafonds et éléments." + +# Source-Hash: 0608743fc1736d86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.label" +msgstr "Niveau" + +# Source-Hash: 156bdee8fee5bec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.description" +msgstr "Liaison frigorifique — paire cuivre aspiration + liquide reliant le condenseur à la batterie intérieure." + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.label" +msgstr "Liaison frigorifique" + +# Source-Hash: 2bd4a85bed158269 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.description" +msgstr "Ligne liquide frigorifique autonome — fin tube cuivre nu ; le mode Suivre longe une liaison existante." + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.label" +msgstr "Ligne liquide" + +# Source-Hash: ff4e3bb72267859e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A persistent distance, angle, area, perimeter, or volume annotation." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.description" +msgstr "Annotation persistante de distance, d’angle, de surface, de périmètre ou de volume." + +# Source-Hash: ec3567fd058bab7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.label" +msgstr "Mesure" + +# Source-Hash: 7764b50334e9f71d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV joint — elbow bend, 45° wye, or sanitary tee." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.description" +msgstr "Raccord d’évacuation — coude, culotte à 45° ou té sanitaire." + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.label" +msgstr "Raccord de tuyau" + +# Source-Hash: a0bb4762aa66fa3e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.description" +msgstr "Canalisation d’évacuation et de ventilation — tracez à plat ou basculez une pente de ¼″ par pied avec S." + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.label" +msgstr "Tuyau d’évacuation" + +# Source-Hash: 6d0cdd14d0675e05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV P-trap — water seal on the waste line. The trap arm runs to the vent." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.description" +msgstr "Siphon en P — garde d’eau sur l’évacuation. Le bras du siphon rejoint la ventilation." + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.label" +msgstr "Siphon" + +# Source-Hash: 0efe82436b915f6d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Experimental editable recipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.description" +msgstr "Recette modifiable expérimentale" -# Source-Hash: ae2800b6c9e2b6ed -# Review: human -# English: "{lead} then the first one again to close. For L-shapes and angled rooms." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.caption" -msgstr "{lead} puis de nouveau sur le premier pour fermer. Pour les pièces en L et les angles obliques." +# Source-Hash: c8bbcc888cce7b8a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Procedural item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.label" +msgstr "Élément procédural" -# Source-Hash: 4e186fc057733162 -# Review: human -# English: "Polygon" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.label" -msgstr "Polygone" +# Source-Hash: 356aa0ed69cb8ec5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ventilation strip running along the ridge of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.description" +msgstr "Bande de ventilation le long du faîtage d’un pan de toit." -# Source-Hash: 345e3aca3879b5c5 -# Review: human -# English: "Click each corner," -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.lead" -msgstr "Cliquez sur chaque angle," +# Source-Hash: 54b74080f33c8c4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ridge Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.label" +msgstr "Ventilation de faîtage" -# Source-Hash: 8ec6152e139b0e3f -# Review: human -# English: "Polygon room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.title" -msgstr "Pièce polygonale" +# Source-Hash: 6afeec8de7ed618d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A pitched / hip / gable roof composed of one or more segments." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.description" +msgstr "Toit en pente, en croupe ou à deux pans composé d’un ou plusieurs pans." -# Source-Hash: 9b46295eedcbedae -# Review: human -# English: "{lead} on the grid. Walls, floor and ceiling are created together." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.caption" -msgstr "{lead} sur la grille. Les murs, le sol et le plafond sont créés ensemble." +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.label" +msgstr "Toit" -# Source-Hash: 2c2c20272b0370cc -# Review: human -# English: "Rectangle" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.label" -msgstr "Rectangle" +# Source-Hash: 99afd827dbe5d647 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single pitched plane of a parent roof." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.description" +msgstr "Un pan incliné d’un toit parent." -# Source-Hash: 060faa48e299d7c9 -# Review: human -# English: "Click two corners" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.lead" -msgstr "Cliquez sur deux angles" +# Source-Hash: e72a64b3e00aad98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof Segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.label" +msgstr "Pan de toit" -# Source-Hash: 83a45603ac7f41e8 -# Review: human -# English: "Rectangle room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.title" -msgstr "Pièce rectangulaire" +# Source-Hash: 6600a850000b98ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A captured session with optional mesh, motion, media, and sensor data." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.description" +msgstr "Session capturée avec maillage, mouvement, médias et données de capteurs facultatifs." -# Source-Hash: 3e7408ed44676176 -# Review: human -# English: "Rooms" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.title" -msgstr "Pièces" +# Source-Hash: 3a0701ebcb9f26cb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Capture" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.label" +msgstr "Capture" -# Source-Hash: 8a21a03c4acf396b -# Review: human -# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.caption" -msgstr "{lead} Fermez la boucle pour créer une pièce, ou laissez-la ouverte pour une cloison." +# Source-Hash: acb8cb92b3674b50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Separator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.separator.label" +msgstr "Séparateur" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.label" -msgstr "Murs" +# Source-Hash: 26aff27b7284fc84 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable shelving unit. Items host on each row." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.description" +msgstr "Étagère configurable. Les éléments se posent sur chaque rangée." -# Source-Hash: 9843edd68426fa2d -# Review: human -# English: "Draw one wall at a time." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.lead" -msgstr "Tracez un mur à la fois." +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.label" +msgstr "Étagère" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.title" -msgstr "Murs" +# Source-Hash: c52492c73312a922 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The top-level container holding buildings, zones, and the property boundary." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.site.description" +msgstr "Conteneur de premier niveau avec les bâtiments, les zones et la limite de propriété." -# Source-Hash: 9fc7a39bc32f287a +# Source-Hash: 91f90818d42a984e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Site" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.plugins" -msgstr "Plugins" +msgid "node.site.label" +msgstr "Terrain" -# Source-Hash: c54f9bac358893d8 +# Source-Hash: 67d903d7fe0c69c1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "2D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Framed glass opening on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view2d" -msgstr "2D" +msgid "node.skylight.description" +msgstr "Ouverture vitrée encadrée sur un pan de toit." -# Source-Hash: f78f2fa035f25f85 +# Source-Hash: 358826fbdeaf72b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Skylight" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view3d" -msgstr "3D" +msgid "node.skylight.label" +msgstr "Fenêtre de toit" -# Source-Hash: 05b65242d8c48791 +# Source-Hash: ad8f8036d34f6cea # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Auto" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A polygon-bounded floor surface that hosts items on top." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.auto" -msgstr "Auto" +msgid "node.slab.description" +msgstr "Surface de sol délimitée par un polygone, sur laquelle se posent les éléments." -# Source-Hash: 7890c110650ad1e5 +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Browse plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Slab" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.browsePlugins" -msgstr "Parcourir les plugins" +msgid "node.slab.label" +msgstr "Dalle" -# Source-Hash: 3b11e7af681a9dcd +# Source-Hash: 065ffaaf64ab479d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Grid of photovoltaic panels mounted on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeLabel" -msgstr "Fermer {label}" +msgid "node.solarPanel.description" +msgstr "Ensemble de panneaux photovoltaïques fixés sur un pan de toit." -# Source-Hash: 3f00e92517e3f4a5 +# Source-Hash: 4d18446ff8eaa680 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Solar Panel" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeSplit" -msgstr "Fermer la vue partagée (\\)" +msgid "node.solarPanel.label" +msgstr "Panneau solaire" -# Source-Hash: 94cc8e9f1ee16edb +# Source-Hash: 638f17c80f424dd3 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Ground" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Player or camera origin within a level. One per level." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.ground" -msgstr "Sol" +msgid "node.spawn.description" +msgstr "Origine du joueur ou de la caméra dans un niveau. Une par niveau." -# Source-Hash: 0d472502a4d36e86 +# Source-Hash: 3e2f6b4274f592c0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Spawn Point" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundSolid" -msgstr "{standing, select, partly {Partiellement sous le terrain · sol plein} below {Sous le terrain · sol plein} other {Sol plein}}" +msgid "node.spawn.label" +msgstr "Point d’apparition" -# Source-Hash: 1b6798c307ac1b96 +# Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A stair composed of one or more flights with configurable treads, risers, railings." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundVeiled" -msgstr "{standing, select, partly {Partiellement sous le terrain · sol voilé} below {Sous le terrain · sol voilé} other {Sol voilé}}" +msgid "node.stair.description" +msgstr "Escalier composé d’une ou plusieurs volées, avec marches, contremarches et garde-corps configurables." -# Source-Hash: ebdc976a98e82626 +# Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Keep the ground solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.keepTheGroundSolid" -msgstr "Garder le sol plein" +msgid "node.stair.label" +msgstr "Escalier" -# Source-Hash: 5f827686a006d88c +# Source-Hash: ce0b6361eb77e93c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "More views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A single flight of a parent stair." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.moreViews" -msgstr "Plus de vues" +msgid "node.stairSegment.description" +msgstr "Une volée d’un escalier parent." -# Source-Hash: f175bbcf457ab73c +# Source-Hash: 2159ec5769e1c59a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pane {pane} views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair Segment" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.paneViews" -msgstr "Vues du volet {pane}" +msgid "node.stairSegment.label" +msgstr "Volée" -# Source-Hash: 33c20cc33dce9a9b +# Source-Hash: 5434a3189441c913 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Persistent construction grid axis with identification bubbles." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinLabel" -msgstr "Épingler {label}" +msgid "node.structuralGrid.description" +msgstr "Axe de trame de construction persistant avec bulles d’identification." -# Source-Hash: 3f7231b1eb2f93f3 +# Source-Hash: 0cfe636f7fdd9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin to the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Structural Grid" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinToTheViewBar" -msgstr "Épingler à la barre de vues" +msgid "node.structuralGrid.label" +msgstr "Trame structurelle" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 36b714210f25c284 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wind-driven spinning whirlybird exhaust vent for a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.solid" -msgstr "Plein" +msgid "node.turbineVent.description" +msgstr "Extracteur éolien rotatif pour versant de toit." -# Source-Hash: 98f22f3f89f17686 +# Source-Hash: 4a855abb962f5e7a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Turbine Vent" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split" -msgstr "Vue partagée (\\)" +msgid "node.turbineVent.label" +msgstr "Extracteur éolien" -# Source-Hash: e4cd64b1680ac0d2 +# Source-Hash: e3d2aaaf5c72bc3b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A named group of zones forming one apartment, hotel room or commercial lot." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split2" -msgstr "Partager" +msgid "node.unit.description" +msgstr "Groupe nommé de zones formant un appartement, une chambre d’hôtel ou un lot commercial." -# Source-Hash: 15b0adc705923a27 +# Source-Hash: 062cc0f1afef0c52 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Swap panes" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Unit" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.swapPanes" -msgstr "Inverser les volets" +msgid "node.unit.label" +msgstr "Lot" -# Source-Hash: 9781bcdb7a8549e2 +# Source-Hash: 6c753f6234766116 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin from the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinFromTheViewBar" -msgstr "Désépingler de la barre de vues" +msgid "node.wall.description" +msgstr "Tronçon de mur droit ou courbe. Accueille portes, fenêtres, appentis et éléments muraux." -# Source-Hash: f667358dec4abdea +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wall" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinLabel" -msgstr "Désépingler {label}" +msgid "node.wall.label" +msgstr "Mur" -# Source-Hash: e96581f0bbf9fa91 +# Source-Hash: ea6a51e66eb0c0dc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Veil the ground over a level below grade" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A window cut into a wall. Animated open/close for opening windows." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.veilTheGroundOverALevel" -msgstr "Voiler le sol au-dessus d’un niveau sous le terrain" +msgid "node.window.description" +msgstr "Fenêtre découpée dans un mur, avec ouverture animée pour les ouvrants." -# Source-Hash: fb82f09f8ed3059e +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Window" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.views" -msgstr "Vues" +msgid "node.window.label" +msgstr "Fenêtre" + +# Source-Hash: 4a4d97a4101793b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A polygonal site zone (lawn, water, paving) with a TSL gradient material." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.zone.description" +msgstr "Zone de terrain polygonale (pelouse, eau, revêtement) avec un matériau dégradé TSL." + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.zone.label" +msgstr "Zone" # Source-Hash: 8bf25afa3cb8baea # Review: human diff --git a/packages/editor/src/i18n/locales/ja/messages.po b/packages/editor/src/i18n/locales/ja/messages.po index 213854a99a..7364245b3b 100644 --- a/packages/editor/src/i18n/locales/ja/messages.po +++ b/packages/editor/src/i18n/locales/ja/messages.po @@ -23,1205 +23,7345 @@ msgstr "" msgid "app.appShell.pascalHome" msgstr "Pascal ホーム" -# Source-Hash: 2ee62be78ba76f53 +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "All projects" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.allProjects" -msgstr "すべてのプロジェクト" +msgid "app.buildTab.addGate" +msgstr "門を追加" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Open Passage" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.preview" -msgstr "プレビュー" +msgid "app.buildTab.addOpenPassage" +msgstr "通路を追加" -# Source-Hash: 9f2cbc9214c8f7b0 +# Source-Hash: 9a4d56454dc89966 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Project name" -#: apps/editor/components/editor-navbar.tsx +# English: "Add to rooms" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.projectName" -msgstr "プロジェクト名" +msgid "app.buildTab.addToRooms" +msgstr "部屋に追加" -# Source-Hash: 150e143a84240eee +# Source-Hash: a17210912addc85f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rename project" -#: apps/editor/components/editor-navbar.tsx +# English: "← All build tools" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.renameProject" -msgstr "プロジェクト名を変更" +msgid "app.buildTab.allBuildTools" +msgstr "← すべての建築ツール" -# Source-Hash: 331e1584943b09b9 +# Source-Hash: 6b63404967e1d5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share" -#: apps/editor/components/editor-navbar.tsx +# English: "Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.share" -msgstr "共有" +msgid "app.buildTab.chooseGateOrOpenPassageThen" +msgstr "門または通路を選び、フェンス上の位置をクリックします。配置した門と開口はシーングラフで各フェンスの下にあります。" -# Source-Hash: 703e1b4b9b715d3b +# Source-Hash: 8fd051e1e1a6c1a1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Anyone with the link can view this project. They cannot edit it." -#: apps/editor/components/share-panel.tsx +# English: "Click a lineset to lay the line beside it." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.anyoneWithTheLinkCanView" -msgstr "リンクを知っている人は誰でもこのプロジェクトを閲覧できます。編集はできません。" +msgid "app.buildTab.clickALinesetToLayThe" +msgstr "冷媒配管をクリックして、その横に配管します。" -# Source-Hash: 07e04484867c17d3 +# Source-Hash: 7308869944020839 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copied" -#: apps/editor/components/share-panel.tsx +# English: "Double gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copied" -msgstr "コピーしました" +msgid "app.buildTab.doubleGate" +msgstr "両開き門" -# Source-Hash: 4f60d1e142affa9c +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copy" -#: apps/editor/components/share-panel.tsx +# English: "Features & extensions" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copy" -msgstr "コピー" +msgid "app.buildTab.featuresExtensions" +msgstr "部材と増築" -# Source-Hash: 8ff50e1a9962a4db +# Source-Hash: b18788f1d889c1d0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not read the sharing state." -#: apps/editor/components/share-panel.tsx +# English: "Fence features" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotReadTheSharingState" -msgstr "共有状態を読み込めませんでした。" +msgid "app.buildTab.fenceFeatures" +msgstr "フェンスの部材" -# Source-Hash: 791e281338a51483 +# Source-Hash: 62803100bd6e7cc2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn off the public link." -#: apps/editor/components/share-panel.tsx +# English: "Follow lineset" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOffThePublic" -msgstr "公開リンクをオフにできませんでした。" +msgid "app.buildTab.followLineset" +msgstr "冷媒配管に沿う" -# Source-Hash: 2c5ddecfd652ba63 +# Source-Hash: 4a479aa23542d766 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn on the public link." -#: apps/editor/components/share-panel.tsx +# English: "Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOnThePublic" -msgstr "公開リンクをオンにできませんでした。" +msgid "app.buildTab.gate" +msgstr "門" -# Source-Hash: 15e49d4da8765318 +# Source-Hash: 54098b5ee574737a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed code" -#: apps/editor/components/share-panel.tsx +# English: "Gate style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedCode" -msgstr "埋め込みコード" +msgid "app.buildTab.gateStyle" +msgstr "門のスタイル" -# Source-Hash: d4523c2d303f99b0 +# Source-Hash: 8fec7e969045a8e7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed link" -#: apps/editor/components/share-panel.tsx +# English: "Horizontal boards" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedLink" -msgstr "埋め込みリンク" +msgid "app.buildTab.horizontalBoards" +msgstr "横板" -# Source-Hash: 252f2cbf5e1609a5 +# Source-Hash: 09197c4fea516277 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Hide controls" -#: apps/editor/components/share-panel.tsx +# English: "Hover a fence to preview. Click to place. Esc cancels. Leave room between openings." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.hideControls" -msgstr "コントロールを非表示" +msgid "app.buildTab.hoverAFenceToPreviewClick" +msgstr "フェンスにホバーしてプレビュー。クリックで配置、Esc でキャンセル。開口の間は空けてください。" -# Source-Hash: ba77c0610a63bb2b +# Source-Hash: c390ba248e629b9e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Link" -#: apps/editor/components/share-panel.tsx +# English: "Leaves" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.link" -msgstr "リンク" +msgid "app.buildTab.leaves" +msgstr "扉" -# Source-Hash: a2560430aaec31d9 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Only the 3D view, no header or toolbar." -#: apps/editor/components/share-panel.tsx +# English: "Liquid Line" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.onlyThe3dViewNoHeader" -msgstr "3D ビューのみ。ヘッダーとツールバーは表示しません。" +msgid "app.buildTab.liquidLine" +msgstr "液管" -# Source-Hash: 3e52f04f92e08070 +# Source-Hash: c15c1af69ec5c1eb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Open" -#: apps/editor/components/share-panel.tsx +# English: "Match fence style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.open" -msgstr "開く" +msgid "app.buildTab.matchFenceStyle" +msgstr "フェンスのスタイルに合わせる" -# Source-Hash: b34faaa5378056c6 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Public link" -#: apps/editor/components/share-panel.tsx +# English: "MEP" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.publicLink" -msgstr "公開リンク" +msgid "app.buildTab.mep" +msgstr "設備" -# Source-Hash: 7525e8007fcab09b +# Source-Hash: 50accd740fa2e736 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share project" -#: apps/editor/components/share-panel.tsx +# English: "Off" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.shareProject" -msgstr "プロジェクトを共有" +msgid "app.buildTab.off" +msgstr "オフ" -# Source-Hash: 3d3f438d5a49eba7 +# Source-Hash: 9cc01faad79c28da # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Automatic dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "On" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.automaticDimensions" -msgstr "自動寸法" +msgid "app.buildTab.on" +msgstr "オン" -# Source-Hash: 14622745dbf93f4c +# Source-Hash: e04298381837252f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Camera" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.camera" -msgstr "カメラ" +msgid "app.buildTab.opening" +msgstr "開口" -# Source-Hash: e6bce525c47ba3ac +# Source-Hash: 9514d3c022e68808 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Clean plan; dimensions appear with selection" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening width (m)" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" -msgstr "すっきりした図面。寸法は選択時に表示" +msgid "app.buildTab.openingWidthM" +msgstr "開口幅(m)" -# Source-Hash: 61ce356577cfb04a +# Source-Hash: 6b108fb1d0eb8f9d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Collapse sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Open rails" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.collapseSidebar" -msgstr "サイドバーを折りたたむ" +msgid "app.buildTab.openRails" +msgstr "横桟" -# Source-Hash: 2416a48df28d6205 +# Source-Hash: a5a7af5e5fff1c81 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Crisp, opaque edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Outdoor" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.crispOpaqueEdgeLines" -msgstr "くっきりした不透明なエッジ線" +msgid "app.buildTab.outdoor" +msgstr "屋外" -# Source-Hash: 4da8b3678ed77b45 +# Source-Hash: 9295ddc2805b21e2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Cutaway" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Picket" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cutaway" -msgstr "カットアウェイ" +msgid "app.buildTab.picket" +msgstr "ピケット" -# Source-Hash: 4ca0e0e73229540c +# Source-Hash: 3a08ede9e51d5395 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof type" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.default" -msgstr "標準" +msgid "app.buildTab.roofType" +msgstr "屋根の種類" -# Source-Hash: a313661ef9dd0a65 +# Source-Hash: 0f9daa442776a317 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rooms already create their floor and ceiling. Use these for platforms and one-off structure." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.display" -msgstr "表示" +msgid "app.buildTab.roomsAlreadyCreateTheirFloorAnd" +msgstr "部屋は床と天井を自動で作ります。これらは台やその他の単独の構造に使います。" -# Source-Hash: d0db46f206a88e2e +# Source-Hash: fc79fd0c7730de76 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display settings" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search build tools and kitchen items" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.displaySettings" -msgstr "表示設定" +msgid "app.buildTab.searchBuildToolsAndKitchenItems" +msgstr "建築ツールとキッチンアイテムを検索" -# Source-Hash: 0286962ab8e9cfcd +# Source-Hash: dc1901f276edca6f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Door/window marks" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search tools, fridge, sink…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.doorWindowMarks" -msgstr "建具記号" +msgid "app.buildTab.searchToolsFridgeSink" +msgstr "ツール、冷蔵庫、シンクを検索…" -# Source-Hash: 027bbc8b7287c06a +# Source-Hash: 9558db89023d4f05 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Edges" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select a curved wall to match its radius and arc." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.edges" -msgstr "エッジ" +msgid "app.buildTab.selectACurvedWallToMatch" +msgstr "曲面の壁を選ぶと、その半径と円弧に合わせます。" -# Source-Hash: d86126c5d16c6238 +# Source-Hash: d327097d9ac1099f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Enter VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Single gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.enterVr" -msgstr "VR を開始" +msgid "app.buildTab.singleGate" +msgstr "片開き門" -# Source-Hash: eb99fb0b382e58cd +# Source-Hash: 99acd5128c51c8a7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exit VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab, ceiling, column…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exitVr" -msgstr "VR を終了" +msgid "app.buildTab.slabCeilingColumn" +msgstr "スラブ、天井、柱…" -# Source-Hash: aeac665749d3101d +# Source-Hash: af6f8885fe0fa4e9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expand sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Solid privacy" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expandSidebar" -msgstr "サイドバーを展開" +msgid "app.buildTab.solidPrivacy" +msgstr "目隠し" -# Source-Hash: 08c178ee733ff009 +# Source-Hash: e2b1a3bb9630b33b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expert" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Trace a line alongside an existing lineset (F)." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expert" -msgstr "エキスパート" +msgid "app.buildTab.traceALineAlongsideAnExisting" +msgstr "既存の冷媒配管に沿って配管 (F)。" -# Source-Hash: be12f8788f1f0a05 +# Source-Hash: eba3df14a2de0812 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exploded" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Vertical slats" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exploded" -msgstr "分解" +msgid "app.buildTab.verticalSlats" +msgstr "縦板" -# Source-Hash: c6f865a366ef5755 +# Source-Hash: 2ee62be78ba76f53 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Face of stud" -#: apps/editor/components/viewer-toolbar.tsx +# English: "All projects" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faceOfStud" -msgstr "下地面" +msgid "app.editorNavbar.allProjects" +msgstr "すべてのプロジェクト" -# Source-Hash: 0c583f1d4201293b +# Source-Hash: 20226b68d5467072 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Faint outline of major creases" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Preview" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faintOutlineOfMajorCreases" -msgstr "主な折れ目の淡い輪郭" +msgid "app.editorNavbar.preview" +msgstr "プレビュー" -# Source-Hash: 08ecd5878b08139d +# Source-Hash: 9f2cbc9214c8f7b0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Feet & inches" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Project name" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.feetInches" -msgstr "フィート・インチ" +msgid "app.editorNavbar.projectName" +msgstr "プロジェクト名" -# Source-Hash: 43b8017fa821c46c +# Source-Hash: 150e143a84240eee # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Finished faces" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rename project" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.finishedFaces" -msgstr "仕上げ面" +msgid "app.editorNavbar.renameProject" +msgstr "プロジェクト名を変更" -# Source-Hash: 8827df1cdeb02ed9 +# Source-Hash: 331e1584943b09b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Flat and fast — no ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Share" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" -msgstr "フラットで高速 — アンビエントオクルージョンなし" +msgid "app.editorNavbar.share" +msgstr "共有" -# Source-Hash: 060a718cdcff61b3 +# Source-Hash: 4b2f676fb4c9ec63 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add {label}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanAnnotations" -msgstr "平面図の注記" +msgid "app.kitchenBrowser.addLabel" +msgstr "{label}を追加" -# Source-Hash: 483171f79dc32ae5 +# Source-Hash: 53f98cc505aacbb1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add to kitchen" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanMode" -msgstr "平面図モード" +msgid "app.kitchenBrowser.addToKitchen" +msgstr "キッチンに追加" -# Source-Hash: 8bb9e54fc786ca77 +# Source-Hash: 923a2e81dcc77852 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Choose an item, then click to place it. Appliances include their cabinetry." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullAmbientOcclusion" -msgstr "フルアンビエントオクルージョン" +msgid "app.kitchenBrowser.chooseAnItemThenClickTo" +msgstr "アイテムを選び、クリックして配置します。家電には収納も含まれます。" -# Source-Hash: 91fd3544d9ce16bf +# Source-Hash: 44156a2c888e8a4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full documentation and annotation controls" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find in this project · {length}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" -msgstr "図面化と注記の全コントロール" +msgid "app.kitchenBrowser.findInThisProjectLength" +msgstr "このプロジェクト内を検索 · {length}" -# Source-Hash: 131bac2467f4fdf6 +# Source-Hash: aeda65db67edac21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full height" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find {name}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullHeight" -msgstr "全高" +msgid "app.kitchenBrowser.findName" +msgstr "{name}を探す" -# Source-Hash: c9838bc98cb35125 +# Source-Hash: c1d847411ba09cd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full wall thickness" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · Add" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullWallThickness" -msgstr "壁の全厚" +msgid "app.kitchenBrowser.groupAdd" +msgstr "キッチン · 追加" -# Source-Hash: 7e4a0a38f694be6b +# Source-Hash: bb3f4f8d3407c409 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Grid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · In this project" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.grid" -msgstr "グリッド" +msgid "app.kitchenBrowser.groupInThisProject" +msgstr "キッチン · このプロジェクト内" -# Source-Hash: 4bf4a6861d7d633e +# Source-Hash: 25ffad31086309f1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Levels: {mode}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen cabinet" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.levelsMode" -msgstr "階層: {mode}" +msgid "app.kitchenBrowser.kitchenCabinet" +msgstr "キッチンキャビネット" -# Source-Hash: 803532407fb5962b +# Source-Hash: a5af7817a7e8947d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Low" -#: apps/editor/components/viewer-toolbar.tsx +# English: "No matching kitchen items placed yet." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.low" -msgstr "低" +msgid "app.kitchenBrowser.noMatchingKitchenItemsPlacedYet" +msgstr "該当するキッチンアイテムはまだ配置されていません。" -# Source-Hash: 32f9a404c0bdce10 +# Source-Hash: 640155f99c25773b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Magnetic snap" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select and show in scene" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.magneticSnap" -msgstr "マグネットスナップ" +msgid "app.kitchenBrowser.selectAndShowInScene" +msgstr "選択してシーンに表示" -# Source-Hash: 387082cd5f118bed +# Source-Hash: 4275c05172abd7fb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Ceiling" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manual" -msgstr "手動" +msgid "app.lib.buildPalette.ceiling" +msgstr "天井" -# Source-Hash: 2fb69122dd996c0a +# Source-Hash: 3530ac1f4046cd22 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Column" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manualDimensions" -msgstr "手動寸法" +msgid "app.lib.buildPalette.column" +msgstr "柱" -# Source-Hash: c6aa74075f37313a +# Source-Hash: 787e10f5db16904e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Door" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.measurements" -msgstr "計測" +msgid "app.lib.buildPalette.door" +msgstr "ドア" -# Source-Hash: 0a39470be3b84536 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Meters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.meters" -msgstr "メートル" +msgid "app.lib.buildPalette.duct" +msgstr "ダクト" -# Source-Hash: 83cce6c521e71d01 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Millimeters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.millimeters" -msgstr "ミリメートル" +msgid "app.lib.buildPalette.dwvPipe" +msgstr "排水管" -# Source-Hash: b784527bb90b9c5e +# Source-Hash: ab5cbab7be160a1c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Elevator" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.n3dMeasurements" -msgstr "3D 計測" +msgid "app.lib.buildPalette.elevator" +msgstr "エレベーター" -# Source-Hash: 4ff58913a4492199 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "No edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.noEdgeLines" -msgstr "エッジ線なし" +msgid "app.lib.buildPalette.fence" +msgstr "フェンス" -# Source-Hash: 50accd740fa2e736 +# Source-Hash: 3bf1c1a8dbb93743 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Off" -#: apps/editor/components/viewer-toolbar.tsx +# English: "HVAC Unit" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.off" -msgstr "オフ" +msgid "app.lib.buildPalette.hvacUnit" +msgstr "空調機" -# Source-Hash: 9cc01faad79c28da +# Source-Hash: 1176d2568d093bf1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "On" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.on" -msgstr "オン" +msgid "app.lib.buildPalette.kitchen" +msgstr "キッチン" -# Source-Hash: ed59dd8ce7797a66 +# Source-Hash: 362b03eba9d8234c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Orthographic" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Lineset" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.orthographic" -msgstr "平行投影" +msgid "app.lib.buildPalette.lineset" +msgstr "冷媒配管" -# Source-Hash: 316e25993ff72b88 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Perspective" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Liquid Line" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.perspective" -msgstr "透視投影" +msgid "app.lib.buildPalette.liquidLine" +msgstr "液管" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/viewer-toolbar.tsx +# English: "MEP" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.preview" -msgstr "プレビュー" +msgid "app.lib.buildPalette.mep" +msgstr "設備" -# Source-Hash: 34c20b72a42ca618 +# Source-Hash: 161e5386b939e1bc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Register" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.previewMode" -msgstr "プレビューモード" +msgid "app.lib.buildPalette.register" +msgstr "吹出口" -# Source-Hash: 5e58af99d6d4fa6a +# Source-Hash: f5f730969df63d1d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Render" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.render" -msgstr "レンダリング" +msgid "app.lib.buildPalette.roof" +msgstr "屋根" -# Source-Hash: f363702a10aedaeb +# Source-Hash: d7145f84f8e0e3fe # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rendered" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Shelf" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.rendered" -msgstr "レンダリング" +msgid "app.lib.buildPalette.shelf" +msgstr "棚" -# Source-Hash: 4959d5538efc595c +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Room labels" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.roomLabels" -msgstr "部屋ラベル" +msgid "app.lib.buildPalette.slab" +msgstr "スラブ" -# Source-Hash: 82720864e5034398 +# Source-Hash: 95e8af5d2b3ca73d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Scene theme" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Spawn point" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.sceneTheme" -msgstr "シーンテーマ" +msgid "app.lib.buildPalette.spawnPoint" +msgstr "スポーン地点" -# Source-Hash: 4c6bcb30b40047fc +# Source-Hash: f05bc67c57e4d530 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Shadows" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Stairs" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.shadows" -msgstr "影" +msgid "app.lib.buildPalette.stairs" +msgstr "階段" -# Source-Hash: 59dc62417b44931d +# Source-Hash: 96281876ce53ba08 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Single wall axis" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrace" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.singleWallAxis" -msgstr "壁の中心線" +msgid "app.lib.buildPalette.terrace" +msgstr "テラス" -# Source-Hash: d266d83ec490df4e +# Source-Hash: d457508edd5bb8cf # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Soft" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrain" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.soft" -msgstr "ソフト" +msgid "app.lib.buildPalette.terrain" +msgstr "地形" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Wall" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solid" -msgstr "ソリッド" +msgid "app.lib.buildPalette.wall" +msgstr "壁" -# Source-Hash: e9f59b513f2f45ac +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solo" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Window" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solo" -msgstr "単独" +msgid "app.lib.buildPalette.window" +msgstr "窓" -# Source-Hash: 481b7608ce12139b +# Source-Hash: d40c50013043284f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stack" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Fitting" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stack" -msgstr "積み重ね" +msgid "app.lib.buildPanelModel.addFitting" +msgstr "継手を追加" -# Source-Hash: 61ad94ca68b0458e +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stair annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Gate" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stairAnnotations" -msgstr "階段の注記" +msgid "app.lib.buildPanelModel.addGate" +msgstr "門を追加" -# Source-Hash: f82927a01d4c5e45 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Strong" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Open Passage" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.strong" -msgstr "強" +msgid "app.lib.buildPanelModel.addOpenPassage" +msgstr "通路を追加" -# Source-Hash: e1be031e67d95382 +# Source-Hash: 7136b5836de6e69f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural core face" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Trap" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralCoreFace" -msgstr "構造躯体面" +msgid "app.lib.buildPanelModel.addTrap" +msgstr "トラップを追加" -# Source-Hash: efc50964d7b0ec47 +# Source-Hash: 8f4b2028ad75465d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural grids & column centers" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Build" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralGridsColumnCenters" -msgstr "構造通り芯と柱芯" +msgid "app.lib.buildPanelModel.build" +msgstr "建築" -# Source-Hash: 5ce4f6b80cd30f86 +# Source-Hash: a23831beeb35ad3a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Translucent" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Create from" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.translucent" -msgstr "半透明" +msgid "app.lib.buildPanelModel.createFrom" +msgstr "作成元" -# Source-Hash: b404dded35241274 +# Source-Hash: 8146c309bd8326f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Units" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Draw the roof footprint with two corner clicks." +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.units" -msgstr "単位" +msgid "app.lib.buildPanelModel.drawTheRoofFootprintWithTwo" +msgstr "2つの角をクリックして屋根の外形を描きます。" -# Source-Hash: faf51e28b748e0d9 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walkthrough" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.walkthrough" -msgstr "ウォークスルー" +msgid "app.lib.buildPanelModel.duct" +msgstr "ダクト" -# Source-Hash: 62281975e51da7e3 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall centerline" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallCenterline" -msgstr "壁芯" +msgid "app.lib.buildPanelModel.dwvPipe" +msgstr "排水管" -# Source-Hash: ff145d7003118ec6 +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Features & extensions" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallDimensions" -msgstr "壁の寸法" +msgid "app.lib.buildPanelModel.featuresExtensions" +msgstr "部材と増築" -# Source-Hash: 13969d1d6e310aa4 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walls: {label}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallsLabel" -msgstr "壁: {label}" +msgid "app.lib.buildPanelModel.fence" +msgstr "フェンス" -# Source-Hash: 8caa959c0ae800c3 -# Review: human -# English: "Basement" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basement" -msgstr "地下1階" +# Source-Hash: 62803100bd6e7cc2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow lineset" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.followLineset" +msgstr "冷媒配管に沿う" -# Source-Hash: 14927085ee91ba05 -# Review: human -# English: "Basement {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basementNumber" -msgstr "地下{number}階" +# Source-Hash: c80972ec078ac551 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gates & openings" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.gatesOpenings" +msgstr "門と開口" -# Source-Hash: e59074a7b9b3f56e -# Review: human -# English: "Floor {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.floorNumber" -msgstr "{number}階" +# Source-Hash: 3720347aa16ee777 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a room to preview its boundary, then click to place." +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.hoverARoomToPreviewIts" +msgstr "部屋にホバーして境界をプレビューし、クリックで配置します。" -# Source-Hash: cde3efc9b7ddfa41 -# Review: human -# English: "Ground floor" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.groundFloor" -msgstr "1階" +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.kitchen" +msgstr "キッチン" -# Source-Hash: f571cb2d06ae01ae -# Review: human -# English: "Advanced" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.advanced" -msgstr "詳細" +# Source-Hash: 95057eef5cd69340 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "MEP" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.mep" +msgstr "設備" -# Source-Hash: fb40866c2d6db5fb -# Review: human -# English: "walls · floor · ceiling" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.hint" -msgstr "壁 · 床 · 天井" +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.modularCabinet" +msgstr "モジュール式キャビネット" -# Source-Hash: 271039bd919dc4c1 -# Review: human -# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.idle" +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.off" +msgstr "オフ" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.on" +msgstr "オン" + +# Source-Hash: 3fafdc69e7756f19 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Painting" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.painting" +msgstr "塗装" + +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roof" +msgstr "屋根" + +# Source-Hash: 3a08ede9e51d5395 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof type" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roofType" +msgstr "屋根の種類" + +# Source-Hash: 0c35bee851cc57a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# tool} other {# tools}}" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.toolCount" +msgstr "{count, plural, other {ツール # 個}}" + +# Source-Hash: 3241ecabee8221a1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Conical" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.conical" +msgstr "円錐" + +# Source-Hash: b5c56dd8c68de309 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.draw" +msgstr "描画" + +# Source-Hash: 6949d667043bee0b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dutch" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.dutch" +msgstr "入母屋" + +# Source-Hash: 9cab4d4c95f63cdd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.flat" +msgstr "陸屋根" + +# Source-Hash: deaffa095d126dfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gable" +msgstr "切妻" + +# Source-Hash: 7f53d9ffca39984a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gambrel" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gambrel" +msgstr "腰折れ" + +# Source-Hash: 9eda0ea8d447066d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hip" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.hip" +msgstr "寄棟" + +# Source-Hash: 7f7bb0e875af3260 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mansard" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.mansard" +msgstr "マンサード" + +# Source-Hash: 612dcd5bf06a79c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.room" +msgstr "部屋" + +# Source-Hash: c8d0df27faa3feaa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shed" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.shed" +msgstr "片流れ" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.wall" +msgstr "壁" + +# Source-Hash: 703e1b4b9b715d3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Anyone with the link can view this project. They cannot edit it." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.anyoneWithTheLinkCanView" +msgstr "リンクを知っている人は誰でもこのプロジェクトを閲覧できます。編集はできません。" + +# Source-Hash: 07e04484867c17d3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copied" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copied" +msgstr "コピーしました" + +# Source-Hash: 4f60d1e142affa9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copy" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copy" +msgstr "コピー" + +# Source-Hash: 8ff50e1a9962a4db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not read the sharing state." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotReadTheSharingState" +msgstr "共有状態を読み込めませんでした。" + +# Source-Hash: 791e281338a51483 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn off the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOffThePublic" +msgstr "公開リンクをオフにできませんでした。" + +# Source-Hash: 2c5ddecfd652ba63 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn on the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOnThePublic" +msgstr "公開リンクをオンにできませんでした。" + +# Source-Hash: 15e49d4da8765318 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed code" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedCode" +msgstr "埋め込みコード" + +# Source-Hash: d4523c2d303f99b0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedLink" +msgstr "埋め込みリンク" + +# Source-Hash: 252f2cbf5e1609a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide controls" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.hideControls" +msgstr "コントロールを非表示" + +# Source-Hash: ba77c0610a63bb2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.link" +msgstr "リンク" + +# Source-Hash: a2560430aaec31d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Only the 3D view, no header or toolbar." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.onlyThe3dViewNoHeader" +msgstr "3D ビューのみ。ヘッダーとツールバーは表示しません。" + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.open" +msgstr "開く" + +# Source-Hash: b34faaa5378056c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Public link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.publicLink" +msgstr "公開リンク" + +# Source-Hash: 7525e8007fcab09b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Share project" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.shareProject" +msgstr "プロジェクトを共有" + +# Source-Hash: 3d3f438d5a49eba7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Automatic dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.automaticDimensions" +msgstr "自動寸法" + +# Source-Hash: 14622745dbf93f4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.camera" +msgstr "カメラ" + +# Source-Hash: e6bce525c47ba3ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clean plan; dimensions appear with selection" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" +msgstr "すっきりした図面。寸法は選択時に表示" + +# Source-Hash: 61ce356577cfb04a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Collapse sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.collapseSidebar" +msgstr "サイドバーを折りたたむ" + +# Source-Hash: 2416a48df28d6205 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Crisp, opaque edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.crispOpaqueEdgeLines" +msgstr "くっきりした不透明なエッジ線" + +# Source-Hash: 4da8b3678ed77b45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cutaway" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cutaway" +msgstr "カットアウェイ" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.default" +msgstr "標準" + +# Source-Hash: a313661ef9dd0a65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.display" +msgstr "表示" + +# Source-Hash: d0db46f206a88e2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display settings" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.displaySettings" +msgstr "表示設定" + +# Source-Hash: 0286962ab8e9cfcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door/window marks" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.doorWindowMarks" +msgstr "建具記号" + +# Source-Hash: 027bbc8b7287c06a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edges" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.edges" +msgstr "エッジ" + +# Source-Hash: d86126c5d16c6238 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.enterVr" +msgstr "VR を開始" + +# Source-Hash: eb99fb0b382e58cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exitVr" +msgstr "VR を終了" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expandSidebar" +msgstr "サイドバーを展開" + +# Source-Hash: 08c178ee733ff009 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expert" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expert" +msgstr "エキスパート" + +# Source-Hash: be12f8788f1f0a05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exploded" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exploded" +msgstr "分解" + +# Source-Hash: c6f865a366ef5755 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Face of stud" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faceOfStud" +msgstr "下地面" + +# Source-Hash: 0c583f1d4201293b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Faint outline of major creases" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faintOutlineOfMajorCreases" +msgstr "主な折れ目の淡い輪郭" + +# Source-Hash: 08ecd5878b08139d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Feet & inches" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.feetInches" +msgstr "フィート・インチ" + +# Source-Hash: 43b8017fa821c46c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finished faces" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.finishedFaces" +msgstr "仕上げ面" + +# Source-Hash: 8827df1cdeb02ed9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat and fast — no ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" +msgstr "フラットで高速 — アンビエントオクルージョンなし" + +# Source-Hash: 060a718cdcff61b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanAnnotations" +msgstr "平面図の注記" + +# Source-Hash: 483171f79dc32ae5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanMode" +msgstr "平面図モード" + +# Source-Hash: 8bb9e54fc786ca77 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullAmbientOcclusion" +msgstr "フルアンビエントオクルージョン" + +# Source-Hash: 91fd3544d9ce16bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full documentation and annotation controls" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" +msgstr "図面化と注記の全コントロール" + +# Source-Hash: 131bac2467f4fdf6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full height" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullHeight" +msgstr "全高" + +# Source-Hash: c9838bc98cb35125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full wall thickness" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullWallThickness" +msgstr "壁の全厚" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.grid" +msgstr "グリッド" + +# Source-Hash: 4bf4a6861d7d633e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Levels: {mode}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.levelsMode" +msgstr "階層: {mode}" + +# Source-Hash: 803532407fb5962b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.low" +msgstr "低" + +# Source-Hash: 32f9a404c0bdce10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Magnetic snap" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.magneticSnap" +msgstr "マグネットスナップ" + +# Source-Hash: 387082cd5f118bed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manual" +msgstr "手動" + +# Source-Hash: 2fb69122dd996c0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manualDimensions" +msgstr "手動寸法" + +# Source-Hash: c6aa74075f37313a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.measurements" +msgstr "計測" + +# Source-Hash: 0a39470be3b84536 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Meters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.meters" +msgstr "メートル" + +# Source-Hash: 83cce6c521e71d01 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Millimeters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.millimeters" +msgstr "ミリメートル" + +# Source-Hash: b784527bb90b9c5e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.n3dMeasurements" +msgstr "3D 計測" + +# Source-Hash: 4ff58913a4492199 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.noEdgeLines" +msgstr "エッジ線なし" + +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.off" +msgstr "オフ" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.on" +msgstr "オン" + +# Source-Hash: ed59dd8ce7797a66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orthographic" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.orthographic" +msgstr "平行投影" + +# Source-Hash: 316e25993ff72b88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perspective" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.perspective" +msgstr "透視投影" + +# Source-Hash: 20226b68d5467072 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.preview" +msgstr "プレビュー" + +# Source-Hash: 34c20b72a42ca618 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.previewMode" +msgstr "プレビューモード" + +# Source-Hash: 5e58af99d6d4fa6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Render" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.render" +msgstr "レンダリング" + +# Source-Hash: f363702a10aedaeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rendered" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.rendered" +msgstr "レンダリング" + +# Source-Hash: 4959d5538efc595c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room labels" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.roomLabels" +msgstr "部屋ラベル" + +# Source-Hash: 82720864e5034398 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scene theme" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.sceneTheme" +msgstr "シーンテーマ" + +# Source-Hash: 4c6bcb30b40047fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shadows" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.shadows" +msgstr "影" + +# Source-Hash: 59dc62417b44931d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single wall axis" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.singleWallAxis" +msgstr "壁の中心線" + +# Source-Hash: d266d83ec490df4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Soft" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.soft" +msgstr "ソフト" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solid" +msgstr "ソリッド" + +# Source-Hash: e9f59b513f2f45ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solo" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solo" +msgstr "単独" + +# Source-Hash: 481b7608ce12139b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stack" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stack" +msgstr "積み重ね" + +# Source-Hash: 61ad94ca68b0458e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stair annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stairAnnotations" +msgstr "階段の注記" + +# Source-Hash: f82927a01d4c5e45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Strong" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.strong" +msgstr "強" + +# Source-Hash: e1be031e67d95382 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural core face" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralCoreFace" +msgstr "構造躯体面" + +# Source-Hash: efc50964d7b0ec47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural grids & column centers" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralGridsColumnCenters" +msgstr "構造通り芯と柱芯" + +# Source-Hash: 5ce4f6b80cd30f86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Translucent" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.translucent" +msgstr "半透明" + +# Source-Hash: b404dded35241274 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Units" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.units" +msgstr "単位" + +# Source-Hash: faf51e28b748e0d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walkthrough" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.walkthrough" +msgstr "ウォークスルー" + +# Source-Hash: 62281975e51da7e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall centerline" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallCenterline" +msgstr "壁芯" + +# Source-Hash: ff145d7003118ec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallDimensions" +msgstr "壁の寸法" + +# Source-Hash: 13969d1d6e310aa4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls: {label}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallsLabel" +msgstr "壁: {label}" + +# Source-Hash: 8caa959c0ae800c3 +# Review: human +# English: "Basement" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basement" +msgstr "地下1階" + +# Source-Hash: 14927085ee91ba05 +# Review: human +# English: "Basement {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basementNumber" +msgstr "地下{number}階" + +# Source-Hash: e59074a7b9b3f56e +# Review: human +# English: "Floor {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.floorNumber" +msgstr "{number}階" + +# Source-Hash: cde3efc9b7ddfa41 +# Review: human +# English: "Ground floor" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.groundFloor" +msgstr "1階" + +# Source-Hash: fdd8b3366021a1cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Left" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitLeft" +msgstr "左に回る" + +# Source-Hash: 4a56359f284a3b17 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Right" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitRight" +msgstr "右に回る" + +# Source-Hash: f5c12d738240f889 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top View" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.topView" +msgstr "上面図" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.delete" +msgstr "削除" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.select" +msgstr "選択" + +# Source-Hash: d9a257653600d5a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resume following" +#: packages/editor/src/components/ui/action-menu/follow-pascal-pill.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalPill.resumeFollowing" +msgstr "追従を再開" + +# Source-Hash: 4f073f8051cca3ef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: Off" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.off" +msgstr "Pascal を追従: オフ" + +# Source-Hash: 328ea04bb8cd12f4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: On" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.on" +msgstr "Pascal を追従: オン" + +# Source-Hash: 7f4dcb90defe1ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Appliance" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.appliance" +msgstr "家電" + +# Source-Hash: 0655333424a8b6fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bathroom" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.bathroom" +msgstr "浴室" + +# Source-Hash: ed68e72f5353712b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furniture" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.furniture" +msgstr "家具" + +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.kitchen" +msgstr "キッチン" + +# Source-Hash: a5a7af5e5fff1c81 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outdoor" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.outdoor" +msgstr "屋外" + +# Source-Hash: c69865ec5d9d1ac9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angle" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angle" +msgstr "角度" + +# Source-Hash: 622f566fe1e3d8e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angular dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angularDimension" +msgstr "角度寸法" + +# Source-Hash: 7e3b0d541355305e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Arc length" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.arcLength" +msgstr "弧長" + +# Source-Hash: 8332ab41e22958f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Area" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.area" +msgstr "面積" + +# Source-Hash: 88c7750ed51d47a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center mark" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.centerMark" +msgstr "中心マーク" + +# Source-Hash: 634912dabb092872 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chord dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.chordDimension" +msgstr "弦の寸法" + +# Source-Hash: 3cb090120253f68f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.continuousDimension" +msgstr "連続寸法" + +# Source-Hash: fb91b1d43b8362d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Coordinate dimensions" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.coordinateDimensions" +msgstr "座標寸法" + +# Source-Hash: 530cb7ea461e8298 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Diameter dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.diameterDimension" +msgstr "直径寸法" + +# Source-Hash: fe7ddb094aa8ff4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Distance" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.distance" +msgstr "距離" + +# Source-Hash: fee6203bb9046929 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.floorPlan" +msgstr "平面図" + +# Source-Hash: a73539fc472e2e12 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Linear dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.linearDimension" +msgstr "直線寸法" + +# Source-Hash: 6bba239f244c3d28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement options" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementOptions" +msgstr "計測オプション" + +# Source-Hash: 2cf5ca9b834ce8d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement type" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementType" +msgstr "計測の種類" + +# Source-Hash: 0431574a0e6d69d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measure: {selectedLabel}" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measureSelectedlabel" +msgstr "計測: {selectedLabel}" + +# Source-Hash: ac87e14dabd5a256 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perimeter" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.perimeter" +msgstr "周長" + +# Source-Hash: 6c9acc0589bdd4d6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Radius dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.radiusDimension" +msgstr "半径寸法" + +# Source-Hash: 01b0015e4e176124 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.smart" +msgstr "スマート" + +# Source-Hash: 429bd43d726de417 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Volume" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.volume" +msgstr "体積" + +# Source-Hash: 64f3eb5e1936906d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAsk" +msgstr "指して質問" + +# Source-Hash: d86d31e83f6f0888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask (C)" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskC" +msgstr "指して質問 (C)" + +# Source-Hash: 65622d2ef53c1f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask works in the 3D view" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskWorksInThe" +msgstr "指して質問は 3D ビューで使えます" + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ceiling" +msgstr "天井" + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.column" +msgstr "柱" + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.door" +msgstr "ドア" + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.duct" +msgstr "ダクト" + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ductFitting" +msgstr "ダクト継手" + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.dwvPipe" +msgstr "排水管" + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.elevator" +msgstr "エレベーター" + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.fence" +msgstr "フェンス" + +# Source-Hash: 7f4d93d5f2083844 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable Roof" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.gableRoof" +msgstr "切妻屋根" + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.hvacUnit" +msgstr "空調機" + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.lineset" +msgstr "冷媒配管" + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.liquidLine" +msgstr "液管" + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.pipeFitting" +msgstr "配管継手" + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.register" +msgstr "吹出口" + +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.shelf" +msgstr "棚" + +# Source-Hash: 8775bc8dc9593964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slab" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.slab" +msgstr "スラブ" + +# Source-Hash: 3e2f6b4274f592c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Spawn Point" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.spawnPoint" +msgstr "スポーン地点" + +# Source-Hash: f05bc67c57e4d530 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stairs" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.stairs" +msgstr "階段" + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.trap" +msgstr "トラップ" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.wall" +msgstr "壁" + +# Source-Hash: aa3c35ed33e181e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.window" +msgstr "窓" + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.zone" +msgstr "ゾーン" + +# Source-Hash: 43af78ba61aaa8ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "below" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.below" +msgstr "下" + +# Source-Hash: cdf3f12939ba108c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteGuideImage" +msgstr "ガイド画像を削除" + +# Source-Hash: 6add06abbafa8289 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete scan" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteScan" +msgstr "3Dスキャンを削除" + +# Source-Hash: 6f5e541cb5fb502f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# guide image on this level} other {# guide images on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideCount" +msgstr "{count, plural, other {この階層のガイド画像 # 件}}" + +# Source-Hash: 8a832a2f33757bf8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageNumber" +msgstr "ガイド画像 {number}" + +# Source-Hash: 7f3aaccfe8d1af1f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImages" +msgstr "ガイド画像" + +# Source-Hash: 9b1de02505434d74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageSettings" +msgstr "ガイド画像の設定" + +# Source-Hash: 892d5dd34372028b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guides" +msgstr "ガイド" + +# Source-Hash: ccfb05c78d47d6f9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesHidden" +msgstr "ガイド: 非表示" + +# Source-Hash: 6d7ca85c4f389991 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesVisible" +msgstr "ガイド: 表示" + +# Source-Hash: 5f6264ac469f57c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideGuideImages" +msgstr "ガイド画像を非表示" + +# Source-Hash: cae234c23229c80b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideReferenceFloor" +msgstr "参照階を非表示" + +# Source-Hash: 469a8416de876e0e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideScans" +msgstr "3Dスキャンを非表示" + +# Source-Hash: 22a59ae72d8c9504 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No lower floor available." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.noLowerFloorAvailable" +msgstr "下の階はありません。" + +# Source-Hash: 1c0b8a5503c5daeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Opacity" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.opacity" +msgstr "不透明度" + +# Source-Hash: 8bbd9bc90ac70a4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloor" +msgstr "参照階" + +# Source-Hash: 45493691a23c7690 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor: {selectedLevelName}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSelectedlevelname" +msgstr "参照階: {selectedLevelName}" + +# Source-Hash: 7178c7b5a4581367 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSettings" +msgstr "参照階の設定" + +# Source-Hash: a52848021f822f5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.references" +msgstr "参照" + +# Source-Hash: e59c9eec7dbd6ba1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload GLB meshes as scan references or blueprint images as guide references." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesEmpty" +msgstr "GLB メッシュを3Dスキャン参照として、図面画像をガイド参照としてアップロードします。" + +# Source-Hash: 3e73d06c3e96efba +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceSettings" +msgstr "参照の設定" + +# Source-Hash: aa0df2c2f00672e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesHidden" +msgstr "参照: 非表示" + +# Source-Hash: 9976708fc92bfa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesVisible" +msgstr "参照: 表示" + +# Source-Hash: 320a5f1ec012900b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser diagram" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.riserDiagram" +msgstr "立て管系統図" + +# Source-Hash: 357b3d3eaf878a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# scan on this level} other {# scans on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanCount" +msgstr "{count, plural, other {この階層の3Dスキャン # 件}}" + +# Source-Hash: f09f12547484c888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanNumber" +msgstr "3Dスキャン {number}" + +# Source-Hash: 3260bfa69cca50e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scans" +msgstr "3Dスキャン" + +# Source-Hash: c9c52015095997e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanSettings" +msgstr "3Dスキャンの設定" + +# Source-Hash: 60abc9f1a8aec65c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansHidden" +msgstr "3Dスキャン: 非表示" + +# Source-Hash: 2d2ff119a7dd7911 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansVisible" +msgstr "3Dスキャン: 表示" + +# Source-Hash: 8211234b205fd9a6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showGuideImages" +msgstr "ガイド画像を表示" + +# Source-Hash: 7786cae6acb04cfa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showReferenceFloor" +msgstr "参照階を表示" + +# Source-Hash: 6066f0b6cff8a910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showScans" +msgstr "3Dスキャンを表示" + +# Source-Hash: def6dff836767bda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload scan or guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.uploadScanOrGuideImage" +msgstr "3Dスキャンまたはガイド画像をアップロード" + +# Source-Hash: 6aee0962fc18c0f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back to home" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.backToHome" +msgstr "ホームに戻る" + +# Source-Hash: f571cb2d06ae01ae +# Review: human +# English: "Advanced" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.advanced" +msgstr "詳細" + +# Source-Hash: fb40866c2d6db5fb +# Review: human +# English: "walls · floor · ceiling" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.hint" +msgstr "壁 · 床 · 天井" + +# Source-Hash: 271039bd919dc4c1 +# Review: human +# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.idle" msgstr "形状を選んで開始します。部屋ごとに壁・床・天井が作成されます。" -# Source-Hash: ae2800b6c9e2b6ed -# Review: human -# English: "{lead} then the first one again to close. For L-shapes and angled rooms." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.caption" -msgstr "{lead}最後に始点をクリックして閉じます。L字型や斜めの部屋に使用します。" +# Source-Hash: ae2800b6c9e2b6ed +# Review: human +# English: "{lead} then the first one again to close. For L-shapes and angled rooms." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.caption" +msgstr "{lead}最後に始点をクリックして閉じます。L字型や斜めの部屋に使用します。" + +# Source-Hash: 4e186fc057733162 +# Review: human +# English: "Polygon" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.label" +msgstr "多角形" + +# Source-Hash: 345e3aca3879b5c5 +# Review: human +# English: "Click each corner," +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.lead" +msgstr "各頂点をクリックし、" + +# Source-Hash: 8ec6152e139b0e3f +# Review: human +# English: "Polygon room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.title" +msgstr "多角形の部屋" + +# Source-Hash: 9b46295eedcbedae +# Review: human +# English: "{lead} on the grid. Walls, floor and ceiling are created together." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.caption" +msgstr "グリッド上で{lead}します。壁・床・天井をまとめて作成します。" + +# Source-Hash: 2c2c20272b0370cc +# Review: human +# English: "Rectangle" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.label" +msgstr "長方形" + +# Source-Hash: 060faa48e299d7c9 +# Review: human +# English: "Click two corners" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.lead" +msgstr "対角の2点をクリック" + +# Source-Hash: 83a45603ac7f41e8 +# Review: human +# English: "Rectangle room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.title" +msgstr "長方形の部屋" + +# Source-Hash: 3e7408ed44676176 +# Review: human +# English: "Rooms" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.title" +msgstr "部屋" + +# Source-Hash: 8a21a03c4acf396b +# Review: human +# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.caption" +msgstr "{lead}輪郭を閉じると部屋になり、開いたままにすると間仕切りになります。" + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.label" +msgstr "壁" + +# Source-Hash: 9843edd68426fa2d +# Review: human +# English: "Draw one wall at a time." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.lead" +msgstr "壁を1面ずつ描画します。" + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.title" +msgstr "壁" + +# Source-Hash: 1f3650da23603008 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraControlsHint" +msgstr "カメラ操作のヒント" + +# Source-Hash: 101b6a54c377049a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pan" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.pan" +msgstr "パン" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.rotate" +msgstr "回転" + +# Source-Hash: 663cecc316eb91b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zoom" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.zoom" +msgstr "ズーム" + +# Source-Hash: a2bd204e93e90598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismiss" +msgstr "閉じる" + +# Source-Hash: 9222f970dce6cc60 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismissCameraControlsHint" +msgstr "カメラ操作のヒントを閉じる" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.expandSidebar" +msgstr "サイドバーを展開" + +# Source-Hash: dd86efcab72fc5c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis" +msgstr "軸" + +# Source-Hash: 5232a826549f915e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⌥ axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis2" +msgstr "⌥ 軸" + +# Source-Hash: 7001600001844c92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⚠ no equipment" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.noEquipment" +msgstr "⚠ 機器なし" + +# Source-Hash: eae0194029f96edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# register} other {# registers}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.registerCount" +msgstr "{count, plural, other {吹出口 # 個}}" + +# Source-Hash: 8fb180251a321cef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R/T rotate" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.rTRotate" +msgstr "R/T で回転" + +# Source-Hash: 3744cfc0c0329bfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# run} other {# runs}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.runCount" +msgstr "{count, plural, other {# 系統}}" + +# Source-Hash: 88e6c2e1c344b2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "System" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.system" +msgstr "システム" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.cancel" +msgstr "キャンセル" + +# Source-Hash: 4c6ca3441c74da9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place building" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.placeBuilding" +msgstr "建物を配置" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.rotate" +msgstr "回転" + +# Source-Hash: 832470d3aeee82fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel placement" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.cancelPlacement" +msgstr "配置をキャンセル" + +# Source-Hash: e374fcaee33c3e2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation — click or press C to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationClickOrPressCTo" +msgstr "連続配置 — クリックまたは C で切り替え" + +# Source-Hash: b108c7dc2ec2b9de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation: {label}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationLabel" +msgstr "連続配置: {label}" + +# Source-Hash: 729d87891cb7dbb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag to draw fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.dragToDrawFence" +msgstr "ドラッグしてフェンスを描く" + +# Source-Hash: a4bdcbc6cab772bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence type — click or press T to switch between straight, curved and freehand" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT" +msgstr "フェンスの種類 — クリックまたは T で直線・曲線・フリーハンドを切り替え" + +# Source-Hash: 2a9ed258727078ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fewer shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fewerShortcuts" +msgstr "ショートカットを減らす" + +# Source-Hash: 698fa6e78af4d4b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish curve (or double-click)" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick" +msgstr "曲線を完了(またはダブルクリック)" + +# Source-Hash: 09f6d79edf5cfd16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridLength" +msgstr "グリッド: {length}" + +# Source-Hash: c493b562040c4328 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step — click or tap Ctrl to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl" +msgstr "グリッド間隔 — クリックまたは Ctrl で切り替え" + +# Source-Hash: d36a8c93d81b3a36 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepLength" +msgstr "グリッド間隔: {length}" + +# Source-Hash: abea993ede7daa7e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a painted surface to erase" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase" +msgstr "塗装面にホバーして消去" + +# Source-Hash: fc1ed0ddc0cfcef5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPaint" +msgstr "面にホバーして塗装" + +# Source-Hash: 63dec5de4a337015 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to pick its material" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts" +msgstr "面にホバーして素材を取得" + +# Source-Hash: 7ad6dc1b1f03f970 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.moreShortcuts" +msgstr "その他のショートカット" + +# Source-Hash: 69c1044e6ea87ccf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gate on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placeGateOnAFence" +msgstr "フェンスに門を配置" + +# Source-Hash: 3754255b8affc7a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place passage on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placePassageOnAFence" +msgstr "フェンスに通路を配置" + +# Source-Hash: a8328c8964e947fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select a material to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.selectAMaterialToPaint" +msgstr "塗る素材を選択" + +# Source-Hash: 6f95d7116aea5738 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Angles" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingAngles" +msgstr "スナップ: 角度" + +# Source-Hash: 2d6d8d85d2ebed47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Grid" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingGrid" +msgstr "スナップ: グリッド" + +# Source-Hash: 9096c5f9d8ce0f7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Lines" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingLines" +msgstr "スナップ: 線" + +# Source-Hash: b663afbf0835cf32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping mode — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift" +msgstr "スナップモード — クリックまたは Shift で切り替え" + +# Source-Hash: d00e984fc88f71aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Off" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingOff" +msgstr "スナップ: オフ" + +# Source-Hash: 6be9d0d312200761 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight continuation is unavailable for curved or freehand fences" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved" +msgstr "曲線・フリーハンドのフェンスでは直線の連続配置は使えません" + +# Source-Hash: 0d56b1f0a0493302 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Continuous" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuous" +msgstr "直線: 連続" + +# Source-Hash: c034e85d3e7fd27e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight fence continuation — click or press C to toggle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress" +msgstr "直線フェンスの連続配置 — クリックまたは C で切り替え" + +# Source-Hash: e3f679cdb4a3d603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Single" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightSingle" +msgstr "直線: 単体" + +# Source-Hash: 83e56140165f2535 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{verb} scope — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.verbScopeClickOrPressShift" +msgstr "{verb}の範囲 — クリックまたは Shift で切り替え" + +# Source-Hash: 9a56d90d461b4bca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPoint" +msgstr "点を追加" + +# Source-Hash: c3dc3918c823a5e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point · click the first to close" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPointClickTheFirstTo" +msgstr "点を追加 · 最初の点をクリックして閉じる" + +# Source-Hash: d8cf72d482d56cd7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Brush size" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.brushSize" +msgstr "ブラシサイズ" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancel" +msgstr "キャンセル" + +# Source-Hash: 104fdab7934ec66c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel picking" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelPicking" +msgstr "選択をキャンセル" + +# Source-Hash: c318cf0ce70b8977 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel stroke" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelStroke" +msgstr "ストロークをキャンセル" + +# Source-Hash: 16552c2580bbe8b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Done" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.done" +msgstr "完了" + +# Source-Hash: e297db9ca0ce6d31 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the mezzanine" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheMezzanine" +msgstr "中二階を描く" + +# Source-Hash: c8be604718a7a9fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the opening" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheOpening" +msgstr "開口を描く" + +# Source-Hash: 231386ae6d534163 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the terrace" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheTerrace" +msgstr "テラスを描く" + +# Source-Hash: e092e803eb60af69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit smart measure" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.exitSmartMeasure" +msgstr "スマート計測を終了" + +# Source-Hash: b3907da0ad234f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finish" +msgstr "完了" + +# Source-Hash: f74bd937ae2e3a40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish at the edge" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finishAtTheEdge" +msgstr "端で完了" + +# Source-Hash: 21029cf1c45697cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMove" +msgstr "自由移動" + +# Source-Hash: 3247d8689bed6ff6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move · slide doors and windows" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMoveSlideDoorsAndWindows" +msgstr "自由移動 · ドアと窓をスライド" + +# Source-Hash: b5ad765b43e75a5c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to pick a material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.holdToPickAMaterial" +msgstr "押したままで素材を取得" + +# Source-Hash: 46b53c5449c98964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inspect surface dimensions" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.inspectSurfaceDimensions" +msgstr "面の寸法を確認" + +# Source-Hash: 63f1f7006ae14177 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint with this material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.paintWithThisMaterial" +msgstr "この素材で塗る" + +# Source-Hash: 188f55cc5afbe34f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick target height" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pickTargetHeight" +msgstr "目標の高さを選ぶ" + +# Source-Hash: 2880fc9752eababa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin measurement lens" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pinMeasurementLens" +msgstr "計測レンズを固定" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.place" +msgstr "配置" + +# Source-Hash: 82010a7fd6350c93 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place inside the room" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.placeInsideTheRoom" +msgstr "部屋の中に配置" + +# Source-Hash: 8b97f4503edb27b9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Press anywhere, drag to the opposite corner" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pressAnywhereDragToTheOpposite" +msgstr "どこかを押して、対角までドラッグ" + +# Source-Hash: 786f0b1c81b2a6c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise or lower" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.raiseOrLower" +msgstr "上げる・下げる" + +# Source-Hash: b033f46ae3a0cbb7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove a painted part, or reset a surface" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeAPaintedPartOrReset" +msgstr "塗装部分を削除、または面をリセット" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeLastPoint" +msgstr "最後の点を削除" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.resize" +msgstr "サイズ変更" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotate45" +msgstr "±45°回転" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotateTheSelection45" +msgstr "選択を±45°回転" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.setOneCornerThenTheOpposite" +msgstr "1つの角、次に対角を設定" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.cancel" +msgstr "キャンセル" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.forcePlace" +msgstr "強制配置" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.place" +msgstr "配置" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.rotate" +msgstr "回転" + +# Source-Hash: e9dfc2a178bca5f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guided constraints bypassed" +#: packages/editor/src/components/ui/helpers/registered-tool-helper.tsx +#, fuzzy +msgid "editor.helpers.registeredToolHelper.guidedConstraintsBypassed" +msgstr "ガイド制約を無視中" + +# Source-Hash: 395fd0821b203517 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add or remove objects from the selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.addOrRemoveObjectsFromThe" +msgstr "選択にオブジェクトを追加・除外" + +# Source-Hash: 8428cb0af9c6d6a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Adjust one side’s corner radius" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.adjustOneSideSCornerRadius" +msgstr "片側の角の半径を調整" + +# Source-Hash: d63b45c195713993 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clear the selection (or click outside)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clearTheSelectionOrClickOutside" +msgstr "選択を解除(または外側をクリック)" + +# Source-Hash: 40b1afbeadbd6213 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click a handle dot to show move arrows" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickAHandleDotToShow" +msgstr "ハンドルの点をクリックして移動矢印を表示" + +# Source-Hash: 0b82a35c71549580 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click or drag the selection to move it as one" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickOrDragTheSelectionTo" +msgstr "選択をクリックまたはドラッグしてまとめて移動" + +# Source-Hash: 73a761f393f69cb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click the handle dot to show move + rotate handles" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickTheHandleDotToShow" +msgstr "ハンドルの点をクリックして移動・回転ハンドルを表示" + +# Source-Hash: c0045cef191fee69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detach the joint while dragging an arrow" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.detachTheJointWhileDraggingAn" +msgstr "矢印のドラッグ中に接合を外す" + +# Source-Hash: a019c8948c104a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag left or right to rotate selected object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragLeftOrRightToRotate" +msgstr "左右にドラッグして選択オブジェクトを回転" + +# Source-Hash: 7db0364deb12f06e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag selected movable object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragSelectedMovableObject" +msgstr "選択した可動オブジェクトをドラッグ" + +# Source-Hash: 0f258dd389afdc73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Group selection (session only)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.groupSelectionSessionOnly" +msgstr "選択をグループ化(このセッションのみ)" + +# Source-Hash: 85330d62893a45c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to rotate freely" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.holdToRotateFreely" +msgstr "押したままで自由に回転" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotate45" +msgstr "±45°回転" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotateTheSelection45" +msgstr "選択を±45°回転" + +# Source-Hash: 0f6b418b18ff96f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotating freely (no angle step)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotatingFreely" +msgstr "自由回転中(角度ステップなし)" + +# Source-Hash: 7ed174d6b03563b1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch the rotation axis (Y → X → Z)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.switchTheRotationAxisYX" +msgstr "回転軸を切り替え(Y → X → Z)" + +# Source-Hash: d6f2c5cea683de62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ungroup session selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.ungroupSessionSelection" +msgstr "セッションのグループを解除" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuous" +msgstr "連続" + +# Source-Hash: ebf0eb7af4636a16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousCanopy" +msgstr "連続キャノピー" + +# Source-Hash: 1d8e87cd807e8d40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous run" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousRun" +msgstr "連続配置" + +# Source-Hash: 8990683667567c6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Curved fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.curvedFence" +msgstr "曲線フェンス" + +# Source-Hash: edf1b9a2ad3ab910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Freehand fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.freehandFence" +msgstr "フリーハンドのフェンス" + +# Source-Hash: 2cdb7c1c7cd7c4fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place multiple" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeMultiple" +msgstr "複数配置" + +# Source-Hash: 90bf945df6f9c979 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place once" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeOnce" +msgstr "1回だけ配置" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.polygonRoom" +msgstr "多角形の部屋" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.rectangleRoom" +msgstr "矩形の部屋" + +# Source-Hash: 7fd85d0408141157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single cabinet" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCabinet" +msgstr "単体キャビネット" + +# Source-Hash: dd1bdbc26165baa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCanopy" +msgstr "単体キャノピー" + +# Source-Hash: 5fb1a69316be983e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleFence" +msgstr "単体フェンス" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.walls" +msgstr "壁" + +# Source-Hash: 4e4f1a24e4a9d61e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cut opening" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.cutOpening" +msgstr "開口を切る" + +# Source-Hash: 60e8d235f3084a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divide room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.divideRoom" +msgstr "部屋を分割" + +# Source-Hash: aa496ec33d21ab03 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edit {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.editKind" +msgstr "{kind}を編集" + +# Source-Hash: f3ea3efa7102844f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Erase" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.erase" +msgstr "消去" + +# Source-Hash: 3f907e76526472bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.levelTerrain" +msgstr "地形を平らにする" + +# Source-Hash: 4e911c300d74eb47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lower terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.lowerTerrain" +msgstr "地形を下げる" + +# Source-Hash: 194a147d4618a994 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mezzanine" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.mezzanine" +msgstr "中二階" + +# Source-Hash: c48c4129c9ed249a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveKind" +msgstr "{kind}を移動" + +# Source-Hash: 89f6b7ca8904c656 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveRoom" +msgstr "部屋を移動" + +# Source-Hash: 9c707069572fb3db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move selection" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveSelection" +msgstr "選択を移動" + +# Source-Hash: cf2e870fce0f2f51 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paint" +msgstr "塗装" + +# Source-Hash: ca197314cb70aa56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a rectangle" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintARectangle" +msgstr "矩形を塗る" + +# Source-Hash: ea4ce729e17254f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a shape" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintAShape" +msgstr "形を塗る" + +# Source-Hash: 01359502b07284d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick material" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.pickMaterial" +msgstr "素材を取得" + +# Source-Hash: 4066e8a3f60b1711 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.raiseTerrain" +msgstr "地形を上げる" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.resize" +msgstr "サイズ変更" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.rotate" +msgstr "回転" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.select" +msgstr "選択" + +# Source-Hash: ec1f1d68af469867 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart measure" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smartMeasure" +msgstr "スマート計測" + +# Source-Hash: 5ba5f22bd1a69e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smooth terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smoothTerrain" +msgstr "地形を滑らかにする" + +# Source-Hash: cbb4687261739397 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.splitKind" +msgstr "{kind}を分割" + +# Source-Hash: 96281876ce53ba08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Terrace" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.terrace" +msgstr "テラス" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.polygonRoom" +msgstr "多角形の部屋" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.rectangleRoom" +msgstr "矩形の部屋" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.walls" +msgstr "壁" + +# Source-Hash: 5eab376947d29a50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reload editor" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.reloadEditor" +msgstr "エディターを再読み込み" + +# Source-Hash: 834de1a7027c4da1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The editor scene failed to render" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.theEditorSceneFailedToRender" +msgstr "エディターのシーンを表示できませんでした" + +# Source-Hash: 151f7c7e4110016f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curtain wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurtainWallTakesNoCorner" +msgstr "カーテンウォールにはコーナー窓を付けられません" + +# Source-Hash: 97f5e044d46501fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curved wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurvedWallTakesNoCorner" +msgstr "曲面の壁にはコーナー窓を付けられません" + +# Source-Hash: 776d8ebece7fe1bb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add a corner · click the first to close" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.addACornerClickTheFirst" +msgstr "角を追加 · 最初の点をクリックして閉じる" + +# Source-Hash: 6a0745dd047b149a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Another opening is in the way at the corner" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.anotherOpeningIsInTheWay" +msgstr "角に別の開口があります" + +# Source-Hash: 441124187e7da2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangers" +msgstr "自動吊り金具" + +# Source-Hash: 47a7f9a6a81156c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers - click or press H to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersClickOrPressH" +msgstr "自動吊り金具 - クリックまたは H で切り替え" + +# Source-Hash: d7944f31cba90e26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: Off" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOff" +msgstr "自動吊り金具: オフ" + +# Source-Hash: 295882d015d08742 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: On" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOn" +msgstr "自動吊り金具: オン" + +# Source-Hash: 8c039e5182b01c4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bypass snapping" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.bypassSnapping" +msgstr "スナップを無視" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancel" +msgstr "キャンセル" + +# Source-Hash: 5b33b576fd30b74e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel move" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelMove" +msgstr "移動をキャンセル" + +# Source-Hash: 136fa29b9ae419bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel run / exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelRunExit" +msgstr "経路をキャンセル / 終了" + +# Source-Hash: 75b406824be91ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel start point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelStartPoint" +msgstr "始点をキャンセル" + +# Source-Hash: ffa5aaa1746303c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cornerWindow" +msgstr "コーナー窓" + +# Source-Hash: b0afdd855a02e4a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cuts" +msgstr "分割" + +# Source-Hash: dc9fe7601cc525f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValue" +msgstr "分割: {value}" + +# Source-Hash: a2e13bc4dc82624c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}, even" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValueEven" +msgstr "分割: {value}、等分" + +# Source-Hash: 04152b4cec726f34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle mono / gable / butterfly" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleMonoGableButterfly" +msgstr "片流れ / 切妻 / バタフライを切り替え" + +# Source-Hash: 4fb6c83edb6652b5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle snapping mode" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleSnappingMode" +msgstr "スナップモードを切り替え" + +# Source-Hash: 5d550a3ac76279de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorStyleClickOrPressL" +msgstr "ドアのスタイル — クリックまたは L で切り替え" + +# Source-Hash: 3272a7df5d7c6a9a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorTypeClickOrPressO" +msgstr "ドアの種類 — クリックまたは O で切り替え" + +# Source-Hash: 366222b4435eefda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drop downspout from outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.dropDownspoutFromOutlet" +msgstr "排水口から竪樋を下ろす" + +# Source-Hash: 03f306371f345007 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct diameter down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.ductDiameterDownUp" +msgstr "ダクト径を小さく / 大きく" + +# Source-Hash: 7b4137e27f8327d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End run / cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.endRunCancel" +msgstr "経路を終了 / キャンセル" + +# Source-Hash: 938aacb119b29dc1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exit" +msgstr "終了" + +# Source-Hash: 7cb4e0688cabcb00 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit drawing" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exitDrawing" +msgstr "描画を終了" + +# Source-Hash: 47025a103c456125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishAndContinue" +msgstr "完了して続ける" + +# Source-Hash: 000918429b74128f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishCeiling" +msgstr "天井を完了" + +# Source-Hash: 51a80a0dba5a6f30 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishGridAxis" +msgstr "通り芯を完了" + +# Source-Hash: 87c7b98fc2e010e1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMeasurement" +msgstr "計測を完了" + +# Source-Hash: 5e1a0af7dc506826 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish multi-point witnesses" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMultiPointWitnesses" +msgstr "複数点の参照を完了" + +# Source-Hash: 30fc0862501ba2e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish slab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishSlab" +msgstr "スラブを完了" + +# Source-Hash: 66ed7c7598d3aa29 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flip side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.flipSide" +msgstr "向きを反転" + +# Source-Hash: f5717f6a0905ffab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow: trace a lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.followTraceALineset" +msgstr "追従: 冷媒配管に沿って配管" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.forcePlace" +msgstr "強制配置" + +# Source-Hash: cc0c14065951444d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.freePlacement" +msgstr "自由配置" + +# Source-Hash: f098a27096a9c1ea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Go vertical ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.goVerticalClickToPlace" +msgstr "垂直に切り替え ↕、クリックで配置" + +# Source-Hash: fd47f1820d8799c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Highlight outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.highlightOutlet" +msgstr "排水口を強調" + +# Source-Hash: eb90058d0f856f67 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Join as a corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.joinAsACornerWindow" +msgstr "コーナー窓として結合" + +# Source-Hash: 225b3161f2e59757 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Alt + drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.altDrag" +msgstr "Alt + ドラッグ" + +# Source-Hash: dd66f883b173fc72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Backspace" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.backspace" +msgstr "Backspace" + +# Source-Hash: a18387bc0be54c32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.click" +msgstr "クリック" + +# Source-Hash: db9e60c1d30b8499 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click again" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.clickAgain" +msgstr "もう一度クリック" + +# Source-Hash: f400330b9c9c12e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Command" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.command" +msgstr "Command" + +# Source-Hash: 976c63285a510b09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Control" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.control" +msgstr "Ctrl" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.delete" +msgstr "削除" + +# Source-Hash: 88888c9d2719fa92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.doubleClick" +msgstr "ダブルクリック" + +# Source-Hash: dfb85b2addb7b9fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.drag" +msgstr "ドラッグ" + +# Source-Hash: ed9140d42148c99b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.enter" +msgstr "Enter" + +# Source-Hash: 9195fa8b9c8ebdfb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hover" +msgstr "ホバー" + +# Source-Hash: 2d78441b741bc562 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a duct end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverADuctEnd" +msgstr "ダクトの端にホバー" + +# Source-Hash: 6083405086f61c76 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a pipe end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverAPipeEnd" +msgstr "配管の端にホバー" + +# Source-Hash: a5a337eb76fdb066 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverGutter" +msgstr "雨樋にホバー" + +# Source-Hash: a58533594411e088 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.leftClick" +msgstr "左クリック" + +# Source-Hash: bc4ab608ec3d3b4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Middle click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.middleClick" +msgstr "中クリック" + +# Source-Hash: 6791879c651108c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rightClick" +msgstr "右クリック" + +# Source-Hash: c836b21b42198868 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R / Shift+R" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rShiftR" +msgstr "R / Shift+R" + +# Source-Hash: 9812aa06d8bb7544 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scroll" +msgstr "スクロール" + +# Source-Hash: f2174536230657c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll wheel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scrollWheel" +msgstr "スクロールホイール" + +# Source-Hash: 82dd231086d87f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Space" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.space" +msgstr "Space" + +# Source-Hash: 9e68aa2f472cad56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.tab" +msgstr "Tab" + +# Source-Hash: 4b221b73f9496a49 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mount: floor / ceiling / wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.mountFloorCeilingWall" +msgstr "取付: 床 / 天井 / 壁" + +# Source-Hash: 225edfb1e45aed95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No room for the matching window on the other wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noRoomForTheMatchingWindow" +msgstr "もう一方の壁に対応する窓を置く余地がありません" + +# Source-Hash: a7045d6b678bcd13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No wall meets here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noWallMeetsHere" +msgstr "ここで交わる壁はありません" + +# Source-Hash: a639341dc21fed2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Number of cuts — scroll or click to change" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.numberOfCutsScrollOrClick" +msgstr "分割数 — スクロールまたはクリックで変更" + +# Source-Hash: af01bde3ae4b7e59 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick witness point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pickWitnessPoint" +msgstr "参照点を選ぶ" + +# Source-Hash: ecfd58576b28a9f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe size down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pipeSizeDownUp" +msgstr "管径を小さく / 大きく" + +# Source-Hash: 7a1eb7b64f06bad0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeAndContinue" +msgstr "配置して続ける" + +# Source-Hash: c6cda39e2e4b5d3a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBlock" +msgstr "ブロックを配置" + +# Source-Hash: 45a743c52a1d72de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place box vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBoxVentOnRoof" +msgstr "屋根にボックス換気口を配置" + +# Source-Hash: 75142dd1d557efe2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCabinet" +msgstr "キャビネットを配置" + +# Source-Hash: da603a713d4c9909 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place canopy or set the next run point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCanopyOrSetTheNext" +msgstr "キャノピーを配置、または次の点を設定" + +# Source-Hash: 8b3a30c6b7a5612d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place chimney on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeChimneyOnRoof" +msgstr "屋根に煙突を配置" + +# Source-Hash: 710d41e4e2f259fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeColumn" +msgstr "柱を配置" + +# Source-Hash: ee1da4e12a71d9a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cupola on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCupolaOnRoof" +msgstr "屋根にキューポラを配置" + +# Source-Hash: 19c1fe8c46d213a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dimension line when needed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDimensionLineWhenNeeded" +msgstr "必要に応じて寸法線を配置" + +# Source-Hash: 58f3e7efb6ea120b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place door on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDoorOnWall" +msgstr "壁にドアを配置" + +# Source-Hash: de04e9d03d937c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dormer on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDormerOnRoof" +msgstr "屋根にドーマーを配置" + +# Source-Hash: c581645f2ee447c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeElevator" +msgstr "エレベーターを配置" + +# Source-Hash: 096b8d6482717358 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place eyebrow vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeEyebrowVentOnRoof" +msgstr "屋根に眉型換気口を配置" + +# Source-Hash: e8d42c1c8370773f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeFitting" +msgstr "継手を配置" + +# Source-Hash: 2340a4b70cb0d9ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gutter on roof eave" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeGutterOnRoofEave" +msgstr "軒に雨樋を配置" + +# Source-Hash: 706a8eafb6212833 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItem" +msgstr "アイテムを配置" + +# Source-Hash: 1815c482e249932e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place it (locked to 45°)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItLockedTo45" +msgstr "配置(45°に固定)" + +# Source-Hash: 4a14340657532838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place measurement point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeMeasurementPoint" +msgstr "計測点を配置" + +# Source-Hash: b3be684ac62fbf53 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placement" +msgstr "配置" + +# Source-Hash: 2bb2ce6276c69b1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Auto" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementAuto" +msgstr "配置: 自動" + +# Source-Hash: ed78ac5354a1dcd8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Ground" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementGround" +msgstr "配置: 地面" + +# Source-Hash: a066a2c9d5e65a1a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementRoof" +msgstr "配置: 屋根" + +# Source-Hash: 8f74dbe5064c4c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement surface - click or press P to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementSurfaceClickOrPressP" +msgstr "配置面 - クリックまたは P で切り替え" + +# Source-Hash: fe119955c925feaf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementType" +msgstr "配置の種類" + +# Source-Hash: 33043a35500168f5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type — click or press I to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementTypeClickOrPressI" +msgstr "配置の種類 — クリックまたは I で切り替え" + +# Source-Hash: 9945f412e6a9a446 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place on a fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeOnAFence" +msgstr "フェンスに配置" + +# Source-Hash: 6708118775a7da7f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRegister" +msgstr "吹出口を配置" + +# Source-Hash: ebd2731f5c79306e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place ridge vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRidgeVentOnRoof" +msgstr "屋根に棟換気を配置" + +# Source-Hash: 9b3c66a867c23326 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeShelf" +msgstr "棚を配置" + +# Source-Hash: f11cf5c1c9fe862d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place skylight on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSkylightOnRoof" +msgstr "屋根に天窓を配置" + +# Source-Hash: e989a58d6709cc16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place solar panel array on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSolarPanelArrayOnRoof" +msgstr "屋根に太陽光パネルを配置" + +# Source-Hash: b67f7036d5180cf5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSpawnPoint" +msgstr "スポーン地点を配置" + +# Source-Hash: 6c7f32a17e5636c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place stairs" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeStairs" +msgstr "階段を配置" + +# Source-Hash: 641c0d3debd798a8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTrap" +msgstr "トラップを配置" + +# Source-Hash: 6f0a6f6c4b7588a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place turbine vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTurbineVentOnRoof" +msgstr "屋根にタービン換気扇を配置" + +# Source-Hash: e65cf5edb4f51ed5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeUnit" +msgstr "ユニットを配置" + +# Source-Hash: 86ce1c730154f68b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place window on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWindowOnWall" +msgstr "壁に窓を配置" + +# Source-Hash: 2b612180a7617901 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place without the corner snap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWithoutTheCornerSnap" +msgstr "角のスナップなしで配置" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastPoint" +msgstr "最後の点を削除" + +# Source-Hash: 8b74b1d962be10fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last witness" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastWitness" +msgstr "最後の参照を削除" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate" +msgstr "回転" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45" +msgstr "±45°回転" + +# Source-Hash: be2240289aa74df5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45° (floor / ceiling)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45FloorCeiling" +msgstr "±45°回転(床 / 天井)" + +# Source-Hash: d5fb78b07c0f8138 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ghost ±15°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateGhost15" +msgstr "プレビューを±15°回転" + +# Source-Hash: 912d340cd16e27fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate or flip the run side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateOrFlipTheRunSide" +msgstr "配置側を回転または反転" + +# Source-Hash: ad1dc0b5536cceef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate roof direction 90°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateRoofDirection90" +msgstr "屋根の向きを90°回転" + +# Source-Hash: fa24651e9e5f595a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateSpawnPoint" +msgstr "スポーン地点を回転" + +# Source-Hash: 2d693d87fe9b59e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Round / rectangular / oval" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.roundRectangularOval" +msgstr "円形 / 矩形 / 楕円" + +# Source-Hash: f7d2c9cdcc637c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set fence start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setFenceStartEnd" +msgstr "フェンスの始点 / 終点を設定" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setOneCornerThenTheOpposite" +msgstr "1つの角、次に対角を設定" + +# Source-Hash: 4f55171f10c6ceeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set roof footprint" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setRoofFootprint" +msgstr "屋根の外形を設定" + +# Source-Hash: 0243859b1d64c21e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set wall start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setWallStartEnd" +msgstr "壁の始点 / 終点を設定" + +# Source-Hash: c2806cce9612fa50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slope / level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.slopeLevel" +msgstr "勾配 / 水平" + +# Source-Hash: 06c0ec40606db679 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snap onto the run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.snapOntoTheRun" +msgstr "経路にスナップ" + +# Source-Hash: e214cccbac9c4fd2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split at the marks" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.splitAtTheMarks" +msgstr "マークで分割" + +# Source-Hash: 94455c35bfeac6b4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startGridAxis" +msgstr "通り芯を開始" + +# Source-Hash: 2edb4c29bbe7c513 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLineset" +msgstr "冷媒配管を開始" + +# Source-Hash: 9e50f1b30e325208 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start liquid line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLiquidLine" +msgstr "液管を開始" + +# Source-Hash: 877ddcb778c211cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startRun" +msgstr "経路を開始" + +# Source-Hash: 8a62bee64174bbc0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startSegment" +msgstr "セグメントを開始" + +# Source-Hash: 6cc5dc51a8e66779 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Step back or cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stepBackOrCancel" +msgstr "1つ戻る、またはキャンセル" + +# Source-Hash: 1a79a485d91f3f28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.style" +msgstr "スタイル" + +# Source-Hash: 81f595b1c47c0080 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleBarn" +msgstr "スタイル: 納屋" + +# Source-Hash: 3a82c718fe215273 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCasement" +msgstr "スタイル: 開き" + +# Source-Hash: 072e3331d1d105c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Craftsman" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCraftsman" +msgstr "スタイル: クラフツマン" + +# Source-Hash: b64d07557dec1714 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Double-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleDoubleHung" +msgstr "スタイル: 上げ下げ(両側)" + +# Source-Hash: 55ef8761a537637f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleFrench" +msgstr "スタイル: フレンチ" + +# Source-Hash: bc8a751d87536dc3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGlass" +msgstr "スタイル: ガラス" + +# Source-Hash: 40c1eb0bc83e207d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGrid" +msgstr "スタイル: 格子" + +# Source-Hash: f516886bab2e7f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Half-louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHalfLouvered" +msgstr "スタイル: 半ルーバー" + +# Source-Hash: 64e4389a695371a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Horizontal bands" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHorizontalBands" +msgstr "スタイル: 横帯" + +# Source-Hash: ff6d226a425b00c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Modern" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleModern" +msgstr "スタイル: モダン" + +# Source-Hash: c6d17ba078ff47e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePanel" +msgstr "スタイル: パネル" + +# Source-Hash: 5e6baad0d2ce3a62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Paneled glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePaneledGlass" +msgstr "スタイル: パネルガラス" + +# Source-Hash: 6314388e6832c252 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Shaker" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleShaker" +msgstr "スタイル: シェーカー" + +# Source-Hash: a0f8e524f3ca121f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Single" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSingle" +msgstr "スタイル: 単体" + +# Source-Hash: 368279df3a472c86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Six-panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSixPanel" +msgstr "スタイル: 6パネル" + +# Source-Hash: 8f3c2571d8168fee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSliding" +msgstr "スタイル: 引き違い" + +# Source-Hash: aa9d9eb137ca38d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Tall grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTallGrid" +msgstr "スタイル: 縦長格子" + +# Source-Hash: bc164648722b63e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Transom" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTransom" +msgstr "スタイル: 欄間" + +# Source-Hash: 9a218f0c9ceb4697 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Triple-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTripleHung" +msgstr "スタイル: 3段上げ下げ" + +# Source-Hash: 9f6df1344bd3d694 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Wide grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleWideGrid" +msgstr "スタイル: 横長格子" + +# Source-Hash: 711d4050c0cb95d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch rotation axis (Y → X → Z)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.switchRotationAxisYXZ" +msgstr "回転軸を切り替え(Y → X → Z)" + +# Source-Hash: d650c71e042c2598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The walls meet at too sharp or too flat an angle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWallsMeetAtTooSharp" +msgstr "壁の交わる角度が鋭すぎるか浅すぎます" + +# Source-Hash: ab206ac56e65f190 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The window waiting there is taller than this wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWindowWaitingThereIsTaller" +msgstr "そこにある窓はこの壁より高いです" + +# Source-Hash: 9c1f47138ed5c7ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Three or more walls meet here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.threeOrMoreWallsMeetHere" +msgstr "ここで3枚以上の壁が交わります" + +# Source-Hash: c3ca56fa28e15f07 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace ceiling outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceCeilingOutline" +msgstr "天井の輪郭をなぞる" + +# Source-Hash: bdf71499d30a29de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace slab outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceSlabOutline" +msgstr "スラブの輪郭をなぞる" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.type" +msgstr "種類" + +# Source-Hash: b54eaaff3349dcb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Awning" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeAwning" +msgstr "種類: 突き出し" + +# Source-Hash: f399572a27417c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBarn" +msgstr "種類: 納屋" + +# Source-Hash: a1df9782200b5f1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bay" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBay" +msgstr "種類: 出窓" + +# Source-Hash: ff069a390e8e3f66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bow" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBow" +msgstr "種類: 弓形出窓" + +# Source-Hash: bdac5f3f2ea70fff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCabinet" +msgstr "種類: キャビネット" + +# Source-Hash: e0754fc03997cbf9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCasement" +msgstr "種類: 開き" + +# Source-Hash: 47d873446d6e173b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDouble" +msgstr "種類: 両開き" + +# Source-Hash: 5942e484513aaab5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDoubleHung" +msgstr "種類: 上げ下げ(両側)" + +# Source-Hash: f9497fbfceefda27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Fixed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFixed" +msgstr "種類: はめ殺し" + +# Source-Hash: 0dcf07acc9cbf000 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Folding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFolding" +msgstr "種類: 折れ戸" + +# Source-Hash: bff7331f87f279aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFrench" +msgstr "種類: フレンチ" + +# Source-Hash: 9d2c3b82079eb769 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Hinged" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeHinged" +msgstr "種類: 開き戸" + +# Source-Hash: b8001b90ff522838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Island" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeIsland" +msgstr "種類: アイランド" + +# Source-Hash: 516833c5160d412e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeLouvered" +msgstr "種類: ルーバー" + +# Source-Hash: 291272bf848ad6ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Pocket" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typePocket" +msgstr "種類: 引き込み" + +# Source-Hash: 46d0e53d6ae07c72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Single Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSingleHung" +msgstr "種類: 上げ下げ(片側)" + +# Source-Hash: b11115b50df8faac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSliding" +msgstr "種類: 引き戸" + +# Source-Hash: bff0c1694ee0a37e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical stack ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.verticalStackClickToPlace" +msgstr "立て管 ↕、クリックで配置" + +# Source-Hash: bac471ee67af6412 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waste / vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.wasteVent" +msgstr "排水 / 通気" + +# Source-Hash: 1c744b7e24fc786e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowStyleClickOrPressL" +msgstr "窓のスタイル — クリックまたは L で切り替え" + +# Source-Hash: dd6f0ab314fea26c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowTypeClickOrPressO" +msgstr "窓の種類 — クリックまたは O で切り替え" + +# Source-Hash: 9fc7a39bc32f287a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.plugins" +msgstr "プラグイン" + +# Source-Hash: c54f9bac358893d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "2D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view2d" +msgstr "2D" + +# Source-Hash: f78f2fa035f25f85 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view3d" +msgstr "3D" + +# Source-Hash: 05b65242d8c48791 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.auto" +msgstr "自動" + +# Source-Hash: 7890c110650ad1e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Browse plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.browsePlugins" +msgstr "プラグインを探す" + +# Source-Hash: 3b11e7af681a9dcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeLabel" +msgstr "{label}を閉じる" + +# Source-Hash: 3f00e92517e3f4a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeSplit" +msgstr "分割を閉じる (\\)" + +# Source-Hash: 94cc8e9f1ee16edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ground" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.ground" +msgstr "地面" + +# Source-Hash: 0d472502a4d36e86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundSolid" +msgstr "{standing, select, partly {一部地盤面下 · 地面ソリッド} below {地盤面下 · 地面ソリッド} other {地面ソリッド}}" + +# Source-Hash: 1b6798c307ac1b96 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundVeiled" +msgstr "{standing, select, partly {一部地盤面下 · 地面を透過} below {地盤面下 · 地面を透過} other {地面を透過}}" + +# Source-Hash: ebdc976a98e82626 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Keep the ground solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.keepTheGroundSolid" +msgstr "地面をソリッドのままにする" + +# Source-Hash: 5f827686a006d88c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.moreViews" +msgstr "その他のビュー" + +# Source-Hash: f175bbcf457ab73c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pane {pane} views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.paneViews" +msgstr "ペイン {pane} のビュー" + +# Source-Hash: 33c20cc33dce9a9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinLabel" +msgstr "{label}をピン留め" + +# Source-Hash: 3f7231b1eb2f93f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin to the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinToTheViewBar" +msgstr "ビューバーにピン留め" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.solid" +msgstr "ソリッド" + +# Source-Hash: 98f22f3f89f17686 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split" +msgstr "分割 (\\)" + +# Source-Hash: e4cd64b1680ac0d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split2" +msgstr "分割" + +# Source-Hash: 15b0adc705923a27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Swap panes" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.swapPanes" +msgstr "ペインを入れ替え" + +# Source-Hash: 9781bcdb7a8549e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin from the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinFromTheViewBar" +msgstr "ビューバーからピン留めを外す" + +# Source-Hash: f667358dec4abdea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinLabel" +msgstr "{label}のピン留めを外す" + +# Source-Hash: e96581f0bbf9fa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Veil the ground over a level below grade" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.veilTheGroundOverALevel" +msgstr "地盤面下の階層の上で地面を透過" + +# Source-Hash: fb82f09f8ed3059e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.views" +msgstr "ビュー" + +# Source-Hash: fdece5c2158dfe88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "You can retry the scene or return home without reloading the whole app shell." +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.youCanRetryTheSceneOr" +msgstr "アプリ全体を再読み込みせずに、シーンを再試行するかホームに戻れます。" + +# Source-Hash: a273dacdf51b26f2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A topology-backed solid edited directly in the canvas." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.description" +msgstr "キャンバス上で直接編集できる、トポロジーを持つソリッド。" + +# Source-Hash: 279f456ebb2f5da0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.label" +msgstr "ブロック" + +# Source-Hash: b2a371b4041b5e38 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Small louvered exhaust vent that sits on a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.description" +msgstr "屋根勾配に載る小型のルーバー付き排気口。" + +# Source-Hash: f736ca24e84825c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Box Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.label" +msgstr "ボックス換気口" + +# Source-Hash: f49d8836ae037dde +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A building container holding one or more levels." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.description" +msgstr "1つ以上の階層を含む建物コンテナ。" + +# Source-Hash: d42f7d29e3fc4af7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Building" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.label" +msgstr "建物" + +# Source-Hash: 693a0d8896f5cc43 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable parametric base cabinet." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.description" +msgstr "設定可能なパラメトリックのベースキャビネット。" + +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.label" +msgstr "モジュール式キャビネット" + +# Source-Hash: ffc8d80e438f40b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An editable module inside a modular cabinet run." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.description" +msgstr "モジュール式キャビネットの列の中にある編集可能なモジュール。" + +# Source-Hash: d5c19ec529e26a98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cabinet Module" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.label" +msgstr "キャビネットモジュール" + +# Source-Hash: 4d6d5e9439f40e9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A polygon-bounded ceiling surface that hosts ceiling-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.description" +msgstr "多角形で囲まれた天井面。天井付けのアイテムを取り付けられます。" + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.label" +msgstr "天井" + +# Source-Hash: ea12ce3c2b3588e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical masonry stack on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.description" +msgstr "屋根面上の組積造の煙突。" + +# Source-Hash: 95169058fec6db14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chimney" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.label" +msgstr "煙突" + +# Source-Hash: 6a06e628257f3393 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A parametric column with configurable cross-section, base, and capital." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.description" +msgstr "断面、柱脚、柱頭を設定できるパラメトリックな柱。" + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.label" +msgstr "柱" + +# Source-Hash: 895766ad1b766c2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Associative linear, curved, circular, angular, or coordinate plan dimension." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.description" +msgstr "連動する直線・曲線・円・角度・座標の平面寸法。" + +# Source-Hash: 6875b60ee8a7cc3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Construction Dimension" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.label" +msgstr "施工寸法" + +# Source-Hash: a276c9693f01dec7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered roof lantern with a dome or pyramid cap and optional finial." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.description" +msgstr "ドームまたはピラミッドの笠と任意の頂華を持つルーバー付き屋根ランタン。" + +# Source-Hash: e679dd19f96eba0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cupola" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.label" +msgstr "キューポラ" + +# Source-Hash: 6123b20edb9569de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A door cut into a wall. Animated open/close state." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.description" +msgstr "壁に設けたドア。開閉アニメーション付き。" + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.label" +msgstr "ドア" + +# Source-Hash: 387e57242c8d110a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "House-shaped protrusion on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.description" +msgstr "屋根面の家形の突出部。" + +# Source-Hash: 6b6f8068bbc4c902 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dormer" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.label" +msgstr "ドーマー" + +# Source-Hash: b46392d2ea865760 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical drop pipe from a gutter outlet to the ground." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.description" +msgstr "雨樋の排水口から地面までの竪樋。" + +# Source-Hash: 1a1ec08a311f1b35 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Downspout" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.label" +msgstr "竪樋" + +# Source-Hash: 29eadb8c84ae9632 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elbow, tee, reducer, or square-to-round transition connecting duct runs." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.description" +msgstr "ダクトをつなぐエルボ、T、レデューサー、角丸変換。" + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.label" +msgstr "ダクト継手" + +# Source-Hash: 09eb45a9b35d1a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC duct run — polyline of round, rect, or flat-oval sections." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.description" +msgstr "空調ダクト — 円形・矩形・扁平楕円断面のポリライン。" + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.label" +msgstr "ダクト" + +# Source-Hash: 33181d0f42421013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.description" +msgstr "吹出口 — 給気口、天井ディフューザー、還気グリル。ダクトはそのカラーで終わります。" + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.label" +msgstr "吹出口" + +# Source-Hash: d0afa386e65cd3a4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A multi-level elevator shaft with configurable openings per level." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.description" +msgstr "階層ごとに開口を設定できる複数階のエレベーターシャフト。" + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.label" +msgstr "エレベーター" + +# Source-Hash: 7b22c91cf520e161 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low curved lens-shaped roof vent with a louvered front." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.description" +msgstr "正面にルーバーのある、低く湾曲したレンズ形の屋根換気口。" + +# Source-Hash: 654b29319185ac66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Eyebrow Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.label" +msgstr "眉型換気口" + +# Source-Hash: 20032fe9430f610d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A straight or curved fence segment with configurable posts and infill." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.description" +msgstr "支柱と面材を設定できる直線または曲線のフェンス区間。" + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.label" +msgstr "フェンス" + +# Source-Hash: df61821ed00852d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A gate hosted by a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.description" +msgstr "フェンスに取り付けた門。" + +# Source-Hash: 4a479aa23542d766 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.label" +msgstr "門" + +# Source-Hash: 8f9c927d79796c26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An intentional opening in a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.description" +msgstr "フェンスに設けた開口。" + +# Source-Hash: ab67bb47e647d594 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open Passage" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.label" +msgstr "通路" + +# Source-Hash: dc3adf0c2d50dba6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor opening" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.floorOpening.label" +msgstr "床開口" + +# Source-Hash: 2f4fac2b1d39fdb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A measurement / reference annotation (linear, area, or arc)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.description" +msgstr "計測・参照の注記(直線、面積、円弧)。" + +# Source-Hash: 1344ea2602e3aa9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.label" +msgstr "ガイド" + +# Source-Hash: 5402d634f40b2f97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rain-water channel running along the eave of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.description" +msgstr "屋根面の軒に沿う雨水の樋。" + +# Source-Hash: 14ba981da3627ae2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.label" +msgstr "雨樋" + +# Source-Hash: 50e9252d30f3fb4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furnace, air handler, or condenser — duct runs connect to its supply/return collars." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.description" +msgstr "炉、空調機、室外機 — ダクトは給気・還気カラーに接続します。" + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.label" +msgstr "空調機" + +# Source-Hash: f24a1089d9256460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Geometry preserved from an imported model when no native Pascal shape exists." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.description" +msgstr "Pascal のネイティブ形状がない場合に、インポートしたモデルから保持されるジオメトリ。" + +# Source-Hash: 9f9d11f287f722d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Imported Mesh" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.label" +msgstr "インポートメッシュ" + +# Source-Hash: 63f79b3c467177b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A catalog-backed item (furniture, fixtures, decorations)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.description" +msgstr "カタログのアイテム(家具、設備、装飾)。" + +# Source-Hash: 2743a0e9d2743807 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.label" +msgstr "アイテム" + +# Source-Hash: a9e2d7b215696e2a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.description" +msgstr "構造と排水を自動処理する、付属の片流れまたは独立型の片流れ・切妻・バタフライのキャノピー。" + +# Source-Hash: 8503bedfbafde9a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Canopy" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.label" +msgstr "キャノピー" + +# Source-Hash: 45673462f914d3df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single floor of a building, holding walls / slabs / ceilings / items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.description" +msgstr "建物の1つの階。壁・スラブ・天井・アイテムを含みます。" + +# Source-Hash: 0608743fc1736d86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.label" +msgstr "階層" + +# Source-Hash: 156bdee8fee5bec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.description" +msgstr "冷媒配管 — 室外機と室内コイルを結ぶ銅製の吸入管と液管。" + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.label" +msgstr "冷媒配管" + +# Source-Hash: 2bd4a85bed158269 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.description" +msgstr "単独の冷媒液管 — 細い裸銅管。追従モードは既存の冷媒配管に沿います。" + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.label" +msgstr "液管" + +# Source-Hash: ff4e3bb72267859e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A persistent distance, angle, area, perimeter, or volume annotation." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.description" +msgstr "距離、角度、面積、周長、体積の常設注記。" + +# Source-Hash: ec3567fd058bab7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.label" +msgstr "計測" + +# Source-Hash: 7764b50334e9f71d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV joint — elbow bend, 45° wye, or sanitary tee." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.description" +msgstr "排水継手 — エルボ、45°Y、衛生T。" + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.label" +msgstr "配管継手" + +# Source-Hash: a0bb4762aa66fa3e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.description" +msgstr "排水・汚水・通気管 — 水平に描くか、S で1フィートあたり¼″の勾配を切り替え。" + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.label" +msgstr "排水管" + +# Source-Hash: 6d0cdd14d0675e05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV P-trap — water seal on the waste line. The trap arm runs to the vent." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.description" +msgstr "Pトラップ — 排水管の封水。トラップアームは通気管へ伸びます。" + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.label" +msgstr "トラップ" + +# Source-Hash: 0efe82436b915f6d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Experimental editable recipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.description" +msgstr "実験的な編集可能レシピ" + +# Source-Hash: c8bbcc888cce7b8a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Procedural item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.label" +msgstr "プロシージャルアイテム" + +# Source-Hash: 356aa0ed69cb8ec5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ventilation strip running along the ridge of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.description" +msgstr "屋根面の棟に沿う換気帯。" -# Source-Hash: 4e186fc057733162 -# Review: human -# English: "Polygon" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.label" -msgstr "多角形" +# Source-Hash: 54b74080f33c8c4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ridge Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.label" +msgstr "棟換気" -# Source-Hash: 345e3aca3879b5c5 -# Review: human -# English: "Click each corner," -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.lead" -msgstr "各頂点をクリックし、" +# Source-Hash: 6afeec8de7ed618d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A pitched / hip / gable roof composed of one or more segments." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.description" +msgstr "1つ以上の面で構成される勾配・寄棟・切妻屋根。" -# Source-Hash: 8ec6152e139b0e3f -# Review: human -# English: "Polygon room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.title" -msgstr "多角形の部屋" +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.label" +msgstr "屋根" -# Source-Hash: 9b46295eedcbedae -# Review: human -# English: "{lead} on the grid. Walls, floor and ceiling are created together." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.caption" -msgstr "グリッド上で{lead}します。壁・床・天井をまとめて作成します。" +# Source-Hash: 99afd827dbe5d647 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single pitched plane of a parent roof." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.description" +msgstr "親屋根の1つの勾配面。" -# Source-Hash: 2c2c20272b0370cc -# Review: human -# English: "Rectangle" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.label" -msgstr "長方形" +# Source-Hash: e72a64b3e00aad98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof Segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.label" +msgstr "屋根面" -# Source-Hash: 060faa48e299d7c9 -# Review: human -# English: "Click two corners" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.lead" -msgstr "対角の2点をクリック" +# Source-Hash: 6600a850000b98ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A captured session with optional mesh, motion, media, and sensor data." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.description" +msgstr "メッシュ、モーション、メディア、センサーデータを任意で含むキャプチャセッション。" -# Source-Hash: 83a45603ac7f41e8 -# Review: human -# English: "Rectangle room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.title" -msgstr "長方形の部屋" +# Source-Hash: 3a0701ebcb9f26cb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Capture" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.label" +msgstr "キャプチャ" -# Source-Hash: 3e7408ed44676176 -# Review: human -# English: "Rooms" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.title" -msgstr "部屋" +# Source-Hash: acb8cb92b3674b50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Separator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.separator.label" +msgstr "区切り" -# Source-Hash: 8a21a03c4acf396b -# Review: human -# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.caption" -msgstr "{lead}輪郭を閉じると部屋になり、開いたままにすると間仕切りになります。" +# Source-Hash: 26aff27b7284fc84 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable shelving unit. Items host on each row." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.description" +msgstr "設定可能な棚。各段にアイテムを置けます。" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.label" -msgstr "壁" +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.label" +msgstr "棚" -# Source-Hash: 9843edd68426fa2d -# Review: human -# English: "Draw one wall at a time." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.lead" -msgstr "壁を1面ずつ描画します。" +# Source-Hash: c52492c73312a922 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The top-level container holding buildings, zones, and the property boundary." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.site.description" +msgstr "建物、ゾーン、敷地境界を含む最上位のコンテナ。" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.title" -msgstr "壁" +# Source-Hash: 91f90818d42a984e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Site" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.site.label" +msgstr "敷地" -# Source-Hash: 9fc7a39bc32f287a +# Source-Hash: 67d903d7fe0c69c1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Framed glass opening on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.plugins" -msgstr "プラグイン" +msgid "node.skylight.description" +msgstr "屋根面の枠付きガラス開口。" -# Source-Hash: c54f9bac358893d8 +# Source-Hash: 358826fbdeaf72b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "2D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Skylight" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view2d" -msgstr "2D" +msgid "node.skylight.label" +msgstr "天窓" -# Source-Hash: f78f2fa035f25f85 +# Source-Hash: ad8f8036d34f6cea # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A polygon-bounded floor surface that hosts items on top." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view3d" -msgstr "3D" +msgid "node.slab.description" +msgstr "多角形で囲まれた床面。上にアイテムを置けます。" -# Source-Hash: 05b65242d8c48791 +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Auto" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Slab" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.auto" -msgstr "自動" +msgid "node.slab.label" +msgstr "スラブ" -# Source-Hash: 7890c110650ad1e5 +# Source-Hash: 065ffaaf64ab479d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Browse plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Grid of photovoltaic panels mounted on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.browsePlugins" -msgstr "プラグインを探す" +msgid "node.solarPanel.description" +msgstr "屋根面に設置した太陽光パネルの配列。" -# Source-Hash: 3b11e7af681a9dcd +# Source-Hash: 4d18446ff8eaa680 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Solar Panel" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeLabel" -msgstr "{label}を閉じる" +msgid "node.solarPanel.label" +msgstr "太陽光パネル" -# Source-Hash: 3f00e92517e3f4a5 +# Source-Hash: 638f17c80f424dd3 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Player or camera origin within a level. One per level." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeSplit" -msgstr "分割を閉じる (\\)" +msgid "node.spawn.description" +msgstr "階層内のプレイヤーまたはカメラの起点。階層ごとに1つ。" -# Source-Hash: 94cc8e9f1ee16edb +# Source-Hash: 3e2f6b4274f592c0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Ground" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Spawn Point" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.ground" -msgstr "地面" +msgid "node.spawn.label" +msgstr "スポーン地点" -# Source-Hash: 0d472502a4d36e86 +# Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A stair composed of one or more flights with configurable treads, risers, railings." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundSolid" -msgstr "{standing, select, partly {一部地盤面下 · 地面ソリッド} below {地盤面下 · 地面ソリッド} other {地面ソリッド}}" +msgid "node.stair.description" +msgstr "1つ以上の段部分で構成され、踏板・蹴込み・手すりを設定できる階段。" -# Source-Hash: 1b6798c307ac1b96 +# Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundVeiled" -msgstr "{standing, select, partly {一部地盤面下 · 地面を透過} below {地盤面下 · 地面を透過} other {地面を透過}}" +msgid "node.stair.label" +msgstr "階段" -# Source-Hash: ebdc976a98e82626 +# Source-Hash: ce0b6361eb77e93c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Keep the ground solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A single flight of a parent stair." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.keepTheGroundSolid" -msgstr "地面をソリッドのままにする" +msgid "node.stairSegment.description" +msgstr "親階段の1つの段部分。" -# Source-Hash: 5f827686a006d88c +# Source-Hash: 2159ec5769e1c59a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "More views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair Segment" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.moreViews" -msgstr "その他のビュー" +msgid "node.stairSegment.label" +msgstr "階段の段部分" -# Source-Hash: f175bbcf457ab73c +# Source-Hash: 5434a3189441c913 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pane {pane} views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Persistent construction grid axis with identification bubbles." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.paneViews" -msgstr "ペイン {pane} のビュー" +msgid "node.structuralGrid.description" +msgstr "符号付きバブルのある常設の通り芯。" -# Source-Hash: 33c20cc33dce9a9b +# Source-Hash: 0cfe636f7fdd9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Structural Grid" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinLabel" -msgstr "{label}をピン留め" +msgid "node.structuralGrid.label" +msgstr "構造通り芯" -# Source-Hash: 3f7231b1eb2f93f3 +# Source-Hash: 36b714210f25c284 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin to the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wind-driven spinning whirlybird exhaust vent for a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinToTheViewBar" -msgstr "ビューバーにピン留め" +msgid "node.turbineVent.description" +msgstr "屋根勾配用の風力で回るタービン排気口。" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 4a855abb962f5e7a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Turbine Vent" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.solid" -msgstr "ソリッド" +msgid "node.turbineVent.label" +msgstr "タービン換気扇" -# Source-Hash: 98f22f3f89f17686 +# Source-Hash: e3d2aaaf5c72bc3b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A named group of zones forming one apartment, hotel room or commercial lot." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split" -msgstr "分割 (\\)" +msgid "node.unit.description" +msgstr "1つの住戸、客室、テナント区画を構成する名前付きゾーンのグループ。" -# Source-Hash: e4cd64b1680ac0d2 +# Source-Hash: 062cc0f1afef0c52 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Unit" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split2" -msgstr "分割" +msgid "node.unit.label" +msgstr "住戸" -# Source-Hash: 15b0adc705923a27 +# Source-Hash: 6c753f6234766116 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Swap panes" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.swapPanes" -msgstr "ペインを入れ替え" +msgid "node.wall.description" +msgstr "直線または曲線の壁。ドア、窓、差し掛け、壁付けアイテムを取り付けられます。" -# Source-Hash: 9781bcdb7a8549e2 +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin from the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wall" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinFromTheViewBar" -msgstr "ビューバーからピン留めを外す" +msgid "node.wall.label" +msgstr "壁" -# Source-Hash: f667358dec4abdea +# Source-Hash: ea6a51e66eb0c0dc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A window cut into a wall. Animated open/close for opening windows." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinLabel" -msgstr "{label}のピン留めを外す" +msgid "node.window.description" +msgstr "壁に設けた窓。開閉する窓はアニメーション付き。" -# Source-Hash: e96581f0bbf9fa91 +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Veil the ground over a level below grade" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Window" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.veilTheGroundOverALevel" -msgstr "地盤面下の階層の上で地面を透過" +msgid "node.window.label" +msgstr "窓" -# Source-Hash: fb82f09f8ed3059e +# Source-Hash: 4a4d97a4101793b7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A polygonal site zone (lawn, water, paving) with a TSL gradient material." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.views" -msgstr "ビュー" +msgid "node.zone.description" +msgstr "TSL グラデーション素材を使う多角形の敷地ゾーン(芝生、水面、舗装)。" + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.zone.label" +msgstr "ゾーン" # Source-Hash: 8bf25afa3cb8baea # Review: human diff --git a/packages/editor/src/i18n/locales/zh-CN/messages.po b/packages/editor/src/i18n/locales/zh-CN/messages.po index fdffefa9bd..cded9d9b70 100644 --- a/packages/editor/src/i18n/locales/zh-CN/messages.po +++ b/packages/editor/src/i18n/locales/zh-CN/messages.po @@ -23,1205 +23,7345 @@ msgstr "" msgid "app.appShell.pascalHome" msgstr "Pascal 首页" -# Source-Hash: 2ee62be78ba76f53 +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "All projects" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.allProjects" -msgstr "所有项目" +msgid "app.buildTab.addGate" +msgstr "添加大门" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/editor-navbar.tsx +# English: "Add Open Passage" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.preview" -msgstr "预览" +msgid "app.buildTab.addOpenPassage" +msgstr "添加通道" -# Source-Hash: 9f2cbc9214c8f7b0 +# Source-Hash: 9a4d56454dc89966 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Project name" -#: apps/editor/components/editor-navbar.tsx +# English: "Add to rooms" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.projectName" -msgstr "项目名称" +msgid "app.buildTab.addToRooms" +msgstr "添加到房间" -# Source-Hash: 150e143a84240eee +# Source-Hash: a17210912addc85f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rename project" -#: apps/editor/components/editor-navbar.tsx +# English: "← All build tools" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.renameProject" -msgstr "重命名项目" +msgid "app.buildTab.allBuildTools" +msgstr "← 所有建造工具" -# Source-Hash: 331e1584943b09b9 +# Source-Hash: 6b63404967e1d5b2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share" -#: apps/editor/components/editor-navbar.tsx +# English: "Choose Gate or Open Passage, then click its position on any fence. Find placed gates and openings under their fence in the scene graph." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.editorNavbar.share" -msgstr "分享" +msgid "app.buildTab.chooseGateOrOpenPassageThen" +msgstr "选择大门或通道,然后在任意围栏上点击其位置。已放置的大门和开口位于场景图中所属围栏下。" -# Source-Hash: 703e1b4b9b715d3b +# Source-Hash: 8fd051e1e1a6c1a1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Anyone with the link can view this project. They cannot edit it." -#: apps/editor/components/share-panel.tsx +# English: "Click a lineset to lay the line beside it." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.anyoneWithTheLinkCanView" -msgstr "任何拥有链接的人都可以查看此项目,但无法编辑。" +msgid "app.buildTab.clickALinesetToLayThe" +msgstr "点击冷媒管组,在其旁边布线。" -# Source-Hash: 07e04484867c17d3 +# Source-Hash: 7308869944020839 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copied" -#: apps/editor/components/share-panel.tsx +# English: "Double gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copied" -msgstr "已复制" +msgid "app.buildTab.doubleGate" +msgstr "双开大门" -# Source-Hash: 4f60d1e142affa9c +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Copy" -#: apps/editor/components/share-panel.tsx +# English: "Features & extensions" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.copy" -msgstr "复制" +msgid "app.buildTab.featuresExtensions" +msgstr "构件与扩建" -# Source-Hash: 8ff50e1a9962a4db +# Source-Hash: b18788f1d889c1d0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not read the sharing state." -#: apps/editor/components/share-panel.tsx +# English: "Fence features" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotReadTheSharingState" -msgstr "无法读取分享状态。" +msgid "app.buildTab.fenceFeatures" +msgstr "围栏构件" -# Source-Hash: 791e281338a51483 +# Source-Hash: 62803100bd6e7cc2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn off the public link." -#: apps/editor/components/share-panel.tsx +# English: "Follow lineset" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOffThePublic" -msgstr "无法关闭公开链接。" +msgid "app.buildTab.followLineset" +msgstr "沿冷媒管组" -# Source-Hash: 2c5ddecfd652ba63 +# Source-Hash: 4a479aa23542d766 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Could not turn on the public link." -#: apps/editor/components/share-panel.tsx +# English: "Gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.couldNotTurnOnThePublic" -msgstr "无法开启公开链接。" +msgid "app.buildTab.gate" +msgstr "大门" -# Source-Hash: 15e49d4da8765318 +# Source-Hash: 54098b5ee574737a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed code" -#: apps/editor/components/share-panel.tsx +# English: "Gate style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedCode" -msgstr "嵌入代码" +msgid "app.buildTab.gateStyle" +msgstr "大门样式" -# Source-Hash: d4523c2d303f99b0 +# Source-Hash: 8fec7e969045a8e7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Embed link" -#: apps/editor/components/share-panel.tsx +# English: "Horizontal boards" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.embedLink" -msgstr "嵌入链接" +msgid "app.buildTab.horizontalBoards" +msgstr "横向板条" -# Source-Hash: 252f2cbf5e1609a5 +# Source-Hash: 09197c4fea516277 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Hide controls" -#: apps/editor/components/share-panel.tsx +# English: "Hover a fence to preview. Click to place. Esc cancels. Leave room between openings." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.hideControls" -msgstr "隐藏控件" +msgid "app.buildTab.hoverAFenceToPreviewClick" +msgstr "悬停在围栏上预览,点击放置,按 Esc 取消。开口之间请留出间距。" -# Source-Hash: ba77c0610a63bb2b +# Source-Hash: c390ba248e629b9e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Link" -#: apps/editor/components/share-panel.tsx +# English: "Leaves" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.link" -msgstr "链接" +msgid "app.buildTab.leaves" +msgstr "门扇" -# Source-Hash: a2560430aaec31d9 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Only the 3D view, no header or toolbar." -#: apps/editor/components/share-panel.tsx +# English: "Liquid Line" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.onlyThe3dViewNoHeader" -msgstr "仅显示 3D 视图,不显示标题栏或工具栏。" +msgid "app.buildTab.liquidLine" +msgstr "液管" -# Source-Hash: 3e52f04f92e08070 +# Source-Hash: c15c1af69ec5c1eb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Open" -#: apps/editor/components/share-panel.tsx +# English: "Match fence style" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.open" -msgstr "打开" +msgid "app.buildTab.matchFenceStyle" +msgstr "匹配围栏样式" -# Source-Hash: b34faaa5378056c6 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Public link" -#: apps/editor/components/share-panel.tsx +# English: "MEP" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.publicLink" -msgstr "公开链接" +msgid "app.buildTab.mep" +msgstr "机电" -# Source-Hash: 7525e8007fcab09b +# Source-Hash: 50accd740fa2e736 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Share project" -#: apps/editor/components/share-panel.tsx +# English: "Off" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.sharePanel.shareProject" -msgstr "分享项目" +msgid "app.buildTab.off" +msgstr "关" -# Source-Hash: 3d3f438d5a49eba7 +# Source-Hash: 9cc01faad79c28da # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Automatic dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "On" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.automaticDimensions" -msgstr "自动尺寸" +msgid "app.buildTab.on" +msgstr "开" -# Source-Hash: 14622745dbf93f4c +# Source-Hash: e04298381837252f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Camera" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.camera" -msgstr "相机" +msgid "app.buildTab.opening" +msgstr "开口" -# Source-Hash: e6bce525c47ba3ac +# Source-Hash: 9514d3c022e68808 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Clean plan; dimensions appear with selection" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Opening width (m)" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" -msgstr "简洁平面;选中时显示尺寸" +msgid "app.buildTab.openingWidthM" +msgstr "开口宽度(米)" -# Source-Hash: 61ce356577cfb04a +# Source-Hash: 6b108fb1d0eb8f9d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Collapse sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Open rails" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.collapseSidebar" -msgstr "收起侧边栏" +msgid "app.buildTab.openRails" +msgstr "开放栏杆" -# Source-Hash: 2416a48df28d6205 +# Source-Hash: a5a7af5e5fff1c81 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Crisp, opaque edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Outdoor" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.crispOpaqueEdgeLines" -msgstr "清晰、不透明的边线" +msgid "app.buildTab.outdoor" +msgstr "室外" -# Source-Hash: 4da8b3678ed77b45 +# Source-Hash: 9295ddc2805b21e2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Cutaway" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Picket" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.cutaway" -msgstr "剖切" +msgid "app.buildTab.picket" +msgstr "尖桩" -# Source-Hash: 4ca0e0e73229540c +# Source-Hash: 3a08ede9e51d5395 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Default" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof type" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.default" -msgstr "默认" +msgid "app.buildTab.roofType" +msgstr "屋顶类型" -# Source-Hash: a313661ef9dd0a65 +# Source-Hash: 0f9daa442776a317 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rooms already create their floor and ceiling. Use these for platforms and one-off structure." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.display" -msgstr "显示" +msgid "app.buildTab.roomsAlreadyCreateTheirFloorAnd" +msgstr "房间会自动创建地面和天花板。这些工具用于平台和单独的结构。" -# Source-Hash: d0db46f206a88e2e +# Source-Hash: fc79fd0c7730de76 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Display settings" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search build tools and kitchen items" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.displaySettings" -msgstr "显示设置" +msgid "app.buildTab.searchBuildToolsAndKitchenItems" +msgstr "搜索建造工具和厨房物品" -# Source-Hash: 0286962ab8e9cfcd +# Source-Hash: dc1901f276edca6f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Door/window marks" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Search tools, fridge, sink…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.doorWindowMarks" -msgstr "门窗标记" +msgid "app.buildTab.searchToolsFridgeSink" +msgstr "搜索工具、冰箱、水槽…" -# Source-Hash: 027bbc8b7287c06a +# Source-Hash: 9558db89023d4f05 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Edges" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select a curved wall to match its radius and arc." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.edges" -msgstr "边线" +msgid "app.buildTab.selectACurvedWallToMatch" +msgstr "选择一面曲面墙体以匹配其半径和弧度。" -# Source-Hash: d86126c5d16c6238 +# Source-Hash: d327097d9ac1099f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Enter VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Single gate" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.enterVr" -msgstr "进入 VR" +msgid "app.buildTab.singleGate" +msgstr "单开大门" -# Source-Hash: eb99fb0b382e58cd +# Source-Hash: 99acd5128c51c8a7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exit VR" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab, ceiling, column…" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exitVr" -msgstr "退出 VR" +msgid "app.buildTab.slabCeilingColumn" +msgstr "楼板、天花板、柱…" -# Source-Hash: aeac665749d3101d +# Source-Hash: af6f8885fe0fa4e9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expand sidebar" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Solid privacy" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expandSidebar" -msgstr "展开侧边栏" +msgid "app.buildTab.solidPrivacy" +msgstr "实心遮挡" -# Source-Hash: 08c178ee733ff009 +# Source-Hash: e2b1a3bb9630b33b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Expert" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Trace a line alongside an existing lineset (F)." +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.expert" -msgstr "专家" +msgid "app.buildTab.traceALineAlongsideAnExisting" +msgstr "沿现有冷媒管组布线 (F)。" -# Source-Hash: be12f8788f1f0a05 +# Source-Hash: eba3df14a2de0812 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Exploded" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Vertical slats" +#: apps/editor/components/build-tab.tsx #, fuzzy -msgid "app.viewerToolbar.exploded" -msgstr "分解" +msgid "app.buildTab.verticalSlats" +msgstr "竖向板条" -# Source-Hash: c6f865a366ef5755 +# Source-Hash: 2ee62be78ba76f53 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Face of stud" -#: apps/editor/components/viewer-toolbar.tsx +# English: "All projects" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faceOfStud" -msgstr "龙骨面" +msgid "app.editorNavbar.allProjects" +msgstr "所有项目" -# Source-Hash: 0c583f1d4201293b +# Source-Hash: 20226b68d5467072 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Faint outline of major creases" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Preview" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.faintOutlineOfMajorCreases" -msgstr "主要折边的淡轮廓" +msgid "app.editorNavbar.preview" +msgstr "预览" -# Source-Hash: 08ecd5878b08139d +# Source-Hash: 9f2cbc9214c8f7b0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Feet & inches" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Project name" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.feetInches" -msgstr "英尺和英寸" +msgid "app.editorNavbar.projectName" +msgstr "项目名称" -# Source-Hash: 43b8017fa821c46c +# Source-Hash: 150e143a84240eee # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Finished faces" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Rename project" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.finishedFaces" -msgstr "完成面" +msgid "app.editorNavbar.renameProject" +msgstr "重命名项目" -# Source-Hash: 8827df1cdeb02ed9 +# Source-Hash: 331e1584943b09b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Flat and fast — no ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Share" +#: apps/editor/components/editor-navbar.tsx #, fuzzy -msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" -msgstr "平面且快速 — 无环境光遮蔽" +msgid "app.editorNavbar.share" +msgstr "分享" -# Source-Hash: 060a718cdcff61b3 +# Source-Hash: 4b2f676fb4c9ec63 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add {label}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanAnnotations" -msgstr "平面图标注" +msgid "app.kitchenBrowser.addLabel" +msgstr "添加{label}" -# Source-Hash: 483171f79dc32ae5 +# Source-Hash: 53f98cc505aacbb1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Floor plan mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add to kitchen" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.floorPlanMode" -msgstr "平面图模式" +msgid "app.kitchenBrowser.addToKitchen" +msgstr "添加到厨房" -# Source-Hash: 8bb9e54fc786ca77 +# Source-Hash: 923a2e81dcc77852 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full ambient occlusion" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Choose an item, then click to place it. Appliances include their cabinetry." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullAmbientOcclusion" -msgstr "完整环境光遮蔽" +msgid "app.kitchenBrowser.chooseAnItemThenClickTo" +msgstr "选择物品,然后点击放置。电器包含配套柜体。" -# Source-Hash: 91fd3544d9ce16bf +# Source-Hash: 44156a2c888e8a4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full documentation and annotation controls" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find in this project · {length}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" -msgstr "完整的图档与标注控件" +msgid "app.kitchenBrowser.findInThisProjectLength" +msgstr "在本项目中查找 · {length}" -# Source-Hash: 131bac2467f4fdf6 +# Source-Hash: aeda65db67edac21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full height" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Find {name}" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullHeight" -msgstr "全高" +msgid "app.kitchenBrowser.findName" +msgstr "查找{name}" -# Source-Hash: c9838bc98cb35125 +# Source-Hash: c1d847411ba09cd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Full wall thickness" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · Add" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.fullWallThickness" -msgstr "墙体全厚" +msgid "app.kitchenBrowser.groupAdd" +msgstr "厨房 · 添加" -# Source-Hash: 7e4a0a38f694be6b +# Source-Hash: bb3f4f8d3407c409 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Grid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen · In this project" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.grid" -msgstr "网格" +msgid "app.kitchenBrowser.groupInThisProject" +msgstr "厨房 · 本项目中" -# Source-Hash: 4bf4a6861d7d633e +# Source-Hash: 25ffad31086309f1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Levels: {mode}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen cabinet" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.levelsMode" -msgstr "楼层:{mode}" +msgid "app.kitchenBrowser.kitchenCabinet" +msgstr "厨房橱柜" -# Source-Hash: 803532407fb5962b +# Source-Hash: a5af7817a7e8947d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Low" -#: apps/editor/components/viewer-toolbar.tsx +# English: "No matching kitchen items placed yet." +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.low" -msgstr "矮墙" +msgid "app.kitchenBrowser.noMatchingKitchenItemsPlacedYet" +msgstr "尚未放置匹配的厨房物品。" -# Source-Hash: 32f9a404c0bdce10 +# Source-Hash: 640155f99c25773b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Magnetic snap" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Select and show in scene" +#: apps/editor/components/kitchen-browser.tsx #, fuzzy -msgid "app.viewerToolbar.magneticSnap" -msgstr "磁性吸附" +msgid "app.kitchenBrowser.selectAndShowInScene" +msgstr "选中并在场景中显示" -# Source-Hash: 387082cd5f118bed +# Source-Hash: 4275c05172abd7fb # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Ceiling" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manual" -msgstr "手动" +msgid "app.lib.buildPalette.ceiling" +msgstr "天花板" -# Source-Hash: 2fb69122dd996c0a +# Source-Hash: 3530ac1f4046cd22 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Manual dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Column" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.manualDimensions" -msgstr "手动尺寸" +msgid "app.lib.buildPalette.column" +msgstr "柱" -# Source-Hash: c6aa74075f37313a +# Source-Hash: 787e10f5db16904e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Door" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.measurements" -msgstr "测量" +msgid "app.lib.buildPalette.door" +msgstr "门" -# Source-Hash: 0a39470be3b84536 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Meters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.meters" -msgstr "米" +msgid "app.lib.buildPalette.duct" +msgstr "风管" -# Source-Hash: 83cce6c521e71d01 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Millimeters" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.millimeters" -msgstr "毫米" +msgid "app.lib.buildPalette.dwvPipe" +msgstr "排水管" -# Source-Hash: b784527bb90b9c5e +# Source-Hash: ab5cbab7be160a1c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D measurements" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Elevator" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.n3dMeasurements" -msgstr "3D 测量" +msgid "app.lib.buildPalette.elevator" +msgstr "电梯" -# Source-Hash: 4ff58913a4492199 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "No edge lines" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.noEdgeLines" -msgstr "无边线" +msgid "app.lib.buildPalette.fence" +msgstr "围栏" -# Source-Hash: 50accd740fa2e736 +# Source-Hash: 3bf1c1a8dbb93743 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Off" -#: apps/editor/components/viewer-toolbar.tsx +# English: "HVAC Unit" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.off" -msgstr "关" +msgid "app.lib.buildPalette.hvacUnit" +msgstr "暖通设备" -# Source-Hash: 9cc01faad79c28da +# Source-Hash: 1176d2568d093bf1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "On" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Kitchen" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.on" -msgstr "开" +msgid "app.lib.buildPalette.kitchen" +msgstr "厨房" -# Source-Hash: ed59dd8ce7797a66 +# Source-Hash: 362b03eba9d8234c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Orthographic" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Lineset" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.orthographic" -msgstr "正交" +msgid "app.lib.buildPalette.lineset" +msgstr "冷媒管组" -# Source-Hash: 316e25993ff72b88 +# Source-Hash: c34c9b36492c6e21 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Perspective" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Liquid Line" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.perspective" -msgstr "透视" +msgid "app.lib.buildPalette.liquidLine" +msgstr "液管" -# Source-Hash: 20226b68d5467072 +# Source-Hash: 95057eef5cd69340 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview" -#: apps/editor/components/viewer-toolbar.tsx +# English: "MEP" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.preview" -msgstr "预览" +msgid "app.lib.buildPalette.mep" +msgstr "机电" -# Source-Hash: 34c20b72a42ca618 +# Source-Hash: 161e5386b939e1bc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Preview mode" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Register" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.previewMode" -msgstr "预览模式" +msgid "app.lib.buildPalette.register" +msgstr "风口" -# Source-Hash: 5e58af99d6d4fa6a +# Source-Hash: f5f730969df63d1d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Render" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Roof" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.render" -msgstr "渲染" +msgid "app.lib.buildPalette.roof" +msgstr "屋顶" -# Source-Hash: f363702a10aedaeb +# Source-Hash: d7145f84f8e0e3fe # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Rendered" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Shelf" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.rendered" -msgstr "渲染" +msgid "app.lib.buildPalette.shelf" +msgstr "置物架" -# Source-Hash: 4959d5538efc595c +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Room labels" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Slab" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.roomLabels" -msgstr "房间标签" +msgid "app.lib.buildPalette.slab" +msgstr "楼板" -# Source-Hash: 82720864e5034398 +# Source-Hash: 95e8af5d2b3ca73d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Scene theme" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Spawn point" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.sceneTheme" -msgstr "场景主题" +msgid "app.lib.buildPalette.spawnPoint" +msgstr "出生点" -# Source-Hash: 4c6bcb30b40047fc +# Source-Hash: f05bc67c57e4d530 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Shadows" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Stairs" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.shadows" -msgstr "阴影" +msgid "app.lib.buildPalette.stairs" +msgstr "楼梯" -# Source-Hash: 59dc62417b44931d +# Source-Hash: 96281876ce53ba08 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Single wall axis" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrace" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.singleWallAxis" -msgstr "单一墙体轴线" +msgid "app.lib.buildPalette.terrace" +msgstr "露台" -# Source-Hash: d266d83ec490df4e +# Source-Hash: d457508edd5bb8cf # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Soft" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Terrain" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.soft" -msgstr "柔和" +msgid "app.lib.buildPalette.terrain" +msgstr "地形" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Wall" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solid" -msgstr "实体" +msgid "app.lib.buildPalette.wall" +msgstr "墙体" -# Source-Hash: e9f59b513f2f45ac +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solo" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Window" +#: apps/editor/lib/build-palette.ts #, fuzzy -msgid "app.viewerToolbar.solo" -msgstr "单独" +msgid "app.lib.buildPalette.window" +msgstr "窗" -# Source-Hash: 481b7608ce12139b +# Source-Hash: d40c50013043284f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stack" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Fitting" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stack" -msgstr "堆叠" +msgid "app.lib.buildPanelModel.addFitting" +msgstr "添加管件" -# Source-Hash: 61ad94ca68b0458e +# Source-Hash: 534540df302975a6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Stair annotations" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Gate" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.stairAnnotations" -msgstr "楼梯标注" +msgid "app.lib.buildPanelModel.addGate" +msgstr "添加大门" -# Source-Hash: f82927a01d4c5e45 +# Source-Hash: 8b9110c4e72f2db2 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Strong" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Open Passage" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.strong" -msgstr "强烈" +msgid "app.lib.buildPanelModel.addOpenPassage" +msgstr "添加通道" -# Source-Hash: e1be031e67d95382 +# Source-Hash: 7136b5836de6e69f # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural core face" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Add Trap" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralCoreFace" -msgstr "结构核心面" +msgid "app.lib.buildPanelModel.addTrap" +msgstr "添加存水弯" -# Source-Hash: efc50964d7b0ec47 +# Source-Hash: 8f4b2028ad75465d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Structural grids & column centers" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Build" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.structuralGridsColumnCenters" -msgstr "结构轴网与柱中心" +msgid "app.lib.buildPanelModel.build" +msgstr "建造" -# Source-Hash: 5ce4f6b80cd30f86 +# Source-Hash: a23831beeb35ad3a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Translucent" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Create from" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.translucent" -msgstr "半透明" +msgid "app.lib.buildPanelModel.createFrom" +msgstr "创建来源" -# Source-Hash: b404dded35241274 +# Source-Hash: 8146c309bd8326f6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Units" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Draw the roof footprint with two corner clicks." +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.units" -msgstr "单位" +msgid "app.lib.buildPanelModel.drawTheRoofFootprintWithTwo" +msgstr "点击两个角点绘制屋顶轮廓。" -# Source-Hash: faf51e28b748e0d9 +# Source-Hash: e971d82044e2f48e # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walkthrough" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Duct" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.walkthrough" -msgstr "漫游" +msgid "app.lib.buildPanelModel.duct" +msgstr "风管" -# Source-Hash: 62281975e51da7e3 +# Source-Hash: 457155657704f7cc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall centerline" -#: apps/editor/components/viewer-toolbar.tsx +# English: "DWV Pipe" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallCenterline" -msgstr "墙体中心线" +msgid "app.lib.buildPanelModel.dwvPipe" +msgstr "排水管" -# Source-Hash: ff145d7003118ec6 +# Source-Hash: 281d63a4b3e2de4d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Wall dimensions" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Features & extensions" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallDimensions" -msgstr "墙体尺寸" +msgid "app.lib.buildPanelModel.featuresExtensions" +msgstr "构件与扩建" -# Source-Hash: 13969d1d6e310aa4 +# Source-Hash: 02042fde61b5aa11 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Walls: {label}" -#: apps/editor/components/viewer-toolbar.tsx +# English: "Fence" +#: apps/editor/lib/build-panel-model.ts #, fuzzy -msgid "app.viewerToolbar.wallsLabel" -msgstr "墙体:{label}" +msgid "app.lib.buildPanelModel.fence" +msgstr "围栏" -# Source-Hash: 8caa959c0ae800c3 -# Review: human -# English: "Basement" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basement" -msgstr "地下层" +# Source-Hash: 62803100bd6e7cc2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow lineset" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.followLineset" +msgstr "沿冷媒管组" -# Source-Hash: 14927085ee91ba05 -# Review: human -# English: "Basement {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.basementNumber" -msgstr "地下 {number} 层" +# Source-Hash: c80972ec078ac551 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gates & openings" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.gatesOpenings" +msgstr "大门与开口" -# Source-Hash: e59074a7b9b3f56e -# Review: human -# English: "Floor {number}" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.floorNumber" -msgstr "{number} 层" +# Source-Hash: 3720347aa16ee777 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a room to preview its boundary, then click to place." +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.hoverARoomToPreviewIts" +msgstr "悬停在房间上预览其边界,然后点击放置。" -# Source-Hash: cde3efc9b7ddfa41 -# Review: human -# English: "Ground floor" -#: packages/editor/src/i18n/level-name.ts -msgid "core.level.groundFloor" -msgstr "首层" +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.kitchen" +msgstr "厨房" -# Source-Hash: f571cb2d06ae01ae -# Review: human -# English: "Advanced" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.advanced" -msgstr "高级" +# Source-Hash: 95057eef5cd69340 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "MEP" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.mep" +msgstr "机电" -# Source-Hash: fb40866c2d6db5fb -# Review: human -# English: "walls · floor · ceiling" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.hint" -msgstr "墙体 · 楼板 · 天花板" +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.modularCabinet" +msgstr "组合橱柜" -# Source-Hash: 271039bd919dc4c1 -# Review: human -# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.idle" +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.off" +msgstr "关" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.on" +msgstr "开" + +# Source-Hash: 3fafdc69e7756f19 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Painting" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.painting" +msgstr "涂装" + +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roof" +msgstr "屋顶" + +# Source-Hash: 3a08ede9e51d5395 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof type" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.roofType" +msgstr "屋顶类型" + +# Source-Hash: 0c35bee851cc57a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# tool} other {# tools}}" +#: apps/editor/lib/build-panel-model.ts +#, fuzzy +msgid "app.lib.buildPanelModel.toolCount" +msgstr "{count, plural, other {# 个工具}}" + +# Source-Hash: 3241ecabee8221a1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Conical" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.conical" +msgstr "圆锥" + +# Source-Hash: b5c56dd8c68de309 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.draw" +msgstr "绘制" + +# Source-Hash: 6949d667043bee0b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dutch" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.dutch" +msgstr "荷兰式" + +# Source-Hash: 9cab4d4c95f63cdd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.flat" +msgstr "平屋顶" + +# Source-Hash: deaffa095d126dfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gable" +msgstr "双坡" + +# Source-Hash: 7f53d9ffca39984a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gambrel" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.gambrel" +msgstr "复折式" + +# Source-Hash: 9eda0ea8d447066d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hip" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.hip" +msgstr "四坡" + +# Source-Hash: 7f7bb0e875af3260 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mansard" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.mansard" +msgstr "孟莎式" + +# Source-Hash: 612dcd5bf06a79c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.room" +msgstr "房间" + +# Source-Hash: c8d0df27faa3feaa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shed" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.shed" +msgstr "单坡" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: apps/editor/lib/build-tab-state.ts +#, fuzzy +msgid "app.lib.buildTabState.wall" +msgstr "墙体" + +# Source-Hash: 703e1b4b9b715d3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Anyone with the link can view this project. They cannot edit it." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.anyoneWithTheLinkCanView" +msgstr "任何拥有链接的人都可以查看此项目,但无法编辑。" + +# Source-Hash: 07e04484867c17d3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copied" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copied" +msgstr "已复制" + +# Source-Hash: 4f60d1e142affa9c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Copy" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.copy" +msgstr "复制" + +# Source-Hash: 8ff50e1a9962a4db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not read the sharing state." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotReadTheSharingState" +msgstr "无法读取分享状态。" + +# Source-Hash: 791e281338a51483 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn off the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOffThePublic" +msgstr "无法关闭公开链接。" + +# Source-Hash: 2c5ddecfd652ba63 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Could not turn on the public link." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.couldNotTurnOnThePublic" +msgstr "无法开启公开链接。" + +# Source-Hash: 15e49d4da8765318 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed code" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedCode" +msgstr "嵌入代码" + +# Source-Hash: d4523c2d303f99b0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Embed link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.embedLink" +msgstr "嵌入链接" + +# Source-Hash: 252f2cbf5e1609a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide controls" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.hideControls" +msgstr "隐藏控件" + +# Source-Hash: ba77c0610a63bb2b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.link" +msgstr "链接" + +# Source-Hash: a2560430aaec31d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Only the 3D view, no header or toolbar." +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.onlyThe3dViewNoHeader" +msgstr "仅显示 3D 视图,不显示标题栏或工具栏。" + +# Source-Hash: 3e52f04f92e08070 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.open" +msgstr "打开" + +# Source-Hash: b34faaa5378056c6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Public link" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.publicLink" +msgstr "公开链接" + +# Source-Hash: 7525e8007fcab09b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Share project" +#: apps/editor/components/share-panel.tsx +#, fuzzy +msgid "app.sharePanel.shareProject" +msgstr "分享项目" + +# Source-Hash: 3d3f438d5a49eba7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Automatic dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.automaticDimensions" +msgstr "自动尺寸" + +# Source-Hash: 14622745dbf93f4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.camera" +msgstr "相机" + +# Source-Hash: e6bce525c47ba3ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clean plan; dimensions appear with selection" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cleanPlanDimensionsAppearWithSelection" +msgstr "简洁平面;选中时显示尺寸" + +# Source-Hash: 61ce356577cfb04a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Collapse sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.collapseSidebar" +msgstr "收起侧边栏" + +# Source-Hash: 2416a48df28d6205 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Crisp, opaque edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.crispOpaqueEdgeLines" +msgstr "清晰、不透明的边线" + +# Source-Hash: 4da8b3678ed77b45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cutaway" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.cutaway" +msgstr "剖切" + +# Source-Hash: 4ca0e0e73229540c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Default" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.default" +msgstr "默认" + +# Source-Hash: a313661ef9dd0a65 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.display" +msgstr "显示" + +# Source-Hash: d0db46f206a88e2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Display settings" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.displaySettings" +msgstr "显示设置" + +# Source-Hash: 0286962ab8e9cfcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door/window marks" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.doorWindowMarks" +msgstr "门窗标记" + +# Source-Hash: 027bbc8b7287c06a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edges" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.edges" +msgstr "边线" + +# Source-Hash: d86126c5d16c6238 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.enterVr" +msgstr "进入 VR" + +# Source-Hash: eb99fb0b382e58cd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit VR" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exitVr" +msgstr "退出 VR" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expandSidebar" +msgstr "展开侧边栏" + +# Source-Hash: 08c178ee733ff009 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expert" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.expert" +msgstr "专家" + +# Source-Hash: be12f8788f1f0a05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exploded" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.exploded" +msgstr "分解" + +# Source-Hash: c6f865a366ef5755 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Face of stud" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faceOfStud" +msgstr "龙骨面" + +# Source-Hash: 0c583f1d4201293b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Faint outline of major creases" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.faintOutlineOfMajorCreases" +msgstr "主要折边的淡轮廓" + +# Source-Hash: 08ecd5878b08139d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Feet & inches" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.feetInches" +msgstr "英尺和英寸" + +# Source-Hash: 43b8017fa821c46c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finished faces" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.finishedFaces" +msgstr "完成面" + +# Source-Hash: 8827df1cdeb02ed9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flat and fast — no ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.flatAndFastNoAmbientOcclusion" +msgstr "平面且快速 — 无环境光遮蔽" + +# Source-Hash: 060a718cdcff61b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanAnnotations" +msgstr "平面图标注" + +# Source-Hash: 483171f79dc32ae5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.floorPlanMode" +msgstr "平面图模式" + +# Source-Hash: 8bb9e54fc786ca77 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full ambient occlusion" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullAmbientOcclusion" +msgstr "完整环境光遮蔽" + +# Source-Hash: 91fd3544d9ce16bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full documentation and annotation controls" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullDocumentationAndAnnotationControls" +msgstr "完整的图档与标注控件" + +# Source-Hash: 131bac2467f4fdf6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full height" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullHeight" +msgstr "全高" + +# Source-Hash: c9838bc98cb35125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Full wall thickness" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.fullWallThickness" +msgstr "墙体全厚" + +# Source-Hash: 7e4a0a38f694be6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.grid" +msgstr "网格" + +# Source-Hash: 4bf4a6861d7d633e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Levels: {mode}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.levelsMode" +msgstr "楼层:{mode}" + +# Source-Hash: 803532407fb5962b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.low" +msgstr "矮墙" + +# Source-Hash: 32f9a404c0bdce10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Magnetic snap" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.magneticSnap" +msgstr "磁性吸附" + +# Source-Hash: 387082cd5f118bed +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manual" +msgstr "手动" + +# Source-Hash: 2fb69122dd996c0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Manual dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.manualDimensions" +msgstr "手动尺寸" + +# Source-Hash: c6aa74075f37313a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.measurements" +msgstr "测量" + +# Source-Hash: 0a39470be3b84536 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Meters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.meters" +msgstr "米" + +# Source-Hash: 83cce6c521e71d01 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Millimeters" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.millimeters" +msgstr "毫米" + +# Source-Hash: b784527bb90b9c5e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D measurements" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.n3dMeasurements" +msgstr "3D 测量" + +# Source-Hash: 4ff58913a4492199 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No edge lines" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.noEdgeLines" +msgstr "无边线" + +# Source-Hash: 50accd740fa2e736 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Off" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.off" +msgstr "关" + +# Source-Hash: 9cc01faad79c28da +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "On" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.on" +msgstr "开" + +# Source-Hash: ed59dd8ce7797a66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orthographic" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.orthographic" +msgstr "正交" + +# Source-Hash: 316e25993ff72b88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perspective" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.perspective" +msgstr "透视" + +# Source-Hash: 20226b68d5467072 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.preview" +msgstr "预览" + +# Source-Hash: 34c20b72a42ca618 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Preview mode" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.previewMode" +msgstr "预览模式" + +# Source-Hash: 5e58af99d6d4fa6a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Render" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.render" +msgstr "渲染" + +# Source-Hash: f363702a10aedaeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rendered" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.rendered" +msgstr "渲染" + +# Source-Hash: 4959d5538efc595c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Room labels" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.roomLabels" +msgstr "房间标签" + +# Source-Hash: 82720864e5034398 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scene theme" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.sceneTheme" +msgstr "场景主题" + +# Source-Hash: 4c6bcb30b40047fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shadows" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.shadows" +msgstr "阴影" + +# Source-Hash: 59dc62417b44931d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single wall axis" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.singleWallAxis" +msgstr "单一墙体轴线" + +# Source-Hash: d266d83ec490df4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Soft" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.soft" +msgstr "柔和" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solid" +msgstr "实体" + +# Source-Hash: e9f59b513f2f45ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solo" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.solo" +msgstr "单独" + +# Source-Hash: 481b7608ce12139b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stack" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stack" +msgstr "堆叠" + +# Source-Hash: 61ad94ca68b0458e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stair annotations" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.stairAnnotations" +msgstr "楼梯标注" + +# Source-Hash: f82927a01d4c5e45 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Strong" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.strong" +msgstr "强烈" + +# Source-Hash: e1be031e67d95382 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural core face" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralCoreFace" +msgstr "结构核心面" + +# Source-Hash: efc50964d7b0ec47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Structural grids & column centers" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.structuralGridsColumnCenters" +msgstr "结构轴网与柱中心" + +# Source-Hash: 5ce4f6b80cd30f86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Translucent" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.translucent" +msgstr "半透明" + +# Source-Hash: b404dded35241274 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Units" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.units" +msgstr "单位" + +# Source-Hash: faf51e28b748e0d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walkthrough" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.walkthrough" +msgstr "漫游" + +# Source-Hash: 62281975e51da7e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall centerline" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallCenterline" +msgstr "墙体中心线" + +# Source-Hash: ff145d7003118ec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall dimensions" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallDimensions" +msgstr "墙体尺寸" + +# Source-Hash: 13969d1d6e310aa4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls: {label}" +#: apps/editor/components/viewer-toolbar.tsx +#, fuzzy +msgid "app.viewerToolbar.wallsLabel" +msgstr "墙体:{label}" + +# Source-Hash: 8caa959c0ae800c3 +# Review: human +# English: "Basement" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basement" +msgstr "地下层" + +# Source-Hash: 14927085ee91ba05 +# Review: human +# English: "Basement {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.basementNumber" +msgstr "地下 {number} 层" + +# Source-Hash: e59074a7b9b3f56e +# Review: human +# English: "Floor {number}" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.floorNumber" +msgstr "{number} 层" + +# Source-Hash: cde3efc9b7ddfa41 +# Review: human +# English: "Ground floor" +#: packages/editor/src/i18n/level-name.ts +msgid "core.level.groundFloor" +msgstr "首层" + +# Source-Hash: fdd8b3366021a1cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Left" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitLeft" +msgstr "向左环绕" + +# Source-Hash: 4a56359f284a3b17 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Orbit Right" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.orbitRight" +msgstr "向右环绕" + +# Source-Hash: f5c12d738240f889 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Top View" +#: packages/editor/src/components/ui/action-menu/camera-actions.tsx +#, fuzzy +msgid "editor.actionMenu.cameraActions.topView" +msgstr "顶视图" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.delete" +msgstr "删除" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/components/ui/action-menu/control-modes.tsx +#, fuzzy +msgid "editor.actionMenu.controlModes.select" +msgstr "选择" + +# Source-Hash: d9a257653600d5a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resume following" +#: packages/editor/src/components/ui/action-menu/follow-pascal-pill.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalPill.resumeFollowing" +msgstr "恢复跟随" + +# Source-Hash: 4f073f8051cca3ef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: Off" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.off" +msgstr "跟随 Pascal:关" + +# Source-Hash: 328ea04bb8cd12f4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow Pascal: On" +#: packages/editor/src/components/ui/action-menu/follow-pascal-toggle.tsx +#, fuzzy +msgid "editor.actionMenu.followPascalToggle.on" +msgstr "跟随 Pascal:开" + +# Source-Hash: 7f4dcb90defe1ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Appliance" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.appliance" +msgstr "电器" + +# Source-Hash: 0655333424a8b6fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bathroom" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.bathroom" +msgstr "浴室" + +# Source-Hash: ed68e72f5353712b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furniture" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.furniture" +msgstr "家具" + +# Source-Hash: 1176d2568d093bf1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Kitchen" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.kitchen" +msgstr "厨房" + +# Source-Hash: a5a7af5e5fff1c81 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Outdoor" +#: packages/editor/src/components/ui/action-menu/furnish-tools.tsx +#, fuzzy +msgid "editor.actionMenu.furnishTools.outdoor" +msgstr "室外" + +# Source-Hash: c69865ec5d9d1ac9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angle" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angle" +msgstr "角度" + +# Source-Hash: 622f566fe1e3d8e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Angular dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.angularDimension" +msgstr "角度尺寸" + +# Source-Hash: 7e3b0d541355305e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Arc length" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.arcLength" +msgstr "弧长" + +# Source-Hash: 8332ab41e22958f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Area" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.area" +msgstr "面积" + +# Source-Hash: 88c7750ed51d47a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Center mark" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.centerMark" +msgstr "中心标记" + +# Source-Hash: 634912dabb092872 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chord dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.chordDimension" +msgstr "弦长尺寸" + +# Source-Hash: 3cb090120253f68f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.continuousDimension" +msgstr "连续尺寸" + +# Source-Hash: fb91b1d43b8362d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Coordinate dimensions" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.coordinateDimensions" +msgstr "坐标尺寸" + +# Source-Hash: 530cb7ea461e8298 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Diameter dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.diameterDimension" +msgstr "直径尺寸" + +# Source-Hash: fe7ddb094aa8ff4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Distance" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.distance" +msgstr "距离" + +# Source-Hash: fee6203bb9046929 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor plan" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.floorPlan" +msgstr "平面图" + +# Source-Hash: a73539fc472e2e12 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Linear dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.linearDimension" +msgstr "线性尺寸" + +# Source-Hash: 6bba239f244c3d28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement options" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementOptions" +msgstr "测量选项" + +# Source-Hash: 2cf5ca9b834ce8d5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement type" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measurementType" +msgstr "测量类型" + +# Source-Hash: 0431574a0e6d69d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measure: {selectedLabel}" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.measureSelectedlabel" +msgstr "测量:{selectedLabel}" + +# Source-Hash: ac87e14dabd5a256 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Perimeter" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.perimeter" +msgstr "周长" + +# Source-Hash: 6c9acc0589bdd4d6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Radius dimension" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.radiusDimension" +msgstr "半径尺寸" + +# Source-Hash: 01b0015e4e176124 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.smart" +msgstr "智能" + +# Source-Hash: 429bd43d726de417 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Volume" +#: packages/editor/src/components/ui/action-menu/measurement-control.tsx +#, fuzzy +msgid "editor.actionMenu.measurementControl.volume" +msgstr "体积" + +# Source-Hash: 64f3eb5e1936906d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAsk" +msgstr "指点提问" + +# Source-Hash: d86d31e83f6f0888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask (C)" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskC" +msgstr "指点提问 (C)" + +# Source-Hash: 65622d2ef53c1f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Point and ask works in the 3D view" +#: packages/editor/src/components/ui/action-menu/point-ask-button.tsx +#, fuzzy +msgid "editor.actionMenu.pointAskButton.pointAndAskWorksInThe" +msgstr "指点提问仅在 3D 视图中可用" + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ceiling" +msgstr "天花板" + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.column" +msgstr "柱" + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.door" +msgstr "门" + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.duct" +msgstr "风管" + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.ductFitting" +msgstr "风管配件" + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.dwvPipe" +msgstr "排水管" + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.elevator" +msgstr "电梯" + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.fence" +msgstr "围栏" + +# Source-Hash: 7f4d93d5f2083844 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gable Roof" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.gableRoof" +msgstr "双坡屋顶" + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.hvacUnit" +msgstr "暖通设备" + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.lineset" +msgstr "冷媒管组" + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.liquidLine" +msgstr "液管" + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.pipeFitting" +msgstr "管件" + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.register" +msgstr "风口" + +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.shelf" +msgstr "置物架" + +# Source-Hash: 8775bc8dc9593964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slab" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.slab" +msgstr "楼板" + +# Source-Hash: 3e2f6b4274f592c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Spawn Point" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.spawnPoint" +msgstr "出生点" + +# Source-Hash: f05bc67c57e4d530 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Stairs" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.stairs" +msgstr "楼梯" + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.trap" +msgstr "存水弯" + +# Source-Hash: 2210e5ee50b74dc9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Wall" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.wall" +msgstr "墙体" + +# Source-Hash: aa3c35ed33e181e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.window" +msgstr "窗" + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/editor/src/components/ui/action-menu/structure-tools.tsx +#, fuzzy +msgid "editor.actionMenu.structureTools.zone" +msgstr "区域" + +# Source-Hash: 43af78ba61aaa8ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "below" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.below" +msgstr "下方" + +# Source-Hash: cdf3f12939ba108c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteGuideImage" +msgstr "删除参考图" + +# Source-Hash: 6add06abbafa8289 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete scan" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.deleteScan" +msgstr "删除扫描模型" + +# Source-Hash: 6f5e541cb5fb502f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# guide image on this level} other {# guide images on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideCount" +msgstr "{count, plural, other {本楼层有 # 张参考图}}" + +# Source-Hash: 8a832a2f33757bf8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageNumber" +msgstr "参考图 {number}" + +# Source-Hash: 7f3aaccfe8d1af1f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImages" +msgstr "参考图" + +# Source-Hash: 9b1de02505434d74 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide image settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guideImageSettings" +msgstr "参考图设置" + +# Source-Hash: 892d5dd34372028b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guides" +msgstr "参考图" + +# Source-Hash: ccfb05c78d47d6f9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesHidden" +msgstr "参考图:隐藏" + +# Source-Hash: 6d7ca85c4f389991 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guides: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.guidesVisible" +msgstr "参考图:显示" + +# Source-Hash: 5f6264ac469f57c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideGuideImages" +msgstr "隐藏参考图" + +# Source-Hash: cae234c23229c80b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideReferenceFloor" +msgstr "隐藏参考楼层" + +# Source-Hash: 469a8416de876e0e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hide scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.hideScans" +msgstr "隐藏扫描模型" + +# Source-Hash: 22a59ae72d8c9504 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No lower floor available." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.noLowerFloorAvailable" +msgstr "没有可用的下层楼层。" + +# Source-Hash: 1c0b8a5503c5daeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Opacity" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.opacity" +msgstr "不透明度" + +# Source-Hash: 8bbd9bc90ac70a4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloor" +msgstr "参考楼层" + +# Source-Hash: 45493691a23c7690 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor: {selectedLevelName}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSelectedlevelname" +msgstr "参考楼层:{selectedLevelName}" + +# Source-Hash: 7178c7b5a4581367 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference floor settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceFloorSettings" +msgstr "参考楼层设置" + +# Source-Hash: a52848021f822f5b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.references" +msgstr "参考资料" + +# Source-Hash: e59c9eec7dbd6ba1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload GLB meshes as scan references or blueprint images as guide references." +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesEmpty" +msgstr "上传 GLB 网格作为扫描参考,或上传图纸图片作为参考图。" + +# Source-Hash: 3e73d06c3e96efba +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reference settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referenceSettings" +msgstr "参考资料设置" + +# Source-Hash: aa0df2c2f00672e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesHidden" +msgstr "参考资料:隐藏" + +# Source-Hash: 9976708fc92bfa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "References: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.referencesVisible" +msgstr "参考资料:显示" + +# Source-Hash: 320a5f1ec012900b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Riser diagram" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.riserDiagram" +msgstr "立管图" + +# Source-Hash: 357b3d3eaf878a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# scan on this level} other {# scans on this level}}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanCount" +msgstr "{count, plural, other {本楼层有 # 个扫描模型}}" + +# Source-Hash: f09f12547484c888 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan {number}" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanNumber" +msgstr "扫描模型 {number}" + +# Source-Hash: 3260bfa69cca50e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scans" +msgstr "扫描模型" + +# Source-Hash: c9c52015095997e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scan settings" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scanSettings" +msgstr "扫描模型设置" + +# Source-Hash: 60abc9f1a8aec65c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Hidden" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansHidden" +msgstr "扫描模型:隐藏" + +# Source-Hash: 2d2ff119a7dd7911 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scans: Visible" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.scansVisible" +msgstr "扫描模型:显示" + +# Source-Hash: 8211234b205fd9a6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show guide images" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showGuideImages" +msgstr "显示参考图" + +# Source-Hash: 7786cae6acb04cfa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show reference floor" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showReferenceFloor" +msgstr "显示参考楼层" + +# Source-Hash: 6066f0b6cff8a910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Show scans" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.showScans" +msgstr "显示扫描模型" + +# Source-Hash: def6dff836767bda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Upload scan or guide image" +#: packages/editor/src/components/ui/action-menu/view-toggles.tsx +#, fuzzy +msgid "editor.actionMenu.viewToggles.uploadScanOrGuideImage" +msgstr "上传扫描模型或参考图" + +# Source-Hash: 6aee0962fc18c0f1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Back to home" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.backToHome" +msgstr "返回首页" + +# Source-Hash: f571cb2d06ae01ae +# Review: human +# English: "Advanced" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.advanced" +msgstr "高级" + +# Source-Hash: fb40866c2d6db5fb +# Review: human +# English: "walls · floor · ceiling" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.hint" +msgstr "墙体 · 楼板 · 天花板" + +# Source-Hash: 271039bd919dc4c1 +# Review: human +# English: "Pick a shape to start. Every room brings its own walls, floor and ceiling." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.idle" msgstr "选择一种形状开始绘制。每个房间都会同时创建墙体、楼板和天花板。" -# Source-Hash: ae2800b6c9e2b6ed -# Review: human -# English: "{lead} then the first one again to close. For L-shapes and angled rooms." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.caption" -msgstr "{lead}然后再次点击起点闭合。适用于 L 形和斜角房间。" +# Source-Hash: ae2800b6c9e2b6ed +# Review: human +# English: "{lead} then the first one again to close. For L-shapes and angled rooms." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.caption" +msgstr "{lead}然后再次点击起点闭合。适用于 L 形和斜角房间。" + +# Source-Hash: 4e186fc057733162 +# Review: human +# English: "Polygon" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.label" +msgstr "多边形" + +# Source-Hash: 345e3aca3879b5c5 +# Review: human +# English: "Click each corner," +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.lead" +msgstr "依次点击各个角点," + +# Source-Hash: 8ec6152e139b0e3f +# Review: human +# English: "Polygon room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.polygon.title" +msgstr "多边形房间" + +# Source-Hash: 9b46295eedcbedae +# Review: human +# English: "{lead} on the grid. Walls, floor and ceiling are created together." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.caption" +msgstr "在网格上{lead}。墙体、楼板和天花板将一并创建。" + +# Source-Hash: 2c2c20272b0370cc +# Review: human +# English: "Rectangle" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.label" +msgstr "矩形" + +# Source-Hash: 060faa48e299d7c9 +# Review: human +# English: "Click two corners" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.lead" +msgstr "点击两个对角点" + +# Source-Hash: 83a45603ac7f41e8 +# Review: human +# English: "Rectangle room" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.rectangle.title" +msgstr "矩形房间" + +# Source-Hash: 3e7408ed44676176 +# Review: human +# English: "Rooms" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.title" +msgstr "房间" + +# Source-Hash: 8a21a03c4acf396b +# Review: human +# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.caption" +msgstr "{lead}闭合轮廓后会形成房间;保持开口可绘制隔墙。" + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.label" +msgstr "墙体" + +# Source-Hash: 9843edd68426fa2d +# Review: human +# English: "Draw one wall at a time." +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.lead" +msgstr "逐面绘制墙体。" + +# Source-Hash: aac9a732d2159ccc +# Review: human +# English: "Walls" +#: packages/editor/src/components/ui/build-panel/build-panel.tsx +msgid "editor.buildPanel.rooms.walls.title" +msgstr "墙体" + +# Source-Hash: 1f3650da23603008 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraControlsHint" +msgstr "相机操作提示" + +# Source-Hash: 101b6a54c377049a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pan" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.pan" +msgstr "平移" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.rotate" +msgstr "旋转" + +# Source-Hash: 663cecc316eb91b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zoom" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.cameraHint.zoom" +msgstr "缩放" + +# Source-Hash: a2bd204e93e90598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismiss" +msgstr "关闭" + +# Source-Hash: 9222f970dce6cc60 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dismiss camera controls hint" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.dismissCameraControlsHint" +msgstr "关闭相机操作提示" + +# Source-Hash: aeac665749d3101d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Expand sidebar" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.expandSidebar" +msgstr "展开侧边栏" + +# Source-Hash: dd86efcab72fc5c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis" +msgstr "轴" + +# Source-Hash: 5232a826549f915e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⌥ axis" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.axis2" +msgstr "⌥ 轴" + +# Source-Hash: 7001600001844c92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "⚠ no equipment" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.noEquipment" +msgstr "⚠ 无设备" + +# Source-Hash: eae0194029f96edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# register} other {# registers}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.registerCount" +msgstr "{count, plural, other {# 个风口}}" + +# Source-Hash: 8fb180251a321cef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R/T rotate" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.rTRotate" +msgstr "R/T 旋转" + +# Source-Hash: 3744cfc0c0329bfe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{count, plural, one {# run} other {# runs}}" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.runCount" +msgstr "{count, plural, other {# 段}}" + +# Source-Hash: 88e6c2e1c344b2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "System" +#: packages/editor/src/components/editor/floating-action-menu.tsx +#, fuzzy +msgid "editor.floatingActionMenu.system" +msgstr "系统" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.cancel" +msgstr "取消" + +# Source-Hash: 4c6ca3441c74da9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place building" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.placeBuilding" +msgstr "放置建筑" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/building-helper.tsx +#, fuzzy +msgid "editor.helpers.buildingHelper.rotate" +msgstr "旋转" + +# Source-Hash: 832470d3aeee82fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel placement" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.cancelPlacement" +msgstr "取消放置" + +# Source-Hash: e374fcaee33c3e2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation — click or press C to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationClickOrPressCTo" +msgstr "连续放置 — 点击或按 C 切换" + +# Source-Hash: b108c7dc2ec2b9de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuation: {label}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.continuationLabel" +msgstr "连续放置:{label}" + +# Source-Hash: 729d87891cb7dbb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag to draw fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.dragToDrawFence" +msgstr "拖动绘制围栏" + +# Source-Hash: a4bdcbc6cab772bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence type — click or press T to switch between straight, curved and freehand" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fenceTypeClickOrPressT" +msgstr "围栏类型 — 点击或按 T 在直线、曲线和手绘之间切换" + +# Source-Hash: 2a9ed258727078ac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fewer shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.fewerShortcuts" +msgstr "收起快捷键" + +# Source-Hash: 698fa6e78af4d4b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish curve (or double-click)" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.finishCurveOrDoubleClick" +msgstr "完成曲线(或双击)" + +# Source-Hash: 09f6d79edf5cfd16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridLength" +msgstr "网格:{length}" + +# Source-Hash: c493b562040c4328 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step — click or tap Ctrl to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepClickOrTapCtrl" +msgstr "网格步长 — 点击或轻按 Ctrl 切换" + +# Source-Hash: d36a8c93d81b3a36 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Grid step: {length}" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.gridStepLength" +msgstr "网格步长:{length}" + +# Source-Hash: abea993ede7daa7e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a painted surface to erase" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverAPaintedSurfaceToErase" +msgstr "悬停在已涂装的表面上以擦除" + +# Source-Hash: fc1ed0ddc0cfcef5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPaint" +msgstr "悬停在表面上以涂装" + +# Source-Hash: 63dec5de4a337015 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a surface to pick its material" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.hoverASurfaceToPickIts" +msgstr "悬停在表面上以拾取其材质" + +# Source-Hash: 7ad6dc1b1f03f970 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More shortcuts" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.moreShortcuts" +msgstr "更多快捷键" + +# Source-Hash: 69c1044e6ea87ccf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gate on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placeGateOnAFence" +msgstr "在围栏上放置大门" + +# Source-Hash: 3754255b8affc7a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place passage on a fence" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.placePassageOnAFence" +msgstr "在围栏上放置通道" + +# Source-Hash: a8328c8964e947fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select a material to paint" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.selectAMaterialToPaint" +msgstr "选择要涂装的材质" + +# Source-Hash: 6f95d7116aea5738 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Angles" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingAngles" +msgstr "吸附:角度" + +# Source-Hash: 2d6d8d85d2ebed47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Grid" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingGrid" +msgstr "吸附:网格" + +# Source-Hash: 9096c5f9d8ce0f7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Lines" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingLines" +msgstr "吸附:线条" + +# Source-Hash: b663afbf0835cf32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping mode — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingModeClickOrPressShift" +msgstr "吸附模式 — 点击或按 Shift 切换" + +# Source-Hash: d00e984fc88f71aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snapping: Off" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.snappingOff" +msgstr "吸附:关" + +# Source-Hash: 6be9d0d312200761 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight continuation is unavailable for curved or freehand fences" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuationIsUnavailableForCurved" +msgstr "曲线或手绘围栏无法直线连续" + +# Source-Hash: 0d56b1f0a0493302 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Continuous" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightContinuous" +msgstr "直线:连续" + +# Source-Hash: c034e85d3e7fd27e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight fence continuation — click or press C to toggle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightFenceContinuationClickOrPress" +msgstr "直线围栏连续 — 点击或按 C 切换" + +# Source-Hash: e3f679cdb4a3d603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Straight: Single" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.straightSingle" +msgstr "直线:单段" + +# Source-Hash: 83e56140165f2535 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{verb} scope — click or press Shift to cycle" +#: packages/editor/src/components/ui/helpers/contextual-helper-panel.tsx +#, fuzzy +msgid "editor.helpers.contextualHelperPanel.verbScopeClickOrPressShift" +msgstr "{verb}范围 — 点击或按 Shift 切换" + +# Source-Hash: 9a56d90d461b4bca +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPoint" +msgstr "添加点" + +# Source-Hash: c3dc3918c823a5e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add point · click the first to close" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.addPointClickTheFirstTo" +msgstr "添加点 · 点击第一个点闭合" + +# Source-Hash: d8cf72d482d56cd7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Brush size" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.brushSize" +msgstr "笔刷大小" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancel" +msgstr "取消" + +# Source-Hash: 104fdab7934ec66c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel picking" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelPicking" +msgstr "取消拾取" + +# Source-Hash: c318cf0ce70b8977 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel stroke" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.cancelStroke" +msgstr "取消笔画" + +# Source-Hash: 16552c2580bbe8b8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Done" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.done" +msgstr "完成" + +# Source-Hash: e297db9ca0ce6d31 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the mezzanine" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheMezzanine" +msgstr "绘制夹层" + +# Source-Hash: c8be604718a7a9fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the opening" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheOpening" +msgstr "绘制开口" + +# Source-Hash: 231386ae6d534163 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Draw the terrace" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.drawTheTerrace" +msgstr "绘制露台" + +# Source-Hash: e092e803eb60af69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit smart measure" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.exitSmartMeasure" +msgstr "退出智能测量" + +# Source-Hash: b3907da0ad234f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finish" +msgstr "完成" + +# Source-Hash: f74bd937ae2e3a40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish at the edge" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.finishAtTheEdge" +msgstr "在边缘处完成" + +# Source-Hash: 21029cf1c45697cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMove" +msgstr "自由移动" + +# Source-Hash: 3247d8689bed6ff6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free move · slide doors and windows" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.freeMoveSlideDoorsAndWindows" +msgstr "自由移动 · 滑动门窗" + +# Source-Hash: b5ad765b43e75a5c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to pick a material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.holdToPickAMaterial" +msgstr "按住以拾取材质" + +# Source-Hash: 46b53c5449c98964 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Inspect surface dimensions" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.inspectSurfaceDimensions" +msgstr "查看表面尺寸" + +# Source-Hash: 63f1f7006ae14177 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint with this material" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.paintWithThisMaterial" +msgstr "使用此材质涂装" + +# Source-Hash: 188f55cc5afbe34f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick target height" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pickTargetHeight" +msgstr "拾取目标高度" + +# Source-Hash: 2880fc9752eababa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin measurement lens" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pinMeasurementLens" +msgstr "固定测量放大镜" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.place" +msgstr "放置" + +# Source-Hash: 82010a7fd6350c93 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place inside the room" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.placeInsideTheRoom" +msgstr "放置在房间内" + +# Source-Hash: 8b97f4503edb27b9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Press anywhere, drag to the opposite corner" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.pressAnywhereDragToTheOpposite" +msgstr "在任意位置按下,拖到对角" + +# Source-Hash: 786f0b1c81b2a6c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise or lower" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.raiseOrLower" +msgstr "升高或降低" + +# Source-Hash: b033f46ae3a0cbb7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove a painted part, or reset a surface" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeAPaintedPartOrReset" +msgstr "移除涂装部分或重置表面" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.removeLastPoint" +msgstr "移除最后一个点" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.resize" +msgstr "调整大小" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotate45" +msgstr "旋转 ±45°" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.rotateTheSelection45" +msgstr "将所选旋转 ±45°" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/editor/src/components/ui/helpers/helper-manager.tsx +#, fuzzy +msgid "editor.helpers.helperManager.setOneCornerThenTheOpposite" +msgstr "设置一个角,再设置对角" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.cancel" +msgstr "取消" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.forcePlace" +msgstr "强制放置" + +# Source-Hash: 722741535b346e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.place" +msgstr "放置" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/components/ui/helpers/item-helper.tsx +#, fuzzy +msgid "editor.helpers.itemHelper.rotate" +msgstr "旋转" + +# Source-Hash: e9dfc2a178bca5f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guided constraints bypassed" +#: packages/editor/src/components/ui/helpers/registered-tool-helper.tsx +#, fuzzy +msgid "editor.helpers.registeredToolHelper.guidedConstraintsBypassed" +msgstr "已绕过引导约束" + +# Source-Hash: 395fd0821b203517 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add or remove objects from the selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.addOrRemoveObjectsFromThe" +msgstr "在选择中添加或移除对象" + +# Source-Hash: 8428cb0af9c6d6a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Adjust one side’s corner radius" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.adjustOneSideSCornerRadius" +msgstr "调整一侧的圆角半径" + +# Source-Hash: d63b45c195713993 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Clear the selection (or click outside)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clearTheSelectionOrClickOutside" +msgstr "清除选择(或点击外部)" + +# Source-Hash: 40b1afbeadbd6213 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click a handle dot to show move arrows" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickAHandleDotToShow" +msgstr "点击控制点以显示移动箭头" + +# Source-Hash: 0b82a35c71549580 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click or drag the selection to move it as one" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickOrDragTheSelectionTo" +msgstr "点击或拖动选择以整体移动" + +# Source-Hash: 73a761f393f69cb9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click the handle dot to show move + rotate handles" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.clickTheHandleDotToShow" +msgstr "点击控制点以显示移动和旋转控件" + +# Source-Hash: c0045cef191fee69 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Detach the joint while dragging an arrow" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.detachTheJointWhileDraggingAn" +msgstr "拖动箭头时断开连接" + +# Source-Hash: a019c8948c104a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag left or right to rotate selected object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragLeftOrRightToRotate" +msgstr "左右拖动以旋转所选对象" + +# Source-Hash: 7db0364deb12f06e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag selected movable object" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.dragSelectedMovableObject" +msgstr "拖动所选的可移动对象" + +# Source-Hash: 0f258dd389afdc73 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Group selection (session only)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.groupSelectionSessionOnly" +msgstr "组合所选(仅本次会话)" + +# Source-Hash: 85330d62893a45c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hold to rotate freely" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.holdToRotateFreely" +msgstr "按住以自由旋转" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotate45" +msgstr "旋转 ±45°" + +# Source-Hash: 6099ee99f8c38700 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate the selection ±45°" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotateTheSelection45" +msgstr "将所选旋转 ±45°" + +# Source-Hash: 0f6b418b18ff96f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotating freely (no angle step)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.rotatingFreely" +msgstr "自由旋转(无角度步进)" + +# Source-Hash: 7ed174d6b03563b1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch the rotation axis (Y → X → Z)" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.switchTheRotationAxisYX" +msgstr "切换旋转轴(Y → X → Z)" + +# Source-Hash: d6f2c5cea683de62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ungroup session selection" +#: packages/editor/src/lib/contextual-help.ts +#, fuzzy +msgid "editor.lib.contextualHelp.ungroupSessionSelection" +msgstr "取消会话中的组合" + +# Source-Hash: 384842ae1e1c6825 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuous" +msgstr "连续" + +# Source-Hash: ebf0eb7af4636a16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousCanopy" +msgstr "连续雨棚" + +# Source-Hash: 1d8e87cd807e8d40 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Continuous run" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.continuousRun" +msgstr "连续排布" + +# Source-Hash: 8990683667567c6b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Curved fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.curvedFence" +msgstr "曲线围栏" + +# Source-Hash: edf1b9a2ad3ab910 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Freehand fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.freehandFence" +msgstr "手绘围栏" + +# Source-Hash: 2cdb7c1c7cd7c4fd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place multiple" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeMultiple" +msgstr "连续放置多个" + +# Source-Hash: 90bf945df6f9c979 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place once" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.placeOnce" +msgstr "放置一次" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.polygonRoom" +msgstr "多边形房间" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.rectangleRoom" +msgstr "矩形房间" + +# Source-Hash: 7fd85d0408141157 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single cabinet" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCabinet" +msgstr "单个橱柜" + +# Source-Hash: dd1bdbc26165baa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single canopy" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleCanopy" +msgstr "单个雨棚" + +# Source-Hash: 5fb1a69316be983e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Single fence" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.singleFence" +msgstr "单段围栏" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/continuation.ts +#, fuzzy +msgid "editor.lib.continuation.walls" +msgstr "墙体" + +# Source-Hash: 4e4f1a24e4a9d61e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cut opening" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.cutOpening" +msgstr "开洞" + +# Source-Hash: 60e8d235f3084a9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Divide room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.divideRoom" +msgstr "分割房间" + +# Source-Hash: aa496ec33d21ab03 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Edit {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.editKind" +msgstr "编辑{kind}" + +# Source-Hash: f3ea3efa7102844f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Erase" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.erase" +msgstr "擦除" + +# Source-Hash: 3f907e76526472bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.levelTerrain" +msgstr "整平地形" + +# Source-Hash: 4e911c300d74eb47 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lower terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.lowerTerrain" +msgstr "降低地形" + +# Source-Hash: 194a147d4618a994 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mezzanine" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.mezzanine" +msgstr "夹层" + +# Source-Hash: c48c4129c9ed249a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveKind" +msgstr "移动{kind}" + +# Source-Hash: 89f6b7ca8904c656 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move room" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveRoom" +msgstr "移动房间" + +# Source-Hash: 9c707069572fb3db +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Move selection" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.moveSelection" +msgstr "移动所选" + +# Source-Hash: cf2e870fce0f2f51 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paint" +msgstr "涂装" + +# Source-Hash: ca197314cb70aa56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a rectangle" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintARectangle" +msgstr "涂装矩形" + +# Source-Hash: ea4ce729e17254f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Paint a shape" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.paintAShape" +msgstr "涂装形状" + +# Source-Hash: 01359502b07284d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick material" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.pickMaterial" +msgstr "拾取材质" + +# Source-Hash: 4066e8a3f60b1711 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Raise terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.raiseTerrain" +msgstr "抬升地形" + +# Source-Hash: f85bdac0a1d16603 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Resize" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.resize" +msgstr "调整大小" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.rotate" +msgstr "旋转" + +# Source-Hash: a4395168488bb476 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Select" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.select" +msgstr "选择" + +# Source-Hash: ec1f1d68af469867 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smart measure" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smartMeasure" +msgstr "智能测量" + +# Source-Hash: 5ba5f22bd1a69e09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Smooth terrain" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.smoothTerrain" +msgstr "平滑地形" + +# Source-Hash: cbb4687261739397 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split {kind}" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.splitKind" +msgstr "分割{kind}" + +# Source-Hash: 96281876ce53ba08 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Terrace" +#: packages/editor/src/lib/hud-title.ts +#, fuzzy +msgid "editor.lib.hudTitle.terrace" +msgstr "露台" + +# Source-Hash: 8ec6152e139b0e3f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Polygon room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.polygonRoom" +msgstr "多边形房间" + +# Source-Hash: 83a45603ac7f41e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rectangle room" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.rectangleRoom" +msgstr "矩形房间" + +# Source-Hash: aac9a732d2159ccc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Walls" +#: packages/editor/src/lib/wall-draw-variant.ts +#, fuzzy +msgid "editor.lib.wallDrawVariant.walls" +msgstr "墙体" + +# Source-Hash: 5eab376947d29a50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Reload editor" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.reloadEditor" +msgstr "重新加载编辑器" + +# Source-Hash: 834de1a7027c4da1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The editor scene failed to render" +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.theEditorSceneFailedToRender" +msgstr "编辑器场景渲染失败" + +# Source-Hash: 151f7c7e4110016f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curtain wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurtainWallTakesNoCorner" +msgstr "幕墙不能设置转角窗" + +# Source-Hash: 97f5e044d46501fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A curved wall takes no corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.aCurvedWallTakesNoCorner" +msgstr "曲面墙体不能设置转角窗" + +# Source-Hash: 776d8ebece7fe1bb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Add a corner · click the first to close" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.addACornerClickTheFirst" +msgstr "添加转角 · 点击第一个点闭合" + +# Source-Hash: 6a0745dd047b149a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Another opening is in the way at the corner" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.anotherOpeningIsInTheWay" +msgstr "转角处有另一个开口阻挡" + +# Source-Hash: 441124187e7da2fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangers" +msgstr "自动吊架" + +# Source-Hash: 47a7f9a6a81156c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers - click or press H to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersClickOrPressH" +msgstr "自动吊架 - 点击或按 H 切换" + +# Source-Hash: d7944f31cba90e26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: Off" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOff" +msgstr "自动吊架:关" + +# Source-Hash: 295882d015d08742 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto hangers: On" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.autoHangersOn" +msgstr "自动吊架:开" + +# Source-Hash: 8c039e5182b01c4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Bypass snapping" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.bypassSnapping" +msgstr "绕过吸附" + +# Source-Hash: c0774c185060fc13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancel" +msgstr "取消" + +# Source-Hash: 5b33b576fd30b74e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel move" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelMove" +msgstr "取消移动" + +# Source-Hash: 136fa29b9ae419bf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel run / exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelRunExit" +msgstr "取消管段 / 退出" + +# Source-Hash: 75b406824be91ac2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cancel start point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cancelStartPoint" +msgstr "取消起点" + +# Source-Hash: ffa5aaa1746303c4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cornerWindow" +msgstr "转角窗" + +# Source-Hash: b0afdd855a02e4a7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cuts" +msgstr "切分" + +# Source-Hash: dc9fe7601cc525f8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValue" +msgstr "切分:{value}" + +# Source-Hash: a2e13bc4dc82624c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cuts: {value}, even" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cutsValueEven" +msgstr "切分:{value},均分" + +# Source-Hash: 04152b4cec726f34 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle mono / gable / butterfly" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleMonoGableButterfly" +msgstr "切换单坡 / 双坡 / 蝶形" + +# Source-Hash: 4fb6c83edb6652b5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cycle snapping mode" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.cycleSnappingMode" +msgstr "切换吸附模式" + +# Source-Hash: 5d550a3ac76279de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorStyleClickOrPressL" +msgstr "门样式 — 点击或按 L 切换" + +# Source-Hash: 3272a7df5d7c6a9a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.doorTypeClickOrPressO" +msgstr "门类型 — 点击或按 O 切换" + +# Source-Hash: 366222b4435eefda +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drop downspout from outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.dropDownspoutFromOutlet" +msgstr "从出水口引出落水管" + +# Source-Hash: 03f306371f345007 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct diameter down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.ductDiameterDownUp" +msgstr "风管直径减小 / 增大" + +# Source-Hash: 7b4137e27f8327d9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "End run / cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.endRunCancel" +msgstr "结束管段 / 取消" + +# Source-Hash: 938aacb119b29dc1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exit" +msgstr "退出" + +# Source-Hash: 7cb4e0688cabcb00 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Exit drawing" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.exitDrawing" +msgstr "退出绘制" + +# Source-Hash: 47025a103c456125 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishAndContinue" +msgstr "完成并继续" + +# Source-Hash: 000918429b74128f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishCeiling" +msgstr "完成天花板" + +# Source-Hash: 51a80a0dba5a6f30 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishGridAxis" +msgstr "完成轴线" + +# Source-Hash: 87c7b98fc2e010e1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMeasurement" +msgstr "完成测量" + +# Source-Hash: 5e1a0af7dc506826 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish multi-point witnesses" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishMultiPointWitnesses" +msgstr "完成多点参照" + +# Source-Hash: 30fc0862501ba2e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Finish slab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.finishSlab" +msgstr "完成楼板" + +# Source-Hash: 66ed7c7598d3aa29 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Flip side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.flipSide" +msgstr "翻转方向" + +# Source-Hash: f5717f6a0905ffab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Follow: trace a lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.followTraceALineset" +msgstr "跟随:沿冷媒管组布线" + +# Source-Hash: ed7f3d8417a3e074 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Force place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.forcePlace" +msgstr "强制放置" + +# Source-Hash: cc0c14065951444d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Free placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.freePlacement" +msgstr "自由放置" + +# Source-Hash: f098a27096a9c1ea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Go vertical ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.goVerticalClickToPlace" +msgstr "切换为竖向 ↕,点击放置" + +# Source-Hash: fd47f1820d8799c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Highlight outlet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.highlightOutlet" +msgstr "高亮出水口" + +# Source-Hash: eb90058d0f856f67 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Join as a corner window" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.joinAsACornerWindow" +msgstr "连接为转角窗" + +# Source-Hash: 225b3161f2e59757 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Alt + drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.altDrag" +msgstr "Alt + 拖动" + +# Source-Hash: dd66f883b173fc72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Backspace" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.backspace" +msgstr "退格键" + +# Source-Hash: a18387bc0be54c32 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.click" +msgstr "点击" + +# Source-Hash: db9e60c1d30b8499 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Click again" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.clickAgain" +msgstr "再次点击" + +# Source-Hash: f400330b9c9c12e8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Command" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.command" +msgstr "Command" + +# Source-Hash: 976c63285a510b09 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Control" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.control" +msgstr "Ctrl" + +# Source-Hash: b26de372b4b0eaac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Delete" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.delete" +msgstr "删除" + +# Source-Hash: 88888c9d2719fa92 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Double click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.doubleClick" +msgstr "双击" + +# Source-Hash: dfb85b2addb7b9fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drag" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.drag" +msgstr "拖动" + +# Source-Hash: ed9140d42148c99b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Enter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.enter" +msgstr "回车键" + +# Source-Hash: 9195fa8b9c8ebdfb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hover" +msgstr "悬停" + +# Source-Hash: 2d78441b741bc562 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a duct end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverADuctEnd" +msgstr "悬停在风管端部" + +# Source-Hash: 6083405086f61c76 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover a pipe end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverAPipeEnd" +msgstr "悬停在管道端部" + +# Source-Hash: a5a337eb76fdb066 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Hover gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.hoverGutter" +msgstr "悬停在檐沟上" + +# Source-Hash: a58533594411e088 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Left click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.leftClick" +msgstr "左键单击" + +# Source-Hash: bc4ab608ec3d3b4f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Middle click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.middleClick" +msgstr "中键单击" + +# Source-Hash: 6791879c651108c7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Right click" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rightClick" +msgstr "右键单击" + +# Source-Hash: c836b21b42198868 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "R / Shift+R" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.rShiftR" +msgstr "R / Shift+R" + +# Source-Hash: 9812aa06d8bb7544 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scroll" +msgstr "滚动" + +# Source-Hash: f2174536230657c8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Scroll wheel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.scrollWheel" +msgstr "滚轮" + +# Source-Hash: 82dd231086d87f3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Space" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.space" +msgstr "空格键" + +# Source-Hash: 9e68aa2f472cad56 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Tab" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.key.tab" +msgstr "Tab 键" + +# Source-Hash: 4b221b73f9496a49 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Mount: floor / ceiling / wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.mountFloorCeilingWall" +msgstr "安装位置:地面 / 天花板 / 墙体" + +# Source-Hash: 225edfb1e45aed95 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No room for the matching window on the other wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noRoomForTheMatchingWindow" +msgstr "另一面墙上没有空间放置对应的窗" + +# Source-Hash: a7045d6b678bcd13 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "No wall meets here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.noWallMeetsHere" +msgstr "此处没有相交的墙体" + +# Source-Hash: a639341dc21fed2c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Number of cuts — scroll or click to change" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.numberOfCutsScrollOrClick" +msgstr "切分数量 — 滚动或点击更改" + +# Source-Hash: af01bde3ae4b7e59 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pick witness point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pickWitnessPoint" +msgstr "拾取参照点" + +# Source-Hash: ecfd58576b28a9f6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe size down / up" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.pipeSizeDownUp" +msgstr "管径减小 / 增大" + +# Source-Hash: 7a1eb7b64f06bad0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place and continue" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeAndContinue" +msgstr "放置并继续" + +# Source-Hash: c6cda39e2e4b5d3a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBlock" +msgstr "放置体块" + +# Source-Hash: 45a743c52a1d72de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place box vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeBoxVentOnRoof" +msgstr "在屋顶上放置箱式通风口" + +# Source-Hash: 75142dd1d557efe2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCabinet" +msgstr "放置橱柜" + +# Source-Hash: da603a713d4c9909 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place canopy or set the next run point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCanopyOrSetTheNext" +msgstr "放置雨棚或设置下一个连续点" + +# Source-Hash: 8b3a30c6b7a5612d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place chimney on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeChimneyOnRoof" +msgstr "在屋顶上放置烟囱" + +# Source-Hash: 710d41e4e2f259fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeColumn" +msgstr "放置柱" + +# Source-Hash: ee1da4e12a71d9a9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place cupola on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeCupolaOnRoof" +msgstr "在屋顶上放置穹顶亭" + +# Source-Hash: 19c1fe8c46d213a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dimension line when needed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDimensionLineWhenNeeded" +msgstr "需要时放置尺寸线" + +# Source-Hash: 58f3e7efb6ea120b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place door on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDoorOnWall" +msgstr "在墙体上放置门" + +# Source-Hash: de04e9d03d937c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place dormer on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeDormerOnRoof" +msgstr "在屋顶上放置老虎窗" + +# Source-Hash: c581645f2ee447c2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeElevator" +msgstr "放置电梯" + +# Source-Hash: 096b8d6482717358 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place eyebrow vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeEyebrowVentOnRoof" +msgstr "在屋顶上放置眉形通风口" + +# Source-Hash: e8d42c1c8370773f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeFitting" +msgstr "放置管件" + +# Source-Hash: 2340a4b70cb0d9ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place gutter on roof eave" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeGutterOnRoofEave" +msgstr "在屋檐上放置檐沟" + +# Source-Hash: 706a8eafb6212833 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItem" +msgstr "放置物品" + +# Source-Hash: 1815c482e249932e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place it (locked to 45°)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeItLockedTo45" +msgstr "放置(锁定为 45°)" + +# Source-Hash: 4a14340657532838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place measurement point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeMeasurementPoint" +msgstr "放置测量点" + +# Source-Hash: b3be684ac62fbf53 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placement" +msgstr "放置" + +# Source-Hash: 2bb2ce6276c69b1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Auto" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementAuto" +msgstr "放置:自动" + +# Source-Hash: ed78ac5354a1dcd8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Ground" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementGround" +msgstr "放置:地面" + +# Source-Hash: a066a2c9d5e65a1a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement: Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementRoof" +msgstr "放置:屋顶" + +# Source-Hash: 8f74dbe5064c4c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement surface - click or press P to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementSurfaceClickOrPressP" +msgstr "放置面 - 点击或按 P 切换" + +# Source-Hash: fe119955c925feaf +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementType" +msgstr "放置类型" + +# Source-Hash: 33043a35500168f5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Placement type — click or press I to toggle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placementTypeClickOrPressI" +msgstr "放置类型 — 点击或按 I 切换" + +# Source-Hash: 9945f412e6a9a446 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place on a fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeOnAFence" +msgstr "放置在围栏上" + +# Source-Hash: 6708118775a7da7f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRegister" +msgstr "放置风口" + +# Source-Hash: ebd2731f5c79306e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place ridge vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeRidgeVentOnRoof" +msgstr "在屋顶上放置屋脊通风口" + +# Source-Hash: 9b3c66a867c23326 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeShelf" +msgstr "放置置物架" + +# Source-Hash: f11cf5c1c9fe862d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place skylight on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSkylightOnRoof" +msgstr "在屋顶上放置天窗" + +# Source-Hash: e989a58d6709cc16 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place solar panel array on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSolarPanelArrayOnRoof" +msgstr "在屋顶上放置光伏板阵列" + +# Source-Hash: b67f7036d5180cf5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeSpawnPoint" +msgstr "放置出生点" + +# Source-Hash: 6c7f32a17e5636c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place stairs" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeStairs" +msgstr "放置楼梯" + +# Source-Hash: 641c0d3debd798a8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTrap" +msgstr "放置存水弯" + +# Source-Hash: 6f0a6f6c4b7588a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place turbine vent on roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeTurbineVentOnRoof" +msgstr "在屋顶上放置涡轮通风器" + +# Source-Hash: e65cf5edb4f51ed5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeUnit" +msgstr "放置设备" + +# Source-Hash: 86ce1c730154f68b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place window on wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWindowOnWall" +msgstr "在墙体上放置窗" + +# Source-Hash: 2b612180a7617901 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Place without the corner snap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.placeWithoutTheCornerSnap" +msgstr "不使用转角吸附放置" + +# Source-Hash: 0dc6d121791696f7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastPoint" +msgstr "移除最后一个点" + +# Source-Hash: 8b74b1d962be10fc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Remove last witness" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.removeLastWitness" +msgstr "移除最后一个参照" + +# Source-Hash: 306d409f8a1cf480 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate" +msgstr "旋转" + +# Source-Hash: 8a665ecaeffa9308 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45" +msgstr "旋转 ±45°" + +# Source-Hash: be2240289aa74df5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ±45° (floor / ceiling)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotate45FloorCeiling" +msgstr "旋转 ±45°(地面 / 天花板)" + +# Source-Hash: d5fb78b07c0f8138 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate ghost ±15°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateGhost15" +msgstr "旋转预览 ±15°" + +# Source-Hash: 912d340cd16e27fa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate or flip the run side" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateOrFlipTheRunSide" +msgstr "旋转或翻转排布方向" + +# Source-Hash: ad1dc0b5536cceef +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate roof direction 90°" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateRoofDirection90" +msgstr "将屋顶方向旋转 90°" + +# Source-Hash: fa24651e9e5f595a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rotate spawn point" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.rotateSpawnPoint" +msgstr "旋转出生点" + +# Source-Hash: 2d693d87fe9b59e6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Round / rectangular / oval" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.roundRectangularOval" +msgstr "圆形 / 矩形 / 椭圆" + +# Source-Hash: f7d2c9cdcc637c97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set fence start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setFenceStartEnd" +msgstr "设置围栏起点 / 终点" + +# Source-Hash: c93ae898b4d59f6f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set one corner, then the opposite" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setOneCornerThenTheOpposite" +msgstr "设置一个角,再设置对角" + +# Source-Hash: 4f55171f10c6ceeb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set roof footprint" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setRoofFootprint" +msgstr "设置屋顶轮廓" + +# Source-Hash: 0243859b1d64c21e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Set wall start / end" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.setWallStartEnd" +msgstr "设置墙体起点 / 终点" + +# Source-Hash: c2806cce9612fa50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Slope / level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.slopeLevel" +msgstr "坡度 / 水平" + +# Source-Hash: 06c0ec40606db679 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Snap onto the run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.snapOntoTheRun" +msgstr "吸附到管段上" + +# Source-Hash: e214cccbac9c4fd2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split at the marks" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.splitAtTheMarks" +msgstr "在标记处分割" + +# Source-Hash: 94455c35bfeac6b4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start grid axis" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startGridAxis" +msgstr "开始轴线" + +# Source-Hash: 2edb4c29bbe7c513 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLineset" +msgstr "开始冷媒管组" + +# Source-Hash: 9e50f1b30e325208 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start liquid line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startLiquidLine" +msgstr "开始液管" + +# Source-Hash: 877ddcb778c211cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start run" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startRun" +msgstr "开始管段" + +# Source-Hash: 8a62bee64174bbc0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Start segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.startSegment" +msgstr "开始分段" + +# Source-Hash: 6cc5dc51a8e66779 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Step back or cancel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stepBackOrCancel" +msgstr "后退一步或取消" + +# Source-Hash: 1a79a485d91f3f28 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.style" +msgstr "样式" + +# Source-Hash: 81f595b1c47c0080 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleBarn" +msgstr "样式:谷仓门" + +# Source-Hash: 3a82c718fe215273 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCasement" +msgstr "样式:平开" + +# Source-Hash: 072e3331d1d105c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Craftsman" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleCraftsman" +msgstr "样式:工匠" + +# Source-Hash: b64d07557dec1714 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Double-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleDoubleHung" +msgstr "样式:双悬" + +# Source-Hash: 55ef8761a537637f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleFrench" +msgstr "样式:法式" + +# Source-Hash: bc8a751d87536dc3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGlass" +msgstr "样式:玻璃" + +# Source-Hash: 40c1eb0bc83e207d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleGrid" +msgstr "样式:格栅" + +# Source-Hash: f516886bab2e7f10 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Half-louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHalfLouvered" +msgstr "样式:半百叶" + +# Source-Hash: 64e4389a695371a2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Horizontal bands" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleHorizontalBands" +msgstr "样式:横向条纹" + +# Source-Hash: ff6d226a425b00c0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Modern" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleModern" +msgstr "样式:现代" + +# Source-Hash: c6d17ba078ff47e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePanel" +msgstr "样式:镶板" + +# Source-Hash: 5e6baad0d2ce3a62 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Paneled glass" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.stylePaneledGlass" +msgstr "样式:镶板玻璃" + +# Source-Hash: 6314388e6832c252 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Shaker" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleShaker" +msgstr "样式:震颤派" + +# Source-Hash: a0f8e524f3ca121f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Single" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSingle" +msgstr "样式:单扇" + +# Source-Hash: 368279df3a472c86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Six-panel" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSixPanel" +msgstr "样式:六镶板" + +# Source-Hash: 8f3c2571d8168fee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleSliding" +msgstr "样式:推拉" + +# Source-Hash: aa9d9eb137ca38d4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Tall grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTallGrid" +msgstr "样式:高格栅" + +# Source-Hash: bc164648722b63e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Transom" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTransom" +msgstr "样式:带亮子" + +# Source-Hash: 9a218f0c9ceb4697 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Triple-hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleTripleHung" +msgstr "样式:三悬" + +# Source-Hash: 9f6df1344bd3d694 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Style: Wide grid" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.styleWideGrid" +msgstr "样式:宽格栅" + +# Source-Hash: 711d4050c0cb95d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Switch rotation axis (Y → X → Z)" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.switchRotationAxisYXZ" +msgstr "切换旋转轴(Y → X → Z)" + +# Source-Hash: d650c71e042c2598 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The walls meet at too sharp or too flat an angle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWallsMeetAtTooSharp" +msgstr "墙体相交的角度过尖或过平" + +# Source-Hash: ab206ac56e65f190 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The window waiting there is taller than this wall" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.theWindowWaitingThereIsTaller" +msgstr "该处待放置的窗比这面墙体更高" + +# Source-Hash: 9c1f47138ed5c7ee +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Three or more walls meet here" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.threeOrMoreWallsMeetHere" +msgstr "此处有三面或更多墙体相交" + +# Source-Hash: c3ca56fa28e15f07 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace ceiling outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceCeilingOutline" +msgstr "描绘天花板轮廓" + +# Source-Hash: bdf71499d30a29de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trace slab outline" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.traceSlabOutline" +msgstr "描绘楼板轮廓" + +# Source-Hash: c44f7ab8bbd24858 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.type" +msgstr "类型" + +# Source-Hash: b54eaaff3349dcb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Awning" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeAwning" +msgstr "类型:上悬" + +# Source-Hash: f399572a27417c66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Barn" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBarn" +msgstr "类型:谷仓门" + +# Source-Hash: a1df9782200b5f1e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bay" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBay" +msgstr "类型:凸窗" + +# Source-Hash: ff069a390e8e3f66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Bow" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeBow" +msgstr "类型:弧形凸窗" + +# Source-Hash: bdac5f3f2ea70fff +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCabinet" +msgstr "类型:柜门" + +# Source-Hash: e0754fc03997cbf9 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Casement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeCasement" +msgstr "类型:平开" + +# Source-Hash: 47d873446d6e173b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDouble" +msgstr "类型:双扇" + +# Source-Hash: 5942e484513aaab5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Double Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeDoubleHung" +msgstr "类型:双悬" + +# Source-Hash: f9497fbfceefda27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Fixed" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFixed" +msgstr "类型:固定" + +# Source-Hash: 0dcf07acc9cbf000 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Folding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFolding" +msgstr "类型:折叠" + +# Source-Hash: bff7331f87f279aa +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: French" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeFrench" +msgstr "类型:法式" + +# Source-Hash: 9d2c3b82079eb769 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Hinged" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeHinged" +msgstr "类型:铰链" + +# Source-Hash: b8001b90ff522838 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Island" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeIsland" +msgstr "类型:岛台" + +# Source-Hash: 516833c5160d412e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Louvered" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeLouvered" +msgstr "类型:百叶" + +# Source-Hash: 291272bf848ad6ab +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Pocket" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typePocket" +msgstr "类型:内嵌推拉" + +# Source-Hash: 46d0e53d6ae07c72 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Single Hung" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSingleHung" +msgstr "类型:单悬" + +# Source-Hash: b11115b50df8faac +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Type: Sliding" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.typeSliding" +msgstr "类型:推拉" + +# Source-Hash: bff0c1694ee0a37e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical stack ↕, click to place" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.verticalStackClickToPlace" +msgstr "竖向立管 ↕,点击放置" + +# Source-Hash: bac471ee67af6412 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Waste / vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.wasteVent" +msgstr "污水 / 通气" + +# Source-Hash: 1c744b7e24fc786e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window style — click or press L to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowStyleClickOrPressL" +msgstr "窗样式 — 点击或按 L 切换" + +# Source-Hash: dd6f0ab314fea26c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Window type — click or press O to cycle" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "editor.toolHint.windowTypeClickOrPressO" +msgstr "窗类型 — 点击或按 O 切换" + +# Source-Hash: 9fc7a39bc32f287a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.plugins" +msgstr "插件" + +# Source-Hash: c54f9bac358893d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "2D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view2d" +msgstr "2D" + +# Source-Hash: f78f2fa035f25f85 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "3D" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.view3d" +msgstr "3D" + +# Source-Hash: 05b65242d8c48791 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Auto" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.auto" +msgstr "自动" + +# Source-Hash: 7890c110650ad1e5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Browse plugins" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.browsePlugins" +msgstr "浏览插件" + +# Source-Hash: 3b11e7af681a9dcd +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeLabel" +msgstr "关闭{label}" + +# Source-Hash: 3f00e92517e3f4a5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Close split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.closeSplit" +msgstr "关闭分屏 (\\)" + +# Source-Hash: 94cc8e9f1ee16edb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ground" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.ground" +msgstr "地面" + +# Source-Hash: 0d472502a4d36e86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundSolid" +msgstr "{standing, select, partly {部分位于地坪以下 · 地面实体} below {位于地坪以下 · 地面实体} other {地面实体}}" + +# Source-Hash: 1b6798c307ac1b96 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.groundVeiled" +msgstr "{standing, select, partly {部分位于地坪以下 · 地面淡化} below {位于地坪以下 · 地面淡化} other {地面淡化}}" + +# Source-Hash: ebdc976a98e82626 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Keep the ground solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.keepTheGroundSolid" +msgstr "保持地面为实体" + +# Source-Hash: 5f827686a006d88c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "More views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.moreViews" +msgstr "更多视图" + +# Source-Hash: f175bbcf457ab73c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pane {pane} views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.paneViews" +msgstr "窗格 {pane} 视图" + +# Source-Hash: 33c20cc33dce9a9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinLabel" +msgstr "固定{label}" + +# Source-Hash: 3f7231b1eb2f93f3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pin to the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.pinToTheViewBar" +msgstr "固定到视图栏" + +# Source-Hash: ef3e765e692faf4c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Solid" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.solid" +msgstr "实体" + +# Source-Hash: 98f22f3f89f17686 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split (\\)" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split" +msgstr "分屏 (\\)" + +# Source-Hash: e4cd64b1680ac0d2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Split" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.split2" +msgstr "分屏" + +# Source-Hash: 15b0adc705923a27 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Swap panes" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.swapPanes" +msgstr "交换窗格" + +# Source-Hash: 9781bcdb7a8549e2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin from the view bar" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinFromTheViewBar" +msgstr "从视图栏取消固定" + +# Source-Hash: f667358dec4abdea +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Unpin {label}" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.unpinLabel" +msgstr "取消固定{label}" + +# Source-Hash: e96581f0bbf9fa91 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Veil the ground over a level below grade" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.veilTheGroundOverALevel" +msgstr "在地坪以下的楼层上方淡化地面" + +# Source-Hash: fb82f09f8ed3059e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Views" +#: packages/editor/src/components/editor/views/view-bar.tsx +#, fuzzy +msgid "editor.views.viewBar.views" +msgstr "视图" + +# Source-Hash: fdece5c2158dfe88 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "You can retry the scene or return home without reloading the whole app shell." +#: packages/editor/src/components/editor/index.tsx +#, fuzzy +msgid "editor.youCanRetryTheSceneOr" +msgstr "您可以重试场景,或在不重新加载整个应用的情况下返回首页。" + +# Source-Hash: a273dacdf51b26f2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A topology-backed solid edited directly in the canvas." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.description" +msgstr "基于拓扑、可直接在画布中编辑的实体。" + +# Source-Hash: 279f456ebb2f5da0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Block" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.block.label" +msgstr "体块" + +# Source-Hash: b2a371b4041b5e38 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Small louvered exhaust vent that sits on a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.description" +msgstr "位于屋面坡上的小型百叶排气口。" + +# Source-Hash: f736ca24e84825c3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Box Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.boxVent.label" +msgstr "箱式通风口" + +# Source-Hash: f49d8836ae037dde +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A building container holding one or more levels." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.description" +msgstr "包含一个或多个楼层的建筑容器。" + +# Source-Hash: d42f7d29e3fc4af7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Building" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.building.label" +msgstr "建筑" + +# Source-Hash: 693a0d8896f5cc43 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable parametric base cabinet." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.description" +msgstr "可配置的参数化地柜。" + +# Source-Hash: 2e6d8cda361c648d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Modular Cabinet" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinet.label" +msgstr "组合橱柜" + +# Source-Hash: ffc8d80e438f40b7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An editable module inside a modular cabinet run." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.description" +msgstr "组合橱柜中的可编辑模块。" + +# Source-Hash: d5c19ec529e26a98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cabinet Module" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cabinetModule.label" +msgstr "橱柜模块" + +# Source-Hash: 4d6d5e9439f40e9b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A polygon-bounded ceiling surface that hosts ceiling-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.description" +msgstr "由多边形界定的天花板面,可安装吸顶物品。" + +# Source-Hash: 4275c05172abd7fb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ceiling" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ceiling.label" +msgstr "天花板" + +# Source-Hash: ea12ce3c2b3588e7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical masonry stack on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.description" +msgstr "屋面上的竖向砌体烟囱。" + +# Source-Hash: 95169058fec6db14 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Chimney" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.chimney.label" +msgstr "烟囱" + +# Source-Hash: 6a06e628257f3393 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A parametric column with configurable cross-section, base, and capital." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.description" +msgstr "截面、柱础和柱头可配置的参数化柱。" + +# Source-Hash: 3530ac1f4046cd22 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Column" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.column.label" +msgstr "柱" + +# Source-Hash: 895766ad1b766c2e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Associative linear, curved, circular, angular, or coordinate plan dimension." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.description" +msgstr "关联的线性、曲线、圆形、角度或坐标平面尺寸。" + +# Source-Hash: 6875b60ee8a7cc3b +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Construction Dimension" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.constructionDimension.label" +msgstr "施工尺寸" + +# Source-Hash: a276c9693f01dec7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Louvered roof lantern with a dome or pyramid cap and optional finial." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.description" +msgstr "带百叶的屋顶亭,配圆顶或金字塔顶,可选尖顶饰。" + +# Source-Hash: e679dd19f96eba0a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Cupola" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.cupola.label" +msgstr "穹顶亭" + +# Source-Hash: 6123b20edb9569de +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A door cut into a wall. Animated open/close state." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.description" +msgstr "开在墙体上的门,带开关动画。" + +# Source-Hash: 787e10f5db16904e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Door" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.door.label" +msgstr "门" + +# Source-Hash: 387e57242c8d110a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "House-shaped protrusion on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.description" +msgstr "屋面上的房屋形凸出部分。" + +# Source-Hash: 6b6f8068bbc4c902 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Dormer" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.dormer.label" +msgstr "老虎窗" + +# Source-Hash: b46392d2ea865760 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Vertical drop pipe from a gutter outlet to the ground." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.description" +msgstr "从檐沟出水口到地面的竖向落水管。" + +# Source-Hash: 1a1ec08a311f1b35 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Downspout" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.downspout.label" +msgstr "落水管" + +# Source-Hash: 29eadb8c84ae9632 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elbow, tee, reducer, or square-to-round transition connecting duct runs." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.description" +msgstr "连接风管的弯头、三通、变径或方圆变径。" + +# Source-Hash: 6d0c3833d87535e4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductFitting.label" +msgstr "风管配件" + +# Source-Hash: 09eb45a9b35d1a9f +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC duct run — polyline of round, rect, or flat-oval sections." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.description" +msgstr "暖通风管 — 由圆形、矩形或扁椭圆截面组成的折线。" + +# Source-Hash: e971d82044e2f48e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductSegment.label" +msgstr "风管" + +# Source-Hash: 33181d0f42421013 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.description" +msgstr "风口 — 送风口、散流器或回风格栅。风管在其接口处终止。" + +# Source-Hash: 161e5386b939e1bc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Register" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ductTerminal.label" +msgstr "风口" + +# Source-Hash: d0afa386e65cd3a4 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A multi-level elevator shaft with configurable openings per level." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.description" +msgstr "跨多个楼层的电梯井,每层开口可配置。" + +# Source-Hash: ab5cbab7be160a1c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Elevator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.elevator.label" +msgstr "电梯" + +# Source-Hash: 7b22c91cf520e161 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Low curved lens-shaped roof vent with a louvered front." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.description" +msgstr "低矮的弧形透镜状屋顶通风口,前部带百叶。" + +# Source-Hash: 654b29319185ac66 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Eyebrow Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.eyebrowVent.label" +msgstr "眉形通风口" + +# Source-Hash: 20032fe9430f610d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A straight or curved fence segment with configurable posts and infill." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.description" +msgstr "立柱和填充可配置的直线或曲线围栏段。" + +# Source-Hash: 02042fde61b5aa11 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Fence" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fence.label" +msgstr "围栏" + +# Source-Hash: df61821ed00852d8 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A gate hosted by a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.description" +msgstr "安装在围栏上的大门。" + +# Source-Hash: 4a479aa23542d766 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gate" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceGate.label" +msgstr "大门" + +# Source-Hash: 8f9c927d79796c26 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An intentional opening in a fence." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.description" +msgstr "围栏上的预留开口。" + +# Source-Hash: ab67bb47e647d594 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Open Passage" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.fenceOpening.label" +msgstr "通道" + +# Source-Hash: dc3adf0c2d50dba6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Floor opening" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.floorOpening.label" +msgstr "楼板开洞" + +# Source-Hash: 2f4fac2b1d39fdb1 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A measurement / reference annotation (linear, area, or arc)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.description" +msgstr "测量 / 参考标注(线性、面积或弧长)。" + +# Source-Hash: 1344ea2602e3aa9e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Guide" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.guide.label" +msgstr "参考图" + +# Source-Hash: 5402d634f40b2f97 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Rain-water channel running along the eave of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.description" +msgstr "沿屋面檐口布置的雨水槽。" + +# Source-Hash: 14ba981da3627ae2 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Gutter" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.gutter.label" +msgstr "檐沟" + +# Source-Hash: 50e9252d30f3fb4d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Furnace, air handler, or condenser — duct runs connect to its supply/return collars." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.description" +msgstr "暖风炉、空气处理机或冷凝机组 — 风管连接到其送风 / 回风接口。" + +# Source-Hash: 3bf1c1a8dbb93743 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "HVAC Unit" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.hvacEquipment.label" +msgstr "暖通设备" + +# Source-Hash: f24a1089d9256460 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Geometry preserved from an imported model when no native Pascal shape exists." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.description" +msgstr "当没有对应的 Pascal 原生形体时,保留自导入模型的几何体。" + +# Source-Hash: 9f9d11f287f722d7 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Imported Mesh" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.importedMesh.label" +msgstr "导入网格" + +# Source-Hash: 63f79b3c467177b3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A catalog-backed item (furniture, fixtures, decorations)." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.description" +msgstr "来自目录的物品(家具、设施、装饰)。" + +# Source-Hash: 2743a0e9d2743807 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.item.label" +msgstr "物品" + +# Source-Hash: a9e2d7b215696e2a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.description" +msgstr "附墙单坡或独立式单坡、双坡、蝶形雨棚,自动处理结构与排水。" + +# Source-Hash: 8503bedfbafde9a3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Canopy" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.leanToExtension.label" +msgstr "雨棚" + +# Source-Hash: 45673462f914d3df +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single floor of a building, holding walls / slabs / ceilings / items." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.description" +msgstr "建筑的一个楼层,包含墙体、楼板、天花板和物品。" + +# Source-Hash: 0608743fc1736d86 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Level" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.level.label" +msgstr "楼层" + +# Source-Hash: 156bdee8fee5bec6 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.description" +msgstr "冷媒管组 — 连接冷凝机组与室内盘管的铜质吸气管和液管。" + +# Source-Hash: 362b03eba9d8234c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Lineset" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.lineset.label" +msgstr "冷媒管组" + +# Source-Hash: 2bd4a85bed158269 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.description" +msgstr "独立冷媒液管 — 细的裸铜管;跟随模式会沿现有冷媒管组布线。" + +# Source-Hash: c34c9b36492c6e21 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Liquid Line" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.liquidLine.label" +msgstr "液管" + +# Source-Hash: ff4e3bb72267859e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A persistent distance, angle, area, perimeter, or volume annotation." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.description" +msgstr "持久的距离、角度、面积、周长或体积标注。" + +# Source-Hash: ec3567fd058bab7c +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Measurement" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.measurement.label" +msgstr "测量" + +# Source-Hash: 7764b50334e9f71d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV joint — elbow bend, 45° wye, or sanitary tee." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.description" +msgstr "排水管件 — 弯头、45° 斜三通或卫生三通。" + +# Source-Hash: c040baa6ed4c7aa5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Pipe Fitting" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeFitting.label" +msgstr "管件" + +# Source-Hash: a0bb4762aa66fa3e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.description" +msgstr "排水 / 污水 / 通气管 — 水平绘制,或按 S 切换每英尺 ¼″ 坡度。" + +# Source-Hash: 457155657704f7cc +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV Pipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeSegment.label" +msgstr "排水管" + +# Source-Hash: 6d0cdd14d0675e05 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "DWV P-trap — water seal on the waste line. The trap arm runs to the vent." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.description" +msgstr "排水 P 型存水弯 — 污水管上的水封。存水弯臂通向通气管。" + +# Source-Hash: b778a315e82065a0 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Trap" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.pipeTrap.label" +msgstr "存水弯" + +# Source-Hash: 0efe82436b915f6d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Experimental editable recipe" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.description" +msgstr "实验性可编辑配方" + +# Source-Hash: c8bbcc888cce7b8a +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Procedural item" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.proceduralItem.label" +msgstr "程序化物品" + +# Source-Hash: 356aa0ed69cb8ec5 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ventilation strip running along the ridge of a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.description" +msgstr "沿屋面屋脊布置的通风条。" -# Source-Hash: 4e186fc057733162 -# Review: human -# English: "Polygon" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.label" -msgstr "多边形" +# Source-Hash: 54b74080f33c8c4e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Ridge Vent" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.ridgeVent.label" +msgstr "屋脊通风口" -# Source-Hash: 345e3aca3879b5c5 -# Review: human -# English: "Click each corner," -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.lead" -msgstr "依次点击各个角点," +# Source-Hash: 6afeec8de7ed618d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A pitched / hip / gable roof composed of one or more segments." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.description" +msgstr "由一个或多个坡面组成的坡屋顶 / 四坡屋顶 / 双坡屋顶。" -# Source-Hash: 8ec6152e139b0e3f -# Review: human -# English: "Polygon room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.polygon.title" -msgstr "多边形房间" +# Source-Hash: f5f730969df63d1d +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roof.label" +msgstr "屋顶" -# Source-Hash: 9b46295eedcbedae -# Review: human -# English: "{lead} on the grid. Walls, floor and ceiling are created together." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.caption" -msgstr "在网格上{lead}。墙体、楼板和天花板将一并创建。" +# Source-Hash: 99afd827dbe5d647 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A single pitched plane of a parent roof." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.description" +msgstr "所属屋顶的单个坡面。" -# Source-Hash: 2c2c20272b0370cc -# Review: human -# English: "Rectangle" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.label" -msgstr "矩形" +# Source-Hash: e72a64b3e00aad98 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Roof Segment" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.roofSegment.label" +msgstr "屋面" -# Source-Hash: 060faa48e299d7c9 -# Review: human -# English: "Click two corners" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.lead" -msgstr "点击两个对角点" +# Source-Hash: 6600a850000b98ad +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A captured session with optional mesh, motion, media, and sensor data." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.description" +msgstr "包含可选网格、运动、媒体和传感器数据的采集会话。" -# Source-Hash: 83a45603ac7f41e8 -# Review: human -# English: "Rectangle room" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.rectangle.title" -msgstr "矩形房间" +# Source-Hash: 3a0701ebcb9f26cb +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Capture" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.scan.label" +msgstr "采集" -# Source-Hash: 3e7408ed44676176 -# Review: human -# English: "Rooms" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.title" -msgstr "房间" +# Source-Hash: acb8cb92b3674b50 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Separator" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.separator.label" +msgstr "分隔线" -# Source-Hash: 8a21a03c4acf396b -# Review: human -# English: "{lead} Close a loop and it becomes a room; leave it open for partitions." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.caption" -msgstr "{lead}闭合轮廓后会形成房间;保持开口可绘制隔墙。" +# Source-Hash: 26aff27b7284fc84 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "A configurable shelving unit. Items host on each row." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.description" +msgstr "可配置的置物架,每层都可放置物品。" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.label" -msgstr "墙体" +# Source-Hash: d7145f84f8e0e3fe +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Shelf" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.shelf.label" +msgstr "置物架" -# Source-Hash: 9843edd68426fa2d -# Review: human -# English: "Draw one wall at a time." -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.lead" -msgstr "逐面绘制墙体。" +# Source-Hash: c52492c73312a922 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "The top-level container holding buildings, zones, and the property boundary." +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.site.description" +msgstr "包含建筑、区域和用地红线的顶层容器。" -# Source-Hash: aac9a732d2159ccc -# Review: human -# English: "Walls" -#: packages/editor/src/components/ui/build-panel/build-panel.tsx -msgid "editor.buildPanel.rooms.walls.title" -msgstr "墙体" +# Source-Hash: 91f90818d42a984e +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Site" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.site.label" +msgstr "场地" -# Source-Hash: 9fc7a39bc32f287a +# Source-Hash: 67d903d7fe0c69c1 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Framed glass opening on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.plugins" -msgstr "插件" +msgid "node.skylight.description" +msgstr "屋面上带框的玻璃开口。" -# Source-Hash: c54f9bac358893d8 +# Source-Hash: 358826fbdeaf72b9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "2D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Skylight" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view2d" -msgstr "2D" +msgid "node.skylight.label" +msgstr "天窗" -# Source-Hash: f78f2fa035f25f85 +# Source-Hash: ad8f8036d34f6cea # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "3D" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A polygon-bounded floor surface that hosts items on top." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.view3d" -msgstr "3D" +msgid "node.slab.description" +msgstr "由多边形界定的地面,可在其上放置物品。" -# Source-Hash: 05b65242d8c48791 +# Source-Hash: 8775bc8dc9593964 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Auto" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Slab" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.auto" -msgstr "自动" +msgid "node.slab.label" +msgstr "楼板" -# Source-Hash: 7890c110650ad1e5 +# Source-Hash: 065ffaaf64ab479d # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Browse plugins" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Grid of photovoltaic panels mounted on a roof segment." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.browsePlugins" -msgstr "浏览插件" +msgid "node.solarPanel.description" +msgstr "安装在屋面上的光伏板阵列。" -# Source-Hash: 3b11e7af681a9dcd +# Source-Hash: 4d18446ff8eaa680 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Solar Panel" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeLabel" -msgstr "关闭{label}" +msgid "node.solarPanel.label" +msgstr "光伏板" -# Source-Hash: 3f00e92517e3f4a5 +# Source-Hash: 638f17c80f424dd3 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Close split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Player or camera origin within a level. One per level." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.closeSplit" -msgstr "关闭分屏 (\\)" +msgid "node.spawn.description" +msgstr "楼层内的玩家或相机起点,每层一个。" -# Source-Hash: 94cc8e9f1ee16edb +# Source-Hash: 3e2f6b4274f592c0 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Ground" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Spawn Point" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.ground" -msgstr "地面" +msgid "node.spawn.label" +msgstr "出生点" -# Source-Hash: 0d472502a4d36e86 +# Source-Hash: 8535b75637105412 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground solid} below {Below grade · ground solid} other {Ground solid}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A stair composed of one or more flights with configurable treads, risers, railings." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundSolid" -msgstr "{standing, select, partly {部分位于地坪以下 · 地面实体} below {位于地坪以下 · 地面实体} other {地面实体}}" +msgid "node.stair.description" +msgstr "由一个或多个梯段组成的楼梯,踏板、踢板和栏杆可配置。" -# Source-Hash: 1b6798c307ac1b96 +# Source-Hash: 53d7084bc41c1ad6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "{standing, select, partly {Partly below grade · ground veiled} below {Below grade · ground veiled} other {Ground veiled}}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.groundVeiled" -msgstr "{standing, select, partly {部分位于地坪以下 · 地面淡化} below {位于地坪以下 · 地面淡化} other {地面淡化}}" +msgid "node.stair.label" +msgstr "楼梯" -# Source-Hash: ebdc976a98e82626 +# Source-Hash: ce0b6361eb77e93c # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Keep the ground solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A single flight of a parent stair." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.keepTheGroundSolid" -msgstr "保持地面为实体" +msgid "node.stairSegment.description" +msgstr "所属楼梯的单个梯段。" -# Source-Hash: 5f827686a006d88c +# Source-Hash: 2159ec5769e1c59a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "More views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Stair Segment" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.moreViews" -msgstr "更多视图" +msgid "node.stairSegment.label" +msgstr "梯段" -# Source-Hash: f175bbcf457ab73c +# Source-Hash: 5434a3189441c913 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pane {pane} views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Persistent construction grid axis with identification bubbles." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.paneViews" -msgstr "窗格 {pane} 视图" +msgid "node.structuralGrid.description" +msgstr "带编号圆圈的持久结构轴线。" -# Source-Hash: 33c20cc33dce9a9b +# Source-Hash: 0cfe636f7fdd9fd6 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Structural Grid" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinLabel" -msgstr "固定{label}" +msgid "node.structuralGrid.label" +msgstr "结构轴网" -# Source-Hash: 3f7231b1eb2f93f3 +# Source-Hash: 36b714210f25c284 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Pin to the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wind-driven spinning whirlybird exhaust vent for a roof slope." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.pinToTheViewBar" -msgstr "固定到视图栏" +msgid "node.turbineVent.description" +msgstr "用于屋面坡的风力旋转排气扇。" -# Source-Hash: ef3e765e692faf4c +# Source-Hash: 4a855abb962f5e7a # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Solid" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Turbine Vent" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.solid" -msgstr "实体" +msgid "node.turbineVent.label" +msgstr "涡轮通风器" -# Source-Hash: 98f22f3f89f17686 +# Source-Hash: e3d2aaaf5c72bc3b # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split (\\)" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A named group of zones forming one apartment, hotel room or commercial lot." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split" -msgstr "分屏 (\\)" +msgid "node.unit.description" +msgstr "组成一套公寓、酒店客房或商业单元的命名区域组。" -# Source-Hash: e4cd64b1680ac0d2 +# Source-Hash: 062cc0f1afef0c52 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Split" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Unit" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.split2" -msgstr "分屏" +msgid "node.unit.label" +msgstr "单元" -# Source-Hash: 15b0adc705923a27 +# Source-Hash: 6c753f6234766116 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Swap panes" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.swapPanes" -msgstr "交换窗格" +msgid "node.wall.description" +msgstr "直线或曲线墙体段,可承载门、窗、单坡扩建和壁挂物品。" -# Source-Hash: 9781bcdb7a8549e2 +# Source-Hash: 2210e5ee50b74dc9 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin from the view bar" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Wall" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinFromTheViewBar" -msgstr "从视图栏取消固定" +msgid "node.wall.label" +msgstr "墙体" -# Source-Hash: f667358dec4abdea +# Source-Hash: ea6a51e66eb0c0dc # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Unpin {label}" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A window cut into a wall. Animated open/close for opening windows." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.unpinLabel" -msgstr "取消固定{label}" +msgid "node.window.description" +msgstr "开在墙体上的窗,可开启的窗带开关动画。" -# Source-Hash: e96581f0bbf9fa91 +# Source-Hash: aa3c35ed33e181e5 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Veil the ground over a level below grade" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "Window" +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.veilTheGroundOverALevel" -msgstr "在地坪以下的楼层上方淡化地面" +msgid "node.window.label" +msgstr "窗" -# Source-Hash: fb82f09f8ed3059e +# Source-Hash: 4a4d97a4101793b7 # Review: required # AI-Provider: cursor-agent # AI-Model: claude-opus -# English: "Views" -#: packages/editor/src/components/editor/views/view-bar.tsx +# English: "A polygonal site zone (lawn, water, paving) with a TSL gradient material." +#: packages/nodes/src/i18n/definition-messages.ts #, fuzzy -msgid "editor.views.viewBar.views" -msgstr "视图" +msgid "node.zone.description" +msgstr "使用 TSL 渐变材质的多边形场地区域(草坪、水面、铺装)。" + +# Source-Hash: a107b4d76d6972e3 +# Review: required +# AI-Provider: cursor-agent +# AI-Model: claude-opus +# English: "Zone" +#: packages/nodes/src/i18n/definition-messages.ts +#, fuzzy +msgid "node.zone.label" +msgstr "区域" # Source-Hash: 8bf25afa3cb8baea # Review: human diff --git a/packages/editor/src/i18n/node-messages.ts b/packages/editor/src/i18n/node-messages.ts new file mode 100644 index 0000000000..f1c35d6979 --- /dev/null +++ b/packages/editor/src/i18n/node-messages.ts @@ -0,0 +1,124 @@ +import type { MessageDescriptor, PascalI18n } from '@pascal-app/core' + +/** + * Display copy that node definitions carry (presentation labels, tool hints) + * stays English in the definition, because MCP, agents and exports read it. + * The editor translates it at display time through IDs derived from the kind + * and the English text. `scripts/i18n-node-messages.ts` generates the matching + * descriptors for every built-in kind so they are extracted and translated; a + * plugin kind can ship the same IDs with `registerMessages`, and otherwise + * shows its own English. + */ + +/** Lower-camel slug of up to six words, used in generated message IDs. */ +export function messageSlug(text: string): string { + const words = text + .replace(/\{(\w+)[^}]*\}/g, ' $1 ') + .normalize('NFKD') + .replace(/[\u0300-\u036f]/g, '') + .match(/[A-Za-z0-9]+/g) + if (!words?.length) return 'symbol' + const slug = words + .slice(0, 6) + .map((word, index) => { + const lower = word.toLowerCase() + return index === 0 ? lower : lower.charAt(0).toUpperCase() + lower.slice(1) + }) + .join('') + return /^[0-9]/.test(slug) ? `n${slug}` : slug +} + +/** Definition copy is literal text; braces must not read as ICU arguments. */ +function literal(text: string): string { + return text.replace(/[{}]/g, (brace) => `'${brace}'`) +} + +/** `roof-segment` → `roofSegment`. */ +export function nodeKindKey(kind: string): string { + return kind.replace(/[-_](\w)/g, (_, letter: string) => letter.toUpperCase()) +} + +export function nodeLabelDescriptor(kind: string, english: string): MessageDescriptor { + return { id: `node.${nodeKindKey(kind)}.label`, message: literal(english) } +} + +export function nodeDescriptionDescriptor(kind: string, english: string): MessageDescriptor { + return { id: `node.${nodeKindKey(kind)}.description`, message: literal(english) } +} + +function hintMessage(message: string): MessageDescriptor { + return { id: `editor.toolHint.${messageSlug(message)}`, message } +} + +export function toolHintDescriptor(english: string): MessageDescriptor { + return hintMessage(literal(english)) +} + +/** + * A chip label for one chip value. Labels that spell out a numeric value + * ("Cuts: 3, even") share one message with the number as `{value}`. + */ +export function toolHintChipDescriptor( + value: string, + label: string, +): { descriptor: MessageDescriptor; values?: { value: string } } { + if (/^\d+$/.test(value) && new RegExp(`\\b${value}\\b`).test(label)) { + const message = literal(label).replace(new RegExp(`\\b${value}\\b`), '{value}') + return { descriptor: hintMessage(message), values: { value } } + } + return { descriptor: toolHintDescriptor(label) } +} + +export function toolHintChipLabel(value: string, label: string, i18n: PascalI18n): string { + const { descriptor, values } = toolHintChipDescriptor(value, label) + return i18n._({ ...descriptor, values }) +} + +/** + * Gesture and key names the HUD and shortcut tokens print, beyond those the + * built-in definitions name themselves. + */ +export const HINT_KEY_NAMES = [ + 'Backspace', + 'Click', + 'Command', + 'Control', + 'Delete', + 'Double click', + 'Drag', + 'Enter', + 'Hover', + 'Left click', + 'Middle click', + 'Right click', + 'Scroll', + 'Scroll wheel', + 'Space', + 'Tab', +] as const + +/** Key or gesture names with words in them ("Left click", "Scroll"); bare keys stay as written. */ +export function toolHintKeyDescriptor(key: string): MessageDescriptor | undefined { + if (!/\p{L}{2}/u.test(key) || /^(?:Alt|Ctrl|Cmd|Esc|Shift)$/.test(key)) { + return undefined + } + return { id: `editor.toolHint.key.${messageSlug(key)}`, message: literal(key) } +} + +export function nodeLabel(kind: string, english: string, i18n: PascalI18n): string { + return i18n._(nodeLabelDescriptor(kind, english)) +} + +export function toolHintLabel(english: string, i18n: PascalI18n): string { + return i18n._(toolHintDescriptor(english)) +} + +export function toolHintKey(key: string, i18n: PascalI18n): string { + const descriptor = toolHintKeyDescriptor(key) + return descriptor ? i18n._(descriptor) : key +} + +/** Hint text from a descriptor (editor copy) or English definition copy. */ +export function hintText(value: MessageDescriptor | string, i18n: PascalI18n): string { + return typeof value === 'string' ? toolHintLabel(value, i18n) : i18n._(value) +} diff --git a/packages/editor/src/index.tsx b/packages/editor/src/index.tsx index f81c953885..f012f75f65 100644 --- a/packages/editor/src/index.tsx +++ b/packages/editor/src/index.tsx @@ -394,6 +394,16 @@ export { usePlacementNotice } from './hooks/use-placement-notice' export { useReducedMotion } from './hooks/use-reduced-motion' export { useSelectedRoom } from './hooks/use-selected-room' export { type Selection, useSelection } from './hooks/use-selection' +export { + messageSlug, + nodeDescriptionDescriptor, + nodeLabel, + nodeLabelDescriptor, + toolHintChipLabel, + toolHintDescriptor, + toolHintKey, + toolHintLabel, +} from './i18n/node-messages' export { sceneThemeName } from './i18n/scene-theme-name' export { clearPlacementSurface, diff --git a/packages/editor/src/lib/contextual-help.test.ts b/packages/editor/src/lib/contextual-help.test.ts index a826cbb640..5460333939 100644 --- a/packages/editor/src/lib/contextual-help.test.ts +++ b/packages/editor/src/lib/contextual-help.test.ts @@ -1,5 +1,24 @@ import { describe, expect, test } from 'bun:test' -import { resolveRotateHandleHelpHints, resolveSelectModeHelpHints } from './contextual-help' +import type { MessageDescriptor } from '@pascal-app/core' +import { + type ContextualShortcutHint, + resolveRotateHandleHelpHints as rotateHints, + resolveSelectModeHelpHints as selectHints, +} from './contextual-help' + +// Hints carry message descriptors; these tests read their English. +const text = (value: MessageDescriptor | string) => + typeof value === 'string' ? value : value.message +const english = (hints: ContextualShortcutHint[]) => + hints.map(({ label, subtitle, ...hint }) => ({ + ...hint, + label: text(label), + ...(subtitle ? { subtitle: text(subtitle) } : {}), + })) +const resolveRotateHandleHelpHints = (...args: Parameters) => + english(rotateHints(...args)) +const resolveSelectModeHelpHints = (...args: Parameters) => + english(selectHints(...args)) test('rotation advertises Alt as the temporary free-rotation override', () => { expect(resolveRotateHandleHelpHints(false)).toEqual([ diff --git a/packages/editor/src/lib/contextual-help.ts b/packages/editor/src/lib/contextual-help.ts index 2214f8900d..fa1145c3b9 100644 --- a/packages/editor/src/lib/contextual-help.ts +++ b/packages/editor/src/lib/contextual-help.ts @@ -1,12 +1,14 @@ +import type { MessageDescriptor } from '@pascal-app/core' + export type ContextualShortcutHint = { // A combo of keys pressed together (rendered joined by "+"). An entry may // itself be an array of alternatives (rendered joined by "/"), e.g. // [['Cmd/Ctrl', 'Shift'], 'Left click'] → "⌘ / ⇧ + click". keys: Array - label: string + label: MessageDescriptor | string // Optional secondary line under the label for a terser qualifier // (e.g. "disable 15° snap"). The HUD wraps both lines rather than truncating. - subtitle?: string + subtitle?: MessageDescriptor | string active?: boolean } @@ -33,7 +35,15 @@ export function resolveRotateHandleHelpHints(altPressed: boolean): ContextualSho return [ { keys: [ALT_KEY], - label: altPressed ? 'Rotating freely (no angle step)' : 'Hold to rotate freely', + label: altPressed + ? /* i18n */ { + id: 'editor.lib.contextualHelp.rotatingFreely', + message: 'Rotating freely (no angle step)', + } + : /* i18n */ { + id: 'editor.lib.contextualHelp.holdToRotateFreely', + message: 'Hold to rotate freely', + }, active: altPressed, }, ] @@ -77,7 +87,10 @@ export function resolveSelectModeHelpHints({ hints.push({ keys: [[COMMAND_KEY, SHIFT_KEY], LEFT_CLICK], - label: 'Add or remove objects from the selection', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.addOrRemoveObjectsFromThe', + message: 'Add or remove objects from the selection', + }, active: true, }) return hints @@ -89,23 +102,47 @@ export function resolveSelectModeHelpHints({ if (selectedCount > 1) { hints.push({ keys: [LEFT_CLICK], - label: 'Click or drag the selection to move it as one', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.clickOrDragTheSelectionTo', + message: 'Click or drag the selection to move it as one', + }, + }) + hints.push({ + keys: [ROTATE_KEYS], + label: /* i18n */ { + id: 'editor.lib.contextualHelp.rotateTheSelection45', + message: 'Rotate the selection ±45°', + }, }) - hints.push({ keys: [ROTATE_KEYS], label: 'Rotate the selection ±45°' }) hints.push({ keys: [COMMAND_KEY, 'G'], - label: 'Group selection (session only)', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.groupSelectionSessionOnly', + message: 'Group selection (session only)', + }, }) hints.push({ keys: [COMMAND_KEY, SHIFT_KEY, 'G'], - label: 'Ungroup session selection', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.ungroupSessionSelection', + message: 'Ungroup session selection', + }, }) hints.push({ keys: [[COMMAND_KEY, SHIFT_KEY], LEFT_CLICK], - label: 'Add or remove objects from the selection', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.addOrRemoveObjectsFromThe', + message: 'Add or remove objects from the selection', + }, active: commandPressed || shiftPressed, }) - hints.push({ keys: [ESC_KEY], label: 'Clear the selection (or click outside)' }) + hints.push({ + keys: [ESC_KEY], + label: /* i18n */ { + id: 'editor.lib.contextualHelp.clearTheSelectionOrClickOutside', + message: 'Clear the selection (or click outside)', + }, + }) return hints } @@ -115,12 +152,39 @@ export function resolveSelectModeHelpHints({ // detaches the joint mid-drag; a fitting's cluster adds rotate arcs, with // R / T (and Alt to switch axis) for keyboard rotation. if (mepSelection === 'run') { - hints.push({ keys: [CLICK], label: 'Click a handle dot to show move arrows' }) - hints.push({ keys: [ALT_KEY], label: 'Detach the joint while dragging an arrow' }) + hints.push({ + keys: [CLICK], + label: /* i18n */ { + id: 'editor.lib.contextualHelp.clickAHandleDotToShow', + message: 'Click a handle dot to show move arrows', + }, + }) + hints.push({ + keys: [ALT_KEY], + label: /* i18n */ { + id: 'editor.lib.contextualHelp.detachTheJointWhileDraggingAn', + message: 'Detach the joint while dragging an arrow', + }, + }) } else if (mepSelection === 'fitting') { - hints.push({ keys: [CLICK], label: 'Click the handle dot to show move + rotate handles' }) - hints.push({ keys: [ROTATE_KEYS], label: 'Rotate ±45°' }) - hints.push({ keys: [ALT_KEY], label: 'Switch the rotation axis (Y → X → Z)' }) + hints.push({ + keys: [CLICK], + label: /* i18n */ { + id: 'editor.lib.contextualHelp.clickTheHandleDotToShow', + message: 'Click the handle dot to show move + rotate handles', + }, + }) + hints.push({ + keys: [ROTATE_KEYS], + label: /* i18n */ { id: 'editor.lib.contextualHelp.rotate45', message: 'Rotate ±45°' }, + }) + hints.push({ + keys: [ALT_KEY], + label: /* i18n */ { + id: 'editor.lib.contextualHelp.switchTheRotationAxisYX', + message: 'Switch the rotation axis (Y → X → Z)', + }, + }) } // The rows are the same whatever modifier is held — guides/snapping are @@ -130,28 +194,40 @@ export function resolveSelectModeHelpHints({ if (hasMovableSelection) { hints.push({ keys: [LEFT_CLICK], - label: 'Drag selected movable object', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.dragSelectedMovableObject', + message: 'Drag selected movable object', + }, }) } if (hasRotatableSelection) { hints.push({ keys: [COMMAND_KEY, RIGHT_CLICK], - label: 'Drag left or right to rotate selected object', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.dragLeftOrRightToRotate', + message: 'Drag left or right to rotate selected object', + }, }) } if (hasOpeningRadiusSelection) { hints.push({ keys: [SHIFT_KEY], - label: 'Adjust one side’s corner radius', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.adjustOneSideSCornerRadius', + message: 'Adjust one side’s corner radius', + }, active: shiftPressed, }) } hints.push({ keys: [[COMMAND_KEY, SHIFT_KEY], LEFT_CLICK], - label: 'Add or remove objects from the selection', + label: /* i18n */ { + id: 'editor.lib.contextualHelp.addOrRemoveObjectsFromThe', + message: 'Add or remove objects from the selection', + }, active: commandPressed || shiftPressed, }) diff --git a/packages/editor/src/lib/continuation.ts b/packages/editor/src/lib/continuation.ts index 1f21d32bc2..fdb5c8c2f0 100644 --- a/packages/editor/src/lib/continuation.ts +++ b/packages/editor/src/lib/continuation.ts @@ -1,3 +1,4 @@ +import type { MessageDescriptor } from '@pascal-app/core' export type ContinuationContext = 'wall' | 'fence' | 'point' | 'cabinet' | 'canopy' export type ContinuationMode = string @@ -6,7 +7,7 @@ export const CONTINUATION_PROFILES: Record< { options: ContinuationMode[] default: ContinuationMode - labels: Record + labels: Record icons: Record /** * Picked once from the Build panel before drawing (`wall-draw-variant.ts`), @@ -21,7 +22,14 @@ export const CONTINUATION_PROFILES: Record< wall: { options: ['room', 'single', 'rectangle'], default: 'room', - labels: { room: 'Polygon room', single: 'Walls', rectangle: 'Rectangle room' }, + labels: { + room: /* i18n */ { id: 'editor.lib.continuation.polygonRoom', message: 'Polygon room' }, + single: /* i18n */ { id: 'editor.lib.continuation.walls', message: 'Walls' }, + rectangle: /* i18n */ { + id: 'editor.lib.continuation.rectangleRoom', + message: 'Rectangle room', + }, + }, icons: { room: 'lucide:pentagon', single: 'lucide:minus', rectangle: 'lucide:square' }, chosenInPanel: true, }, @@ -29,10 +37,13 @@ export const CONTINUATION_PROFILES: Record< options: ['single', 'continuous', 'curved', 'freehand'], default: 'continuous', labels: { - continuous: 'Continuous', - single: 'Single fence', - curved: 'Curved fence', - freehand: 'Freehand fence', + continuous: /* i18n */ { id: 'editor.lib.continuation.continuous', message: 'Continuous' }, + single: /* i18n */ { id: 'editor.lib.continuation.singleFence', message: 'Single fence' }, + curved: /* i18n */ { id: 'editor.lib.continuation.curvedFence', message: 'Curved fence' }, + freehand: /* i18n */ { + id: 'editor.lib.continuation.freehandFence', + message: 'Freehand fence', + }, }, icons: { continuous: 'lucide:waypoints', @@ -44,19 +55,34 @@ export const CONTINUATION_PROFILES: Record< point: { options: ['once', 'repeat'], default: 'once', - labels: { once: 'Place once', repeat: 'Place multiple' }, + labels: { + once: /* i18n */ { id: 'editor.lib.continuation.placeOnce', message: 'Place once' }, + repeat: /* i18n */ { id: 'editor.lib.continuation.placeMultiple', message: 'Place multiple' }, + }, icons: { once: 'lucide:target', repeat: 'lucide:copy-plus' }, }, cabinet: { options: ['single', 'continuous'], default: 'single', - labels: { single: 'Single cabinet', continuous: 'Continuous run' }, + labels: { + single: /* i18n */ { id: 'editor.lib.continuation.singleCabinet', message: 'Single cabinet' }, + continuous: /* i18n */ { + id: 'editor.lib.continuation.continuousRun', + message: 'Continuous run', + }, + }, icons: { single: 'lucide:minus', continuous: 'lucide:waypoints' }, }, canopy: { options: ['single', 'continuous'], default: 'single', - labels: { single: 'Single canopy', continuous: 'Continuous canopy' }, + labels: { + single: /* i18n */ { id: 'editor.lib.continuation.singleCanopy', message: 'Single canopy' }, + continuous: /* i18n */ { + id: 'editor.lib.continuation.continuousCanopy', + message: 'Continuous canopy', + }, + }, icons: { single: 'lucide:minus', continuous: 'lucide:waypoints' }, }, } diff --git a/packages/editor/src/lib/hud-title.ts b/packages/editor/src/lib/hud-title.ts index 53890645af..662021b5e2 100644 --- a/packages/editor/src/lib/hud-title.ts +++ b/packages/editor/src/lib/hud-title.ts @@ -1,10 +1,19 @@ -import { type IconRef, nodeRegistry, type TerrainVerb } from '@pascal-app/core' +import { + type IconRef, + type MessageDescriptor, + nodeRegistry, + type TerrainVerb, +} from '@pascal-app/core' +import { nodeLabelDescriptor } from '../i18n/node-messages' import type { ContinuationMode } from './continuation' import { getWallDrawVariantInfo, wallDrawVariantOf } from './wall-draw-variant' /** The contextual helper panel's header: what is in hand, and its key. */ export type HudTitle = { - label: string + /** May use `{kind}`, filled with the translated, lower-cased name of `kind`. */ + label: MessageDescriptor + /** The node kind whose display name the label refers to. */ + kind?: { kind: string; english: string } icon?: IconRef shortcut?: string } @@ -18,54 +27,63 @@ const TOOL_SHORTCUTS: Record = { } export const SELECT_HUD_TITLE: HudTitle = { - label: 'Select', + label: /* i18n */ { id: 'editor.lib.hudTitle.select', message: 'Select' }, icon: url('/icons/select.webp'), shortcut: 'V', } -export const PAINT_HUD_TITLE: HudTitle = { label: 'Paint', icon: url('/icons/paint.webp') } +export const PAINT_HUD_TITLE: HudTitle = { + label: /* i18n */ { id: 'editor.lib.hudTitle.paint', message: 'Paint' }, + icon: url('/icons/paint.webp'), +} export const ERASE_HUD_TITLE: HudTitle = { - label: 'Erase', + label: /* i18n */ { id: 'editor.lib.hudTitle.erase', message: 'Erase' }, icon: { kind: 'iconify', name: 'lucide:eraser' }, } export const PICK_MATERIAL_HUD_TITLE: HudTitle = { - label: 'Pick material', + label: /* i18n */ { id: 'editor.lib.hudTitle.pickMaterial', message: 'Pick material' }, icon: { kind: 'iconify', name: 'lucide:pipette' }, } -export const ROTATE_HUD_TITLE: HudTitle = { label: 'Rotate', icon: url('/icons/rotate.webp') } +export const ROTATE_HUD_TITLE: HudTitle = { + label: /* i18n */ { id: 'editor.lib.hudTitle.rotate', message: 'Rotate' }, + icon: url('/icons/rotate.webp'), +} export const MOVE_SELECTION_HUD_TITLE: HudTitle = { - label: 'Move selection', + label: /* i18n */ { id: 'editor.lib.hudTitle.moveSelection', message: 'Move selection' }, icon: url('/icons/pan.webp'), } -export const MOVE_ROOM_HUD_TITLE: HudTitle = { label: 'Move room', icon: url('/icons/room.webp') } +export const MOVE_ROOM_HUD_TITLE: HudTitle = { + label: /* i18n */ { id: 'editor.lib.hudTitle.moveRoom', message: 'Move room' }, + icon: url('/icons/room.webp'), +} export const RESIZE_HUD_TITLE: HudTitle = { - label: 'Resize', + label: /* i18n */ { id: 'editor.lib.hudTitle.resize', message: 'Resize' }, icon: url('/icons/resize.webp'), } export const DIVIDE_ROOM_HUD_TITLE: HudTitle = { - label: 'Divide room', + label: /* i18n */ { id: 'editor.lib.hudTitle.divideRoom', message: 'Divide room' }, icon: url('/icons/divide-room.webp'), } export const MEZZANINE_HUD_TITLE: HudTitle = { - label: 'Mezzanine', + label: /* i18n */ { id: 'editor.lib.hudTitle.mezzanine', message: 'Mezzanine' }, icon: url('/icons/mezzanine.webp'), } export const OPENING_HUD_TITLE: HudTitle = { - label: 'Cut opening', + label: /* i18n */ { id: 'editor.lib.hudTitle.cutOpening', message: 'Cut opening' }, icon: { kind: 'iconify', name: 'lucide:square-dashed' }, } export const TERRACE_HUD_TITLE: HudTitle = { - label: 'Terrace', + label: /* i18n */ { id: 'editor.lib.hudTitle.terrace', message: 'Terrace' }, icon: url('/icons/floor.webp'), } export const SMART_MEASURE_HUD_TITLE: HudTitle = { - label: 'Smart measure', + label: /* i18n */ { id: 'editor.lib.hudTitle.smartMeasure', message: 'Smart measure' }, icon: url('/icons/measure.webp'), shortcut: 'M', } const PAINT_REGION_LABELS = { - rectangle: 'Paint a rectangle', - polygon: 'Paint a shape', + rectangle: /* i18n */ { id: 'editor.lib.hudTitle.paintARectangle', message: 'Paint a rectangle' }, + polygon: /* i18n */ { id: 'editor.lib.hudTitle.paintAShape', message: 'Paint a shape' }, } as const export function paintRegionHudTitle(mode: keyof typeof PAINT_REGION_LABELS): HudTitle { @@ -75,22 +93,28 @@ export function paintRegionHudTitle(mode: keyof typeof PAINT_REGION_LABELS): Hud export function terrainHudTitle(verb: TerrainVerb): HudTitle { const label = verb === 'raise' - ? 'Raise terrain' + ? /* i18n */ { id: 'editor.lib.hudTitle.raiseTerrain', message: 'Raise terrain' } : verb === 'lower' - ? 'Lower terrain' + ? /* i18n */ { id: 'editor.lib.hudTitle.lowerTerrain', message: 'Lower terrain' } : verb === 'flatten' - ? 'Level terrain' - : 'Smooth terrain' + ? /* i18n */ { id: 'editor.lib.hudTitle.levelTerrain', message: 'Level terrain' } + : /* i18n */ { id: 'editor.lib.hudTitle.smoothTerrain', message: 'Smooth terrain' } return { label, icon: url(`/icons/terrain-${verb}.webp`) } } +const KIND_VERBS = { + edit: /* i18n */ { id: 'editor.lib.hudTitle.editKind', message: 'Edit {kind}' }, + move: /* i18n */ { id: 'editor.lib.hudTitle.moveKind', message: 'Move {kind}' }, + split: /* i18n */ { id: 'editor.lib.hudTitle.splitKind', message: 'Split {kind}' }, +} as const + /** A kind's registry name and icon, optionally behind a verb ("Move door"). */ -export function nodeKindHudTitle(kind: string, verb?: string): HudTitle | null { +export function nodeKindHudTitle(kind: string, verb?: keyof typeof KIND_VERBS): HudTitle | null { const presentation = nodeRegistry.get(kind)?.presentation if (!presentation) return null - const name = presentation.label return { - label: verb ? `${verb} ${name.toLowerCase()}` : name, + label: verb ? KIND_VERBS[verb] : nodeLabelDescriptor(kind, presentation.label), + kind: verb ? { kind, english: presentation.label } : undefined, icon: presentation.icon, shortcut: verb ? undefined : TOOL_SHORTCUTS[kind], } diff --git a/packages/editor/src/lib/mezzanine-selection.test.ts b/packages/editor/src/lib/mezzanine-selection.test.ts index c17089ee7e..f9436b8a3f 100644 --- a/packages/editor/src/lib/mezzanine-selection.test.ts +++ b/packages/editor/src/lib/mezzanine-selection.test.ts @@ -169,7 +169,9 @@ describe('mezzanine selection', () => { expect(gesture(hostId, ROOM_MOVE_DRAG_LABEL)).toBeNull() expect(gesture(mezzanineId, 'height')).toBeNull() expect(mezzanineGesture(null, nodes())).toBeNull() - expect(MEZZANINE_GESTURE_HINTS.move[0]!.label).toBe('Place inside the room') + expect(MEZZANINE_GESTURE_HINTS.move[0]!.label).toMatchObject({ + message: 'Place inside the room', + }) }) test('the delete dialog speaks of the mezzanine, and of its items only when it has some', () => { diff --git a/packages/editor/src/lib/paint-regions.test.ts b/packages/editor/src/lib/paint-regions.test.ts index 0719bcf0b4..a2fe6e1bdc 100644 --- a/packages/editor/src/lib/paint-regions.test.ts +++ b/packages/editor/src/lib/paint-regions.test.ts @@ -136,10 +136,11 @@ describe('paint region sub-mode', () => { }) test('off anything it draws on, the HUD says where to go: a floor for Polygon', () => { - expect(paintRegionHints('polygon', null, false).map((hint) => hint.label)).toEqual([ - 'Hover a floor or ceiling', - 'Cancel', - ]) + expect( + paintRegionHints('polygon', null, false).map((hint) => + typeof hint.label === 'string' ? hint.label : hint.label.message, + ), + ).toEqual(['Hover a floor or ceiling', 'Cancel']) expect(paintRegionHints('rectangle', null, false)[0]).toMatchObject({ label: 'Hover a wall, floor or ceiling', active: true, @@ -158,7 +159,9 @@ describe('paint region sub-mode', () => { test('the whole-surface HUD says what a click does; only painting teaches the held eyedropper', () => { const labels = (mode: Parameters[0]) => - paintHints(mode).map((hint) => hint.label) + paintHints(mode).map((hint) => + typeof hint.label === 'string' ? hint.label : (hint.label.message ?? ''), + ) expect(labels('surface')).toEqual(['Hold to pick a material']) expect(labels('erase')).toEqual(['Remove a painted part, or reset a surface']) expect(labels('erase').some((label) => /pick|colour|color|paint with/i.test(label))).toBe(false) diff --git a/packages/editor/src/lib/tool-cursor-icon.ts b/packages/editor/src/lib/tool-cursor-icon.ts index 77bba5fd2e..b55ef3de44 100644 --- a/packages/editor/src/lib/tool-cursor-icon.ts +++ b/packages/editor/src/lib/tool-cursor-icon.ts @@ -1,3 +1,4 @@ +import type { MessageDescriptor } from '@pascal-app/core' import type { ContinuationMode } from './continuation' import { getWallDrawVariantInfo, wallDrawVariantOf } from './wall-draw-variant' @@ -5,7 +6,10 @@ import { getWallDrawVariantInfo, wallDrawVariantOf } from './wall-draw-variant' * The cursor bubble's icon for the wall tool: the Rooms variant in hand * (Rectangle / Polygon / Walls), the same art as the Build panel tile. */ -export function wallCursorIcon(mode: ContinuationMode): { label: string; iconSrc: string } { +export function wallCursorIcon(mode: ContinuationMode): { + label: MessageDescriptor + iconSrc: string +} { const variant = getWallDrawVariantInfo(wallDrawVariantOf(mode)) return { label: variant.title, iconSrc: variant.iconSrc } } diff --git a/packages/editor/src/lib/wall-draw-variant.test.ts b/packages/editor/src/lib/wall-draw-variant.test.ts index 88e6f41f3a..73caf8129a 100644 --- a/packages/editor/src/lib/wall-draw-variant.test.ts +++ b/packages/editor/src/lib/wall-draw-variant.test.ts @@ -61,11 +61,11 @@ describe('Rooms variants', () => { test('name the HUD after the variant in hand', () => { expect(toolHudTitle('wall', 'rectangle')).toEqual({ - label: 'Rectangle room', + label: expect.objectContaining({ message: 'Rectangle room' }), icon: { kind: 'url', src: '/icons/room.webp' }, shortcut: 'B', }) - expect(toolHudTitle('wall', 'room')?.label).toBe('Polygon room') - expect(toolHudTitle('wall', 'single')?.label).toBe('Walls') + expect(toolHudTitle('wall', 'room')?.label.message).toBe('Polygon room') + expect(toolHudTitle('wall', 'single')?.label.message).toBe('Walls') }) }) diff --git a/packages/editor/src/lib/wall-draw-variant.ts b/packages/editor/src/lib/wall-draw-variant.ts index dd8e6c59d7..8f04a9e41d 100644 --- a/packages/editor/src/lib/wall-draw-variant.ts +++ b/packages/editor/src/lib/wall-draw-variant.ts @@ -1,3 +1,4 @@ +import type { MessageDescriptor } from '@pascal-app/core' import { emitter } from '@pascal-app/core' import useEditor from '../store/use-editor' import type { ContinuationMode } from './continuation' @@ -16,7 +17,7 @@ export type WallDrawVariantInfo = { /** Tile label. */ label: string /** The name the HUD shows while the variant is armed. */ - title: string + title: MessageDescriptor iconSrc: string /** Caption under the Rooms tiles: a bold lead, then the rest. */ caption: { lead: string; rest: string } @@ -27,7 +28,7 @@ export const WALL_DRAW_VARIANTS: readonly WallDrawVariantInfo[] = [ id: 'rectangle', mode: 'rectangle', label: 'Rectangle', - title: 'Rectangle room', + title: /* i18n */ { id: 'editor.lib.wallDrawVariant.rectangleRoom', message: 'Rectangle room' }, iconSrc: '/icons/room.webp', caption: { lead: 'Click two corners', @@ -38,7 +39,7 @@ export const WALL_DRAW_VARIANTS: readonly WallDrawVariantInfo[] = [ id: 'polygon', mode: 'room', label: 'Polygon', - title: 'Polygon room', + title: /* i18n */ { id: 'editor.lib.wallDrawVariant.polygonRoom', message: 'Polygon room' }, iconSrc: '/icons/polygon-room.webp', caption: { lead: 'Click each corner,', @@ -49,7 +50,7 @@ export const WALL_DRAW_VARIANTS: readonly WallDrawVariantInfo[] = [ id: 'walls', mode: 'single', label: 'Walls', - title: 'Walls', + title: /* i18n */ { id: 'editor.lib.wallDrawVariant.walls', message: 'Walls' }, iconSrc: '/icons/wall.webp', caption: { lead: 'Draw one wall at a time.', diff --git a/packages/nodes/src/i18n/definition-messages.ts b/packages/nodes/src/i18n/definition-messages.ts new file mode 100644 index 0000000000..7384bcb706 --- /dev/null +++ b/packages/nodes/src/i18n/definition-messages.ts @@ -0,0 +1,291 @@ +// Generated by `bun run i18n:extract` from the built-in node definitions; do not edit. +// The editor translates definition copy at display time +// (packages/editor/src/i18n/node-messages.ts); these descriptors exist so Lingui +// extracts and translates those IDs. +export const definitionMessages = [ + /* i18n */ { id: "editor.toolHint.aCurtainWallTakesNoCorner", message: "A curtain wall takes no corner window" }, + /* i18n */ { id: "editor.toolHint.aCurvedWallTakesNoCorner", message: "A curved wall takes no corner window" }, + /* i18n */ { id: "editor.toolHint.addACornerClickTheFirst", message: "Add a corner · click the first to close" }, + /* i18n */ { id: "editor.toolHint.anotherOpeningIsInTheWay", message: "Another opening is in the way at the corner" }, + /* i18n */ { id: "editor.toolHint.autoHangers", message: "Auto hangers" }, + /* i18n */ { id: "editor.toolHint.autoHangersClickOrPressH", message: "Auto hangers - click or press H to toggle" }, + /* i18n */ { id: "editor.toolHint.autoHangersOff", message: "Auto hangers: Off" }, + /* i18n */ { id: "editor.toolHint.autoHangersOn", message: "Auto hangers: On" }, + /* i18n */ { id: "editor.toolHint.bypassSnapping", message: "Bypass snapping" }, + /* i18n */ { id: "editor.toolHint.cancel", message: "Cancel" }, + /* i18n */ { id: "editor.toolHint.cancelMove", message: "Cancel move" }, + /* i18n */ { id: "editor.toolHint.cancelRunExit", message: "Cancel run / exit" }, + /* i18n */ { id: "editor.toolHint.cancelStartPoint", message: "Cancel start point" }, + /* i18n */ { id: "editor.toolHint.cornerWindow", message: "Corner window" }, + /* i18n */ { id: "editor.toolHint.cuts", message: "Cuts" }, + /* i18n */ { id: "editor.toolHint.cutsValue", message: "Cuts: {value}" }, + /* i18n */ { id: "editor.toolHint.cutsValueEven", message: "Cuts: {value}, even" }, + /* i18n */ { id: "editor.toolHint.cycleMonoGableButterfly", message: "Cycle mono / gable / butterfly" }, + /* i18n */ { id: "editor.toolHint.cycleSnappingMode", message: "Cycle snapping mode" }, + /* i18n */ { id: "editor.toolHint.doorStyleClickOrPressL", message: "Door style — click or press L to cycle" }, + /* i18n */ { id: "editor.toolHint.doorTypeClickOrPressO", message: "Door type — click or press O to cycle" }, + /* i18n */ { id: "editor.toolHint.dropDownspoutFromOutlet", message: "Drop downspout from outlet" }, + /* i18n */ { id: "editor.toolHint.ductDiameterDownUp", message: "Duct diameter down / up" }, + /* i18n */ { id: "editor.toolHint.endRunCancel", message: "End run / cancel" }, + /* i18n */ { id: "editor.toolHint.exit", message: "Exit" }, + /* i18n */ { id: "editor.toolHint.exitDrawing", message: "Exit drawing" }, + /* i18n */ { id: "editor.toolHint.finishAndContinue", message: "Finish and continue" }, + /* i18n */ { id: "editor.toolHint.finishCeiling", message: "Finish ceiling" }, + /* i18n */ { id: "editor.toolHint.finishGridAxis", message: "Finish grid axis" }, + /* i18n */ { id: "editor.toolHint.finishMeasurement", message: "Finish measurement" }, + /* i18n */ { id: "editor.toolHint.finishMultiPointWitnesses", message: "Finish multi-point witnesses" }, + /* i18n */ { id: "editor.toolHint.finishSlab", message: "Finish slab" }, + /* i18n */ { id: "editor.toolHint.flipSide", message: "Flip side" }, + /* i18n */ { id: "editor.toolHint.followTraceALineset", message: "Follow: trace a lineset" }, + /* i18n */ { id: "editor.toolHint.forcePlace", message: "Force place" }, + /* i18n */ { id: "editor.toolHint.freePlacement", message: "Free placement" }, + /* i18n */ { id: "editor.toolHint.goVerticalClickToPlace", message: "Go vertical ↕, click to place" }, + /* i18n */ { id: "editor.toolHint.highlightOutlet", message: "Highlight outlet" }, + /* i18n */ { id: "editor.toolHint.joinAsACornerWindow", message: "Join as a corner window" }, + /* i18n */ { id: "editor.toolHint.key.altDrag", message: "Alt + drag" }, + /* i18n */ { id: "editor.toolHint.key.backspace", message: "Backspace" }, + /* i18n */ { id: "editor.toolHint.key.click", message: "Click" }, + /* i18n */ { id: "editor.toolHint.key.clickAgain", message: "Click again" }, + /* i18n */ { id: "editor.toolHint.key.command", message: "Command" }, + /* i18n */ { id: "editor.toolHint.key.control", message: "Control" }, + /* i18n */ { id: "editor.toolHint.key.delete", message: "Delete" }, + /* i18n */ { id: "editor.toolHint.key.doubleClick", message: "Double click" }, + /* i18n */ { id: "editor.toolHint.key.drag", message: "Drag" }, + /* i18n */ { id: "editor.toolHint.key.enter", message: "Enter" }, + /* i18n */ { id: "editor.toolHint.key.hover", message: "Hover" }, + /* i18n */ { id: "editor.toolHint.key.hoverADuctEnd", message: "Hover a duct end" }, + /* i18n */ { id: "editor.toolHint.key.hoverAPipeEnd", message: "Hover a pipe end" }, + /* i18n */ { id: "editor.toolHint.key.hoverGutter", message: "Hover gutter" }, + /* i18n */ { id: "editor.toolHint.key.leftClick", message: "Left click" }, + /* i18n */ { id: "editor.toolHint.key.middleClick", message: "Middle click" }, + /* i18n */ { id: "editor.toolHint.key.rightClick", message: "Right click" }, + /* i18n */ { id: "editor.toolHint.key.rShiftR", message: "R / Shift+R" }, + /* i18n */ { id: "editor.toolHint.key.scroll", message: "Scroll" }, + /* i18n */ { id: "editor.toolHint.key.scrollWheel", message: "Scroll wheel" }, + /* i18n */ { id: "editor.toolHint.key.space", message: "Space" }, + /* i18n */ { id: "editor.toolHint.key.tab", message: "Tab" }, + /* i18n */ { id: "editor.toolHint.mountFloorCeilingWall", message: "Mount: floor / ceiling / wall" }, + /* i18n */ { id: "editor.toolHint.noRoomForTheMatchingWindow", message: "No room for the matching window on the other wall" }, + /* i18n */ { id: "editor.toolHint.noWallMeetsHere", message: "No wall meets here" }, + /* i18n */ { id: "editor.toolHint.numberOfCutsScrollOrClick", message: "Number of cuts — scroll or click to change" }, + /* i18n */ { id: "editor.toolHint.pickWitnessPoint", message: "Pick witness point" }, + /* i18n */ { id: "editor.toolHint.pipeSizeDownUp", message: "Pipe size down / up" }, + /* i18n */ { id: "editor.toolHint.placeAndContinue", message: "Place and continue" }, + /* i18n */ { id: "editor.toolHint.placeBlock", message: "Place block" }, + /* i18n */ { id: "editor.toolHint.placeBoxVentOnRoof", message: "Place box vent on roof" }, + /* i18n */ { id: "editor.toolHint.placeCabinet", message: "Place cabinet" }, + /* i18n */ { id: "editor.toolHint.placeCanopyOrSetTheNext", message: "Place canopy or set the next run point" }, + /* i18n */ { id: "editor.toolHint.placeChimneyOnRoof", message: "Place chimney on roof" }, + /* i18n */ { id: "editor.toolHint.placeColumn", message: "Place column" }, + /* i18n */ { id: "editor.toolHint.placeCupolaOnRoof", message: "Place cupola on roof" }, + /* i18n */ { id: "editor.toolHint.placeDimensionLineWhenNeeded", message: "Place dimension line when needed" }, + /* i18n */ { id: "editor.toolHint.placeDoorOnWall", message: "Place door on wall" }, + /* i18n */ { id: "editor.toolHint.placeDormerOnRoof", message: "Place dormer on roof" }, + /* i18n */ { id: "editor.toolHint.placeElevator", message: "Place elevator" }, + /* i18n */ { id: "editor.toolHint.placeEyebrowVentOnRoof", message: "Place eyebrow vent on roof" }, + /* i18n */ { id: "editor.toolHint.placeFitting", message: "Place fitting" }, + /* i18n */ { id: "editor.toolHint.placeGutterOnRoofEave", message: "Place gutter on roof eave" }, + /* i18n */ { id: "editor.toolHint.placeItem", message: "Place item" }, + /* i18n */ { id: "editor.toolHint.placeItLockedTo45", message: "Place it (locked to 45°)" }, + /* i18n */ { id: "editor.toolHint.placeMeasurementPoint", message: "Place measurement point" }, + /* i18n */ { id: "editor.toolHint.placement", message: "Placement" }, + /* i18n */ { id: "editor.toolHint.placementAuto", message: "Placement: Auto" }, + /* i18n */ { id: "editor.toolHint.placementGround", message: "Placement: Ground" }, + /* i18n */ { id: "editor.toolHint.placementRoof", message: "Placement: Roof" }, + /* i18n */ { id: "editor.toolHint.placementSurfaceClickOrPressP", message: "Placement surface - click or press P to cycle" }, + /* i18n */ { id: "editor.toolHint.placementType", message: "Placement type" }, + /* i18n */ { id: "editor.toolHint.placementTypeClickOrPressI", message: "Placement type — click or press I to toggle" }, + /* i18n */ { id: "editor.toolHint.placeOnAFence", message: "Place on a fence" }, + /* i18n */ { id: "editor.toolHint.placeRegister", message: "Place register" }, + /* i18n */ { id: "editor.toolHint.placeRidgeVentOnRoof", message: "Place ridge vent on roof" }, + /* i18n */ { id: "editor.toolHint.placeShelf", message: "Place shelf" }, + /* i18n */ { id: "editor.toolHint.placeSkylightOnRoof", message: "Place skylight on roof" }, + /* i18n */ { id: "editor.toolHint.placeSolarPanelArrayOnRoof", message: "Place solar panel array on roof" }, + /* i18n */ { id: "editor.toolHint.placeSpawnPoint", message: "Place spawn point" }, + /* i18n */ { id: "editor.toolHint.placeStairs", message: "Place stairs" }, + /* i18n */ { id: "editor.toolHint.placeTrap", message: "Place trap" }, + /* i18n */ { id: "editor.toolHint.placeTurbineVentOnRoof", message: "Place turbine vent on roof" }, + /* i18n */ { id: "editor.toolHint.placeUnit", message: "Place unit" }, + /* i18n */ { id: "editor.toolHint.placeWindowOnWall", message: "Place window on wall" }, + /* i18n */ { id: "editor.toolHint.placeWithoutTheCornerSnap", message: "Place without the corner snap" }, + /* i18n */ { id: "editor.toolHint.removeLastPoint", message: "Remove last point" }, + /* i18n */ { id: "editor.toolHint.removeLastWitness", message: "Remove last witness" }, + /* i18n */ { id: "editor.toolHint.rotate", message: "Rotate" }, + /* i18n */ { id: "editor.toolHint.rotate45", message: "Rotate ±45°" }, + /* i18n */ { id: "editor.toolHint.rotate45FloorCeiling", message: "Rotate ±45° (floor / ceiling)" }, + /* i18n */ { id: "editor.toolHint.rotateGhost15", message: "Rotate ghost ±15°" }, + /* i18n */ { id: "editor.toolHint.rotateOrFlipTheRunSide", message: "Rotate or flip the run side" }, + /* i18n */ { id: "editor.toolHint.rotateRoofDirection90", message: "Rotate roof direction 90°" }, + /* i18n */ { id: "editor.toolHint.rotateSpawnPoint", message: "Rotate spawn point" }, + /* i18n */ { id: "editor.toolHint.roundRectangularOval", message: "Round / rectangular / oval" }, + /* i18n */ { id: "editor.toolHint.setFenceStartEnd", message: "Set fence start / end" }, + /* i18n */ { id: "editor.toolHint.setOneCornerThenTheOpposite", message: "Set one corner, then the opposite" }, + /* i18n */ { id: "editor.toolHint.setRoofFootprint", message: "Set roof footprint" }, + /* i18n */ { id: "editor.toolHint.setWallStartEnd", message: "Set wall start / end" }, + /* i18n */ { id: "editor.toolHint.slopeLevel", message: "Slope / level" }, + /* i18n */ { id: "editor.toolHint.snapOntoTheRun", message: "Snap onto the run" }, + /* i18n */ { id: "editor.toolHint.splitAtTheMarks", message: "Split at the marks" }, + /* i18n */ { id: "editor.toolHint.startGridAxis", message: "Start grid axis" }, + /* i18n */ { id: "editor.toolHint.startLineset", message: "Start lineset" }, + /* i18n */ { id: "editor.toolHint.startLiquidLine", message: "Start liquid line" }, + /* i18n */ { id: "editor.toolHint.startRun", message: "Start run" }, + /* i18n */ { id: "editor.toolHint.startSegment", message: "Start segment" }, + /* i18n */ { id: "editor.toolHint.stepBackOrCancel", message: "Step back or cancel" }, + /* i18n */ { id: "editor.toolHint.style", message: "Style" }, + /* i18n */ { id: "editor.toolHint.styleBarn", message: "Style: Barn" }, + /* i18n */ { id: "editor.toolHint.styleCasement", message: "Style: Casement" }, + /* i18n */ { id: "editor.toolHint.styleCraftsman", message: "Style: Craftsman" }, + /* i18n */ { id: "editor.toolHint.styleDoubleHung", message: "Style: Double-hung" }, + /* i18n */ { id: "editor.toolHint.styleFrench", message: "Style: French" }, + /* i18n */ { id: "editor.toolHint.styleGlass", message: "Style: Glass" }, + /* i18n */ { id: "editor.toolHint.styleGrid", message: "Style: Grid" }, + /* i18n */ { id: "editor.toolHint.styleHalfLouvered", message: "Style: Half-louvered" }, + /* i18n */ { id: "editor.toolHint.styleHorizontalBands", message: "Style: Horizontal bands" }, + /* i18n */ { id: "editor.toolHint.styleModern", message: "Style: Modern" }, + /* i18n */ { id: "editor.toolHint.stylePanel", message: "Style: Panel" }, + /* i18n */ { id: "editor.toolHint.stylePaneledGlass", message: "Style: Paneled glass" }, + /* i18n */ { id: "editor.toolHint.styleShaker", message: "Style: Shaker" }, + /* i18n */ { id: "editor.toolHint.styleSingle", message: "Style: Single" }, + /* i18n */ { id: "editor.toolHint.styleSixPanel", message: "Style: Six-panel" }, + /* i18n */ { id: "editor.toolHint.styleSliding", message: "Style: Sliding" }, + /* i18n */ { id: "editor.toolHint.styleTallGrid", message: "Style: Tall grid" }, + /* i18n */ { id: "editor.toolHint.styleTransom", message: "Style: Transom" }, + /* i18n */ { id: "editor.toolHint.styleTripleHung", message: "Style: Triple-hung" }, + /* i18n */ { id: "editor.toolHint.styleWideGrid", message: "Style: Wide grid" }, + /* i18n */ { id: "editor.toolHint.switchRotationAxisYXZ", message: "Switch rotation axis (Y → X → Z)" }, + /* i18n */ { id: "editor.toolHint.theWallsMeetAtTooSharp", message: "The walls meet at too sharp or too flat an angle" }, + /* i18n */ { id: "editor.toolHint.theWindowWaitingThereIsTaller", message: "The window waiting there is taller than this wall" }, + /* i18n */ { id: "editor.toolHint.threeOrMoreWallsMeetHere", message: "Three or more walls meet here" }, + /* i18n */ { id: "editor.toolHint.traceCeilingOutline", message: "Trace ceiling outline" }, + /* i18n */ { id: "editor.toolHint.traceSlabOutline", message: "Trace slab outline" }, + /* i18n */ { id: "editor.toolHint.type", message: "Type" }, + /* i18n */ { id: "editor.toolHint.typeAwning", message: "Type: Awning" }, + /* i18n */ { id: "editor.toolHint.typeBarn", message: "Type: Barn" }, + /* i18n */ { id: "editor.toolHint.typeBay", message: "Type: Bay" }, + /* i18n */ { id: "editor.toolHint.typeBow", message: "Type: Bow" }, + /* i18n */ { id: "editor.toolHint.typeCabinet", message: "Type: Cabinet" }, + /* i18n */ { id: "editor.toolHint.typeCasement", message: "Type: Casement" }, + /* i18n */ { id: "editor.toolHint.typeDouble", message: "Type: Double" }, + /* i18n */ { id: "editor.toolHint.typeDoubleHung", message: "Type: Double Hung" }, + /* i18n */ { id: "editor.toolHint.typeFixed", message: "Type: Fixed" }, + /* i18n */ { id: "editor.toolHint.typeFolding", message: "Type: Folding" }, + /* i18n */ { id: "editor.toolHint.typeFrench", message: "Type: French" }, + /* i18n */ { id: "editor.toolHint.typeHinged", message: "Type: Hinged" }, + /* i18n */ { id: "editor.toolHint.typeIsland", message: "Type: Island" }, + /* i18n */ { id: "editor.toolHint.typeLouvered", message: "Type: Louvered" }, + /* i18n */ { id: "editor.toolHint.typePocket", message: "Type: Pocket" }, + /* i18n */ { id: "editor.toolHint.typeSingleHung", message: "Type: Single Hung" }, + /* i18n */ { id: "editor.toolHint.typeSliding", message: "Type: Sliding" }, + /* i18n */ { id: "editor.toolHint.verticalStackClickToPlace", message: "Vertical stack ↕, click to place" }, + /* i18n */ { id: "editor.toolHint.wasteVent", message: "Waste / vent" }, + /* i18n */ { id: "editor.toolHint.windowStyleClickOrPressL", message: "Window style — click or press L to cycle" }, + /* i18n */ { id: "editor.toolHint.windowTypeClickOrPressO", message: "Window type — click or press O to cycle" }, + /* i18n */ { id: "node.block.description", message: "A topology-backed solid edited directly in the canvas." }, + /* i18n */ { id: "node.block.label", message: "Block" }, + /* i18n */ { id: "node.boxVent.description", message: "Small louvered exhaust vent that sits on a roof slope." }, + /* i18n */ { id: "node.boxVent.label", message: "Box Vent" }, + /* i18n */ { id: "node.building.description", message: "A building container holding one or more levels." }, + /* i18n */ { id: "node.building.label", message: "Building" }, + /* i18n */ { id: "node.cabinet.description", message: "A configurable parametric base cabinet." }, + /* i18n */ { id: "node.cabinet.label", message: "Modular Cabinet" }, + /* i18n */ { id: "node.cabinetModule.description", message: "An editable module inside a modular cabinet run." }, + /* i18n */ { id: "node.cabinetModule.label", message: "Cabinet Module" }, + /* i18n */ { id: "node.ceiling.description", message: "A polygon-bounded ceiling surface that hosts ceiling-mounted items." }, + /* i18n */ { id: "node.ceiling.label", message: "Ceiling" }, + /* i18n */ { id: "node.chimney.description", message: "Vertical masonry stack on a roof segment." }, + /* i18n */ { id: "node.chimney.label", message: "Chimney" }, + /* i18n */ { id: "node.column.description", message: "A parametric column with configurable cross-section, base, and capital." }, + /* i18n */ { id: "node.column.label", message: "Column" }, + /* i18n */ { id: "node.constructionDimension.description", message: "Associative linear, curved, circular, angular, or coordinate plan dimension." }, + /* i18n */ { id: "node.constructionDimension.label", message: "Construction Dimension" }, + /* i18n */ { id: "node.cupola.description", message: "Louvered roof lantern with a dome or pyramid cap and optional finial." }, + /* i18n */ { id: "node.cupola.label", message: "Cupola" }, + /* i18n */ { id: "node.door.description", message: "A door cut into a wall. Animated open/close state." }, + /* i18n */ { id: "node.door.label", message: "Door" }, + /* i18n */ { id: "node.dormer.description", message: "House-shaped protrusion on a roof segment." }, + /* i18n */ { id: "node.dormer.label", message: "Dormer" }, + /* i18n */ { id: "node.downspout.description", message: "Vertical drop pipe from a gutter outlet to the ground." }, + /* i18n */ { id: "node.downspout.label", message: "Downspout" }, + /* i18n */ { id: "node.ductFitting.description", message: "Elbow, tee, reducer, or square-to-round transition connecting duct runs." }, + /* i18n */ { id: "node.ductFitting.label", message: "Duct Fitting" }, + /* i18n */ { id: "node.ductSegment.description", message: "HVAC duct run — polyline of round, rect, or flat-oval sections." }, + /* i18n */ { id: "node.ductSegment.label", message: "Duct" }, + /* i18n */ { id: "node.ductTerminal.description", message: "Duct terminal — supply register, ceiling diffuser, or return grille. Duct runs end at its collar." }, + /* i18n */ { id: "node.ductTerminal.label", message: "Register" }, + /* i18n */ { id: "node.elevator.description", message: "A multi-level elevator shaft with configurable openings per level." }, + /* i18n */ { id: "node.elevator.label", message: "Elevator" }, + /* i18n */ { id: "node.eyebrowVent.description", message: "Low curved lens-shaped roof vent with a louvered front." }, + /* i18n */ { id: "node.eyebrowVent.label", message: "Eyebrow Vent" }, + /* i18n */ { id: "node.fence.description", message: "A straight or curved fence segment with configurable posts and infill." }, + /* i18n */ { id: "node.fence.label", message: "Fence" }, + /* i18n */ { id: "node.fenceGate.description", message: "A gate hosted by a fence." }, + /* i18n */ { id: "node.fenceGate.label", message: "Gate" }, + /* i18n */ { id: "node.fenceOpening.description", message: "An intentional opening in a fence." }, + /* i18n */ { id: "node.fenceOpening.label", message: "Open Passage" }, + /* i18n */ { id: "node.floorOpening.label", message: "Floor opening" }, + /* i18n */ { id: "node.guide.description", message: "A measurement / reference annotation (linear, area, or arc)." }, + /* i18n */ { id: "node.guide.label", message: "Guide" }, + /* i18n */ { id: "node.gutter.description", message: "Rain-water channel running along the eave of a roof segment." }, + /* i18n */ { id: "node.gutter.label", message: "Gutter" }, + /* i18n */ { id: "node.hvacEquipment.description", message: "Furnace, air handler, or condenser — duct runs connect to its supply/return collars." }, + /* i18n */ { id: "node.hvacEquipment.label", message: "HVAC Unit" }, + /* i18n */ { id: "node.importedMesh.description", message: "Geometry preserved from an imported model when no native Pascal shape exists." }, + /* i18n */ { id: "node.importedMesh.label", message: "Imported Mesh" }, + /* i18n */ { id: "node.item.description", message: "A catalog-backed item (furniture, fixtures, decorations)." }, + /* i18n */ { id: "node.item.label", message: "Item" }, + /* i18n */ { id: "node.leanToExtension.description", message: "An attached mono-pitch or freestanding mono, gable, or butterfly canopy with managed structure and drainage." }, + /* i18n */ { id: "node.leanToExtension.label", message: "Canopy" }, + /* i18n */ { id: "node.level.description", message: "A single floor of a building, holding walls / slabs / ceilings / items." }, + /* i18n */ { id: "node.level.label", message: "Level" }, + /* i18n */ { id: "node.lineset.description", message: "Refrigerant lineset — copper suction + liquid pair joining a condenser to the indoor coil." }, + /* i18n */ { id: "node.lineset.label", message: "Lineset" }, + /* i18n */ { id: "node.liquidLine.description", message: "Standalone refrigerant liquid line — a thin bare-copper run; Follow mode traces an existing lineset." }, + /* i18n */ { id: "node.liquidLine.label", message: "Liquid Line" }, + /* i18n */ { id: "node.measurement.description", message: "A persistent distance, angle, area, perimeter, or volume annotation." }, + /* i18n */ { id: "node.measurement.label", message: "Measurement" }, + /* i18n */ { id: "node.pipeFitting.description", message: "DWV joint — elbow bend, 45° wye, or sanitary tee." }, + /* i18n */ { id: "node.pipeFitting.label", message: "Pipe Fitting" }, + /* i18n */ { id: "node.pipeSegment.description", message: "Drain / waste / vent pipe run — draw level or toggle a ¼″ per foot fall with S." }, + /* i18n */ { id: "node.pipeSegment.label", message: "DWV Pipe" }, + /* i18n */ { id: "node.pipeTrap.description", message: "DWV P-trap — water seal on the waste line. The trap arm runs to the vent." }, + /* i18n */ { id: "node.pipeTrap.label", message: "Trap" }, + /* i18n */ { id: "node.proceduralItem.description", message: "Experimental editable recipe" }, + /* i18n */ { id: "node.proceduralItem.label", message: "Procedural item" }, + /* i18n */ { id: "node.ridgeVent.description", message: "Ventilation strip running along the ridge of a roof segment." }, + /* i18n */ { id: "node.ridgeVent.label", message: "Ridge Vent" }, + /* i18n */ { id: "node.roof.description", message: "A pitched / hip / gable roof composed of one or more segments." }, + /* i18n */ { id: "node.roof.label", message: "Roof" }, + /* i18n */ { id: "node.roofSegment.description", message: "A single pitched plane of a parent roof." }, + /* i18n */ { id: "node.roofSegment.label", message: "Roof Segment" }, + /* i18n */ { id: "node.scan.description", message: "A captured session with optional mesh, motion, media, and sensor data." }, + /* i18n */ { id: "node.scan.label", message: "Capture" }, + /* i18n */ { id: "node.separator.label", message: "Separator" }, + /* i18n */ { id: "node.shelf.description", message: "A configurable shelving unit. Items host on each row." }, + /* i18n */ { id: "node.shelf.label", message: "Shelf" }, + /* i18n */ { id: "node.site.description", message: "The top-level container holding buildings, zones, and the property boundary." }, + /* i18n */ { id: "node.site.label", message: "Site" }, + /* i18n */ { id: "node.skylight.description", message: "Framed glass opening on a roof segment." }, + /* i18n */ { id: "node.skylight.label", message: "Skylight" }, + /* i18n */ { id: "node.slab.description", message: "A polygon-bounded floor surface that hosts items on top." }, + /* i18n */ { id: "node.slab.label", message: "Slab" }, + /* i18n */ { id: "node.solarPanel.description", message: "Grid of photovoltaic panels mounted on a roof segment." }, + /* i18n */ { id: "node.solarPanel.label", message: "Solar Panel" }, + /* i18n */ { id: "node.spawn.description", message: "Player or camera origin within a level. One per level." }, + /* i18n */ { id: "node.spawn.label", message: "Spawn Point" }, + /* i18n */ { id: "node.stair.description", message: "A stair composed of one or more flights with configurable treads, risers, railings." }, + /* i18n */ { id: "node.stair.label", message: "Stair" }, + /* i18n */ { id: "node.stairSegment.description", message: "A single flight of a parent stair." }, + /* i18n */ { id: "node.stairSegment.label", message: "Stair Segment" }, + /* i18n */ { id: "node.structuralGrid.description", message: "Persistent construction grid axis with identification bubbles." }, + /* i18n */ { id: "node.structuralGrid.label", message: "Structural Grid" }, + /* i18n */ { id: "node.turbineVent.description", message: "Wind-driven spinning whirlybird exhaust vent for a roof slope." }, + /* i18n */ { id: "node.turbineVent.label", message: "Turbine Vent" }, + /* i18n */ { id: "node.unit.description", message: "A named group of zones forming one apartment, hotel room or commercial lot." }, + /* i18n */ { id: "node.unit.label", message: "Unit" }, + /* i18n */ { id: "node.wall.description", message: "A straight or curved wall segment. Hosts doors, windows, lean-to extensions, and wall-mounted items." }, + /* i18n */ { id: "node.wall.label", message: "Wall" }, + /* i18n */ { id: "node.window.description", message: "A window cut into a wall. Animated open/close for opening windows." }, + /* i18n */ { id: "node.window.label", message: "Window" }, + /* i18n */ { id: "node.zone.description", message: "A polygonal site zone (lawn, water, paving) with a TSL gradient material." }, + /* i18n */ { id: "node.zone.label", message: "Zone" }, +] diff --git a/scripts/i18n-node-messages.ts b/scripts/i18n-node-messages.ts new file mode 100644 index 0000000000..24f6fe64eb --- /dev/null +++ b/scripts/i18n-node-messages.ts @@ -0,0 +1,172 @@ +import { + existsSync, + mkdirSync, + mkdtempSync, + readdirSync, + readFileSync, + writeFileSync, +} from 'node:fs' +import { tmpdir } from 'node:os' +import { dirname, join, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import type { MessageDescriptor } from '@lingui/core' +import { + HINT_KEY_NAMES, + nodeDescriptionDescriptor, + nodeLabelDescriptor, + toolHintChipDescriptor, + toolHintDescriptor, + toolHintKeyDescriptor, +} from '../packages/editor/src/i18n/node-messages' + +/** + * Generates `packages/nodes/src/i18n/definition-messages.ts`: one Lingui + * descriptor per display string the built-in node definitions carry + * (presentation label/description, tool and affordance hint labels, gesture + * keys, chip labels and tooltips, plus the shared key names). The definitions + * stay English; the editor looks these IDs up at display time, so this file + * exists for extraction. + */ + +const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..') +export const DEFINITION_MESSAGES_PATH = join(ROOT, 'packages/nodes/src/i18n/definition-messages.ts') + +type Hint = { + key?: string + label?: string + chip?: { labels?: Record; tooltip?: string } +} + +type Definition = { + kind?: string + type?: string + presentation?: { label?: string; description?: string } + toolHints?: Hint[] + affordanceHints?: Record +} + +type Manifest = { + name?: string + exports?: Record +} + +/** + * A tsconfig whose `paths` send every `@pascal-app/[/]` export to + * its TypeScript source instead of `dist/`, so the definitions load before any + * build: i18n:check runs ahead of the build in CI. + */ +function workspaceSourcesTsconfig(): string { + const paths: Record = {} + for (const pkg of readdirSync(join(ROOT, 'packages'))) { + const manifestPath = join(ROOT, 'packages', pkg, 'package.json') + if (!existsSync(manifestPath)) continue + const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')) as Manifest + if (!manifest.name?.startsWith('@pascal-app/')) continue + for (const [subpath, target] of Object.entries(manifest.exports ?? {})) { + const file = typeof target === 'string' ? target : (target?.import ?? target?.default) + if (!file) continue + const source = file.replace(/^\.\/dist\//, './src/').replace(/\.js$/, '') + const resolved = [source, `${source}.ts`, `${source}.tsx`, `${source}/index.ts`] + .map((candidate) => join('packages', pkg, candidate)) + .find((candidate) => /\.tsx?$/.test(candidate) && existsSync(join(ROOT, candidate))) + if (resolved) paths[`${manifest.name}${subpath.slice(1)}`] = [resolved] + } + } + const path = join(mkdtempSync(join(tmpdir(), 'pascal-i18n-')), 'tsconfig.json') + writeFileSync(path, JSON.stringify({ compilerOptions: { baseUrl: ROOT, paths } })) + return path +} + +function descriptorsOf(definitions: Definition[]): MessageDescriptor[] { + const byId = new Map() + const add = (descriptor: MessageDescriptor | undefined) => { + if (!(descriptor?.message && /\p{L}{2}/u.test(descriptor.message))) return + const message = descriptor.message + const existing = byId.get(descriptor.id) + if (existing && existing.message !== message) { + throw new Error( + `Definition copy "${message}" and "${existing.message}" both map to ${descriptor.id}; reword one`, + ) + } + byId.set(descriptor.id, { id: descriptor.id, message }) + } + const addHint = (hint: Hint) => { + if (hint.label) add(toolHintDescriptor(hint.label)) + if (hint.key) add(toolHintKeyDescriptor(hint.key)) + for (const [value, label] of Object.entries(hint.chip?.labels ?? {})) { + add(toolHintChipDescriptor(value, label).descriptor) + } + if (hint.chip?.tooltip) add(toolHintDescriptor(hint.chip.tooltip)) + } + for (const definition of definitions) { + const kind = definition.kind ?? definition.type + if (!kind) continue + const { label, description } = definition.presentation ?? {} + if (label) add(nodeLabelDescriptor(kind, label)) + if (description) add(nodeDescriptionDescriptor(kind, description)) + for (const hint of definition.toolHints ?? []) addHint(hint) + for (const hints of Object.values(definition.affordanceHints ?? {})) { + for (const hint of hints) addHint(hint) + } + } + for (const key of HINT_KEY_NAMES) add(toolHintKeyDescriptor(key)) + return [...byId.values()].sort((a, b) => a.id.localeCompare(b.id)) +} + +/** Loads the built-in definitions from source in a child process and returns their descriptors. */ +export async function definitionDescriptors(): Promise { + const result = Bun.spawnSync( + [ + process.execPath, + `--tsconfig-override=${workspaceSourcesTsconfig()}`, + fileURLToPath(import.meta.url), + '--emit-json', + ], + { cwd: ROOT, stdout: 'pipe', stderr: 'pipe' }, + ) + if (result.exitCode !== 0) { + throw new Error(`Could not load the node definitions:\n${result.stderr.toString()}`) + } + return JSON.parse(result.stdout.toString()) as MessageDescriptor[] +} + +export function renderDefinitionMessages(descriptors: MessageDescriptor[]): string { + const lines = descriptors.map( + (descriptor) => + ` /* i18n */ { id: ${JSON.stringify(descriptor.id)}, message: ${JSON.stringify(descriptor.message)} },`, + ) + return [ + '// Generated by `bun run i18n:extract` from the built-in node definitions; do not edit.', + '// The editor translates definition copy at display time', + '// (packages/editor/src/i18n/node-messages.ts); these descriptors exist so Lingui', + '// extracts and translates those IDs.', + 'export const definitionMessages = [', + ...lines, + ']', + '', + ].join('\n') +} + +export async function writeDefinitionMessages(): Promise { + mkdirSync(dirname(DEFINITION_MESSAGES_PATH), { recursive: true }) + writeFileSync(DEFINITION_MESSAGES_PATH, renderDefinitionMessages(await definitionDescriptors())) +} + +export async function checkDefinitionMessages(): Promise { + const expected = renderDefinitionMessages(await definitionDescriptors()) + const current = existsSync(DEFINITION_MESSAGES_PATH) + ? readFileSync(DEFINITION_MESSAGES_PATH, 'utf8') + : '' + return current === expected + ? [] + : [ + 'packages/nodes/src/i18n/definition-messages.ts is not synchronized; run bun run i18n:extract', + ] +} + +if (import.meta.main && process.argv.includes('--emit-json')) { + const { builtinPlugin } = (await import('../packages/nodes/src/index')) as { + builtinPlugin: { nodes: Definition[] } + } + process.stdout.write(JSON.stringify(descriptorsOf(builtinPlugin.nodes))) +} diff --git a/scripts/i18n.ts b/scripts/i18n.ts index 20b2274ddd..0dab5b0ecf 100644 --- a/scripts/i18n.ts +++ b/scripts/i18n.ts @@ -15,6 +15,7 @@ import { resolveRevision, } from './i18n-git' import { checkRepositoryLiterals } from './i18n-literals' +import { checkDefinitionMessages, writeDefinitionMessages } from './i18n-node-messages' export type SourceMessage = { id: string @@ -1155,6 +1156,7 @@ export async function checkCatalogs(options: CatalogCheckOptions = {}): Promise< const catalogSources = readSourceMessages() const glossary = readJson(GLOSSARY_PATH) return [ + ...(await checkDefinitionMessages()), ...checkLinguiCatalogSync(), ...checkEnglishCatalog(sources, catalogSources), ...checkCatalogMessages(sources, glossary, options), @@ -1166,6 +1168,7 @@ export async function checkCatalogs(options: CatalogCheckOptions = {}): Promise< async function main(): Promise { const command = process.argv[2] if (command === 'extract') { + await writeDefinitionMessages() extractCatalogs() console.log(`Extracted and compiled ${readSourceMessages().length} Lingui messages`) return @@ -1242,6 +1245,7 @@ async function main(): Promise { } if (command === 'translate') { + await writeDefinitionMessages() extractCatalogs() const requested = process.argv.slice(3) const locales = requested.length > 0 ? requested : [...TARGET_LOCALES]