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

Free Address Book

Автор Nexus, 14 февраля 2014, 08:39:00

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

NexusАвтор темы

Тема создана 14 февраля 2014, 08:39:00
Free Address Book


Персональная электронная адресная книга, чьи функции заключаются в организации и хранении персональных контактов пользователя. Запускать её можно с любого переносного носителя информации. Используя Free Address Book, можно хранить различные заметки о том или ином человеке, телефонные номера и адреса электронной почты. Поддерживается функция печати любых данных, которые хранятся в этой программе.

Разработчик: GAS Softwares
Система: Windows XP/Vista/7

GDragon

Ответ #1 : 14 февраля 2014, 09:39:00 #1
Потрясающе... Попросил за деньги! в теме про платные переводы сделать русификатор для Free Address Book - молча втихомолку снесли тему...
 Ни ответа ни привета...
,а делают бесплатно!
 Красавцы ящитаю.

 Повторю вопрос тут.
 Готов оплатить создание русифицированной версии программы Free Address Book ( http://addressbook.gassoftwares.com/ ) (разумеется в разумных пределах)
 Есть желающие?

NexusАвтор темы

Ответ #2 : 14 февраля 2014, 09:49:00 #2
Цитата: GDragon;10201Готов оплатить создание русифицированной версии программы Free Address Book ( http://addressbook.gassoftwares.com/ ) (разумеется в разумных пределах)
Программа написана в NET Framework 2.0, Радиаликс вроде как переводит, но вот создает конечный файл с ошибками и из-за этого файл не запускается. То ли Framework у меня криво поставлен, то ли еще какая байда. Пока мне не до него. Подозреваю, что Leserg может справиться с этой проблемой

Leserg

Ответ #3 : 14 февраля 2014, 09:59:00 #3
Цитата: GDragon;10201Программа написана в NET Framework 2.0, Радиаликс вроде как переводит, но вот создает конечный файл с ошибками и из-за этого файл не запускается.
Да, так и есть. Radialix открывает файл, но создает его нерабочим, а все остальные редакторы нервно курят в сторонке. Проблема в самой программе. Там автор использует собственную функцию обработки строк. Пока что на данном этапе программу локализовать очень затруднительно. Можно было бы декомпилировать её до исходника, перевести и собрать обратно, но вместо строк получается мусор:
Извините, вам запрещён просмотр содержимого спойлеров.

Сидеть и угадывать, где какая строка   - не вариант. Надо еще подумать...

Цитата: gazon01;10205Не все программы можно перевести.
Пожалуй эту все-таки можно. Вот что получается:



1) В Radialix"e переводим доступные ресурсы и создаем локализованный файл.
2) Декомпилируем полученный файл.
3) Декомпилируем оригинальный файл.
4) Сравниваем файлы исходных кодов и выясняем, что Radialix все вызовы функций вида

call string "?0?"::"?1?"(string)

заменил на

call "?0?"::"?1?"( [SIGNATURE ENDED PREMATURELY])

По этой причине локализованный файл программы не работает. Поэтому меняем в листинге локализованного кода (в любом блокноте - формат файла текстовый) указанные вызовы функции на оригинальные (команда - заменить все).
6) Восстанавливаем код самой функции "?0?"::"?1?"(string) - Radialix и её испортил. Она находится в конце листинга (просто копируем её код из оригинального листинга).
7) Компилируем обратно локализованный файл.

Все. Так мы одолели только около 20 процентов строк. Все остальные надо выискивать и вписывать прямо в код программы. Когда все будет готово, скомпилировать программу заново.

Но вот терзают меня смутные сомнения по поводу этой функции обработки строк. Может оказаться, что таким образом автор защитил базу данных, которую создает программа. Она строится на соответствии имени поля и соответствующего значения. Если их перевести, то или программа не будет работать или база не будет создаваться, или невозможно будет открыть базу данных, созданную в оригинальной версии программы. Короче надо экспериментировать, точно сказать не могу. Не просто так он все это придумал. А возможно я ошибаюсь.
Кто ищет, тот всегда найдет!

NexusАвтор темы

Ответ #4 : 14 февраля 2014, 10:19:00 #4
Leserg, круто! А чем ты декомпилируешь? Обязательно ildasm или есть еще какие инструменты?

Leserg

