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 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

stOrM 8. Jan 2009 17:16

Re: GNUGetText Retranslate
 
Zitat:

Zitat von Bbommel
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

Ich werds nachher nochmal alles durchgehen also sämtliche Möglichkeiten wenns dich interessiert post ich heut oder morgen mal das Ergebnis

Die Muhkuh 8. Jan 2009 17:17

Re: GNUGetText Retranslate
 
Bin auch interessiert, da ich das gleiche Problem hab *g*

Allerdings werden bei "Self" manche übersetzt und manche nicht.

stOrM 8. Jan 2009 17:35

Re: GNUGetText Retranslate
 
Zitat:

Zitat von Die Muhkuh
Bin auch interessiert, da ich das gleiche Problem hab *g*

Allerdings werden bei "Self" manche übersetzt und manche nicht.

Sobald ich näheres weiss poste ichs hier rein!

Gruß
Marc

stOrM 8. Jan 2009 20:22

Re: GNUGetText Retranslate
 
So nun steh ich mal richtig auf dem Schlauch!
Folgendes, meine Anwendung wurde auf einem anderen Rechner zu Testzwecken nochmals neu kompiliert, jedoch diesmal wieder wie ursprünglich Gedacht mit self Anstelle des von mir eingebauten ReTranslateComponent(self); was soll ich sagen jetzt wirds lustig: Auf dem anderen Rechner kompiliert ausgeführt und es funktionierte wie gewollt. Dann hab ich dieses Kompilat nochmals neu erstellt und zwar wieder auf meinem Rechner (immer noch mit Self!) und nun gehts auch bei mir ohne Probleme!

Das witzige ist das am Quellcode selber nichts verändert wurde, ausser halt das wir von TranslateComponent(ComponentName) und ReTranslateComponent(ComponentName) nur auf TranslateComponent(self)sowie ReTranslateComponent(self) was ich ja am Anfang des Post bereits hatte und was nicht! funktionierte bei mir...

Ich hab keine Erklärung dafür

Bbommel 9. Jan 2009 08:37

Re: GNUGetText Retranslate
 
Moin zusammen,

also da bin ich dann so langsam mit mehr oder minder klugen Kommentaren auch am Ende, außer "ihr habt bestimmt noch irgendwas anderes geändert". :zwinker:

@Muhkuh: Wenn dein Problem immer noch besteht, könntest du auch mal in der Yahoogroup von dxgettext nachfragen. Ich lese da seit einigen Monaten mit und könnte mich jetzt kaum an eine Frage erinnern, um die sich Lars - der Autor von dxgettext - nicht recht schnell gekümmert hätte (oder auch andere Mitleser, aber meistens war es dann doch Lars selbst).

Bis denn
Bommel

stOrM 10. Jan 2009 09:59

Re: GNUGetText Retranslate
 
Zitat:

Zitat von Bbommel
Moin zusammen,

also da bin ich dann so langsam mit mehr oder minder klugen Kommentaren auch am Ende, außer "ihr habt bestimmt noch irgendwas anderes geändert". :zwinker:

@Muhkuh: Wenn dein Problem immer noch besteht, könntest du auch mal in der Yahoogroup von dxgettext nachfragen. Ich lese da seit einigen Monaten mit und könnte mich jetzt kaum an eine Frage erinnern, um die sich Lars - der Autor von dxgettext - nicht recht schnell gekümmert hätte (oder auch andere Mitleser, aber meistens war es dann doch Lars selbst).

Bis denn
Bommel

Hehe ne im Ernst! Nix verändert nur auf nem anderen Rechner kompiliert und dann wieder auf meinem...!

Gruß
Marc


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