AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GNUGetText Retranslate

Ein Thema von stOrM · begonnen am 8. Jan 2009 · letzter Beitrag vom 10. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#1

GNUGetText Retranslate

  Alt 8. Jan 2009, 15:44
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!
  Mit Zitat antworten Zitat
Alien_F

Registriert seit: 31. Jan 2008
21 Beiträge
 
Delphi 2006 Professional
 
#2

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 16:19
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 )?
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 16:31
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?
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#4

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 16:46
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
{ $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
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 16:48
Zitat von Bbommel:
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
{ $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
  Mit Zitat antworten Zitat
Alien_F

Registriert seit: 31. Jan 2008
21 Beiträge
 
Delphi 2006 Professional
 
#6

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 16:50
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
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 16:58
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
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
Angehängte Dateien
Dateityp: txt dbg_199.txt (13,0 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#8

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 17:30
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
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 17:49
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
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#10

Re: GNUGetText Retranslate

  Alt 8. Jan 2009, 18:13
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:36 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