AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Lingus (Übersetzungswerkzeug)
Thema durchsuchen
Ansicht
Themen-Optionen

Lingus (Übersetzungswerkzeug)

Ein Thema von wicht · begonnen am 24. Jan 2010 · letzter Beitrag vom 7. Apr 2013
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von wicht
wicht
Registriert seit: 15. Jan 2006
Nabend.

Hier möchte ich mal den Lingus, ein kleines Übersetzungswerkzeug für Delphi-Projekte, vorstellen. Über die Weihnachtszeit habe ich etwas rumgebastelt und dabei ist eben Lingus herausgekommen (kA ob der Name Sinn ergibt, mein Latein ist lange her). Die letzte Zeit habe ich in etwas Feinschliff investiert und ich denke, das Teil läuft schon ganz gut .


Was macht dieser Lingus?
  • Ihr habt ein Delphi-Projekt
  • Ihr importiert das Delphi-Projekt in Lingus, übersetzt es und speichert das Lingus-Projekt, wobei in den Ordner, der die neu erstellte Lingus-Projektdatei beinhaltet, auch eine Resourcendatei geschrieben wird
  • Ihr fügt dem Suchpfad eures Projektes die LanguageObjects.pas hinzu (In der Zip und im Setup enthalten, im Quelltext sowieso)
  • Ihr fügt den Units, die Forms oder Strings beinhalten, "uses LanguageObjects" hinzu
  • Ihr ersetzt in diesem Delphi-Projekt alle Strings, z.B. wird 'EinString' zu _('EinString') (gettext-ähnlich)
  • Ins OnCreate oder den Konstruktor der Formulare kommt ein Language.Translate(Self);
  • In der Projektdatei eures Projektes muss nun noch ein {$R PfadZurLanguageRes.res} hinzugefügt werden, damit die Übersetzungen geladen werden können

Habe es hier mit Delphi 7 und 2010 getestet - Die Projekte, die die LanguageObjects.pas am Ende einbinden, benutzen dann die Units "Windows, SysUtils, Classes, StrUtils, TypInfo, Controls" - also noch nicht ganz Non-VCL kompatibel, aber wäre noch ein interessantes Feature. Ich vermute, alles über NT4 oder 2000 funktioniert als Betriebssystem. Daten speichert der Lingus in der Registry unter HKEY_CURRENT_USER\Software\mistake.ws\Lingus.

Also, ich kann keine Garantie dafür übernehmen, dass es überall direkt ohne Probleme läuft, aber Lingus hat sich quasi selbst übersetzt und der streamWriter wurde auch mit Hilfe von Lingus "lokalisiert".
Bevor jetzt kommt, dass Lingus überflüssig ist: Ich habe vorher gettext benutzt, aber fand es irgendwie nicht ganz so schön. Möchte ich hier auch nicht näher drauf eingehen, jedenfalls ist das der Grund, weshalb ich Lingus gebaut habe.

Würde mich natürlich sehr freuen, wenn das irgendjemand ausprobiert und Feedback gibt.. Verbesserungsvorschläge, Fehlerberichte, Lob und so sind auf jedenfall erwünscht.
Danke schonmal.

Achja, im Anhang natürlich Zip, Source und Screenshots.
Weitere Infos, wenn z.Z. auch nicht mehr als hier gepostet: Lingus-Webseite
Miniaturansicht angehängter Grafiken
lingus_compare_180.png   lingus_main_133.png  
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"

Geändert von wicht ( 2. Jul 2010 um 10:06 Uhr)
 
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#21
  Alt 26. Mai 2010, 18:40
Naja, 10 Zeilen Lizenz und HDR ... aber im Kern hast du wohl Recht.
Dann muss ich mal rausfinden, unter welcher Lizenz die Lizenz steht sowas doofes... und am besten noch gucken, dass die Lizenz, unter der die Lizenz steht, nicht von irgendetwas anderem Lizenziert ist.
  Mit Zitat antworten Zitat
Larsi

 
Delphi 2007 Professional
 
#22
  Alt 26. Mai 2010, 18:44
Du könntest ja eine Funktion einbauen welche automatisch übersetzt zum Beispiel mit dem Google Online Übersetzer, die Ergebnisse muss man zwar in den meißten Fällen noch überarbeiten aber eine optinale Funktion fänd ich nicht schlecht. Zum Thema Übersetzung hab ich mal eine kleine Anwendung progammiert welche "Quick und Dirty" mit dem Google Service übersetzt. Klick! Was hälst du von der Idee?

MfG Lars Wiltfang
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#23
  Alt 28. Mai 2010, 22:51
Hallo,

wenn ich vom Programm die Anzeige eines Labels ändere, wird die Anzeige des Labels wieder auf die ursprüngliche Anzeige bei einer Übersetzung zurückgesetzt. Konkretes Beispiel :
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  Label1.Caption := 'Der Testbutton wurde noch nicht angeklcikt';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := 'Test des Button 1';
end;

