Joar, ich bastel mir grad 'ne eigene Sammlung an Komponenten, welche ihren Text gleich mit übersetzen.
Als Erstes werde ich einige Standardkomponenten vom Delphi übersetzen,
also alle möglichst Property/Methoden abfangen, welche am Ende irgendwie Text anzeigen.
Als erstes Versuchsobjekt mußte TLabel dran glauben und TEdit hab ich innerhalb von 10 Sekunden genauso umgestellt,
aber da muß ich noch ein bissl Testen, vorallem was das Änder per Benutzereingabe bestifft.
Im Prinzip lassen sich am Ende auch viele Fremdkomponenten so "nachrüsten".
Wenn man sich z.B. ein eigenes Set an Übersetzungen (TTransApp) über ein DesignPackage in die
IDE einschleußt, kann man sogar schon zur Designtime dieses nutzen.
Siehe Project1 > "hTransInvalidEnd", mit der Standarssignatur "htx" in der Capion und uf dem Formular sieht man einen anderen Text.
PS: hTransInvalidEnd ist nur ein vordefinierter Standard-"Bezeichner", denn diese Übersetzungskomponenten übersetzen sich selber,
bzw. man kann über die vorhandenen Schnittstellen auch gleich deren Melde-/Fehlertexte mit übersetzen (wenn man unbedingt will)
Das vorkompilierte Demo-Programm enthält nur folgende Befehle:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
TransApp1.Signature := '$';
TransApp1.Add('Test', 'Hallöle');
TransApp1.Add('xxx', 'Es geht :D');
TransLabel1.Caption := '*$Test*';
TransLabel2.Perform(WM_SETTEXT, 0, PChar('>>> $xxx <<<'));
TransLabel2.Perform(CM_TEXTCHANGED, 0, 0); // für's AutoSize
Label1.Caption := TransLabel1.Caption;
Label2.Caption := TransLabel2.Caption;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TransApp1.Add('Test', 'jupp');
TransApp1.Add('xxx', 'schön');
end;
Natürlich läßt sich die Übersetzung auch sonstwo nutzen, über kleine Funktionen.
Und es wäre auch ganz einfach möglich, die Übersetzungen zur Laufzeit adhoc aus einer datenbank zu ziehen, wenn man unbedingt will.
Ein Ändern der Wörterbücher paßt auch sofort programmweit alle Übersetzungen an.
Die Komponenten lassen sich entweder an eine bestimmte TransApp (Übersetzer) hängen oder sie arbeiten mit allen global registrierten TransApp's.
Nja, beim TLabel hab ich es übertrieben, denn die Übersetzung reagiert auch auf Messages,
aber standardmäßig hab ich "nur" vor die Property ala .Text und .Caption zu hocken und nur über dieses Stellen die Übersetungen einfließen zu lassen.
Somit braucht man nirgends was umbauen, da alles über die normalen Schnittstelleb/Property läuft.
Unterschiedliche Übersetzungen könnte man auf verschiedene Wege einspielen
> entweder man läd nimmt sich eine TransApp und läd dort jeweils die Texte in gewünschter Sprache rein (Einzeln oder über Dateien/Streams/Resourcen)
> man läd merhere Sprachen gleichzeitig und nutzt den Postfix, welchen diese Liste anbietet
TransApp1.Postfix := '.de';
,
womit dann alle Anfragen entsprechend umgeleitet werden ('Test' => 'Test.de').
Delphi-Quellcode:
TransApp1.Add('Test', 'jupp');
TransApp1.Add('Test.de', 'jupp');
TransApp1.Add('Test.en', 'yo');
> Wenn man sich einen Nachfahren von TTransApp erstellt, bzw. die Entsprechenden Ereignisse im
OI verknüft,
dnn kann man auf OnTransMsg reagieren, schickt allen TTransApp's z.B. 'de' rüber und filtert dann im OnTransText entsprechend.
> oder oder oder
Soooo, was sagt ihr dazu?
An einigen stellen muß ich noch was machen.
So ist z.B. der Komponenteneditor (Doppelklick auf TTransApp) noch nicht ganz fertig.
Doppelten Code wegoptimieren und noch ein paar Ecken mit eventuell anders/besser überlegen.
Auch die Standard-Signatur ist nicht das Wahre, aber jetzt geh ich erstmal schlafen (hab
morgen heute auch noch etwas Anderes vor, außer Proggen)