Delphi-PRAXiS
Seite 1 von 2  1 2      

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 GNUGetText Retranslate (https://www.delphipraxis.net/127153-gnugettext-retranslate.html)

stOrM 8. Jan 2009 14:44


GNUGetText Retranslate
 
Hallo,
vielleicht bin ich zu blöd (was durchaus in Betracht kommen könnte) aber ich bekomm das RetranslateComponent beim GnuGetText einfach nicht zum Laufen...

D2009 Architect Vista Ultimate Sp1 alle Updates Eng.[b]

Also Im FormOnCreate mach ich:
Delphi-Quellcode:
  UseLanguage('de');
  TranslateComponent(self);
So, jetzt würde ich gerne dem Benutzer die Möglichkeit geben im Programm während der Laufzeit die Sprache zu wechseln (ich hab mal 2 TImages mit ner Flagge als Grafik auf die Form gepappt)
Im OnClick der TImages mach ich dann:

Delphi-Quellcode:
  UseLanguage('en');
  ReTranslateComponent(self);
Folge: Null Auswirkung auf die GUI, also die Sprache wird nicht gewechselt sämtliche Komponenten haben weiterhin die Sprache die im FormOnCreate gesetzt wurde...

Edit: Ich hab ResourceStrings benutzt!

Öhm kennt jemand das Problem bzw. wie kann man das Lösen?
Gruß
s!

Alien_F 8. Jan 2009 15:19

Re: GNUGetText Retranslate
 
Also theoretisch ist dein Ansatz korrekt. Ich hab´s exakt so in meinem Projekt und bei geht´s. Sowohl diverse Caption-Properties als auch resourcestrings, die ich in einer Extra-Unit dafür deklariert habe, werden übersetzt. Ist auch mit den Language-Files alles kokrrekt? ( Unterpfad Locale\en\LC_MESSAGES\default.mo )?

stOrM 8. Jan 2009 15:31

Re: GNUGetText Retranslate
 
Zitat:

Zitat von Alien_F
Also theoretisch ist dein Ansatz korrekt. Ich hab´s exakt so in meinem Projekt und bei geht´s. Sowohl diverse Caption-Properties als auch resourcestrings, die ich in einer Extra-Unit dafür deklariert habe, werden übersetzt. Ist auch mit den Language-Files alles kokrrekt? ( Unterpfad Locale\en\LC_MESSAGES\default.mo )?

Jepp die Pfade zu den Language files sind korrekt, etwas seltsames taucht bei mir auf:
Ich hab mal eine Virable Declariert Typ Boolean im FormOnCreate hab ich nichts eingestellt also keine UseLanguage oder TranslateComponent nur folgendes: firstTranslation := true;

Dann bei der TImageOnlick:

Delphi-Quellcode:
  UseLanguage('en');
  if (firstTranslation) = false then
  RetranslateComponent(self)
  else
    translateComponent(self);
Dann switched er auf Englisch, wenn ich aber nun auf eine andere Sprache will also erneuter wechsel kommt folgendes:

"This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information."

So nun bin ich völlig verwirrt, weil wenn ich im FormOnCreate nun folgendes machen würde:

Delphi-Quellcode:
  UseLanguage('de');
  TranslateComponent(Self);
  firstTranslation := False;
Und dann halt im TImage:
Delphi-Quellcode:
  UseLanguage('en');
  if (firstTranslation) = false then
  RetranslateComponent(self)
  else
    translateComponent(self);
Passiert gar nix nicht mal eine Fehlermeldung die Sprache bleibt wie sie in der FormCreate gesetzt wurde !

Ich hab mir gerade mal per ShowMessage unter dem TImageClick die CurrentLanguage anzeigen lassen, diese wird korrekt geswitched z.B. für Englisch = en also scheint das Problem ggf. am ReTranslateComponent zu liegen...

Vielleicht nen Fehler in der GnuGetText für D2009?

Bbommel 8. Jan 2009 15:46

Re: GNUGetText Retranslate
 
Zitat:

Zitat von stOrM
Dann bei der TImageOnlick:

Delphi-Quellcode:
  UseLanguage('en');
  if (firstTranslation) = false then
  RetranslateComponent(self)
  else
    translateComponent(self);
Dann switched er auf Englisch, wenn ich aber nun auf eine andere Sprache will also erneuter wechsel kommt folgendes:

"This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information."

Naja, die Fehlermeldung ist soweit schon mal richtig, da du ja "firstTranslation" jetzt auch nach dem ersten Übersetzen mit translateComponent nicht auf true gesetzt hast und daher ein translateComponent zum zweiten Mal ausgeführt wird, was nicht passieren darf.

Dass bei dir aber ansonsten gar nichts übersetzt wird, wundert mich auch. Hast du mal in der gnugettext.pas den Debug-Mode aktiviert und dir das Log in eine Datei schreiben lassen? Vielleicht wirst du ja daraus schlauer, ob er überhaupt versucht, irgendwas zu tun. Such ggf. nach
Delphi-Quellcode:
{ $define DXGETTEXTDEBUG}
...da solltest du alle nötigen Infos finden.

Bin mal auf die Auflösung gespannt, wenn es denn eine gibt.

Bis denn
Bommel

stOrM 8. Jan 2009 15:48

Re: GNUGetText Retranslate
 
Zitat:

Zitat von Bbommel
Zitat:

Zitat von stOrM
Dann bei der TImageOnlick:

Delphi-Quellcode:
  UseLanguage('en');
  if (firstTranslation) = false then
  RetranslateComponent(self)
  else
    translateComponent(self);
Dann switched er auf Englisch, wenn ich aber nun auf eine andere Sprache will also erneuter wechsel kommt folgendes:

"This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information."

Naja, die Fehlermeldung ist soweit schon mal richtig, da du ja "firstTranslation" jetzt auch nach dem ersten Übersetzen mit translateComponent nicht auf true gesetzt hast und daher ein translateComponent zum zweiten Mal ausgeführt wird, was nicht passieren darf.

Dass bei dir aber ansonsten gar nichts übersetzt wird, wundert mich auch. Hast du mal in der gnugettext.pas den Debug-Mode aktiviert und dir das Log in eine Datei schreiben lassen? Vielleicht wirst du ja daraus schlauer, ob er überhaupt versucht, irgendwas zu tun. Such ggf. nach
Delphi-Quellcode:
{ $define DXGETTEXTDEBUG}
...da solltest du alle nötigen Infos finden.

Bin mal auf die Auflösung gespannt, wenn es denn eine gibt.

Bis denn
Bommel

Gut ich machs mal eben bin gleich wieder da :-)

RetranslateComponent() was called for a component with name lblInfo.
The language has not changed. The retranslator is not executed.

Das gabs an Info im DebugLog

Alien_F 8. Jan 2009 15:50

Re: GNUGetText Retranslate
 
Die Fehlermeldung kommt bei mir auch, wenn ich zweimal hintereinander TranslateComponent aufrufe. Nach dem allerersten TranslateComponent sollten fortan nur noch ReTranslate Aufrufe stattfinden. Ich denk mal, du setzt firstTranslation nicht auf false.
Ein TranslateComponent muss auch als erstes erfolgen, sonst funktionieren alle weiteren ReTranslate Aufrufe nicht.

Ups, zu langsam getippt :roll:

stOrM 8. Jan 2009 15:58

Re: GNUGetText Retranslate
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Alien_F
Die Fehlermeldung kommt bei mir auch, wenn ich zweimal hintereinander TranslateComponent aufrufe. Nach dem allerersten TranslateComponent sollten fortan nur noch ReTranslate Aufrufe stattfinden. Ich denk mal, du setzt firstTranslation nicht auf false.
Ein TranslateComponent muss auch als erstes erfolgen, sonst funktionieren alle weiteren ReTranslate Aufrufe nicht.

Ups, zu langsam getippt :roll:

Das hatte ich ja zuallerst gemacht nur dann passiert bei ReTranslate gar nichts... Also findet keine Erneute Übersetzung statt...

Ich häng mal das gesamte Debug File mit rein? Vielleicht hilfts ja


Mannnnnnnn! Problem gelöst!

FormOnCreate Old
Delphi-Quellcode:
  UseLanguage('de');
  TranslateComponent(self);
FormOnCreate New
Delphi-Quellcode:
  UseLanguage('de');
  TranslateComponent(lblInfo);
  TranslateComponent(btnPatch);
  TranslateComponent(mmLog);
  firstTranslation := false;
TImageOnLick
Delphi-Quellcode:
  UseLanguage('en');
  ReTranslateComponent(lblInfo);
  ReTranslateComponent(btnPatch);
  ReTranslateComponent(mmLog);
So gehts wunderbar :-)

Bbommel 8. Jan 2009 16:30

Re: GNUGetText Retranslate
 
Aber irgendwas ist da schon komisch. Denn jetzt rufst du ja für jedes einzelne Element deines Formulars ein Retranslate auf. Das geht natürlich, ist aber ja eigentlich nicht so ganz im Sinne des Erfinders. Eigentlich wundert es mich sogar, dass es funktioniert, denn:
Code:
RetranslateComponent() was called for a component with name lblInfo.
The retranslator is being executed.
Domain de: File does not exist, neither embedded or in file system: C:\Dokumente und Einstellungen\Admin\Desktop\Blub\Ie7_Acro_Patch\locale\en\LC_MESSAGES\de.mo
Domain de will attempt to use this file: C:\Dokumente und Einstellungen\Admin\Desktop\Blub\Ie7_Acro_Patch\locale\en\LC_MESSAGES\de.mo
Domain de failed to locate the file: C:\Dokumente und Einstellungen\Admin\Desktop\Blub\Ie7_Acro_Patch\locale\en\LC_MESSAGES\de.mo
.mo file is not open. Not translating "Dieser Patch behebt das bekannte Problem, dass sich der Internet Explorer 7 nicht nachträglich installieren läßt, wenn Sie Windows XP mit SP3 verwenden oder Windows XP SP2 und installiertem Acrobat Reader 9 "
.mo file is not open. Not translating "Tahoma"
Bei dir ist aus irgendeinem Grund die Domain verstellt, wenn du das Retranslate ausführst. In meinen Projekten ist die immer "default", die entsprechende default.mo wird dann von gnugettext benutzt. Bei dir ist diese Domain aber plötzlich "de", obwohl du wahrscheinlich auch nur eine "default.mo" haben wirst. Wieso diese Domain bei dir umgestellt ist, ist mir allerdings noch nicht ganz klar, ggf. kommt das ja durch die Ressourcestrings? Ist aber nur geraten. ;)

Naja, es funktioniert ja auch so bei dir, aber dennoch würde ich an deiner Stelle noch mal weitersuchen, denn deine Methode ist ja doch aufwendig und fehleranfälig, falls immer mehr und mehr Komponenten auf dem Formular hinzukommen...

Bis denn
Bommel

stOrM 8. Jan 2009 16:49

Re: GNUGetText Retranslate
 
Zitat:

Zitat von Bbommel
Aber irgendwas ist da schon komisch. Denn jetzt rufst du ja für jedes einzelne Element deines Formulars ein Retranslate auf. Das geht natürlich, ist aber ja eigentlich nicht so ganz im Sinne des Erfinders. Eigentlich wundert es mich sogar, dass es funktioniert, denn:
Code:
RetranslateComponent() was called for a component with name lblInfo.
The retranslator is being executed.
Domain de: File does not exist, neither embedded or in file system: C:\Dokumente und Einstellungen\Admin\Desktop\Blub\Ie7_Acro_Patch\locale\en\LC_MESSAGES\de.mo
Domain de will attempt to use this file: C:\Dokumente und Einstellungen\Admin\Desktop\Blub\Ie7_Acro_Patch\locale\en\LC_MESSAGES\de.mo
Domain de failed to locate the file: C:\Dokumente und Einstellungen\Admin\Desktop\Blub\Ie7_Acro_Patch\locale\en\LC_MESSAGES\de.mo
.mo file is not open. Not translating "Dieser Patch behebt das bekannte Problem, dass sich der Internet Explorer 7 nicht nachträglich installieren läßt, wenn Sie Windows XP mit SP3 verwenden oder Windows XP SP2 und installiertem Acrobat Reader 9 "
.mo file is not open. Not translating "Tahoma"
Bei dir ist aus irgendeinem Grund die Domain verstellt, wenn du das Retranslate ausführst. In meinen Projekten ist die immer "default", die entsprechende default.mo wird dann von gnugettext benutzt. Bei dir ist diese Domain aber plötzlich "de", obwohl du wahrscheinlich auch nur eine "default.mo" haben wirst. Wieso diese Domain bei dir umgestellt ist, ist mir allerdings noch nicht ganz klar, ggf. kommt das ja durch die Ressourcestrings? Ist aber nur geraten. ;)

Naja, es funktioniert ja auch so bei dir, aber dennoch würde ich an deiner Stelle noch mal weitersuchen, denn deine Methode ist ja doch aufwendig und fehleranfälig, falls immer mehr und mehr Komponenten auf dem Formular hinzukommen...

Bis denn
Bommel

Jo würd mich auch mal interessieren was das Problem ist und wieso das nun so klappt, bleibt mir im Moment ein Rätsel abgesehen vom Aufwand mir wär (self) auch wesentlich lieber!

Gruß
Marc

Bbommel 8. Jan 2009 17:13

Re: GNUGetText Retranslate
 
Zitat:

Zitat von stOrM
Jo würd mich auch mal interessieren was das Problem ist und wieso das nun so klappt, bleibt mir im Moment ein Rätsel abgesehen vom Aufwand mir wär (self) auch wesentlich lieber!

Hast du denn mal einfach probiert, ob die alte Lösung funktioniert, wenn du in den beiden Sprachverzeichnissen die defualt.mo auch nach de.mo (und vielleicht sicherheitshalber auch mal nach en.mo) kopierst? Wäre einfach mal spannend zu wissen, ob es daran liegt.

Bis denn
Bommel


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Seite 1 von 2  1 2      

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