Вместо использования директив времени выполнения для проверки текущего языка, для установки индекса сообщений в таблице строк и загрузки оттуда сообщений в зависимости от языка я использовал переменные времени выполнения. Для каждого языка вы можете создавать другие таблицы строк, затем компилируя их с соответствующими директивами компиляции.
Вот некоторый код, дающий представление об этом методе:
unit French1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls, IniFiles; type TForm1 = class(TForm)Button1: TButton;procedure FormActivate(Sender: TObject);procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end; var Form1: TForm1;StringIndex : Integer;implementation {$R *.DFM} {$R MULTLANG.RES} { Вот содержимое ресурсного файла для этого проекта:1, "Attention"2, "No Condition definition selected!"3, "Always"4, "Cannot delete the 'always' condition."5, "Confirmation"6, "Delete the condition?"7, "Yes"8, "No"9, "Attention"10, "Pas de condition Selectionnйe"11, "Toulours"12, "Ne peux effacer la condition 'Toujours'"13, "Confirmation"14, "Effacer cette condition?"15, "&Oui"16, "&Non"} procedure TForm1.FormActivate(Sender: TObject); var {inifile : TIniFile; Опционально}ProgramLanguage : String;begin { Устанавливаем французский язык }ProgramLanguage := 'fra';{ Дополнительно вы можете получить текущий язык из Win.INI:}{inifile := TInifile.Create('WIN.INI');ProgramLanguage := inifile.ReadString('intl', 'sLanguage', 'enu');inifile.Free;}{ Простите за то, что я привожу здесь несколько языков, указанныениже находились в файле setup.inf моей операционной системы. dan = Danishnld = Dutchenu = English (American)eng = English (International)fin = Finnishfra = Frenchfrc = French Canadiandeu = Germanisl = Icelandicita = Italiannor = Norwegianptg = Portugueseesp = Spanishesn = Spanish (Modern)sve = Swedish } if ProgramLanguage = 'enu' thenbeginStringIndex := 0;endelseif ProgramLanguage = 'fra' thenbeginStringIndex := 8;end;end; procedure TForm1.Button1Click(Sender: TObject); var i,j,k : integer;DialogForm : tform;begin Application.NormalizeTopMosts;{No Condition definition selected!"}DialogForm := CreateMessageDialog(LoadStr(StringIndex+2),mtWarning,[mbOK]);{Attention}DialogForm.caption := LoadStr(StringIndex + 1);DialogForm.showmodal;Application.RestoreTopMosts;{Cannot delete the 'always' condition.}DialogForm := CreateMessageDialog(LoadStr(StringIndex+4),mtWarning,[mbOK]);{Always}DialogForm.caption := LoadStr(StringIndex + 3);DialogForm.showmodal;Application.RestoreTopMosts;{Delete the condition?}DialogForm := CreateMessageDialog(LoadStr(StringIndex+6),mtInformation, [mbYes, mbNo]);{confirmation}DialogForm.caption := LoadStr(StringIndex + 5);for j := 0 to DialogForm.controlCount-1 dobeginif DialogForm.controls[j] is tButton thenwith tButton(DialogForm.controls[j]) dobeginif caption = '&Yes' then caption := LoadStr(StringIndex+7);if caption = '&No' then caption := LoadStr(StringIndex+8);end;end;DialogForm.showmodal;end; end. |
[000309]