68a0459d0e
- Schnittebenen: 3D-Live-Schnitt folgt der gewählten Grundriss-Schnittlinie (section3dCutId/sectionPlaneFromLevel), Schalter "Im 3D schneiden" im Objekt-Info, Doppelklick auf Schnittlinie springt in 2D-Schnittansicht, unsichtbare Ebenen blenden ihre Führungslinie aus - Eigene native Tauri-Fenster für Kontext-Import/Zeichnungsebenen/ Ebenen-Einstellungen/Ressourcen/Einstellungen + klassische Menüleiste (AppMenuBar) neben der Wortmarke - Hell/Dunkel-Umschalter (Einstellungen → Darstellung), persistiert, flackerfrei vor erstem Render gesetzt - SWISSIMAGE-Luftbild-Import (swisstopo WMS) als Kontext-Hintergrundebene - UI-Politur: Werkzeug-Panel Symbole/Liste umschaltbar, Topbar-Quick-Access- Icons entfernt, Zahnrad→Einstellungen in Panel-Köpfen, Footerbar/ Snap-Marker/Maß-HUD auf helle Pillen-Sprache umgestellt - Neues Dachziegel-Material (RoofingTiles013A)
1604 lines
68 KiB
TypeScript
1604 lines
68 KiB
TypeScript
// 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.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",
|
||
};
|