procedure TForm1.Translate;
begin
  {Wie im Beispiel beschrieben}
end;
Der String vom Event FormShow steht in der Resourcedatei von Lingus, der String von Button 1 nicht. Wenn ich jetzt Button 1 anklicke, dann ändert sich die Anzeige in Label1. Wenn ich danach jetzt über eine Auswahl von einer Combobox die Sprache auswähle und damit die Procedure Translate aufrufe, dann ändert sich die Anzeige von Label 1 in den übersetzten String aus dem FormShow-Event.

Mache ich da irgendwas falsch oder habe ich da einen Fehler gefunden ?
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#24
  Alt 2. Jul 2010, 10:18
Hallo,

es gibt eine neue Version. Anhang des ersten Posts ist aktualisiert.

Neuerungen:
  • Unterstützung für TStrings (TMemo, TComboBox, ...)
  • LoadFromFile()-Methode hinzugefügt, um Übersetzungen zur Laufzeit aus Datei zu laden

Lars: Ich denke das mache ich nicht. Ich glaube, wenn man es automatisieren würde, müsste man danach trotzdem noch per Hand an jedem String rumfummeln.. falls das irgendwer machen möchte, die Quellen gibts ja zum Download

Rolf: Das könnte in der Tat ein Fehler sein. Beim ersten Aufruf von Language.Translate() für die Form werden Instanzen von TTranslationMarker erstellt (Owner ist dann die Form). In diesem Objekten wird der ursprüngliche Text des Labels gespeichert, bevor Translate() es übersetzt. Dieser muss bekannt sein, um bei einer Sprachänderung (und anschließendem Aufruf von Translate()) zu wissen, was da mal stand (Originaltext), um das passende Äquivalent in der neu ausgewählten Sprache zu finden. Ich werde mich später drum kümmern und mich dann hier nochmal melden.

Sorry dass ich mir soviel Zeit zum Antworten gelassen habe. Zuviel zu tun..
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#25
  Alt 2. Jul 2010, 11:48
Hallo Alexander,

das sieht ja schonmal nicht schlecht aus. Werde das die nächsten Tage ausprobieren. Was macht die Übersetzung der Einträge in einem TTreeView ?
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#26
  Alt 2. Jul 2010, 12:02
Ich denke das wird nichts. In der dfm-Datei wird das TListItem wohl irgendwie serialisiert.. ich wüsste nicht, wie ich das machen soll
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#27
  Alt 7. Jul 2010, 18:52
Rolf, das von dir oben beschriebene Problem ist nun behoben.
  Mit Zitat antworten Zitat
drschubi
 
#28
  Alt 19. Jul 2010, 19:23
Hallo, erstmal vielen Dank für dieses tolle Projekt.
Schade dass hier mehr über die Lizenz als über das Projekt an sich diskutiert wird.
Ich möchte die Sprache aus der pf-Datei laden mit
Language.LoadFromFile('lang.pf'); Aber wie sage ich denn welche Sprache ich haben will?

Komme da nicht weiter.

Danke Renê

Sorry, ich habs
z.Bsp. Language.SetLanguage('fr');

Geändert von drschubi (19. Jul 2010 um 19:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#29
  Alt 19. Jul 2010, 19:59
Hi,

schön, dass du das Ding benutzt. Das hier nicht viel über Lingus geredet wird ist völlig okay, dann kann ich mich nämlich um wichtigeres kümmern ...
  Mit Zitat antworten Zitat
drschubi
 
#30
  Alt 19. Jul 2010, 20:07
Hallo Wicht, so richtig will es bei mir nicht, schade das es keine demo gibt.
Nach mehrmaligem Aendern der Auswahl in der ComboBox wird nichts mehr übersetzt. Was mache ich denn falsch?

Danke im voraus Renê


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Combobox1.Items.Add('Deutsch');
  Combobox1.Items.Add('Englisch');
  Combobox1.Items.Add('Französisch');
  ComboBox1.ItemIndex:=0;
  Language.LoadFromFile(ProgDir + 'lang.lpf'); Language.SetLanguage('de'); Language.Translate(Self);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case combobox1.ItemIndex of
    0: begin Language.LoadFromFile(ProgDir + 'lang.lpf'); Language.SetLanguage('de'); Language.Translate(Self); end;
    1: begin Language.LoadFromFile(ProgDir + 'lang.lpf'); Language.SetLanguage('en'); Language.Translate(Self);end;
    2: begin Language.LoadFromFile(ProgDir + 'lang.lpf'); Language.SetLanguage('fr'); Language.Translate(Self);end;
  end;
end;

initialization
  ProgDir := ExtractFilePath(Paramstr(0));
end.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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