Page 1 sur 1

[Ex] Traducteur anglais-francais

Posté : mer. 11 avr. 2018 21:57
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 !

Re: [Ex] Traducteur anglais-francais

Posté : jeu. 12 avr. 2018 19:02
par walkson
Bonjour,
une petite explication sur le fonctionnement de ce programme et de ses composantes serait souhaitable :mrgreen:

Re: [Ex] Traducteur anglais-francais

Posté : jeu. 12 avr. 2018 19:41
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é 890 fois

Re: [Ex] Traducteur anglais-francais

Posté : jeu. 12 avr. 2018 23:17
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

Re: [Ex] Traducteur anglais-francais

Posté : ven. 13 avr. 2018 00:27
par wiwileborne
et petite question quelle est le plus rapide Inet, Winhttp ou l'api d'après vous ?

Re: [Ex] Traducteur anglais-francais

Posté : ven. 13 avr. 2018 11:20
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)

Re: [Ex] Traducteur anglais-francais

Posté : ven. 13 avr. 2018 17:27
par wiwileborne
Donc avec winhttp je serait libre et cela sera plus rapide vous utiliseriez quoi ?

Re: [Ex] Traducteur anglais-francais

Posté : ven. 13 avr. 2018 22:15
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:

Re: [Ex] Traducteur anglais-francais

Posté : dim. 15 avr. 2018 14:29
par wiwileborne
ok ! et merci ! ^^