![]() |
Lingus (Übersetzungswerkzeug)
Liste der Anhänge anzeigen (Anzahl: 2)
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 :-D . Was macht dieser Lingus?
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: ![]() |
Re: Lingus (Übersetzungswerkzeug)
Nabend.
Es gibt eine neue Version. Geändert hat sich folgendes (Version im ersten Post aktualisiert): - Verbesserter Import von Quellen - Suchfunktion wie bei Firefox mit so einer Leiste unten - Speichern und Laden aus .exe oder Linugs-.res Dateien ist jetzt möglich - Viele Kleinigkeiten... Für die nächste Version ist geplant, dass die LanguageObjects.pas aufgeteilt wird, so dass weniger Code bei Anwendungen, die die Übersetzungen nutzen, mitgegeben werden muss. Würde mich sehr über irgendeinen Kommentar freuen... auch wenn ich befürchte, dass auf diesen Post niemand antwortet :mrgreen: Bitte teste es doch mal irgendwer.. :P |
Re: Lingus (Übersetzungswerkzeug)
Und der längste Monolog des Forums geht weiter :-D
In der letzten Zeit sind ein paar Dinge passiert, hier mal das wichtigste aufgelistet:
![]() Downloads im ersten Post wurden aktualisiert, Setup-Download gibt es auf der Webseite. Schönen Sonntag noch :P |
Re: Lingus (Übersetzungswerkzeug)
Wegen Feedback:
Du darfst nicht glauben, dass viele Leute so etwas brauchen: Die Doofies, die so etwas brauchen, weil sie kein Englisch können, geben das Programmieren bald wieder auf... |
Re: Lingus (Übersetzungswerkzeug)
Und weil der Programmierer englisch kann muss man das Programm nicht lokalisieren? :gruebel:
|
Re: Lingus (Übersetzungswerkzeug)
Immerhin zwei Antworten.. :mrgreen:
Nein, ich habe mich damit schon abgefunden und kein so großes Problem mehr damit. Solange es mir keiner verbietet werde ich den Thread trotzdem bei (für mich interessanten) neuen Features aktualisieren.. |
Re: Lingus (Übersetzungswerkzeug)
Wir werden dir das bestimmt nicht verbieten.
|
Re: Lingus (Übersetzungswerkzeug)
Hallo :hi:
Hab die aktuelle Version mal an einem keinen Test Projekt ausprobiert und es hat nun problemlos funktioniert. Die Lizenz (GNU Lesser GPL) der Source Dateien (LanguageObjects.pas, ...) ist aber nicht gerade optimal für Delphi Projekte. Besser wäre hier wohl die MPL. Gruß tron |
Re: Lingus (Übersetzungswerkzeug)
Hi,
danke, besonders für das Zitat:
Auch danke für den Kommentar zu der Lizenz - ich habe nur irgendwas gesucht und dachte mir "die LGPL passt bestimmt schon irgendwie" - werde mich da bei Zeiten nochmal informieren und das dann vermutlich anpassen... |
Re: Lingus (Übersetzungswerkzeug)
Rechts die vielen (vorallem bei mehreren Sprachen) Memos würde ich in eine ScrollBox verfrachten,
denn aktuell kommt man an die unteren Memos nicht richtig ran. |
Re: Lingus (Übersetzungswerkzeug)
Zitat:
|
Re: Lingus (Übersetzungswerkzeug)
Zitat:
(nächsten Monat kommt erstmal 'ne neue Brille und dann mal gucken was übrig bleibt) PS: Ich komm ja an die Memos ran ... ich seh nur nich, was ich da machen würde :zwinker: |
Re: Lingus (Übersetzungswerkzeug)
:mrgreen: ... ich kann halt nicht mehr als Deutsch und Englisch!
Werde das aber irgendwann am Wochenende realisieren, danke für den Tipp :thumb: |
Re: Lingus (Übersetzungswerkzeug)
Zitat:
MPL 1.1 , GPL 3.0 und LGPL 3.0 (hatte mir die aktuelleren Lizenzen kombiniert) Und es gibt auch Einige, welche schon lange "erfolgreich" hiemit laufen: MPL 1.0 , GPL 2.0 und LGPL 2.0 Multilizenzen haben den Vorteil, daß sich jeder die zu seinem Programm passende Lizenz aussuchen und verwenden kann (solange nicht grob fahrlässig gegen die Anderen verstoßen wird). Denn z.B. dein GPL-Projekt macht sich in einem Programm mit einer MPL-freundlicheren Lizenz oftmals sehr schlecht. Und diese 3 Lizenzen vertragen sich recht gut und bieten insgesamt ein sehr großes Spektrum an Verträglichkeit. |
Re: Lingus (Übersetzungswerkzeug)
Ich habe mich für eine BSD-Lizenz entschieden, wobei ich die Punkte 2 und 3 entfernt habe. Sieht man in den Quellen. Ich hoffe, dass das so passt...?
Und wenn sich immer noch irgendwer beschwert kommt die Datei halt unter Public Domain, und dann will ich nix mehr hören :mrgreen: ... |
Re: Lingus (Übersetzungswerkzeug)
Hast du dir das gut überlegt? Bei BSD gibst du deine Rechte weitgehenst ab. Jemand könnte an leicht geänderten Code verdienen und sich diese Änderungen auch patentieren lassen (siehe MS-Kerberos <-> Kerberos)
|
Re: Lingus (Übersetzungswerkzeug)
Ich habe nur die zwei Dateien, die andere Menschen in ihre Applikation mit hineinkompilieren müssen/können, unter diese Lizenz gestellt (Übersetzungen aus .exe auslesen, Übersetzungen auf Komponenten anwenden und die _()-Funktion - nichts weltbewegendes). Darum kann ich damit gerade noch leben. Der Lingus als Programm steht weiterhin unter der GPL. So denke ich jedenfalls, dass Lingus für jegliche Art von Programm, egal unter welcher Lizenz es später steht, benutzt werden kann. Das liegt eben daran, dass ich mich freuen würde, nicht für immer der einzige User meines Programms zu sein :-D
|
Re: Lingus (Übersetzungswerkzeug)
Zitat:
@mkinzler: Keine Sorge. Zitat:
Auch Lizenzen liegen unter irgendeiner Lizenz und dürfen garnicht oder nur in bestimmten/wenigen Dingen geändert werden, damit sie gültig sind. (theoretisch ist nichtmal ein simples eigenmächtiges Übersetzen erlaubt :wall: ) |
Re: Lingus (Übersetzungswerkzeug)
Ihr macht mich fertig. Wie wär's hiermit?
![]() Verträglich? Weil da dann eben Punkt zwei mit bei ist. Wenn das immer noch nicht passt mache ich Public Domain und will hier nichts mehr hören... :wall: :mrgreen: Edit: Was spricht denn dagegen, Punkt zwei zu entfernen, und das ding dann mistake.ws-Lizenz zu nennen? Das ist doch nicht verboten? |
Re: Lingus (Übersetzungswerkzeug)
Zitat:
PS: Was spricht dagegen ein "Heer der Ringe"-Buch zu nehmen, Frodo in Frank umzubenennen, noch'n paar andere kleine Dinge zu ändern und das Ergebnis "Heer der Freundschaftsbänder" zu nennen? |
Re: Lingus (Übersetzungswerkzeug)
Naja, 10 Zeilen Lizenz und HDR ... aber im Kern hast du wohl Recht.
Dann muss ich mal rausfinden, unter welcher Lizenz die Lizenz steht :stupid: sowas doofes... und am besten noch gucken, dass die Lizenz, unter der die Lizenz steht, nicht von irgendetwas anderem Lizenziert ist. |
Re: Lingus (Übersetzungswerkzeug)
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.
![]() MfG Lars Wiltfang |
Re: Lingus (Übersetzungswerkzeug)
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:
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.
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; Mache ich da irgendwas falsch oder habe ich da einen Fehler gefunden ? |
AW: Lingus (Übersetzungswerkzeug)
Hallo,
es gibt eine neue Version. Anhang des ersten Posts ist aktualisiert. Neuerungen:
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 :-D 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.. :stupid: |
AW: Lingus (Übersetzungswerkzeug)
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 ? |
AW: Lingus (Übersetzungswerkzeug)
Ich denke das wird nichts. In der dfm-Datei wird das TListItem wohl irgendwie serialisiert.. ich wüsste nicht, wie ich das machen soll :?
|
AW: Lingus (Übersetzungswerkzeug)
Rolf, das von dir oben beschriebene Problem ist nun behoben.
|
AW: Lingus (Übersetzungswerkzeug)
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
Delphi-Quellcode:
Aber wie sage ich denn welche Sprache ich haben will?
Language.LoadFromFile('lang.pf');
Komme da nicht weiter. Danke Renê Sorry, ich habs z.Bsp. Language.SetLanguage('fr'); |
AW: Lingus (Übersetzungswerkzeug)
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 :-D ... |
AW: Lingus (Übersetzungswerkzeug)
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. |
AW: Lingus (Übersetzungswerkzeug)
Ich nochmal,
die Einträge der Combobox werden leider auch nicht geändert. Uebersetzt habe ich sie aber.Ich find den Fehler nicht, leider, :( wicht, kannst du bitte helfen, wenn du Zeit hast? Danke Renê |
AW: Lingus (Übersetzungswerkzeug)
Hi,
du hast auf dem Formular eine TComboBox, die mit Text befüllt ist. Du rufst Language.Translate(Self) im Formular auf. Der Text bleibt der selbe wie vorher? Und vor Language.Translate() wurde er nicht angepackt, so dass er mit den Daten aus der Sprach-Datei nicht mehr "synchron" ist? Ganz sicher, dass er korrekt übersetzt ist? Richtige Datei geladen? Ich habe es gerade selbst nocheinmal getestet und hier hat es geklappt. Wenn das nicht weiterhilft könntest du mir ein kleines Testprojekt bauen und zuschicken, was nichts macht, ausser diesen Fehler zu zeigen, hätte ich auch kein Problem mit. :) EDIT: Der "zum letzte Post" Button oder wie das heißt hat mich direkt auf dein letztes Posting geworfen, obwohl ich das davor noch gar nicht gelesen hatte? Ist hier was faul oder bin ich verwirrt? Schaue nochmal über das andere Posting von dir... Liebe Grüße, Alexander |
AW: Lingus (Übersetzungswerkzeug)
Versuch mal,
Delphi-Quellcode:
nur am Anfang im FormCreate() zu machen, und zwar, bevor du das erste Mal Translate() aufrufst. Ansonsten sieht das glaube ich okay aus, und ich meine, ein mehrmaliges LoadFromFile() nicht wirklich getestet zu haben, weil es meiner Meinung nach irgendwie "überflüssig" ist...
Language.LoadFromFile(ProgDir + 'lang.lpf');
Vielleicht hilfts, ansonsten schaue ich mir das heute Nacht oder morgen Abend mal an... Noch ein Edit: Die Idee mit der Demo-Applikation ist super, da werde ich mal bei Zeiten was schustern... |
AW: Lingus (Übersetzungswerkzeug)
Fehler behoben und im Subversion, irgendwann in naher Zukunft im ersten Post und auf der Webseite.
|
AW: Lingus (Übersetzungswerkzeug)
Nabend,
es gibt eine neue Lingusversion zum Download auf der Webseite, die im ersten Post steht. Hinzugekommen sind Ignore-Listen für bestimmte Dateien oder Strings, so dass man beim Synchronisieren die Übersicht behält :-D Achja, und eine kleine Demo-Applikation ist jetzt auch dabei. Liebe Grüße |
AW: Lingus (Übersetzungswerkzeug)
Hallo Alex,
du hast da mit Lingus ein tolles Tool geschaffen. Kompliment! Ich entwickle unter Delphi7 ein größeres Projekt und möchte es mit Lingus auf Mehrsprachigkeit umstellen. Zum Test habe ich ein kleineres Projekt erstellt und damit etwas experimentiert. Die Beschriftungen werden bis auf eine Ausnahme auch beim Sprachenwechsel alle fein geändert. Nur die Menüs und Untermenüs wollen nicht. Muss ich bei Menüs irgend eine Besonderheit beachten oder ist die Implementation noch nicht so weit? Grüße, Mano |
AW: Lingus (Übersetzungswerkzeug)
Hi,
mit den Menüs gibt es keine (mir bekannten:-D) Probleme und das müsste einfach nur funktionieren. Kannst du mir das Test-Programm, wo es bei dir nicht klappt, einfach zu senden oder hier anhängen? Ich glaube, so kommen wir am schnellsten zur Lösung des Problems. Liebe Grüße, Alexander |
AW: Lingus (Übersetzungswerkzeug)
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ein "Minimalbeispiel" mit drei Sprachen:
Delphi-Quellcode:
Bei der Wahl von Englisch wird auch das Untermenü korrekt übersetzt. Eine weitere Wahl französich oder deutsch hat keinen Effekt mehr.
unit Lingusdemo;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, LanguageObjects, LanguageIcons, StdCtrls, Menus, ImgList; type TForm1 = class(TForm) GroupBox1: TGroupBox; MainMenu1: TMainMenu; Datei1: TMenuItem; speichern1: TMenuItem; laden1: TMenuItem; Einstellungen1: TMenuItem; Sprache1: TMenuItem; Deutsch1: TMenuItem; Englisch1: TMenuItem; Franzsisch1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Englisch1Click(Sender: TObject); procedure Deutsch1Click(Sender: TObject); procedure Franzsisch1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Language.Translate(Self); end; procedure TForm1.Englisch1Click(Sender: TObject); var i: Integer; begin for i := 0 to LanguageList.Count - 1 do if LanguageList[i].Available then begin if LanguageList[i].ID = 'en' then begin Language.CurrentLanguage := LanguageList[i]; Break; end; end; Language.Translate(Self); end; procedure TForm1.Deutsch1Click(Sender: TObject); var i: Integer; begin for i := 0 to LanguageList.Count - 1 do if LanguageList[i].Available then begin if LanguageList[i].ID = 'de' then begin Language.CurrentLanguage := LanguageList[i]; Break; end; end; Language.Translate(Self); end; procedure TForm1.Franzsisch1Click(Sender: TObject); var i: Integer; begin for i := 0 to LanguageList.Count - 1 do if LanguageList[i].Available then begin if LanguageList[i].ID = 'fr' then begin Language.CurrentLanguage := LanguageList[i]; Break; end; end; Language.Translate(Self); end; end. Grüße, Mano |
AW: Lingus (Übersetzungswerkzeug)
Hi,
Problem ist erkannt. Du hast beim MainMenu1 AutoHotKeys auf maAutomatic gestellt. Ich wusste gar nicht, dass es diese interessante Eigenschaft gibt, demnach mache ich das immer per Hand. Die Sache dabei ist, dass Delphi in die .dfm den von Lingus eingelesenen String packt, z.B. "Datei", und dass das Menü dann daraus "&Datei" macht - Lingus kennt "&Datei" aber nicht, weil aus der .dfm nur "Datei" eingelesen wurde, demnach kann das Menü nicht übersetzt werden. Als schnelle Lösung müsstest du AutoHotKeys wohl auf maManual stellen und dir die Arbeit mit den HotKeys selbst machen... Vielleicht könnte Lingus das irgendwann auch selbst regeln, aber bis ich da dran weiter machen kann, werden noch ein paar Monate vergehen, das hier ist meiner Meinung nach nur ein kleines Problem. BTW: Du kannst die Sprache auch mit Language.SetLanguage('en') auf Englisch setzen, das Argument, was mitgegeben wird, ist einfach die Sprach-ID. Dann kann man sich die Schleifen sparen. Warum das auf der Hilfe-Seite und vielleicht sogar im Demo-Projekt von mir so kompliziert gemacht ist, fällt mir gerade nicht ein :-D Liebe Grüße, Alexander |
AW: Lingus (Übersetzungswerkzeug)
Hallo Alex,
ich wusste bis jetzt auch nichts von dieser Eigenschaft :P. Bei Delphi7 scheint das die Standardeinstellung zu sein. Auf diese Option kann ich locker verzichten. Vielen Dank für die schnelle Hilfe! Jetzt funktioniert ja alles perfekt. Danke und Grüße, Mano |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 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