standardisiert: multilang und einefach Sprache enthalten beide translations und untranslated. Doku um das neue Feature ergänzt
This commit is contained in:
+114
-1
@@ -115,7 +115,7 @@ bin\translate.bat --filename file.dxf --extract --translate CS --outname output.
|
|||||||
bin\translate.bat --filename file.dxf --extract --translate EN --export-type excel
|
bin\translate.bat --filename file.dxf --extract --translate EN --export-type excel
|
||||||
```
|
```
|
||||||
|
|
||||||
**Output-Format (JSON):**
|
**Output-Format für eine Sprache (JSON):**
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"translations": [
|
"translations": [
|
||||||
@@ -131,6 +131,119 @@ bin\translate.bat --filename file.dxf --extract --translate EN --export-type exc
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 2a. Mehrsprachige Text-Extraktion
|
||||||
|
|
||||||
|
**NEU ab Version 2025:** Extrahiert und übersetzt Texte gleichzeitig in mehrere Sprachen mit hierarchischer JSON-Struktur.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Extraktion mit mehreren Sprachen (komma-separiert)
|
||||||
|
bin\translate.bat --filename file.dxf --extract --translate CS,EN --outname output.json
|
||||||
|
|
||||||
|
# Drei Sprachen gleichzeitig
|
||||||
|
bin\translate.bat --filename file.dxf --extract --translate CS,EN,FR --export-type json
|
||||||
|
|
||||||
|
# Mit Excel-Export (nur erste Sprache wird in Excel verwendet)
|
||||||
|
bin\translate.bat --filename file.dxf --extract --translate CS,EN --export-type excel,json
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output-Format für mehrere Sprachen (hierarchische JSON-Struktur):**
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"[CS]": {
|
||||||
|
"translations": [
|
||||||
|
{
|
||||||
|
"source": "Betriebsbereit",
|
||||||
|
"target": "Provozní připravenost"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Emergency stop",
|
||||||
|
"target": "Nouzové zastavení"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Weight",
|
||||||
|
"target": "Hmotnost"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"untranslated": [
|
||||||
|
{
|
||||||
|
"source": "Custom text",
|
||||||
|
"target": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"[EN]": {
|
||||||
|
"translations": [
|
||||||
|
{
|
||||||
|
"source": "Betriebsbereit",
|
||||||
|
"target": "Ready for operation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Emergency stop",
|
||||||
|
"target": "Emergency stop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Weight",
|
||||||
|
"target": "Weight"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"untranslated": [
|
||||||
|
{
|
||||||
|
"source": "Custom text",
|
||||||
|
"target": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"[FR]": {
|
||||||
|
"translations": [
|
||||||
|
{
|
||||||
|
"source": "Betriebsbereit",
|
||||||
|
"target": "Prêt à fonctionner"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Emergency stop",
|
||||||
|
"target": "Arrêt d'urgence"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"untranslated": [
|
||||||
|
{
|
||||||
|
"source": "Custom text",
|
||||||
|
"target": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Weight",
|
||||||
|
"target": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ignored": [
|
||||||
|
"X=123.45",
|
||||||
|
"LAYER=0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Struktur:**
|
||||||
|
- **`[LANG]`**: Sprachspezifische Sektion (z.B. `[CS]`, `[EN]`, `[FR]`)
|
||||||
|
- **`translations`**: Array mit erfolgreich übersetzten Texten
|
||||||
|
- **`untranslated`**: Array mit nicht übersetzten Texten (fehlende Übersetzung in Config)
|
||||||
|
- **`ignored`**: Array mit gefilterten Texten (einmal für alle Sprachen)
|
||||||
|
|
||||||
|
**Vorteile:**
|
||||||
|
- Ein Durchlauf für alle Sprachen → schneller
|
||||||
|
- Konsistente Extraktion für alle Sprachen
|
||||||
|
- Übersicht über Übersetzungs-Abdeckung pro Sprache
|
||||||
|
- Einfache Identifikation fehlender Übersetzungen
|
||||||
|
|
||||||
|
**Verarbeitung mehrsprachiger JSON-Dateien:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Re-prozessiere mehrsprachige JSON mit zusätzlicher Sprache
|
||||||
|
bin\translate.bat --fromjson output.json --translate CS,EN,ES
|
||||||
|
|
||||||
|
# DXF-zu-DXF mit mehrsprachiger JSON (verwendet erste Sprache)
|
||||||
|
bin\translate.bat --filename file.dxf --todxf file_cs.dxf --translate CS --translation-json multilang.json
|
||||||
|
```
|
||||||
|
|
||||||
### 3. DXF-zu-DXF Übersetzung
|
### 3. DXF-zu-DXF Übersetzung
|
||||||
|
|
||||||
Erstellt eine neue DXF-Datei mit übersetzten Texten in mehrsprachigen Attributen.
|
Erstellt eine neue DXF-Datei mit übersetzten Texten in mehrsprachigen Attributen.
|
||||||
|
|||||||
+12
-11
@@ -663,7 +663,7 @@ def load_translations_from_json(filename: Path, target_lang: str = None) -> dict
|
|||||||
Liest Übersetzungen aus einer JSON-Datei.
|
Liest Übersetzungen aus einer JSON-Datei.
|
||||||
Unterstützt beide Strukturen:
|
Unterstützt beide Strukturen:
|
||||||
- Alte Struktur: "translations": [{"source": "...", "target": "..."}, ...]
|
- Alte Struktur: "translations": [{"source": "...", "target": "..."}, ...]
|
||||||
- Hierarchische Struktur: "[LANG]": {"translated": [...], ...}
|
- Hierarchische Struktur: "[LANG]": {"translations": [...], ...}
|
||||||
|
|
||||||
Bei hierarchischer Struktur werden Übersetzungen aus allen Sprachen oder nur der angegebenen Sprache gelesen.
|
Bei hierarchischer Struktur werden Übersetzungen aus allen Sprachen oder nur der angegebenen Sprache gelesen.
|
||||||
Wenn mehrere Übersetzungen für denselben source existieren, wird die letzte verwendet (Sprache mit höherer Priorität).
|
Wenn mehrere Übersetzungen für denselben source existieren, wird die letzte verwendet (Sprache mit höherer Priorität).
|
||||||
@@ -732,14 +732,15 @@ def load_translations_from_json(filename: Path, target_lang: str = None) -> dict
|
|||||||
print(f"WARNUNG: [{lang}] Block ist kein Object, überspringe")
|
print(f"WARNUNG: [{lang}] Block ist kein Object, überspringe")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Lese aus translated Block
|
# Lese aus translations Block (oder translated für Rückwärtskompatibilität)
|
||||||
if 'translated' in lang_data:
|
translations_key = 'translations' if 'translations' in lang_data else 'translated'
|
||||||
translated = lang_data['translated']
|
if translations_key in lang_data:
|
||||||
if not isinstance(translated, list):
|
translations_list = lang_data[translations_key]
|
||||||
print(f"WARNUNG: [{lang}][translated] ist kein Array, überspringe")
|
if not isinstance(translations_list, list):
|
||||||
|
print(f"WARNUNG: [{lang}][{translations_key}] ist kein Array, überspringe")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for idx, entry in enumerate(translated):
|
for idx, entry in enumerate(translations_list):
|
||||||
if not isinstance(entry, dict):
|
if not isinstance(entry, dict):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -1106,8 +1107,8 @@ def write_texts_to_json(texts: list[str], ignored_texts: list[str], output_path:
|
|||||||
- "ignored": Liste von Strings für gefilterte/ignorierte Texte
|
- "ignored": Liste von Strings für gefilterte/ignorierte Texte
|
||||||
|
|
||||||
Bei mehreren Sprachen (hierarchische Struktur):
|
Bei mehreren Sprachen (hierarchische Struktur):
|
||||||
- "[EN]": {"translated": [...], "untranslated": [...]}
|
- "[EN]": {"translations": [...], "untranslated": [...]}
|
||||||
- "[FR]": {"translated": [...], "untranslated": [...]}
|
- "[FR]": {"translations": [...], "untranslated": [...]}
|
||||||
- "ignored": Liste von Strings für gefilterte/ignorierte Texte
|
- "ignored": Liste von Strings für gefilterte/ignorierte Texte
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -1145,7 +1146,7 @@ def write_texts_to_json(texts: list[str], ignored_texts: list[str], output_path:
|
|||||||
|
|
||||||
# Hierarchische Struktur: [LANG] als Schlüssel
|
# Hierarchische Struktur: [LANG] als Schlüssel
|
||||||
output_data[f"[{lang}]"] = {
|
output_data[f"[{lang}]"] = {
|
||||||
"translated": translations,
|
"translations": translations,
|
||||||
"untranslated": untranslated
|
"untranslated": untranslated
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1196,7 +1197,7 @@ def write_texts_to_json(texts: list[str], ignored_texts: list[str], output_path:
|
|||||||
for lang in translation_languages:
|
for lang in translation_languages:
|
||||||
if f"[{lang}]" in output_data:
|
if f"[{lang}]" in output_data:
|
||||||
lang_data = output_data[f"[{lang}]"]
|
lang_data = output_data[f"[{lang}]"]
|
||||||
print(f" [{lang}] Übersetzungen: {len(lang_data['translated'])}, Nicht übersetzt: {len(lang_data['untranslated'])}")
|
print(f" [{lang}] Übersetzungen: {len(lang_data['translations'])}, Nicht übersetzt: {len(lang_data['untranslated'])}")
|
||||||
else:
|
else:
|
||||||
# Alte Struktur
|
# Alte Struktur
|
||||||
if translation_dicts:
|
if translation_dicts:
|
||||||
|
|||||||
Reference in New Issue
Block a user