![]() |
AW: Übersetzung in andere Sprachen mit bestimmten Anforderungen
Leute bei einem Formular und vielleicht 20 Texten würde ich noch nicht einmal drüber nachdenken, irgend etwas anzupassen. Einfach die Texte, die man übersetzen will, nach meinem Vorschlag einlesen. Wer will, kann noch folgende Funktion verwenden:
Delphi-Quellcode:
Dann schreibt man einfach:
Function Translate (string aKey, aDefault : String) : String;
begin Result := Translations.Values[aKey]; if Result='' then Result := aDefault; End;
Delphi-Quellcode:
D.h. man übergibt einfach der 'Translate'-Funktion einfach den aktuellen Wert. Wenn nun -aus welchem Grund auch immer- der übersetzte Text nicht vorhanden ist, wird wenigstens der Originaltext verwendet.
...
MyLabel.Caption := Translate('MyLabel',MayLabel.Caption); ... Klar, kann man alles verbessern, automatisieren, per RTTI automatisch erstellen, aber wie schon gesagt: Bei 1-2 Formularen absoluter Overkill. Oder Spielerei. |
AW: Übersetzung in andere Sprachen mit bestimmten Anforderungen
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein RTTI-Beispiel, basierend auf einem alten Testprojekt von mir von 2006. Sollte sich recht leicht für deine Zwecke anpassen lassen.
(Analog zu GetPropValue gibt es auch SetPropValue.) |
AW: Übersetzung in andere Sprachen mit bestimmten Anforderungen
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 :thumb:. Ich hab die Funktion ähnlich umgesetzt:
Delphi-Quellcode:
Zum Abrufen der übersetzten Strings dann einfach:
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;
Delphi-Quellcode:
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.
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; 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz