|
Как
это не прискорбно, но многие хорошие
программы имеют англоязычный интерфейс
и не всегда программисты заботятся о
многоязыковой поддержке своих
программных продуктов. Но существует
выход: перевести интерфейс программы на
другой язык самому. Данная статья
рассказывает как это сделать, и с
помощью каких программ.
Для
перевода программ под Windows используются
редакторы ресурсов, которых развелось
достаточно много. Самые лучшие, на мой
взгляд, Resurs Hacker и Restorator. У каждой из них
есть свои плюсы и минусы. С
помощью программы Resurs Hacker Вы можете
курсором мыши передвигать или
растягивать окна и кнопки, а это Вам
понадобится, так как переведя надпись
кнопки на другой язык, она может быть
больше и не вмещаться в размеры кнопки.
Также можно изменять стили, создавать
новые или удалять существующие ресурсы
непосредственно в exe-модуле или res-файле.
У
программы Restorator более удобное дерево
ресурсов, есть возможность произвести
удаление или замену системного файла
после перезагрузки компьютера. Это
удобно если файл используется Windows. К
сожалению, эта функция Restorator не
поддерживает длинные имена каталогов и
файлов.
Двух
этих программ для русификации будет
более чем достаточно. Не в счет
программы для распаковки exe модулей, а
также Вам может понадобится
шестнадцатеричный редактор. Самые
лучшие программы из этой области, на мой
взгляд, WinHex и Qview. Шестнадцатеричный
редактор будет нужен только в том случае,
если определенный текст находится не в
ресурсах, а в самом модуле программы. К
сожалению, здесь нельзя вводить текст,
который будет превышать оригинальный
текст. Не забывайте об этом, иначе
программа просто перестанет работать.
Программа
может содержать различные ресурсы
AVI (видео), Bitmap (изображения), Menu (меню),
String (строковые ресурсы, то есть текст), Icon
(значки), Dialog (диалоговые окна) и другие.
Мы рассмотрим пример ресурса Dialog,
отображаемый в программе Resurs Hacker. Это
всего лишь пример, здесь не указаны
Стили, которые будут отображены в
реальном ресурсе и разделены между
собой вертикальной чертой (|).
Комментарии выделены курсивом:
ABOUT
DIALOG 138, 102, 276, 68;Размеры всего диалога
STYLE (Стили);Стиль
окна
CAPTION "About...";Название окна
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL;Язык диалога
FONT 8,
"MS Sans Serif";Размер и тип
используемого шрифта
{
CONTROL "©2002 #160;by LENIN INC", 8, STATIC
(Стили),
40, 14, 90, 32
CONTROL "All Rights Reserved", 9, STATIC (Стили), 40, 19, 90, 32
CONTROL " OK", 1, BUTTON (Стили), 218, 6, 50, 14
CONTROL " Cancel", 2, BUTTON (Стили), 218, 26, 50, 14
CONTROL 1, 3903, STATIC (Стили), 10, 10, 18, 20
}
Для
перевода на другой язык вам нужно будет
заменять текст, находящийся в кавычках
(" "). Если Ваш текст не помещается,
растяните его курсором мыши в окне.
Размер текста и кнопок можно также
задать числами, которые находятся в
конце строк.
Посмотрите
на окончание самой последней из строк
Вы увидите четыре числа:
отступ
элемента от правого края; отступ
элемента от верхнего края; ширина
элемента; высота элемента.
Символ
подчеркивает букву, расположенную
после него. Подчеркнутая буква
устанавливает «горячую« клавишу, при
нажатии на которую запускается
соответствующий процесс. Ресурсы Menu и
String редактируются также, как и Dialog
изменяется текст, находящийся в
кавычках (" "). Посмотрите как
выглядит ресурс меню:
TOOLBAR MENU
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL;Язык меню
{
POPUP " File"
{
MENUITEM " Open File\tCtrl+O", 190
MENUITEM " Save File\tCtrl+S", 151
MENUITEM "Save File As...\tShift+Ctrl+S", 152
MENUITEM
SEPARATOR;Разделительная полоса
MENUITEM " Exit\tAlt+X", 143
}
}
После
элемента \t указаны сочетания клавиш для
быстрого доступа. Их не рекомендуется
изменять.
Все,
что было сказано выше, в основном
касается программ, написанных на API
настоящими программистами, то есть без
использования визуальных компонентов.
Открыв программу, написанную с помощью
визуальных компонентов, например, в Delphi,
Вы увидите структуру, в которой будут
ресурсы типа RCData. Чуть ниже представлен
фрагмент подобного кода, который
отображает окно Errors. К сожалению, само
окно Вы не сможите увидеть в редакторе
ресурсов. Ни один из указанных здесь
редакторов ресурсов не отображает
предпросмотр окон программ, написанных
в Delphi.
object ErrForm: TErrForm \\Начало создания окна
Left = 389
Top =
337
Width =
348 \\Ширина основного окна
Height
= 283 \\Высота основного окна
Caption = 'Errors' \\Заголовок окна
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = 11
Font.Name = 'MS Sans Serif' \\Используемый шрифт
Font.Style = []
Position = poDefaultPosOnly
OnClose = FormClose
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel \\Начало создания панели
Left =
0 \\Отступ слева
Top = 0
\\Отступ справа
Width =
340 \\Ширина панели
Height
= 25 \\Высота панели
Align = alTop
Alignment = taLeftJustify
BevelOuter = bvNone
Hint = 'Message' \\Текст подсказки
Caption = 'Not found this files! Run process
again?'
TabOrder
= 0
end \\Завершение
создания панели
end \\Завершение
создания окна
Здесь
нужно изменять текст, находящийся между
одинарными кавычками (' ').
Если
при переводе Ваш текст не поместился в
одну строку, добавьте конструкцию WordWrap =
True. Это позволит расположить текст любой
длины, причем количество строк будет
определяться автоматически:
object
Panel1: TPanel \\Начало создания панели
Left =
0 \\Отступ слева
Top = 0
\\Отступ справа
Width =
340 \\Ширина панели
Height
= 25 \\Высота панели
Align = alTop
Alignment = taLeftJustify
BevelOuter = bvNone
Hint = 'Message' \\Текст подсказки
Caption = 'Not found this files! Run process
again?'
WordWrap
= True \\Добавили новый параметр
TabOrder
= 0
end \\Завершение
создания панели
Но
это будет работать только для
компонента, который имеет свойство WordWrap,
иначе будет ошибка.
Все
это достаточно просто, ведь текст в
редакторе ресурсов виден и доступен для
редактирования. Но что делать, если
текст какого-то окна сообщения
находиться не в ресурсах, а в внутри
модуля программы? Вот тут нам и поможет
шестнадцатеричный редактор. Итак, мы
открываем программу, например, в WinHex и
находим структуру, которую хотим
перевести. Возьмем для примера текст All
Rights Reserved, который спрятан внутри EXE
модуля (http://www.comizdat.com/3/4/6/2852/img/1/3/4/6/90/2850/2852/before.jpg).
Переводим
его на русский язык так, чтобы наш текст
не выходил за рамки оригинального
текста и сохраняем (http://www.comizdat.com/3/4/6/2852/img/1/3/4/6/90/2850/2852/after.jpg)
И
самое главное: не забывайте первое
правило любого крякера
Делайте
резервные копии!
Владимир
Дригалкин,
ep_big@comizdat.com
По
материалам сайта: http://www.comizdat.com/
Журнал "К+Р"
|