Внешние языковые модули
Некоторые программы, к сожалению пока их немного, реализуют многоязычную поддержку, с помощью внешнего языкового модуля. Т.е. интерфейс программы вынесен во внешний файл, что облегчает локализацию программы.
Самый простой тип: текстовый файл, который чаще всего расположен либо в главном каталоге программы, либо в папке Language, в том же каталоге. В название такого файла обычно присутствует название языка, расширение LNG (но могут быть и другие), например, english.lng, russian.lng и т.д. Расширение файла, его название, способ выбора языка в программе и синтаксис могут различаться, общее - это то, что интерфейс программы вынесен во внешний текстовый файл. "идентификатор строки"="текст" Для определения программой языка языкового модуля, файл может иметь заголовок, где в том или ином виде язык и прописан, или программа определяет язык модуля по названию файла. Достоинства: Файл редактируется в Блокноте, все предельно просто. Недостатки:
Ресурсные DLL - содержат только PE-раздел ресурсов исходного файла, который загружается в память вместо раздела ресурсов оригинального EXE или DLL-файла. Являются Win32 PE файлами, и с точки зрения редактирования, их перевод ничем не отличается от перевода стандартных EXE, DLL и т.д. (см. раздел Ресурсы). Могут иметь расширение, как собственно DLL, так и содержащее идентификатор языка, например, RU, RUS, в зависимости от компилятора (некоторые варианты названий и расширений ресурсных DLL можно посмотреть в PASSOLO). Нюансы: Ресурсная DLL может быть создана в редакторе ресурсов из оригинального PE-файла. Это умеют делать PASSOLO, Multilizer и Language Localizer. Обычно в этом нет необходимости - можно переводить уже имеющиеся DLL для других языков. C ресурсными DLL могут работать многие программы, а не только те, что имеют внутри переключение между языками. Это напрямую зависит от компилятора: так все программы на Delphi могут работать с ресурсными DLL, для остальных компиляторов - лишь программы, специально оптимизированные авторами под эту технологию. В этом случае Windows при загрузке программы ищет ресурсную DLL для нее на дефолтовом языке системы, и, в случае обнаружения оной, подгружает ресурсы из нее. Дефолтовый язык системы - это то, что прописано в Региональных стандартах [Панель управления > Язык и стандарты > Региональные стандарты] Примеры использования: Интересным примером использования ресурсных DLL является опыт http://edfoxrus.narod.ru при перводе CD Box Labeler Pro 1.9.5: программа выпускается только на английском языке, и поддержка других языков не предусмотрена. Однако программа написана на Delphi. EXE-файл программы запакован PEtite, и распаковать его корректно http://edfoxrus.narod.ru не удалось. Но в полученном дампе оказались распакованы ресурсы, что позволило создать ресурсную DLL для программы и перевести ее. Еще одним примером использования этой технологии, является создание ресурсных DLL для файлов проверяющих контрольную сумму файла (например, CRC). Подобные файлы нельзя редактировать, так как любое изменение в файле (хотя бы на одну букву) ведет к изменению контрольной суммы, программа проверяет ее при загрузке и просто откажется грузиться. Примером может служить ZoneAlarm, защищенный сертификатом VeriSign, и проверяющий контрольную сумму файла по алгоритму MD5. Программа выпускается только на английском, однако частично (к сожалению, не все файлы) оптимизирована под работу с ресурсными DLL. Это хорошо видно, загружая программу из-под File Monitor: при загрузке Windows ищет 4 русские ресурсные DLL для основных EXE-файлов (ZaProLang0419.dll и др.). В результате использования ресурсной DLL, программа проверяет контрольную сумму оригинального (неизмененного) EXE-файла и удовлетворяется этим, а ресурсы грузятся из русской ресурсной DLL. Достоинства и недостатки: Зачастую ресурсная DLL может работать как с оригинальным, так и с крякнутым файлом.
|