Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi gnugettext: keine Übersetzung falls vorher caption = '' (https://www.delphipraxis.net/93862-gnugettext-keine-uebersetzung-falls-vorher-caption-%3D.html)

berens 12. Jun 2007 14:01


gnugettext: keine Übersetzung falls vorher caption = ''
 
Hallo mal wieder!

Die Komponenten wollen sich nicht so recht nachträglich übersetzen lassen wenn übersetzbare Felder vor TranslateComponent leer sind.

Ich benutze Delphi 2007 und die aktuellste Version von dxgettext. Die .po Dateien sind alle da wo sie hingehören und wurden auch alle komplett und ordnungsgemäß Übersetzt und nach .mo kompiliert.

Ich habe eine TComponentlist, in der alle zu Übersetzenden Komponenten drinnen sind, die in eine for-i-Schleife mit gnugettext.RetranslateComponent(FComponentList[i]); erneut übersetzt.

Mit einem Trick funktioniert das auch, aber den will ich nicht verwenden, da der Aufwand dann fast wieder in keinem Nutzen steht.

Problem: Wenn die Komponenten mit gnugettext.RetranslateComponent(Self); in ihrem constructor Create übersetzt werden bevor alle übersetzbaren Eigenschaften wie Caption, Items, Strings (ja nach Komponente), funktioniert die Übersetzung nicht.

Funktioniert NICHT:
inherited Create --> gnugettext.TranslateComponent(Self);
--> Caption := 'Test' --> ... --> gnugettext.RetranslateComponent(Self);

Funktioniert:
inherited Create --> Caption := 'Test'
--> gnugettext.TranslateComponent(Self); --> ... --> gnugettext.RetranslateComponent(Self);

- Ich kann bei meinen eigenen Komponenten keinen "Standardwert" setzen und die dann mit gnugettext.TranslateComponent(Self) übersetzen, weil sonst immer bei RetranslateComponent(Self) die Übersetzung des Standardwertes kommt, und nicht die, die ich eigentlich in Caption drinnen haben will.

Achja: alle Komponenten werden zur Laufzeit erzeugt.

Wie macht Ihr das mit gnugettext? Habt Ihr auch das Problem oder kennt es zumindest?

sh17 21. Jun 2007 22:04

Re: gnugettext: keine Übersetzung falls vorher caption = ''
 
Wenn Du alle Komponenten zur Laufzeit erstellst, mach doch einfach Caption := _('Test') und lass das ganze ReTranslateZeug

Sven

berens 21. Jun 2007 22:11

Re: gnugettext: keine Übersetzung falls vorher caption = ''
 
Dann kann der Benutzer aber nicht zur Laufzeit die Sprache ändern... Aber wenn's nicht anders geht mache ich das so. thx.

sh17 21. Jun 2007 22:16

Re: gnugettext: keine Übersetzung falls vorher caption = ''
 
Eigentlich sollten

gnugettext.TranslateComponent(Self);
gnugettext.RetranslateComponent(Self);

nicht in jedem Komponenten-Create aufgerufen werden.

Erzeuge doch mal alle Komponenten im Form.OnCreate und rufe am Ende TranslateComponent(Self) auf, wobei self das Formular ist.

RetranslateComponent geht intern einfach eine Liste durch. Schau dir den Quelltext von gnugettext mal an, dann weisst Du wie es tickt.

berens 21. Jun 2007 22:46

Re: gnugettext: keine Übersetzung falls vorher caption = ''
 
Hm, das ist natürliche eine gute Idee das beim ONCreate des Forms zu machen und nicht direkt beim Create, denn beim OnCreate ist das Form mit allen Componenten ja schon komplett erzeugt.

Werde ich bei Gelegenheit sofort ausprobieren, danke!


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