# translate.py - Text-Extraktion und -Übersetzung für DXF-Dateien ## Übersicht `translate.py` ist ein Python-Tool zur Extraktion, Filterung und Übersetzung von Texten aus DXF/DWG-Dateien. Es unterstützt mehrere Arbeitsweisen und kann Texte aus verschiedenen Quellen verarbeiten. ## Hauptfunktionen - **Text-Extraktion**: Extrahiert TEXT, MTEXT und Block-Attribute aus DXF-Dateien - **Text-Filterung**: Filtert Texte basierend auf konfigurierbaren Mustern (Wildcards und Regex) - **Automatische Übersetzung**: Übersetzt Texte mittels konfigurierbarer Wörterbücher (Multi-Phrasen, Trigramme, Bigramme, Einzelwörter) - **DXF-zu-DXF Übersetzung**: Erstellt übersetzte DXF-Dateien mit mehrsprachigen Attributen - **Export**: Exportiert Texte in verschiedene Formate (Excel, JSON, Text) ## Konfigurationsdateien ### translator.cfg Hauptkonfigurationsdatei im `cfg/` Verzeichnis: ```ini [symbol_attribute] # Zuordnung von Sprachcodes zu Block-Attributnamen DE = TEXT-D EN = TEXT-E ES = TEXT-ES CS = TEXT-CS FR = TEXT-F [symbol_layer] # Zuordnung von Sprachcodes zu Layer-Namen DE = 0-0_TEXT-D EN = 0-0_TEXT-E ES = 0-0_TEXT-ES CS = 0-0_TEXT-CS FR = 0-0_TEXT-F [ignore_pattern_wildcard] # Wildcard-Muster für zu ignorierende Texte layer = LAYER=* coord_x = X=* # ... weitere Muster [ignore_pattern_regex] # Regex-Muster für zu ignorierende Texte decimal_number = ^-?\d+([.,]\d+)?$ # ... weitere Muster ``` ### Übersetzungs-Configs Sprachspezifische Konfigurationsdateien im `translation/` Verzeichnis (z.B. `CS.cfg`, `EN.cfg`): ```ini [multi] # Phrasen mit 4+ Wörtern Main distribution panel = Hlavní rozváděč [trigramme] # 3-Wort-Phrasen Power supply unit = Napájecí zdroj [bigramme] # 2-Wort-Phrasen Emergency stop = Nouzové zastavení [single] # Einzelwörter Weight = Hmotnost Cable = Kabel ``` ## Verwendung ### 1. Text-Extraktion aus DXF Extrahiert Texte aus einer DXF-Datei und speichert sie in verschiedenen Formaten. ```bash # Extraktion in JSON (Standard) bin\translate.bat --filename file.dxf --extract --outname output.json # Extraktion in Excel bin\translate.bat --filename file.dxf --extract --export-type excel --outname output.xlsx # Extraktion in Textdatei bin\translate.bat --filename file.dxf --extract --export-type text --outname output.txt # Mit Quellsprache (Standard: DE -> TEXT-D) bin\translate.bat --filename file.dxf --extract --lang_source EN ``` **Extrahierte Entitäten:** - TEXT-Objekte im Modellbereich - MTEXT-Objekte im Modellbereich - Block-Attribute (nur Blöcke mit IO, ID, VERW, BEZEICHNUNG, KENNZEICHNUNG) ### 2. Text-Extraktion mit Übersetzung Extrahiert und übersetzt Texte automatisch mittels Übersetzungs-Config. ```bash # Extraktion mit automatischer Übersetzung nach CS (Tschechisch) bin\translate.bat --filename file.dxf --extract --translate CS --outname output.json # Extraktion mit Übersetzung nach EN (Englisch) bin\translate.bat --filename file.dxf --extract --translate EN --export-type excel ``` **Output-Format (JSON):** ```json { "translations": [ {"source": "Weight", "target": "Hmotnost"} ], "untranslated": [ {"source": "Custom text", "target": ""} ], "ignored": [ "X=123.45", "LAYER=0" ] } ``` ### 3. DXF-zu-DXF Übersetzung Erstellt eine neue DXF-Datei mit übersetzten Texten in mehrsprachigen Attributen. ```bash # Übersetzung TEXT-D -> TEXT-CS (verwendet automatisch file_texts.json) bin\translate.bat --filename file.dxf --todxf file_cs.dxf --translate CS # Mit expliziter JSON-Datei bin\translate.bat --filename file.dxf --todxf output.dxf --translate CS --translation-json custom.json # Mit alternativer Quellsprache bin\translate.bat --filename file.dxf --todxf output.dxf --lang_source EN --translate CS ``` **Verhalten:** - **TEXT/MTEXT**: Direkt im Entity übersetzt - **Block-Attribute**: - Liest aus Quell-Attribut (z.B. TEXT-D) - Schreibt in Ziel-Attribut (z.B. TEXT-CS) - Quell-Attribut bleibt unverändert - Erstellt fehlende ATTDEF im Block - Erstellt fehlende Layer (aus `[symbol_layer]`) ### 4. Text-Filterung aus TXT-Datei Verarbeitet bereits extrahierte Texte aus einer Textdatei. ```bash bin\translate.bat --fromtxt texts.txt --outname filtered.json bin\translate.bat --fromtxt texts.txt --translate CS --outname translated.xlsx ``` ### 5. JSON-Reprocessing Übersetzt den `untranslated` Block einer JSON-Datei erneut. ```bash bin\translate.bat --fromjson output.json --translate CS ``` ## Parameter-Referenz ### Eingabe-Modi (mutual exclusive) - `--extract` / `-e`: Extrahiere Texte aus DXF/DWG (benötigt `--filename`) - `--fromtxt FILE.txt`: Filtere Texte aus Textdatei - `--fromjson FILE.json`: Re-prozessiere JSON (benötigt `--translate`) - `--todxf OUTPUT.dxf`: DXF-zu-DXF Übersetzung (benötigt `--filename`) ### Hauptparameter - `--filename FILE` / `-f FILE`: Eingabe-DXF/DWG-Datei - `--outname NAME` / `-o NAME`: Name der Ausgabedatei - `--translate LANG` / `-t LANG`: Übersetzungssprache (CS, EN, FR, etc.) - `--lang_source LANG`: Quellsprache für Block-Attribute (Standard: DE) - `--export-type TYPE`: Exportformat: `json` (Standard), `excel`, `text` - `--translation-json FILE`: JSON-Datei mit Übersetzungen für `--todxf` - `--debug` / `-d`: Debug-Ausgabe für Pattern-Matching ## Arbeitsablauf-Beispiele ### Workflow 1: Extraktion und manuelle Übersetzung ```bash # 1. Texte extrahieren bin\translate.bat --filename project.dxf --extract --outname project_texts.json # 2. JSON manuell bearbeiten (untranslated -> translations verschieben) # 3. Übersetzte DXF erstellen bin\translate.bat --filename project.dxf --todxf project_cs.dxf --translate CS ``` ### Workflow 2: Automatische Übersetzung ```bash # 1. Texte extrahieren und automatisch übersetzen bin\translate.bat --filename project.dxf --extract --translate CS --outname project_texts.json # 2. Nicht-übersetzte Texte in JSON prüfen und manuell ergänzen # 3. Übersetzte DXF erstellen bin\translate.bat --filename project.dxf --todxf project_cs.dxf --translate CS ``` ### Workflow 3: Mehrsprachige Dokumente ```bash # Tschechische Version bin\translate.bat --filename project.dxf --todxf project_cs.dxf --translate CS # Englische Version bin\translate.bat --filename project.dxf --todxf project_en.dxf --translate EN # Französische Version bin\translate.bat --filename project.dxf --todxf project_fr.dxf --translate FR ``` ## Block-Attribute und Layer ### Automatische ATTDEF-Erstellung Wenn ein Block noch kein ATTDEF für das Ziel-Attribut hat: 1. **ATTDEF wird erstellt** im Block-Definition 2. **Layer wird erstellt** (falls nicht vorhanden, aus `[symbol_layer]`) 3. **Eigenschaften werden übernommen** vom Quell-ATTDEF: - Position (`insert`) - Höhe (`height`) - Stil (`style`) - Rotation (`rotation`) - Layer (aus Config oder vom Quell-Attribut) ### Erforderliche Block-Attribute Blöcke müssen folgende Attribute haben, um verarbeitet zu werden: - `IO` - `ID` - `VERW` - `BEZEICHNUNG` - `KENNZEICHNUNG` - Quell-Textattribut (z.B. `TEXT-D`) ## Umgebungsvariablen Das Programm benötigt folgende Umgebungsvariablen (werden in `bin/setenv.bat` gesetzt): - `PROJECT_WORK`: Arbeitsverzeichnis für Ein-/Ausgabe-Dateien - `PROJECT_CFG`: Konfigurationsverzeichnis (`cfg/`) - `PROJECT_TRANSLATION`: Übersetzungs-Konfigurationsverzeichnis (`translation/`) ## Fehlerbehandlung Das Programm gibt detaillierte Statusmeldungen aus: ``` Anzahl gefundener TEXT Objekte: 150 Anzahl gefundener MTEXT Objekte: 25 Anzahl gefundener TEXT-D in Blöcken: 340 Duplikate entfernt: 75 Eindeutige Texte extrahiert: 440 Filterung abgeschlossen: Akzeptierte Texte: 380 Ignorierte Texte: 60 DXF-Übersetzung abgeschlossen: TEXT übersetzt: 140, übersprungen: 10, ignoriert: 0 MTEXT übersetzt: 20, übersprungen: 5, ignoriert: 0 TEXT-CS (Blöcke) erstellt/aktualisiert: 310, übersprungen: 30, ignoriert: 0 Gesamt: 470 übersetzt, 45 übersprungen, 0 ignoriert ``` ## Hinweise - Texte werden als Set verarbeitet → Duplikate werden automatisch entfernt - Leere Texte werden ignoriert - Übersetzungen erfolgen in der Reihenfolge: Multi → Trigramme → Bigramme → Einzelwörter - Bei DXF-zu-DXF Übersetzung bleibt das Original-Attribut immer unverändert - Layer und ATTDEF werden nur bei Bedarf erstellt (lazy creation) - Alle Ausgabedateien landen im `PROJECT_WORK` Verzeichnis ## Siehe auch - [CLAUDE.md](../CLAUDE.md) - Allgemeine Projektdokumentation - `cfg/translator.cfg` - Hauptkonfiguration - `translation/*.cfg` - Sprachspezifische Übersetzungs-Configs