Ответ #5 : 14 февраля 2014, 10:49:00 #5
Цитата: Nexus;10226есть еще какие инструменты
Конечно есть и другие инструменты, которые позволяют править код программы без её полной перекомпиляции (по такому принципу работают шаблонные редакторы). Я использую все возможные, которые дают положительный вариант. Универсальных нет. Для одной программы одна сработала отлично, а для другой - другая.
Вот перечень того, что стоит у меня на вооружении:
9Rays Spices .NET Suite
DisSharp
Dotnet IL Editor
DotNet Resolver
GrayWolf
ILSpy
JustDecompile
Red Gate .NET Reflector
Resource .NET
SharpResourcesEditor
Simple Assembly Explorer (SAE)
Zeta Resource Editor

Все они решают одну задачу: дизассемблирование, редактирование ресурсов, правка кода программ NET. Основной инструмент у меня из этого списка Simple Assembly Explorer.
Кто ищет, тот всегда найдет!

NexusАвтор темы

Ответ #6 : 15 февраля 2014, 10:49:00 #6
Leserg, хех, теперь я эту подборочку и себе натаскаю из сети, благодарю
 Хотя мне до .NET еще ой как далеко, но когда-то доберутся и туда мои шаловливые ручки Я только вот недавно научился редактировать релоки(relocation) в файлах и таблицу импорта, потому как не во всех файлах есть MultiByteToWideChar, который приходится иногда использовать при патче в отладчике.

Leserg

Ответ #7 : 15 февраля 2014, 11:49:00 #7
Теперь коротко о том, как же редактировать строки. Для этого я использую утилиту Simple Assembly Explorer. Работать придется в ручном режиме. Задача еще осложняется тем, что мы не знаем, о чем говорится в той или иной строке. Также строковыми данными указаны названия объектов и элементов, которые ни в коем случае нельзя трогать, т.к. программа станет неработоспособной. В общем работа над переводом похожа на разминирование.
Итак, строки, использующиеся в программе, загружаются сначала в стек при помощи команды ldstr (назначение всех опокодов сборок NET можно узнать на сайте разработчиков Microsoft). В нормальном приложении строки указаны в явном виде, например:

ldstr "Вы действительно хотите завершить работу с программой?"

В программе Free Address Book строки зашифрованы. Поэтому, после загрузки в стек строка сначала отправляется на расшифровку, т.е. идет вызов необходимой функции, и по возвращению используется по прямому назначению. Вот как это выглядит в коде:



Алгоритм обработки строк - это долгая песня, необходимы хорошие познания в программировании (если есть желание, то можете разбираться). Можно поступить проще: не пускать строку на обработку функцией, т.е. просто занопить команду, а саму строку набрать в явном виде. Вот так:



Таким образом, строка без изменений будет попадать прямо по назначению (в приведенном примере - в заголовок диалога). Еще раз повторю, что нельзя убирать команду вызова функции для всех строк подряд! Нужно внимательно анализировать код и смотреть куда идет строка. Если это имя объекта - переводить нельзя. Если имя элемента - переводить нельзя. Конечно же для этого необходимо хорошо разбираться в структуре программ NET.

Вот такая петрушка. Я поступаю так: нахожу строку, которую можно править, вбиваю 111111111, отключаю команду передачи строки в функцию и сохраняю изменения в файл. Потом запускаю программу и смотрю, где у меня эти 11111111 выплывут. Потом запускаю оригинальную программу и смотрю в ней значение этой строки. Затем возвращаюсь к этой строке в коде и ввожу нормальный перевод. Сохраняю изменения и перехожу к следующей строке. Сами понимаете, что это долго и утомительно. К тому же довольно затруднительно перевести все сообщения программы на те или иные действия пользователя. Для этого их надо все моделировать, а это не всегда бывает возможным.
Кто ищет, тот всегда найдет!

NexusАвтор темы

Ответ #8 : 15 февраля 2014, 12:49:00 #8
b]Leserg[/b], ну что, как там получается переводить прогу? Не выдержал и тоже залез в прогу через Simple Assembly Explorer (SAE) посмотреть что да как .

Leserg

Ответ #9 : 16 февраля 2014, 12:49:00 #9 Последнее редактирование: 04 марта 2018, 21:13:38 от WYLEK
Цитата: Nexus;10249Не выдержал и тоже залез в прогу через Simple Assembly Explorer (SAE) посмотреть что да как
Ну и как впечатления? Правда же, что ничего сложного?

Цитата: gazon01на главную не забудьте выложить
Нет, на главную ещё рано!
Кто ищет, тот всегда найдет!

GDragon

