Files
DOSSIER-STANDALONE/src/i18n/en.ts
T
karim f0e777efc5 ResourceManager: Master-Detail-Editoren fuer Schraffur- und Linien-Typen
Schraffuren- und Linien-Tab im Master-Detail-Layout (DOSSIER-Vorbild): Liste
links mit Live-SVG-Thumbnail + Name, Detail rechts mit grosser Live-Vorschau,
Inline-Rename, Trash-Delete, Typ-Umschalter. Schraffur: Vektor (parallel/
zufaellig) oder Bild (Upload -> Data-URL, scaleX/scaleY/rotation); kein
Farbfeld mehr (Farbe kommt von Bauteil/Attribut). Linie: Strich oder Zickzack
(Amplitude/Wellenlaenge). Bauteil-Tabelle: Vordergrund + Hintergrund statt
einer Farbe. Neuer eigenstaendiger Vorschau-Helfer ui/hatchPreview.tsx (kein
Renderer-Import).
2026-07-04 00:41:09 +02:00

841 lines
34 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.top": "Top",
"view3d.top.hint": "Top view (straight down)",
"view3d.side": "Side",
"view3d.side.hint": "Side view (90° to front)",
"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.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": "Layout",
"layout.placeholder": "Layout …",
"layout.saveCurrent": " Save current …",
"layout.loadGroup": "Load",
"layout.deleteGroup": "Delete",
"layout.savePrompt": "Save layout 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.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": "Engine",
"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.stroke": "Pen",
"attr.color": "Color",
"attr.weight": "Line weight (mm)",
"attr.lineStyle": "Line style",
"attr.fill": "Fill",
"attr.fillColor": "Fill color",
"attr.clearFill": "Remove fill color",
"attr.foreground": "Foreground",
"attr.background": "Background",
"attr.bySystem": "By system",
"attr.hatch": "Hatch",
"attr.none": "none",
"attr.inheritedFromLayer": "Walls inherit line weight from the layer",
"attr.fillNeedsClosed": "Fill only for closed shapes",
"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",
// ── 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.buildup": "Build-up",
"objinfo.wall.single": "Single layer",
"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 to floor",
"objinfo.wall.anchorCustom": "Custom height",
"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 to floor",
"objinfo.ceiling.anchorCustom": "Custom height",
// ── Opening attributes (object info panel) ──────────────────────────────
"objinfo.opening.section": "Opening",
"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.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)",
// ── 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 …",
"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.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.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",
// 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.",
// 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.materials": "Materials",
"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.col.layer": "Layer",
"resources.col.thickness": "Thickness (mm)",
"resources.col.joint": "Joint",
"resources.joint.default": "— (hairline)",
"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.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}”",
// 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.hatchKind.vector": "Vector",
"resources.hatchKind.image": "Image",
"resources.lines.parallel": "Parallel",
"resources.lines.random": "Random",
"resources.lineKind.dash": "Dash",
"resources.lineKind.zigzag": "Zigzag",
"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.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.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.move.label": "Move",
"cmd.move.base": "Base point:",
"cmd.move.target": "Target point:",
"cmd.move.empty": "Nothing selected (select objects first).",
"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:",
// 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.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.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.",
// 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.osmBuildings": "OSM buildings",
"ctxImport.src.osmRoads": "OSM roads",
"ctxImport.src.osmWater": "OSM water",
"ctxImport.src.osmGreen": "OSM greenery",
"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.add": "Text",
"text.add.hint": "Text tool — place new text (coming soon)",
"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",
"text.selectedHint": "Formatting applies to the selected text",
"rt.bold": "Bold",
"rt.italic": "Italic",
"rt.underline": "Underline",
"rt.strike": "Strikethrough",
"rt.strikethrough": "Strikethrough",
"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.",
};