Files
DOSSIER-STANDALONE/src/i18n/en.ts
T
karim 492e1f811a Mess-Werkzeug: Polygonzug mit Fläche + Live-Werte im Objekt-Info-Panel
Das Mess-Werkzeug wird von der reinen Strecke zum Polygonzug:
- Jeder Klick setzt einen weiteren Stützpunkt; angezeigt werden letztes
  Segment (Länge · Winkel), aufsummierte Pfadlänge und — ab 3 Ecken —
  die umschlossene Fläche (Gauss).
- Die Messwerte erscheinen dauerhaft im Objekt-Info-Panel (neuer
  Abschnitt „Messung"), nicht nur flüchtig am Cursor-HUD. Kanal:
  ToolDraft.measure → PanelHost.measurement → ObjectInfoPanel.
- Rechtsklick/Enter beendet den aktuellen Pfad und armiert sofort einen
  neuen (mehrere Messungen nacheinander); Rechtsklick auf leerem Pfad
  bzw. Esc beendet das Werkzeug.

+4 Tests (Segment/Winkel, Summe/Fläche, Ketten-Verhalten). tsc sauber.
2026-07-09 01:13:15 +02:00

1336 lines
56 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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<TranslationKey, string> = {
// 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.back": "Back",
"view3d.back.hint": "Back view (rear)",
"view3d.top": "Top",
"view3d.top.hint": "Top view (straight down)",
"view3d.side": "Right",
"view3d.side.hint": "Right side view (90° to the front)",
"view3d.left": "Left",
"view3d.left.hint": "Left side view (90° to the front, opposite Right)",
"view3d.perspective": "Perspective",
"view3d.perspective.hint": "Free perspective (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.white": "White",
"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",
// 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.custom": "Custom bar",
"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",
// 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.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",
// ── 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.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 (OKUK)",
"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.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.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.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.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)",
// 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",
// 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} · derived projection (render3d)",
"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.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.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.tab.components": "Components",
"resources.tab.hatches": "Hatches",
"resources.tab.lines": "Lines",
"resources.tab.wallStyles": "Wall styles",
"resources.tab.ceilingStyles": "Ceiling styles",
"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",
// 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.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}”",
// 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.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 (01, 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 …",
// 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.type.mesh": "Mesh",
"site.type.contours": "Contours",
"site.type.terrain": "Terrain",
"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.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",
"ctxImport.title": "Import location",
"ctxImport.close": "Close",
"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.sources": "Sources",
"ctxImport.src.swissBuildings": "Swisstopo buildings",
"ctxImport.src.swissTerrain": "Swisstopo terrain",
"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.",
// 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.grip.vertex": "Drag wall endpoint",
"viewport3d.grip.height": "Drag height",
"viewport3d.grip.move": "Move",
// ── 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",
// 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",
};