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 23. Jan 2010 · letzter Beitrag vom 7. Apr 2013
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
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 09:06 Uhr)
 
drschubi
 
#31
  Alt 19. Jul 2010, 19:55
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ê
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#32
  Alt 19. Jul 2010, 21:17
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
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#33
  Alt 19. Jul 2010, 21:22
Versuch mal, Language.LoadFromFile(ProgDir + 'lang.lpf'); 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...
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...
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#34
  Alt 21. Jul 2010, 21:49
Fehler behoben und im Subversion, irgendwann in naher Zukunft im ersten Post und auf der Webseite.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#35
  Alt 9. Okt 2010, 17:56
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
Achja, und eine kleine Demo-Applikation ist jetzt auch dabei.


Liebe Grüße
  Mit Zitat antworten Zitat
mjohn

 
Delphi 7 Personal
 
#36
  Alt 10. Okt 2010, 11:39
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
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#37
  Alt 10. Okt 2010, 12:50
Hi,

mit den Menüs gibt es keine (mir bekannten) 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
  Mit Zitat antworten Zitat
mjohn

 
Delphi 7 Personal
 
#38
  Alt 10. Okt 2010, 13:37
Hier ein "Minimalbeispiel" mit drei Sprachen:

Delphi-Quellcode:
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 = 'enthen
    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 = 'dethen
    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 = 'frthen
    begin
      Language.CurrentLanguage := LanguageList[i];
      Break;
    end;
  end;
Language.Translate(Self);
end;
end.
Bei der Wahl von Englisch wird auch das Untermenü korrekt übersetzt. Eine weitere Wahl französich oder deutsch hat keinen Effekt mehr.

Grüße, Mano
Angehängte Dateien
Dateityp: zip lingus_demo.zip (211,2 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

 
Delphi XE Professional
 
#39
  Alt 10. Okt 2010, 14:31
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


Liebe Grüße,

Alexander
  Mit Zitat antworten Zitat
mjohn

 
Delphi 7 Personal
 
#40
  Alt 10. Okt 2010, 15:15
Hallo Alex,

ich wusste bis jetzt auch nichts von dieser Eigenschaft . 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 01:14 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