Array-Frage

Hallo Team, ich versuche eine Integration mit Deepl, um Artikeltexte zu übersetzen. Da ich gemerkt habe, daß html-Tags verstümmelt wieder zurückkommen, möchte ich vorher diese alle entfernen - aber auf eine Art, die es mir erlaubt, die Dinge danach wieder zusammenzustricken. Ich habe es soweit geschafft, daß ich durch Regex-Ersetzungen zwei Dinge habe: Das html-Gerüst mit _-_ an den Stellen, wo der eigentliche Text steht, also so:

<h2>_-_</h2>_-_<p>_-_<br>_-_<br>xxx<br>xxx<span style="text-decoration: underline;">_-_</span>_-_<br>_-_<br>xxx<br>xxx<span style="text-decoration: underline;">_-_</span>_-_<br>_-_<br>_-_</p>_-_<p>xxx<span style="text-decoration: underline;">_-_</span>_-_<br>xxx<br>_-_</p>_-_


und das Pendant mit den Inhalten, getrennt durch -_-


-_-Maskenspiegel im Alukoffer-_- -_-Dieser dreiteilige, mobile Schminkspiegel mit integrierter Tageslicht-Beleuchtung und 2 eingebauten Steckdosen ist speziell für die maskenbildnerische Arbeit konzipiert worden und hat sich in diesem Arbeitsfeld bewährt.-_-Die großen Spiegel bieten dem MakeUp Artist eine vollkommene Betrachtungsweise.-_--_--_-Größe Koffer-_-: 70cm hoch, 53cm breit, 12cm tief-_-Jetzt mit Kryolan Logo auf der Rückseite-_--_--_-Maße Spiegel-_-:&nbsp;&nbsp;-_-Hauptspiegel&nbsp;&nbsp; 55x45 cm-_-Seitenspiegel 62x21cm-_- -_--_-Gewicht-_-: 12kg-_--_-Diese Maskenspiegel können Sie bei uns auch mieten.-_-


Bevor ich das Ganze durch Deepl schicke, will ich sehen, ob ich die Dinge nachher wieder zusammenbekomme, aber da komme ich zu keinem vernünftigen Ergebnis. Mein Ansatz ist, beide jeweils mit list als Array einzulesen und dann zusammen auszugeben:

<#assign values =[]>
<#list result['ITD_fuerDeepl']!?split('-_-') as value>
<#assign values +=[value]>
<#assign values2 =[]>
<#list result['ITD_fuerErsetzung']?split('_-_') as value2>
<#assign values2 +=[value2]>
<#list value as item>
<#list value2 as item2>
${item}${item2}
</#list></#list></#list></#list>


Das schlägt aber natürlich fehl, weil ich die, list-Anweidungen irgendwie nicht gebacken bekomme. Ich bekomme das hier:


<h2></h2><p><br><br>xxx<br>xxx<span style="text-decoration: underline;"></span><br><br>xxx<br>xxx<span style="text-decoration: underline;"></span><br><br></p><p>xxx<span style="text-decoration: underl(...)...ine;"></span><br>xxx<br></p>Maskenspiegel im Alukoffer<h2>Maskenspiegel im Alukoffer</h2>Maskenspiegel im Alukoffer<p>Maskenspiegel im Alukoffer<br>Maskenspiegel im Alukoffer


Das heißt, er kombiniert alles mit allem. Ich komme einfach nicht dahinter, wie ich die list-Anweisungen korrekt setze, damit er immer den ersten Wert des ersten Arrays mit dem ersten Wert des zweiten Arrays ausgibt (das wäre <h2>Maskenspiegel im Alukoffer), danach dann den zweiten Wert des ersten Arrays und den zweiten Wert des zweiten Arrays (</h2> ) usw.


Habt ihr einen Tip für mich?


Gruß Micha

Hallo Micha,


bevor ich auf deine Array Frage drauf eingehe. Inwiefern liefert DeepL die HTML-Tags verstümmelt zurück? Kannst du da ein paar Beispiele zeigen? Denn eigentlich sollte DeepL die Tags ignorieren.

tag_handling hast du dabei aber auch auf xml gestellt, richtig?

![](upload://eDyXVVLh1ooZaLqPySqMRnI0quT.png)


Viele Grüße,

Lukas

Jetzt muß ich mal blöd fragen - meine Deepl-Anbindung habe ich vor einiger Zeit schon gemacht und jetzt aus der Mottenkiste gezogen. Ich schicke das Ganze per SpreadsheetURLDownload direkt rüber. Wo bist Du denn gedanklich, wen Du von tag handling sprichst?

Habe eure Deepl-Anbindung getestet. leider kommt da ein bißchen Murks raus, aber ich denke, daß das Problem bei Deepl selber liegt - ich sag ja, daß die die tags versauen. Hier ein Beispiel:

Input:

![image](upload://l81KUH9hX5UBpai2JCKCqkh7y5F.png "image")


Einstellungen:

![image](upload://vxIvR5bBXchjp4Xzyv6yvT1cAc0.png "image")

Output:

![image](upload://rV4K7n4jVzCdknMWUappESr94b0.png "image")

Der Otput stimmt an vielen Stellen nicht, bspw. an der rot unterstrichenen. Was muß ich einstellen, damit das klappt?


Gruß Micha

Update: Ich habe mal alle Schalter auf defaulkt gestellt, dann wird es besser, aber immer noch nicht gut:

![image](upload://hitTYN54ZgG21ehVZ7E1rr1yX6b.png "image")

Ideas?


Hallo Micha,


hast du mal versucht deinen Text direkt bei DeepL einzugeben auf der Website, ob da auch sowas rauskommt. Einfach um zu schauen, ob es auf unserer Seite Probleme oder tatsächlich bei DeepL.

Alternativ könntest du dich mal direkt beim DeepL Support melden.


Viele Grüße,

Lukas

Du kannst aber auch mal hier schauen, vllt. hilft das weiter.

https://www.deepl.com/de/docs-api.html?part=xml

Hmm, kann ich jetzt nicht wirklich beantworten, da ich es nun über meine alte Lösung mache. Aber um nochmal ein paar Steps zurückzuspringen: Ich hatte ja auch gefragt, wie ich die beiden Arrays zusammenfügen kann - das würde mich im allgemeinen trotzdem interessieren, da ich das garantiert noch brauchen werde

Hallo,


da mich das auch interessiert hab ich das mal ausprobiert und hab es mit folgendem Code geschafft die Werte an die richtige Position zu setzen. Leider kann man in Freemarker nicht direkt auf eine Arrayposition zugreifen, weshalb man für jeden Eintrag des ersten Arrays über das zweite Array iterieren muss. Aber mit der <#break> Anweisung beendet man den Durchlauf des zweiten Arrays, sobald der Index des ersten Arrays erreicht wurde.

<#list result['HTML']!?split("_-_") as html>
    <#assign ziel += html>	
    <#list result['Werte']!?split("-_-") as value>
        <#if value?index == html?index>
            <#assign ziel += value>	
            <#break>
        </#if>
    </#list>
</#list>
${ziel!}

Zum Testen habe ich die Werte aus dem ersten Post benutzt, aber aus dem Artikeltext das erste Trennzeichen entfernt. "Maskenspiegel im Alukoffer -_-" statt "-_-Maskenspiegel im Alukoffer -_-"


Viele Grüße

Oliver

Geil, genau: break ist der Schlüssel - klasse Lösung, danke!


Gruß Micha


P.S. Auch wenn ich hier nicht sehe, wie es einem helfen könnte, aber man kann schon direkt auf Positionen zugreifen: Mit ${ziel[0]} bekommt man den ersten Wert

Man kann mit Freemarker eigentlich auf die Array Position zugreifen.


${"1,2,3,4"?split(",")[2]}

-> gibt 3 aus.



D.h. der Code von Oliver könnte so umgeschrieben werden:


<#list result['HTML']!?split("_-_") as html>
    <#assign ziel += html>  
    <#assign ziel += result['Werte']!?split("-_-")[html?index]>  
</#list>
${ziel!}



Bitte vermeidet solche "Schweinereien" mit verschachtelten <#list> Anweisungen, um einen Wert zu suchen, da das aus Performance-Gründen ein Albtraum ist.

Hört sich gut an, ich werd's mal testen. Je einfacher desto besser


Gruß Micha