Автор Тема: Как я переводил GetDiz 3.0  (Прочитано 30905 раз)

Оффлайн Cometosee

  • Новичок
  • *
  • Сообщений: 11
Как я переводил GetDiz 3.0
« : 19 Сентября 2005, 07:58:31 »
Не знаю, в том ли разделе размещаю тему, но вопрос такой. Занялся я переводом программы GetDiz 3.0 (любителям вареза она должна быть знакома  ;) ). Программа упакована UPX упаковщиком. Я ее распаковал, она выросла в размрах в 2 раза (250КБ -> 500КБ). Сделав перевод, я ее снова запокавал. Размер русифицированного файла стал отличаться от исходного на несколько КБ. После этого я сделал патч-русификатор (при самых низких скоростях генерации патча, программа PatchWise Free). Так он по размеру стал больше самого исполняемого файла! Так не легче ли просто предоставлять .exe-шник программы вместо русификатора, или может я не правильно что-то сделал?  

P. S. Если кто хочет посмотреть на результат моей работы, сообщите.

Оффлайн CaptainFlint

  • Старожил
  • ****
  • Сообщений: 297
    • http://flint-inc.ru/
Как я переводил GetDiz 3.0
« Ответ #1 : 19 Сентября 2005, 09:47:01 »
Cometosee
Просто упаковка-изменение-запаковка приводит к тому, что всё ужатое содержимое начинает полностью отличаться оторигинала (зависит от алгоритма сжатия). Попробуй сравнить эти два файлв (оригинал и перевод) какой-нибудь утилитой побайтного сравнения: одинаковыми будут только заголовки, да и то не факт.
А патч - он просто ищет различающиеся места и заменяет одни другими. Ясное дело, что в данном случае он должен будет заменить почти весь оригинальный файл на почти весь переведённый - т.е. запомнить два практически целых файла, вот он и получается таким большим. Русификации, оформленные в виде патчей, подходят в тех случаях, когда внутренняя структура файла почти не меняется - тогда запомненные различия займут меньше места.
Почему же, ё-моё, ты нигде не пишешь "ё"?

Оффлайн Cometosee

  • Новичок
  • *
  • Сообщений: 11
Как я переводил GetDiz 3.0
« Ответ #2 : 20 Сентября 2005, 07:36:03 »
Я это уже понял, а как тогда вообще переводить файлы, сжатые каким-либо упаковщиком? Распаковал, перевел,.. а что дальше?

Оффлайн CaptainFlint

  • Старожил
  • ****
  • Сообщений: 297
    • http://flint-inc.ru/
Как я переводил GetDiz 3.0
« Ответ #3 : 20 Сентября 2005, 09:38:24 »
Cometosee
Видимо, кроме как выкладывать переведённый файл полностью, вариантов нет...  Упаковывать или не упаковывать обратно - это уже как хочешь.
Хотя, конечно, есть возможность сделать патч: написать программу, которая самостоятельно на компе пользователя распаковывает нужный файл, применяет патч (в этом случае он не должен быть большим, т.к. распакованные файлы будут различаться не так сильно), и потом упаковывает обратно. Но программ, делающих такие супер-патчилки, мне не попадалось, т.е. скорее всего, придётся писать программу самому...

добавлено спустя 44 секунды:

Ну или кого-нибудь просить.
Почему же, ё-моё, ты нигде не пишешь "ё"?

Оффлайн Kindly

  • Постоялец
  • ***
  • Сообщений: 164
Как я переводил GetDiz 3.0
« Ответ #4 : 20 Сентября 2005, 10:09:37 »
Цитировать
Я это уже понял, а как тогда вообще переводить файлы, сжатые каким-либо упаковщиком? Распаковал, перевел,.. а что дальше?

После распаковки желательно протестировать программу на работоспособность. Был у меня случай, что при распаковке прога глючила - пришлось делать эмулятор-русификатор *.RUS. При упаковке другим пакером нужно также убедится в работоспособности на различных ОС. Отсюда вывод: если екзешник сжат, то лучше создать эмулятор-русификатор. Преимущества - маленький размер (по сравнению с упакованной прогой), недостатки - уже картинки не заменишь и в HEX-е не побалуешся.

Оффлайн CaptainFlint

  • Старожил
  • ****
  • Сообщений: 297
    • http://flint-inc.ru/
Как я переводил GetDiz 3.0
« Ответ #5 : 20 Сентября 2005, 10:17:23 »
Kindly
Цитировать
то лучше создать эмулятор-русификатор

А вас ист дас? То бишь, что это такое - эмулятор-русификатор?
Почему же, ё-моё, ты нигде не пишешь "ё"?

Оффлайн Kindly

  • Постоялец
  • ***
  • Сообщений: 164
