![]() |
GNU Gettext - AV beim Übersetzen
Ich benutze das aktuelle GNU Gettext von
![]() Problem ist jetzt, dass ich eine AV bekomme, sobald ich das Programm starte... Ich habe schon alles Versucht, also die Überstzung an die Exe anzuhängen oder die in den Ordner zu kopieren... hat nichts gebracht ... [edit]Ich habe die gnugettext.pas in der uses des Projects und in der uses der Form... Und dann rufe ich im Create auch nur "TranslateComponents(self)" auf...[/edit] |
Re: GNU Gettext - AV beim Übersetzen
Welche Komponenten benutzt du in deinem Projekt?
Bei manchen Komponenten gibts es Probleme und die müssen dann von der Übersetzung ausgeschlossen werden!! So erzeugt das TMS AdvGrid z.B. intern beim Start einige unsichtbare Controls (z.B. ein TRichEdit) die aber zur Erstellungszeit keinen Parent haben was zu Problemen mit dxGetText führt. dxGetText hat dazu extra Routinen mit denen man diese Controls ausschliessen kann (TP_GlobalIgnore bzw. TP_GlobaIgnoreClass) Versuch doch mal festzustellen, WELCHE Controls die Probleme verursachen indem du ein Projekt mit dxGetText Schrittweise mit den Komponenten "ausrüstest" die du in deinem Problemprojekt benutzt. Ciao, Ralf |
Re: GNU Gettext - AV beim Übersetzen
Ui...
Also ToolBar ( + Buttons/Trenner), TreeView, CheckListBox, Memo, Edit, CheckBox, BitButtons und ein Mainmenu... Wobei dieser Fehler in der Unit auftritt, wo er sl.Assgin(s) aufruft... Ich weiß gerade nicht wo er dass macht... [edit]Ah... Ich habs: In der Funktion "TranslateStrings"
Delphi-Quellcode:
[/edit]
procedure TGnuGettextInstance.TranslateStrings(sl: TStrings;const TextDomain:string);
var line: string; i: integer; s:TStringList; begin if sl.Count > 0 then begin sl.BeginUpdate; try s:=TStringList.Create; try s.Assign (sl); for i:=0 to s.Count-1 do begin line:=s.Strings[i]; if line<>'' then s.Strings[i]:=dgettext(TextDomain,line); end; sl.Assign(s); // <!--- Hier kommt die AV... (Wahrscheinlich ist sl nil?) finally FreeAndNil (s); end; finally sl.EndUpdate; end; end; end; |
Re: GNU Gettext - AV beim Übersetzen
Tritt der Fehler bei einem leeren Projekt auf? (wahrscheinlich nicht :) )
Danach füge dem leeren Projekt einfach mal schrittweise die benutzen Komponenten hinzu. Starte zwischendurch das Projekt und kontrolliere ob der AV auftritt. Irgendwann wirst du die Komponente bei der dieser Fehler auftritt identifiziert haben. Laut deiner Beschreibung ist es wohl eine die als Property eine Stringlist enthält, ich tippe jetzt einfach mal auf das Memo. Bleiben wir bei dem Beispiel Memo: Um die Stringlist von der automatischen Übersetzung durch dxGetText auszuschliessen kannst du sie von dxGetText einfach ignorieren lassen. Füge dazu vor dem TranslateComponent() Aufruf noch diese Anweisung hinzu:
Delphi-Quellcode:
(Ob die Routine wirklich "TP_IgnoreClass" heisst weiss ich im Moment nicht mehr im Kopf und ich habe im Moment hier kein dxGetText installiert, schau bitte in der Doku zu dxGetText nach, es gibt mehrere "Ignore" Routinen für unterschiedliche Zwecke)
TP_IgnoreClass(TMemoStrings);
Ansonsten musst du noch ein wenig rumprobieren aber meistens handelt es sich um solche (Komponenten-)internen Stringlisten die Probleme machen. Für solche SAchen ist dxGetText ja auh eigentlich nicht gedacht, da sie ja selten statische Texte enthalten die lokalisiert werden müssen. Hoffe das hilft ein wenig, Ralf |
Re: GNU Gettext - AV beim Übersetzen
Danke... Die waren es ;) Einmal ignorieren und schon funktionierts ;) Danke!
Nur übersetzt er es jetzt nicht ... Ich habe eine Deutsche Oberfläche und englische mo als deutsch deklariert (um nicht um zu stellen)... Habe auch die Übersetzungen eingebettet nur übersetzt er nicht :( |
Re: GNU Gettext - AV beim Übersetzen
Hallo,
ich verwende dxGetText seit Jahren ohne Probleme. Dabei gehe ich so vor: Ich erstelle die Oberfläche komplett in Englisch (habe auch eine englische delphi-Version. Daher sind auch alle internen Meldungen bzw. Resourcen in Englisch. Dann übersetze ich die Resourcen mit POEdit in die gewünschte(n) Sprache(n). Im Programm wird jeweils in OnCreate der folgende Code ausgeführt:
Delphi-Quellcode:
Die Variable "MeineGewuenschteSprache" bezeichnet dabei die sprache auf die umgeschaltet werden soll. Verwendet man "UseLanguage" nicht so richtet sich dxGetText nach der Sprache die auf dem aktuellen System Default ist. Auf einem französischen Windows würde dxGetText also versuchen nach Französisch umzuschalten.
UseLanguage(MeineGewuenschteSprache);
TranslateComponent(Self) Findet dxGetText keine Übersetzungen im Verzsichnis "<APPLICATIONSVERZEICHNIS>\locale\<SPRACHE>\LC_MES SAGES" so tut es eigentlich nichts und es findet keine Übersetzung statt. In meinem Fall würde also alles in Englisch dargestellt. In welchen Verzeichnissen hast du denn die jeweiligen DEFAULT.MO Dateien für die unterschiedlichen Sprachen gespeichert? Wie gesagt: sie gehören nach: "<APPLICATIONSVERZEICHNIS>\locale\<SPRACHE>\LC_MES SAGES". Sprache sollte dabei der 2-Buchstaben ISO code der Sprache sein, also z.B. "de" für deutsch oder "fr" für Französisch. Falls nötig kann man das auch noch genauer machen: z.B. "de_AT" für Östereich. Ciao, Ralf |
Re: GNU Gettext - AV beim Übersetzen
Zitat:
|
Re: GNU Gettext - AV beim Übersetzen
Aber genau dass ist es ja... Ich habe eine englische Sprachdatei, und um Programmierarbeit zu sparen, habe ich die als deutsch deklariert.
Diese habe ich dann in den Ordner \locale\de_DE\LC_Messages kopiert... Keine Reaktion... Dann habe ich rechts auf die exe geklickt und "Embed Translations" (o.s.ä.) aufgerufen... Dabei dann beide deutsche Dateien angehängt und ausgeführt => Wieder nichts... Kann es ggf. daran liegen, dass ich die Klasse TStrings (wegen der Memo) ignoriert habe? |
Re: GNU Gettext - AV beim Übersetzen
Zitat:
Des weiteren muss die automatisch geladene Übersetzungsdatei unterhalb von LC_Messages default.mo heissen. Weitere Uebersetzungsdateien bekommst Du mit dem Befehl
Delphi-Quellcode:
dazu (hier fuer delphi.mo)
AddDomainForResourceString ('delphi');
//Edit Beispiele für zu ignorierende Klassen
Delphi-Quellcode:
TP_GlobalIgnoreClassProperty(TAction,'Category');
TP_GlobalIgnoreClassProperty(TControl,'HelpKeyword'); TP_GlobalIgnoreClassProperty(TNotebook,'Pages'); TP_GlobalIgnoreClass(TFont); TP_GlobalIgnoreClass(TPrintFormComboBox); TP_GlobalIgnoreClass(TFontComboBox); TP_GlobalIgnoreClass (TWebBrowser); TP_GlobalIgnoreClassProperty(TDBComboBox,'DataField'); TP_GlobalIgnoreClassProperty(TDBCheckBox,'DataField'); TP_GlobalIgnoreClassProperty(TDBEdit,'DataField'); TP_GlobalIgnoreClassProperty(TDBImage,'DataField'); TP_GlobalIgnoreClassProperty(TDBListBox,'DataField'); TP_GlobalIgnoreClassProperty(TDBLookupControl,'DataField'); TP_GlobalIgnoreClassProperty(TDBLookupControl,'KeyField'); TP_GlobalIgnoreClassProperty(TDBLookupControl,'ListField'); TP_GlobalIgnoreClassProperty(TDBMemo,'DataField'); TP_GlobalIgnoreClassProperty(TDBRadioGroup,'DataField'); TP_GlobalIgnoreClassProperty(TDBRichEdit,'DataField'); TP_GlobalIgnoreClassProperty(TDBText,'DataField'); TP_GlobalIgnoreClassProperty(TTdbStringField,'FieldName'); TP_GlobalIgnoreClassProperty(TWideStringField,'FieldName'); |
Re: GNU Gettext - AV beim Übersetzen
1. Heißt die datei default.mo.
2. Wie ist das bei eigebundenen Übersetzungen? 3. Hat das ignorieren der Eigenschaft "Lines" bei TMemo nichts "neues" gebracht... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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