Neu Anbindung DeepL über Workflow mit DotLiquid

CaptainFrost

Aktives Mitglied
29. März 2019
60
6
Hallo,

ich bin eben dabei DeepL anzubinden um den Prozess des Übersetzen in alle Sprachen zu vereinfachen. Das funktioniert über die API mittels Webrequest.

Das anbinden war kein Problem. Getestet habe ich es mit den Artikelnamen. Der Artikelname wird übersetzt. Das Problem ist das es so ausgegeben wird:

Code:
{"translations":[{"detected_source_language":"DE","text":"Test article, size 10mm, blue"}]}

Jetzt möchte ich über Werte setzen mit DotLiquid alles entfernen außer den eigentlich übersetzten Text.

Den Ansatz habe ich von @Heinz Schrot aus einem anderen Thread, der funktioniert aber nur bedingt bei meinem Problem. Kann mir jemand helfen der sich besser mit DotLiquid auskennt?

Code:
{% assign Positionen = (Vorgang.Beschreibung.Global.Artikelname.Englisch | Split: ',') %}
{% assign Artikel = Positionen | Map: 'text' %}
{% for artikel in Artikel %}
    {% if artikel contains 'text' %}
        {% assign token = (artikel | Remove: 'text' | Replace: ' ', '' | Replace:':','' | Replace:'"','' | Trim) %}            
    {% endif %}
{% endfor %}
{{token | StripNewlines | Replace: ' ';''}}

Das wird augegeben: (vor dem Testarticle stehen dann auch immer noch viele Zeilenumbrüche und Leerzeichen?!)
Code:
Testarticle

LG
David
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: aadursun

tom10

Sehr aktives Mitglied
2. Oktober 2012
714
106
06774 Muldestausee
Wenn das Muster des übersetzten Artikelnamens immer gleich ist, sollte Folgendes funktionieren:
Code:
{%- assign aRawArtNameEng = '{"translations":[{"detected_source_language":"DE","text":"Test article, size 10mm, blue"}]}' | Split: ':' -%}

{%- assign sRawArtNameEng = aRawArtNameEng.last | Replace:  '"', '' -%}
{%- assign iArtNameEngLenght = sRawArtNameEng | Size | Minus: 3 -%}
{%- assign sArtNameEng = sRawArtNameEng | Truncate: iArtNameEngLenght, '' -%}

{{- sArtNameEng -}}

String am ":" splitten, dabei entsteht ein Array.
Das letzte Element im Array (aRawArtNameEng.last) enthält den Artikelnamen in Anführungszeichen plus der drei Klammern.
Jetzt die Anführungszeichen (die um den Artikelnamen) entfernen und ermitteln wie lang der gesamte String ist. Davon 3 abziehen (die Klammern am Ende).
Am Ende den um 3 Zeichen gekürzten String ausgeben.

oder so:
Code:
{%- assign aRawArtNameEng = '{"translations":[{"detected_source_language":"DE","text":"Test article, size 10mm, blue"}]}' | Split: ':' -%}

{%- assign aRawArtNameEng = aRawArtNameEng.last | Split: '"' -%}
{%- assign sArtNameEng = aRawArtNameEng.first -%}

{{- sArtNameEng -}}

String am ":" splitten, dabei entsteht ein Array.
Das letzte Element im Array (aRawArtNameEng.last) enthält den Artikelnamen in Anführungszeichen plus der drei Klammern.
Jetzt können wir uns zunutze machen, das der Artikelname in Anführungszeichen steht und das zum erneuten splitten nutzen. Dabei entsteht wieder ein Array das im ersten Element (aRawArtNameEng.first) nur den Artikelnamen enthält.

Welche der beiden Varianten du nimmst, spielt keine Rolle. Sollte allerdings der Artikelname ein Anführungszeichen enthalten, funktionieren beide nicht mehr.

