2D-Plan-Renderer auf WebGL2 (GPU) + akkumulierter Funktionsstand
Neuer GPU-Renderer fuer den Grundriss (src/plan/glPlan/): Earcut-Tessellierung (konkav-faehig), gehrte Linienzuege (Miter), echte Papier-mm-Strichbreiten im Massstab (repliziert den SVG-printStrokeVb-Pfad), Hybrid mit scharfem SVG-Text- Overlay. GPU ist der Standardpfad; der SVG-Renderer bleibt automatischer Fallback, falls WebGL2/Shader nicht verfuegbar sind. Imperativer Pan (rAF + CSS-transform) fuer fluessige Interaktion ohne React-Re-Render je Frame. Enthaelt zudem den bisher nicht committeten Arbeitsstand des Browser-BIM (Oeffnungen, Treppen, Raeume, Decken, DXF-Export, Materialbibliothek, Kontext- Import, Tauri-Compute-Boundary-PoC).
This commit is contained in:
+268
@@ -49,6 +49,10 @@ export const de = {
|
||||
"topbar.fit.hint": "Auf Plan einpassen",
|
||||
"topbar.fitSelection": "Auswahl",
|
||||
"topbar.fitSelection.hint": "Auf Auswahl einpassen (sonst auf Plan)",
|
||||
"topbar.exportPdf": "PDF",
|
||||
"topbar.exportPdf.hint": "Grundriss als Vektor-PDF exportieren",
|
||||
"topbar.exportDxf": "DXF",
|
||||
"topbar.exportDxf.hint": "Grundriss als DXF (Modell-Space in Metern) exportieren",
|
||||
"topbar.zoom.current": "Aktueller Zoom",
|
||||
|
||||
"topbar.renderGroup": "Render-Modus",
|
||||
@@ -68,6 +72,7 @@ export const de = {
|
||||
"display.style.mono": "Schwarz-Weiss",
|
||||
"display.style.shaded": "Schattiert",
|
||||
"display.style.white": "Weiss",
|
||||
"display.style.textured": "Texturiert",
|
||||
"display.style.wireframe": "Drahtgitter",
|
||||
"display.style.hidden": "Kanten",
|
||||
|
||||
@@ -103,12 +108,23 @@ export const de = {
|
||||
"tool.group": "Werkzeuge",
|
||||
"tool.select": "Auswahl",
|
||||
"tool.wall": "Wand",
|
||||
"tool.ceiling": "Decke",
|
||||
"tool.window": "Fenster",
|
||||
"tool.door": "Tür",
|
||||
"tool.stair": "Treppe",
|
||||
"tool.line": "Linie",
|
||||
"tool.polyline": "Polylinie",
|
||||
"tool.rect": "Rechteck",
|
||||
"tool.select.hint": "Auswahl — Elemente klicken/aufziehen",
|
||||
"tool.window.hint": "Fenster: Wand wählen, dann Position setzen",
|
||||
"tool.door.hint": "Tür: Wand wählen, dann Position setzen",
|
||||
"tool.stair.hint": "Treppe: Startpunkt, dann Laufrichtung/Ende setzen",
|
||||
"tool.room": "Raum",
|
||||
"tool.room.hint": "Raum: in umschlossenen Bereich klicken (oder Umriss zeichnen)",
|
||||
"tool.wall.firstPoint": "Wand: ersten Achspunkt setzen",
|
||||
"tool.wall.nextPoint": "Wand: nächsten Punkt — Doppelklick/Rechtsklick beendet",
|
||||
"tool.ceiling.firstPoint": "Decke: ersten Umrisspunkt setzen",
|
||||
"tool.ceiling.nextPoint": "Decke: nächster Punkt — Klick auf Start schließt, Enter beendet",
|
||||
"tool.line.firstPoint": "Linie: Startpunkt setzen",
|
||||
"tool.line.secondPoint": "Linie: Endpunkt setzen",
|
||||
"tool.polyline.firstPoint": "Polylinie: ersten Punkt setzen",
|
||||
@@ -116,6 +132,7 @@ export const de = {
|
||||
"tool.rect.firstCorner": "Rechteck: erste Ecke setzen",
|
||||
"tool.rect.secondCorner": "Rechteck: gegenüberliegende Ecke setzen",
|
||||
"tool.wallType": "Wandtyp",
|
||||
"tool.ceilingType": "Deckentyp",
|
||||
"tool.layer": "Ebene",
|
||||
"tool.layer.hint": "Aktive Ebene — alles Gezeichnete kommt auf diese Kategorie",
|
||||
"tool.floorOnlyDisabled": "Wand nur auf einem Geschoss zeichenbar",
|
||||
@@ -209,8 +226,12 @@ export const de = {
|
||||
"objinfo.height": "Höhe",
|
||||
"objinfo.type": "Typ",
|
||||
"objinfo.kind.wall": "Wand",
|
||||
"objinfo.kind.ceiling": "Decke",
|
||||
"objinfo.kind.drawing2d": "2D-Objekt",
|
||||
"objinfo.kind.door": "Tür",
|
||||
"objinfo.kind.opening": "Öffnung",
|
||||
"objinfo.kind.stair": "Treppe",
|
||||
"objinfo.kind.room": "Raum",
|
||||
// ── Wand-Attribute (Object-Info-Panel) ──────────────────────────────────
|
||||
"objinfo.wall.section": "Wand",
|
||||
"objinfo.wall.refLine": "Referenzlinie",
|
||||
@@ -230,6 +251,65 @@ export const de = {
|
||||
"objinfo.wall.anchorFloor": "An Geschoss gebunden",
|
||||
"objinfo.wall.anchorCustom": "Eigene Höhe",
|
||||
"objinfo.wall.height": "Höhe",
|
||||
// ── Decken-Attribute (Object-Info-Panel) ────────────────────────────────
|
||||
"objinfo.ceiling.section": "Decke",
|
||||
"objinfo.ceiling.buildup": "Aufbau",
|
||||
"objinfo.ceiling.thickness": "Dicke",
|
||||
"objinfo.ceiling.preset": "Deckenaufbau",
|
||||
"objinfo.ceiling.refFloor": "Referenzgeschoss",
|
||||
"objinfo.ceiling.top": "Oberkante (OK)",
|
||||
"objinfo.ceiling.bottom": "Unterkante (UK)",
|
||||
"objinfo.ceiling.height": "Dicke (OK−UK)",
|
||||
"objinfo.ceiling.area": "Fläche",
|
||||
"objinfo.ceiling.anchorFloor": "An Geschoss gebunden",
|
||||
"objinfo.ceiling.anchorCustom": "Eigene Höhe",
|
||||
// ── Öffnungs-Attribute (Object-Info-Panel) ──────────────────────────────
|
||||
"objinfo.opening.section": "Öffnung",
|
||||
"objinfo.opening.kind": "Art",
|
||||
"objinfo.opening.kind.window": "Fenster",
|
||||
"objinfo.opening.kind.door": "Tür",
|
||||
"objinfo.opening.hostWall": "Wirts-Wand",
|
||||
"objinfo.opening.position": "Position (ab Wandanfang)",
|
||||
"objinfo.opening.width": "Breite",
|
||||
"objinfo.opening.height": "Höhe",
|
||||
"objinfo.opening.sill": "Brüstung",
|
||||
"objinfo.opening.swingAngle": "Öffnungswinkel",
|
||||
"objinfo.opening.hinge": "Anschlag",
|
||||
"objinfo.opening.hinge.start": "Anfang",
|
||||
"objinfo.opening.hinge.end": "Ende",
|
||||
"objinfo.opening.swing": "Aufschlagseite",
|
||||
"objinfo.opening.swing.left": "Links",
|
||||
"objinfo.opening.swing.right": "Rechts",
|
||||
"objinfo.opening.dir": "Richtung",
|
||||
"objinfo.opening.dir.in": "Innen",
|
||||
"objinfo.opening.dir.out": "Außen",
|
||||
"objinfo.opening.bottom": "Unterkante (UK)",
|
||||
"objinfo.opening.top": "Oberkante (OK)",
|
||||
// ── Treppen-Attribute (Object-Info-Panel) ───────────────────────────────
|
||||
"objinfo.stair.section": "Treppe",
|
||||
"objinfo.stair.shape": "Grundform",
|
||||
"objinfo.stair.shape.straight": "Gerade",
|
||||
"objinfo.stair.shape.L": "L-Treppe",
|
||||
"objinfo.stair.shape.spiral": "Wendel",
|
||||
"objinfo.stair.width": "Laufbreite",
|
||||
"objinfo.stair.steps": "Stufenanzahl",
|
||||
"objinfo.stair.rise": "Steighöhe (gesamt)",
|
||||
"objinfo.stair.riser": "Steigungshöhe",
|
||||
"objinfo.stair.tread": "Auftrittstiefe",
|
||||
"objinfo.stair.direction": "Laufrichtung",
|
||||
"objinfo.stair.direction.up": "Aufwärts",
|
||||
"objinfo.stair.direction.down": "Abwärts",
|
||||
"objinfo.stair.refFloor": "Referenzgeschoss",
|
||||
"objinfo.stair.bottom": "Unterkante (UK)",
|
||||
"objinfo.stair.top": "Oberkante (OK)",
|
||||
// ── Raum-Attribute (Object-Info-Panel) ──────────────────────────────────
|
||||
"objinfo.room.section": "Raum",
|
||||
"objinfo.room.name": "Name",
|
||||
"objinfo.room.sia": "SIA-Kategorie",
|
||||
"objinfo.room.area": "Fläche",
|
||||
"objinfo.room.perimeter": "Umfang",
|
||||
"objinfo.room.refFloor": "Referenzgeschoss",
|
||||
"objinfo.room.editStamp": "Stempel bearbeiten …",
|
||||
"objinfo.wall.floorAboveNone": "Kein oberes Geschoss",
|
||||
"levels.addFloor": "+ Geschoss",
|
||||
"levels.addDrawing": "+ Zeichnung",
|
||||
@@ -280,6 +360,11 @@ export const de = {
|
||||
"ctx.fitSelection": "Auf Auswahl einpassen",
|
||||
"ctx.clearSelection": "Auswahl aufheben",
|
||||
"ctx.fit": "Ansicht einpassen",
|
||||
"ctx.union": "Vereinigen",
|
||||
"ctx.subtract": "Subtrahieren",
|
||||
"ctx.intersect": "Schneiden",
|
||||
"ctx.boolean.disabled":
|
||||
"Mindestens zwei geschlossene Flächen auswählen (Rechteck oder geschlossene Polylinie).",
|
||||
"ctx.noWallHit": "Keine Wand getroffen",
|
||||
"ctx.noWallHit.hint": "Rechtsklick auf eine Wand wählt sie und zeigt Wand-Aktionen.",
|
||||
|
||||
@@ -358,8 +443,47 @@ export const de = {
|
||||
"resources.col.prio": "Prio",
|
||||
"resources.col.prio.hint": "Höhere Priorität läuft am Stoß durch",
|
||||
"resources.col.texture": "Textur",
|
||||
"resources.col.material": "Material",
|
||||
"resources.delete.component": "Bauteil „{name}\" löschen",
|
||||
|
||||
// 3D-Material (PBR) — Bibliotheks-Auswahl + Upload.
|
||||
"material.assign": "Material …",
|
||||
"material.none": "— ohne —",
|
||||
"material.dialog.title": "3D-Material zuweisen",
|
||||
"material.dialog.hint": "Wähle ein eingebautes Material oder lade eigene Texturen hoch. Wirkt im 3D-Modus „Texturiert\".",
|
||||
"material.library": "Bibliothek (ambientCG, CC0)",
|
||||
"material.upload": "Eigene Texturen",
|
||||
"material.upload.hint": "Lade Bilder als Karten hoch (mindestens Farbe). Größe = physische Kachelgröße in Metern.",
|
||||
"material.upload.color": "Farbe (Albedo)",
|
||||
"material.upload.normal": "Normal",
|
||||
"material.upload.roughness": "Rauheit",
|
||||
"material.upload.displacement": "Höhe",
|
||||
"material.upload.ao": "AO",
|
||||
"material.upload.choose": "Bild …",
|
||||
"material.upload.apply": "Zuweisen",
|
||||
"material.size": "Kachelgröße (m)",
|
||||
"material.current": "Aktuell",
|
||||
"material.clear": "Material entfernen",
|
||||
"material.close": "Schließen",
|
||||
"material.uploaded": "Hochgeladen",
|
||||
// ── ambientCG-Bibliothek durchsuchen (Live) ──────────────────────────────
|
||||
"material.browse": "Bibliothek durchsuchen",
|
||||
"material.browse.starter": "Schnellauswahl",
|
||||
"material.browse.hint":
|
||||
"Durchsuche die komplette CC0-Bibliothek von ambientCG (~2000+ Materialien). Ein Klick lädt die Texturen zur Laufzeit herunter und weist sie zu.",
|
||||
"material.browse.search": "Suchen …",
|
||||
"material.browse.searchPlaceholder": "z. B. Holz, Beton, Fliesen …",
|
||||
"material.browse.category.all": "Alle Kategorien",
|
||||
"material.browse.resolution": "Auflösung",
|
||||
"material.browse.more": "Mehr laden",
|
||||
"material.browse.loading": "Lädt …",
|
||||
"material.browse.downloading": "Textur wird geladen …",
|
||||
"material.browse.empty": "Keine Materialien gefunden.",
|
||||
"material.browse.count": "{shown} von {total}",
|
||||
"material.browse.error":
|
||||
"Bibliothek nicht erreichbar. Zur Laufzeit ist ein Proxy für ambientCG nötig (Dev: Vite-Proxy aktiv; Prod: VITE_AMBIENTCG_PROXY setzen).",
|
||||
"material.browse.downloadError": "Download fehlgeschlagen (CORS/Proxy prüfen).",
|
||||
|
||||
// Schraffuren.
|
||||
"resources.hatches.hint": "Muster, Maßstab und Winkel steuern die Schnitt-Schraffur; der Linienstil bestimmt die Stärke der Musterlinien.",
|
||||
"resources.hatches.empty": "Noch keine Schraffuren.",
|
||||
@@ -397,6 +521,30 @@ export const de = {
|
||||
"cmd.aria": "Befehlszeile",
|
||||
"cmd.idle.prompt": "Befehl:",
|
||||
"cmd.idle.placeholder": "Befehl eingeben … (Tab)",
|
||||
"cmd.wall.label": "Wand",
|
||||
"cmd.wall.start": "Startpunkt der Wand:",
|
||||
"cmd.wall.next": "Nächster Punkt:",
|
||||
"cmd.ceiling.label": "Decke",
|
||||
"cmd.ceiling.start": "Erster Umrisspunkt der Decke:",
|
||||
"cmd.ceiling.next": "Nächster Punkt ( Schliessen ):",
|
||||
"cmd.opening.label": "Öffnung",
|
||||
"cmd.opening.windowLabel": "Fenster",
|
||||
"cmd.opening.doorLabel": "Tür",
|
||||
"cmd.opening.wall": "Wand für die Öffnung wählen:",
|
||||
"cmd.opening.pos": "Position entlang der Wand ( Abstand tippen ):",
|
||||
"cmd.opening.kind": "Art",
|
||||
"cmd.opening.hinge": "Anschlag",
|
||||
"cmd.opening.side": "Seite",
|
||||
"cmd.opening.dir": "Richtung",
|
||||
"cmd.opening.sillField": "Brüstung",
|
||||
"cmd.opening.swingField": "Winkel",
|
||||
"cmd.stair.label": "Treppe",
|
||||
"cmd.stair.start": "Startpunkt der Treppe:",
|
||||
"cmd.stair.run": "Laufrichtung / Ende ( Grundform · Auf/Ab ):",
|
||||
"cmd.stair.shape": "Grundform",
|
||||
"cmd.stair.updown": "Auf/Ab",
|
||||
"cmd.stair.stepsField": "Stufen",
|
||||
"cmd.stair.riseField": "Steighöhe",
|
||||
"cmd.line.label": "Linie",
|
||||
"cmd.line.start": "Startpunkt der Linie:",
|
||||
"cmd.line.end": "Endpunkt der Linie:",
|
||||
@@ -405,9 +553,15 @@ export const de = {
|
||||
"cmd.polyline.next": "Nächster Punkt:",
|
||||
"cmd.polyline.close": "Schliessen",
|
||||
"cmd.polyline.undo": "Zurück",
|
||||
"cmd.polyline.closedOpt": "Geschlossen",
|
||||
"cmd.rect.label": "Rechteck",
|
||||
"cmd.rect.first": "Erste Ecke:",
|
||||
"cmd.rect.second": "Gegenüberliegende Ecke:",
|
||||
"cmd.rect.method": "Methode",
|
||||
"cmd.rect.center": "Mittelpunkt:",
|
||||
"cmd.rect.corner": "Ecke:",
|
||||
"cmd.rect.baseEnd": "Zweite Ecke (Basiskante):",
|
||||
"cmd.rect.rise": "Höhe:",
|
||||
"cmd.circle.label": "Kreis",
|
||||
"cmd.circle.center": "Mittelpunkt:",
|
||||
"cmd.circle.radius": "Radius:",
|
||||
@@ -416,6 +570,11 @@ export const de = {
|
||||
"cmd.move.base": "Basispunkt:",
|
||||
"cmd.move.target": "Zielpunkt:",
|
||||
"cmd.move.empty": "Nichts gewählt (erst Objekte wählen).",
|
||||
"cmd.mirror.label": "Spiegeln",
|
||||
"cmd.mirror.first": "Erster Punkt der Spiegelachse:",
|
||||
"cmd.mirror.second": "Zweiter Punkt der Spiegelachse:",
|
||||
"cmd.mirror.empty": "Nichts gewählt (erst Objekte wählen).",
|
||||
"cmd.join.prompt": "Verbinde gewählte Elemente …",
|
||||
"cmd.copy.label": "Kopieren",
|
||||
"cmd.copy.base": "Basispunkt:",
|
||||
"cmd.copy.target": "Zielpunkt (Enter beendet):",
|
||||
@@ -423,6 +582,9 @@ export const de = {
|
||||
"cmd.offset.label": "Versatz",
|
||||
"cmd.offset.pick": "Kurve wählen:",
|
||||
"cmd.offset.side": "Seite oder Distanz:",
|
||||
// Trim (Quick-Trim): auf den wegzuschneidenden Abschnitt klicken; wiederholend.
|
||||
"cmd.trim.label": "Stutzen",
|
||||
"cmd.trim.pick": "Abschnitt zum Wegschneiden anklicken (Esc beendet):",
|
||||
// Editier-Werkzeuge Split / Join / Segment-Löschen (Tastatur: Ctrl+S / Ctrl+J /
|
||||
// Alt+Klick). Labels für Befehlsleiste/Menüs.
|
||||
"edit.split.label": "Teilen",
|
||||
@@ -435,6 +597,8 @@ export const de = {
|
||||
"cmd.field.height": "Höhe",
|
||||
"cmd.field.radius": "Radius",
|
||||
"cmd.field.distance": "Distanz",
|
||||
"cmd.field.thickness": "Dicke",
|
||||
"cmd.edit.point": "Griff ziehen (Tab: Länge/Winkel):",
|
||||
|
||||
// ── Befehle: Import / Gelände ────────────────────────────────────────────
|
||||
"cmd.import.label": "Importieren",
|
||||
@@ -442,6 +606,17 @@ export const de = {
|
||||
"cmd.terrain.label": "Gelände",
|
||||
"cmd.terrain.prompt": "Gelände aus Konturen erzeugen …",
|
||||
|
||||
// ── Flächenbilanz (SIA 416) ──────────────────────────────────────────────
|
||||
"nav.roomBalance": "Flächenbilanz",
|
||||
"balance.title": "Flächenbilanz (SIA 416)",
|
||||
"balance.rooms": "Räume",
|
||||
"balance.summary": "Bilanz",
|
||||
"balance.export": "CSV exportieren",
|
||||
"balance.empty": "Keine Räume vorhanden. Mit dem Raum-Werkzeug erstellen.",
|
||||
// ── Raum-Stempel-Editor ──────────────────────────────────────────────────
|
||||
"room.stamp.editTitle": "Raum-Stempel bearbeiten",
|
||||
"room.stamp.close": "Schliessen",
|
||||
|
||||
// ── Site-/Kontext-Panel (SitePanel) ──────────────────────────────────────
|
||||
"nav.site": "Gelände",
|
||||
"site.title": "Gelände & Kontext",
|
||||
@@ -487,6 +662,28 @@ export const de = {
|
||||
"import.badge.elevation": "Ansicht",
|
||||
"import.badge.drawing": "Zeichnung",
|
||||
|
||||
// ── PDF-Export ───────────────────────────────────────────────────────────
|
||||
"export.title": "PDF exportieren",
|
||||
"export.close": "Schließen",
|
||||
"export.plan": "Plan",
|
||||
"export.scale": "Massstab",
|
||||
"export.paper": "Papierformat",
|
||||
"export.orientation": "Ausrichtung",
|
||||
"export.orientation.portrait": "Hochformat",
|
||||
"export.orientation.landscape": "Querformat",
|
||||
"export.warnFit":
|
||||
"Der Plan passt im gewählten Massstab nicht ganz auf das Blatt — größeres Format oder kleineren Massstab wählen.",
|
||||
"export.confirm": "Exportieren",
|
||||
"export.cancel": "Abbrechen",
|
||||
|
||||
// ── DXF-Export ───────────────────────────────────────────────────────────
|
||||
"exportDxf.title": "DXF exportieren",
|
||||
"exportDxf.hatches": "Schraffuren",
|
||||
"exportDxf.hatches.yes": "Mitexportieren",
|
||||
"exportDxf.hatches.no": "Nur Umrisse",
|
||||
"exportDxf.unitsNote":
|
||||
"Modell-Space in Metern (1:1). Layer entsprechen den Ebenen des Projekts; beim Plot beliebig skalierbar.",
|
||||
|
||||
// ── Drag & Drop (App-weiter Datei-Drop) ──────────────────────────────────
|
||||
"drop.hint": "DXF/DWG-Datei hier ablegen",
|
||||
|
||||
@@ -495,6 +692,77 @@ export const de = {
|
||||
"error.title": "Etwas ist schiefgelaufen",
|
||||
"error.body": "Ein unerwarteter Fehler ist aufgetreten. Details in der Konsole.",
|
||||
"error.reload": "Neu laden",
|
||||
|
||||
// ── Standort-Import (geo.admin / OSM) ─────────────────────────────────────
|
||||
"site.importLocation": "Standort importieren",
|
||||
"ctxImport.title": "Standort importieren",
|
||||
"ctxImport.close": "Schließen",
|
||||
"ctxImport.location": "Ort / Adresse",
|
||||
"ctxImport.searchPlaceholder": "z. B. Bundesplatz Bern",
|
||||
"ctxImport.search": "Suchen",
|
||||
"ctxImport.searching": "Suche…",
|
||||
"ctxImport.noResults": "Keine Treffer.",
|
||||
"ctxImport.searchError": "Suche fehlgeschlagen.",
|
||||
"ctxImport.radius": "Radius",
|
||||
"ctxImport.sources": "Quellen",
|
||||
"ctxImport.src.swissBuildings": "Swisstopo-Gebäude",
|
||||
"ctxImport.src.osmBuildings": "OSM-Gebäude",
|
||||
"ctxImport.src.osmRoads": "OSM-Strassen",
|
||||
"ctxImport.src.osmWater": "OSM-Wasser",
|
||||
"ctxImport.src.osmGreen": "OSM-Grün",
|
||||
"ctxImport.cancel": "Abbrechen",
|
||||
"ctxImport.confirm": "Importieren",
|
||||
"ctxImport.importing": "Importiere…",
|
||||
"ctxImport.working": "Lade Geodaten…",
|
||||
"ctxImport.empty": "Keine Geometrie im gewählten Bereich gefunden.",
|
||||
"ctxImport.importError": "Import fehlgeschlagen.",
|
||||
"ctxImport.imported": "{count} Objekte in {sets} Sätzen importiert.",
|
||||
|
||||
// ── Raum-Befehl ─────────────────────────────────────────────────────────────
|
||||
"cmd.room.label": "Raum",
|
||||
"cmd.room.mode": "Modus",
|
||||
"cmd.room.inside": "Klick in Raum setzen:",
|
||||
"cmd.room.first": "Ersten Raumpunkt setzen:",
|
||||
"cmd.room.next": "Nächsten Punkt setzen ( Enter/Start schließt ):",
|
||||
|
||||
// ── Text-Gruppe (Oberleiste) ─────────────────────────────────────────────
|
||||
"text.group": "Text",
|
||||
"text.style": "Stil",
|
||||
"text.style.none": "— Stil —",
|
||||
"text.font": "Schrift",
|
||||
"text.size": "Grösse",
|
||||
"text.size.custom": "Eigene …",
|
||||
"text.size.customPrompt": "Schriftgrösse in pt:",
|
||||
"text.bold": "Fett",
|
||||
"text.italic": "Kursiv",
|
||||
"text.underline": "Unterstrichen",
|
||||
"text.align.left": "Linksbündig",
|
||||
"text.align.center": "Zentriert",
|
||||
"text.align.right": "Rechtsbündig",
|
||||
"text.add": "Text",
|
||||
"text.add.hint": "Text-Werkzeug — neuen Text platzieren (bald verfügbar)",
|
||||
"text.editTitle": "Text bearbeiten",
|
||||
"text.apply": "Übernehmen",
|
||||
"text.cancel": "Abbrechen",
|
||||
"roomStamp.title": "Raumstempel bearbeiten",
|
||||
"roomStamp.number": "Raumnummer",
|
||||
"roomStamp.name": "Raumname",
|
||||
"roomStamp.nameLine2": "Raumname Zeile 2",
|
||||
"roomStamp.showFloorArea": "Bodenfläche anzeigen",
|
||||
"roomStamp.floorAreaPrefix": "Präfix Bodenfläche",
|
||||
"roomStamp.showUsage": "Nutzung anzeigen",
|
||||
"text.selectedHint": "Formatierung wirkt auf den ausgewählten Text",
|
||||
|
||||
// ── Rich-Text-Editor ────────────────────────────────────────────────────────
|
||||
"rt.bold": "Fett",
|
||||
"rt.italic": "Kursiv",
|
||||
"rt.underline": "Unterstrichen",
|
||||
"rt.strike": "Durchgestrichen",
|
||||
"rt.strikethrough": "Durchgestrichen",
|
||||
"rt.fontSize": "Schriftgrösse",
|
||||
"rt.color": "Farbe",
|
||||
"rt.preset": "Vorlage",
|
||||
"rt.preset.none": "— Vorlage —",
|
||||
} as const;
|
||||
|
||||
export type TranslationKey = keyof typeof de;
|
||||
|
||||
Reference in New Issue
Block a user