Перевод программ под Windows.
Как это не прискорбно, но многие хорошие программы имеют англоязычный интерфейс и не всегда программисты заботятся о многоязыковой поддержке своих программных продуктов. Но существует выход: перевести интерфейс программы на другой язык самому. Данная статья рассказывает как это сделать, и с помощью каких программ...

Для перевода программ под 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 DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU ;Стили окна
CAPTION "About..." ;Название окна
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL ;Язык диалога
FONT 8, "MS Sans Serif" ;Размер и тип используемого шрифта
{
 CONTROL "©2002 by LENIN INC", 8, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 14, 90, 32
 CONTROL "All Rights Reserved", 9, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 40, 19, 90, 32
 CONTROL "&OK", 1, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 218, 6, 50, 14
 CONTROL "&Cancel", 2, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 218, 26, 50, 14
 CONTROL 1, 3903, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 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 указаны сочитания клавиш для быстрого доступа. Они бывают не всегда.

Все, что было сказано выше, в основном касается программ, написанных на WIN32API. Открыв программу, написанную в Delphi с помощью VCL (визуальных компонентов), вы увидите структуру, в которой будут еще и ресурсы типа RCData. Привожу фрагмент подобного кода, который отображает окно "Errors". К сожалению, само окно Вы не сможите увидеть в редакторе ресурсов.


object ErrForm: TErrForm        \\Начало объекта 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         \\Начало объекта 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                           \\Завершение объекта TPanel
end                             \\Завершение объекта TErrForm

Здесь нужно изменять текст, находящийся между кавычками (' '). Я разделил цветом каждый объект ресурса, который начинается атрибутом object и завершается end.

Если при переводе Ваш текст не поместился в одну строку, добавьте элемент WordWrap = True. Это позволит расположить текст любой длины, причем количество строк будет определяться автоматически.


  object Panel1: TPanel         \\Начало объекта 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                           \\Завершение объекта TPanel

Но это будет работать только для компонента, который имеет свойство WordWrap, иначе будет ошибка.

Все это достаточно просто, ведь текст в редакторе ресурсов виден и доступен для редактирования. Но что делать, если текст какого-то окна сообщения находиться не в ресурсах, а в внутри модуля программы? Вот тут нам и поможет шестнадцатеричный редактор. Итак, мы открываем программу, например, в WinHex и находим структуру, которую хотим перевести. Возьмем для примера текст All Rights Reserved, который спрятан внутри EXE модуля:

Переводим его на русский язык так, чтобы наш текст не выходил за рамки оригинального текста и сохраняем:

И самое главное: не забывайте первое правило любого крякера - Делайте резервные копии! И еще: изменение кода программы с помощью шестнадцатеричных редакторов может повлечь за собой уголовную ответственность. Внимательно читайте лицензионное соглашение программ.

Copyright © 2002-2008 by Vladimir Drigalkin aka LENIN INC. All Rights Reserved.