[Ex] Traducteur anglais-francais

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
wiwileborne
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 12 déc. 2016 13:44
Status : Hors ligne

[Ex] Traducteur anglais-francais

#1

Message par wiwileborne »

Hey je vous présente un petit traducteur anglais-français que j'ai fait moi même TradMania !
je le met ici si cela peut aidé des personnes ^^ design basique mais simple
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Cool-Text-282640215525744.ico
#AutoIt3Wrapper_Outfile_x64=Traducteur Ver1.Exe
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Res_Language=1036
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <EditConstants.au3>
#include <File.au3>
#include <FileConstants.au3>
#include <GUIConstantsEx.au3>
#include <IE.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
$Line=0

Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=D:\Users\William\Desktop\Trad et Codage\trad codage autoit\traducteur.kxf
Global $Form1_1 = GUICreate("Form1", 1775, 773, 188, 99, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_TABSTOP))
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1_1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1_1Minimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1_1Maximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "Form1_1Restore")
Global $EditTrad = GUICtrlCreateEdit("", 1338, 89, 417, 465, $ES_WANTRETURN)
GUICtrlSetBkColor($EditTrad, 0xFFFFE1)
GUICtrlSetResizing($EditTrad, $GUI_DOCKAUTO)
Global $EditOrigine = GUICtrlCreateEdit("", 464, 88, 417, 465, $ES_WANTRETURN)
GUICtrlSetBkColor($EditOrigine, 0xC8C8C8)
GUICtrlSetResizing($EditOrigine, $GUI_DOCKAUTO)
Global $EditModif = GUICtrlCreateEdit("", 902, 89, 417, 465, $ES_WANTRETURN)
GUICtrlSetBkColor($EditModif, 0xBFCDDB)
GUICtrlSetResizing($EditModif, $GUI_DOCKAUTO)
Global $Bsuivant = GUICtrlCreateButton("Suivant", 552, 664, 155, 33)
GUICtrlSetOnEvent($Bsuivant, "BsuivantClick")
Global $Bretour = GUICtrlCreateButton("Retour", 360, 664, 155, 33)
GUICtrlSetOnEvent($Bretour, "BretourClick")
Global $BTranslate = GUICtrlCreateButton("BTranslate", 816, 624, 155, 73)
GUICtrlSetOnEvent($BTranslate, "BTranslateClick")
Global $Label1 = GUICtrlCreateLabel("Texte d'origine", 608, 56, 89, 17)
Global $Label2 = GUICtrlCreateLabel("Texte a modifié", 1048, 56, 95, 17)
Global $Label3 = GUICtrlCreateLabel("Traduction auto", 1504, 56, 79, 17)
Global $Bimport = GUICtrlCreateButton("Import", 1160, 672, 139, 33)
GUICtrlSetOnEvent($Bimport, "BimportClick")
Global $Input1 = GUICtrlCreateInput("", 1376, 680, 121, 21)
Global $Label4 = GUICtrlCreateLabel("Nom du fichier de traduction", 1376, 656, 150, 17)
Global $EditTraduit = GUICtrlCreateEdit("", 23, 87, 417, 465, BitOR($GUI_SS_DEFAULT_EDIT,$ES_READONLY))
GUICtrlSetBkColor($EditTraduit, 0xC0DCC0)
GUICtrlSetResizing($EditTraduit, $GUI_DOCKAUTO)
Global $Label5 = GUICtrlCreateLabel("Texte Traduit", 168, 56, 67, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


While 1
 Sleep(100)
WEnd

Func BimportClick()

  ; Create a constant variable in Local scope of the message to display in FileOpenDialog.
    Local Const $sMessage = "Hold down Ctrl or Shift to choose multiple files."

    ; Display an open dialog to select a list of file(s).
    Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", " (*.CSV)| (*.txt)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
    If @error Then
        ; Display the error message.
        MsgBox($MB_SYSTEMMODAL, "", "No file(s) were selected.")

        ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder.
        FileChangeDir(@ScriptDir)
    Else
        ; Change the working directory (@WorkingDir) back to the location of the script directory as FileOpenDialog sets it to the last accessed folder.
        FileChangeDir(@ScriptDir)

        ; Replace instances of "|" with @CRLF in the string returned by FileOpenDialog.
        $sFileOpenDialog = StringReplace($sFileOpenDialog, "|", @CRLF)

    EndIf
global $hFileOpen = FileOpen($sFileOpenDialog, $FO_READ)
  Local $sFileRead = FileReadLine($hFileOpen, $Line)
GUICtrlSetData($EditOrigine, $sFileRead)
GUICtrlSetData($EditModif, $sFileRead)
EndFunc




Func BretourClick()
GUICtrlSetState($Bsuivant, $GUI_DISABLE)
GUICtrlSetState($Bretour, $GUI_DISABLE)
GUICtrlSetState($BTranslate, $GUI_DISABLE)
   If FileExists(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt") Then
_FileWriteToLine(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt", $Line, GUICtrlRead($EditModif),TRUE,True)
GUICtrlSetData($EditTraduit,FileRead(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt"))
Else
   _FileCreate (@ScriptDir&"/"&GUICtrlRead($Input1)&".txt")
EndIf

$Line=$Line-1
If $Line < 1 Then
   $Line = 1
EndIf

Local $sFileRead = FileReadLine($hFileOpen, $Line)
Local $sFileRead2 = FileReadLine(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt", $Line)
   GUICtrlSetData($EditOrigine, $sFileRead)
$lni = _FileCountLines(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt")

   If  $lni >= $Line Then
      GUICtrlSetData($EditModif, $sFileRead2)
   Else
      GUICtrlSetData($EditModif, $sFileRead)
   EndIf
$mytext = GUICtrlRead($EditOrigine)
$sData = _GoogleTranslate(_URIEncode(StringRegExpReplace($mytext, '\R', ' ')))
GUICtrlSetData($EditTrad, $sData)
GUICtrlSetState($Bretour, $GUI_ENABLE)
GUICtrlSetState($BTranslate, $GUI_ENABLE)
GUICtrlSetState($Bsuivant, $GUI_ENABLE)
EndFunc



Func BsuivantClick()
GUICtrlSetState($Bsuivant, $GUI_DISABLE)
GUICtrlSetState($Bretour, $GUI_DISABLE)
GUICtrlSetState($BTranslate, $GUI_DISABLE)
   If FileExists(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt") Then
_FileWriteToLine(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt", $Line, GUICtrlRead($EditModif),TRUE,True)
GUICtrlSetData($EditTraduit,FileRead(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt"))




   Else
   _FileCreate (@ScriptDir&"/"&GUICtrlRead($Input1)&".txt")
EndIf

$Line=$Line+1

   Local $sFileRead = FileReadLine($hFileOpen, $Line)

   Local $sFileRead2 = FileReadLine(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt", $Line)
   GUICtrlSetData($EditOrigine, $sFileRead)

$lni = _FileCountLines(@ScriptDir&"/"&GUICtrlRead($Input1)&".txt")


   If  $lni >= $Line Then
      GUICtrlSetData($EditModif, $sFileRead2)
   Else
      GUICtrlSetData($EditModif, $sFileRead)
   EndIf

$mytext = GUICtrlRead($EditOrigine)
$sData = _GoogleTranslate(_URIEncode(StringRegExpReplace($mytext, '\R', ' ')))
GUICtrlSetData($EditTrad, $sData)
GUICtrlSetState($Bretour, $GUI_ENABLE)
GUICtrlSetState($BTranslate, $GUI_ENABLE)
GUICtrlSetState($Bsuivant, $GUI_ENABLE)
EndFunc

Func BTranslateClick()
GUICtrlSetState($Bsuivant, $GUI_DISABLE)
GUICtrlSetState($Bretour, $GUI_DISABLE)
GUICtrlSetState($BTranslate, $GUI_DISABLE)
$mytext = GUICtrlRead($EditOrigine)
$sData = _GoogleTranslate(_URIEncode(StringRegExpReplace($mytext, '\R', ' ')))
GUICtrlSetData($EditTrad, $sData)
GUICtrlSetState($Bretour, $GUI_ENABLE)
GUICtrlSetState($BTranslate, $GUI_ENABLE)
GUICtrlSetState($Bsuivant, $GUI_ENABLE)
EndFunc

Func Form1_1Close()
Exit
EndFunc
Func Form1_1Maximize()

EndFunc
Func Form1_1Minimize()

EndFunc
Func Form1_1Restore()

EndFunc



Func _GoogleTranslate($sText)
    Local $sResult = ""
    Local $oIE = _IECreate("https://translate.google.fr/#en/fr/" & $sText,Default,False)
    _IELoadWait($oIE)
    Local $oResultBox = _IEGetObjById($oIE, "result_box")

    If IsObj($oResultBox) Then
        $sResult = $oResultBox.innertext
      $sResult = StringRegExpReplace($sResult, '.*?\["(.*?)(?<!\\)"[^\[]*', "$1" & @CRLF)
      ; Replace a blank space (' ') with a - (minus) character.
$sResult = StringReplace($sResult, "\ N", "\n")
$sResult = StringReplace($sResult, "@ <tc: 990>" , "@<tc:990> ")
$sResult = StringReplace($sResult, "</ tc>", "</tc>")
$sResult = StringReplace($sResult, "</ Tc>", "</tc>")
$sResult = StringReplace($sResult, "@ <tb: 5>", "@<tb:5>")
$sResult = StringReplace($sResult, "@ </ tb>", "@</tb>")
$sResult = StringReplace($sResult, "@ </ tc>", "@</tc>")
$sResult = StringReplace($sResult, " <tc: 900>", "<tc:900>")
$sResult = StringReplace($sResult, " [str] ", "[str]")
$sResult = StringReplace($sResult, " [argent]", "[money]")



    EndIf
    _IEQuit($oIE)
    Return $sResult
EndFunc   ;==>_GoogleTraslate


Func _URIEncode($sData)
    ; Prog@ndy
    ; https://www.autoitscript.com/forum/topic/95850-url-encoding/?do=findComment&comment=689060
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData, 4), 1), "")
    Local $nChar
    $sData = ""
    For $i = 1 To $aData[0]
        ; ConsoleWrite($aData[$i] & @CRLF)
        $nChar = Asc($aData[$i])
        Switch $nChar
            Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
                $sData &= $aData[$i]
            Case 32
                $sData &= "+"
            Case Else
                $sData &= "%" & Hex($nChar, 2)
        EndSwitch
    Next
    Return $sData
EndFunc   ;==>_URIEncode
PS: Si vous avez des suggestion pour rajouter, des chose ou améliorer la rapidité je suis preneur !
Fichiers joints
TradMania V0.1.au3
Version 0.1 !
(8.52 Kio) Téléchargé 873 fois
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#2

Message par walkson »

Bonjour,
une petite explication sur le fonctionnement de ce programme et de ses composantes serait souhaitable :mrgreen:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#3

Message par mikell »

wiwileborne a écrit : mer. 11 avr. 2018 21:57Si vous avez des suggestion pour rajouter, des chose ou améliorer la rapidité je suis preneur !
Bin tu pourrais par exemple oublier IE et le remplacer par Inet ou Winhttp, c'est hachement plus rapide
Tu peux aussi utiliser l'api google translate
Je te mets un petit script de trad que j'ai fait ya une paire d'années, ça illustrera mieux que de longs discours :mrgreen:

google_translate_gui.au3
(3.9 Kio) Téléchargé 891 fois
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
wiwileborne
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 12 déc. 2016 13:44
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#4

Message par wiwileborne »

@mikell l'api se bloque chez moi si on fait trop de trad je sait pas pourquoi..
@walkson ok je verrait sa des que j'ai bien optimiser
wiwileborne
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 12 déc. 2016 13:44
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#5

Message par wiwileborne »

et petite question quelle est le plus rapide Inet, Winhttp ou l'api d'après vous ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#6

Message par mikell »

C'est différent. Winhttp permet de communiquer sans navigateur, c'est donc plus rapide
L'api est un outil fourni par google avec des limitations en volume d'utilisation pour un usage gratuit
Il y a d'autres api de traduction qui sont pas mal (yandex, etc) mais qui demandent une clé (fournie gratuitement)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
wiwileborne
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 12 déc. 2016 13:44
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#7

Message par wiwileborne »

Donc avec winhttp je serait libre et cela sera plus rapide vous utiliseriez quoi ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#8

Message par mikell »

ça dépend de l'usage...
Que ce soit sur le site ou avec l'api, google translate impose une limite de 5000 caractères. Dans ce cas la rapidité peut être un piège parce que la limite est atteinte vachement vite :mrgreen:
Donc l'api pour des "petites" traductions, et pour plus de volume peut-être le navigateur en découpant le texte en tronçons de moins de 5000 caractères (pas testé)
Mais après tout rien ne t'empêche d'intégrer les 2 méthodes dans ton script :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
wiwileborne
Niveau 1
Niveau 1
Messages : 9
Enregistré le : lun. 12 déc. 2016 13:44
Status : Hors ligne

Re: [Ex] Traducteur anglais-francais

#9

Message par wiwileborne »

ok ! et merci ! ^^
Répondre