Как русифицировать delphi?

3 ноября 2014 г. Просмотров: 767
Русификация программ – дело важное, особенно для пользователей, не владеющих иностранными языками. Довольно часто пользователи программы Delphi задаются вопросом, как ее русифицировать.

Инструкция

  • Дело в том, что кодировки OEM и ANSI (в которой работает Delphi) не совпадают. В них различны позиции кириллических символов. В ANSI также имеются диакритические символы, коих в OEM нет. Зато во второй присутствуют символы псевдографики, которые незаменимы при изображении таблиц, хотя это и не очень востребовано. И все же стоит заметить, что в целом эти таблицы взаимозаменяемы – возможности вывода текстовой информации у них одинаковы.
  • Есть несколько способов решения проблемы русификации. Первый – работа в OEM-редакторе. Можно изначально подготовить критичные к кодовой таблице части текста программы в редакторе, который работает в кодировке OEM. Довольно простое, но в то же время эффективное решение. Особенно это касается написания локальных утилит, в коих вывод информации, тем не менее, востребован сильно.
  • Что касается недостатков данного способа, тут можно обозначить работу вне привычного многим IDE с его наворотами, которые здорово отличают жизнь, как то: кодирование, компиляция, отладка. И все это, что говорится, «в одном флаконе». Кроме того, при разрастании проекта начинают проявляться определенные сложности, когда начинают использоваться созданные при помощи кодировки ANSI сторонние строковые ресурсы.
  • Если проект непосредственно включенных в код строк (hard-coded) не содержит, можно вынести все строковые ресурсы в отдельные модули, локализуя их затем под ту кодировку, которая требуется. Благо утилит, которые меняют кодировку файлов, в сети полно.
  • Теперь об использовании фильтрующих процедур. В Windows API содержатся функции, помогающие преобразовывать кодировки ANSI и OEM одна в другую. Это OemToChar и CharToOem. Они и используются при выводе текста с заменой фрагментов Writeln(‘текст'); на следующие фрагменты:procedure MyWriteln(const S: string);varNewStr: string;beginSetLengtn(NewStr, Length(S));CharToOem(PChar(S), PChar(NewStr));Writeln(NewStr);end;...MyWriteln(‘текст');
  • Что касается недостатков этого способа, это невозможность использовать расширенный синтаксис Write и захламление текста приложения вызовом фильтрующих процедур. Когда надо русифицировать готовое приложение с множественными обращениями к Write, это становится серьезной проблемой.
  • И последнее – изменение кодовой страницы консоли при помощи средств Windows API. Метод этот документированный, кстати. Только загвоздка в том, что функция в Windows 95 и 98 не работает. Хотя если работать приложение будет исключительно в Windows NT, в этом случае можно взять на вооружение функцию SetConsoleOutputCP(866).
  • Оцените статью!