// English dictionary — proves translatability. Same keys as de.ts; only the // values differ. Identifiers/keys stay English (DOSSIER namespacing); values are // the translated, user-visible text. import type { TranslationKey } from "./de"; export const en: Record = { // Brand / Topbar. "brand.tag": "Document model", "topbar.viewGroup": "View", "topbar.viewGroup.disabled": "Views available for floors only", "topbar.grundriss": "Plan", "topbar.perspektive": "Perspective", "view3d.group": "3D view", "view3d.front": "Front", "view3d.front.hint": "Front view (frontal)", "view3d.front.abbr": "F", "view3d.back": "Back", "view3d.back.hint": "Back view (rear)", "view3d.back.abbr": "B", "view3d.top": "Top", "view3d.top.hint": "Top view (straight down)", "view3d.top.abbr": "T", "view3d.side": "Right", "view3d.side.hint": "Right side view (90° to the front)", "view3d.side.abbr": "R", "view3d.left": "Left", "view3d.left.hint": "Left side view (90° to the front, opposite Right)", "view3d.left.abbr": "L", "view3d.perspective": "Perspective", "view3d.perspective.hint": "Free perspective (3/4 view)", "topbar.views": "Views", "topbar.views.menu": "Pick a view (Front/Back/Left/Right/Top)", "topbar.axo": "Axonometric", "topbar.axo.hint": "3D axonometric (free 3/4 view)", "view3d.iso": "Isometric", "view3d.iso.hint": "Isometric view (equiangular from front-top-right)", "view3d.isoFrontLeft": "Front Left", "view3d.isoFrontLeft.hint": "Isometric view (equiangular from front-top-left)", "view3d.isoBackRight": "Back Right", "view3d.isoBackRight.hint": "Isometric view (equiangular from back-top-right)", "view3d.isoBackLeft": "Back Left", "view3d.isoBackLeft.hint": "Isometric view (equiangular from back-top-left)", "view3d.iso.menu": "More isometric views", "view3d.iso.menu.hint": "Pick one of the four upper isometric octants", "view3d.camera": "Camera", "view3d.camera.hint": "Camera settings (field of view)", "view3d.fov": "Field of view", "view3d.fov.hint": "Field of view (FOV) of the perspective camera in degrees", "topbar.detailGroup": "Detail level", "topbar.detail": "Detail level", "topbar.detail.hint": "Detail level of the plan (symbols, hatches, lines)", "topbar.detail.hintDisabled": "Detail level applies in the plan (not yet in perspective)", "topbar.detail.grob": "coarse", "topbar.detail.mittel": "medium", "topbar.detail.fein": "fine", "topbar.scaleGroup": "Scale and zoom", "topbar.scale": "Scale", "topbar.scale.apply": "Apply paper scale 1:N", "topbar.scale.custom": "custom …", "topbar.scale.live": "Current paper scale (live)", "topbar.scale.prompt": "Enter scale (e.g. 1:35 or 35):", "topbar.zoom100": "100%", "topbar.zoom100.hint": "Zoom exactly to the chosen scale 1:{n}", "topbar.fit": "Fit", "topbar.fit.hint": "Fit to plan", "topbar.fitSelection": "Selection", "topbar.fitSelection.hint": "Fit to selection (otherwise to plan)", "topbar.exportPdf": "PDF", "topbar.exportPdf.hint": "Export the floor plan as a vector PDF", "topbar.exportDxf": "DXF", "topbar.exportDxf.hint": "Export the floor plan as DXF (model space in meters)", "topbar.zoom.current": "Current zoom", "topbar.renderGroup": "Render mode", "topbar.render.shaded": "Shaded", "topbar.render.shaded.hint": "Shaded", "topbar.render.wireframe": "Wire", "topbar.render.wireframe.hint": "Wireframe", "topbar.render.hidden": "Edges", "topbar.render.hidden.hint": "Hidden line", "topbar.render.hintDisabled": "Render mode applies in perspective", // Display style (context-dependent dropdown): plan = Color/Mono, // perspective = Shaded/White/Wireframe/Hidden. "display.style": "Display", "display.style.group": "Display style", "display.style.hint": "Display style of the active view", "display.style.color": "Color", "display.style.mono": "Black & white", "display.style.shaded": "Shaded", "display.style.shadedEdges": "Shaded with edges", "display.style.white": "White", "display.style.contour": "Contours only", "display.style.textured": "Textured", "display.style.wireframe": "Wireframe", "display.style.hidden": "Hidden line", "topbar.referenceLinesGroup": "Reference lines", "topbar.referenceLines": "Reference lines", "topbar.referenceLines.hint": "Show/hide reference lines (wall axes)", "topbar.referenceLines.hintDisabled": "Reference lines apply in the plan", "topbar.resources": "Resources", "topbar.resources.hint": "Show/hide the resources window", // Menu bar (Topbar, AppMenuBar). "menu.edit": "Edit", "menu.edit.undo": "Undo", "menu.edit.redo": "Redo", "menu.edit.delete": "Delete", "menu.view": "View", "menu.view.floorplan": "Floor plan", "menu.view.perspective": "Perspective", "menu.view.referenceLines": "Reference lines", "menu.window": "Window", "menu.window.resources": "Resources", "menu.window.settings": "Settings", "menu.window.drawingLevels": "Drawing Levels (Window)", "menu.window.layerSettings": "Layer Settings (active layer)", "menu.window.contextImport": "Import Location", // Native macOS system menu bar (appMenu.ts) — separate namespace since it // also shows File/Export/Transform, unlike the in-app AppMenuBar. "menu.native.file": "File", "menu.native.open": "Open…", "menu.native.saveAs": "Save As…", "menu.native.import": "Import…", "menu.native.export": "Export", "menu.native.exportSchedule": "Schedule (CSV)", "menu.native.edit": "Edit", "menu.native.move": "Move", "menu.native.mirror": "Mirror", "menu.native.rotate": "Rotate", "menu.native.view": "View", "menu.native.window": "Window", "menu.native.panels": "Panels", "menu.native.about": "About Dossier", "menu.native.quit": "Quit", // Layout menu. "layout.title": "Workspace", "layout.placeholder": "Workspace …", "layout.saveCurrent": "+ Save current …", "layout.loadGroup": "Load", "layout.deleteGroup": "Delete", "layout.savePrompt": "Save workspace as:", // Visibility combinations (topbar). "combo.layers": "Layer comb.", "combo.drawings": "Drawing comb.", "combo.placeholder": "Combination …", "combo.saveCurrent": "+ Save current …", "combo.loadGroup": "Load", "combo.deleteGroup": "Delete", "combo.layers.title": "Layer combinations", "combo.drawings.title": "Drawing combinations", "combo.layers.savePrompt": "Save layer combination as:", "combo.drawings.savePrompt": "Save drawing combination as:", // Drawing tools (topbar toolbar + status hints). "tool.group": "Tools", "tool.select": "Select", "tool.wall": "Wall", "tool.ceiling": "Ceiling", "tool.window": "Window", "tool.door": "Door", "tool.stair": "Stair", "tool.line": "Line", "tool.polyline": "Polyline", "tool.rect": "Rectangle", "tool.circle": "Circle", "tool.circle.hint": "Circle: set center, then radius", "tool.arc": "Arc", "tool.arc.hint": "Arc: center, start point, then end point (CCW)", "tool.text": "Text", "tool.text.hint": "Text: set anchor point, then type the text", "tool.textbox": "Text column", "tool.textbox.hint": "Text column: anchor, drag column width, then type the text", // Ribbon top bar (tabs + groups) "ribbon.tab.2d": "2D", "ribbon.tab.3d": "3D", "ribbon.tab.bim": "BIM", "ribbon.tab.views": "Views", "ribbon.tab.custom": "Custom", "ribbon.group.draw": "Draw", "ribbon.group.modify": "Modify", "ribbon.group.components": "Components", "ribbon.group.sections": "Sections", "ribbon.group.custom": "Custom bar", "tools.view.label": "Display", "tools.view.list": "List", "tools.view.icons": "Icons", "tools.cat.2d": "2D", "tools.cat.3d": "3D", "tools.cat.edit": "Modify", "ribbon.custom.add": "+ Add", "ribbon.custom.empty": "Pick elements via “+ Add”", "ribbon.empty": "No tools in this tab yet", "tool.select.hint": "Select — click/drag elements", "tool.window.hint": "Window: pick a wall, then set the position", "tool.door.hint": "Door: pick a wall, then set the position", "tool.stair.hint": "Stair: set start point, then run direction/end", "tool.room": "Room", "tool.room.hint": "Room: click inside an enclosed area (or draw an outline)", "tool.wall.firstPoint": "Wall: set first axis point", "tool.wall.nextPoint": "Wall: next point — double/right-click to finish", "tool.ceiling.firstPoint": "Ceiling: set first outline point", "tool.ceiling.nextPoint": "Ceiling: next point — click start to close, Enter finishes", "tool.line.firstPoint": "Line: set start point", "tool.line.secondPoint": "Line: set end point", "tool.polyline.firstPoint": "Polyline: set first point", "tool.polyline.nextPoint": "Polyline: next point — click start to close, double-click to finish", "tool.rect.firstCorner": "Rectangle: set first corner", "tool.rect.secondCorner": "Rectangle: set opposite corner", "tool.wallType": "Wall type", "tool.ceilingType": "Ceiling type", "tool.layer": "Layer", "tool.layer.hint": "Active layer — everything drawn goes onto this category", "tool.floorOnlyDisabled": "Walls can only be drawn on a floor", "tool.snap": "Snap", "tool.snap.hint": "Snap to endpoints/grid; Shift = ortho, Ctrl = snap off", "snap.enabled": "Snap on", "snap.endpoint": "Endpoint", "snap.midpoint": "Midpoint", "snap.intersection": "Intersection", "snap.onEdge": "On edge (perp.)", "snap.grid": "Grid", "snap.ortho": "Ortho (Shift)", "snap.gridSize": "Grid size (m)", "snap.angleStep": "Angle step", "snap.commonAngles": "Common angles", "snap.commonAngleTolerance": "Angle tolerance (°)", // Transform (move/mirror/rotate) + mode bar. "transform.bar": "Transform", "transform.cancel": "Cancel (Esc)", "transform.countPrompt": "Number of copies:", "transform.move": "Move (M)", "transform.mirror": "Mirror (S)", "transform.rotate": "Rotate (D)", "transform.mode.move": "Move", "transform.mode.copy": "Copy", "transform.mode.array": "N copies", "transform.mode.distribute": "Distribute", "transform.hint.move.0": "Click base point", "transform.hint.move.1": "Click destination point", "transform.hint.rotate.0": "Click rotation centre", "transform.hint.rotate.1": "Click reference point (start angle)", "transform.hint.rotate.2": "Click target angle", "transform.hint.mirror.0": "First point of mirror axis", "transform.hint.mirror.1": "Second point of mirror axis", // Line display (Display/Print). "topbar.lineModeGroup": "Line display", "topbar.lineMode.display": "Display", "topbar.lineMode.print": "Print", "topbar.lineMode.display.hint": "Display: all lines as constant hairlines (calm editing)", "topbar.lineMode.print.hint": "Print: real mm line weights (paper/print look)", // Status bar. "status.selection": "Selection", "status.selectionN": "Selection: {n} {noun}", "status.wall": "wall", "status.walls": "walls", "status.xy": "X/Y", "status.unit": "Unit", "status.scale": "Scale", "status.zoom": "Zoom", "status.referenceLines": "Axes", "status.referenceLines.hint": "Show/hide reference lines (wall axes)", "status.referenceLines.hintDisabled": "Reference lines apply in the plan", "status.floor": "Floor", "status.layer": "Layer", "status.none": "—", "status.renderer": "Renderer", "status.rendererWebgl": "WebGL2", "status.rendererWasm": "Nordstern", "status.rendererWasmUnavailable": "WebGPU unavailable", // Document tabs (drawings/sheets). "tabs.drawings": "Drawings", // Navigator panels. "nav.drawingLevels": "Drawing levels", "nav.layers": "Layers", "nav.tools": "Tools", "nav.attributes": "Attributes", "nav.objectInfo": "Object Info", // Attribute-Palette (AttributesPanel) "attr.title": "Attributes", "attr.empty": "No selection", "attr.newComponent": "New component", "attr.stroke": "Pen", "attr.color": "Color", "attr.weight": "Line weight (mm)", "attr.lineStyle": "Line style", "attr.lineStyle.none": "Default", "attr.fill": "Fill", "attr.fillColor": "Fill color", "attr.clearFill": "Remove fill color", "attr.pickColor": "Choose color", "attr.foreground": "Foreground", "attr.background": "Background", "attr.bySystem": "By system", "attr.hatch": "Hatch", "attr.none": "none", "attr.source.layer": "By layer", "attr.source.object": "By component", "attr.source.custom": "Custom", "attr.size": "Size", "attr.width": "Width", "attr.height": "Height", // Objekt-Info-Palette (ObjectInfoPanel) "objinfo.title": "Object Info", "objinfo.empty": "No object selected", "objinfo.category": "Class", "objinfo.level": "Layer", "objinfo.refpoint": "Reference point", "objinfo.setRefpoint": "Set reference point", "objinfo.x": "X", "objinfo.y": "Y", "objinfo.z": "Z", "objinfo.zHint": "2D layer – elements have no height", "objinfo.dimensions": "Dimensions", "objinfo.width": "Width", "objinfo.height": "Height", "objinfo.type": "Type", "objinfo.kind.wall": "Wall", "objinfo.kind.ceiling": "Ceiling", "objinfo.kind.drawing2d": "2D object", "objinfo.kind.door": "Door", "objinfo.kind.opening": "Opening", "objinfo.kind.stair": "Stair", "objinfo.kind.room": "Room", "objinfo.kind.extrudedSolid": "Extrusion", "objinfo.kind.column": "Column", "objinfo.kind.roof": "Roof", "objinfo.kind.contextObject": "Context object", // ── Context object attributes (object info panel) ─────────────────────── "objinfo.contextObject.section": "Georeferencing", "objinfo.contextObject.type": "Type", "objinfo.contextObject.type.importedMesh": "Imported mesh", "objinfo.contextObject.type.terrainMesh": "Terrain", "objinfo.contextObject.type.contourSet": "Contours", "objinfo.contextObject.lv95E": "LV95 East (E)", "objinfo.contextObject.lv95N": "LV95 North (N)", "objinfo.contextObject.noAnchor": "No location reference in project", // ── Roof attributes (object info panel) ───────────────────────────────── "objinfo.roof.section": "Roof", "objinfo.roof.shape": "Roof shape", "objinfo.roof.shape.flach": "Flat roof", "objinfo.roof.shape.pult": "Mono-pitch roof", "objinfo.roof.shape.sattel": "Gable roof", "objinfo.roof.shape.walm": "Hip roof", "objinfo.roof.shape.mansarde": "Mansard roof", "objinfo.roof.shape.zelt": "Pyramid roof", "objinfo.roof.ridgeAxis": "Ridge direction", "objinfo.roof.ridgeAxis.x": "along X", "objinfo.roof.ridgeAxis.y": "along Y", "objinfo.roof.pitch": "Pitch (°)", "objinfo.roof.pitchUpper": "Upper pitch (°)", "objinfo.roof.type": "Roof type", "objinfo.roof.type.single": "Single layer (thickness)", "objinfo.roof.mansardType": "Mansard type", "objinfo.roof.mansard.giebel": "Gable mansard", "objinfo.roof.mansard.walm": "Hip mansard", "objinfo.roof.mansard.zelt": "Pavilion mansard", "objinfo.roof.mansardKnee": "Knee position (% span)", "objinfo.roof.width": "Width (m)", "objinfo.roof.depth": "Depth (m)", "objinfo.roof.overhang": "Eaves overhang (m)", "objinfo.roof.overhangGable": "Rake overhang (m)", "objinfo.roof.thickness": "Roof thickness (m)", "objinfo.roof.baseElevation": "Eaves height (m)", "objinfo.roof.ridgeHeight": "Ridge height", "objinfo.roof.area": "Footprint area", // ── Column attributes (object info panel) ──────────────────────────────── "objinfo.column.section": "Column", "objinfo.column.profile": "Profile", "objinfo.column.profile.rect": "Rectangle", "objinfo.column.profile.round": "Round", "objinfo.column.width": "Width", "objinfo.column.depth": "Depth", "objinfo.column.radius": "Radius", "objinfo.column.height": "Height", "objinfo.column.rotation": "Rotation (°)", "objinfo.column.floor": "Floor", // ── Wall attributes (object info panel) ────────────────────────────────── "objinfo.wall.section": "Wall", "objinfo.wall.refLine": "Reference line", "objinfo.wall.refLine.left": "Exterior (left)", "objinfo.wall.refLine.center": "Center", "objinfo.wall.refLine.right": "Interior (right)", "objinfo.wall.refLine.joint": "Joint", "objinfo.wall.sliceTermination": "End at ceiling", "objinfo.wall.sliceTermination.both": "Off", "objinfo.wall.sliceTermination.below": "Below", "objinfo.wall.sliceTermination.above": "Above", "objinfo.wall.buildup": "Build-up", "objinfo.wall.single": "Solid", "objinfo.wall.multi": "Multi layer", "objinfo.wall.thickness": "Thickness", "objinfo.wall.preset": "Wall style", "objinfo.wall.presetLabel": "{name} · {thickness} m", "objinfo.wall.refFloor": "Reference floor", "objinfo.wall.linkAbove": "Bind to floor above", "objinfo.wall.bottom": "Bottom (UK)", "objinfo.wall.top": "Top (OK)", "objinfo.wall.anchorFloor": "Bound", "objinfo.wall.anchorCustom": "Custom", "objinfo.anchor.refFloor": "Reference storey", "objinfo.anchor.customHeight": "Custom height", "objinfo.wall.length": "Length", "objinfo.wall.volumeGross": "Gross", "objinfo.volume": "Volume", "objinfo.wall.height": "Height", "objinfo.wall.floorAboveNone": "No floor above", // ── Ceiling attributes (object info panel) ─────────────────────────────── "objinfo.ceiling.section": "Ceiling", "objinfo.ceiling.buildup": "Build-up", "objinfo.ceiling.thickness": "Thickness", "objinfo.ceiling.preset": "Ceiling style", "objinfo.ceiling.refFloor": "Reference floor", "objinfo.ceiling.top": "Top (OK)", "objinfo.ceiling.bottom": "Bottom (UK)", "objinfo.ceiling.height": "Thickness (OK−UK)", "objinfo.ceiling.openings": "Openings", "objinfo.ceiling.removeOpening": "Remove opening", "objinfo.ceiling.area": "Area", "objinfo.ceiling.anchorFloor": "Bound", "objinfo.ceiling.anchorCustom": "Custom", // ── Opening attributes (object info panel) ────────────────────────────── "objinfo.opening.section": "Opening", "objinfo.opening.type": "Type", "objinfo.opening.editType": "Settings …", // Window/door settings dialog (OpeningEditorDialog). "oed.title.window": "Window settings", "oed.title.door": "Door settings", "oed.style": "Style", "oed.saveStyle": "Save as style …", "oed.saveStyle.hint": "Store the current settings as a new, reusable style", "oed.saveStyle.prompt": "Name of the new style:", "oed.saveStyle.copySuffix": "(copy)", "oed.categories": "Categories", "oed.noStyle": "No style assigned — choose or save one via the style bar.", "oed.preview": "View", "oed.cat.basis": "Basics", "oed.cat.groesse": "Size/position", "oed.cat.rahmen": "Frame", "oed.cat.fluegel": "Sashes/muntins", "oed.cat.sonnenschutz": "Shading", "oed.cat.tuerblatt": "Leaf", "oed.f.kind": "Opening type", "oed.f.glazing": "Glazing", "oed.f.insetFace": "Position from", "oed.f.insetFromFace": "Distance from edge (m)", "oed.f.width": "Width (m)", "oed.f.height": "Height (m)", "oed.f.sillHeight": "Sill height (m)", "oed.f.position": "Position (m)", "oed.f.frameThickness": "Frame depth across (m)", "oed.f.frameDepth": "Frame depth (m)", "oed.f.frameWidth": "Frame face width (m)", "oed.f.transomHeight": "Transom height (m)", "oed.f.mullionRows": "Transom/muntin rows", "oed.f.mullionCols": "Muntin columns", "oed.f.sillLineFaces": "Top-/bottom-view line", "oed.f.sillLineView": "View direction", "oed.sillLine.off": "None", "oed.sillLine.beide": "Both", "oed.sillLine.auf": "Top view (from above)", "oed.sillLine.unter": "Bottom view (from below)", "oed.kind.dreh": "Casement", "oed.kind.kipp": "Tilt", "oed.kind.drehkipp": "Turn-tilt", "oed.kind.fest": "Fixed", "oed.kind.schiebe": "Sliding", "oed.glazing.1": "Single", "oed.glazing.2": "Double", "oed.glazing.3": "Triple", "oed.insetFace.aussen": "Outer face", "oed.insetFace.innen": "Inner face", "oed.fluegel.hint": "Sashes and posts from left to right. Opening type and hinge per sash.", "oed.fluegel.col.kind": "Type", "oed.fluegel.col.opening": "Opening", "oed.fluegel.col.hinge": "Hinge", "oed.fluegel.type.fluegel": "Sash", "oed.fluegel.type.pfosten": "Post", "oed.fluegel.remove": "Remove", "oed.hinge.left": "Left", "oed.hinge.right": "Right", "oed.shading.create": "Roller shutter / shading box", "oed.shading.kind": "Kind", "oed.shading.rollladen": "Roller shutter", "oed.shading.raffstore": "Venetian blind", "oed.shading.markise": "Awning", "oed.shading.boxHeight": "Box height (m)", "oed.shading.boxDepth": "Box depth (m)", "oed.door.leafCount": "Door leaves", "oed.door.leaf1": "Single leaf", "oed.door.leaf2": "Double leaf", "oed.door.leafStyle": "Leaf style", "oed.door.glatt": "Flush", "oed.door.kassette": "Panelled", "oed.door.glas": "Glass", "oed.door.wandoeffnung": "Wall opening", "objinfo.stair.type": "Type", "objinfo.type.none": "(no type)", "objinfo.opening.kind": "Type", "objinfo.opening.kind.window": "Window", "objinfo.opening.kind.door": "Door", "objinfo.opening.hostWall": "Host wall", "objinfo.opening.position": "Position (from wall start)", "objinfo.opening.width": "Width", "objinfo.opening.height": "Height", "objinfo.opening.sill": "Sill height", "objinfo.opening.swingAngle": "Swing angle", "objinfo.opening.hinge": "Hinge", "objinfo.opening.hinge.start": "Start", "objinfo.opening.hinge.end": "End", "objinfo.opening.swing": "Swing side", "objinfo.opening.swing.left": "Left", "objinfo.opening.swing.right": "Right", "objinfo.opening.dir": "Direction", "objinfo.opening.dir.in": "In", "objinfo.opening.dir.out": "Out", "objinfo.opening.bottom": "Bottom (UK)", "objinfo.opening.top": "Top (OK)", "objinfo.opening.wingCount": "Wings", "objinfo.opening.doorType": "Type", "objinfo.opening.doorType.normal": "Normal", "objinfo.opening.doorType.wandoeffnung": "Wall opening", "objinfo.opening.lintelLines": "Lintel lines", "objinfo.opening.lintelLines.keine": "None", "objinfo.opening.lintelLines.innen": "Inside", "objinfo.opening.lintelLines.aussen": "Outside", "objinfo.opening.lintelLines.beide": "Both", "objinfo.opening.frameLine": "Frame (cut)", "objinfo.opening.frameViewLine": "Frame (view)", "objinfo.opening.sashLine": "Window (sash/muntins)", "objinfo.opening.sillLine": "Sill", "objinfo.lineWeight": "Line weight (mm)", "objinfo.stair.section": "Stair", "objinfo.stair.shape": "Shape", "objinfo.stair.shape.straight": "Straight", "objinfo.stair.shape.L": "L-shaped", "objinfo.stair.shape.spiral": "Spiral", "objinfo.stair.width": "Run width", "objinfo.stair.steps": "Step count", "objinfo.stair.rise": "Total rise", "objinfo.stair.riser": "Riser height", "objinfo.stair.tread": "Tread depth", "objinfo.stair.direction": "Run direction", "objinfo.stair.direction.up": "Upwards", "objinfo.stair.direction.down": "Downwards", "objinfo.stair.arrow": "Arrow", "objinfo.stair.arrow.line": "Open", "objinfo.stair.arrow.filled": "Filled", "objinfo.stair.refFloor": "Reference floor", "objinfo.stair.bottom": "Bottom (UK)", "objinfo.stair.top": "Top (OK)", "objinfo.stair.referenz": "Reference", "objinfo.stair.referenz.links": "Left", "objinfo.stair.referenz.mitte": "Centre", "objinfo.stair.referenz.rechts": "Right", // ── Room attributes (object info panel) ────────────────────────────────── "objinfo.room.section": "Room", "objinfo.room.name": "Name", "objinfo.room.sia": "SIA category", "objinfo.room.area": "Area", "objinfo.room.perimeter": "Perimeter", "objinfo.room.refFloor": "Reference floor", "objinfo.room.editStamp": "Edit stamp …", // ── Extruded solid attributes (truck integration, object info panel) ──── "objinfo.sectionLine.section": "Section line", "objinfo.sectionLine.kind.section": "Section", "objinfo.sectionLine.kind.elevation": "Elevation", "objinfo.sectionLine.name": "Name", "objinfo.sectionLine.flip": "Flip view direction", "objinfo.sectionLine.cut3d": "Cut in 3D", "objinfo.sectionLine.startX": "Start X", "objinfo.sectionLine.startY": "Start Y", "objinfo.sectionLine.endX": "End X", "objinfo.sectionLine.endY": "End Y", "objinfo.sectionLine.depth": "Section depth (m)", "objinfo.sectionLine.hiddenLines": "Hidden lines", "objinfo.sectionLine.depthHint": "empty = unlimited", "objinfo.sectionLine.delete": "Delete section line", "objinfo.extrudedSolid.section": "Extrusion", "objinfo.extrudedSolid.height": "Height", "objinfo.extrudedSolid.taper": "Taper", "objinfo.extrudedSolid.area": "Footprint area", "objinfo.extrudedSolid.floor": "Floor", "objinfo.rotate": "Rotate", "objinfo.drawing.length": "Length", "objinfo.drawing.radius": "Radius", "levels.addFloor": "+ Floor", "levels.addSection": "+ Section", "levels.addElevation": "+ Elevation", "levels.addDrawing": "+ Drawing", "layers.addCategory": "+ Layer", // Drawing levels: category titles (collapsible groups). "levelCat.floor": "Floors", "levelCat.section": "Sections", "levelCat.elevation": "Elevations", "levelCat.drawing": "2D drawings", "levelCat.collapse": "Collapse/expand category", "nav.visibility": "Visibility", "nav.hide": "Hide", "nav.show": "Show", "nav.categoryVisible": "{name} visible", "nav.categorySelect": "Make {name} the active layer (drawing target)", "nav.categorySettings": "Layer settings for {name}", "nav.drawingLevelsWindow": "Open drawing levels as its own window", // Badges. "badge.floor": "Floor", "badge.section": "Section", "badge.elevation": "Elevation", "badge.drawing": "Drawing", // Display mode select. "display.title": "Display mode", "display.all_force": "Show all", "display.all": "Selected", "display.active": "Active only", "display.grey": "Others grey", "display.grey_locked": "Others grey & locked", "display.locked": "Others locked", // Dock. "dock.resize": "Adjust width", "dock.dock": "Dock", "dock.close": "Close", "dock.float": "Float", "dock.redock": "Dock", "dock.resizePanel": "Resize", "dock.dropLeft": "Dock left", "dock.dropRight": "Dock right", // Context menu. "ctx.layerSettings": "Layer settings…", "ctx.addSubLayer": "Add sub-layer…", "ctx.assignSelection": "Assign selection here", "ctx.assignSelection.disabled": "No wall selected — first click a wall in the plan/3D.", "ctx.duplicate": "Duplicate", "ctx.copyProps": "Copy properties", "ctx.pasteProps": "Paste properties", "ctx.pasteProps.disabled": "Clipboard empty — first use “Copy properties”.", "ctx.delete": "Delete", "ctx.delete.lastLayer": "The last layer cannot be deleted.", "ctx.delete.lastLevel": "The last drawing level cannot be deleted.", "ctx.levelSettings": "Settings…", "ctx.fitSelection": "Fit to selection", "ctx.clearSelection": "Clear selection", "ctx.fit": "Fit view", "ctx.union": "Union", "ctx.subtract": "Subtract", "ctx.intersect": "Intersect", "ctx.boolean.disabled": "Select at least two closed areas (rectangle or closed polyline).", "ctx.arrange.front": "Bring to front", "ctx.arrange.forward": "Bring forward", "ctx.arrange.backward": "Send backward", "ctx.arrange.back": "Send to back", "ctx.arrange.disabled": "Select at least one 2D element.", "ctx.noWallHit": "No wall hit", "ctx.noWallHit.hint": "Right-clicking a wall selects it and shows wall actions.", "ctx.title.level": "Drawing level", "ctx.title.wall": "Wall", "ctx.title.view": "View", // Inline editor. "editor.close": "Close", "editor.layerTitle": "Layer {code}", "editor.name": "Name", "editor.color": "Color", "editor.lineWeight": "Line weight", "editor.hatch": "Hatch", "editor.floorHeight": "Floor height", "editor.cutHeight": "Cut height", "editor.unit.mm": "mm", "editor.unit.m": "m", "editor.noHeightDrawing": "Drawings have no floor/cut height.", "editor.noHeightSection": "Sections/elevations have no floor/cut height.", // Main content. "content.perspektiveTitle": "Perspective · {name}", "content.grundrissTitle": "Plan · {name}", "content.grundrissLegend": "Plan · {name} · Cut height {cutHeight}", "content.drawingTitle": "Drawing · {name}", "content.drawingCanvas": "Drawing canvas", "content.drawingLegend": "Free 2D drawing", "content.sectionTitle": "{kind} · {name}", "section.loading": "Computing {kind} …", "section.empty": "{kind} — no section line set in the plan", "section.error": "{kind} — computation failed (rebuild render3d WASM?)", "section.legend": "{kind} · projection derived from the model", "elevation.shadows": "Shadows", "elevation.shadows.hint": "Toggle 45° cast shadows of overhanging elements in the elevation", "props.floorHeight": "Floor height", "props.cutHeight": "Cut height", "props.okff": "FFL", "props.okffValue": "+{value} m", // Stub. "stub.section": "Section", "stub.elevation": "Elevation", "stub.note": "{kind} — derived projection follows in a later phase", // Default names. "default.floorName": "Floor {n}", "default.sectionName": "Section {n}", "default.elevationName": "Elevation {n}", "default.drawingName": "Drawing {n}", "default.categoryName": "New layer", "default.subCategoryName": "New sub-layer", "default.componentName": "New component", "default.hatchName": "New hatch", "default.lineStyleName": "New line style", "default.hatchNone": "None", "default.copySuffixLevel": "{name} copy", "default.copySuffixLayer": "{name} COPY", "default.wallTypeSingle": "Wall {thickness} m", "default.ceilingTypeSingle": "Ceiling {thickness} m", "default.wallTypeName": "New wall type", "default.ceilingTypeName": "New ceiling type", "default.roofTypeName": "New roof type", "default.doorTypeName": "New door type", "default.windowTypeName": "New window type", "default.stairTypeName": "New stair type", // Alerts. "alert.layerInUse": "Layer “{code} {name}” is used by components and cannot be deleted.", "alert.componentInUse": "Component “{name}” is used by a wall type and cannot be deleted.", "alert.hatchInUse": "Hatch “{name}” is used by a component and cannot be deleted.", "alert.lineStyleInUse": "Line style “{name}” is used by a hatch and cannot be deleted.", "alert.wallTypeInUse": "Wall type “{name}” is used by a wall and cannot be deleted.", "alert.ceilingTypeInUse": "Ceiling type “{name}” is used by a ceiling and cannot be deleted.", "alert.roofTypeInUse": "Roof type “{name}” is used by a roof and cannot be deleted.", "alert.doorTypeInUse": "Door type “{name}” is used by a door and cannot be deleted.", "alert.windowTypeInUse": "Window type “{name}” is used by a window and cannot be deleted.", "alert.stairTypeInUse": "Stair type “{name}” is used by a stair and cannot be deleted.", // Resource manager. "resources.title": "Resources", "resources.label": "Resource manager", "resources.close": "Close", "resources.loading": "Connecting to the main window…", "resources.tab.components": "Components", "resources.tab.hatches": "Hatches", "resources.tab.lines": "Lines", "resources.tab.wallStyles": "Wall styles", "resources.tab.ceilingStyles": "Ceiling styles", "resources.tab.roofStyles": "Roof types", "resources.tab.doorStyles": "Door types", "resources.tab.windowStyles": "Window types", "resources.tab.stairStyles": "Stair types", "resources.tab.materials": "Materials", "resources.tab.overrides": "Overrides", // Graphic overrides (rule engine). "resources.overrides.hint": "Rules override color/lineweight/line style at render time (element data stays untouched). Order = priority: per field, the topmost active rule wins.", "resources.overrides.empty": "No override rules yet.", "resources.overrides.placeholder": "Rule", "resources.overrides.defaultName": "New rule", "resources.overrides.delete": "Delete rule", "resources.overrides.moveUp": "Move rule up (higher priority)", "resources.overrides.moveDown": "Move rule down (lower priority)", "resources.overrides.enabled": "Rule active", "resources.overrides.condition": "Condition", "resources.overrides.condType": "Criterion", "resources.overrides.condType.layer": "Layer (name/code)", "resources.overrides.condType.object": "Object name", "resources.overrides.operator": "Operator", "resources.overrides.op.equals": "equals", "resources.overrides.op.contains": "contains", "resources.overrides.op.startsWith": "starts with", "resources.overrides.op.notEquals": "not equal to", "resources.overrides.value": "Value", "resources.overrides.value.placeholder": "e.g. Walls or 20", "resources.overrides.actions": "Actions", "resources.overrides.action.color": "Color", "resources.overrides.action.lineweight": "Lineweight (mm)", "resources.overrides.action.linetype": "Line style", "resources.overrides.linetype.none": "— (unchanged)", "resources.wallStyles.hint": "Per wall type, the layer joints (between adjacent layers) as a selectable line style. Unassigned: 0.02 mm hairline.", "resources.wallStyles.empty": "No wall types yet.", "resources.ceilingStyles.hint": "Per ceiling type (horizontal build-up, top → bottom), the layer joints as a selectable line style. Unassigned: 0.02 mm hairline.", "resources.ceilingStyles.empty": "No ceiling types yet.", "resources.wallStyles.placeholder": "Wall type", "resources.ceilingStyles.placeholder": "Ceiling type", "resources.roofStyles.hint": "Per roof type (layer build-up outside/covering → inside/lining) the layer joints as a selectable line style. Without assignment: hairline 0.02 mm.", "resources.roofStyles.empty": "No roof types yet.", "resources.roofStyles.placeholder": "Roof type", // Component types (door/window/stair) — form-based libraries. "resources.doorTypes.hint": "Reusable door types with construction, leaf style and default dimensions for newly placed doors.", "resources.doorTypes.empty": "No door types yet.", "resources.doorTypes.placeholder": "Door type", "resources.windowTypes.hint": "Reusable window types with opening style, glazing and default dimensions for newly placed windows.", "resources.windowTypes.empty": "No window types yet.", "resources.windowTypes.placeholder": "Window type", "resources.stairTypes.hint": "Reusable stair types with structure, tread style and railing for newly placed stairs.", "resources.stairTypes.empty": "No stair types yet.", "resources.stairTypes.placeholder": "Stair type", "resources.delete.doorType": "Delete door type “{name}”", "resources.delete.windowType": "Delete window type “{name}”", "resources.delete.stairType": "Delete stair type “{name}”", "resources.field.doorKind": "Construction", "resources.field.leafCount": "Leaf count", "resources.field.leafStyle": "Leaf style", "resources.field.glazingRatio": "Glazing ratio", "resources.field.frameThickness": "Frame thickness (m)", "resources.field.frameDepth": "Frame depth (m)", "resources.field.defaultWidth": "Clear width (m)", "resources.field.defaultHeight": "Clear height (m)", "resources.field.threshold": "Threshold", "resources.field.frameKind": "Frame type", "resources.field.frameWidth": "Frame width (m)", "resources.field.insetFromFace": "Layer inset (m)", "resources.field.insetFace": "Inset from face", "resources.field.innerLayerRecess": "Reveal recess (innermost layer)", "resources.field.innerLayerRecess.hint": "The innermost wall layer (usually plasterboard/wood lining) steps back all around this window's reveal by its own thickness, instead of finishing flush with the other layers — changes the 3D wall geometry, not just the frame position.", "resources.field.transomHeight": "Transom height (m)", "resources.field.mullionRows": "Transom rows", "resources.frameKind.zarge": "Lining", "resources.frameKind.blockrahmen": "Block frame", "resources.insetFace.aussen": "Outer", "resources.insetFace.innen": "Inner", "resources.field.windowKind": "Opening style", "resources.field.wingCount": "Wing count", "resources.field.glazing": "Glazing", "resources.field.defaultSillHeight": "Sill height (m)", "resources.field.sillBoard": "Sill board", "resources.field.structure": "Structure", "resources.field.closedRisers": "Closed risers", "resources.field.treadThickness": "Tread thickness (m)", "resources.field.nosing": "Nosing (m)", "resources.field.railing": "Railing", "resources.field.stairWidth": "Run width (m)", "resources.doorKind.dreh": "Hinged", "resources.doorKind.schiebe": "Sliding", "resources.doorKind.wandoeffnung": "Wall opening", "resources.leafCount.1": "Single-leaf", "resources.leafCount.2": "Double-leaf", "resources.leafStyle.glatt": "Flush", "resources.leafStyle.kassette": "Panelled", "resources.leafStyle.glas": "Glazed", "resources.windowKind.dreh": "Turn", "resources.windowKind.kipp": "Tilt", "resources.windowKind.drehkipp": "Turn-tilt", "resources.windowKind.fest": "Fixed", "resources.windowKind.schiebe": "Sliding", "resources.glazing.einfach": "Single", "resources.glazing.zweifach": "Double", "resources.glazing.dreifach": "Triple", "resources.sillBoard.keine": "None", "resources.sillBoard.innen": "Inside", "resources.sillBoard.aussen": "Outside", "resources.sillBoard.beide": "Both", "resources.structure.massiv": "Solid", "resources.structure.beton": "Concrete (waist slab)", "resources.structure.wange": "String", "resources.structure.aufgesattelt": "Saddled", "resources.structure.spindel": "Spiral", "resources.railing.keine": "None", "resources.railing.links": "Left", "resources.railing.rechts": "Right", "resources.railing.beide": "Both", "resources.col.layer": "Layer", "resources.col.component": "Component", "resources.col.thickness": "Thickness (mm)", "resources.col.joint": "Joint", "resources.joint.default": "— (hairline)", "resources.layer.add": "Add layer", "resources.layer.remove": "Remove layer", "resources.layer.moveUp": "Move layer up", "resources.layer.moveDown": "Move layer down", "resources.materials.hint": "Sphere preview of the built-in PBR material library — browse and compare. Assign to a component still via its “Material …” column.", "resources.materials.searchPlaceholder": "Search materials …", "resources.materials.categoryLabel": "Category", "resources.materials.categoryAll": "All", "resources.materials.selected": "Selected: {name} ({category})", "resources.materials.empty": "No materials found.", "resources.materials.count": "{shown} of {total} materials", "resources.add": "New", "resources.import.lin": "⤓ Import .lin", "resources.import.pat": "⤓ Import .pat", "resources.components.hint": "Higher priority runs through at the join (intersects first); lower butts against the side.", "resources.components.empty": "No components yet.", "resources.components.placeholder": "Component", "resources.col.name": "Name", "resources.col.color": "Color", "resources.col.abbrev": "Code", "resources.col.abbrev.hint": "Short code for wall-type dropdowns (e.g. «CON», «BRK»)", "resources.col.abbrev.placeholder": "e.g. CON", "resources.col.hatch": "Section hatch", "resources.col.viewHatch": "View hatch", "resources.viewHatch.none": "(none)", "resources.col.prio": "Prio", "resources.col.prio.hint": "Higher priority runs through at the join", "resources.col.texture": "Texture", "resources.col.material": "Material", "resources.col.foreground": "Foreground", "resources.col.foreground.hint": "Color of the pattern/hatch lines (foreground)", "resources.col.background": "Background", "resources.col.background.hint": "Fill color (poché/background)", "resources.delete.component": "Delete component “{name}”", // 3D material (PBR) — built-in library + upload. "material.assign": "Material …", "material.none": "— none —", "material.dialog.title": "Assign 3D material", "material.dialog.hint": "Pick a built-in material or upload your own textures. Applies in the 3D “Textured” mode.", "material.library": "Library (ambientCG, CC0)", "material.upload": "Own textures", "material.upload.hint": "Upload images as maps (at least color). Size = physical tile size in meters.", "material.upload.color": "Color (albedo)", "material.upload.normal": "Normal", "material.upload.roughness": "Roughness", "material.upload.displacement": "Height", "material.upload.ao": "AO", "material.upload.choose": "Image …", "material.upload.apply": "Assign", "material.size": "Tile size (m)", "material.current": "Current", "material.clear": "Remove material", "material.close": "Close", "material.uploaded": "Uploaded", // ── Browse ambientCG library (live) ────────────────────────────────────── "material.browse": "Browse library", "material.browse.starter": "Quick pick", "material.browse.hint": "Search the full CC0 ambientCG library (~2000+ materials). One click downloads the textures at runtime and assigns them.", "material.browse.search": "Search …", "material.browse.searchPlaceholder": "e.g. wood, concrete, tiles …", "material.browse.category.all": "All categories", "material.browse.resolution": "Resolution", "material.browse.more": "Load more", "material.browse.loading": "Loading …", "material.browse.downloading": "Downloading texture …", "material.browse.empty": "No materials found.", "material.browse.count": "{shown} of {total}", "material.browse.error": "Library unreachable. A proxy for ambientCG is required at runtime (dev: Vite proxy active; prod: set VITE_AMBIENTCG_PROXY).", "material.browse.downloadError": "Download failed (check CORS/proxy).", "resources.hatches.hint": "Pattern, scale and angle drive the section hatch; the line style sets the weight of the pattern lines.", "resources.hatches.empty": "No hatches yet.", "resources.hatches.placeholder": "Hatch", "resources.col.pattern": "Pattern", "resources.col.scale": "Scale", "resources.col.angle": "Angle °", "resources.col.relativeToWall": "Wall-rel.", "resources.col.relativeToWall.hint": "Angle relative to the wall axis — the pattern rotates with the wall", "resources.col.lineStyle": "Line style", "resources.lineStyle.none": "— none —", "resources.delete.hatch": "Delete hatch “{name}”", "resources.delete.wallType": "Delete wall type “{name}”", "resources.delete.ceilingType": "Delete ceiling type “{name}”", "resources.delete.roofType": "Delete roof type “{name}”", // Hatch/line type (master-detail editor). "resources.field.type": "Type", "resources.field.lines": "Lines", "resources.field.image": "Image", "resources.field.scaleX": "Scale X", "resources.field.scaleY": "Scale Y", "resources.field.rotation": "Rotation °", "resources.field.amplitude": "Amplitude", "resources.field.wavelength": "Wavelength", "resources.field.density": "Density", "resources.field.lengthMin": "Length min (mm)", "resources.field.lengthMax": "Length max (mm)", "resources.random.reroll": "Re-roll", "resources.stroke.solid": "Solid", "resources.stroke.dash": "Dash", "resources.dash.segments": "Segments", "resources.dash.hint": "Ordered, looping sequence of dash/dot/gap (mm). The last gap is the spacing to the next loop.", "resources.dash.add": "Segment", "resources.dash.remove": "Remove segment", "resources.linePreset.label": "Pattern", "resources.linePreset.solid": "Solid", "resources.linePreset.dash": "Dashed", "resources.linePreset.dot": "Dotted", "resources.linePreset.dashDot": "Dash-dot", "resources.seg.dash": "Dash", "resources.seg.dot": "Dot", "resources.seg.gap": "Gap", "resources.seg.addDash": "+ Dash", "resources.seg.addDot": "+ Dot", "resources.seg.addGap": "+ Gap", "resources.hatchKind.vector": "Vector", "resources.hatchKind.image": "Image", "resources.lines.parallel": "Parallel", "resources.lines.random": "Random", "resources.lineKind.dash": "Dash", "resources.lineKind.zigzag": "Zigzag", "resources.lineKind.custom": "Motif", "resources.field.motif": "Motif", "resources.motif.length": "Length (mm)", "resources.motif.hint": "Click = add point · drag = move · double-click = remove. The motif repeats along the line.", "pattern.none": "None", "pattern.solid": "Solid", "pattern.insulation": "Insulation", "pattern.diagonal": "Diagonal", "pattern.crosshatch": "Crosshatch", "resources.lines.hint": "Line weight in millimetres (paper space). Stroke: solid, dashed or dotted.", "resources.lines.empty": "No line styles yet.", "resources.lines.placeholder": "Line style", "resources.col.weight": "Weight (mm)", "resources.col.stroke": "Stroke", "resources.col.preview": "Preview", "resources.delete.lineStyle": "Delete line style “{name}”", "resources.texture.empty": "—", "dash.solid": "Solid", "dash.dashed": "Dashed", "dash.dotted": "Dotted", // Command line / commands (Rhino-style command system). "cmd.aria": "Command line", "cmd.idle.prompt": "Command:", "cmd.idle.placeholder": "Type a command … (Tab)", "cmd.wall.label": "Wall", "cmd.wall.start": "Start of wall:", "cmd.wall.next": "Next point:", "cmd.ceiling.label": "Ceiling", "cmd.ceiling.start": "First outline point of ceiling:", "cmd.ceiling.next": "Next point ( Close ):", "cmd.roof.label": "Roof", "cmd.roof.start": "First roof corner:", "cmd.roof.corner": "Opposite corner:", "cmd.ceilingOpening.label": "Slab opening", "cmd.ceilingOpening.start": "First corner of the opening (inside a slab):", "cmd.ceilingOpening.corner": "Opposite corner:", "cmd.roof.shape.sattel": "Gable roof", "cmd.roof.shape.walm": "Hip roof", "cmd.roof.shape.pult": "Mono-pitch roof", "cmd.roof.shape.mansarde": "Mansard roof", "cmd.roof.shape.zelt": "Pyramid roof", "cmd.roof.shape.flach": "Flat roof", "cmd.sectionline.label": "Section line", "cmd.sectionline.start": "Section start point:", "cmd.sectionline.end": "Section end point:", "cmd.sectionline.kind.section": "Section", "cmd.sectionline.kind.elevation": "Elevation", "cmd.sectionline.newSection": "Section {letter}", "cmd.sectionline.newElevation": "Elevation {letter}", "cmd.opening.label": "Opening", "cmd.opening.windowLabel": "Window", "cmd.opening.doorLabel": "Door", "cmd.opening.wall": "Pick a wall for the opening:", "cmd.opening.pos": "Position along the wall ( type distance ):", "cmd.opening.kind": "Type", "cmd.opening.hinge": "Hinge", "cmd.opening.side": "Side", "cmd.opening.dir": "Direction", "cmd.opening.sillField": "Sill", "cmd.opening.swingField": "Angle", "cmd.column.label": "Column", "cmd.column.place": "Place column:", "cmd.column.profile": "Profile", "cmd.stair.label": "Stair", "cmd.stair.start": "Start point of the stair:", "cmd.stair.run": "Run direction / end ( Shape · Up/Down ):", "cmd.stair.shape": "Shape", "cmd.stair.updown": "Up/Down", "cmd.stair.stepsField": "Steps", "cmd.stair.riseField": "Rise", "cmd.stair.referenz": "Reference", "cmd.stair.treadMode": "Tread", "cmd.stair.auftrittField": "Tread depth", "cmd.line.label": "Line", "cmd.line.start": "Start of line:", "cmd.line.end": "End of line:", "cmd.polyline.label": "Polyline", "cmd.polyline.start": "Start point:", "cmd.polyline.next": "Next point:", "cmd.polyline.close": "Close", "cmd.polyline.undo": "Undo", "cmd.polyline.closedOpt": "Closed", "cmd.rect.label": "Rectangle", "cmd.rect.first": "First corner:", "cmd.rect.second": "Opposite corner:", "cmd.rect.method": "Method", "cmd.rect.center": "Center:", "cmd.rect.corner": "Corner:", "cmd.rect.baseEnd": "Second corner (base edge):", "cmd.rect.rise": "Height:", "cmd.circle.label": "Circle", "cmd.circle.center": "Center:", "cmd.circle.radius": "Radius:", "cmd.arc.label": "Arc", "cmd.arc.center": "Center:", "cmd.arc.start": "Start point (radius + start angle):", "cmd.arc.end": "End point (end angle):", "cmd.text.label": "Text", "cmd.text.point": "Anchor point:", "cmd.text.enter": "Enter text:", "cmd.textbox.label": "Text column", "cmd.textbox.point": "Anchor point:", "cmd.textbox.width": "Column width (second point):", "cmd.textbox.enter": "Enter text:", "cmd.move.label": "Move", "cmd.move.base": "Base point:", "cmd.move.target": "Target point:", "cmd.move.empty": "Nothing selected (select objects first).", "cmd.rotate.label": "Rotate", "cmd.measure.label": "Measure", "cmd.measure.start": "Measure from:", "cmd.measure.to": "to (distance · angle):", "cmd.measure.next": "next point (right-click = new path):", "objinfo.measure.title": "Measurement", "objinfo.measure.segment": "Segment", "objinfo.measure.total": "Total length", "objinfo.measure.area": "Area", "objinfo.measure.angle": "Angle", "objinfo.measure.hint": "Click = point · right-click = new path · Esc = end", "transform.needSelection": "Select objects first, then rotate.", "cmd.mirror.label": "Mirror", "cmd.mirror.first": "First point of mirror axis:", "cmd.mirror.second": "Second point of mirror axis:", "cmd.mirror.empty": "Nothing selected (select objects first).", "cmd.join.prompt": "Joining selected elements …", "cmd.copy.label": "Copy", "cmd.copy.base": "Base point:", "cmd.copy.target": "Target point (Enter to finish):", "cmd.copy.empty": "Nothing selected (select objects first).", "cmd.offset.label": "Offset", "cmd.offset.pick": "Select curve:", "cmd.offset.side": "Side or distance:", "cmd.extrude.label": "Extrude", "cmd.extrude.pick": "Select closed profile:", "cmd.extrude.height": "Height:", "cmd.extrude.taper": "Taper (0–1, 1=point):", // Trim (quick-trim): click the part to cut away; repeats until Esc. "cmd.trim.label": "Trim", "cmd.trim.pick": "Click the part to trim away (Esc to finish):", // Edit tools Split / Join / Delete segment (keyboard: Ctrl+S / Ctrl+J / // Alt+Click). Labels for the command line / menus. "edit.split.label": "Split", "edit.join.label": "Join", "edit.cutSegment.label": "Delete segment", // Tab field cycle (precision input): ordered numeric fields per step. "cmd.field.length": "Length", "cmd.field.angle": "Angle", "cmd.field.width": "Width", "cmd.field.height": "Height", "cmd.field.radius": "Radius", "cmd.field.distance": "Distance", "cmd.field.thickness": "Thickness", "cmd.edit.point": "Drag grip (Tab: length/angle):", // Commands: import / terrain. "cmd.import.label": "Import", "cmd.import.prompt": "Choose DXF file …", "cmd.terrain.label": "Terrain", "cmd.terrain.prompt": "Generate terrain from contours …", "cmd.georef.label": "New reference point", "cmd.georef.prompt": "New origin (shifts the whole project):", // Area balance (SIA 416). "nav.roomBalance": "Area balance", "balance.title": "Area balance (SIA 416)", "balance.rooms": "Rooms", "balance.summary": "Balance", "balance.export": "Export CSV", "balance.empty": "No rooms yet. Create one with the room tool.", // Room stamp editor. "room.stamp.editTitle": "Edit room stamp", "room.stamp.close": "Close", // Site / context panel (SitePanel). "nav.site": "Terrain", "site.title": "Terrain & Context", "site.import": "⤓ Import DXF", "site.generateTerrain": "Generate terrain", "site.contourSet": "Contour set", "site.empty": "No context loaded. Import a DXF file (contour lines or mesh).", "site.delete": "Remove", "site.deleteLayer": "Remove entire layer", "site.group.imported": "Buildings", "site.group.terrain": "Terrain", "site.group.contours": "Contours", "site.type.mesh": "Mesh", "site.type.contours": "Contours", "site.type.terrain": "Terrain", "site.type.image": "Aerial", "site.group.image": "Aerial imagery", "site.dwgHint": "DWG? Convert it to DXF first with the free ODA File Converter.", "site.terrainFailed": "No terrain could be generated (too few/collinear contour points).", // Import dialog. "import.title": "Import DXF", "import.close": "Close", "import.file": "File", "import.summary.heading": "Contents", "import.summary.contours": "{n} contours", "import.summary.texts": "{n} texts", "import.summary.meshes": "{n} meshes", "import.summary.layers": "Layers: {layers}", "import.summary.noLayers": "no layer names", "import.summary.empty": "No importable 2D geometry found.", "import.target.heading": "Target drawing level", "import.target.existing": "Import into existing drawing level", "import.target.new": "Create new drawing", "import.target.newNamePlaceholder": "New drawing name", "import.layers.heading": "Layer handling (DXF layers)", "import.layers.asCategories": "Keep DXF layers as categories", "import.layers.toActive": "Everything onto the active category ({code})", "import.placement.heading": "Placement", "import.placement.origin": "At DXF coordinates (relative to origin)", "import.placement.viewCenter": "Centered in the current view", "import.mesh.heading": "Meshes", "import.mesh.asContext": "Import meshes as context geometry (3D)", "import.mesh.note": "Meshes are not 2D drawings — they go into the context layer.", "import.dwg.heading": "DWG file", "import.dwg.loading": "Reading DWG …", "import.dwg.hint": "DWG could not be read. Alternatively, convert the file to DXF with the free ODA File Converter, then import the DXF.", "import.confirm": "Import", "import.cancel": "Cancel", "import.badge.floor": "Floor", "import.badge.section": "Section", "import.badge.elevation": "Elevation", "import.badge.drawing": "Drawing", // PDF export. "export.title": "Export PDF", "export.close": "Close", "export.plan": "Plan", "export.scale": "Scale", "export.paper": "Paper size", "export.orientation": "Orientation", "export.orientation.portrait": "Portrait", "export.orientation.landscape": "Landscape", "export.warnFit": "At the chosen scale the plan does not fully fit the sheet — pick a larger format or a smaller scale.", "export.confirm": "Export", "export.cancel": "Cancel", // DXF export. "exportDxf.title": "Export DXF", "exportDxf.hatches": "Hatches", "exportDxf.hatches.yes": "Include", "exportDxf.hatches.no": "Outlines only", "exportDxf.unitsNote": "Model space in meters (1:1). Layers mirror the project's categories; scale freely on plot.", // File menu (burger, far right of the top bar). "file.menu": "File", "file.save": "Save project", "file.open": "Open project", "file.import": "Import DXF/DWG…", "file.exportPdf": "Export as PDF…", "file.exportDxf": "Export as DXF…", "file.exportSchedule": "Component schedule (CSV)…", "file.exportIfc": "Export IFC", "file.exportObj": "Export OBJ (3D mesh)", "file.exportStl": "Export STL (3D mesh)", "file.export": "Export", "file.openFailed": "Could not read the project file.", // Lock conflict (project file already open in another instance). "lock.title": "Project already open", "lock.message": "This project file is already open in another instance.", "lock.messageInfo": "Opened on {host} (process {pid}).", "lock.openReadOnly": "Open read-only", "lock.forceOpen": "Force open anyway", "lock.forceOpenWarning": "Warning: opens for writing even though another instance holds the file — changes may overwrite each other.", "exportSave.title": "Export", "exportSave.format": "Format", "exportSave.filename": "File name", "exportSave.locationNote": "Saved to the default downloads folder.", "exportSave.fmt.csv": "Component schedule (CSV)", "exportSave.fmt.ifc": "IFC (BIM)", "exportSave.fmt.obj": "OBJ (3D mesh)", "exportSave.fmt.stl": "STL (3D mesh)", "about.title": "About dossier", "about.version": "Version", "about.desc": "Open-source CAAD (Computer Aided Architecture Design) — beautiful, standard-compliant drawings from a semantic building model. Available as a desktop app (full version) and in the browser.", "about.copyright": "© 2026 Karim Gabriele Varano", "about.license": "License: AGPL-3.0-or-later", "about.suite": "Part of the openbureau suite", "about.licenses": "Open-source licenses (third-party)", "about.close": "Close", // Settings dialog. "topbar.settings": "Settings", "topbar.settings.hint": "Open settings (display colors, project)", "settings.title": "Settings", "settings.section.workspace": "Workspace", "settings.section.display": "Display", "settings.theme": "Appearance", "settings.theme.light": "Light", "settings.theme.dark": "Dark", "settings.marqueeColor": "Selection box color", "settings.marqueeColor.hint": "Color of the marquee selection box drawn while dragging a selection in the plan view.", "settings.snapColor": "Snap/endpoint color", "settings.snapColor.hint": "Color of the snap/endpoint highlight while drawing/editing in the plan view.", "settings.section.project": "Project", "settings.referenceElevation": "Ground floor reference elevation (m a.s.l.)", "settings.referenceElevation.hint": "Stored only — not used yet. Terrain draping / real-world elevations relative to the ground floor will follow.", // Drag & drop (app-wide file drop). "drop.hint": "Drop a DXF/DWG file here", // Error boundary. "error.console": "Unexpected error:", "error.title": "Something went wrong", "error.body": "An unexpected error occurred. Details in the console.", "error.reload": "Reload", // Location import (geo.admin / OSM). "site.importLocation": "Import location", "site.setGeoref": "New reference point", "site.setGeoref.hint": "Click in the plan to shift the whole project — the clicked point becomes the new origin (0,0). The real-world reference is preserved.", "ctxImport.title": "Import location", "ctxImport.close": "Close", "ctxImport.geoAnchor": "Georeferenced from: {label}", "ctxImport.geoAnchor.coords": "E {e} / N {n} / H {h}", "ctxImport.geoAnchor.reset": "Reset", "ctxImport.geoAnchor.reset.hint": "Clears the location reference — the next import sets it again.", "ctxImport.rawHint": "Imported at its real LV95 coordinates (far from the origin). Then use \"New reference point\" to bring it to a convenient model point — the IFC/DXF export still writes the real coordinates.", "ctxImport.location": "Place / address", "ctxImport.searchPlaceholder": "e.g. Bundesplatz Bern", "ctxImport.search": "Search", "ctxImport.searching": "Searching…", "ctxImport.noResults": "No matches.", "ctxImport.searchError": "Search failed.", "ctxImport.radius": "Radius", "ctxImport.refPoint": "Reference point (model origin)", "ctxImport.refPoint.e": "LV95 East (E)", "ctxImport.refPoint.n": "LV95 North (N)", "ctxImport.refPoint.h": "Elevation (m a.s.l.)", "ctxImport.refPoint.hint": "Optional: real coordinate of the reference point (like ArchiCAD's survey point). East/North (LV95) set which model point maps to (0,0); the elevation (m a.s.l.) is anchored informationally and written as the site datum elevation on IFC export. Empty = the search centre becomes the origin.", "ctxImport.refPoint.anchorLabel": "Reference point {e} / {n}", "ctxImport.sources": "Sources", "ctxImport.src.swissBuildings": "Swisstopo buildings", "ctxImport.buildings.off": "Off", "ctxImport.buildings.flach": "Simplified (footprint, fast)", "ctxImport.buildings.v2": "Real 2.0 (stable)", "ctxImport.buildings.v3": "Real 3.0 (Beta)", "ctxImport.src.swissTerrain": "Swisstopo terrain", "ctxImport.src.swissImage": "SWISSIMAGE aerial (2D backdrop)", "ctxImport.src.swissImageDrape": "Drape aerial onto terrain (3D)", "ctxImport.terrain.resolution": "Resolution", "ctxImport.terrain.res2": "2 m (fast)", "ctxImport.terrain.res05": "0.5 m (fine, larger tiles)", "ctxImport.src.osmBuildings": "OSM buildings", "ctxImport.src.osmRoads": "OSM roads", "ctxImport.src.osmWater": "OSM water", "ctxImport.src.osmGreen": "OSM greenery", "ctxImport.src.osmParking": "OSM parking", "ctxImport.src.osmRailway": "OSM railway", "ctxImport.src.osmForest": "OSM forest", "ctxImport.cancel": "Cancel", "ctxImport.confirm": "Import", "ctxImport.importing": "Importing…", "ctxImport.working": "Loading geodata…", "ctxImport.empty": "No geometry found in the selected area.", "ctxImport.importError": "Import failed.", "ctxImport.imported": "Imported {count} objects in {sets} sets.", "ctxImport.importedWithSkipped": "Imported {count} objects in {sets} sets ({skipped} building tile(s) skipped, too large).", "ctxImport.buildingsSkipped": "No buildings loaded — {count} tile(s) were too large (dense built-up area). Try a smaller radius or switch generation.", // Room command. "cmd.room.label": "Room", "cmd.room.mode": "Mode", "cmd.room.inside": "Click inside room:", "cmd.room.first": "Set first room point:", "cmd.room.next": "Set next point ( Enter/Start closes ):", // Rich-text editor. // Text group (top bar). "text.group": "Text", "text.style": "Style", "text.style.none": "— Style —", "text.font": "Font", "text.size": "Size", "text.size.custom": "Custom …", "text.size.customPrompt": "Font size in pt:", "text.bold": "Bold", "text.italic": "Italic", "text.underline": "Underline", "text.align.left": "Align left", "text.align.center": "Center", "text.align.right": "Align right", "text.lineHeight": "Line height", "text.lineHeight.hint": "Line height (multiple of font size)", "text.lineHeight.increase": "Increase line height", "text.lineHeight.decrease": "Decrease line height", "text.editTitle": "Edit text", "text.apply": "Apply", "text.cancel": "Cancel", "roomStamp.title": "Edit room stamp", "roomStamp.number": "Room number", "roomStamp.name": "Room name", "roomStamp.nameLine2": "Room name line 2", "roomStamp.showFloorArea": "Show floor area", "roomStamp.floorAreaPrefix": "Floor area prefix", "roomStamp.showUsage": "Show usage", "roomStamp.roundingStep": "Area rounding", "roomStamp.roundingStepDefault": "Default (2 decimal places)", "roomStamp.occupancy": "Occupancy", "text.selectedHint": "Formatting applies to the selected text", "rt.bold": "Bold", "rt.italic": "Italic", "rt.underline": "Underline", "rt.strike": "Strikethrough", "rt.strikethrough": "Strikethrough", "rt.super": "Superscript", "rt.sub": "Subscript", "rt.fontSize": "Font size", "rt.color": "Color", "rt.preset": "Preset", "rt.preset.none": "— Preset —", // ── 3D viewport (native engine, WASM/WebGPU) ──────────────────────────────── "viewport3d.engineUnavailable": "3D engine unavailable", "viewport3d.engineUnavailableHint": "WebGPU could not be initialized. Switch to WebGL2 in the status bar to keep using the 3D view.", "viewport3d.grid.show": "Show ground grid", "viewport3d.grid.hide": "Hide ground grid", "viewport3d.section.label": "Section plane", "viewport3d.section.show": "Section plane on", "viewport3d.section.hide": "Section plane off", "viewport3d.section.bound": "Clear 3D section (bound to section line)", "viewport3d.grip.vertex": "Drag wall endpoint", "viewport3d.grip.edge": "Drag edge", "viewport3d.grip.height": "Drag height", "viewport3d.grip.move": "Move", "viewport3d.grip.roofpitch": "Drag roof pitch", // ── Element tree (Elements panel, ROADMAP §11) ────────────────────────────── "elements.title": "Elements", "elements.search": "Search elements…", "elements.empty": "No components in the project.", "elements.noMatch": "No matches.", "elements.kind.wall": "Wall", "elements.kind.ceiling": "Ceiling", "elements.kind.window": "Window", "elements.kind.opening": "Opening", "elements.kind.stair": "Stair", "elements.kind.extrusion": "Extrusion", "elements.kind.roof": "Roof", "elements.kind.column": "Column", // Views / view snapshots (DOSSIER A2). "viewsnap.title": "Views", "viewsnap.saveCurrent": "+ Save current view …", "viewsnap.savePrompt": "Save view as:", "viewsnap.renamePrompt": "Rename view:", "viewsnap.rename": "Rename", "viewsnap.delete": "Delete", "viewsnap.deleteConfirm": "Delete view “{name}”?", "viewsnap.empty": "No views yet. Set up a view and save it.", "viewsnap.applyHint": "Restore view “{name}”", "viewsnap.add.folder": "Create folder", "viewsnap.add.snapshot": "Save view", "viewsnap.folder.defaultName": "New folder", "viewsnap.folder.rename": "Rename folder", "viewsnap.folder.delete": "Delete folder", "viewsnap.folder.empty": "Empty folder", "viewsnap.tree.empty": "No folders or views yet. Add via “+”.", "viewsnap.footer.scale": "Scale", "viewsnap.footer.layerCombo": "Layer combo", "viewsnap.footer.drawingCombo": "Drawing combo", "viewsnap.footer.overrides": "Overrides", "viewsnap.footer.none": "—", // Layout sheets with master layout (DOSSIER A3). "layouts.panelTitle": "Portfolio", "layouts.title": "Layouts", "layouts.new": "Create", "layouts.namePlaceholder": "Sheet name …", "layouts.defaultName": "New layout", "layouts.rename": "Rename", "layouts.delete": "Delete", "layouts.renamePrompt": "Rename:", "layouts.deleteConfirm": "Delete “{name}”?", "layouts.openHint": "Open layout “{name}”", "layouts.empty": "No layouts yet. Create a sheet and open it.", "layouts.paper": "Paper size", "layouts.orientation": "Orientation", "layouts.portrait": "Portrait", "layouts.landscape": "Landscape", "layouts.border": "Border", "layouts.masters": "Master layouts", "layouts.newMaster": "+ Master", "layouts.newMasterPrompt": "New master layout:", "layouts.defaultMasterName": "Master", "layouts.noMasters": "No master layouts yet.", "layouts.master": "Master", "layouts.noMaster": "No master", "layouts.tb.projectName": "Project", "layouts.tb.sheetName": "Sheet name", "layouts.tb.scale": "Scale", "layouts.tb.date": "Date", "layouts.tb.author": "Author", "layouts.tb.autoPlaceholder": "(automatic)", // Editor "layouts.editorTitle": "Layout editor", "layouts.fit": "Fit", "layouts.addViewport": "Add viewport", "layouts.pickSnapshot": "Pick a view …", "layouts.noSnapshots": "No views available. Save a view first.", "layouts.viewportProps": "Viewport properties", "layouts.noViewports": "No viewports yet. Pick a view and add it.", "layouts.selectViewport": "Click a viewport on the sheet.", "layouts.missingSnapshot": "View missing", "layouts.xMm": "X (mm)", "layouts.yMm": "Y (mm)", "layouts.widthMm": "Width (mm)", "layouts.heightMm": "Height (mm)", "layouts.scale": "Scale", "layouts.scaleReset": "Scale from view", "layouts.removeViewport": "Remove viewport", "layouts.backToModel": "Back to model", "layouts.placeViewport": "Draw viewport", "layouts.placeHint": "Drag a rectangle on the sheet, then bind a snapshot.", "layouts.bindSnapshot": "Bind snapshot", "layouts.emptyViewports": "No viewports yet. Choose “Draw viewport” and drag a rectangle on the sheet.", // Annotations (line/rect/text) drawn directly on the sheet "layouts.annotLine": "Draw line", "layouts.annotRect": "Draw rectangle", "layouts.annotText": "Place text", "layouts.annotTextTitle": "Text", "layouts.annotTextLabel": "Text content:", "layouts.annotEditText": "Edit text", "layouts.annotColor": "Color", "layouts.annotWeight": "Line weight (mm)", "layouts.annotRemove": "Remove annotation", "layouts.annot.line": "Line", "layouts.annot.rect": "Rectangle", "layouts.annot.text": "Text", // Tree / “+” menu / folders "layouts.add": "New …", "layouts.addFolder": "Create folder", "layouts.addLayout": "Create layout", "layouts.addMaster": "Create master layout", "layouts.add.folder": "Create folder", "layouts.add.layout": "Create layout", "layouts.add.master": "Create master layout", "layouts.folder.defaultName": "New folder", "layouts.folder.rename": "Rename folder", "layouts.folder.delete": "Delete folder", "layouts.folder.export": "Export folder as PDF", "layouts.folder.empty": "Empty folder", "layouts.folder.exportEmpty": "Folder contains no layouts.", "layouts.tree.empty": "No folders or layouts yet. Add one via “+”.", // “New layout” dialog "layouts.newLayout.title": "New layout", "layouts.newLayout.source": "Template", "layouts.newLayout.fromMaster": "Master layout as template", "layouts.newLayout.freeSize": "Free size", "layouts.newLayout.pickMaster": "Pick a master layout …", "layouts.newLayout.noMasters": "No master layouts available.", // “New master layout” dialog "layouts.newMaster.title": "New master layout", // Shared size picker (both dialogs) "layouts.size.format": "Format", "layouts.size.custom": "Free size", "layouts.size.a4": "A4", "layouts.size.a3": "A3", "layouts.paperGroup.a": "A series", "layouts.paperGroup.b": "B series", "layouts.size.widthMm": "Width (mm)", "layouts.size.heightMm": "Height (mm)", "layouts.size.create": "Create", };