Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#13

AW: Übersetzung in andere Sprachen mit bestimmten Anforderungen

  Alt 28. Mär 2014, 23:05
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
  Mit Zitat antworten Zitat