Тема: Іні вайл (мовний файл) у Delphi
Доброго всім дня.
В мене виникла проблема з мовними вайлами.
Щоби змінювати мовний інтерфайс додатку я написав наступний код:
unit Main;
...
{ Public declarations }
end;
TLangList = record
LangName: string;
LangFileName: string;
end;
var
Main_Fr: TMain_Fr;
SettIniFile, LangIniFile: TIniFile;
IniDefLang:integer;
LangSrcRec: TSearchRec;
LangList: array of TLangList;
TimerFunction, TimerExitFunc:byte;
implementation
...
procedure CreateLangMenu;
var
i: integer;
NewLangMenu: TMenuItem;
begin
try
try
i:=1;
if FindFirst(ExtractFilePath(Application.ExeName)+'Lang\*.ini', faAnyFile, LangSrcRec) = 0 then
begin
repeat
LangIniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Lang\'+LangSrcRec.Name);
SetLength(LangList,i+1);
LangList[i].LangFileName:=LangSrcRec.Name;
LangList[i].LangName:=LangIniFile.ReadString('Language Info','LangName','? Language');
NewLangMenu:=TMenuItem.Create(Main_Fr.English_MIt);
NewLangMenu.Caption:=LangList[i].LangName;
NewLangMenu.GroupIndex:=1;
NewLangMenu.RadioItem:=True;
NewLangMenu.OnClick:=Main_Fr.LanguagesClick;
Main_Fr.Languages_MIt.Add(NewLangMenu);
Inc(i);
until FindNext(LangSrcRec) <> 0;
end;
finally
FindClose(LangSrcRec);
LangIniFile.Free;
end;
except
MessageDlg('ERROR! Language *.ini file corrupt',mtError,[mbYes],0);
end;
end;
...
procedure TMain_Fr.FormCreate(Sender: TObject);
begin
SettIniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Sett\Sett.cfg');
IniDefLang:=SettIniFile.ReadInteger('options','Language',0);
try
CreateLangMenu;
except
MessageDlg('ERROR! Main config file corrupt!',mtError,[mbYes],0);
end;
Main_Fr.LanguagesClick(Main_Fr.Languages_MIt.Items[IniDefLang]);
end;
...
procedure TMain_Fr.FormDestroy(Sender: TObject);
begin
try
SettIniFile.Free;
except
end;
end;
...
procedure TMain_Fr.LanguagesClick(Sender: TObject);
begin
if (Sender is TMenuItem) then
begin
(Sender as TMenuItem).Checked:=True;
try
try
LangIniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'Lang\'+LangList[Languages_MIt.IndexOf(Sender as TMenuItem)].LangFileName);
File_MIt.Caption:=LangIniFile.ReadString('Main Menu','File','File');
NewDatabase_MIt.Caption:=LangIniFile.ReadString('Main Menu','New Database','New Database');
OpenDatabase_MIt.Caption:=LangIniFile.ReadString('Main Menu','Open Database','Open Database');
SaveAsDatabase_MIt.Caption:=LangIniFile.ReadString('Main Menu','Save As Database','Save As Database');
Exit_MIt.Caption:=LangIniFile.ReadString('Main Menu','Exit','Exit');
...
RiderBase_Fr.Is_ChBx.Caption:=LangIniFile.ReadString('Rider Form','Is','Is');
RiderBase_Fr.Fruiting_ChBx.Caption:=LangIniFile.ReadString('Rider Form','Fruiting','Fruiting');
RiderBase_Fr.Desirable_ChBx.Caption:=LangIniFile.ReadString('Rider Form PanelForm','Desirable','Desirable');
RiderBase_Fr.Cancel_Bt.Caption:=LangIniFile.ReadString('Rider Form','Cancel','Cancel');
RiderBase_Fr.Apply_Bt.Caption:=LangIniFile.ReadString('Rider Form','Apply','Apply');
...
SettIniFile.WriteInteger('options','Language',(Sender as TMenuItem).MenuIndex);
finally
LangIniFile.Free;
end;
except
MessageDlg('ERROR! Lang *.ini file corrupt',mtError,[mbYes],0);
end;
end;
end;
Проблема в тому що основну форму перекладає, а інші не хоче.
При запуску додатку випливає наступне вікно з повідомленням:
Після закриття даного діалогу додаток відкривається де основна фома(Main_Fr) перекладена а інші неперекладені.
Та коли я видаляю з проекту частину коду, що відповідає за переклад інших форм (У даному коді 92-96 рядки) і компілюю проект то після цього при запуску додатку діалогове вікно не зявляєтья.
Чесно сказати, що я зайшов в глухий кут і не можу вирішити цієї помилки тому звертаюся до усіх за допомогою.