PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Deepl comme traducteur Windev avec API
Deepl comme traducteur Windev avec API
Débuté par Ralph IGCI, 26 nov. 2022 10:40 - 22 réponses
Membre enregistré
433 messages
Popularité : +6 (6 votes)
Posté le 26 novembre 2022 - 10:40
Bonjour,





j'ai la clé google, j'ai aussi une clé DEEPL, comment la mettre dans Windev, SVP ?
ça permet de traduire les textes des champs ,boutons et autre
Merci
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 26 novembre 2022 - 14:42
Salut Raplh,

Je ne savais pas que l'on pouvais mettre une clé DEEPL !

J'ai essayé d'ajouté l'api fournie par DEEPL, mais sans résultat ;(
Trop nul dans le domaine des appels API.
Malgré le lien d'aide pour utiliser cette api, je cale !

https://www.deepl.com/docs-api


Bon courage.
Christian

--
Christian - kick71
Membre enregistré
433 messages
Popularité : +6 (6 votes)
Posté le 26 novembre 2022 - 15:34
Bonsoir
C'est PCSOFT qui doit donner le format
A bientôt
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 13 décembre 2022 - 17:50
Bonsoir à tous,

Après consultation ST ( je passerai le détail de la réponse ) , et recherche de mon côté, je n'arrive pas à coder l'appel.

J'ai codé cela :

reqhttpenvoi est un httpRequête
reqhttpreponse est un httpRéponse

reqhttpenvoi..URL = "https://api-free.deepl.com/v2/translate"
reqhttpenvoi.Entête["ContentType"] = "application/x-www-form-urlencoded"
reqhttpenvoi.Entête["Authorization"] = "DeepL-Auth-Key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
reqhttpenvoi.Entête["Host"] = "api-free.deepl.com"
reqhttpenvoi.Entête["Content-Length"] = 37
reqhttpenvoi.Entête["User-Agent"] = "YourApp/1.2.3"
reqhttpenvoi.Entête["target_lang"] = "DE"
reqhttpenvoi.Entête["text"] = "Hello world!" //"&target_lang=DE"

reqhttpreponse = HTTPEnvoie(reqhttpenvoi)

SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON
Trace("Type de réponse")
Trace(reqhttpreponse..ContentType)
Trace("Réponse")
Trace(reqhttpreponse..Contenu)
FIN


Dans l'aide de l'appel DeepL il préconise ce format :

POST /v2/translate HTTP/2
Host: api-free.deepl.com
Authorization: DeepL-Auth-Key 3d9xxxxxxxx
User-Agent: YourApp/1.2.3
Content-Length: 37
Content-Type: application/x-www-form-urlencoded
text=Hello%2C%20world!&target_lang=DE

J'ai sûrement "cafouillé" quelque part mais j'ai systèmatiquement un retour 400 avec message erreur :
Type de réponse
application/json
Réponse
{"message":"Parameter 'text' not specified."}

Si une âme charitable et compétente en la matière pouvait m'aider :(

Bonne fin de soirée et bon dev à tous ...

--
Christian - kick71
Membre enregistré
806 messages
Popularité : +40 (42 votes)
Posté le 13 décembre 2022 - 18:28
Bonjour, votre exemple utilise GET et non POST comme dans leur exemple.

curl -X POST "https://api-free.deepl.com/v2/translate" \N
-H "Autorisation : DeepL-Auth-Key [yourAuthKey]". \
-d "text=Hello%2C%20world ! \
-d 'target_lang=DE

Rubén
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 13 décembre 2022 - 21:14
Bonsoir Rubén,

Merci pour ton retour.
Comme je le disais plus haut, c'est un univers que je ne maitrise pas du tout. Je tatonne, cherche, mais ne trouve pas.

Si j'osais demander, tu coderais comment au vu de leur exemple ?

Vais continuer à pousser mes recherches qui me serviront pour la suite.

Bonne soirée et encore merci pour ton retour

--
Christian - kick71
Membre enregistré
806 messages
Popularité : +40 (42 votes)
Posté le 13 décembre 2022 - 22:06
Bonjour, essayez ceci. Sans le DeepL-Auth-Key je ne peux pas vous en dire plus.

reqhttpenvoi est un httpRequête
reqhttpreponse est un httpRéponse
reqhttpenvoi.Méthode = httpPost
reqhttpenvoi.URL = "https://api-free.deepl.com/v2/translate"
//reqhttpenvoi.Header["ContentType"] = "application/x-www-form-urlencoded"
reqhttpenvoi.Entête["Authorization"] = "DeepL-Auth-Key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
//reqhttpenvoi.Header["Host"] = "api-free.deepl.com"
//reqhttpenvoi.Header["Content-Length"] = 37
//reqhttpenvoi.Header["User-Agent"] = "YourApp/1.2.3"
reqhttpenvoi.Entête["target_lang"] = "DE"
reqhttpenvoi.Entête["text"] = "Hello world!" //"&target_lang=DE"

