- Сообщения
- 8,673
- Репутация
- 2,486
Предисловие
Идея началась с того, что я решил перевести утилиту Control Viewer от @Yashied.
Начал я её переводить руками с применением AppTranslation Module который я же и написал ранее, но в процессе перевода я сильно задумался, а что если всё это дело автоматизировать?
Естественно я понимал что полностью автоматически добавить модуль не получится, т.к довольно сложно программно отличить текстовые строки, надлежащие переводу, от других строк, которые используются разными функциями (структуры, строковые параметры и т.п.).
В начале я сильно сомневался и думал что мне это не по силу, но я всё таки решился на этот подвиг и уселся писать этот инструмент.
Принцип работы:
- Утилита получив на входе путь к файлу, делит его на строки.
- Далее из каждой строки получает подстроки находящиеся между одиночными и двойными кавычками (спасибо asdf8).
- Для этих подстрок формируется элемент списка (ListViewItem) с некоторыми исключениями (см. далее).
- Используя предопределённый шаблон (Ignore Lines Patterns), утилита определяет какие строки помещать в список, а какие нет.
- Часть строк, также используя другой предопределённый шаблон (Marked Lines Patterns), помечается спец. маркером (зелёная стрелка слева у пункта в списке), эти строки имеют высокий приоритет перевода, т.е вероятней всего они должны быть переведены.
- По завершению обработки в соответствии с выбранными параметрами, в каталог выбранного скрипта добавляются файлы:
- Includes\Localize.au3 - Модуль перевода.
- Locale\English.lng, Russian.lng - Файлы содержащие строки для перевода.
- Для удобного переключения между языками, в ваш скрипт можно добавить вызов функции _Localize_SwitchLocaleGUI в связке с __Localize_Register, которые определены в Localize.au3:
Код:
$sDefLng = _Localize_SwitchLocaleGUI('My App', $hGUI, $sDefLng)
_Localize_Register($LOCALES_DIR & '\' & $sDefLng & '.lng')
- После локализации скрипта его можно запускать из командной строки:
- /GenerateLocaleFile[="FileName"]
- Если FileName указан и существует, генерирует недостающие строки для этого языкового файла
- Если FileName указан и НЕ существует, генерирует языковый файла с нужными строками для перевода
- Если FileName НЕ указан, генерирует недостающие строки для всех языковых файлов в папке Locale
- /GenerateLocaleFile[="FileName"]
Использование:
- На первом этапе (при запуске) указываете параметры модуля перевода...
- Au3 Script: Путь до входного скрипта (тот в который следует добавить модуль мультиязыковой поддержки)
- Localize Object Name: Имя объекта переведённых строк (используется как $oLocalize.%s)
- Module File Path Format: Формат пути к файлу модуля перевода (%s\UDFs\Translation.au3, %s заменяется на полный путь к каталогу в котором содержится указанный скрипт (Au3 Script:)
- Language File Path Format: Формат пути к файлу перевода используемый модулем (%s\Locales\%d.lng, %s заменяется на полный путь к каталогу в котором содержится указанный скрипт (Au3 Script:), %d заменяется на имя языка из списка языков (Locales:)
- Locales: Список языков которые будет поддерживать ваша программа
- Default Language: Язык по умолчанию который будет использоваться программой
- Marked Lines Patterns: Шаблоны регулярного выражения для пометки строк спец. маркером
- Ignore Lines Patterns: Шаблоны регулярного выражения которые определяют какие строки помещать в список, а какие нет
- Далее помечаете строки которые нужно отделить для дальнейшего перевода.
- Двойное нажатие на пункте в списке, откроет окошко с полной строкой в которой найдена подстрока для перевода.
- Нажимаете Localize и ждёте завершения работы.
- Теперь всё что осталось сделать, так это собственно перевести сами строки в файлах перевода (Locale\Russian.lng).
Если у вас есть предложения по улучшению, или свои шаблоны которые вы выявили в процессе использования утилиты, то можете писать о них тут.
В архив также включена отдельная версия UDF для использования вручную (пример использования также предоставляется), без Au3Localizer.
P.S и Credits
- AutoItObject_Internal от genius257 используется в Au3Localizer и библиотеке Localize.au3.
- Первый результат работы данной утилиты.
Вложения
Последнее редактирование: