Integration von DeepL Übersetzungen
Hallo zusammen,
ich würde gerne mehrere Textfelder und dynamische Auswahlfelder per DeepL übersetzen lassen und dann die englische Übersetzung in korrespondierende Felder ausgeben lassen, so dass ich zu jedem deutschen Feld ein passendes englisches Feld habe.
Leider habe ich dazu im Forum noch nichts gefunden. Vielleicht hat jemand eine Idee, wie das zu bewerkstelligen wäre? DeepL Api ist vorhanden.
Danke und Viele Grüße
17 Antworten
-
Hallo,
geht es generell um das ansteuern der API oder heißt "Api ist vorhanden", dass die Rest Anbindung schon läuft?
Sind die Felder schon gefüllt oder sollen die bei Eingabe übersetzt werden?
Lege Dir natürlich erst zu jedem deutschen Feld das korrespondierende Englische Feld an. Die dynamischen Auswahlfelder beziehen sich ja auf Spalten, also diese dann auf die englischen Inhalte verweisen lassen...
Zur API:
Ich trenne Authentifizierung und Inhalt immer gerne der Übersicht halber. Außerdem lege ich mir immer noch ein mehrzeiliges Textfeld "API-Response" an.
Über einen Button oder über "Nach Änderung..." dann folgendes Script einsetzen
'API-Response' := "";
let auth := {
'auth_key': "DEINKEY",
'Content-Type': "application/json"
};
let response := do as server
http("POST", "https://api-free.deepl.com/v2/translate", auth, {
text: DEINTEXT,
source_lang: QUELLSPRACHE,
target_lang: ZIELSPPRACHE,
})
end;
if response.error then
alert(text(response))
else
'API-Response' := text(response.result);
Du kannst dann über Punkt-Navigation deinen Feldern die API Antwort zuweisen, z.B.
DEIN_ENGLISCHES_FELD := text(response.result.translations.text)
Mal so als Fahrplan...
-
Wow, ganz lieben Dank für die schnelle Antwort. Das Forum hier ist wirklich spitze! Ich werde das gleich mal ausprobieren und umsetzen. Die Rest Anbindung läuft noch nicht, ich wollte damit nur ausdrücken, dass die Ansteuerung über API grundsätzlich möglich ist. Geplant war, dass das deutsche Feld direkt nach der Eingabe übersetzt und in das korrespondierende englische Feld geschrieben wird.
Ich gebe Rückmeldung ob es geklappt hat bzw. was nicht klappt.
Viele Grüße
-
ok, habe mit jetzt testweise zwei Textfelder angelegt: "Deutsch" un "Englisch", das "API-Response" Feld und einen Button, der den von Dir genannten Code enthält. Diesen habe ich mit meinem API Key befüllt, mein Textfeld Deutsch eingesetzt und source und target lang mit "DE" und "EN" definiert. Der Code zeigt auch keinen Fehler, aber ich stehe auf dem Schlauch, wie ich jetzt das übersetzte Ergebnis in mein Feld "Englisch" bringe.
-
Ok, ich habe mir auch mal einen Account angelegt, kann ja nicht schaden...
Dieser Code funktioniert:
'API-Response' := "Übersetze...";
Englisch := "Warte auf Übersetzung...";
let myKey := "DEINKEY";
let myText := Deutsch;
let myLang := "EN";
let response := do as server
http("GET", "https://api-free.deepl.com/v2/translate?auth_key=" + myKey + "&text=" + text(myText) + "&target_lang=" + myLang)
end;
'API-Response' := text(response);
Englisch := text(response.result.item(translations, 0).text)
Zur Erklärung wie Du an die zurückgegebene Antwort kommst:
Wenn Du dir die API_Response anschaust, werden die Daten als JSON in einer verschachtelten Struktur wiedergegeben.
{"result":{"translations":[{"detected_source_language":"DE","text":"Peter goes out into the garden."}]}}
"response" definieren wir ja selber im script (let response.. http..usw).
Zurück kommt ein "result". Dieses beinhaltet "translations". Das ist aber ein Array und kann mehrere Sprachen enthalten, daher ist es in eckigen Klammern gesetzt. Die Daten im Array bestehen jeweils aus "detected_source_language" und "text".
Mit der sogenannten Punkt-Navigation kommen wir dann an die Daten aus der JSON Antwort
Englisch := text(response.result.item(translations, 0).text)
item holt uns aus dem Array "translations" das erste (0) Datenpaket und daraus dann den "text"
-
Ganz großer Dank! Funktioniert einwandfrei. Wirklich super, dass hier so schnell und perfekt geholfen wird, mit Erklärung! Viele Grüße
-
Hey, ich habe es versucht bei mir einzubinden. bekomme aber kein Ergebniss. Ich nutze einen deepl pro account, daher api.deepl.com. Muss ich sonst noch etwas beachten? Als API-Response bekomme ich nur
{}
Vielen Dank!
'API-Response' := "Übersetze...";
Englisch := "Warte auf Übersetzung...";
let myKey := "e3d6696d-XXXXXXX";
let myText := Deutsch;
let myLang := "EN-GB";
let response := do as server
http("GET", "https://api.deepl.com/v2/translate?auth_key=" + myKey + "&text=" + text(myText) + "&target_lang=" + myLang)
end;
'API-Response' := text(response);
Englisch := text(response.result.item(translations, 0).text) -
Carsten, versuche erstmal das, was die ninox im http feld macht, manuel in deinen Browser zu schreiben - also:
https://api.deepl.com/v2/translate?auth_key="DEINKEY"&text="Peter goes out into the garden."&target_lang="DE"
und schau mal was er dir ausgibt...
-
Hallo Tobias, da bekomme ich nur die Meldung ZUGRIFF VERWEIGERT. Ich habe jetzt aus https://api.deepl.com/v2/. https://api.deepl.com/v1/ gemacht. Jetzt geht es.
Jetzt habe ich nur noch das Problem, dass er die Quellsprache manchmal nicht erkennt, und zwar dann wenn ich Umlaute verwende.
Mit follgendem Script kann man die Quellsprache festlegen;
'API-Response' := "Übersetze...";
Englisch := "Warte auf Übersetzung...";
let myKey := "DEINAPIKEY";
let myText := Deutsch;
let mySour := "DE";
let myLang := "EN";
let response := do as server
http("GET", "https://api.deepl.com/v1/translate?auth_key=" + myKey + "&text=" + text(myText) + "&source_language=" + mySour + "&target_lang=" + myLang)
end;
'API-Response' := text(response);
Englisch := text(response.result.item(translations, 0).text) -
Lieben Dank Tobias, deine Lösung hilft uns sehr!!
Viele Grüße, Carsten
-
Hallo Carsten, wir hatten auch Probleme mit den Umlauten und Sonderzeichen. Teilweise bricht die Übersetzung dann an manchen Stellen ganz ab, teilweise wird sehr komisch übersetzt. Wir ersetzen daher die gängigsten Zeichen bevor der Text an die API übergeben wird:
let myText1 := replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replacex(Geburtsort, "&", "%26"), "ö", "%C3%B6"), "Ö", "%C3%96"), "ä", "%C3%A4"), "Ä", "%C3%84"), "ü", "%C3%BC"), "Ü", "%C3%9C"), "ß", "%C3%9F"), "(", "%28"), ")", "%29"), "*", "%2A"), "+", "%2B"), ",", "%2C"), ".", "%2E"), "/", "%2F"), ":", "%3A"), ";", "%3B"), "=", "%3D"), "?", "%3F"), "-", "%2D"), " ", "%20"), ".", "%2E");
Sicher nicht sonderlich elegant aber es funktioniert und war nach vielem Herumprobieren die einzige Möglichkeit, auch längere Texte mit Umlauten und Sonderzeichen fehlerfrei zu übersetzen.
Die DeepL-Api beachtet übrigens nicht das persönliche Wörterbuch, was schade ist.
Hoffe, die Info hilft.
Viele Grüße! -
Halllo af,
ich würde es mit
---
let myText1:=urlEncode(Geburtsort)
---
probieren
Leo
-
Ok, danke euch. Bisher habe ich keine Probleme mit umlauten mehr gesehen. Falls es doch noch passiert, werde ich es ausprobieren..
Viele Grüße, Carsten
-
Super, Leo, wie immer ein perfekter Rat. Viele Grüße und vielen Dank!
-
Hallo Leonid,
vielen Dank für den Hinweis auf urlEncode - der hat das Problem mit den Umlauten perfekt gelöst!
Jetzt ist bei mir aber ein letztes kleines Problem aufgetreten:
Die Fremdsprache, habe es eben mit Deutsch → Polnisch ausprobiert, wird sowohl im Textfeld als auch im NINOX-Druckdokument korrekt dargestellt.
Beim Druck in ein pdf-Dokument kommt es jedoch zu einem Buchstabensalat.EINGABEFELD:
Hier konnte das Übersetzungsprogramm deepL erfolgreich mittels API in NINOX implementiert werden.
Was noch nicht funktioniert ist der pdf-Ausdruck.AUSGABEFELD:
Program tłumaczeniowy deepL został pomyślnie wdrożony w NINOX za pomocą API.
To, co jeszcze nie działa, to wydruk w formacie pdf.PDF-DOKUMENT:
Program t_'VÖ_7¦Væ–÷w’_FVW_Â_¦÷7F_B pomy_¶Ææ–R_vG&ñ|ony w NINOX za pomoc_R___’ê
To, co jeszcze nie dzia_&_Â_Fò_w–G'V²_r_f÷&Ö_6–R__FbàMeine Frage ist nun:
Wird das pdf bei NINOX am Server erstellt und kann daher vom User nicht beeinflusst werden oder muss ich meinem Acrobat Reader beibringen, wie er mit der Darstellung mehrerer Sprachen umzugehen hat?
Hat jemand von Euch schon einmal ein ähnliches Problem gehabt und gelöst?Vielen Dank für Eure Hilfe!
Josef -
Hallo Josef,
ich nehme an, du du nutzt die cloud variante. Hie kann Ninox im PDF nur ASCII Zeichen ausgeben. Alles andere wird eben so, wie du geschildert hast, ausgegeben. Ich habe die gleichen Probleme mit Russisch. Die Apps (mac,iPad,iphone) haben eine andere print engine und können alle utf8 Zeichen Problemlos ausgeben. Du kannst beim Support erfragen ob dein Team in der Cloud auf andere Print engine umgestellt werden kann. Eventuell ist es nicht kostenlos.
Leo
-
Hallo Leonid,
danke für den Hinweis! Ich habe jetzt beim Support nachgefragt; wenn ich mehr bzw. einen guten Lösungsvorschlag erfahre, werde ich es hier posten.
Das Problem haben ja sicherlich User auf der ganzen Welt und mit vielen unterschiedlichen Sprachen.Viele Grüße
Josef -
Hallo Leonid,
gute Nachricht vom Support: wenn man sich dort meldet, dann stellen sie Dir die PrintEngine um.
Bei mir werden jetzt alle Sprachen perfekt im pdf-File dargestellt, d.h., es sollte auch bei Dir mit Russisch gut funktionieren.Vielen Dank nochmal!
Josef
Content aside
-
1
„Gefällt mir“ Klicks
- vor 2 JahrenZuletzt aktiv
- 17Antworten
- 1313Ansichten