reqhttpreponse = HTTPEnvoie(reqhttpenvoi)

SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON


Trace("Type de réponse")
Trace(reqhttpreponse.CodeEtat)
Trace(reqhttpreponse.DescriptionCodeEtat)
Trace("--------------------------------------")
Trace(reqhttpreponse.ContentType)
Trace("Réponse")
Trace(reqhttpreponse.Contenu)
FIN


Rubén
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 13 décembre 2022 - 22:19
Merci encore Rubén

Le DeepL-Auth-Key est une clé donnée lors de l'enregistrement et pour utilisation.
J'obtient tjrs la réponse ci-dessous.

Type de réponse
400

--------------------------------------
application/json
Réponse
{"message":"Parameter 'text' not specified."}

MAlheureusement je n'ai pas eu le soutient du "S_T" sans la commande de la V27 ou v28

Je vais finir par botter en touche malgré ma pugnacité.

Demain sera un autre jour...

--
Christian - kick71
Membre enregistré
806 messages
Popularité : +40 (42 votes)
Posté le 13 décembre 2022 - 22:39
Rebonjour. Dans l'exemple, les espaces sont codés. Essayez la traduction de 0123456789 pour voir si vous obtenez la même erreur. Si vous n'obtenez pas la même erreur, essayez avec

reqhttpenvoi.Entête["text"] = URLEncode("Hello world !")

Pour transmettre le texte à l'API

Selon les instructions, le texte doit être UTF-8.

"Text to be translated. Only UTF-8-encoded plain text is supported. The parameter may be specified multiple times and translations are returned in the same order as they are requested. Each of the parameter values may contain multiple sentences."

Essayez aussi

reqhttpenvoi.Entête["text"] = ChaîneVersUTF8("Hello world !")

Rubén
Message modifié, 13 décembre 2022 - 22:45
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 14 décembre 2022 - 08:53
Bonjour Rubèn,

