1 | unit ULocalization;
|
---|
2 |
|
---|
3 | interface
|
---|
4 |
|
---|
5 | uses
|
---|
6 | SysUtils, Classes, Forms, IniFiles, Dialogs;
|
---|
7 |
|
---|
8 | type
|
---|
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 |
|
---|
28 | var
|
---|
29 | Localization: TLocalization;
|
---|
30 |
|
---|
31 | implementation
|
---|
32 |
|
---|
33 | {$R *.dfm}
|
---|
34 |
|
---|
35 | { TLokalizace }
|
---|
36 |
|
---|
37 | procedure TLocalization.Activate(New: Integer);
|
---|
38 | var
|
---|
39 | I: Integer;
|
---|
40 | begin
|
---|
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);
|
---|
48 | end;
|
---|
49 |
|
---|
50 | procedure TLocalization.LoadLanguages;
|
---|
51 | var
|
---|
52 | LanguageFile: TSearchRec;
|
---|
53 | Path: string;
|
---|
54 | I: Integer;
|
---|
55 | begin
|
---|
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!');
|
---|
72 | end;
|
---|
73 |
|
---|
74 | function TLocalization.Item(NameIndex: string): string;
|
---|
75 | var
|
---|
76 | Index: Integer;
|
---|
77 | begin
|
---|
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;
|
---|
84 | end;
|
---|
85 |
|
---|
86 | procedure TLocalization.Add(New: string);
|
---|
87 | begin
|
---|
88 | SetLength(Languages, Length(Languages)+1);
|
---|
89 | Languages[High(Languages)] := TLanguage.Create;
|
---|
90 | Languages[High(Languages)].Name := Name;
|
---|
91 | end;
|
---|
92 |
|
---|
93 | procedure TLocalization.DataModuleCreate(Sender: TObject);
|
---|
94 | begin
|
---|
95 | LoadLanguages;
|
---|
96 | ActiveLanguage := 0;
|
---|
97 | end;
|
---|
98 |
|
---|
99 | procedure TLocalization.DataModuleDestroy(Sender: TObject);
|
---|
100 | var
|
---|
101 | I: Integer;
|
---|
102 | begin
|
---|
103 | for I := 0 to High(Languages) do
|
---|
104 | Languages[I].Free;
|
---|
105 | end;
|
---|
106 |
|
---|
107 | { TLanguage }
|
---|
108 |
|
---|
109 | constructor TLanguage.Create;
|
---|
110 | begin
|
---|
111 | Items := TStringList.Create;
|
---|
112 | end;
|
---|
113 |
|
---|
114 | destructor TLanguage.Destroy;
|
---|
115 | begin
|
---|
116 | Items.Free;
|
---|
117 | end;
|
---|
118 |
|
---|
119 | end.
|
---|