Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; С помощью QTranslate переведит txt-файлы в текущей (или указанной в скрипте) папке и сохраняет в папке "Translate" с тем же именем. Направление перевода определяется настройками QTranslate. Автоматизация избавляет от ручных действий для перевода огромного количества файлов.
- ; Смысл скрипта: а) прочитать файл, вставить содержимое в QTranslate, б) Нажать кнопку "Перевести", считать текст из результирующего окна, в) сохранить в файл.
- ; Для защиты от ошибок а) поле результата в QTranslate очищается и при считывании, если возврат не содержит переноса строки (тексты уменя все более одной строки), то скрипт повторяет запрос каждые 0.2 сек. Если не удалось добится за 20 сек, скрипт завершается с предупреждением и записью лога.
- ; Для работы скрипта вам нужн - AutoIt3_v3.3.8.1 http://azjio.ucoz.ru/load/vsjo_dlja_autoit3/kollekcii/komplekt_autoit3_v3_3_8_1/5-1-0-18
- ; и QTranslate, установленный и запущенный.
- #include <FileOperations.au3>
- $sPath = @ScriptDir ; Путь файлов для перевода
- $sMask = '*.txt' ; Маска файлов для перевода
- $Title = 'QTranslate' ; Имя окна переводчика
- ; $hWnd = WinWait($Title, "", 5) ; без таймаута (5) ожидание бесконечно
- $hWnd = WinWait('[TITLE:' & $Title & '; CLASS:#32770]', "", 5) ; без таймаута (5) ожидание бесконечно
- If Not $hWnd Then Exit MsgBox(0, 'Сообщение', 'Не найдено окно переводчика ' & $Title & ', завершаем работу скрипта')
- ; Sleep(200)
- $hRichEdit1 = ControlGetHandle($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:1]')
- $hRichEdit2 = ControlGetHandle($hWnd, '', '[CLASS:RichEdit20W; INSTANCE:2]')
- $hBtnTranslate = ControlGetHandle($hWnd, '', '[CLASS:Button; INSTANCE:7]')
- ; If Not ($hRichEdit1 And $hRichEdit2 And $hBtnTranslate) Then Exit MsgBox(4096, 'Сообщение', 'Элементы окна не обнаружены')
- If Not $hRichEdit1 Then Exit MsgBox(0, 'Сообщение', 'RichEdit1 не обнаружен')
- If Not $hRichEdit2 Then Exit MsgBox(0, 'Сообщение', 'RichEdit2 не обнаружен')
- If Not $hBtnTranslate Then Exit MsgBox(0, 'Сообщение', 'BtnTranslate не обнаружен')
- ControlSetText($hWnd, '', $hRichEdit2, '') ; Очищаем окно 2
- If Not FileExists($sPath & '\Translate') Then DirCreate($sPath & '\Translate')
- MsgBox(0, 'Сообщение', 'Не мешайте работе программы')
- WinActivate($hWnd)
- $tmp = ''
- $Error = ''
- $aFileList = _FO_FileSearch($sPath, $sMask, True, 125, 0)
- If @error Then Exit MsgBox(0, 'Сообщение', 'Файлов не найдено')
- For $i = 1 To $aFileList[0]
- $sText = FileRead($sPath & '\' & $aFileList[$i]) ; Считываем текст перевода
- ControlSetText($hWnd, '', $hRichEdit1, $sText) ; вставляем текст в окно
- Sleep(100)
- ControlClick($hWnd, '', $hBtnTranslate) ; жмём кнопку "Перевести"
- Sleep(200)
- $z = 0
- While 1
- $sText = ControlGetText($hWnd, '', $hRichEdit2) ; Считываем текст с окна перевода
- If StringInStr($sText, @CRLF) Then ; Если текст содержит перенос строки, тогда
- ControlSetText($hWnd, '', $hRichEdit2, '') ; Очищаем окно 2
- ToolTip($i & ' - ' & $aFileList[$i] & @CRLF & ' - вставка')
- ExitLoop
- Else ; Иначе ждём 0,2 сек и пробуем считывать текст повторно
- Sleep(200)
- $z += 1
- ToolTip($i & ' - ' & $aFileList[$i] & @CRLF & ' - ожидание')
- EndIf
- If $z = 100 Then
- MsgBox(0, 'Сообщение', 'Уже 20 секунд ожидания')
- _SaveError()
- EndIf
- WEnd
- If $tmp = $sText Then MsgBox(0, 'Message', 'Повтор ' & $aFileList[$i])
- $tmp = $sText
- ToolTip($i & ' - ' & $aFileList[$i] & @CRLF & ' - сохранение')
- ;сверка
- $tmp1 = StringStripWS(StringRegExpReplace($sText, '(?s)^.*?\r\n(.*?)\r\n.*$', '\1'), 8)
- $tmp2 = StringTrimRight($aFileList[$i], 4)
- If $tmp1 <> $tmp2 And $i <> 1 Then $Error &= $tmp1 & ' - ' & $tmp2 & @CRLF
- If FileExists($sPath & '\Translate\' & $aFileList[$i]) Then $Error &= $aFileList[$i] & ' - уже существует, повтор' & @CRLF
- _Fix($sText)
- $hFile = FileOpen($sPath & '\Translate\' & $aFileList[$i], 2)
- FileWrite($hFile, $sText)
- FileClose($hFile)
- Next
- MsgBox(0, 'Готово', $Error)
- _SaveError()
- ShellExecute($sPath & '\Translate')
- Func _Fix(ByRef $sText)
- $sText = StringRegExpReplace($sText, '# # # (User Defined Function|Parameters|Description|Remarks|Related|Example) # # #', '###\1###')
- $sText = StringRegExpReplace($sText, '@ @ (ParamTable|End|IncludeExample|ReturnTable|ControlCommandTable|MsdnLink) @ @', '@@\1@@')
- $sText = StringRegExpReplace($sText, '\$ (\w)', '\$\1')
- EndFunc ;==>_Fix
- Func _SaveError()
- If $Error Then
- Local $hFile = FileOpen(@ScriptDir & '\!!!_Error.txt', 2)
- FileWrite($hFile, $Error)
- FileClose($hFile)
- EndIf
- Exit
- EndFunc ;==>_SaveError
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement