Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MessageBox mit GNU Gettext übersetzen? (https://www.delphipraxis.net/139211-messagebox-mit-gnu-gettext-uebersetzen.html)

AlexII 25. Aug 2009 16:41


MessageBox mit GNU Gettext übersetzen?
 
Hallo,

ich übersetze gerade mein Programm mit dem GNU Gettext und komme auf ein mal nicht weiter, da die MessageBox Meldungen sich mit diesem Tool nicht übersetzen lassen. Also in der .po Datei sind die Meldungen für das Übersetzen nicht dabei. Wieso eigentlich?

Wer kann mir weiter helfen?

Danke!

Bbommel 25. Aug 2009 16:51

Re: MessageBox mit GNU Gettext übersetzen?
 
Nutzt du dxgettext, um GNU Gettext zu benutzen?

Und wie rufst du die MessageBox auf? Die Meldungen, die dort angezeigt werden soll, muss ja in der Übersetzungsfunktion "_" stehen, sonst klappt das natürlich nicht. Zeig am besten mal ein bisschen Code zum Problem.

Bis denn
Bommel

AlexII 25. Aug 2009 16:55

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von Bbommel
Nutzt du dxgettext, um GNU Gettext zu benutzen?

Wozu ist das gut? Nein ich nutze das nicht.


Zitat:

Zitat von Bbommel
Und wie rufst du die MessageBox auf? Die Meldungen, die dort angezeigt werden soll, muss ja in der Übersetzungsfunktion "_" stehen, sonst klappt das natürlich nicht. Zeig am besten mal ein bisschen Code zum Problem.

Hier ein Beispiel:

Delphi-Quellcode:
if ListBox1.ItemIndex=-1 then
begin
Application.MessageBox('Please select a channel!', 'Error', 16);
Exit;
end;

Bbommel 25. Aug 2009 17:07

Re: MessageBox mit GNU Gettext übersetzen?
 
dxgettext ist halt nicht GNU Gettext, sondern eine Umsetzung von gettext für Delphi. Du kannst es dir ja mal anschauen. Bringt eine Reihe von Tools und Funktionen mit, mit denen sich Forms recht leicht automatisiert übersetzen lassen. Weil es eben auch "gettext" ist könntest du auch deine .po-Dateien weiternutzen, falls das für dich interessant erscheint.

Ich weiß ja nicht, wie das dann bei GNU Gettext läuft - mir ist hier damals dxgettext empfohlen worden, insofern habe ich mich mit GNU dann nicht beschäftigt.

Unabhängig davon ist aber ja das Prinzip das gleiche, also müsste es doch in deinem Code statt
Delphi-Quellcode:
Application.MessageBox('Please select a channel!', 'Error', 16);
eigentlich
Delphi-Quellcode:
Application.MessageBox(_('Please select a channel!'), _('Error'), 16);
heißen, oder?

Bis denn
Bommel

AlexII 25. Aug 2009 17:11

Re: MessageBox mit GNU Gettext übersetzen?
 
Also ich hab mir dxgettext-1.2.2.exe runtergeladen. Ich dachte das ist GNU Gettext, steht ja oben auf der Webseite.

Zitat:

Application.MessageBox(_('Please select a channel!'), _('Error'), 16);
Ne das geht nicht.

Bbommel 25. Aug 2009 17:16

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von AlexII
Delphi-Quellcode:
Application.MessageBox(_('Please select a channel!'), _('Error'), 16);
Ne das geht nicht.

Inwiefern geht das nicht? Fehlermeldungen?

Hast du die Unit "gettext" eingebunden?

Bis denn
Bommel

AlexII 25. Aug 2009 17:23

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von Bbommel
Zitat:

Zitat von AlexII
Delphi-Quellcode:
Application.MessageBox(_('Please select a channel!'), _('Error'), 16);
Ne das geht nicht.

Inwiefern geht das nicht? Fehlermeldungen?

Bekomme ne Fehlermeldung:

Delphi-Quellcode:
[Fehler] Unit1.pas(1173): Inkompatible Typen: 'WideString' und 'PAnsiChar'


Zitat:

Hast du die Unit "gettext" eingebunden?
Hab alles so gemacht wie hier steht, aber nicht "gettext" sondern "gnugettext". Also alles nach der Anleitung.

Bbommel 25. Aug 2009 17:31

Re: MessageBox mit GNU Gettext übersetzen?
 
Jo, die Unit ist gnugettext, nicht gettext - war auf die Schnelle mein Fehler.

Ansonsten versuch es mal mit einer Typ-Umwandlung, etwa so:
Delphi-Quellcode:
Application.MessageBox(PAnsiChar(_('Please select a channel!')), PAnsiChar(_('Error')), 16);
So sollte es eigentlich gehen. Oder nimm eine der Funktionen für eine Dialogbox, die direkt mit Strings in den Parametern arbeiten, zum Beispiel MessageDlg.

Bis denn
Bommel

AlexII 25. Aug 2009 17:34

Re: MessageBox mit GNU Gettext übersetzen?
 
Hab jetzt folgende Warnung, ist das nicht schlimm?

Delphi-Quellcode:
[Warnung] Unit1.pas(1175): Bedenkliche Typumwandlung von WideString in PAnsiChar
Und die Meldung wird nicht richtig ausgegeben, nur erste Buchstaben des Wortes.

Bbommel 25. Aug 2009 17:49

Re: MessageBox mit GNU Gettext übersetzen?
 
Oh je. :)

