Этот сайт создан как клуб русификаторщиков. Для нас существуют три основных правила.
1. Мы никому и ничего не должны!
2.Один пришедший на сайт толковый русификаторщик дороже всех пользователей.
3. Мы делаем русификаторы для своего сайта, но в оригинале ими могут пользоваться все в интернете.
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.):
Чтобы локализовать программу, её необходимо распаковать. Создавать локализованную библиотеку (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)" (Перестроить секции (Удалить секции враппера и распаковать ресурсы)). Нам, для перевода, конечно же нужны ресурсы в распакованном виде. Плюс, этот распаковщик разместит секцию ресурсов в самом конце файла, что также является важным аспектом для успешной локализации программы.
При сохранении файла укажите его имя, например, AudioConverterPro_un.exe. Готово. После распаковки проверьте работу программы (пробежитесь по пунктам меню, загляните в настройки и измените там пару параметров, в общем проверьте функции программы). Если все в порядке, то можете приступать к локализации.
Вторая особенность.
Строки интерфейса на 80% жестко-закодированные. Когда вы загрузите программу в шаблонный редактор, перед вами предстанет стандартная структура ресурсов:
Выполнив перевод строк в ресурсах RT_MENU[4], RT_DIALOG[5], RT_STRING[6] и RT_DLGINIT[240], создав локализованный файл и запустив программу, вы будете несказанно удивлены тем, что интерфейс программы, за исключением меню и верхней панели, остался на английском языке.
Оказывается все остальные строки, включая элементы диалоговых окон, являются жестко-закодированными. Перевод программы я делал в IDA (разраб. Hex-Rays), и продублировать все строки интерфейса. Для строк, имеющих более одной ссылки рекомендую делать их разделение и переводить только те, которые вы наблюдаете в интерфейсе рабочей программы.
Третья особенность.
После отладке локализованного файла программы видно, что не очень хорошо выглядит строка состояния: размеры ячеек разработчик делал с учетом длины строк на английском языке. Для строк на русском языке этот размер ячеек уже не годится. На рис. 6 цифрами 1 и 3 (соответственно 1-я и 3-я ячейки) показаны проблемные ячейки. В первом случае строка не помещается. Во втором, она также не будет помещаться, если количественный показатель станет более десятка. Под цифрой 4 (4-я ячейка) пожалуй будет великовата, поэтому имеет смысл её сделать меньше:
Есть два пути: сделать сокращения или увеличить размер ячеек. Предлагаю пойти по второму варианту, т.е. увеличить размер этих ячеек, тем более, что это не трудно. Воспользуйтесь утилитой WinSpy++ v1.71 (разраб. J Brown). Запустите её, захватите прицел курсором мышки и подведите к строке состояния программы FairStars Audio Converter:
Так мы узнаем идентификатор (ID) элемента управления строки состояния (msctls_statusbar32). В данном случае это 6F. Теперь загрузим локализованный файл программы в отладчик OllyDbg (разраб. Oleh Yuschuk) (здесь использована версия 1.10) и произведем поиск константы 6F. Сделайте клик правой кнопкой мышки в окне дизассемблера и в контекстном меню выберите команду "Search for -> All constants". В открывшемся окошке введите значение 6F:
Получите список адресов, где используется эта константа. Нужно обратить внимание на ассемблерные команды PUSH - запись значения в стек (в данном контексте - запись в память идентификатора элемента управления), и все их просмотреть. По первому адресу нет ничего интересного, а вот последующие пять (посчитайте количество ячеек строки состояния - их также пять), как раз то, что нам и нужно (вытекает из анализа кода, см. рис. 10):
Нужно изменить значения 1-й, 3-й и 4-й ячеек на желаемые. В графическом редакторе можно выполнить разметку (или прикинуть на бумаге), какие размеры будут наиболее подходящие. Полученные значения в пикселях с помощью калькулятора Windows переводим в шестнадцатеричный формат. У меня получились следующие значения размеров:
1-я ячейка = 112 пкс. или 70h 3-я ячейка = 280 пкс. или 118h 4-я ячейка = 100 пкс. или 64h
Выполняем в отладчике правку НЕХ-значений на новые. Устанавливаем курсор на строку с адресом 004391F2 (размер первой ячейки) и нажимаем пробел [Space]. В открывшемся окошке вместо значения 37 вводим значение 70 (команду PUSH оставьте!) и нажимаем "Assemble".
Проблемные" строки. Это строки, которые содержат "мусорные" символы, или говоря другими словами содержат символы, которые не несут никакой смысловой нагрузки (не путайте с указателями спецификаторов). В частности это касается жестко-закодированных строк, т.к. они находятся внутри кода программы, и такие строки нужно переносить только вручную. Ни в коем случае нельзя слепо переводить "проблемные" строки, а тем более удалять в переводе эти символы. Нужно переводить только те, которые вы видите в интерфейсе работающей программы. Например, в одном из диалогов программы возмём текст на кнопке "Rename":
Зададим поиск этой строки в секции жестко-закодированных строк Radialix"a. Будет найдена только одна строка с этим текстом, но она содержит еще один символ, который не видно в диалоге:
Также обратите внимание на то, что данная строка не имеет ссылки. Если вы переведете эту строку, даже сохранив этот символ, то программа работать не будет. Символ "F" вначале слова "Rename" являются частью инструкции, который, возможно, по ошибке плагина Radialix"a для IDA попал в строку. И это нужно проверить. Сделайте двой щелчок левой кнопкой мышки по ячейке с ID нашей строки (при этом должен быть открыт проект программы в IDA) и мы переключимся в дизассемблированный листинг программы в IDA по указанному адресу (0064678E). Затем переключитесь на вкладку НЕХ. Здесь хорошо видно, что символ "F" никакого отношения к строке "Rename" не имеет, а является частью кода. IDA подсвечивает этот код (показывает выделенные байты 90404600, НЕХ-код символа "F" - 46h). Строка "Rename" начинается по адресу 00646790. Здесь же хорошо видно, почему ошибся плагин Radialix"a. Кодировка текста Unicode, на каждый символ отводится по два байта и байты 4600 символа "F" от предыдущей части кода были ошибочно приняты за первый символ строки.
Проверим теперь имеет ли наша строка "Rename" ссылки, это даст нам возможность сделать её полноценный перевод (как "Переименовать"). Установите курсор на байт 52 и переключитесь обратно на вкладку с дизассемблированным кодом программы. Здесь курсор будет установлен на адрес 00646790 и здесь же, в этой строке IDA показывает, что на этот адрес имеется указатель из другой части кода, т.е. откуда идет вызов строки "Rename":
Таким образом, мы выяснили, что строка "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.
(добавлено описание переноса строки "Rename" с помощью отладчика OllyDbg)
Ваша задача распаковать исполняемый файл программы, подключить его к проекту Radialix вместе с картой ссылок жестко-закодированных строк (в проекте я использовал имя AudioConverterPro_un.exe и соответственно AudioConverterPro_un.rdmap), обновить проект, проверить обновленные ресурсы (бывает, что сбиваются размеры и координаты элементов управления в диалоговых окнах), доперевести новые строки, если таковые имеются, создать локализованный файл. Затем исправить строку состояния и сделать ручной перенос одной жестко-закодированной строки.
Желаю удачи!
Сообщение отредактировал Leserg 18 декабря 2023 - 00:14
создав локализованный файл и запустив программу, вы будете несказанно удивлены тем, что интерфейс программы, за исключением меню и верхней панели, остался на английском языке.
Ну, такое встречается, и не только ресурсы но и кодировка только для вида
"Проблемные" строки. Это строки, которые содержат "мусорные" символы,
В последней обновленной проге EaseUS Partition Master 9.3.0 около 20 таких мусорных строк - я все делал в FlexHEX и Radialix (где то я описывал как) И это не глюки Radialix а глюки разработчиков - в последнее время почти в каждой проге такой хлам, а для 64-битных 100% хоть пара строк, но будет.
размеры ячеек разработчик делал с учетом длины строк на английском языке. Для строк на русском языке этот размер ячеек уже не годится
Но в последнее время все чаще стало встречаться. Скорее всего это связано с повсеместным использованием Unicode.
Такое и у меня было, когда переводил китайскую программу. IDA неправильно определяет ссылку на текстовую строку. Да IDA много чего неправильно определяет(по своему опыту знаю)... Приходилось потом в OgreGUI допереводить китайские строки, так как там можно было корректировать адрес указателя на строку.
Ну, такое встречается, и не только ресурсы но и кодировка только для вида
А в моей практике это первый случай. Вообще я не пойму, как такое может быть. Вот сидишь ты пишешь программу, в визуальном редакторе компонуешь элементы будущего интерфейса, делаешь все надписи, а потом что... типа передумал и по новой все эти строки пишешь в коде программы. Не пойму, двойная работа.
В последней обновленной проге EaseUS Partition Master 9.3.0 около 20 таких мусорных строк
Я даже не знаю, как правильно дать определение этому явлению:мусорные, проблемные, еще как-то. Но в последнее время все чаще стало встречаться. Скорее всего это связано с повсеместным использованием Unicode.
Да, еще прикол ребята - после снятия защиты с помощью ArmaGeddon ждите мусор в ресурсах
Особенно если есть HTLM в коде - я встретил такое от разработчиков Active @ Значит такое - три байта подряд чужих символов (то есть не к селу не к городу) и апостроф не с тем кодом - из-за этого нет ссылок и сам ресурс может быть разделен на несколько частей.
IDA v5.5, Windows 7 Pro 32x DEU. Ген, какая у тебя версия? А может все дело в настройках IDA. У меня, например, все по умолчанию... Ребят, если есть у кого возможность, посмотрите у себя и отпишитесь здесь (версия IDA, система, локаль, разрядность).
P.S. Наверное статью надо удалять, т.к. получается частный случай, да еще и с привязкой к конкретной системе и её настройкам.