Как русифицировать 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).
Оцените статью!