Sorry, diese Probleme kann ich bei mir nicht nachstellen, da ich D2009 habe, da braucht die MessageBox-Funktion ein PWideChar statt eines PAnsiChar, da ist dann alles in Ordnung. Klar, dass das so Probleme gibt - damit Delphi eine Chance hat, müsstest du wohl aus dem Widestring zuerst noch einen String machen, dann sollte es gehen.

Aber, wie gesagt, ich würde dir alternativ folgenden Code vorschlagen:
Delphi-Quellcode:
  MessageDlg(_('Please select a channel!'),mtError,[mbOk],0);
Dann sollten diese lästigen Umwandlungen automatisch funktionieren.

Bis denn
Bommel

AlexII 25. Aug 2009 17:54

Re: MessageBox mit GNU Gettext übersetzen?
 
Ja das klappt :thumb:

Ok danke dir erst mal, werde jetzt weiter übersetzen. :-D

xZise 25. Aug 2009 18:01

Re: MessageBox mit GNU Gettext übersetzen?
 
Alternativ könntest du auch MessageBoxW verwenden. Diese will PWideChars.
Delphi-Quellcode:
MessageBoxW(..., PWideChar(_('...')),...);
MfG
xZise

AlexII 25. Aug 2009 18:17

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von xZise
Alternativ könntest du auch MessageBoxW verwenden. Diese will PWideChars.
Delphi-Quellcode:
MessageBoxW(..., PWideChar(_('...')),...);

Ok

Jetzt habe ich aber noch ein Problem, Labelx.Caption lassen sich nicht übersetzen wenn diese im Code zugewiesen wurd, z.B.
Delphi-Quellcode:
Label1.Caption:='Hallo';
Wie soll das in der .po auftauchen?

AlexII 25. Aug 2009 18:21

Re: MessageBox mit GNU Gettext übersetzen?
 
Etwa so?

Delphi-Quellcode:
Label1.Caption:=_('Hallo');

xZise 25. Aug 2009 18:29

Re: MessageBox mit GNU Gettext übersetzen?
 
Genau so! Es wird der Code nach den Aufrufen von _() gesucht und in die *.po aufgenommen.

MfG
xZise

PS: Es wird hier ungerne gesehen nach einigen Minuten einen Doppelpost zu posten :P Benutze stattdessen die edit-Funktion.

AlexII 25. Aug 2009 18:34

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von xZise
PS: Es wird hier ungerne gesehen nach einigen Minuten einen Doppelpost zu posten :P Benutze stattdessen die edit-Funktion.

Thx für den Hinweis :thumb:

Wie kann ich eigentlich neue Strings in die .po dazufügen? Immer eine neue erstellen und wieder übersetzen ist doch Quatsch, oder?

Mithrandir 25. Aug 2009 19:06

Re: MessageBox mit GNU Gettext übersetzen?
 
Guck dir die *.po mal mitm Texteditor an. ;) Aber ich find das automatische erstellen recht bequem... :)

xZise 25. Aug 2009 19:12

Re: MessageBox mit GNU Gettext übersetzen?
 
Du sicherst deine Übersetzung und führst dann beide Versionen zusammen ;)

MfG
xZise

AlexII 25. Aug 2009 19:12

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von Daniel G
Guck dir die *.po mal mitm Texteditor an. ;) Aber ich find das automatische erstellen recht bequem... :)

Ja ich hab eine erstellt, also automatisch. Jetzt habe ich mein Programm etwas geändert und die Übersetzung muss erweitert werden. Hab wieder eine neue .po erstellt und muss sie jetzt von vorne noch mal übersetzen :roteyes: Ich kann doch nicht jede Version neu übersetzen. Geht das vllt einfacher?

AlexII 25. Aug 2009 19:13

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von xZise
Du sicherst deine Übersetzung und führst dann beide Versionen zusammen ;)

MfG
xZise

Und wie führe ich sie zusammen? Hab schon alles mögliche ausprobiert :wall:

Bbommel 26. Aug 2009 08:03

Re: MessageBox mit GNU Gettext übersetzen?
 
Wenn du dxgettext und alle seine Tools komplett installiert hast, dann solltest du im Windows Explorer bei einem Klick mit der rechten Maustaste auf eine .po-Datei im Kontextmenü den neuen Menüpunkt "Merge templates" finden. Unter "Übersetzungsdatei" sollte dann die Datei stehen, in der schon Übersetzungen drin sind, unter "Übersetzungsschablone" die neue, noch nicht übersetzte .po-Datei.

Nach kurzer Zeit erhälst du dann eine .po-Datei mit den bisherigen Übersetzungen und den neuen, noch nicht übersetzten Texten.

Steht auch hier in der Doku.

Bis denn
Bommel

AlexII 26. Aug 2009 18:04

Re: MessageBox mit GNU Gettext übersetzen?
 
Ok danke, hab das gemacht. :thumb:

AlexII 29. Aug 2009 09:42

Re: MessageBox mit GNU Gettext übersetzen?
 
Jetzt habe ich noch eine kleine Frage, wie erkenne ich welche Sprache nun geladen wurde? Das brauche ich um im Menü die jeweilige Sprache als Checked zu markieren.

Hab mir die Doku von Gettext an geguckt, aber sie ist sooooooooo groß, ich kann kaum Englisch und weiß gar nicht nach was ich suchen soll.

Bbommel 29. Aug 2009 12:09

Re: MessageBox mit GNU Gettext übersetzen?
 
Die Funktion GetCurrentLanguage liefert dir einen String zurück, der die gerade aktive Sprache angibt.

In der Doku findest du es hier.

Bis denn
Bommel

AlexII 29. Aug 2009 22:30

Re: MessageBox mit GNU Gettext übersetzen?
 
Mit der Funktion GetCurrentLanguage bekomme ich aber nur die Sprache des Windows und nicht mit welcher Sprache gerade das Prog läuft. :gruebel:

Bei mir liefert also die Funktion immer "de_DE" zurück, egal in welcher Sprache man das Prog öffnet.

Luckie 30. Aug 2009 02:35

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von AlexII
Jetzt habe ich aber noch ein Problem, Labelx.Caption lassen sich nicht übersetzen wenn diese im Code zugewiesen wurd, z.B.
Delphi-Quellcode:
Label1.Caption:='Hallo';
Wie soll das in der .po auftauchen?

Sag mal, hast du dir auch mal die Hilfe zu dem Programm durchgelesen wie das überhaupt funktioniert? Und nach dem man dir erklärt hat wie das mit der Messagebox geht, sollte eigentlich kalr sein, wie das mit andern Textzuweisungen geht.

AlexII 30. Aug 2009 08:57

Re: MessageBox mit GNU Gettext übersetzen?
 
Lies ma bitte das ganze Thema durch, dass mit dem "hallo" wurde schon längst geklärt. :roteyes:

Luckie 30. Aug 2009 16:03

Re: MessageBox mit GNU Gettext übersetzen?
 
Ja aber erst nach dem man dir wiederholt erklärt hat, wie gnuGettext funktioniert. Das meinte ich.

Bbommel 31. Aug 2009 09:37

Re: MessageBox mit GNU Gettext übersetzen?
 
Zitat:

Zitat von AlexII
Mit der Funktion GetCurrentLanguage bekomme ich aber nur die Sprache des Windows und nicht mit welcher Sprache gerade das Prog läuft. :gruebel:

Bei mir liefert also die Funktion immer "de_DE" zurück, egal in welcher Sprache man das Prog öffnet.

Was meinst du mit "in welcher Sprache man das Programm öffnet"? Wie öffnest du es denn in einer anderen Sprache? Dazu müsstest du eigentlich (wie in der Hilfe angegeben) die Funktion UseLanguage aufrufen. Ansonsten gibt dir GetCurrentLanguage selbstverständlich die System-Sprache zurück, denn du hast ja nie eine andere Sprache eingestellt. Das ist ja auch gut so: Wenn du alles richtig machst, spricht dein Programm dann auf einem englischen Windows automatisch auch englisch, auf einem deutschen dann deutsch und so weiter... Eben so lange, bis du UseLanguage aufrufst, um die Sprache zu setzen.

Daher frage ich mich halt, wie du überhaupt bisher die Sprache setzt.

Abschließend will ich aber auch noch mal Luckie unterstützen: Die Doku solltest du dir dringend mal anschauen. Du hast ja gesagt, du kannst nicht so gut Englisch, vielleicht solltest du dir die Anleitung dann mal mit Hilfe von Google übersetzen lassen. Ist zwar weit davon entfernt, perfektes Deutsch zu sein, aber wenn du meinst, dass du das Englisch nicht verstehst, könnte das vielleicht helfen.

Bis denn
Bommel


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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