WAWITranslator V2 – Anleitung für Fortgeschrittene
Steuerung über Parameter, JTL-Workflows und die Kommandozeile. Für die normale Bedienung siehe die Anleitung zur Konfiguration.
Stand:
⚠️ Nur für fortgeschrittene Anwender. Für die normale Bedienung siehe die Anleitung zur Konfiguration. Bei Fragen wende dich an unseren Support: support.falkcons.de.
Parameter
Der WAWITranslator wird über bis zu zehn Parameter gesteuert (Reihenfolge ist fest, jeder Wert durch ein Leerzeichen getrennt):
| # | Parameter | Bedeutung |
|---|---|---|
| 1 | Typ | Was übersetzt wird (siehe Tabelle „Übersetzungstypen“). |
| 2 | Key | Interner Schlüssel des Datensatzes – 0 = Stapelverarbeitung (alle), > 0 = genau dieser Datensatz. Sonderwerte siehe unten. |
| 3 | Von | Ausgangssprache (ISO2, z. B. DE). Auch Varianten wie EN-GB möglich (mit Bindestrich). Muss in der Wawi aktiv und von DeepL unterstützt sein. |
| 4 | Nach | Zielsprache (ISO2). * = in alle in der Wawi aktiven Zielsprachen – bzw. in die dafür ausgewählten (siehe „Zielsprachen bei * einschränken“). |
| 5 | Modus | 0 = nicht überschreiben · 1 = überschreiben · 2 = Versionierung (nur Typ 1, 2, 3, 5, 6, 50) · 3 = nur wenn Ziel kürzer. |
| 6 | Anzahl (opt.) | Datensätze pro Batch (je Zielsprache). Standard 30 (CLI) bzw. 1 (GUI). Ab Version 2.7.0: 0 = alle passenden Datensätze. |
| 7 | Quell-Plattform (opt.) | Standard 1. |
| 8 | Ziel-Plattform (opt.) | Standard 1. |
| 9 | Quell-Shop (opt.) | Standard 0. |
| 10 | Ziel-Shop (opt.) | Standard 0. |
📝 Hinweis zu Modus 2 (Versionierung): Übersetzt nur dann erneut, wenn sich der Quelltext seit der letzten Übersetzung geändert hat. Wirkt nur, wenn der WAWITranslator den Text mindestens einmal selbst übersetzt hat. Bei anderen Typen als 1, 2, 3, 5, 6, 50 wird der Wert
2wie0behandelt.
Sonderwerte für Parameter 2 (Key)
| Key | Wirkung |
|---|---|
0 |
Alle Datensätze (Stapelverarbeitung), begrenzt durch die Anzahl/Batchgröße. |
> 0 |
Genau dieser Datensatz (z. B. interne Artikelnummer). |
-1000 |
Hash-Initialisierung für den Typ + das Sprachpaar (markiert bestehende Zielübersetzungen als „aktuell“, damit Modus 2 sie nicht erneut übersetzt). Nur Typ 1, 2, 3, 4, 5, 6, 50. |
📝 Probelauf (ab Version 2.8.0): Mit
--dry-runbzw.translator.dryRun: trueschreibt--key -1000keine Hashes mehr – bis 2.7.0 tat es das trotz Probelauf. Das Log meldet je Zielsprache „Probelauf – Hash-Initialisierung übersprungen“.
⚠️ Wichtig (Änderung gegenüber älteren Versionen): Der frühere Wert
key = -1(„alle noch nicht übersetzten“) wird nicht mehr verwendet. Um nur noch nicht übersetzte Datensätze zu übersetzen, nutze jetztKey = 0zusammen mit Modus0(nicht überschreiben).
Tabelle Übersetzungstypen
| Typ | Key (interner Schlüssel) | Übersetzte Texte |
|---|---|---|
| 1 Artikel | tArtikel.kArtikel |
Name, Kurzbeschreibung, Beschreibung, Titel-Tag, Meta-Keywords, Meta-Description |
| 2 Kategorien | tKategorie.kKategorie |
Name, Beschreibung, Titel-Tag, Meta-Keywords, Meta-Description |
| 3 Artikel (Vater-Kind) | tArtikel.kArtikel |
Name; Kurz-/Langbeschreibung vom Vaterartikel kopiert; Titel-Tag, Meta-Keywords, Meta-Description |
| 4 Alle Artikel im Kategoriebaum | tKategorie.kKategorie |
Name, Kurzbeschreibung, Beschreibung, Titel-Tag, Meta-Keywords, Meta-Description |
| 5 Artikel-URL | tArtikel.kArtikel |
URL-Pfad |
| 6 Kategorie-URL | tKategorie.kKategorie |
URL-Pfad |
| 10 Attribute | tAttributSprache.kAttribut |
Attributname, Werteliste |
| 11 Attributwerte (Artikel) | tArtikel.kArtikel |
nur Textwerte |
| 12 Attributwerte (Kategorie) | tKategorie.kKategorie |
nur Textwerte |
| 15 Attribute (anhand Artikel) | tArtikel.kArtikel |
Attributname, Werteliste |
| 20 Variationen | tEigenschaftSprache.kEigenschaft |
Name |
| 21 Variationswerte | tEigenschaftWertSprache.kEigenschaftWert |
Name |
| 25 Variationen (anhand Artikel) | tArtikel.kArtikel |
Name |
| 26 Variationswerte (anhand Artikel) | tArtikel.kArtikel |
Name |
| 30 Merkmale | tMerkmal.kMerkmal |
Merkmalname |
| 31 Merkmalwerte | tArtikel.kArtikel |
Name, Beschreibung, Titel-Tag, Meta-Keywords, Meta-Description |
| 35 Mediendateien | tMediendateiSprache.kMedienDatei |
Name, Beschreibung |
| 40 Konfigurationsgruppen | tkonfiggruppe.kKonfiggruppe |
Name, Beschreibung |
| 45 Cross-Selling-Gruppen | tXSellGruppe.kXSellGruppe |
Name, Beschreibung |
| 50 Hersteller | tHersteller.kHersteller |
Beschreibung, Titel-Tag, Meta-Keywords, Meta-Description |
📝 Hinweis: Attribut- und Merkmalwerte sind nicht artikelspezifisch, können aber ausgehend vom Artikel übersetzt werden. Es werden dann nur die am Artikel zugewiesenen Werte übersetzt; andere Artikel mit denselben Werten erhalten die Übersetzung automatisch mit.
Workflow anlegen (Übersetzung spezifischer Artikel)
In der WF-Verwaltung unter „Artikel → Artikel – Manuell“ einen neuen Workflow „Übersetzen“ anlegen:
- Ein Ereignis anlegen (Name frei wählbar, z. B. mit Sprachkürzel).
- Den Workflow auf die Wawi begrenzen.
- Ausführungsplan: „Sofort“ verlangt, dass der ausführende Benutzer an der Wawi auf dem Server angemeldet ist, auf dem der WAWITranslator läuft. Alternativ „Zeitversetzt“, damit der Worker den WF auf dem Server ausführt.
- Im Abschnitt Aktionen → „Ausführen“ wählen und bei Programm/Skript eintragen:
start wawitranslator- „Kommandozeile benutzen“ ankreuzen.
- Ausführungsverzeichnis: „Nicht ändern“.
Als Parameter z. B.:
1 {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }} DE EN-GB 0 30
1= Artikel übersetzen (siehe Typen-Tabelle).{{ InterneArtikelnummer }}= der zu übersetzende Datensatz.DE= Ausgangssprache,EN-GB= Zielsprache (auch*für alle möglich – Achtung: höherer DeepL-Verbrauch).0= nicht überschreiben.30= Batchgröße (bei Einzel-Workflows irrelevant).
⚠️ Wichtig: Zwischen jedem Parameter muss ein Leerzeichen stehen. In dieser Konfiguration läuft der WAWITranslator nur auf dem Server. Soll die Übersetzung auch im Netzwerk verfügbar sein, muss der Workflow zeitversetzt vom Worker ausgeführt werden.
Batchverarbeitung / Kommandozeile
Im Batch-Modus übersetzt der WAWITranslator im Hintergrund, ohne Workflow. Das eigentliche Programm ist WTS.exe im Ordner C:\ProgramData\WAWITranslator. Über den installierten Wrapper wawitranslator ist es aus jeder Shell aufrufbar.
Komplette Optionsliste:
cd C:\ProgramData\WAWITranslator
.\WTS.exe --help
Beispiele
Alle Artikel von Deutsch nach Englisch übersetzen (max. 60 pro Lauf):
.\WTS.exe 1 0 DE EN 0 60
Den Artikel mit ID 123 von Deutsch in alle aktiven Sprachen übersetzen (mit Versionierung):
.\WTS.exe 1 123 DE * 2
Alle noch nicht ins Englische übersetzten Artikel (bestehende bleiben unangetastet):
.\WTS.exe 1 0 DE EN 0
Dasselbe in einem Lauf ohne Obergrenze – Anzahl 0 = alle (ab Version 2.7.0; Achtung: entsprechend hoher DeepL-Verbrauch):
.\WTS.exe 1 0 DE EN 0 0
Die Kategorie 210 von Deutsch nach Französisch übersetzen und Bestehendes überschreiben:
.\WTS.exe 2 210 DE FR 1
Alle noch nicht übersetzten Variationsnamen / Variationswerte ins Englische:
.\WTS.exe 20 0 DE EN 0
.\WTS.exe 21 0 DE EN 0
Alle Merkmalwerte des Artikels 125 nach Französisch (auch bestehende), max. 100:
.\WTS.exe 31 125 DE FR 1 100
Alle noch nicht übersetzten Hersteller ins Englische (mit Versionierung):
.\WTS.exe 50 0 DE EN 2
💡 Hinweis zu Lang-Flags: Statt der Positionsform akzeptiert das CLI auch benannte Flags, z. B.:
.\WTS.exe --type 1 --key 0 --from DE --to EN --overwrite 0 --top 60
📝 Prozess beenden: Im Task-Manager den Prozess
WTS.exesuchen und „Task beenden“. Mehrere Instanzen gleichzeitig sind möglich – aber nur mit unterschiedlichen Sprachen/Typen, sonst entstehen doppelte Übersetzungen.
Artikel-Filter (Lang-Flags)
Zusätzlich lassen sich Läufe auf bestimmte Artikel einschränken – das spart Zeit und Übersetzungskosten. Diese Filter gibt es nur als Lang-Flags. Sobald mindestens eines davon gesetzt ist, gelten für diesen Lauf ausschließlich die angegebenen Filter – die globalen Filter aus der config.json (Abschnitt filters) werden dann komplett ignoriert. Ohne Filter-Flag gelten die globalen Filter, und zwar für jeden Aufruf, auch für einzelne Datensätze (Key > 0) aus einem JTL-Workflow.
| Flag | Wirkung |
|---|---|
--shops "1,2" |
Nur Artikel, die in mindestens einem dieser Shops (kShop-CSV) aktiv sind. |
--only-stock |
Nur Artikel mit Lagerbestand > 0. |
--category "210,305" |
Nur Artikel in diesen Kategoriebäumen (kKategorie-CSV, rekursiv inkl. Unterkategorien). Eine einzelne Kategorie (--category 210) funktioniert weiterhin. |
--category-exclude |
Kehrt --category um: Die angegebenen Kategoriebäume werden ausgeschlossen, übersetzt wird alles andere. Nur zusammen mit --category. |
Beispiel – nur lagernde Artikel aus Shop 1 in den Kategoriebäumen 210 und 305 nach Englisch übersetzen:
.\WTS.exe --type 1 --key 0 --from DE --to EN --overwrite 0 --shops "1" --only-stock --category "210,305"
Beispiel – alle Artikel außer denen im Kategoriebaum 99 nach Französisch übersetzen:
.\WTS.exe --type 1 --key 0 --from DE --to FR --overwrite 0 --category 99 --category-exclude
Mehrere Kategoriebäume werden vereinigt: Ein Artikel, der in mehreren angegebenen Bäumen liegt, wird nur einmal übersetzt. Beim Ausschließen fällt ein Artikel heraus, sobald er (auch) einer ausgeschlossenen Kategorie zugeordnet ist.
⚠️ Ungültige Filterwerte brechen ab: Seit Version 2.6.0 prüft WAWITranslator die Angaben bei
--shopsund--categorystreng. Erlaubt sind nur IDs größer 0, getrennt durch Komma. Ein Tippfehler wie210;305, der Wert0oder ein doppeltes Komma beendet den Aufruf mit einer Fehlermeldung (Exitcode 2), statt still ohne Filter zu laufen. Dasselbe gilt für--category-excludeohne--category. Lange Kategorie-Listen sind kein Problem.
⚠️ Filter nur in der Flag-Form:
--shops,--only-stock,--categoryund--category-excludelassen sich nicht hinten an die Positionsparameter anhängen.1 0 DE EN 2 --shops 1schlägt fehl („Positionswert 6 … ist keine Zahl“), weil der Parser beim ersten Positionswert aufhört, Flags zu lesen. Nutze entweder durchgängig die Flag-Form (--type … --shops …) oder stelle die Filter-Flags vor die Positionswerte (--shops 1 --only-stock 1 0 DE EN 2).
Die Filter greifen bei Artikeln (Typ 1, 3), „Alle Artikel im Kategoriebaum“ (Typ 4, seit 2.6.0 auch mit Kategoriefilter), Artikel- und Kategorie-URLs (5, 6), Attributwerten (11, 12), Attributen und Variationen/Variationswerten anhand Artikel (15, 25, 26), Merkmalwerten (31) und Mediendateien (35) – je nach Typ Shop/Lager/Kategorie. Bei reinen Stammdaten-Typen (2, 10, 20, 21, 30, 40, 45, 50) haben sie keine Wirkung; die CLI weist im Log darauf hin. Auch „Vorhandene Übersetzungen wiederverwenden“ (--propagate-existing) beachtet die Filter. Kennt eine veraltete Datenbank-Prozedur die Filter noch nicht, bricht ein gefilterter Lauf mit klarer Meldung ab (statt still ungefiltert zu laufen) – das Datenbank-Update im Setup bringt sie auf den aktuellen Stand.
Globale Filter in der config.json
Am einfachsten pflegst du die globalen Filter in der GUI (Einstellungen → Filter & Sprachen). In der config.json stehen sie im Abschnitt filters:
"filters": {
"activeInShops": [1, 2],
"onlyWithStock": true,
"categoryRoots": [210, 305],
"categoryExclude": false
}
| Feld | Bedeutung |
|---|---|
activeInShops |
Liste von kShop. Leer = kein Shop-Filter. |
onlyWithStock |
true = nur Artikel mit Lagerbestand > 0. |
categoryRoots |
Liste von Wurzel-kKategorie (rekursiv). Leer = kein Kategoriefilter. |
categoryExclude |
false = die Bäume einschließen, true = ausschließen (alle außer diese). |
Das frühere Einzelfeld categoryRoot (eine Zahl) wird weiterhin gelesen und automatisch als categoryRoots übernommen. IDs kleiner oder gleich 0 lehnt WAWITranslator beim Start als Konfigurationsfehler ab.
💡 Lizenz prüfen:
.\WTS.exe --check-license --license-key WAWI-…(bzw.LIC-…bei Kauf im JTL-Extension-Store) prüft einen Schlüssel live gegen den Lizenzserver und gibt das Ergebnis als JSON aus (kein Übersetzungslauf). Genau das nutzt die GUI in Einstellungen → Lizenz.
Zielsprachen bei * einschränken (targetLanguages)
Bei Zielsprache * übersetzt WAWITranslator in alle aktiven Sprachen (aus dbo.tSpracheUsed, außer der Quellsprache). Über den Schlüssel targetLanguages auf oberster Ebene der config.json lässt sich das global auf eine Teilmenge beschränken:
"targetLanguages": ["EN", "FR", "IT"]
- Leer/fehlt = alle aktiven Sprachen (unverändertes Verhalten).
- Wirkt nur bei
--to *; ein explizites--to XXbleibt immer möglich. - Wird zur Laufzeit gelesen – geplante Aufgaben mit
--to *berücksichtigen die Auswahl automatisch (nichts wird in die Windows-Aufgabe „eingebacken“). - Am einfachsten über die GUI pflegbar: Einstellungen → Filter & Sprachen → „Zielsprachen bei ‚Alle Zielsprachen‘ (*)“.
- Die Hash-Initialisierung (Key
-1000mit--to *) deckt bewusst weiterhin alle aktiven Sprachen ab – so haben auch Sprachen, die du später in die Auswahl aufnimmst, eine Ausgangsbasis für die Versionierung.
Übersetzungs-Provider wählen (DeepL / OpenAI)
Standard ist DeepL. Ab Version 2.3 kann optional OpenAI genutzt werden.
⚠️ OpenAI ist standardmäßig deaktiviert und muss freigeschaltet werden – in der GUI unter Einstellungen → Übersetzung → „OpenAI aktivieren…“, über
config.json("openaiEnabled": true) oder die UmgebungsvariableWTS_ENABLE_OPENAI=1. Support für die OpenAI-Anbindung wird stundenweise abgerechnet.
Pro Lauf lässt sich der Provider per Flag erzwingen:
.\WTS.exe --type 1 --key 0 --from DE --to EN --overwrite 0 --provider openai
Ohne --provider gilt der Wert aus der config.json (Standard deepl).
DeepL-Glossar – Prüfung beim Start (ab Version 2.7.0)
Ist in der config.json eine Glossar-ID eingetragen (deepl.glossaryId, pflegbar unter Einstellungen → Übersetzung), prüft WTS.exe sie vor jedem Lauf bei DeepL. Die Abfrage ist kostenlos und verbraucht keine Zeichen. Glossare funktionieren mit DeepL API Free und Pro.
| Ergebnis der Prüfung | Verhalten |
|---|---|
| Glossar existiert nicht | Abbruch: „DeepL-Glossar |
| Genau eine Zielsprache, das Glossar hat kein Wörterbuch für dieses Sprachpaar | Abbruch mit Meldung (sie nennt die vorhandenen Sprachpaare) |
Zielsprache * („Alle Zielsprachen“), einzelnen Sprachen fehlt das Wörterbuch |
Diese Sprachen werden ohne Glossar übersetzt, das Log warnt; der Lauf gilt als erfolgreich |
| DeepL gerade nicht erreichbar | Nur eine Warnung, der Lauf geht weiter |
Ein Glossar kann mehrere Sprachpaare (Wörterbücher) enthalten; ein Wörterbuch für Englisch gilt für EN-GB und EN-US gleichermaßen. Keine Prüfung gibt es im Mock-Modus (--mock-deepl), bei Übersetzung mit OpenAI und bei der Hash-Initialisierung (Key -1000). In der Lauf-Historie geplanter Aufgaben erscheinen die Abbrüche als „Glossar nicht gefunden“ bzw. „Sprachpaar fehlt im Glossar“.
Zusatz aus der Testphase entfernen (--trial-cleanup, ab Version 2.7.0)
Die in der Testphase übersetzten Texte sind vollständige DeepL-Übersetzungen, nur mit dem Zusatz „[WAWITranslator Trial]“ (ältere Versionen: „[WAWITranslator Demo]“). Nach dem Wechsel auf die Vollversion bietet die GUI selbst an, diesen Zusatz zu entfernen (siehe Konfiguration und Bedienung). Für Skripte gibt es denselben Ablauf per Kommandozeile – ohne Übersetzungslauf, das Ergebnis erscheint als eine JSON-Zeile:
.\WTS.exe --trial-cleanup --dry-run
.\WTS.exe --trial-cleanup
- Mit
--dry-runwird nur gezählt (ohne Lizenzprüfung): betroffene Bereiche, Anzahl der Texte und Sprachen, z. B.{"ok":true,"dryRun":true,"total":42,"areas":[{"area":"artikel","records":40,"languages":["EN"]},…]}. - Ohne
--dry-runentfernt WAWITranslator nur den Zusatz – aus allen Texttabellen (Artikel, Kategorien, Hersteller, Attribute, Attributwerte, Variationen, Variationswerte, Merkmale, Merkmalwerte inkl. SEO-Feld, Mediendateien, Konfigurations- und Cross-Selling-Gruppen) in einem Schritt (Transaktion): Schlägt etwas fehl, bleibt die Datenbank unverändert. Lege vorher eine Datensicherung an. - Das Entfernen verlangt eine gültige Vollversion (Lizenzprüfung wie bei einem Übersetzungslauf). Mit einer Testlizenz lautet die Antwort
{"ok":false,"status":"trial",…}. - Es wird nichts neu übersetzt und kein DeepL-Kontingent verbraucht. Die Versionierungs-Einträge bleiben erhalten – so übersetzt ein späterer Lauf im Modus Versionierung (
2) weder diese Texte noch manuell gepflegte Texte ohne Eintrag neu.
Die Werte für area lauten artikel, kategorien, hersteller, attribute, attributwerte, variationen, variationswerte, merkmale, merkmalwerte, medien, konfiguration und crossselling.
📝 Manuelle Variante: Es gibt ein SQL-Skript
upgrade_trial.sql, das dasselbe direkt im SQL Server Management Studio macht – nur Zusatz entfernen, Versionierungs-Einträge bleiben –, allerdings nur für Artikel, Kategorien und Hersteller. Das Setup liefert es nicht mit (frühere Fassungen dieser Anleitung behaupteten das); wenn du es brauchst, frag kurz beim Support. Für alle übrigen Texttabellen nimm--trial-cleanupoder die Schaltfläche in der GUI.
Vorschau einer Stichprobe (--preview, ab Version 2.8.0)
--preview N übersetzt eine Stichprobe von N zufällig ausgewählten Datensätzen (1–50) je Zielsprache und gibt Quelle und Übersetzung je Feld aus, ohne etwas zu speichern. In der GUI steckt dasselbe hinter der Schaltfläche „Vorschau“.
.\WTS.exe --type 1 --key 0 --from DE --to EN --overwrite 2 --preview 5 --progress-json
- Nur zusammen mit
--progress-json. Ohne das Flag wird der Aufruf abgelehnt – sonst bezahlst du Übersetzungen, die nirgends erscheinen. --previewsetzt--dry-run: es wird nichts geschrieben und es entstehen keine Übersetzungs-Aufzeichnungen. Die DeepL- bzw. OpenAI-Zeichen der Stichprobe verbrauchst du trotzdem.- Ereignis
{"phase":"preview",…}je Feld. Ist ein Feld länger als die JTL-Spalte, kommenfit(skipField,truncate,shortenoderskipRecord),lengthundlimitdazu – also was im echten Lauf mit dem Feld passieren würde. - Scheitert bei
--to *eine Zielsprache, meldet{"phase":"target","to":…,"ok":false,"error":…}sie beim Namen. Das gilt auch für normale Läufe und Probeläufe. - Mit
--key -1000(Hash-Initialisierung) ist--previewnicht möglich.
Während eines normalen Laufs meldet --progress-json ab Version 2.8.0 außerdem je fertigem Datensatz ein Ereignis {"phase":"record","kKey":…,"to":…,"name":…,"ok":…} – die Grundlage der Live-Anzeige im Log.
Mehrere Datensätze pro DeepL-Anfrage (ab Version 2.8.0)
WAWITranslator bündelt die Felder mehrerer Datensätze in eine DeepL-Anfrage (bis 50 Datensätze bzw. 20.000 Quellzeichen je Bündel und nur so viele, wie in eine Anfrage passen). Geschrieben wird weiter Datensatz für Datensatz, die Zahl der abgerechneten Zeichen ändert sich nicht – nur die Wartezeit auf DeepL schrumpft deutlich. Scheitert ein Bündel, werden seine Datensätze einzeln nachübersetzt.
Zur Fehlersuche abschaltbar – in der GUI unter Einstellungen → Übersetzung, auf der Kommandozeile über die Umgebungsvariable:
$env:WTS_DEEPL_BATCH = "0"; .\WTS.exe --type 1 --key 0 --from DE --to EN --overwrite 2
Mit OpenAI als Engine wird weiterhin je Datensatz übersetzt.
Wann ein Lauf als fehlgeschlagen gilt (ab Version 2.8.0)
Gezählt werden nur gespeicherte Datensätze. Ein Lauf, der Datensätze verarbeitet, aber keinen einzigen speichern konnte – etwa weil das DeepL-Kontingent aufgebraucht ist –, gilt jetzt als fehlgeschlagen (Fehlerphase nothingSaved) und löst die Fehler-Mail aus. Bis 2.7.0 stand so ein Lauf mit voller Datensatzzahl als Erfolg in der Historie.
Geprüft wird über alle Zielsprachen zusammen: Eine einzelne Sprache ohne gespeicherten Datensatz macht den Lauf nicht zum Fehlschlag. Anhalten vor dem ersten Datensatz ist kein Fehler. Ein Probelauf speichert naturgemäß nichts und zählt 0 – er gilt als fehlgeschlagen, wenn kein Datensatz fehlerfrei übersetzt wurde.
Laufzeiten messen (--profile)
Mit --profile (in der GUI: „Diagnose“ in der Log-Ansicht bzw. Strg+D) schreibt WTS.exe am Ende eines Laufs eine Auswertung der Laufzeiten ins Log – z. B. wie lange das Laden der Texte (select_source) und die Aufrufe bei DeepL (deepl) gedauert haben. Ab Version 2.7.0 kommen der Verbindungsaufbau zur Datenbank (sql_connect), die Vorab-Abfragen (sql_prepare) und die Glossar-Prüfung (glossary_check) hinzu. Wird ein Lauf mit --schedule-id und --profile gestartet, zeigt auch die Lauf-Historie („Verlauf…“) diese Werte. Die Auswertung hilft dem Support bei Fragen zur Geschwindigkeit.
Zu lange Übersetzungen (Kürzen / onTruncate)
Ist eine Übersetzung länger als die JTL-Spaltenlänge, greift standardmäßig translator.onTruncate (Default skipField): das betroffene Feld wird ausgelassen, die übrigen Felder desselben Datensatzes werden trotzdem geschrieben. Das Log nennt Feld, Ist-Länge und Spaltenlimit.
onTruncate |
Wirkung |
|---|---|
skipField (Standard) |
Nur das zu lange Feld auslassen, die übrigen Felder schreiben. |
truncate |
Das Feld hart auf die Spaltenlänge kürzen. |
skipRecord |
Den ganzen Datensatz auslassen (früheres Verhalten). |
Optional lässt sich in der config.json das automatische Kürzen aktivieren – dann kürzt WAWITranslator zu lange Texte per OpenAI sinn- und markenerhaltend, damit sie passen (benötigt einen OpenAI-Key/-Modell):
"translator": { "fitTranslationLength": true }
📝 Ab Version 2.7.0 für alle Übersetzungstypen:
onTruncateundfitTranslationLengthgelten jetzt nicht mehr nur für Artikel und Kategorien (Typ 1–6), sondern auch für Attribute, Variationen, Merkmale/Merkmalwerte, Mediendateien, Cross-Selling-Gruppen und Hersteller (Typ 10–50). Bisher wurde dort der ganze Datensatz übersprungen. Die Spaltenlängen liest WAWITranslator live aus deiner JTL-Datenbank, und das Log nennt die echte Spalte der Zieltabelle – z. B.cWert(300>255)bei einem Merkmalwert.
Geplante (automatische) Übersetzungen
Über die GUI (Kalender-Symbol) lassen sich wiederkehrende Übersetzungen als Windows-Aufgaben einrichten – z. B. jede Nacht. Diese Funktion ist Teil der Pro-Lizenz. Eine neue Aufgabe legst du im Fenster „Geplante Aufgaben“ über „+ Neue Aufgabe“ an oder direkt im Hauptfenster über „Als Aufgabe anlegen“ (Strg+T) – dann ist die aktuelle Auswahl bereits eingetragen.
Aufgabe bearbeiten
| Bereich | Inhalt |
|---|---|
| Übersetzung | Bezeichnung, Typ, Quell- und Zielsprache (* = alle Zielsprachen; ab Version 2.7.0 als Eintrag „Alle Zielsprachen“), Modus, Anzahl pro Lauf (ab Version 2.7.0: 0 = alle Datensätze), optional „Vorhandene Übersetzungen wiederverwenden“ und die Übersetzungs-Engine: „Standard (laut Einstellungen)“, DeepL oder OpenAI – unabhängig von der globalen Einstellung. Ab Version 2.7.0 füllt „Aus Vorlage übernehmen …“ (oben rechts im Bereich) diese Felder aus einer im Hauptfenster gespeicherten Vorlage (siehe unten). |
| Quelle / Ziel: Plattform / Shop | Seit Version 2.6.0 als Auswahlliste – dieselbe Plattform-/Shop-Liste wie im Hauptfenster (für den dort zuletzt geladenen Übersetzungstyp). Ist die Liste nicht verfügbar, trägst du Plattform- und Shop-Nummer direkt ein. |
| Artikel-Filter | „Globale Filter übernehmen“ oder „Eigene Filter für diese Aufgabe“ (siehe unten). Bei Typen ohne Filterwirkung ist der Bereich ausgeblendet. |
| Wann ausführen | Wochentage und Uhrzeit. |
| Windows-Konto | Benutzer, unter dem die Aufgabe läuft. Mit „Auch ausführen wenn ich nicht eingeloggt bin“ startet sie auch ohne Anmeldung; dafür ist das Windows-Passwort nötig. Ändert sich das Passwort, die Aufgabe erneut öffnen und das neue Passwort eintragen. |
| Benachrichtigung | E-Mail nach N aufeinanderfolgenden Fehlläufen (0 = keine, 2 empfohlen) – siehe „E-Mail-Benachrichtigung“. |
Globale oder eigene Filter:
- Globale Filter übernehmen (Standard): Die Aufgabe liest die Artikel-Filter bei jedem Lauf aktuell aus den Einstellungen. Änderst du dort die Filter, gilt das ab dem nächsten Lauf – ohne die Aufgabe neu zu speichern.
- Eigene Filter für diese Aufgabe: Über „Filter wählen…“ legst du Filter nur für diese Aufgabe fest (mindestens einen); die globalen Filter spielen dann keine Rolle. Diese Filter stehen sichtbar als Lang-Flags in der Windows-Aufgabe.
Die Zielsprachen-Auswahl für * (siehe oben) gilt für Aufgaben mit Ziel „Alle Zielsprachen“ ebenfalls zur Laufzeit.
Aus Vorlage übernehmen (ab Version 2.7.0): Hast du im Hauptfenster Vorlagen gespeichert (siehe Konfiguration und Bedienung), wählst du sie im Aufgaben-Editor über „Aus Vorlage übernehmen …“ aus. Übernommen werden Typ, Key, Quelle und Ziel (Plattform / Shop, Sprache), Modus, Anzahl und „Vorhandene Übersetzungen wiederverwenden“. Engine, Artikel-Filter, Zeitplan und Windows-Konto der Aufgabe bleiben unverändert. Was es in der aktuellen Datenbank nicht gibt, bleibt ebenfalls unverändert; ein Hinweis unter der Überschrift nennt es. Vorlagen gehören zum jeweiligen Windows-Benutzer – im Aufgaben-Editor siehst du die Vorlagen des gerade angemeldeten Benutzers.
📝 Aufgaben aus früheren Versionen: Bis Version 2.5.x wurde beim Speichern ein fester Stand der globalen Filter in die Windows-Aufgabe geschrieben. Solche Aufgaben zeigt die Liste mit dem Hinweis „Filter-Stand eingefroren“. Einmal öffnen und speichern genügt – danach folgt die Aufgabe den globalen Filtern.
Die Aufgabenliste
| Spalte | Bedeutung |
|---|---|
| Aktiv | Grüner Punkt = aktiv (der Tooltip zeigt den nächsten Lauf), grauer Kreis = deaktiviert. Ein Klick schaltet um. |
| Name / Übersetzung | Bezeichnung, Übersetzungstyp, Sprachen, Anzahl (0 erscheint als „alle Datensätze“), Modus und ggf. die fest gewählte Engine. (Bis Version 2.6 hieß die Spalte „Job“.) |
| Filter | „global (live)“ = folgt den globalen Filtern; sonst die eigenen Filter der Aufgabe in Kurzform (z. B. „Shop(s) 1 · Kategorie(n) ohne 42“); „–“ = Typ ohne Filterwirkung. Details im Tooltip. |
| Wann | Wochentage und Uhrzeit. |
| Letzter Lauf | Status (erfolgreich, fehlgeschlagen, läuft gerade, noch nie gelaufen), Zeitpunkt und Laufdauer. |
Die Aktionen „Jetzt ausführen“, „Bearbeiten“, „Verlauf…“ (Lauf-Historie mit Status, Dauer, Anzahl übersetzter Datensätze und ggf. Fehlermeldung je Lauf) und „Löschen“ liegen im ⋯-Menü am Zeilenende. Ein Doppelklick auf eine Zeile öffnet die Aufgabe direkt zum Bearbeiten.
⚠️ „Windows-Aufgabe weicht ab“: Diesen Hinweis zeigt die Spalte „Filter“, wenn die in Windows registrierte Aufgabe (Parameter oder Programm) nicht mehr zur gespeicherten Konfiguration passt – Details stehen im Tooltip. Öffne die Aufgabe über „Bearbeiten“ und speichere sie; dann wird sie neu registriert.
E-Mail-Benachrichtigung (SMTP oder Brevo)
Geplante Aufgaben können dich per E-Mail informieren, wenn sie mehrmals hintereinander fehlschlagen. Die Schwelle legst du je Aufgabe im Bereich „Benachrichtigung“ fest. Seit Version 2.6.0 zählen dabei auch Abbrüche als Fehllauf – z. B. wenn der SQL Server nicht erreichbar oder die Lizenz abgelaufen ist. Solche Läufe erscheinen außerdem in der Lauf-Historie („Verlauf…“); bisher blieben genau diese Fälle ohne Mail.
Pro Fehlerserie bekommst du eine Mail; die nächste erst, nachdem die Aufgabe wieder erfolgreich gelaufen ist und erneut die Schwelle erreicht. Klappt der Versand nicht (Mailserver oder Brevo gerade nicht erreichbar), versucht WAWITranslator es ab Version 2.7.0 beim nächsten Fehllauf erneut, bis die Mail durchgeht.
Den Versand richtest du einmal zentral ein: Einstellungen → E-Mail → „Versand über“.
| Versand über | Angaben |
|---|---|
| SMTP-Server | SMTP-Host, Port (Standard 587), „STARTTLS verwenden“, Benutzername und Passwort. |
| Brevo API | Dein eigener Brevo-API-Key (v3) und optional ein Absendername. Die Absender-Adresse muss in deinem Brevo-Konto als verifizierter Absender hinterlegt sein. |
Für beide Wege gelten Absender-Adresse und Empfänger (mehrere Adressen durch Komma oder Semikolon getrennt). Mit „Test-Mail senden“ prüfst du die Angaben. Passwort und API-Key werden verschlüsselt gespeichert. Bleiben SMTP-Host bzw. Brevo-API-Key leer, werden keine Mails verschickt.
📝 Hinweis zu STARTTLS: Bietet der SMTP-Server kein STARTTLS an, warnt WAWITranslator deutlich, weil die Mail dann unverschlüsselt übertragen wird. Zugangsdaten werden nie ohne TLS gesendet.
In der config.json steht der Versandweg unter smtp.provider (smtp oder brevo); der Brevo-Key liegt verschlüsselt unter smtp.brevoApiKey. Pflege die Zugangsdaten deshalb über die GUI.
Logs
Im Ordner C:\ProgramData\WAWITranslator\translations wird jeder verarbeitete Text als JSON-Datei protokolliert und nach einigen Tagen automatisch gelöscht. Laufzeit-Meldungen stehen in logs\translator.log. Geplante Läufe protokolliert WAWITranslator zusätzlich in scheduled_runs.log (eine Zeile pro Lauf) – daraus speisen sich die Lauf-Historie, die Laufdauer in der Aufgabenliste und die E-Mail-Benachrichtigung.