ich hoffe ich habe das richtige Forum ausgewählt.
Entsprechend der Dokumentationen und dem Lazarus Beispielprogramm habe ich meine Anwendung auf Multilingual umgestellt.
Das funktioniert im Grunde erstmal gut.
Ich habe PO-Dateien für deutsch und englisch und finde dort auch alle resourcestrings und Captions der Labels auf den Formularen wieder.
Komponenten, die nicht automatisch übersetzt werden, habe ich im Quellcode über die procedure UpdateTranslation(ALang: String); wie im
Beispiel benutzt mit resourcestrings versehen, Beispiel SpookToolbar.
Hier nun die Beschreibung meines Problems:
Mein Aufbau der Forms:
TMyForm - Enthält die Prozeduren für die Übersetzung wie im Beispielprogramm.
TMyBasicWizard = class(TMyForm): Eine Basisklasse für Assistenten, in denen ich die Logik für das vor und zurückschalten mittels eines PageControls und Buttons setzte und den ein oder anderen Parameter setzen kann, um Fehlerseite oder Erfolgseite darzustellen.
Dort habe ich die resourcestrings im implementation teil eingesetzt, um die Buttons im Quellcode zu verändern zu können.
Z.B. wird aus Weiter --> Fertigstellen und aus Abbrechen --> Schließen, je nach Situation.
Deshalb besetze ich die Captions in der UpdateTranslation Prozedur vor und später ändere ich diese mit weiteren resourcestrings
Code: Alles auswählen
implementation
{$R *.lfm}
// Hier sind die gesetzten resourcestrings:
resourcestring
Tag_Next = '&Weiter';
Tag_Finish = '&Fertigstellen';
Tag_Close = '&Beenden';
Tag_Cancel = '&Abbrechen';
Tag_ReadyTitle = 'Vorbereitungen abgeschlossen';
Tag_ReadyLabel = 'Klicken Sie auf &Fertigstellen,';
Tag_ErrorTitle = 'Es ist ein Fehler aufgetreten';
Tag_SuccessTitle = 'Assistent erfolgreich ausgeführt';
....
// Hier initialisiere ich Captions der Buttons und auch einiger Labels:
procedure TMyBasicWizard.UpdateTranslation(ALang: String);
begin
inherited UpdateTranslation(ALang);
NextButton.Caption := Tag_Next;
CancelButton.Caption := Tag_Cancel;
ReadySheetTitle.Caption := Tag_ReadyTitle;
ReadyLabel.Caption := Tag_ReadyLabel;
ErrorSheetTitle.Caption := Tag_ErrorTitle;
SuccessSheetTitle.Caption := Tag_SuccessTitle;
end;
...
// Hier ändere ich dann entsprechend der Navigation die Captions der Buttons:
procedure TMyBasicWizard.UpdateNavigationControls;
begin
with PageControl do
begin
...
// Next Button
if (ActivePage.Name = Tag_ReadySheet) or
(ActivePage.Name = Tag_ErrorSheet) or
(ActivePage.Name = Tag_SuccessSheet)
then NextButton.Caption := Tag_Finish
else NextButton.Caption := Tag_Next;
...
// Cancel Button
if (ActivePage.Name = Tag_ErrorSheet) or
(ActivePage.Name = Tag_SuccessSheet)
then CancelButton.Caption := Tag_Close
else CancelButton.Caption := Tag_Cancel;
end;
end;
In meiner Andwendung leite ich dann entweder von TMyForm ab, das funktioniert gut und die Übersetzungen klappen.
In der Anwendung leite ich auch ein Formular von TMyBasicWizard ab, um einen Assistenten auszuarbeiten.
Die Captions des Formulars erscheinen auch in der PO-Datei, die ich dann auch übersetzt habe.
In TMyBAsicWizard hat das PageControls bereits einige Sheets, auf denen z.B. TitleLabel enthalten sind, die natürlich nur Dummy Captions haben.
Diese werden dann im vererbten Formular überschrieben und genau diese Captions werden nicht übersetzt.
Beispiel:
In TMyBasicWizard: StartSheetTitle.Caption = StartSheetTitle
In TMyProjectWizard (vom Typ TMyBasicWizard): StartSheetTitle.Caption = Sie möchten ein neues Projekt anlegen?
Wie gesagt, die Caption ist in der PO-Datei vorhanden und auch von mir in der *en.po übersetzt, aber die Übersetzung wird im Programm nicht vorgenommen,
obwohl der Rest komplett übersetzt wurde. Z.b Labels, die ich erst in TMyProjectWizard eingefügt habe, werden übersetzt.
Auch die Navigationsbuttons des Assistenten werden nicht übersetzt. Siehe oberen Code-Aussschnitt.
Hätte da jemand eine Idee für mich?
Edit 1: Ich habe gerade gesehen, die PO-Datei enthält nicht die Captions aus TMyBasicWizard.
Weiterhin ist mir aufgefallen, dass die .lfm Dateien die Umstellung von Object auf Inherited vergessen, bei allen Formularen. Im Beispielprogramm war angegeben, dass man das inherited setzen soll. Ob sich dies auf das Übersetzen, oder sammeln der Captions auswirkt, kann ich aber nicht sagen.
Edit 2: Nur mal eine kurze Rückmeldung...Das Problem ist noch nicht behoben
- LCLTranslator hatte ich im Package zwar eingetragen, ist aber von alleine wieder rausgeflogen, also nicht drin.
Die LFM habe ich geprüft, die entsprechende Caption taucht nicht auf.
@kupferstecher: Danke, dass wusste ich bereits und versuche auch immer am Form rumzuspielen (total blödes verhalten)
Gruß
Antonio