Malheureusement, tjrs même erreur 400 avec même message }:(

J'ai envoyé un mail au SAV deepL hier, et la réponse est rapide :
Ce reporter à l'aide, ne font pas de sav avec language prog Windev.

Normal, au vu des différents Softs, mais bon !

Je me donne encore cette matinée, après trop de temps perdu et non facturé ...

Merci pour ttes tes soluces que tu m'as données, même si cela n'a rien changé, c'est sympa.

Christian

--
Christian - kick71
Membre enregistré
57 messages
Popularité : +9 (11 votes)
Posté le 14 décembre 2022 - 09:39
Bonjour,

La recherche des ressources pratiques trouve un exemple dans la LST 129 :

Exemple de la LST n°129 : WD QuickTranslate
L'exemple WD QuickTranslate est un exemple WINDEV et WINDEV Mobile et illustre l'usage du composant interne Traduction livré avec celui-ci.

Pour ne pas réinventer la roue !

--
A+
Dev-OC
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 14 décembre 2022 - 09:46
Bonjour DEV-OC,

Merci.

Me suis arrêté à la LST 121, sur clé usb }:(

--
Christian - kick71
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 14 décembre 2022 - 10:07
Fait suer de reprendre un abt LST 1 an pour un composant d'une LST }:(

--
Christian - kick71
Membre enregistré
2 581 messages
Popularité : +222 (260 votes)
Posté le 14 décembre 2022 - 10:29
cet entête "application/x-www-form-urlencoded" indique que tu vas envoyer un formulaire, ce que tu ne fais pas.

"text" n'est pas un entête mais la donnée du formulaire. Il faut donc que tu crées le formulaire à envoyer et l'envoyer dans ta requête https://doc.pcsoft.fr/?1000017119&name=httpcreeformulaire_fonction
https://doc.pcsoft.fr/?1000017190&name=httpenvoieformulaire_fonction





--
Cordialement,

Philippe SAINT-BERTIN
Membre enregistré
806 messages
Popularité : +40 (42 votes)
Posté le 14 décembre 2022 - 12:51
Bonjour, c'est pourquoi dans ma réponse tous les champs qui ne sont pas nécessaires sont commentés. Je suppose que vous avez utilisé mon code dans vos tests.

Rubén
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 14 décembre 2022 - 13:35
Oui bien sûr Rubèn ...

Merci à tout les deux pour m'avoir apporté des possibilités.

Vais voir avec le client si je peux répercuter ( englober ) le surcout si investissement dans cette LST 8)
En espérant que le composant réponde à mes besoins ;(

--
Christian - kick71
Membre enregistré
179 messages
Popularité : +17 (17 votes)
Posté le 22 décembre 2022 - 10:06
Bonjour Christian,

je ne sais pas si vous y êtes parvenus, il manquait juste le "text" qui n'était pas au bon endroit, il faut le mettre comme paramètre directement dans l'URL.

Voici un code fonctionnel (avec évidemment la clé DeepL à modifier et la chaine à fermer)

ELangue est une Enumération
indetermine = ""
allemand = "DE"
anglais = "EN"
français = "FR"
italien = "IT"
FIN


sCleAPIDeepl est une chaîne = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:fx"
sTexteATraduire est une chaîne = "Windev c'est bien ! ET ce test, ça permet de tester les caractères spéciaux ET les accents. ;)"
eLangueCible est une ELangue = italien
eLangueOrigine est une ELangue = indetermine
cMyRequest est un httpRequête
cMyRequest.URL = "https://api-free.deepl.com/v2/translate?text="+URLEncode(sTexteATraduire)+"&target_lang="+eLangueCible..Valeur
cMyRequest.Méthode = httpPost
cMyRequest..Entête["Authorization"] = "DeepL-Auth-Key "+SansEspace(sCleAPIDeepl)

//cMyRequest.

cMyResponse est un httpRéponse = RESTEnvoie(cMyRequest)
SI ErreurDétectée ALORS
Erreur(ErreurInfo(errComplet))
SINON
// Trace(UTF8VersChaîne(cMyResponse.Contenu))
FIN

jJSON est un JSON = cMyResponse.Contenu

vJSON est un Variant = JSONVersVariant(jJSON)
sTexteTraduit est une chaîne = vJSON.translations[1].text
eLangueOrigine = EnumérationDepuisValeur(ELangue,vJSON.translations[1].detected_source_language,indetermine)
sTraduction est une chaîne = "Texte traduit du "+eLangueVersTexte(eLangueOrigine)+" vers "+eLangueVersTexte(eLangueCible)+RC+RC+sTexteATraduire+RC+RC+sTexteTraduit

Info(sTraduction)


PROCEDURE INTERNE eLangueVersTexte(eLang est un ELangue) : chaîne
SELON eLang
CAS allemand
RENVOYER "allemand"
CAS anglais
RENVOYER "anglais"
CAS français
RENVOYER "français"
CAS italien
RENVOYER "italien"

FIN
RENVOYER "<indeterminé>"
FIN
Membre enregistré
874 messages
Popularité : +39 (51 votes)
Posté le 23 décembre 2022 - 11:23
Merci Jérôme,

Je suis passé par une autre solution, mais il me semble que dans mon cas , ton code fera mieux l'affaire.
Je vais l'implanter et le tester :merci:

Merci et bonnes fêtes 8)

--
Christian - kick71
Posté le 18 septembre 2023 - 13:13
Bonjour Jérôme,
Bravo pour votre code de l'api deepl.
comment puis-je vous contacter?
cordialement
hubert@de-buren.ch
Membre enregistré
53 messages
Popularité : +15 (15 votes)
Posté le 10 mai 2024 - 22:44
Merci Jérôme ! :) :merci:

--
Gestan, le couteau Suisse de la gestion d'entreprise.
https://www.gestan.fr
dev@gestan.fr
Membre enregistré
288 messages
Popularité : +24 (28 votes)
Posté le 12 mai 2024 - 09:07
Merci Jérôme :merci:
Posté le 28 mai 2024 - 16:57
Merci !!!! C'est juste parfait !!!
Membre enregistré
2 messages
Posté le 21 juin 2024 - 09:06
Merci à Jérôme et aux autres participants de ce forum pour les codes fournis.
Grace à cette aide précieuse, pas de soucis pour traduire un texte avec des balises HTML simples (de type paragraphe <p>)
Par contre, la traduction renvoie un texte tronqué lors de l'envoi de texte contenant des guillemets (quotation marks en EN), comme dans le texte suivant :
<p>Texte à traduire avec <span style="font-weight: bold;">des balises</span> complémentaires</p>
La traduction s'arrête au premier guillemet rencontré :-(
Je souhaiterais savoir s'il y a un moyen d'envoyer du texte html comportant des guillemets à Deepl (en dehors de l'envoi d'un fichier physique) pour avoir la traduction en retour.
Merci d'avance pour votre aide :-)