Як русифікувати delphi

Русифікація програм - справа важлива, особливо для користувачів, що не володіють іноземними мовами. Досить часто користувачі програми Delphi задаються питанням, як її русифікувати.
Як русифікувати delphi
Інструкція
1
Справа в тому, що кодування OEM і ANSI (в якій працює Delphi) не збігаються. У них різні позиції кириличних символів. У ANSI також є діакритичні символи, яких в OEM немає. Зате в другій присутні символи псевдографіки, які незамінні при зображенні таблиць, хоча це і не дуже затребуване. І все ж варто зауважити, що в цілому ці таблиці взаємозамінні - можливості виведення текстової інформації у них однакові.
2
Є кілька способів вирішення проблеми русифікації. Перший - робота в OEM-редакторі. Можна спочатку підготувати критичні до кодової таблиці частини тексту програми в редакторі, який працює в кодуванні OEM. Досить просте, але в той же час ефективне рішення. Особливо це стосується написання локальних утиліт, в яких висновок інформації, тим не менш, затребуваний сильно.
3
Що стосується недоліків даного способу, тут можна позначити роботу поза звичного багатьом IDE з його наворотами, які здорово відрізняють життя, як то: кодування, компіляція, налагодження. І все це, що кажуть, «в одному флаконі». Крім того, при розростанні проекту починають проявлятися певні складнощі, коли починають використовуватися створені за допомогою кодування ANSI сторонні рядкові ресурси.
4
Якщо проект безпосередньо включених в код рядків (hard-coded) не містить, можна винести всі строкові ресурси в окремі модулі, локализуя їх потім під ту кодування, яке потрібно. Благо утиліт, які змінюють кодування файлів, в мережі повно.
5
Тепер про використання фільтруючих процедур. У Windows API містяться функції, що допомагають перетворювати кодування ANSI і OEM одна в іншу. Це OemToChar і CharToOem. Вони і використовуються при виведенні тексту із заміною фрагментів Writeln ('текст') - на наступні фрагменти:



procedure MyWriteln (const S: string);
var
NewStr: string;
begin
SetLengtn (NewStr, Length (S));
CharToOem (PChar (S), PChar (NewStr));
Writeln (NewStr);
end;
...
MyWriteln ('текст') -

6
Що стосується недоліків цього способу, це неможливість використовувати розширений синтаксис Write і захаращення тексту додатка викликом фільтруючих процедур. Коли треба русифікувати готове додаток з множинними зверненнями до Write, це стає серйозною проблемою.
7
І останнє - зміна кодової сторінки консолі за допомогою засобів Windows API. Метод цей документований, до речі. Тільки заковика в тому, що функція в Windows 95 і 98 не працює. Хоча якщо працювати додаток буде виключно в Windows NT, в цьому випадку можна взяти на озброєння функцію SetConsoleOutputCP (866).

Увага, тільки СЬОГОДНІ!