Neu Anbindung DeepL über Workflow mit DotLiquid

CaptainFrost

Aktives Mitglied
29. März 2019
22
1
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:

tom10

Sehr aktives Mitglied
2. Oktober 2012
662
73
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:
  • Gefällt mir
Reaktionen: CaptainFrost

Xantiva

Sehr aktives Mitglied
28. August 2016
1.635
263
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
22
1
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:
Ähnliche Themen
Titel Forum Antworten Datum
Neu Erfahrungen mit Otto Anbindung über OSCware Schnittstellen Import / Export 1
Beantwortet Anbindung von JTL-POS an eigenes System Gelöste Themen in diesem Bereich 5
Neu Anbindung Script Fehler Amazon-Anbindung - Fehler und Bugs 0
Neu Amazon: Konto-Anbindung -> Auth. Token Einrichtung und Installation von JTL-eazyAuction 1
Neu Shopify Anbindung / Rechnung automatisieren und Tracking Onlineshop-Anbindung 4
Gelöst Anbindung First Cash Solutions an POS Gelöste Themen in diesem Bereich 8
Neu OTTO Anbindung - Dauer Abgleich zur Artikelanlage Schnittstellen Import / Export 0
Neu EBICS Anbindung - Ungültige HASH-Werte Schnittstellen Import / Export 0
Neu Servicedesk/ Ticketsystem-Anbindung User helfen Usern - Fragen zu JTL-Wawi 2
Neu Kosten für eine Anbindung WooCommerce-Connector 0
Gelöst Anbindung FirstCash Terminal funktioniert nicht Einrichtung / Updates von JTL-POS 6
Neu Anbindung Prestashop - Kundengruppen wurden nicht zugeordnet PrestaShop-Connector 1
Neu Amazon Anbindung: Bei mir kommt nichts an Amazon-Anbindung - Fehler und Bugs 2
Neu OnlineShop Anbindung fehlerhaft Onlineshop-Anbindung 0
Neu Ausgabe Rechnung über Mail User helfen Usern - Fragen zu JTL-Wawi 2
Neu Rechnungsdatenexport über Ameise für Datev User helfen Usern - Fragen zu JTL-Wawi 5
Neu Rechnung nur über gelieferte Artikel Arbeitsabläufe in JTL-Wawi 7
Neu Erzeugung der Standard Rechnung unterdrücken da Rechnung über Workflow generiert wird (druckt aktuell 2 Rechnungen) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Kunden Lieferung über Außendienst ermöglichen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Textfeld im Lieferschein über Variable istDropshipping anzeigen User helfen Usern - Fragen zu JTL-Wawi 2
In Bearbeitung Eigenverbrauch über JTL-POS Allgemeine Fragen zu JTL-POS 5
Neu Test Kauf über Molli und Fehlermeldung bekommen. Plugins für JTL-Shop 0
In Bearbeitung Falsche Umsatzsteuer beim setzten der Versandart über Workflow JTL-Workflows - Fehler und Bugs 1
Neu Workflows bei Verbindung über Vodafone laufen deutlich länger als über Telekom User helfen Usern - Fragen zu JTL-Wawi 17
Neu Amazon Prime As Seller - Versandlabel über API mit JTL in "Probezeit"? Amazon-Anbindung - Fehler und Bugs 1
Neu Freelancer mit über 10 Jahren SP Erfahrung Dienstleistung, Jobs und Ähnliches 0
Neu Wieviel wäre euch eine autom. OSS Steuereinstellung inkl. Zuordnung der Steuern über Taric wert ? JTL-Wawi - Ideen, Lob und Kritik 23
Neu Bankkonten über das Zahlungsmodul in JTL-Wawi einbinden (Schweiz) Schnittstellen Import / Export 0
Bilder und Text über Link laden Einrichtung JTL-Shop5 3
Beantwortet JTL-WMS Mobile über LTE möglich? Installation von JTL-WMS / JTL-Packtisch+ 6
Neu Top Artikel über Slider Technische Fragen zu Plugins und Templates 1
Neu Schriftänderung über Plesk Templates für JTL-Shop 3
Neu Artikel über Import (Ameise) mehreren Kategorien zuweisen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Suche jemanden,der uns Client an Server über Internet anbindet Dienstleistung, Jobs und Ähnliches 6
Gelöst Versandbestätigung per Mail versenden über einen Eintrag unter Versand => Packtisch/WMS-Ausgabe Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 3
Neu Dringend: ebay - Arikel über 18 mit VerifyMyAge eBay-Anbindung - Ideen, Lob und Kritik 12
Neu Dreiecksgeschäfte über JTL / UPS Arbeitsabläufe in JTL-Wawi 0
Neu Wawi über SSH-Tunnel nach außen hin verfügbar machen. Installation von JTL-Wawi 2
Neu Artikel über die Ameise Minusbuchen JTL-Ameise - Ideen, Lob und Kritik 2
Neu Konfigurationsgruppen Zuordnung über Ameise entfernen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Neue E-Mail über Service Desk erstellen Servicedesk (Beta) 2
Neu Retoure anlegen - Zahlung erstatten über Zahlungsmodul viele Schritte nötig Arbeitsabläufe in JTL-Wawi 3
Neu Seit update auf 1.5.45.1 geht Rückzahlung über Zahlungsmodul nicht mehr Arbeitsabläufe in JTL-Wawi 0
Neu Web-Request über alle Artikel im Auftrag User helfen Usern - Fragen zu JTL-Wawi 0
Gelöst Plausibilitätsprüfung für den Warenausgang über JTL-WMS und JTL-Packtisch+ [WAWI-30184] Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Gelöst Paket-Versand über WMS Rechnungsausdrucke fehlen sporadisch Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 9
Neu Produkte über Shopify bearbeiten Shopify-Connector 1
In Bearbeitung Seit Connector Update: Wenn Versand gesetzt, wird kein Lieferschein über den Connector an Shopware 5 übertragen Shopware-Connector 1
In Diskussion WAWI Rechnung drucken bei Zahlung über JTL Pos Einrichtung / Updates von JTL-POS 14
Neu Kunden automatisiert über Lieferverzögerungen informieren (Video) Umfragen rund um JTL 27

Ähnliche Themen