Что нового

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Au3Localizer
v1.0

Step1.pngStep2.png
Скачать

Предисловие
Идея началась с того, что я решил перевести утилиту 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

Использование:
  1. На первом этапе (при запуске) указываете параметры модуля перевода...
    • 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: Шаблоны регулярного выражения которые определяют какие строки помещать в список, а какие нет
  2. Далее помечаете строки которые нужно отделить для дальнейшего перевода.
    • Двойное нажатие на пункте в списке, откроет окошко с полной строкой в которой найдена подстрока для перевода.
  3. Нажимаете Localize и ждёте завершения работы.
  4. Теперь всё что осталось сделать, так это собственно перевести сами строки в файлах перевода (Locale\Russian.lng).





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

P.S и Credits
 

Вложения

  • ATT.zip
    10.4 КБ · Просмотры: 16
  • Au3Localizer_1.0.zip
    452.3 КБ · Просмотры: 19
Последнее редактирование:
  • Like
Реакции: Norm
Автор
CreatoR

CreatoR

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

CreatoR

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

CreatoR

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

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

CreatoR

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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Значительное обновление:

v1.0
* Название проекта переименовано в Au3Localizer.
* Почти полностью переписана программа.
* Теперь используется объект вместо массива в качестве строкового представителя.
* Обновлены шаблоны.
 
Верх