Локализация FairStars Audio Converter Pro

Fairstars Audio Converter - программа для конвертации WAV, RealMedia(RM, RA, RAM, RMJ, RMVB), AC3, DTS,
  1. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 945

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1676

    Был: 2024-07-28 22:59

    Лайков: 167



    Fairstars Audio Converter - программа для конвертации WAV, RealMedia(RM, RA, RAM, RMJ, RMVB), AC3, DTS, AIF, AIFF, AIFC, AU, VOC, PVF, PAF, IFF, SVX, APE, FLAC, WavPack(WV), OGG, VQF, MP1, MP2, MP3, MP4, M4A, M4B, AAC, AMR(AMR-NB + AMR-WB), WMA, WMV, ASF форматов аудио. С помощью этой программы вы сможете преобразовать несколько файлов в пакетном режиме, независимо от их источника и текущего формата. Также программа имеет встроенный плеер для проигрывания музыкальных файлов. Конвертация аудио файлов выполняется без создания каких-либо временных файлов и с высокой скоростью преобразования. Другие возможности программы включают в себя нормализацию звука, поддержку редактирования ID3 тегов и многое другое.




    Особенности локализации
    FairStars Audio Converter Pro


    Первая особенность.




    Главный исполняемый файл AudioConverterPro.exe запакован протектором ASPack. Смотрим утилитой Exeinfo PE v0.0.3.4 (разраб. A.S.L.):

    Рис. 1


    Перепроверяем другим инструментом Detect It Easy v0.80 (разраб. Hellsp@wn/Hors):

    Рис. 2


    Чтобы локализовать программу, её необходимо распаковать. Создавать локализованную библиотеку (resource DLL) нет смысла, т.к. программа написана на С++ (смотрите вторую строку в Detect It Easy - linker >> MS Linker(9.0)[EXE32]). Вы можете попробовать сделать дамп программы, затем загрузить его в шаблонный редактор, перевести пару строк и создать библиотеку ресурсов. Но она работать не будет. Подхват внешних файлов ресурсов выполняют приложения написанные на Delphi. Поэтому в нашем случае путь один - распаковка. Можно также попробовать сделать инжектор, но в данном случае он не поможет (причину вы узнаете позже).

    Из имеющихся в сети автоматических распаковщиков протектора ASPack, с поставленной задачей справился только единственный - Unpacker for ASPack v1.0 (разраб. Nacho_dj/ARTeam). Обязательно отметьте опцию "Rebuild sections (Delete wrapper sections & uncompress resources)" (Перестроить секции (Удалить секции враппера и распаковать ресурсы)). Нам, для перевода, конечно же нужны ресурсы в распакованном виде. Плюс, этот распаковщик разместит секцию ресурсов в самом конце файла, что также является важным аспектом для успешной локализации программы.

    Рис. 3


    При сохранении файла укажите его имя, например, AudioConverterPro_un.exe. Готово. После распаковки проверьте работу программы (пробежитесь по пунктам меню, загляните в настройки и измените там пару параметров, в общем проверьте функции программы). Если все в порядке, то можете приступать к локализации.

    Вторая особенность.



    Строки интерфейса на 80% жестко-закодированные. Когда вы загрузите программу в шаблонный редактор, перед вами предстанет стандартная структура ресурсов:

    Рис. 4


    Выполнив перевод строк в ресурсах RT_MENU[4], RT_DIALOG[5], RT_STRING[6] и RT_DLGINIT[240], создав локализованный файл и запустив программу, вы будете несказанно удивлены тем, что интерфейс программы, за исключением меню и верхней панели, остался на английском языке.

    Рис. 5


    Оказывается все остальные строки, включая элементы диалоговых окон, являются жестко-закодированными. Перевод программы я делал в IDA (разраб. Hex-Rays), и продублировать все строки интерфейса. Для строк, имеющих более одной ссылки рекомендую делать их разделение и переводить только те, которые вы наблюдаете в интерфейсе рабочей программы.

    Третья особенность.



    После отладке локализованного файла программы видно, что не очень хорошо выглядит строка состояния: размеры ячеек разработчик делал с учетом длины строк на английском языке. Для строк на русском языке этот размер ячеек уже не годится. На рис. 6 цифрами 1 и 3 (соответственно 1-я и 3-я ячейки) показаны проблемные ячейки. В первом случае строка не помещается. Во втором, она также не будет помещаться, если количественный показатель станет более десятка. Под цифрой 4 (4-я ячейка) пожалуй будет великовата, поэтому имеет смысл её сделать меньше:

    Рис. 6


    Есть два пути: сделать сокращения или увеличить размер ячеек. Предлагаю пойти по второму варианту, т.е. увеличить размер этих ячеек, тем более, что это не трудно. Воспользуйтесь утилитой WinSpy++ v1.71 (разраб. J Brown). Запустите её, захватите прицел курсором мышки и подведите к строке состояния программы FairStars Audio Converter:

    Рис. 7


    Так мы узнаем идентификатор (ID) элемента управления строки состояния (msctls_statusbar32). В данном случае это 6F. Теперь загрузим локализованный файл программы в отладчик OllyDbg (разраб. Oleh Yuschuk) (здесь использована версия 1.10) и произведем поиск константы 6F. Сделайте клик правой кнопкой мышки в окне дизассемблера и в контекстном меню выберите команду "Search for -> All constants". В открывшемся окошке введите значение 6F:

    Рис. 8


    Получите список адресов, где используется эта константа. Нужно обратить внимание на ассемблерные команды PUSH - запись значения в стек (в данном контексте - запись в память идентификатора элемента управления), и все их просмотреть. По первому адресу нет ничего интересного, а вот последующие пять (посчитайте количество ячеек строки состояния - их также пять), как раз то, что нам и нужно (вытекает из анализа кода, см. рис. 10):

    Рис. 9


    Теперь посмотрите на участок кода с этими адресами:

    Рис. 10


    Нужно изменить значения 1-й, 3-й и 4-й ячеек на желаемые. В графическом редакторе можно выполнить разметку (или прикинуть на бумаге), какие размеры будут наиболее подходящие. Полученные значения в пикселях с помощью калькулятора Windows переводим в шестнадцатеричный формат. У меня получились следующие значения размеров:

    1-я ячейка = 112 пкс. или 70h
    3-я ячейка = 280 пкс. или 118h
    4-я ячейка = 100 пкс. или 64h

    Выполняем в отладчике правку НЕХ-значений на новые. Устанавливаем курсор на строку с адресом 004391F2 (размер первой ячейки) и нажимаем пробел [Space]. В открывшемся окошке вместо значения 37 вводим значение 70 (команду PUSH оставьте!) и нажимаем "Assemble".

    Рис. 11


    Меняем значения соответственно для третьей и четвертой ячеек. Получится вот так:

    Рис. 12


    После этого сохраняем в файл сделанные изменения изменения (команда контекстного меню "Copy to executable -> All modifications"):

    Рис. 13


    Потвердите, что необходимо копировать все изменения (Copy All). Откроется новое окно, где в контекстном меню выберите команду "Save file":

    Рис. 14


    И, наконец, сохраните файл, дав ему новое имя. Запустите модифицированный файл программы и удостоверьтесь, что вы сделали все так, как хотели.

    Рис. 15


    Четвертая особенность.




    Проблемные" строки. Это строки, которые содержат "мусорные" символы, или говоря другими словами содержат символы, которые не несут никакой смысловой нагрузки (не путайте с указателями спецификаторов). В частности это касается жестко-закодированных строк, т.к. они находятся внутри кода программы, и такие строки нужно переносить только вручную. Ни в коем случае нельзя слепо переводить "проблемные" строки, а тем более удалять в переводе эти символы. Нужно переводить только те, которые вы видите в интерфейсе работающей программы. Например, в одном из диалогов программы возмём текст на кнопке "Rename":

    Рис. 16


    Зададим поиск этой строки в секции жестко-закодированных строк Radialix"a. Будет найдена только одна строка с этим текстом, но она содержит еще один символ, который не видно в диалоге:

    Рис. 17


    Также обратите внимание на то, что данная строка не имеет ссылки. Если вы переведете эту строку, даже сохранив этот символ, то программа работать не будет. Символ "F" вначале слова "Rename" являются частью инструкции, который, возможно, по ошибке плагина Radialix"a для IDA попал в строку. И это нужно проверить. Сделайте двой щелчок левой кнопкой мышки по ячейке с ID нашей строки (при этом должен быть открыт проект программы в IDA) и мы переключимся в дизассемблированный листинг программы в IDA по указанному адресу (0064678E). Затем переключитесь на вкладку НЕХ. Здесь хорошо видно, что символ "F" никакого отношения к строке "Rename" не имеет, а является частью кода. IDA подсвечивает этот код (показывает выделенные байты 90404600, НЕХ-код символа "F" - 46h). Строка "Rename" начинается по адресу 00646790. Здесь же хорошо видно, почему ошибся плагин Radialix"a. Кодировка текста Unicode, на каждый символ отводится по два байта и байты 4600 символа "F" от предыдущей части кода были ошибочно приняты за первый символ строки.

    Рис. 18


    Проверим теперь имеет ли наша строка "Rename" ссылки, это даст нам возможность сделать её полноценный перевод (как "Переименовать"). Установите курсор на байт 52 и переключитесь обратно на вкладку с дизассемблированным кодом программы. Здесь курсор будет установлен на адрес 00646790 и здесь же, в этой строке IDA показывает, что на этот адрес имеется указатель из другой части кода, т.е. откуда идет вызов строки "Rename":

    Рис. 19


    Щелкните по адресу вызова и IDA перенесет вас на него:

    Рис. 20


    Таким образом, мы выяснили, что строка "Rename" находится по адресу 00646790 и у неё есть ссылка по адресу 00463ED9. Эти данные нам нужны, чтобы после завершения перевода программы в Radialix"e, сделать перевод и ручной перенос строки на новое место при помощи других инструментов. Например, это можно сделать в отладчике, или в НЕХ-редакторе (не рекомендую использовать OgreGUI, т.к. он делает ту же ошибку, что и плагин Radialix"a для IDA).

    Эпилог


    По окончании перевода, с помощью утилиты PE Explorer (разраб. Heaventools Software) можно исправить контрольную сумму файла и сделать выравнивание секций. Правда применять эту функцию нужно осторожно, не забывайте, что у вас Radialix"ом в файле добавлена новая секция, куда сделан перенос переведенных жестко-закодированных строк. Смещение этой секции всего лишь на один байт приведет к краху программы. В данном же случае коррекция прошла успешно и готовый файл можно снова запаковать обратно ASPack"ом. Затем сделать патч-русификатор. В общем, на этом этапе вы можете поступать согласно вашему опыту и желаниям.

    Приложение.


    Для тех хочет попробовать свои силы в локализации программы (в плане окончательной доводки) FairStars Audio Converter Pro текущей версии или последующей, предлагаю глоссарий и проект перевода Radialix (версия 3.00.00 Сборка 486). На моем ПК файлы проекта размещаются на диске D: по пути D:WORKRUSSIANFairStars Audio Converterv1.6.0.

    Архив проекта:

    Эта статья в формате CHM для чтения оффлайн:
    (добавлено описание переноса строки "Rename" с помощью отладчика OllyDbg)

    Ваша задача распаковать исполняемый файл программы, подключить его к проекту Radialix вместе с картой ссылок жестко-закодированных строк (в проекте я использовал имя AudioConverterPro_un.exe и соответственно AudioConverterPro_un.rdmap), обновить проект, проверить обновленные ресурсы (бывает, что сбиваются размеры и координаты элементов управления в диалоговых окнах), доперевести новые строки, если таковые имеются, создать локализованный файл. Затем исправить строку состояния и сделать ручной перенос одной жестко-закодированной строки.

    Желаю удачи!  drink_mini
    Сообщение отредактировал Leserg 18 декабря 2023 - 00:14

    Кто ищет, тот всегда найдет!

    30 января 2014 - 10:12 / #1
  2. Оффлайн

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202

    создав локализованный файл и запустив программу, вы будете несказанно удивлены тем, что интерфейс программы, за исключением меню и верхней панели, остался на английском языке.


    Ну, такое встречается, и не только ресурсы но и кодировка только для видаbiggrin

    "Проблемные" строки. Это строки, которые содержат "мусорные" символы,


    В последней обновленной проге EaseUS Partition Master 9.3.0 около 20 таких мусорных строк - я все делал в FlexHEX и Radialix (где то я описывал как)
    И это не глюки Radialix а глюки разработчиков - в последнее время почти в каждой проге такой хлам, а для 64-битных 100% хоть пара строк, но будет.

    размеры ячеек разработчик делал с учетом длины строк на английском языке. Для строк на русском языке этот размер ячеек уже не годится


    Это интересно - тебе плюсикok2
    Сообщение отредактировал 23 января 2023 - 09:16

    30 января 2014 - 11:12 / #2
  3. Оффлайн

    Nexus

    Забанен

    Сообщений: 611

    Создано тем: 20

    Репа: 0

    Баллы: 0

    Был: 2022-07-03 23:07

    Лайков: 7

    Но в последнее время все чаще стало встречаться. Скорее всего это связано с повсеместным использованием Unicode.

    Такое и у меня было, когда переводил китайскую программу. IDA неправильно определяет ссылку на текстовую строку. Да IDA много чего неправильно определяет(по своему опыту знаю)... Приходилось потом в OgreGUI допереводить китайские строки, так как там можно было корректировать адрес указателя на строку.
    30 января 2014 - 13:02 / #3
  4. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 945

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1676

    Был: 2024-07-28 22:59

    Лайков: 167

    Ну, такое встречается, и не только ресурсы но и кодировка только для вида

    А в моей практике это первый случай. Вообще я не пойму, как такое может быть. Вот сидишь ты пишешь программу, в визуальном редакторе компонуешь элементы будущего интерфейса, делаешь все надписи, а потом что...surprised типа передумал и по новой все эти строки пишешь в коде программы. Не пойму, двойная работа.

    В последней обновленной проге EaseUS Partition Master 9.3.0 около 20 таких мусорных строк

    Я даже не знаю, как правильно дать определение этому явлению:мусорные, проблемные, еще как-то. Но в последнее время все чаще стало встречаться. Скорее всего это связано с повсеместным использованием Unicode.

    Кто ищет, тот всегда найдет!

    31 января 2014 - 01:22 / #4
  5. Оффлайн

    gazon01

    Звание: Ветеран

    Команда

    Сообщений: 1211

    Создано тем: 39

    Рейтинг: 8

    Репа: (42|41|-1)

    Баллы: 86

    Был: 2018-12-02 14:30

    Лайков: 18

    Leserg, жаль что у А.Головина не было такого помошникаwacko

    Возможно всё! На невозможное просто требуется больше времени.
    Мудрец из Шангри Ла

    31 января 2014 - 01:33 / #5
  6. Оффлайн

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202

    Да, еще прикол ребята - после снятия защиты с помощью ArmaGeddon ждите мусор в ресурсахbiggrin

    Особенно если есть HTLM в коде - я встретил такое от разработчиков Active @
    Значит такое - три байта подряд чужих символов (то есть не к селу не к городу) и апостроф не с тем кодом - из-за этого нет ссылок и сам ресурс может быть разделен на несколько частей.

    31 января 2014 - 01:41 / #6
  7. Оффлайн

    kaktustv

    Звание: Бывалый

    Команда сайта

    Сообщений: 335

    Создано тем: 30

    Рейтинг: 5

    Репа: (17|17|0)

    Баллы: 96

    Страна: не указана!

    Был: 2024-11-16 12:23

    Лайков: 18

    Солидно.
    31 января 2014 - 11:54 / #7
  8. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 945

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1676

    Был: 2024-07-28 22:59

    Лайков: 167

    Цитата: Nexus
    Да IDA много чего неправильно определяет(по своему опыту знаю)...




    Да, точно! Это проблема IDA. Взять тот же OllyDbg - так он правильно определяет строку:



    Или вот другой дизассемблер - Hopper. Тоже правильно парсит строки:



    Так что нам придется мириться с такими багами и устранять их другими инструментами. 003

    P.S. Создал карту ссылок в IDA v6.1 - такая же фигня. Эх, лучше бы Головин плагин для OllyDbg сделал...
    Сообщение отредактировал WYLEK 29 января 2023 - 14:48

    Кто ищет, тот всегда найдет!

    31 января 2014 - 15:25 / #8
  9. Оффлайн

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2195

    Создано тем: 317

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3580

    Был: 2024-11-18 08:59

    Лайков: 202

    А это что?

    Сообщение отредактировал 10 февраля 2017 - 15:55

    31 января 2014 - 16:32 / #9
  10. Оффлайн

    Автор темы

    Leserg

    Звание: Ветеран

    Команда сайта

    Сообщений: 945

    Создано тем: 79

    Рейтинг: 8

    Репа: (131|131|0)

    Баллы: 1676

    Был: 2024-07-28 22:59

    Лайков: 167

    Японский городовой!surprised

    Я у меня вот так:



    IDA v5.5, Windows 7 Pro 32x DEU. Ген, какая у тебя версия? А может все дело в настройках IDA. У меня, например, все по умолчанию...
    Ребят, если есть у кого возможность, посмотрите у себя и отпишитесь здесь (версия IDA, система, локаль, разрядность).

    P.S. Наверное статью надо удалять, т.к. получается частный случай, да еще и с привязкой к конкретной системе и её настройкам.
    Сообщение отредактировал 10 февраля 2017 - 15:58

    Кто ищет, тот всегда найдет!

    31 января 2014 - 17:14 / #10

Статистика форума, пользователей онлайн: 1 (за последние 20 минут)

Создано тем
1197
Всего сообщений
15762
Пользователей
18014
Новый участник
Markhabayev