Ответ #10 : 16 февраля 2014, 13:49:00 #10 Последнее редактирование: 04 марта 2018, 21:14:53 от WYLEK
Цитата: LesergУбрал кнопки "Donate" и "Facebook" - не думаю что они нужны нашему человеку, хотя надо спросить у GDragon. Вернуть обратно не проблема.
Не вообще не нужны
А можно ещё попросить убрать RSS в верхнем правом углу? (который работает через GAS.Rss.dll)

NexusАвтор темы

Ответ #11 : 16 февраля 2014, 14:49:00 #11
Leserg, а еще бы я сделал так:
 продублировал бы экзешник, его и использовал бы как расшифровочную программу - выбрал бы в нем зашифрованную строку на самом видном месте, потом через SAE эту строку заменял бы на ту, которую нужно дешифровать и опознать что там записано (в первом экзешнике). Далее запускаешь второй экзешник с измененной строкой и видишь на самом видном месте какой должен быть текст, который нужно перевести. Так получится быстрее и не будешь морочиться с алгоритмом дешифровки.

Leserg

Ответ #12 : 17 февраля 2014, 14:49:00 #12
Цитата: Nexus;10268А может и так, без этой чепухи можно все перевести?
Да можно. Я выше писал, что уже перевел. Остались сообщения. Те что удалось выловить при работе с программой, перевел, а остальные нет. Сейчас занимаюсь отладкой. И уже есть баги. В общем перевел названия полей для вывода на печать списков контактов и контактных листов на русском языке:


И после этого перестала работать функция импорта данных их CVS-файла. Наименования полей совпадают, но программа этого не видит и сообщает, что поля для импорта не выбраны:


Если вернуть оригинальное название полей (на английском), то импорт работает, но тогда на печать документ будет идти на английском языке. Вот и не знаю как поступить. Что нужно будет пользователям: или поддержка русского при печати или возможность импорта из CVS. К сожалению, сделать и то, и другое вместе, не представляется возможным. Если бы все строки были в нормальном виде, думаю, что проблему можно было бы решить, а так надо идти на компромисс.
Кто ищет, тот всегда найдет!

NexusАвтор темы

Ответ #13 : 17 февраля 2014, 15:49:00 #13 Последнее редактирование: 04 марта 2018, 21:16:11 от WYLEK
Цитата: Leserg;10281В общем перевел названия полей для вывода на печать списков контактов и контактных листов на русском языке:
Вкинь в личку переведенный файл, чтобы можно было экспортировать в базу русские названия полей. Есть одна мысля, насколько знаний по .NET хватит...

Leserg

Ответ #14 : 17 февраля 2014, 16:49:00 #14
Все, Минотавр повержен! Удалось решить проблему с поддержкой вывода на печать отчетов на русском и импорт из CSV-файлов. Теперь программа вся на русском.



Проверял так. Создал в английской версии базу на 30 клиентов (см. рис. выше). Сделал экспорт в CSV-файл и создал резервную копию базы данных. Потом запустил локализованную версию и выполнил восстановление базы данных из резервной копии - восстановление прошло успешно и контакты появились в списке. Запустил новую копию локализованной программы и сделал импорт списка из CSV-файла - все данные были импортированы успешно и контакты появились в базе данных.

После этого сделал обратную проверку. В русской версии сделал экспорт списка контактов в CSV-файл и создал резервную копию базы данных. Потом запустил оригинальную (англ.) версию программы и выполнил восстановление базы данных из резервной копии - восстановление прошло успешно и контакты появились в списке. Запустил новую копию исходной программы и сделал импорт списка из CSV-файла - все данные были импортированы успешно и контакты появились в базе данных.

В обоих случаях, файлы с резервной копией базы данных, созданных разными версиями, одинаковы. Поэтому считаю работа над локализацией завершена. Отправил товарищу GDragon на тестирование. Надеюсь, получить результаты. Если все будет нормально, то опубликую программу.

Цитата: Nexus;10288Есть одна мысля, насколько знаний по .NET хватит...
Nexus, спасибо за поддержку, но как-бы все получилось и помощь твоя пока не требуется. Там проверка всего лишь по трем полям идет (Имя, Фамилия и Компания). При вызове проверки, имена этих полей отправлялись на обработку в злополучную функцию и естественно после возвращения оттуда уже не соответствовали переведенным именам полей (Имя, Фамилия и Компания). По этой причине программа считала, что поля не выбраны.
Кто ищет, тот всегда найдет!

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