Noch die erste Zeile in den Beispielen durch die "Richtige" ersetzen:
Code:
{%- assign aRawArtNameEng = Vorgang.Beschreibung.Global.Artikelname.Englisch | Split: ':' -%}

Die vielen Leerzeilen bekommst du mit Bindestrichen am Anfang und Ende von Funktionen und Ausgaben mehr oder weniger in den Griff:

{%- irgendwas -%}
{{- irgendwas -}}

Edit:
Bessere erste Variante, die auch mit Anführungszeichen im Artikelnamen funktioniert. So ist das mit dem vorher Überlegen .... 😄

Code:
{%- assign aRawArtNameEng = '{"translations":[{"detected_source_language":"DE","text":"Test article, size 10mm, blue "with yellow stripes""}]}' | Split: ':' -%}

{%- assign iRawArtNameEngLenght = aRawArtNameEng.last | Size | Minus: 3 -%}
{%- assign sRawArtNameEng = aRawArtNameEng.last | Truncate: iRawArtNameEngLenght, '' -%}
{%- assign sArtNameEng = sRawArtNameEng | RemoveFirst: '"' | Append: '#' | Remove: '"#' -%}

{{- sArtNameEng -}}

String am ":" splitten, dabei entsteht ein Array.
Das letzte Element im Array (aRawArtNameEng.last) enthält den Artikelnamen in Anführungszeichen plus der drei Klammern.
Jetzt ermitteln wie lang der gesamte String ist. Davon 3 abziehen (die Klammern am Ende).
Den String um 3 Zeichen kürzen.
Das erste Anführungszeichen entfernen, an den String eine '#' anhängen um dann noch das letzte Anführungszeichen ("#) zu finden und zu löschen.

Jetzt habe ich fertig ...
 
Zuletzt bearbeitet:

Xantiva

Sehr aktives Mitglied
28. August 2016
1.787
313
Düsseldorf
Wir kommst Du an den String von dem WebRequest? Das ist ein JSON-String, wenn man den deserialisieren könnte, dann könnte man das Ergebnisobjekt einer Variable zuweisen und dann direkt auf den Inhalt zugreifen.
 
  • Gefällt mir
Reaktionen: CaptainFrost

CaptainFrost

Aktives Mitglied
29. März 2019
60
6
Wenn das Muster des übersetzten Artikelnamens immer gleich ist, sollte Folgendes funktionieren:
Code:
{%- assign aRawArtNameEng = '{"translations":[{"detected_source_language":"DE","text":"Test article, size 10mm, blue"}]}' | Split: ':' -%}

{%- assign sRawArtNameEng = aRawArtNameEng.last | Replace:  '"', '' -%}
{%- assign iArtNameEngLenght = sRawArtNameEng | Size | Minus: 3 -%}
{%- assign sArtNameEng = sRawArtNameEng | Truncate: iArtNameEngLenght, '' -%}

{{- sArtNameEng -}}

String am ":" splitten, dabei entsteht ein Array.
Das letzte Element im Array (aRawArtNameEng.last) enthält den Artikelnamen in Anführungszeichen plus der drei Klammern.
Jetzt die Anführungszeichen (die um den Artikelnamen) entfernen und ermitteln wie lang der gesamte String ist. Davon 3 abziehen (die Klammern am Ende).
Am Ende den um 3 Zeichen gekürzten String ausgeben.

oder so:
Code:
{%- assign aRawArtNameEng = '{"translations":[{"detected_source_language":"DE","text":"Test article, size 10mm, blue"}]}' | Split: ':' -%}

{%- assign aRawArtNameEng = aRawArtNameEng.last | Split: '"' -%}
{%- assign sArtNameEng = aRawArtNameEng.first -%}

{{- sArtNameEng -}}

String am ":" splitten, dabei entsteht ein Array.
Das letzte Element im Array (aRawArtNameEng.last) enthält den Artikelnamen in Anführungszeichen plus der drei Klammern.
Jetzt können wir uns zunutze machen, das der Artikelname in Anführungszeichen steht und das zum erneuten splitten nutzen. Dabei entsteht wieder ein Array das im ersten Element (aRawArtNameEng.first) nur den Artikelnamen enthält.

Welche der beiden Varianten du nimmst, spielt keine Rolle. Sollte allerdings der Artikelname ein Anführungszeichen enthalten, funktionieren beide nicht mehr.

Noch die erste Zeile in den Beispielen durch die "Richtige" ersetzen:
Code:
{%- assign aRawArtNameEng = Vorgang.Beschreibung.Global.Artikelname.Englisch | Split: ':' -%}

Die vielen Leerzeilen bekommst du mit Bindestrichen am Anfang und Ende von Funktionen und Ausgaben mehr oder weniger in den Griff:

{%- irgendwas -%}
{{- irgendwas -}}

Edit:
Bessere erste Variante, die auch mit Anführungszeichen im Artikelnamen funktioniert. So ist das mit dem vorher Überlegen .... 😄

Code:
{%- assign aRawArtNameEng = '{"translations":[{"detected_source_language":"DE","text":"Test article, size 10mm, blue "with yellow stripes""}]}' | Split: ':' -%}

{%- assign iRawArtNameEngLenght = aRawArtNameEng.last | Size | Minus: 3 -%}
{%- assign sRawArtNameEng = aRawArtNameEng.last | Truncate: iRawArtNameEngLenght, '' -%}
{%- assign sArtNameEng = sRawArtNameEng | RemoveFirst: '"' | Append: '#' | Remove: '"#' -%}

{{- sArtNameEng -}}

String am ":" splitten, dabei entsteht ein Array.
Das letzte Element im Array (aRawArtNameEng.last) enthält den Artikelnamen in Anführungszeichen plus der drei Klammern.
Jetzt ermitteln wie lang der gesamte String ist. Davon 3 abziehen (die Klammern am Ende).
Den String um 3 Zeichen kürzen.
Das erste Anführungszeichen entfernen, an den String eine '#' anhängen um dann noch das letzte Anführungszeichen ("#) zu finden und zu löschen.

Jetzt habe ich fertig ...
Hey Tom10,

du bist mein Held. Das funktioniert spitze. Danke für die Mühe!
Da habe ich gleich noch etwas gelernt durch deine guten Beschreibungen.


@Xantiva

Der Code des Webrequests ist folgender. Wenn das geht klingt das natürlich auch nicht schlecht.

EDIT: Habe eine Antwort vom DeepL Support. Die Antwort vom Server ist immer im JSON Format. Im Wert des Attributs 'text' , ist die Übersetzung zu finden.
Das klingt nach einer besseren und fehlerlosen Variante. Kannst du mir dabei helfen?


Code:
https://api-free.deepl.com/v2/translate?auth_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&source_lang=DE&text={{ Vorgang.Beschreibung.Global.Artikelname.Deutsch }}&target_lang=EN-US&preserve_formatting=1
 
Zuletzt bearbeitet:

GBK

Sehr aktives Mitglied
21. Oktober 2019
170
35
Lüdinghausen
Ist zwar schon etwas älter hier, aber würde gerne meine aktuellen Erfahrungen hier einfach mal anhängen.

Der JSON String ist immer gleich, daher habe ich das Extrahieren des Textes sehr stumpf gemacht, indem ich alles bis zum Anfang des Textes per Remove entferne und anschließend den hinteren Teil per Split getrennt und den ersten Teil ausgegeben. Solange man das Splitzeichen nicht im Titel nutzt, ist das auch kein Problem. Funktioniert ganz gut:
{%- assign str = Vorgang.Sonstiges.Anmerkung | Remove: '{"translations":[{"detected_source_language":"DE","text":"' | Split: '"' -%}
{{ str[0] }}

Ja, ich weiß, das ist so natürlich sehr anfällig, aber für den Titel reicht es so aus.

Zur Kenntnis. Den hinteren Teil kann man leider nicht per Remove entfernen. Wenn } dabei sind, funktioniert der Befehl scheinbar nicht.

Nun, hier kommt jetzt das richtige Problem. Vielleicht hat ja wer Rat. Die Beschreibungen von Artikeln, gespickt mit HTML. Da geht mein Ansatz natürlich gar nicht. Wie könnte es gehen?

href="" <- blöd
&nbsp; <- blöd

Marco
 

GBK

Sehr aktives Mitglied
21. Oktober 2019
170
35
Lüdinghausen
Danke Xantiva, aber ich möchte die Elemente nicht entfernen. Die sollen lediglich für die Übersetzung ignoriert werden. Das & scheint hier das Hauptproblem zu sein, da bricht die Übersetzung bereits ab.
 

Xantiva

Sehr aktives Mitglied
28. August 2016
1.787
313
Düsseldorf
Ok, Du darfst den Text nicht einfach so in der URL verwenden. Das "&" ist ein besonderes Zeichen in einer URL. Wenn das in Deinem Text vorkommt, musst Du ein URL encode durchführen. Dabei werden die Zeichen umgewandelt / maskiert.

Ich finde aber keinen passenden Filter im JTL Guide 😢 : https://www.google.com/search?client=firefox-b-d&q=site:jtl-software.de+liquid+url+encode

Normalerweise wäre das richtig: https://shopify.github.io/liquid/filters/url_encode/

Wenn es nur das "&" ist, dann könntest Du versuchen, dass mit Suchen und Ersetzen "%26" zu umgehen.
 
  • Ich liebe es
Reaktionen: GBK

GBK

Sehr aktives Mitglied
21. Oktober 2019
170
35
Lüdinghausen
Danke, Xantiva. Das ist ein guter Hinweis. Wie konnte ich das nur übersehen :eek:

Ja, das url_encode funktioniert leider nicht. Hab's einfach mal ausprobiert. Aber die Idee mit dem Replace hat super funktioniert! Muss jetzt nur noch das Ergebnis ein wenig anpassen, dann ist's so, wie ich's brauche :D
 

mobile61

Aktives Mitglied
13. Oktober 2016
81
3
kann mir jemand diese Deepl Anbindung in meinem System ans Laufen bringen.
Aktuell noch Version 1,6.40 wird aber bald auf die 1.7.40 umgestellt.
 

TT24

Aktives Mitglied
8. Februar 2022
94
6
Wir hätten das jetzt so in

{%- assign Positionen = (Vorgang.Beschreibung.Global.Artikelname.Englisch | Split: ',') -%}
{%- assign Artikel = Positionen | Map: 'text' -%}
{%- for artikel in Artikel -%}
{%- if artikel contains 'text' -%}
{%- assign token = (artikel | Remove: 'text' | Replace:':','' | Replace:'"','' | Remove: '}]}' | Trim) -%}
{%- endif -%}
{%- endfor -%}
{{-token | StripNewlines | Replace: '';''-}}
Die Ausgabe hat ein Zeilenumbruch zu viel 62 Zeichen soll 60 Zeichen

Apple Watch 42/44/45mm Silicone Sports Strap - Cyprus Green

Hätte einer eine Idee?

Vielen Dank!
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Conrad anbindung an JTL / eazy auction, aber wie? User helfen Usern - Fragen zu JTL-Wawi 4
Frage zu Verkauf Kaufland Tschechien und Slowakei - Anbindung notwendig oder auch durch Kaufland realisierbar ? kaufland.de - Anbindung (SCX) 0
Neu Einstellmaske für Amazon Anbindung Amazon-Anbindung - Fehler und Bugs 1
Neu JTL WAWI Icecat Anbindung - Wer kann einrichten? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Anbindung kaufland und Otto über JTL 1.7.15.4 noch möglich? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Dropshipping inkl. Anbindung an JTL WAWI direkt vom Hersteller - 700 Artikel Versandverpackungen Dienstleistung, Jobs und Ähnliches 0
Neu Frage zum Datendurchsatz bei SCX Anbindung Einrichtung und Installation von JTL-eazyAuction 4
JTL Shop Gutscheine über JTL-Vouchers erstellen Allgemeine Fragen zu JTL-Vouchers 0
Neu JTL Shop Gutscheine über JTL-Vouchers erstellen Allgemeine Fragen zu JTL-Shop 0
Neu Freitextfeld über Variation - Zeichenbeschränkung für Gravur Allgemeine Fragen zu JTL-Shop 8
Neu Artikel über csv-Datei bearbeiten und importieren Allgemeine Fragen zu JTL-POS 2
Neu Verordnung über die allgemeine Produktsicherheit (GPSR) JTL-Wawi - Ideen, Lob und Kritik 0
Neu Kundenpreise in Artikelübersicht (über Umwege)? Arbeitsabläufe in JTL-Wawi 0
Neu Verbindungsproblem Wawi (1.8.12.0) zum JTL-Shop (5.2.4) über localhost User helfen Usern - Fragen zu JTL-Wawi 0
Auftragsimport über eBay - Bezeichnung der Versandart auf der Rechnung leer JTL-Wawi 1.8 1
Wie kann ich eine Benachrichtigung bei einem Wareneingang auslösen mit einer Mail über die Artikel die eingebucht wurden JTL-Wawi 1.8 2
Artikel wurden über Weclapp über FFN-Connect an JTL FFN übermittelt jedoch leider nicht an Wawi & WMS JTL-Wawi 1.8 0
Gutschrift über einen Set-Artikel JTL-Wawi 1.7 0
Teilrechnung Erstellen über/nach Packtisch+ JTL-Wawi 1.8 1
Neu SCSS-Datei bearbeiten über FTP Allgemeine Fragen zu JTL-Shop 6
Neu Email Versand über OAuth JTL-Wawi - Ideen, Lob und Kritik 2
Neu Informationspflicht über Sicherstellung der Echtheit von Kundenbewertungen Business Jungle 5
Neu SQL Abfrage über ODBC für Bewegunghistorie (WMS) Eigene Übersichten in der JTL-Wawi 4
Neu PayPal - Benachrichtungen über Zahlung -> EMail. Wo kann man den Betreff bearbeiten? User helfen Usern - Fragen zu JTL-Wawi 6
Neu Mails über Microsoft 365 User helfen Usern - Fragen zu JTL-Wawi 17
Neu Verkaufte Stückzahl pro Artikel über Ameise ausgeben JTL Ameise - Eigene Exporte 1
Statistik über ALLE Kunden mit Umsatz JTL-Wawi 1.6 1
Neu Artikelname für WMS über Ameise importieren JTL-Ameise - Fehler und Bugs 6
Positionen alle auf einmal z.B über csv in einen bestehenden Auftrag einfügen JTL-Wawi 1.8 2
Neu Exportvorlage Hermes wir über Packtisch nicht mehr ausgegeben JTL-ShippingLabels - Fehler und Bugs 0
Neu Überverkäufe in Amazon, wenn Artikel über "Dranhängen"/ Jetzt Verkaufen in Amazon/ Seller Central erstellt wird. Amazon-Anbindung - Fehler und Bugs 3
Neu Ameise Import manuell ausgeführt funktioniert, der gleiche Import über Batch Planung gestartet hat Fehler JTL-Ameise - Fehler und Bugs 2
Neu Ebay Artikel einstellen über Ameise - Zustand wird nicht zugewiesen JTL-Ameise - Fehler und Bugs 4
Neu E-Mails über O365 aus der Wawi senden JTL-Wawi - Fehler und Bugs 0

Ähnliche Themen