So, die Programmierung hat etwas länger gedauert, als ich gehofft hatte. Naja, wie immer eigentlich
.
Ich hab mich für die einfache Methode von Furtbichler entschieden
. Ich hab die Funktion ähnlich umgesetzt:
Delphi-Quellcode:
unit Translation;
interface
uses Classes, SysUtils, IniFiles;
const
CRLF = #13#10;
procedure CreateLangFile(
const AFileName:
string);
procedure FreeLangFile;
procedure ReadLangFileSection(
const ASection:
string);
function Translate(
const AName:
string;
const ADefault:
string):
string;
implementation
var hLangFile : TIniFile;
sl: TStringList;
procedure CreateLangFile(
const AFileName:
string);
begin
hLangFile:= TIniFile.Create(AFileName);
sl:= TStringList.Create;
end;
procedure FreeLangFile;
begin
if Assigned(hLangFile)
then
hLangFile.Free;
if Assigned(sl)
then
sl.Free;
end;
procedure ReadLangFileSection(
const ASection:
string);
begin
if Assigned(sl)
then
hLangFile.ReadSectionValues(ASection, sl);
end;
function GetLangString(
const AName:
string;
const ADefault:
string;
const Asl: TStringList):
string;
var idx: integer;
begin
Result:= ADefault;
idx:= Asl.IndexOfName(AName);
if (idx <> -1)
then
begin
Result:= Asl.Values[Asl.Names[idx]];
end;
Result:= StringReplace(Result, '
\n', CRLF, [rfReplaceAll]);
end;
function Translate(
const AName:
string;
const ADefault:
string):
string;
begin
Result:= GetLangString(AName, ADefault, sl);
end;
Zum Abrufen der übersetzten Strings dann einfach:
Delphi-Quellcode:
Translation.CreateLangFile('C:\full\path\to\German.lng');
...
Translation.ReadLangFileSection(Self.Name);
Self.Caption:= Translate(Self.Name, 'Properties of %s');
btnOK.Caption:= Translate(btnOK.Name, btnOK.Caption);
...
Translation.FreeLangFile;
Genaugenommen müsste man das objektorientiert umsetzen, aber dazu fehlte mir gestern echt der Nerv. Mal sehen, vielleicht mach ich das noch, sofern es sich lohnt.
Danke auch an Namenloser für die Anregung mittels
RTTI. Nette Methode, aber so kann ich nicht steuern, welche Strings nicht übersetzt werden dürfen. Oder man müsste dafür mehr Aufwand treiben, indem man sich genau überlegt, wann man die Übersetzung durchführt - was durchaus schwierig wird, wenn bestimmte Strings nur bei Bedarf genutzt werden.
MfG Dalai