294 lines
8.4 KiB
Markdown
294 lines
8.4 KiB
Markdown
# 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
|