Kann man auch noch anders machen, indem man das Dictionary Teil einer Klasse macht.
Delphi-Quellcode:
unit ...;
interface
uses ..., Generics.Collections;
type
TLocalize =
class
strict protected
FDictionary: TDictionary<
String,
String>;
public
property GetText[AText:
String]:
String
read GetLocalizedText;
default;
// Controls übersetzen
procedure Translate(AForm: TForm);
override;
procedure Translate(AFrame: TFrame);
override;
procedure Translate(AControl: TWinControl);
override;
end;
implementation
function TLocalize.GetLocalizedText(AText:
String):
String;
begin
Result := '
';
if Length(Trim(AText)) = 0
then
Exit;
if not FDict.TryGetValue(AText, Result)
then
begin
FDict.Add(AText, AText);
Result := AText;
end;
end;
Verwenden kann man's dann zB so:
Delphi-Quellcode:
var
L: TLocalize;
begin
L := TLocalize.Create;
try
L.Translate(Self);
// ...
ShowMessage(L['Hallo Welt']);
finally
FreeAndNil(L);
end;
end;
Vorteil ist, dass man mehr in die Klasse packen kann, zB Funktionen um Controls zu übersetzen, speichern und laden des Dict usw.
EDIT
Grad gesehen. Wenn du im gleichen Dict verschiedene Sprachen unterbringen willst, müsstest du in dem Fall entweder verschiedene Dicts verwenden (in getrennten Dateien speichern / laden) oder noch ein übergeordnetes Dict schaffen á la TDictionary<Language-String,TLocalize-Klasse>.