Как я переводил GetDiz 3.0
« Ответ #6 : 20 Сентября 2005, 12:11:15 »
Сорри что сразу не пояснил. Эмулятор ресурсов - есть подключаемая к экзешнику DLL-ка, созданная в Passolo или Multilizer. В Multilizer-е можно поотключать ненужные ресурсы для нее, такие как: картинки, музыка и прочие "неэмулируемые" ресурсы. Если прога написана на Delphi, то есть смысл оставить секцию "String", т.к. даже если мы ее не переводим (по большому счету), то прога без нее будет глючить, в смысле сообщений. Если создавать в Passolo, то можно затем поизвращаться Restorator-ом, поудаляв ненужные секции. Кстати Passolo немного криптует ресурсы (по крайней мере для некоторых редакторов) и это сказывается на работе некоторых программ (например, когда я переводил Inno Setup v5.1.5, то использовал для правки Passolo, но прога глючила в результате, а затем отконвертировал Пассоловский файл в Мультике и получилось так, что Мультик исправил ресурсы, после чего прога стала работать как полагается, да и затем Resource Hacker стал видеть нормально ресурсы). Вообще надо отдельную тему создавать по этому поводу типа: Редакторы ресурсов - их преимущества и недостатки, или вроде этого...

Оффлайн NedMaker

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1130
  • The Vigilant Observer
    • nrgizer.msilab.net
Как я переводил GetDiz 3.0
« Ответ #7 : 24 Сентября 2005, 20:18:43 »
Цитировать
Отсюда вывод: если екзешник сжат, то лучше создать эмулятор-русификатор.

Так называемый эмулятор-русификатор, или как его принято называть языковой модуль, можно делать, если программа поддерживает смену языков, или же она написана на Delphi, в противном же случае не имеет смысла.

Оффлайн CaptainFlint

  • Старожил
  • ****
  • Сообщений: 297
    • http://flint-inc.ru/
Как я переводил GetDiz 3.0
« Ответ #8 : 24 Сентября 2005, 21:27:07 »
Kindly
Спасибо за разъяснение. Хотя всё ещё не совсем понятно: с какой стати программа будет цеплять к себе какую-то левую внешнюю DLL-ку? Это же автор должен сам предусмотреть такую возможность. Хотя я в Дельфях не прогал, там что, автоматом, сам по себе такой добавочный код генерируется?
Почему же, ё-моё, ты нигде не пишешь "ё"?

Онлайн ZeroChaos

  • Root Admin
  • Ветеран
  • *****
  • Сообщений: 1376
  • The Dragon Reborn
    • zerolab.net
Как я переводил GetDiz 3.0
« Ответ #9 : 24 Сентября 2005, 23:55:19 »
NedMaker
Цитировать
или же она написана на Delphi

Не совсем так, языковые модули к себе цепляют программы, откомпилированные в компиляторе от Borland, будь то C++Builder, либо Delphi.
The Wheel of Time turns, and Ages come and pass, leaving memories that become legend. Legend fades to myth, and even myth is long forgotten when the Age that gave it birth comes again... There are neither beginnings nor endings to the turning of the Wheel of Time. But it was a beginning. R. Jordan

Оффлайн NedMaker

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1130
  • The Vigilant Observer
    • nrgizer.msilab.net
Как я переводил GetDiz 3.0
« Ответ #10 : 25 Сентября 2005, 14:26:47 »
CaptainFlint
Цитировать
Хотя всё ещё не совсем понятно: с какой стати программа будет цеплять к себе какую-то левую внешнюю DLL-ку? Это же автор должен сам предусмотреть такую возможность. Хотя я в Дельфях не прогал, там что, автоматом, сам по себе такой добавочный код генерируется?

Автоматически подхватывается файл с ресурсами, взятыми из загрузочного *.exe файла, в виде библиотеки *.dll, расширение которого переименовывается в *.rus или *.ru, если для русского языка. Можно сделать в PASSOLO или Multilizer. В принципе можно и переведённую экзешку переименовать в *.rus программа её тоже подхватит, но для уменьшения объема модуля, лучше оставить в ней только ресурсы. Если её упаковать пакером программа её не подхватывает.
ZeroChaos
Спасибо за внесённые коррективы , я имел ввиду что для программ скомпилированных на MS Visual C++ не имеющих смену языка (в отличие от Delphi т.е. с компилятором от Borland) нельзя создать языковой модуль.
Но, что-то мы от темы ушли

Оффлайн Kindly

  • Постоялец
  • ***
  • Сообщений: 164
Как я переводил GetDiz 3.0
« Ответ #11 : 26 Сентября 2005, 11:58:33 »
Цитировать
Но, что-то мы от темы ушли

Вот я и говорю, надо отдельную тему по этому поводу создать.