Что нового

ATT - Инструмент добавления мультиязычности в скрипт

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
ATT - Application Translate Tool
v0.2 (alpha)




Скачать (10.4 kb)




Предисловие
Идея началась с того, что я решил перевести утилиту Control Viewer от Yashied.
Начал я её переводить руками с применением AppTranslation Module который я же и написал ранее, но в процессе перевода я сильно задумался, а что если всё это дело автоматизировать?
Естественно я понимал что полностью автоматически добавить модуль не получится, т.к довольно сложно программно отличить текстовые строки, надлежащие переводу, от других строк, которые используются разными функциями (структуры, строковые параметры и т.п.).
В начале я сильно сомневался и думал что мне это не по силу, но я всё таки решился на этот подвиг и уселся писать этот инструмент.



Принцип работы:
* Утилита получив на входе путь к файлу, делит его на строки.
* Далее из каждой строки получает подстроки находящиеся между одиночными и двойными кавычками (спасибо asdf8).
* Для этих подстрок формируется элемент списка (ListViewItem) с некоторыми исключениями (см. далее).
* Используя предопределённый шаблон (Ignore Lines Patterns), утилита определяет какие строки помещать в список, а какие нет.
* Часть строк, также используя другой предопределённый шаблон (Marked Lines Patterns), помечается спец. маркером (зелёная стрелка слева у пункта в списке), эти строки имеют высокий приоритет перевода, т.е вероятней всего они должны быть переведены.
* По завершению обработки в соответствии с выбранными параметрами, в каталог выбранного скрипта добавляются файлы:
UDFs\Translation.au3 - Модуль перевода.
Languages\English.lng, Russian.lng - Файлы содержащие строки для перевода.
* Для удобного переключения между языками, в ваш скрипт можно добавить вызов функции _AppTranslation_SelectLangGUI в связке с_AppTranslation_Register, которые определены в Translation.au3:
Код:
$sDefLng = _AppTranslation_SelectLangGUI('My App', $hGUI, $sDefLng)
$aTXT = _AppTranslation_Register($LANGS_DIR & "\" & $sDefLng & ".lng")



Использование:
* На первом этапе (при запуске) указываете параметры модуля перевода...

Au3 Script: Путь до входного скрипта (тот в который следует добавить модуль мультиязыковой поддержки)
Translate Array Name: Имя массива переведённых строк (используется как $aTXT[$iMSG_%s])
Array Msg Format: Формат переменной используемой как индекс массива ($iMSG_%s, %s заменяется на текст образуемый с подстроки учитывая разрешённые символы в имени переменной)
Module File Path Format: Формат пути к файлу модуля перевода (%s\UDFs\Translation.au3, %s заменяется на полный путь к каталогу в котором содержится указанный скрипт (Au3 Script:))
Language File Path Format: Формат пути к файлу перевода используемый модулем (%s\Languages\%d.lng, %s заменяется на полный путь к каталогу в котором содержится указанный скрипт (Au3 Script:), %d заменяется на имя языка из списка языков (Languages:))
Languages: Список языков которые будет поддерживать ваша программа
Default Language: Язык по умолчанию который будет использоваться программой
Marked Lines Patterns: Шаблоны регулярного выражения для пометки строк спец. маркером (зелёная стрелка слева у пункта в списке), эти строки имеют высокий приоритет перевода
Ignore Lines Patterns: Шаблоны регулярного выражения которые определяют какие строки помещать в список, а какие нет
* Далее помечаете строки которые нужно отделить для дальнейшего перевода.
- Двойное нажатие на пункте в списке, откроет окошко с полной строкой в которой найдена подстрока для перевода.

* Нажимаете Translate и ждёте завершения работы.

* Теперь всё что осталось сделать, так это собственно перевести сами строки в файлах перевода (Languages\Russian.lng).



Если у вас есть предложения по улучшению, или свои шаблоны которые вы выявили в процессе использования утилиты, то можете писать о них тут.


P.S.
Первый результат работы данной утилиты.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Это кому то нужно? :scratch:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Немного обновил инструмент.
Исправил проблему связанную с неправильным отображением номера строки при включённой опции игнорирования комментированных строк, что естественно вызывало неправильную обработку и замену строк.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Проблема с переводом программы в которой строки уже прописаны не латинскими символами, например по русский.
Переменные переводимых строк получают названия типа $iMSG__1 и т.п.

Думал может проверять на отсутствие латиницы, и если не найдена, конвертировать транслитом, вот только как быть с другими языками, не русскими? :scratch:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Обновление!

v0.2
+ Добавлена поддержка повторного перевода. Позволяет перевести новые добавленные строки в главном скрипте.
+ Добавлена командная строка в шаблон файла перевода для поддержки генерации нового файла перевода.
Если ваша программа запущена с параметром "/GenerateLangFile:LangName", то будет генерирован файл перевода в виде LangName.lng (в установленной папке языковых файлов).
Полезно в случае если пользователь хочет создать новый файл перевода, а также если требуется обновить программу с сохранением внесённых им изменений в файлы перевода (только новые строки будут добавлены в указанный файл перевода).
+ Теперь имя функции/переменной в которой найдена строка, добавляется как префикс в переменные перевода.
* Небольшие изменения в шаблонах.
* Исправлена проблема с неправильным определением номера строк.
 
Верх