Files
dxfmakros/lang/en_GB.json
T
s.ayadi 45044cdcba Add TRO marker editing to SSG_LIB
The TRO markers written by sps_skel (lib/tro_annotate.py) are blocks
TRO_SYM_<type> carrying ID and TYPE as attributes. This wires them into the
existing SSG_LIB mechanisms rather than adding new ones.

The double-click hook and the EATTEDIT override already exist: ***DOUBLECLICK
routes [INSERT] to SSG_BLOCKEDIT, and c:EATTEDIT is undefined and forwarded to
the same dispatcher. So all that was missing was a branch:

  Blockname TRO_*  ->  c:TRO_EDIT (Lisp/Tro_Edit.lsp)  ->  dcl/tro_edit.dcl

Tro_Edit.lsp follows the conventions of the other edit commands: DCL path from
DXFM_DCL, ssg-start/ssg-end around the command, ssg-attrib-read and
ssg-attrib-set-on for the attributes, all user-visible text via ssg-text/
ssg-textf with keys in lang/de_DE.json and en_GB.json. Implied selection is read
before ssg-start, since ssg-start clears it - the same note Gefaellestrecke.lsp
carries.

TYPE is a picklist rather than free text so it cannot drift from the type
catalogue. The list comes from Lisp/tro_types.lsp, generated on the sps_skel side
by "tro_annotate.py --emit-lisp" into DXFM_LISP. If that file is absent the
dialog offers the block's current type and still works.

Loading is lazy: the module is not preloaded in the MNL. The menu macros and the
dispatcher pull it with (ssg-ensure "Tro_Edit") on first use, and the dispatcher
falls back to native EATTEDIT if the module cannot be found. ssg_load.lsp loads
it for the non-menu path.

Menu: SSG_LIB > TRO with "Marker bearbeiten" and "Bearbeiten (Auto)", plus an
entry in the POP501 edit context menu.

The dialog changes attributes only. The marker shape belongs to the block
definition of the type and FB_BLOCK is derived from it, so both follow on the next
tro_annotate.py run; the dialog states this and the command prints a reminder when
the type was changed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 15:41:06 +02:00

665 lines
46 KiB
JSON

{
"texts": {
"omni-alle-winkel": "all angles",
"omni-grad": " deg",
"omni-bogen-keine-gefunden": "No arcs found for %1%2.",
"omni-weiche-keine-gefunden": "No switches found for %1%2.",
"vfc-ursprung": "Origin",
"vfc-block-eingefuegt-xyzref-ksaus": "\n '%1' inserted (XY:%2 Z:%3)\n KS_AUS: X=%4 Y=%5 Z=%6",
"vfl-ja": "\n 1 - Yes",
"vfl-nein": "\n 2 - No",
"vfl-sep-vor-frage": "\n\nInsert additional separator BEFORE the horizontal section?",
"vfl-sep-nach-frage": "\n\nInsert additional separator AFTER the horizontal section?",
"vfl-sep-an-stelle-frage": "\n\nInsert additional separator at this point?",
"vf-winkel-aus-header": "\n\nOutput element (AS_Element) - choose angle:",
"vf-winkel-ein-header": "\n\nInput element (ES_Element) - choose angle:",
"vf-winkel-90": "\n 1 - 90 deg",
"vf-winkel-30": "\n 2 - 30 deg",
"vfl-gf-bogen-winkel-header": "\n\nGF arc - choose angle:",
"vfl-gf-bogen-seite-header": "\nGF arc - choose side:",
"vfl-winkel-30": "\n 1 - 30 deg",
"vfl-winkel-60": "\n 2 - 60 deg",
"vfl-winkel-90": "\n 3 - 90 deg",
"vfl-variokurve-winkel-header": "\n\nVario curve - choose angle:",
"vfl-opt1-90grad": "\n 1 - 90 deg",
"vfl-opt2-60grad": "\n 2 - 60 deg",
"vfl-opt3-30grad": "\n 3 - 30 deg",
"vfl-prompt-wahl-1-3-def1": "\nYour choice (1/2/3) [1]: ",
"vfl-variokurve-seite-header": "\nVario curve - choose side:",
"vfl-variokurve-variante-header": "\nVario curve - choose variant:",
"vfl-variante-aussen": "\n 1 - Outer",
"vfl-variante-innen": "\n 2 - Inner",
"vfl-ist-ziel-vergleich-header": "\n\n>>> ACTUAL-TARGET COMPARISON (ES element):",
"vfl-soll-xyz": "\n Target: X=%1 Y=%2 Z=%3",
"vfl-ist-xyz": "\n Actual: X=%1 Y=%2 Z=%3",
"vfl-abweichung-xyz": "\n Deviation: dX=%1 dY=%2 dZ=%3 mm",
"vfl-m3-titel": "\n VF LINE PATH - Mode 2: path + target height (finished; anchors + solver + build)",
"vfl-m3-alert-gf-modul": "Gefaellestrecke module not loaded!",
"vfl-m3-pfad-waehlen": "\n\nSelect path objects (lines/arcs):",
"vfl-m3-keine-objekte": "\nNo objects selected - aborting.",
"vfl-m3-prompt-startpunkt": "\n\nSelect chain start point (higher side): ",
"vfl-prompt-hoehe-startpunkt": "\nHeight (Z) of the start point [%1]: ",
"vfl-m3-prompt-endpunkt": "\n\nSelect chain end point (target): ",
"vfl-m3-prompt-zielhoehe": "\nTarget height (Z) of the end point [%1]: ",
"vfl-m3-fehler-nicht-sortierbar": "\nERROR: path cannot be sorted (is it connected without gaps?).",
"vfl-m3-alert-eckwinkel": "No matching arc: corner angle %1 deg is not ~30/60/90.\nPlease adjust the angles.",
"vfl-m3-seg-gerade": "\n\nSegment %1/%2: straight L=%3 mm hz=%4",
"vfl-m3-auto-vf": "\n (automatic VF - segment follows directly after a Vario curve)",
"vfl-m3-typ-gerade": "\n Type? 1 = GF (input angle) 2 = VF (bridge)",
"vfl-m3-prompt-gf-neigung": "\n GF slope in degrees [3]: ",
"vfl-m3-hinweis-gf-max": "\n Note: GF max. 3 deg - limited to 3.",
"vfl-m3-seg-bogen": "\n\nSegment %1/%2: corner/arc %3 deg %4",
"vfl-m3-typ-bogen": "\n Type? 1 = GF arc 2 = Vario curve",
"vfl-m3-variante-frage": "\n Vario curve - variant? 1 = Outer 2 = Inner",
"vfl-m3-vf-laeufe": "\n\n[M3a] VF runs found: %1",
"vfl-m3-vf-lauf-noetig": "\n[M3a] Exactly ONE VF run required (GF...VF...GF; Vario curves may lie within the run).",
"vfl-m3-vf-lauf-m3b": "\n[M3a] Several/no VF runs -> M3b later.",
"vfl-m3-vf-lauf-ohne-gerade": "\n[M3a] VF run without a VF straight - aborting.",
"vfl-m3-anker-vorschau-header": "\n M3a ANCHOR PREVIEW (rough estimate; exact values during build)",
"vfl-m3-start-hoehe": "\n Start height Z: %1 mm",
"vfl-m3-ziel-hoehe": "\n Target height Z: %1 mm",
"vfl-m3-delta-h-gesamt": "\n delta-H total: %1 mm (positive = descent)",
"vfl-m3-vf-lauf-segmente": "\n VF run: segment %1..%2",
"vfl-m3-front-anker-vorschau": "\n Front anchor Z: %1 mm (forward from AS)",
"vfl-m3-junction-anker-vorschau": "\n Junction anchor Z: %1 mm (backward from ES)",
"vfl-m3-richtung-auf": "up (rising)",
"vfl-m3-richtung-ab": "down (falling)",
"vfl-m3-richtung-horizontal": "horizontal",
"vfl-m3-richtung-auf-kurz": "Up",
"vfl-m3-richtung-ab-kurz": "Down",
"vfl-m3-bruecke-dh": "\n --> Bridge: delta-H = %1 mm over span %2 mm",
"vfl-m3-bruecke-richtung": "\n Direction: VF-%1",
"vfl-m3-vf-angetrieben": "\n (VF is powered - can RISE and FALL; sign = up/down only)",
"vfl-m3-mittlere-neigung": "\n rough mean slope over span: ~%1 deg",
"vfl-m3-warnung-zu-steil": "\n WARNING: ~slope > 51 deg -> too steep for Vario (magnitude infeasible).",
"vfl-m3-vario-bereich-ok": "\n -> within Vario range (3..51 deg), rough orientation.",
"vfl-m3-anker-hinweis": "\n (anchors above = rough preview; exact values are MEASURED during build)",
"vfl-m3-phase-b1": "\n\n>>> Phase B1: building front run (AS + GF) ...",
"vfl-m3-alert-beginnt-bogen": "Chain starts with an arc - please begin with a straight.",
"vfl-m3-kurve-front-uebersprungen": "\n >>> [M3a] Vario curve in front run - skipped.",
"vfl-m3-standard-vario-header": "\n\n --- STANDARD VARIO (climbing segment) + flat zone ---",
"vfl-m3-front-anker-gemessen": "\n Front anchor (measured): %1 mm",
"vfl-m3-junction-exakt": "\n Junction (exact): %1 mm",
"vfl-m3-kletter-info": "\n Climb height %1 mm | climbers %2 | curves %3 | short VF %4",
"vfl-m3-kein-winkel": "\n NO matching Vario angle -> infeasible (front already built).",
"vfl-m3-gf-verteilung": "\n\n GF distribution: 1 - all at inlet (GF1) 2 - 1/2 GF1 + 1/2 GF2",
"vfl-m3-vert-halb": "1/2 GF1 + 1/2 GF2",
"vfl-m3-vert-ganz": "all GF1",
"vfl-m3-vario-ergebnis": "\n -> Vario %1 (%2), L_VF %3 mm, GF total %4 mm, distribution %5 (GF2 remainder = measured fine correction)",
"vfl-m3-warnung-gf2-negativ": "\n WARNING: body climbs too little - GF2<0 (missing %1 mm). Angle too shallow; dZ not exact.",
"vfl-m3-gf2-ausgleich": "\n GF2 (measured compensation): L=%1 mm",
"vfl-m3-kurve-back-uebersprungen": "\n >>> [M3a] Vario curve in back run - skipped.",
"vfl-m3-nichts-gebaut": "\nNothing built - aborting.",
"vfl-m3-fertig-header": "\n>>> VF line path (mode 2) built! <<<",
"vfl-m3-ziel-soll": "\n Target (nominal): X=%1 Y=%2 Z=%3",
"vfl-m3-es-ist": "\n ES (actual): X=%1 Y=%2 Z=%3",
"vfl-m3-abweichung": "\n Deviation: dX=%1 dY=%2 dZ=%3 mm",
"vfl-m3-laengs-quer": "\n Along KS_AUS axis: %1 mm | across axis (should be ~0): %2 mm",
"vfl-m3-achse-hinweis": "\n (dZ=target height; across KS_AUS axis ~0 => end point lies on the axis)",
"gf-fehler-block-fehlt": "\n ERROR: block '%1' missing",
"gf-fehler-block-fehlt-ausruf": "\n ERROR: block '%1' missing!",
"gf-fehler-blockdatei-fehlt": "\n ERROR: block file not found: %1",
"gf-fehler-keine-linie": "\n Error: no line!",
"gf-laenge-null-uebersprungen": "\n (length 0 - skipped)",
"gf-prompt-linie-waehlen": "\n >> Select line: ",
"gf-status-3dlinie-z": "\n 3D line: Z_start=%1 Z_end=%2",
"gf-status-block-l-z": "\n %1 L=%2 -> Z=%3",
"gf-status-bogen-masse": "\n %1: dx=%2 dz=%3",
"gf-status-gefaellebogen": "\n Slope arc %1 hz=%2%3 -> Z=%4",
"gf-status-hzincl": "\n HzIncl %1 L=%2 hz=%3%4 v=%5%6 -> Z=%7",
"gf-status-hzks": "\n HzKS %1 hz=%2%3 v=%4%5 -> Z=%6",
"gf-status-ks-aus-z": "\n KS_AUS Z=%1",
"gf-warnung-block-fehlt-nullwerte": "\n WARNING: %1 missing - using zero values",
"gf-warnung-ks-fehlt": "\n WARNING: KS_EIN/KS_AUS missing!",
"gf-warnung-ks-fehlt-in": "\n WARNING: KS missing in '%1'",
"gf-warnung-ks-fehlt-in2": "\n WARNING: KS missing in %1",
"kreisel-abstand-ausgabe": "\n-> Distance: %1 mm",
"kreisel-beschriftung-erzeugt": "\n-> Label: %1 (height=%2mm, Arial, centered)",
"kreisel-bestehende-blockdef": "\n-> Using existing block definition: %1",
"kreisel-connect-zusammenfassung": "\n-> Distance: %1 mm Rotation: %2 deg Height: %3 Kreisel type: %4",
"kreisel-eckrad-eingefuegt": "\n-> Eckrad #%1 inserted: %2 at %3,%4 rotation=%5 height=%6",
"kreisel-edit-aktualisiert": "\nKreisel updated: Name=%1 Distance=%2 Height=%3 Rotation=%4",
"kreisel-edit-bestehend": "\n-> Existing: Distance=%1 Rotation=%2 Type=%3",
"kreisel-edit-dialog-fehlt": "Dialog not available: %1",
"kreisel-eingefuegt": "\n-> Kreisel #%1 inserted: %2 (height=%3)",
"kreisel-emsg-distanz-klein": "Distance too small! (%1 < %2)",
"kreisel-hoehe-aus-3dpunkt": "\n-> Height taken from 3D point: %1",
"kreisel-hoehe-aus-basispunkt": "\n-> Height taken from base point: %1",
"kreisel-hoehe-aus-startpunkt": "\n-> Height taken from start point: %1",
"kreisel-hoehe-von-bestehendem": "\n-> Height taken from existing Kreisel: %1",
"kreisel-insert-zusammenfassung": "\n-> Rotation: %1 Height: %2 Kreisel type: %3",
"kreisel-labelsetup-fertig": "\nNew settings: Height=%1, Colour=%2, Y offset=%3, Font=Arial",
"kreisel-neue-beschriftungsposition": "\nNew label position: X=%1 Y=%2",
"kreisel-neue-blockdef": "\n-> New block definition: %1",
"kreisel-neue-texthoehe": "\nNew text height: %1",
"kreisel-params-default-hoehe": "\nDefault height: %1",
"kreisel-params-default-laenge": "\nDefault length: %1",
"kreisel-params-durchmesser": "\nDiameter: %1",
"kreisel-params-typ": "\nKreisel type: %1",
"kreisel-prompt-abstand": "\nDistance (tangent length) <%1>: ",
"kreisel-prompt-abstand-oben": "\nDistance above Kreisel centre <%1>: ",
"kreisel-prompt-hoehe-z": "\nHeight (Z coordinate) <%1>: ",
"kreisel-prompt-neue-hoehe": "\nNew height <%1>: ",
"kreisel-prompt-neuer-abstand": "\nNew distance <%1>: ",
"kreisel-prompt-schriftfarbe": "\nFont colour (1=Red,2=Yellow,3=Green,4=Cyan,5=Blue,6=Magenta,7=White) <%1>: ",
"kreisel-prompt-schrifthoehe": "\nFont height <%1>: ",
"kreisel-prompt-texthoehe": "\nText height <%1>: ",
"kreisel-prompt-x-abstand": "\nX distance from AN8 centre <%1>: ",
"kreisel-prompt-y-abstand": "\nY distance from AN8 centre <%1>: ",
"kreisel-redraw-bestehend": "\n-> Existing: Distance=%1 Rotation=%2 Height=%3 Type=%4",
"kreisel-redraw-fertig": "\nKreisel redrawn. Distance=%1",
"kreisel-script-distanz-klein": "\n[Connect] Distance too small: %1",
"kreisel-textstil-erstellt": "\n-> Text style '%1' created with Arial",
"kreisel-typ-prompt": "\nPlease choose <%1>: ",
"omni-bogen-info-antriebsart": "\n Drive type: %1",
"omni-bogen-info-breite": "\n Width: %1",
"omni-bogen-info-kurvenwinkel": "\n Curve angle: %1",
"omni-bogen-info-laenge": "\n Length: %1",
"omni-bogen-info-profiltyp": "\n Profile type: %1",
"omni-bogen-info-radius": "\n Radius: %1",
"omni-bogen-nicht-gefunden": "\nNo arc with Sivas ID '%1' found.",
"omni-dxf-eingefuegt": "\n[OMNI] %1 inserted. Height=%2 Rotation=%3%4",
"omni-edit-aktualisiert": "\n[OMNI] Element updated: %1 Height=%2 Rotation=%3",
"omni-edit-dxf-nicht-gefunden": "DXF not found: %1",
"omni-einfuegen-info": "\n[OMNI] Inserting: %1 (%2)",
"omni-fehler-dxf-nicht-gefunden": "\n[OMNI] ERROR: DXF not found: %1",
"omni-insert-block-eingefuegt": "\n[OMNI] %1 inserted. Length=%2 mm",
"omni-laenge-ueberschritten": "The requested travel path length of %1 mm exceeds the maximum length of %2 mm of the travel path profile.\nPlease redefine!",
"omni-weiche-info-breite": "\n Width: %1",
"omni-weiche-info-kurvenrichtung": "\n Curve direction:%1",
"omni-weiche-info-kurvenwinkel": "\n Curve angle: %1",
"omni-weiche-info-laenge": "\n Length: %1",
"omni-weiche-info-profiltyp": "\n Profile type: %1",
"omni-weiche-info-schaltungstyp": "\n Switch type: %1",
"omni-weiche-info-weichentyp": "\n Type of switch: %1",
"omni-weiche-info-wklaenge": "\n WK length: %1",
"omni-weiche-nicht-gefunden": "\nNo switch with Sivas ID '%1' found.",
"vfc-3dlinie-start-ende": "\n 3D line:\n Start: X=%1 Y=%2 Z=%3\n End: X=%4 Y=%5 Z=%6",
"vfc-3dpolylinie-start-ende": "\n 3D polyline:\n Start Z=%1 End Z=%2",
"vfc-block-einfuegepunkt": "\n Block insertion point: X=%1 Y=%2 Z=%3",
"vfc-block-eingefuegt-ksaus": "\n '%1' inserted\n KS_AUS: X=%2 Y=%3 Z=%4",
"vfc-delta-l-h-richtung": "\n %1L=%2 mm %1H=%3 mm Travel direction=%4%5",
"vfc-endpunkt-xyz": "\n End point: X=%1 Y=%2 Z=%3",
"vfc-endpunkt-xyz-dxdz": "\n End point: X=%1 Y=%2 Z=%3 (dx=%4 dz=%5)",
"vfc-fahrtrichtung-ergebnis": "\n>>> Travel direction: %1%2",
"vfc-fehler-block-datei-fehlt": "\n ERROR: block file not found: %1",
"vfc-fehler-block-nicht-in-bibliothek": "\n ERROR: block '%1' not in library",
"vfc-fehler-block-nicht-in-bibliothek-abgebrochen": "\n ERROR: block '%1' not in library - cancelled",
"vfc-fehler-ks-fehlen": "\n ERROR: KS_EIN/KS_AUS missing in '%1'",
"vfc-fehler-ungueltiger-einfuegepunkt": "\n ERROR: invalid insertion point for '%1'",
"vfc-fuege-block-ein-hz": "\n Inserting block '%1'... (hz=%2%3)",
"vfc-fuege-block-ein-rotation-hz": "\n Inserting block '%1' (rotation %2%3 hz=%4%5)",
"vfc-fuege-ein-lwhz": "\n Inserting '%1' (L=%2 mm, W=%3%4 hz=%5%6)",
"vfc-ks-aus-xyz": "\n KS_AUS: X=%1 Y=%2 Z=%3",
"vfc-lade-block": "\n Loading block: %1 ...",
"vfc-laenge-uebersprungen": "\n Length=%1 mm -> skipped",
"vfc-punkt-auf-objekt": "\n Point on object: Z=%1 mm",
"vfe-as30-mass": "\n AS_30_rechts: dx=%1 mm, dz=%2 mm",
"vfe-block-fehlt-abbruch": "\n ERROR: block '%1' not in library - cancelled",
"vfe-bogen-nicht-vorhanden": "\n %1 -> arc not available",
"vfe-delta-info": "\nΔL=%1 mm ΔH=%2 mm Direction=%3",
"vfe-empfohlener-winkel": "\n>>> Recommended angle: %1",
"vfe-es30-mass": "\n ES_30_rechts: dx=%1 mm, dz=%2 mm",
"vfe-extrahiere-block-mass": "\n Extracting %1 dimensions...",
"vfe-gefaellebogen-links-mass": "\n Slope arc left: dx=%1 dz=%2 mm",
"vfe-gefaellebogen-rechts-mass": "\n Slope arc right: dx=%1 dz=%2 mm",
"vfe-gefaellebogen-seite-dx": "\n Slope arc %1: dx=%2 mm",
"vfe-hz-incl-status": "\n HzIncl %1 L=%2 hz=%3 v=%4 -> Z=%5",
"vfe-hz-rot-status": "\n HzRot %1 hz=%2 v=%3 -> Z=%4",
"vfe-hz-rotks-status": "\n HzRotKS %1 hz=%2 -> Z=%3",
"vfe-hz-scaleks-status": "\n HzScaleKS %1 %2mm hz=%3 -> Z=%4",
"vfe-ks-fehlt-startpunkt": "\n WARNING: KS missing in '%1' - using start point",
"vfe-step1-as30": "\n\n1/15: %1 (0 deg)",
"vfe-step2": "\n\n2/15: Buffer section 400mm (%1 deg hz, 3 deg vert, KS_EIN)",
"vfe-step3": "\n\n3/15: Separator (300mm, %1 deg hz, 3 deg vert)",
"vfe-step4": "\n\n4/15: %1 (start, %2 deg hz, 0 deg vert, KS_EIN)",
"vfe-step5-strecke": "\n\n5/15: Slope section (3 deg, L=%1 mm)",
"vfe-step7": "\n\n7/15: %1 (3 deg inclined)",
"vfe-step8-ab": "\n\n8/15: Slope section (%1 deg, L=%2 mm)",
"vfe-step8-auf": "\n\n8/15: Incline section (%1 deg, L=%2 mm)",
"vfe-tabelle-zeile": "\n %1 %2 mm %3 mm ",
"vfe-tabelle-zeile-fehler": "\n %1 --- --- ERROR",
"vfl-20m-hinweis": "\n >>> NOTE: conveyor longer than 20 m (%1 m) - motor station recommended!",
"vfl-block-erstellt": "\n>>> Block '%1' (%2) created and inserted.",
"vfl-fehler-rest-nicht-baubar": "\n ERROR: remainder cannot be built (too steep/too short for tail motor+GF2+separator+ES). Please continue drawing or plan flatter.",
"vfl-fuege-block-ein": "\n Inserting %1 ...",
"vfl-hinweis-gf2-minimum": "\n NOTE: calculated GF2=%1 mm < minimum %2 mm -> raised to minimum (ES therefore ends a bit further on; see actual-vs-target report).",
"vfl-horizontale-zwischenstrecke": "\n\nHorizontal intermediate section (0 deg, L=%1 mm)",
"vfl-kettenende-modus-ziel": "\n>>> Chain-end mode: target dL=%1 mm, dH=%2 mm (%3). GF2 varies with the angle.",
"vfl-prompt-hoehe-endpunkt": "\nHeight (Z) of the end point [%1]: ",
"vfl-prompt-hoehe-kettenende": "\nHeight (Z) of the chain end (ES element) [%1]: ",
"vfl-prompt-wahl-bis-n": "\nYour choice (1-%1) [1]: ",
"vfl-segment-gf-nicht-erlaubt": "\n Segment would be GF (too steep) or not buildable - not allowed within a VF unit.\n Please draw flatter/rising or end the conveyor.",
"vfl-winkel-option": "\n %1 - %2 deg (L_GF=%3 mm L_VF=%4 mm)",
"vfs-as90-mass": "\n AS_90: dx=%1 dz=%2",
"vfs-berechnung-parameter": "\nΔL=%1 mm ΔH=%2 mm Direction=%3",
"vfs-block-fehlende-item": "\n - %1",
"vfs-block-fehler-pfad": "\n ERROR: DXFM_BLOCKS = %1",
"vfs-bogen-ab-block-fehlt": "\n ERROR ab_%1: block not loaded!",
"vfs-bogen-ab-ks-fehlt": "\n ERROR ab_%1: KS missing!",
"vfs-bogen-ab-ok": "\n OK ab_%1: dx=%2 dz=%3",
"vfs-bogen-auf-block-fehlt": "\n ERROR auf_%1: block not loaded!",
"vfs-bogen-auf-ks-fehlt": "\n ERROR auf_%1: KS missing!",
"vfs-bogen-auf-ok": "\n OK auf_%1: dx=%2 dz=%3",
"vfs-empfohlener-winkel": "\n>>> Recommended angle: %1%2",
"vfs-es90-mass": "\n ES_90: dx=%1 dz=%2",
"vfs-fehler-winkel-tabelle": "\n ERROR: angle %1 not in arc table!",
"vfs-schritt-as": "\n\n1/11: %1 (hz=%2%3)",
"vfs-schritt5-bogen1": "\n\n5/11: %1 (3 deg inclined)",
"vfs-tabelle-zeile": "\n %1%2 %3 mm %4 mm ",
"vfs-tabelle-zeile-fehler": "\n %1%2 --- --- ERROR",
"vfs-vf-eingang-gf1": "\n\n[VF-Eingang] Slope section GF1 (3 deg, L=%1 mm)",
"kreisel-abbruch-befehl": "\nCommand cancelled.",
"kreisel-abgebrochen": "\nCancelled.",
"kreisel-connect-erfolgreich": "\nKreisel Connect successful!",
"kreisel-connect-header": "\n--- Define Kreisel by line (AN -> SP) ---",
"kreisel-eckrad-beruehrpunkt": "\nTangent point Eckrad (tangent): ",
"kreisel-eckrad-fehler-identisch": "\nError: tangent point and direction point are identical!",
"kreisel-eckrad-richtung": "\nDirection to circle centre: ",
"kreisel-emsg-kein-block": "No block selected!",
"kreisel-emsg-kein-kreisel-block": "Not a Kreisel block! (attribute ABSTAND missing)",
"kreisel-fehler-keine-entities": "\nError: no entities to create block!",
"kreisel-insert-fertig": "\nKreisel module inserted.",
"kreisel-params-attribute-header": "\nAttributes in block:",
"kreisel-params-header": "\n=== Kreisel parameters ===",
"kreisel-prompt-basispunkt": "\nBase point (AN side): ",
"kreisel-prompt-block-auswaehlen": "\nSelect Kreisel block: ",
"kreisel-prompt-endpunkt": "\nEnd point (SP side, outer): ",
"kreisel-prompt-rotation": "\nRotation in degrees <0>: ",
"kreisel-prompt-startpunkt": "\nStart point (AN side, outer): ",
"kreisel-quick-fertig": "\nQuick insert done.",
"kreisel-start-connect": "Kreisel Smart Connect",
"kreisel-start-eckrad": "Insert Eckrad",
"kreisel-start-edit": "Edit Kreisel",
"kreisel-start-insert": "Insert Kreisel module",
"kreisel-start-quick": "Kreisel quick insert",
"kreisel-start-redraw": "Redraw Kreisel",
"kreisel-start-script-connect": "Kreisel script connect",
"kreisel-start-script-insert": "Kreisel script insert",
"kreisel-typ-opt-pin": "\n[2] PIN",
"kreisel-typ-opt-standard": "\n[1] STANDARD (without PIN)",
"kreisel-warn-blockpfad": "\n[KreiselInsert] WARNING: block path not determinable!",
"kreisel-warn-core-fehlt": "\n[KreiselInsert] WARNING: ssg_core.lsp not found - using defaults.",
"omni-abbruch": "\nCancelled.",
"omni-abbruch-bogen": "\n[ARC] Cancelled.",
"omni-abbruch-omni": "\n[OMNI] Cancelled.",
"omni-abbruch-weiche": "\n[SWITCH] Cancelled.",
"omni-bogen-dialog-ladefehler": "Arc dialog could not be loaded.",
"omni-edit-kein-block": "No block selected!",
"omni-edit-kein-element": "No Omniflo element recognised! (ARTINR/block name not in catalog)",
"omni-edit-prompt-auswahl": "\nSelect Omniflo element: ",
"omni-fehler-dxfm-data": "\n[OMNI] ERROR: DXFM_DATA not set!",
"omni-fehler-dxfm-omniflo": "\n[OMNI] ERROR: DXFM_OMNIFLO not set!",
"omni-info-bogen-prompt": "\nEnter Sivas ID of the arc: ",
"omni-info-weiche-prompt": "\nEnter Sivas ID of the switch: ",
"omni-insert-keine-attribute": "\n[OMNI] No attributes found on source block.",
"omni-prompt-drehwinkel": "\nSpecify rotation angle: ",
"omni-prompt-einfuegepunkt": "\nSelect insertion point: ",
"omni-prompt-endpunkt-fahrstrecke": "\nSelect end point of the travel path: ",
"omni-weiche-dialog-ladefehler": "Switch dialog could not be loaded.",
"prompt-wahl-1-2-3-4": "\nYour choice (1/2/3/4) [1]: ",
"vfc-alert-keine-gueltige-linie": "No valid line selected!",
"vfc-bitte-3dlinie-foerderstrecke": "\nPlease select a 3D line for the conveyor section:",
"vfc-bks-weltkoordinaten": "\n UCS set to world coordinates.",
"vfc-eingabemodus-3dlinie": "\n 1 - Select 3D line (start and end point with height)",
"vfc-eingabemodus-header": "\n\nSelect input mode:",
"vfc-eingabemodus-werte": "\n 2 - Enter values manually",
"vfc-fahrtrichtung-0": "\n 1 - 0%1 (X axis +, East)",
"vfc-fahrtrichtung-180": "\n 3 - 180%1 (X axis -, West)",
"vfc-fahrtrichtung-270": "\n 4 - 270%1 (Y axis -, South)",
"vfc-fahrtrichtung-90": "\n 2 - 90%1 (Y axis +, North)",
"vfc-fahrtrichtung-header": "\n\nSelect travel direction:",
"vfc-fehler-keine-linie": "\n ERROR: No line or polyline selected!",
"vfc-foerderrichtung-ab": "\n Conveying direction: DOWN",
"vfc-foerderrichtung-auf": "Up",
"vfc-foerderrichtung-menu": "\nConveying direction:\n 1 - UP\n 2 - DOWN",
"vfc-gf-verteilung-header": "\n\nDistribution of slope sections (front/rear):",
"vfc-gf-verteilung-1": "\n 1 - Even (L_GF1 = L_GF2 = L_GF/2)",
"vfc-gf-verteilung-2": "\n 2 - Front minimum, rear remainder",
"vfc-gf-verteilung-3": "\n 3 - Rear minimum, front remainder",
"vfc-gf-verteilung-4": "\n 4 - Enter custom values",
"vfc-kein-objekt-gewaehlt": "\n No object selected.",
"vfc-label-von-bis": ": from %1mm to %2mm, ",
"vfc-linie-polylinie-waehlen": "\n >> Select 3D line or polyline: ",
"vfc-modus-3dlinie-fallback": "Line",
"vfc-modus-3dlinie-header": "\n\n>>> MODE: Select 3D line <<<",
"vfc-modus-werteingabe-header": "\n\n>>> MODE: Manual value entry <<<",
"vfc-objekt-block-waehlen": "\n >> Select object (block): ",
"vfc-prompt-delta-h": "\n%1H - height difference (mm): ",
"vfc-prompt-delta-l": "\n%1L - horizontal distance (mm): ",
"vfc-prompt-startpunkt-aus": "\nSelect start point for AUS_Element: ",
"vfc-prompt-wahl-1-2-ohne-default": "\nYour choice (1/2): ",
"vfc-status-ok": " OK",
"vfc-warnung-ks-nicht-gefunden": "\n WARNING: KS_EIN/KS_AUS not found!",
"vfc-block-erstellt-eingefuegt": "\n>>> Block '%1' created and inserted.",
"vfc-fehler-keine-entities": "\n>>> ERROR: No entities found for block!",
"vfc-banner-titel": "\n VARIOFOERDERER GENERATOR v26.0",
"vfc-alert-keine-typen": "No types registered!\nCheck vf_standard.lsp and vf_etage.lsp.",
"vfc-typ-vorgewaehlt": "\n>>> Type preselected: %1",
"vfc-anlagen-typ-header": "\n\nSelect system type:",
"vfc-typ-option": "\n %1 - %2",
"vfc-prompt-wahl-1-n": "\nYour choice (1-%1) [1]: ",
"vfc-typ-gewaehlt": "\n>>> Type: %1",
"vfc-naechste-vf-nummer": "\n>>> Next VF number: VF%1",
"vfc-seite-header": "\n\nSelect side:",
"vfc-seite-rechts": "\n 1 - Right",
"vfc-seite-links": "\n 2 - Left",
"vfc-seite-gewaehlt": "\n>>> Side: %1",
"vfc-hinweis-horizontal-moeglich": "\n\n>>> Note: a horizontal VarioFoerderer ( 0%1) is additionally possible for this %2L/%2H!",
"vfc-alert-kein-winkel": "No suitable angle found!\n%1L=%2 mm, %1H=%3 mm, direction=%4",
"vfc-einzige-variante-horizontal": "\n\n>>> Only valid variant: horizontal VarioFoerderer",
"vfc-einziger-winkel": "\n\n>>> Only valid angle: %1%2",
"vfc-mehrere-winkel-header": "\n\nSeveral valid angles available. Please choose:",
"vfc-winkel-option-horizontal": "\n %1 - Horizontal VarioFoerderer (0%2) (L_GF=%3 mm, L_VF=%4 mm)",
"vfc-winkel-option": "\n %1 - %2%3 (L_GF=%4 mm, L_VF=%5 mm)",
"vfc-prompt-winkel-waehlen": "Select angle (1-%1) [1]: ",
"vfc-zus-horizontal": "\n>>> Horizontal VarioFoerderer L_GF: %1 mm L_VF: %2 mm",
"vfc-zus-winkel": "\n>>> Angle: %1%2 L_GF: %3 mm L_VF: %4 mm",
"vfc-prompt-lgf1-vorne": "\nL_GF1 front (mm) [%1]: ",
"vfc-lgf2-hinten": "\n L_GF2 rear: %1 mm",
"vfc-zus-lgf": "\n>>> L_GF1=%1 mm L_GF2=%2 mm",
"vfc-einfuegen-frage": "\n\nDo you want to insert the conveyor system?",
"vfc-einfuegen-optionen": "\n 1 - Yes, insert modules\n 2 - No, cancel",
"vfc-vorgang-abgebrochen": "\nProcess cancelled.",
"vfs-dlg-richtung-auf": "Up",
"vfs-dlg-richtung-ab": "Down",
"vfs-dlg-winkel-horizontal": "Horizontal (GF=%1 mm, VF=%2 mm)",
"vfs-dlg-winkel-option": "%1%2 (GF=%3 mm, VF=%4 mm)",
"vfs-dlg-verteilung-1": "Even (L_GF1 = L_GF2 = L_GF/2)",
"vfs-dlg-verteilung-2": "Front minimum, rear remainder",
"vfs-dlg-verteilung-3": "Rear minimum, front remainder",
"vfs-dlg-verteilung-4": "Enter custom values",
"vfs-edit-kein-vf": "Block %1 is not a VarioFoerderer conveyor.",
"vfs-edit-keine-xdata": "VarioFoerderer %1 was not created with this dialog (Etage/Linienzug/legacy) and cannot be edited here.",
"vfs-edit-neu-aufgebaut": "\nVarioFoerderer %1 rebuilt.",
"vfe-alert-bib-nicht-init": "Etage library not initialised!",
"vfe-berechnung-header": "\n ETAGE CALCULATION FOR ALL ANGLES",
"vfe-bib-bereits-init": "\n Etage library already initialised.",
"vfe-bib-init-erfolg": "\n Etage library successfully initialised.",
"vfe-bib-initialisiere": "\n Initialising Etage library...",
"vfe-ergebnistabelle-header": "\n RESULT TABLE (L_GF = total of both GF sections)",
"vfe-extrahiere-as30": "\n Extracting AS_30_rechts dimensions...",
"vfe-extrahiere-es30": "\n Extracting ES_30_rechts dimensions...",
"vfe-kein-winkel-gefunden": "\n>>> NO matching angle found!",
"vfe-status-gueltig": "VALID",
"vfe-status-ungueltig": "INVALID (negative length)",
"vfe-step5-skip": "\n\n5/15: L_GF1 (skipped)",
"vfe-step6": "\n\n6/15: deflection station (500mm, 3 degrees inclined)",
"vfe-step8-skip": "\n\n8/15: L_VF (skipped)",
"vfe-tabelle-spalten": "\n Angle L_GF (mm) L_VF (mm) Status",
"vfe-warn-block-as30-fehlt": "\n WARNING: block AS_Element_30_rechts missing - using defaults",
"vfe-warn-block-es30-fehlt": "\n WARNING: block ES_Element_30_rechts missing - using defaults",
"vfe-warn-block-fehlt-links": "\n WARNING: block missing - using defaults (left)",
"vfe-warn-block-fehlt-rechts": "\n WARNING: block missing - using defaults (right)",
"vfe-warn-kein-ks-links": "\n WARNING: no KS - using defaults (left)",
"vfe-warn-kein-ks-rechts": "\n WARNING: no KS - using defaults (right)",
"vfe-warn-ks-fehlt-standard": "\n WARNING: KS missing - using defaults",
"vfe-warn-lisp-pfad": "\n[vf_etage] WARNING: Lisp path not determinable - cannot load vf_core.lsp!",
"vfl-abgebrochen-kein-ziel": "\n Cancelled - no target point selected.",
"vfl-bogen-ab3-uebergang": "\n\nVario_Bogen_ab_3 (transition horizontal -> 3 degrees)",
"vfl-bogen-auf3-uebergang": "\n\nVario_Bogen_auf_3 (transition 3 degrees -> horizontal)",
"vfl-gf-verteilung-ganz-einlauf": "\n 2 - Entire buffer section at inlet (GF1), no GF2",
"vfl-gf-verteilung-haelfte": "\n 1 - 1/2 GF at outlet (GF2), 1/2 GF at inlet (GF1)",
"vfl-gf-verteilung-header": "\n\nBuffer section (GF) - choose distribution:",
"vfl-ist-endpunkt-frage": "\n\nIs this the end point of the conveyor?",
"vfl-ist-kettenende-frage": "\n\nIs this the chain end (ES element)?",
"vfl-ja-motorstation-kettenende": "\n 3 - Yes (set motor station, define chain end)",
"vfl-ja-nur-motorstation": "\n 1 - Yes (set motor station only)",
"vfl-ja-separator-es": "\n 1 - Yes (set separator + ES element)",
"vfl-linie-zu-kurz-simple": "\n Line too short - skipped.",
"vfl-linie-zu-kurz-uebersprungen": "\n Line too short (or against travel direction) - skipped.",
"vfl-mehrere-winkel-header": "\n\nSeveral valid angles - please choose the desired angle:",
"vfl-modus1-beschreibung": "\nMixed slope-section/VarioFoerderer chain along a freely",
"vfl-modus1-header": "\n VF-LINIENZUG - Mode 1: Manual entry",
"vfl-naechstes-element-vf": "\n\nNext element in the VarioFoerderer:",
"vfl-nein-weiterbauen": "\n 2 - No (continue building)",
"vfl-opt-auf-ab-foerderer": "\n 3 - Up/down conveyor (line with height difference)",
"vfl-opt-horizontaler-foerderer": "\n 1 - Horizontal conveyor (line without height difference)",
"vfl-opt-vario-kurve": "\n 2 - Vario curve (30/60/90 degrees)",
"vfl-prompt-wahl-1-2-def2": "\nYour choice (1/2) [2]: ",
"vfl-prompt-wahl-1-3-def2": "\nYour choice (1/2/3) [2]: ",
"vfl-prompt-wahl-1-3-def3": "\nYour choice (1/2/3) [3]: ",
"vfl-sep-horizontal-info": "\n [horizontal] Separator (300 mm, 0 degrees)",
"vfs-berechnung-header": "\n CALCULATION FOR ALL ANGLES (Standard)",
"vfs-block-fehlende-header": "\n The following block files are missing:",
"vfs-ergebnistabelle-header": "\n RESULT TABLE",
"vfs-extrahiere-aus": "\n Extracting AUS_Element dimensions...",
"vfs-extrahiere-bogen": "\n Extracting arc dimensions...",
"vfs-extrahiere-ein": "\n Extracting EIN_Element dimensions...",
"vfs-fehler-block-as90": "\n ERROR: block AS_Element_90_links not loaded!",
"vfs-fehler-block-es90": "\n ERROR: block ES_Element_90_links not loaded!",
"vfs-fehler-ks-as90": "\n ERROR: KS_EIN/KS_AUS missing in AS_90!",
"vfs-fehler-ks-es90": "\n ERROR: KS_EIN/KS_AUS missing in ES_90!",
"vfs-fehler-lib-nicht-init": "\n ERROR: library not correctly initialised (AUS/EIN dimensions missing)!",
"vfs-kein-winkel-gefunden": "\n>>> NO matching angle found!",
"vfs-lib-bereits-init": "\n Standard library already initialised.",
"vfs-lib-init-erfolg": "\n Standard library successfully initialised.",
"vfs-lib-init-start": "\n Initialising standard library...",
"vfs-status-gueltig": "VALID",
"vfs-status-ungueltig": "INVALID (negative length)",
"vfs-tabelle-spalten": "\n Angle L_GF (mm) L_VF (mm) Status",
"vfs-vf-eingang-gf1-skip": "\n\n[VF-Eingang] Slope section GF1 (skipped)",
"vfs-vf-eingang-separator": "\n[VF-Eingang] Separator (300 mm, 3 degrees inclined)",
"vfs-vf-eingang-umlenk": "\n[VF-Eingang] Deflection station (500 mm, 3 degrees inclined)",
"vfs-warn-lisppfad": "\n[vf_standard] WARNING: Lisp path not determinable - cannot load vf_core.lsp!",
"dim-switch-modus": "\nMode switched to: %1",
"dim-switch-blocks": "\n DXFM_BLOCKS = %1",
"dim-switch-omniflo": "\n DXFM_OMNIFLO = %1",
"dim-batch-fertig": "\nConversion to %1 complete: %2 GF, %3 VF rebuilt (%4 already in target dimension).",
"sprache-gewechselt": "\nLanguage switched to: %1",
"cmd-block-auswaehlen": "\nSelect block: ",
"cmd-kein-block-ausgewaehlt": "\nNo block selected.",
"cmd-kreisel-bearbeiten": "\nEdit Kreisel: %1",
"cmd-eckrad-bearbeiten": "\nEdit Eckrad: %1",
"cmd-gefaelle-bearbeiten": "\nEdit Gefaellestrecke: %1",
"cmd-variofoerderer-bearbeiten": "\nEdit VarioFoerderer: %1",
"gf-edit-kein-gf": "Block %1 is not a Gefaellestrecke.",
"gf-edit-nur-einfach": "Only simple Gefaellestrecken (without arcs) can be edited via the dialog.\nTYP: %1",
"gf-edit-neu-aufgebaut": "\nGefaellestrecke %1 rebuilt.",
"gf-vf-modul-fehlt": "VarioFoerderer module not loaded!",
"gf-vf-gebaut": "\n-> Parallel VarioFoerderer built (2000 mm beside the Gefaellestrecke, opposite direction, rising).",
"cmd-omniflo-bearbeiten": "\nEdit Omniflo element: %1",
"cmd-attribute-bearbeiten": "\nEdit attributes: %1",
"layer-prompt-ziel-layer": "\nSelect object on the target layer: ",
"layer-prompt-objekt": "\nSelect object: ",
"layer-prompt-referenz-objekt": "\nSelect reference object (determines type and layer): ",
"layer-prompt-typ-ermittlung": "\nClick again to determine the type: ",
"layer-prompt-ausblenden": "\nClick layer to hide (Enter=End): ",
"layer-prompt-einfrieren": "\nClick layer to freeze (Enter=End): ",
"layer-prompt-aktiv-bleibt": "\nSelect object on the layer that stays ACTIVE: ",
"layer-prompt-name-loeschen": "\nLayer name to delete: ",
"layer-err-kein-objekt": "No object selected.",
"layer-err-kein-ziel-layer": "No target layer selected.",
"layer-err-kein-ziel-layer-kurz": "No target layer.",
"layer-err-keine-passenden-objekte": "No matching objects found.",
"layer-abgebrochen": "Cancelled.",
"layer-err-kein-referenz-objekt": "No reference object selected.",
"layer-err-aktiv-nicht-ausschalten": "Cannot turn off the active layer!",
"layer-err-aktiv-nicht-einfrieren": "Cannot freeze the active layer!",
"layer-aktiver-layer": "\nActive layer: %1",
"layer-objekt-auf-layer": "\nObject is on layer: %1",
"layer-nur-layer-sichtbar": "\nOnly layer '%1' is visible.",
"layer-geloescht": "\nLayer '%1' deleted.",
"layer-leerer-geloescht": "\nEmpty layer '%1' deleted.",
"layer-existiert-nicht": "Layer '%1' does not exist.",
"layer-ques-typ-wechseln": "Change layer of these %1 objects?",
"layer-ques-alle-loeschen": "Delete all objects on layer '%1'?",
"core-start-titel": "\n***** %1 *****\n",
"core-errhan-fehler": "\nError: ",
"core-blockname-exists": "Block name '%1' already exists - skipping.",
"core-dwg-not-found": "\nERROR: Block not found: %1",
"exp-cfg-not-found": "\n[export] WARNING: %1 not found/empty, using defaults.",
"exp-check-ids": "\n[%1] Checking and assigning IDs...",
"exp-update-hoehe-drehung": "\n[%1] Updating height/rotation...",
"exp-collect-blocks": "\n[%1] Collecting relevant blocks...",
"exp-no-blocks-found": "\n[%1] No relevant blocks found.",
"exp-blocks-found": "\n[%1] %2 blocks found.",
"exp-output-dir": "\n[%1] Output folder: %2",
"exp-file-open-error": "\n[%1] ERROR: Cannot open file: %2",
"exp-json-written": "\n[%1] JSON written: %2",
"exp-calling-python": "\n[%1] Calling Python...",
"exp-export-started": "\n[%1] Export started: %2",
"exp-dxfm-lib-missing": "\n[%1] ERROR: Environment variable DXFM_LIB is not set - BricsCAD was probably not started via bin/start_briscad.bat. CSV/JSON were written, the Python call is skipped.",
"exp-python-not-found": "\n[%1] ERROR: Python script not found: %2",
"exp-python-exe": "\n[%1] Interpreter: %2",
"exp-export-done": "\n[%1] Export finished: %2",
"exp-python-call-failed": "\n[%1] ERROR: Could not start Python (WScript.Shell unavailable).",
"exp-python-error": "\n[%1] ERROR: Python exited with code %2. Log: %3",
"exp-python-store-hint": "\n NOTE: No real Python interpreter was found (on Windows 11 'python' points\n to the WindowsApps placeholder). Fix: run bin/install_py.bat (creates .venv)\n and restart BricsCAD via bin/start_briscad.bat, or set the full path to\n python.exe in cfg/export.cfg under [python] interpreter=.",
"exp-csv-missing": "\n[%1] ERROR: Python reported success but the CSV is missing: %2. Log: %3",
"exp-omni-no-inserts": "\n[OMNI_UPDATE] No INSERT blocks in the drawing.",
"exp-omni-updated": "\n[OMNI_UPDATE] %1 elements updated (HEIGHT, ROTATION).",
"id-new-assigned": "\n[ID] New ID assigned: %1",
"id-invalid-block": "\n[ID] ERROR: Not a valid INSERT block!",
"id-check-no-blocks": "\n[IDSCHECK] No relevant blocks found.",
"id-check-missing-set": "\n[IDSCHECK] Missing ID set: %1 (block %2)",
"id-check-duplicate": "\n[IDSCHECK] Duplicate ID %1 -> new ID %2 (block %3)",
"id-check-done": "\n[IDSCHECK] Done. %1 duplicates corrected.",
"id-check-corrected": "\n[IDSCHECK] %1 IDs corrected.",
"id-select-block-prompt": "\nSelect block: ",
"id-generate-invalid": "\n[IDGENERATE] No valid block selected.",
"dialog-nicht-verfuegbar": "Dialog not available.",
"dialog-einfuegepunkt-waehlen": "\nSelect insertion point: ",
"extcall-python-rueckgabe": "\n[SSG_LIB] Python return value: %1",
"extcall-keine-rueckgabe": "\n[SSG_LIB] WARNING: No return value received from Python.",
"extcall-skript-nicht-gefunden": "\n[SSG_LIB] ERROR: %1 not found!",
"vfstart-core-nicht-gefunden": "\n[VarioFoerderer] WARNING: vf_core.lsp not found - commands not available.",
"vfstart-etage-core-nicht-gefunden": "\n[EtageVarioFoerderer] WARNING: vf_core.lsp not found - commands not available.",
"gf-seite-aus-header": "\n\nOutput element (AS_Element_*) - choose side:",
"gf-seite-ein-header": "\n\nInput element (ES_Element_*) - choose side:",
"gf-seite-links": "\n 1 - Left",
"gf-seite-rechts": "\n 2 - Right",
"prompt-wahl-1-2": "\nYour choice (1/2) [1]: ",
"prompt-wahl-1-2-3": "\nYour choice (1/2/3) [1]: ",
"geruest-typ-header": "\n\nSelect scaffold option:",
"geruest-typ-opt": "\n %1 - %2",
"geruest-typ-prompt": "\nScaffold option (1-4) [%1]: ",
"kreisel-eckrad-geruest-frage": "Scaffold for single module?",
"gf-lade-block": "\n Loading block: %1 ...",
"gf-status-ok": " OK",
"gf-warnung-kette-unterbrochen": "\n WARNING: chain interrupted!",
"gf-status-nennlaenge": "\n Total nominal length (incl. arc dx): %1 mm",
"gf-status-feste-hoehenanteile": "\n Fixed height components (AS/ES dz + arc dz): %1 mm",
"gf-status-dz-detail": "\n aus-dz=%1 ein-dz=%2 arc-dz=%3",
"gf-status-resthoehe": "\n Effective remaining height for straights: %1 mm",
"gf-warnung-keine-geraden": "\n WARNING: no straight sections -> fallback 3 deg",
"gf-warnung-feste-anteile": "\n WARNING: fixed components > deltaH -> fallback 1 deg",
"gf-status-naeherungswinkel": "\n>>> Approximate angle: %1%2",
"gf-status-linie-staustrecke": "\n\n%1/%2: Buffer section L=%3 mm hz=%4%5 v=%6%7",
"gf-status-separator-vor-bogen": "\n\n%1S/%2: Separator 300mm (before arc) hz=%3%4 v=%5%6",
"gf-status-bogen-einfuegen": "\n\n%1/%2: %3 hz=%4%5",
"gf-status-linienzug-eingefuegt": "\n>>> Polyline slope section inserted! <<<",
"gf-modus3-header": "\n\n>>> MODE 3: Select polyline <<<",
"gf-modus3-hinweis1": "\nPlease select all lines (LINE) and arcs (ARC) of the path,",
"gf-modus3-hinweis2": "\nthen press ENTER:",
"gf-fehler-keine-objekte": "\nNo objects selected!",
"gf-status-objekte-ausgewaehlt": "\n %1 objects selected.",
"gf-prompt-startpunkt-kette": "\nSelect start point (3D) - KS_EIN output element / chain start: ",
"gf-fehler-kein-startpunkt": "\nNo start point!",
"gf-prompt-endpunkt-kette": "\nSelect end point (3D) - KS_AUS input element / chain end: ",
"gf-fehler-kein-endpunkt": "\nNo end point!",
"gf-status-deltah-3dpunkte": "\n %1H from 3D points: %2 mm",
"gf-status-sortiere-segmente": "\n Sorting segments ...",
"gf-alert-keine-kette": "No connected chain found!",
"gf-status-segmente-gefunden": " %1 segments found.",
"gf-status-segment-analyse-header": "\n\n--- Segment analysis (lengths after trimming) ---",
"gf-status-segment-linie": "\n %1. Line L=%2 mm hz=%3%4",
"gf-status-segment-bogen": "\n %1. Arc %2%3 %4 hz-input=%5%6",
"gf-status-seg-erste-linie": "\n Seg %1 (1st line): -%2 mm (output element)",
"gf-status-linie-vor-bogen": "\n Each line before arc: -300 mm (arc separator)",
"gf-status-seg-letzte-linie": "\n Seg %1 (last line): -300 mm (input sep) -%2 mm (input element)",
"gf-status-eintrittsrichtung": "\n Entry direction: %1%2",
"gf-status-austrittsrichtung": "\n Exit direction: %1%2",
"gf-status-berechne-winkel": "\n\n Calculating slope angle from geometry ...",
"gf-prompt-winkel-verwenden": "\nUse calculated angle %1%2? (y/n) [y]: ",
"gf-prompt-gefaellewinkel": "\nSlope angle (degrees): ",
"gf-status-messe-absenkung": "\n Measuring actual AS/ES drop (iterative) ...",
"gf-warnung-korrektur-bereich": "\n WARNING: correction out of range, angle unchanged",
"gf-status-as-es-mm": "\n AS: %1 mm ES: %2 mm",
"gf-status-korrigierter-winkel": "\n>>> Corrected slope angle: %1%2 (after %3 iter.)",
"gf-status-zus-segmente": "\n>>> Segments: %1",
"gf-status-zus-deltah": "\n>>> %1H: %2 mm",
"gf-status-zus-deltal": "\n>>> %1L: %2 mm",
"gf-status-zus-winkel": "\n>>> Slope angle: %1%2",
"gf-status-zus-eintrittswinkel": "\n>>> Entry angle: %1%2",
"gf-status-zus-austrittswinkel": "\n>>> Exit angle: %1%2",
"gf-status-zus-aus-element": "\n>>> Output element: %1",
"gf-status-zus-ein-element": "\n>>> Input element: %1",
"gf-prompt-einfuegen": "\nInsert? (1=Yes / 2=No) [1]: ",
"gf-status-aus-element-detail": "\n\n>>> Output element: %1 travel dir=%2%3 KS_EIN-hz=%4%5 Z=%6",
"gf-status-separator-vor-ein": "\n>>> Separator before input element",
"gf-status-ein-element-detail": "\n>>> Input element: %1 target Z=%2",
"gf-status-z-hoehe-ks-aus": "\n Z height KS_AUS: %1 mm",
"gf-status-fertig": "\n>>> Done! <<<",
"gf-status-abgebrochen": "\nCancelled.",
"gf-alert-dialog-fehlt": "Dialog file not found:\n%1",
"gf-dlg-richtung-0": "0%1 (X+, East)",
"gf-dlg-richtung-90": "90%1 (Y+, North)",
"gf-dlg-richtung-180": "180%1 (X-, West)",
"gf-dlg-richtung-270": "270%1 (Y-, South)",
"gf-dlg-links": "Left",
"gf-dlg-rechts": "Right",
"gf-status-gf-block-erstellt": "\n>>> GF block created: %1 (%2)",
"gf-status-schritt1-aus": "\n\n1/4: %1 travel dir=%2%3 KS_EIN-hz=%4%5 v=%6%7",
"gf-status-schritt2-staustrecke": "\n\n2/4: Buffer section L=%1 mm hz=%2%3 v=%4%5",
"gf-status-schritt3-separator": "\n\n3/4: Separator 300mm hz=%1%2 v=%3%4",
"gf-status-schritt4-ein": "\n\n4/4: %1",
"gf-status-erfolgreich-eingefuegt": "\n>>> Slope section inserted successfully! <<<",
"gf-banner-titel": "\n SLOPE SECTION GENERATOR v2.0",
"gf-banner-richtung": "\n Direction: always DOWN",
"gf-alert-init-fehler": "Error initialising the library!\nPlease check DXFM_DATA.",
"gf-eingabemodus-header": "\n\nSelect input mode:",
"gf-eingabemodus-1": "\n 1 - Enter values manually (simple section)",
"gf-eingabemodus-2": "\n 2 - Select 3D line (simple section)",
"gf-eingabemodus-3": "\n 3 - Select polyline (LINE + ARC) with slope arc",
"gf-modus1-header": "\n\n>>> MODE 1: Manual value entry <<<",
"gf-prompt-startpunkt-aus": "\nSelect start point for output element: ",
"gf-prompt-deltal-abstand": "\n%1L - distance (mm): ",
"gf-modus2-header": "\n\n>>> MODE 2: Select 3D line <<<",
"gf-status-bks-welt": "\n UCS set to world coordinates.",
"gf-prompt-3dlinie-richtung": "\nPlease select 3D line for direction and length:",
"gf-alert-keine-linie": "No valid line selected!",
"gf-status-fahrtrichtung-linie": "\n Travel direction: %1%2 (from line)",
"gf-status-deltal-mm": "\n %1L = %2 mm",
"gf-prompt-gefaellewinkel-def3": "\n\nSlope angle (degrees) [3]: ",
"gf-status-winkel": "\n>>> Angle: %1%2",
"gf-status-fahrtrichtung": "\n>>> Travel direction: %1%2",
"gf-alert-staustrecke-ungueltig": "Calculated buffer section length invalid: %1 mm\nPlease choose larger deltaL or smaller angle.",
"gf-status-zus2-winkel": "\n>>> Angle: %1%2",
"gf-status-zus2-aus-seite": "\n>>> Output side: %1",
"gf-status-zus2-ein-seite": "\n>>> Input side: %1",
"gf-status-zus2-lstau": "\n>>> L_stau: %1 mm",
"ques-yn-default-yes": " Y/N <Y>: ",
"ques-yn-default-no": " Y/N <N>: ",
"tefl-fehler-dxfm-omniflo": "\n[TEF] ERROR: DXFM_OMNIFLO not set (run bin/setenv.bat).",
"tefl-fehler-dxf-nicht-gefunden": "\n[TEF] ERROR: Element DXF not found: %1",
"tefl-prompt-startpunkt": "\nSelect start point of the conveyor path: ",
"tefl-prompt-endpunkt": "\nSelect end point of the conveyor path: ",
"tefl-abgebrochen": "\n[TEF] Cancelled.",
"tefl-fehler-laenge-null": "\n[TEF] ERROR: Start and end point are too close together.",
"tefl-fertig": "\n[TEF] %1 element(s) inserted, path length=%2 mm.",
"vfl-kette-titel": "\n Vario_Kette_Merge - merge several Vario conveyor blocks (loose or already wrapped) into one combined block",
"vfl-kette-start-waehlen": "\n\nSelect the starting block of the chain (first element - AS element or VF_n): ",
"vfl-kette-kein-objekt": "\nNo object selected - cancelled.",
"vfl-kette-kein-vf-block": "\nSelected object ('%1') is not a known Vario chain block (AS/ES element, GF bend, Vario curve, deflection/motor station, vertical bend, buffer/separator or VF_n).",
"vfl-kette-start-nicht-gefunden": "\nERROR: Starting block not found in the chain collection (internal error).",
"vfl-kette-start-nicht-gefunden-diag": "\nERROR: Starting block not found in the chain collection (internal error).\n Diagnostic: %1 blocks collected in total, selected block name='%2', %3 of those with the same block name.",
"vfl-kette-start-ohne-ks-ein": "\nERROR: No KS_EIN found on the selected block - chain cannot be followed.",
"vfl-kette-nur-ein-baustein": "\nNo further connected VF_n block was found from the selected block onward - nothing to merge.",
"vfl-kette-gefunden": "\n\nChain detected: %1 block(s) will be merged:",
"vfl-kette-luecke-warnung": "\n\n WARNING: after '%1' a visually close but not properly connected VF_n ('%2') was found (KS distance %3 mm) - the chain was ended there; this and all further blocks are left untouched.",
"vfl-kette-fertig": "\n\n>>> Done: new combined block '%1' created from %2 block(s).",
"cmd-tro-bearbeiten": "\nEdit TRO marker: %1",
"tro-edit-kein-tro": "Block %1 is not a TRO marker (expected TRO_*).",
"tro-edit-kein-id-attribut": "Block %1 has no ID attribute - please re-annotate (tro_annotate.py).",
"tro-edit-dialog-fehlt": "Dialog file not found:\n%1\nCheck DXFM_DCL (setenv.bat).",
"tro-edit-modul-fehlt": "%1 not loaded - editing attributes with EATTEDIT instead.",
"tro-edit-block": "Block: %1",
"tro-edit-fb": "Function block: %1",
"tro-edit-hinweis": "Symbol and FB follow on the next tro_annotate.py run.",
"tro-edit-id-leer": "The TRO id must not be empty - nothing changed.",
"tro-edit-gespeichert": "\nTRO saved: ID = %1, TYPE = %2",
"tro-edit-typ-geaendert": "\nType changed - re-run tro_annotate.py so symbol and FB match."
}
}