source: trunk/ULocalization.pas

Last change on this file was 9, checked in by george, 16 years ago

Opraveno: Některé neuvolňované pamětové struktury.
Opraveno: Chyba při ukončování a uvolňování paměti.

  • Property svn:executable set to *
File size: 2.8 KB
Line 
1unit ULocalization;
2
3interface
4
5uses
6 SysUtils, Classes, Forms, IniFiles, Dialogs;
7
8type
9 TLanguage = class
10 Items: TStringList;
11 Name: string;
12 constructor Create;
13 destructor Destroy;
14 end;
15
16 TLocalization = class(TDataModule)
17 procedure DataModuleCreate(Sender: TObject);
18 procedure DataModuleDestroy(Sender: TObject);
19 public
20 ActiveLanguage: Integer;
21 Languages: array of TLanguage;
22 procedure Add(New: string);
23 function Item(NameIndex: string): string;
24 procedure Activate(New: Integer);
25 procedure LoadLanguages;
26 end;
27
28var
29 Localization: TLocalization;
30
31implementation
32
33{$R *.dfm}
34
35{ TLokalizace }
36
37procedure TLocalization.Activate(New: Integer);
38var
39 I: Integer;
40begin
41 ActiveLanguage := New;
42 if (ActiveLanguage < 0) or (ActiveLanguage >= Length(Languages)) then ActiveLanguage := 0;
43 with Application do
44 for I := 0 to ComponentCount-1 do
45 if Components[I] is TForm then
46 with (Components[I] as TForm) do
47 if Visible then OnShow(Self);
48end;
49
50procedure TLocalization.LoadLanguages;
51var
52 LanguageFile: TSearchRec;
53 Path: string;
54 I: Integer;
55begin
56 Path := ExtractFileDir(Application.ExeName)+'\'+'*.lng';
57 if FindFirst(Path, $2f, LanguageFile)=0 then begin
58 repeat
59 Add(ExtractFileName(LanguageFile.Name));
60 with Languages[High(Languages)] do
61 with TIniFile.Create(ExtractFileDir(Application.ExeName)+'\'+LanguageFile.Name) do
62 try
63 Name := ReadString('Info', 'Language', 'None');
64 ReadSectionValues('Main',Items);
65 finally
66 Free;
67 end;
68 until FindNext(LanguageFile)<>0;
69 FindClose(LanguageFile);
70 end;
71 if Length(Languages) = 0 then raise Exception.Create('Nebyl nalezen žádný jazykový soubor!');
72end;
73
74function TLocalization.Item(NameIndex: string): string;
75var
76 Index: Integer;
77begin
78 if (ActiveLanguage < Length(Languages)) and (ActiveLanguage >= 0) then begin
79 with Languages[ActiveLanguage].Items do begin
80 Index := IndexOfName(NameIndex);
81 if Index <> -1 then Result := Values[NameIndex] else Result := '#' + NameIndex;
82 end;
83 end else Result := '#' + NameIndex;
84end;
85
86procedure TLocalization.Add(New: string);
87begin
88 SetLength(Languages, Length(Languages)+1);
89 Languages[High(Languages)] := TLanguage.Create;
90 Languages[High(Languages)].Name := Name;
91end;
92
93procedure TLocalization.DataModuleCreate(Sender: TObject);
94begin
95 LoadLanguages;
96 ActiveLanguage := 0;
97end;
98
99procedure TLocalization.DataModuleDestroy(Sender: TObject);
100var
101 I: Integer;
102begin
103 for I := 0 to High(Languages) do
104 Languages[I].Free;
105end;
106
107{ TLanguage }
108
109constructor TLanguage.Create;
110begin
111 Items := TStringList.Create;
112end;
113
114destructor TLanguage.Destroy;
115begin
116 Items.Free;
117end;
118
119end.
Note: See TracBrowser for help on using the repository browser.