• Добро пожаловать на WYLEK.ru. Пожалуйста, войдите или зарегистрируйтесь.
 
98 гостей, 4 пользователей

avatar_Leserg

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

Автор Leserg, 30 января 2014, 10:12:00

« предыдущая - следующая »

LesergАвтор темы

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

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



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

Рис. 1
Извините, вам запрещён просмотр содержимого спойлеров.


Перепроверяем другим инструментом Войдите на сайт для перехода по ссылке v0.80 (разраб. Hellsp@wn/Hors):

Рис. 2
Извините, вам запрещён просмотр содержимого спойлеров.


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

Из имеющихся в сети автоматических распаковщиков протектора 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
Извините, вам запрещён просмотр содержимого спойлеров.


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

Рис. 7
Извините, вам запрещён просмотр содержимого спойлеров.


Так мы узнаем идентификатор (ID) элемента управления строки состояния (msctls_statusbar32). В данном случае это 6F. Теперь загрузим локализованный файл программы в отладчик Войдите на сайт для перехода по ссылке (разраб. 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).

Эпилог

По окончании перевода, с помощью утилиты Войдите на сайт для перехода по ссылке (разраб. 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), обновить проект, проверить обновленные ресурсы (бывает, что сбиваются размеры и координаты элементов управления в диалоговых окнах), доперевести новые строки, если таковые имеются, создать локализованный файл. Затем исправить строку состояния и сделать ручной перенос одной жестко-закодированной строки.

Желаю удачи! 
Кто ищет, тот всегда найдет!

WYLEK

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

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

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

 Это интересно - тебе плюсик

LesergАвтор темы

Цитата: WYLEK;10041В последней обновленной проге EaseUS Partition Master 9.3.0 около 20 таких мусорных строк
Я даже не знаю, как правильно дать определение этому явлению: мусорные, проблемные, еще как-то. Но в последнее время все чаще стало встречаться. Скорее всего это связано с повсеместным использованием Unicode.
Кто ищет, тот всегда найдет!

WYLEK

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

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

Nexus

Цитата: LesergНо в последнее время все чаще стало встречаться. Скорее всего это связано с повсеместным использованием Unicode.
Такое и у меня было, когда переводил китайскую программу. IDA неправильно определяет ссылку на текстовую строку. Да IDA много чего неправильно определяет(по своему опыту знаю)... Приходилось потом в OgreGUI допереводить китайские строки, так как там можно было корректировать адрес указателя на строку.

LesergАвтор темы

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

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

Извините, вам запрещён просмотр содержимого спойлеров.


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

Извините, вам запрещён просмотр содержимого спойлеров.


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

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

WYLEK

А это что?

Извините, вам запрещён просмотр содержимого спойлеров.

LesergАвтор темы

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

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

Извините, вам запрещён просмотр содержимого спойлеров.


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

 P.S. Наверное статью надо удалять, т.к. получается частный случай, да еще и с привязкой к конкретной системе и её настройкам.
Кто ищет, тот всегда найдет!

WYLEK

Цитата: LesergP.S. Наверное статью надо удалять, т.к. получается частный случай, да еще и с привязкой к конкретной системе и её настройкам.

Не надо, это нужная статья!

За IDA...

Ты обычно всегда глубоко копаешь, я просто удивился что ты пропустил это.

IDA выводит наверное все виды строк сразу (в плагине радиаликса смотри)
Если по переходу из радиаликса строки не видно, то нужно сделать эту строку неопределенной и не убирая выделение - правый клик и Undefine
Потом идешь в настройки плагина и выбираешь в какую строку сделать, в твоем случае - Edit -> Строка WIDEZ
Можно выделить кучу малу строк и рассупонить их гамузом.

LesergАвтор темы

Цитата: WYLEKТы обычно всегда глубоко копаешь, я просто удивился что ты пропустил это.

Все ж знать просто невозможно! Тем более я с IDA не дружу. Я за три прошедших года только в OllyDbg что-то научился делать. А ты мне - пропустил. Я про это не знал! Теперь с твоей помощью научился. Получилось у меня так, как у тебя на скриншоте. Но это всего лишь интерпретация данных. Мы отменили то, что назначила IDA по умолчанию и установили свой формат, а конечный то результат все равно остался тот же. Возьми просканируй файл на наличие строк (клавиши [Shift + F12]) ->> "FRename" - без вариантов. И в таком виде строка идет в Radialix (естественно без ссылки).

Извините, вам запрещён просмотр содержимого спойлеров.


Я выше привел примеры листингов строк из других отладчиков - там все верно, а здесь - затык. Посему - это косяк IDA. Возможно это не баг, я плохо знаком с возможностями и настройками этого отладчика и использую его только для создания карты ссылок с жестко-закодированными строками и на этом все. Может быть это как-то настраивается, я не знаю. Вот просидел вечер, излазил все настройки программы, но пока ничего не нашел (может опять не там лазил или опять слишком "глубоко"), но строка определяется как "FRename" - хоть стреляйся. Почему в других отладчиках такой ошибки нет?

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

WYLEK

Цитата: Leserg;10063Посему - это косяк IDA.

Не только IDA, радиаликс тоже барахлит не в меру. Сколько раз было что ни строк ни ссылок не находит! А старичок Ogre как два пальца...

* Ваши права на сайте

    TinyPortal

  • Вы не можете создавать статьи.
  • Вы не можете изменять свои статьи.
  • Вы не можете писать комментарии.
  • Вы не можете управлять статьями.
  • Вы не можете загружать файлы в TPdownloads.
  • Вы не можете управлять TPlistimages.

    Simple Machines

  • Вы не можете удалять темы.
  • Вы не можете создавать темы.
  • Вы не можете отвечать на сообщения.
  • Вы не можете прикреплять файлы.
  • Вы не можете изменять свои сообщения.
  • Вы не можете удалять свои сообщения.

 аталог@MAIL.RU - каталог ресурсов интернет Яндекс.Метрика