Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   hTranslations - kleine Übersetzungskomponenten (https://www.delphipraxis.net/161004-htranslations-kleine-uebersetzungskomponenten.html)

himitsu 12. Jun 2011 01:24

hTranslations - kleine Übersetzungskomponenten
 
Liste der Anhänge anzeigen (Anzahl: 2)
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
Delphi-Quellcode:
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)

Stevie 12. Jun 2011 02:14

AW: hTranslations - kleine Übersetzungskomponenten
 
Zwei Fragen, die sich mir gleich aufdrängen:
  1. Was macht das besser als z.B. GNU GetText, Multlilizer, Sisulizer (außer dass es gegenüber den letzten beiden nix kostet) ;)
  2. Warum braucht man dafür bitte extra Komponenten? :shock:

wicht 12. Jun 2011 02:23

AW: hTranslations - kleine Übersetzungskomponenten
 
*hust* du hast Lingus vergessen.. :-D

himitsu 12. Jun 2011 08:08

AW: hTranslations - kleine Übersetzungskomponenten
 
Zitat:

2. Warum braucht man dafür bitte extra Komponenten?
Weil die Übersetzung "live" in den Komponenten vorgenommen wird.
Über GExperts und Co. lassen sie sich auch ganz leicht austauschen, was dank der Property-Gleichheit keinerlei Probleme bereiten wird.
Man könnte die Komponenten auch zur Laufzeit nachschieben (genauso wie die TNTs im TDE)


3. Hatte Sakura oder Seehase nicht auch mal einen Übersetzer?
Also irgendein DP-Mitglied war's zumindestens.



Zur Zeit sind es noch Extrakomponenten, was auch für "komplizierte" Komponenten so bleiben wird, aber mit Hilfe der neuen RTTI sollte sich (wenn alles läuft, wie geplant) vieles nachträglich aktivieren lassen, aber ebenfalls schon zur Designtime.

Aus Sicht des Programms wird nirgendwo etwas verändert.

Du kannst an die Caption irgendeines Labels den gewünschten TextCode übergeben und beim Auslesen ist noch genau dieser drin ... nur angezeigt wird etwas Anderes.
Man kann auch zur Laufzeit jederzeit einen neuen Textcode übergeben und der wird auch sofort übersetzt angezeigt.
Bei sowas wie Lingus muß man das vorher im Quelltext übersetzen oder die Komponente entsprechenden bei diesem LanguageObjects regitrieren, es dort ändern und dann neu Übersetzen, bzw. zur Komponente schicken .... hab ich doch richtg verstanden, daß man es so machen muß?
> Es gibt immernoch genug Leute, welche z.B. den Text eines Labels auslesen und diesen zur Steuerung irgendwelcher Funktionen nutzen.

Und es funktioniert auch zur Designtime.
Im Quellcode wollte ich irgendwann mal sehn, ob man die Code-Vervollständigung irgenwie erweitern kann.

Und es ist eigentlich nicht vorrangig auf sprachliche Übersetungen ausgelegt.
(eine Liveanbindung an die Google-Translate-API wäre dennoch möglich :stupid: )

Gut, daß hier nicht die Texte, sondern "Befehle" übersetzt/ersetzt werden, mag Nachteile haben. Kann aber bestimmt auch Vorteile bringen. :gruebel:
Wir haben, hier in der Firma, einige eigene Komponenten, wo unter Anderem ein weiteres Property Text-Nummer existiert, darüber holt sich jede Komponente, aus einer Datenbank die Übersetzungen,
wobei es dort mehr kundenspezifische Anpassungen sind.

OK, alle, ohne Generics und (noch nicht enthalten) und die neusten RTTI-Spielereien, werden es nicht nutzen können.

Vorteil: Es ist ein DP-Eigenes Projekt. :angle2:
OS Free usw.



[add]
Zum Lingus:
- Startet mal deren Demoprojekt.
- ändert den Text "Ein Test für Includes"
- wählt etwas in der ComboBox aus
- ändert dann die Sprache
- und freut euch über zurückgesetze Texte

Sir Rufo 12. Jun 2011 09:28

AW: hTranslations - kleine Übersetzungskomponenten
 
Zitat:

Zitat von himitsu (Beitrag 1105908)
Und es ist eigentlich nicht vorrangig auf sprachliche Übersetungen ausgelegt.
(eine Liveanbindung an die Google-Translate-API wäre dennoch möglich :stupid: )

Nu jo, ob man die tatsächlich noch einbauen sollte?
http://code.google.com/intl/de/apis/.../overview.html

himitsu 12. Jun 2011 09:47

AW: hTranslations - kleine Übersetzungskomponenten
 
Was für perverse Schweine mißbrauchen denn soeine kleine Api? :evil:

Stevie 12. Jun 2011 13:06

AW: hTranslations - kleine Übersetzungskomponenten
 
Zitat:

Zitat von Google
Due to the substantial economic burden caused by extensive abuse, the number of requests you may make per day will be limited

Muhahaha

@Himi: Mir geht gerade durch den Kopf, dass ich mit meinen Bindings auch die Übersetzung regeln könnte, wobei dann der angezeigte Text dem tatsächlichem Text entspricht. Macht aber nix, denn so nen Schmarrn wie Text aus nem Label für irgendne Steuerung zu nutzen, unterstütze ich eh nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz