Advertisement
AZJIO

пакетный перевод файлов в QTranslate

Mar 6th, 2014
1,075
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 5.57 KB | None | 0 0
  1. ; С помощью QTranslate переведит txt-файлы в текущей (или указанной в скрипте) папке и сохраняет в папке "Translate" с тем же именем. Направление перевода определяется настройками QTranslate. Автоматизация избавляет от ручных действий для перевода огромного количества файлов.
  2. ; Смысл скрипта: а) прочитать файл, вставить содержимое в QTranslate, б) Нажать кнопку "Перевести", считать текст из результирующего окна, в) сохранить в файл.
  3. ; Для защиты от ошибок а) поле результата в QTranslate очищается и при считывании, если возврат не содержит переноса строки (тексты уменя все более одной строки), то скрипт повторяет запрос каждые 0.2 сек. Если не удалось добится за 20 сек, скрипт завершается с предупреждением и записью лога.
  4. ; Для работы скрипта вам нужн - AutoIt3_v3.3.8.1 http://azjio.ucoz.ru/load/vsjo_dlja_autoit3/kollekcii/komplekt_autoit3_v3_3_8_1/5-1-0-18
  5. ; и QTranslate, установленный и запущенный.
  6. #include <FileOperations.au3>
  7.  
  8. $sPath = @ScriptDir ; Путь файлов для перевода
  9. $sMask = '*.txt' ; Маска файлов для перевода
  10. $Title = 'QTranslate' ; Имя окна переводчика
  11.  
  12. ; $hWnd = WinWait($Title, "", 5) ; без таймаута (5) ожидание бесконечно
  13. $hWnd = WinWait('[TITLE:' & $Title & '; CLASS:#32770]', "", 5) ; без таймаута (5) ожидание бесконечно
  14. If Not $hWnd Then Exit MsgBox(0, 'Сообщение', 'Не найдено окно переводчика ' & $Title & ', завершаем работу скрипта')
  15. ; Sleep(200)
  16. $hRichEdit1 = ControlGetHandle($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:1]')
  17. $hRichEdit2 = ControlGetHandle($hWnd, '', '[CLASS:RichEdit20W; INSTANCE:2]')
  18. $hBtnTranslate = ControlGetHandle($hWnd, '', '[CLASS:Button; INSTANCE:7]')
  19. ; If Not ($hRichEdit1 And $hRichEdit2 And $hBtnTranslate) Then Exit MsgBox(4096, 'Сообщение', 'Элементы окна не обнаружены')
  20. If Not $hRichEdit1 Then Exit MsgBox(0, 'Сообщение', 'RichEdit1 не обнаружен')
  21. If Not $hRichEdit2 Then Exit MsgBox(0, 'Сообщение', 'RichEdit2 не обнаружен')
  22. If Not $hBtnTranslate Then Exit MsgBox(0, 'Сообщение', 'BtnTranslate не обнаружен')
  23. ControlSetText($hWnd, '', $hRichEdit2, '') ; Очищаем окно 2
  24. If Not FileExists($sPath & '\Translate') Then DirCreate($sPath & '\Translate')
  25.  
  26. MsgBox(0, 'Сообщение', 'Не мешайте работе программы')
  27. WinActivate($hWnd)
  28.  
  29. $tmp = ''
  30. $Error = ''
  31. $aFileList = _FO_FileSearch($sPath, $sMask, True, 125, 0)
  32. If @error Then Exit MsgBox(0, 'Сообщение', 'Файлов не найдено')
  33.  
  34. For $i = 1 To $aFileList[0]
  35.     $sText = FileRead($sPath & '\' & $aFileList[$i]) ; Считываем текст перевода
  36.     ControlSetText($hWnd, '', $hRichEdit1, $sText) ; вставляем текст в окно
  37.     Sleep(100)
  38.     ControlClick($hWnd, '', $hBtnTranslate) ; жмём кнопку "Перевести"
  39.     Sleep(200)
  40.     $z = 0
  41.     While 1
  42.         $sText = ControlGetText($hWnd, '', $hRichEdit2) ; Считываем текст с окна перевода
  43.         If StringInStr($sText, @CRLF) Then ; Если текст содержит перенос строки, тогда
  44.             ControlSetText($hWnd, '', $hRichEdit2, '') ; Очищаем окно 2
  45.             ToolTip($i & ' - ' & $aFileList[$i] & @CRLF & ' - вставка')
  46.             ExitLoop
  47.         Else ; Иначе ждём 0,2 сек и пробуем считывать текст повторно
  48.             Sleep(200)
  49.             $z += 1
  50.             ToolTip($i & ' - ' & $aFileList[$i] & @CRLF & ' - ожидание')
  51.         EndIf
  52.         If $z = 100 Then
  53.             MsgBox(0, 'Сообщение', 'Уже 20 секунд ожидания')
  54.             _SaveError()
  55.         EndIf
  56.     WEnd
  57.     If $tmp = $sText Then MsgBox(0, 'Message', 'Повтор ' & $aFileList[$i])
  58.     $tmp = $sText
  59.     ToolTip($i & ' - ' & $aFileList[$i] & @CRLF & ' - сохранение')
  60.     ;сверка
  61.     $tmp1 = StringStripWS(StringRegExpReplace($sText, '(?s)^.*?\r\n(.*?)\r\n.*$', '\1'), 8)
  62.     $tmp2 = StringTrimRight($aFileList[$i], 4)
  63.     If $tmp1 <> $tmp2 And $i <> 1 Then $Error &= $tmp1 & ' - ' & $tmp2 & @CRLF
  64.     If FileExists($sPath & '\Translate\' & $aFileList[$i]) Then $Error &= $aFileList[$i] & ' - уже существует, повтор' & @CRLF
  65.    
  66.     _Fix($sText)
  67.     $hFile = FileOpen($sPath & '\Translate\' & $aFileList[$i], 2)
  68.     FileWrite($hFile, $sText)
  69.     FileClose($hFile)
  70. Next
  71. MsgBox(0, 'Готово', $Error)
  72. _SaveError()
  73. ShellExecute($sPath & '\Translate')
  74.  
  75. Func _Fix(ByRef $sText)
  76.     $sText = StringRegExpReplace($sText, '# # # (User Defined Function|Parameters|Description|Remarks|Related|Example) # # #', '###\1###')
  77.     $sText = StringRegExpReplace($sText, '@ @ (ParamTable|End|IncludeExample|ReturnTable|ControlCommandTable|MsdnLink) @ @', '@@\1@@')
  78.     $sText = StringRegExpReplace($sText, '\$ (\w)', '\$\1')
  79. EndFunc   ;==>_Fix
  80.  
  81. Func _SaveError()
  82.     If $Error Then
  83.         Local $hFile = FileOpen(@ScriptDir & '\!!!_Error.txt', 2)
  84.         FileWrite($hFile, $Error)
  85.         FileClose($hFile)
  86.     EndIf
  87.     Exit
  88. EndFunc   ;==>_SaveError
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement