![]() |
Programm mehrsprachig
Hallo,
ich habe mir zwei Resource-Dateien (DEU und ENG) für mein Programm erzeugt mittels des Ressourcen-DLL-Experten und habe dann am Ende im dem Ordner wo sich da Programm befindet jetzt noch zwei neue Dateien: Programm.DEU und Programm.ENG. Jetzt möchte ich z.B. aus der Registry an einer bestimmten Stelle aus lesen, welche Sprache genommen werden soll. Wie kann ich nun bei Programmstart eine bestimmte Resourcen-Datei laden? Hab schon überall gesucht, aber dazu irgendwie nichts gefunden. Weiss da jemand einen Rat? Grüsse |
Re: Programm mehrsprachig
Zitat:
|
Re: Programm mehrsprachig
im $(Delphi)\Demos\ verzeichnis gibts ein projekt das genau DAS macht was du auch machen möchtest, vllt solltest dir des mal anschauen
hab den genauen pfad grad nicht im kopf (hab hier auch kein delphi zum selberkucken). es war son texteditor - dem wordpad ähnlich |
Re: Programm mehrsprachig
Statt mit Ressourcen DLL's würd ich die Übersetzung mit GNU Gettext machen, dafür gibt es sogar ein Delphi Toolkit:
![]() Damit kannst Du auch zur Laufzeit die Sprache der Anwendung wechseln. Gruß, Marcel |
Re: Programm mehrsprachig
Das hab ich auch schon mal kurz probiert, aber die String, die der Resource-Dll-Experte in die Datei geschrieben hat, waren aber nicht in der Datei, die von GNU Gettext erzeugt wurde. Wie komme ich von GNU Gettext an diese dran?
|
Re: Programm mehrsprachig
Zitat:
GNU Gettext hat nichts mit dem Resource-Dll-Experten zu tun, am besten alle Ressourcen-Konnstanten in eine Unit packen und mit GNU Gettext übersetzen. Eine Mischung von ITE und GNU Gettext halte ich nicht für sinnvoll. Hier ein Beispiel für eine Ressourcen-Unit:
Delphi-Quellcode:
Die Anleitung gibt hierfür ein paar gute Beispiele.
unit MyResources;
interface resourcestring MSG_KONSTANTE1 = 'Meine erste zu übersetzende Konstante'; MSG_KONSTANTE2 = 'Meine zweite Konstante'; implementation end. Gruß, Marcel |
Re: Programm mehrsprachig
das hab ich soweit auch schon begriffen. Aber dem resource-dll-experte werden doch auch solche Fehlermeldung rausgeholt, und die würde dann die doch trotzdem in deutsch angezeigt bekommen, auch wenn ich mit gnu gettext die Sprache auch englisch umschalte, oder irre ich mich da jetzt völlig? Und diese ganzen Meldungen hätte ich halt auch ganz gerne in englisch.
Es gibt ja z.B. auch die TSiLang-Componente, damit bekomme ich auch solche Meldungen, nur eben, dass die Komponente etwas kostet und ich gerne etwas kostenloses hätte. |
Re: Programm mehrsprachig
Zitat:
![]() Diese werden dann in die Projektdatei eingebunden, z.b. so:
Delphi-Quellcode:
Es muss sich im Verzeichnis <Anwendung>\locale\en\ die Datei delphi7.mo mit den englischen Runtime Meldungen und im Verzeichnis <Anwendung>\locale\de\ die Datei delphi7.mo mit den deutschen Runtime Meldungen befinden. GNU Gettext sorgt dafür das je nach gewählter Sprache die passenden Meldungen angezeigt werden.
program test;
uses Forms, gnugettext, MainFrm in 'MainFrm.pas' {MainForm}; {$R *.res} AddDomainForResourceString('delphi7'); Application.Initialize; Application.Title = 'Test'; Application.CreateForm(TMainForm, MainForm); Application.Run; end. Gruß, Marcel |
Re: Programm mehrsprachig
hätte dann noch zwei Fragen.
erzeugt wird ja mit gnu gettext immer die default.po - Datei. Kann ich die auch umbenennen in z.B. english.po? Ich hab es versucht und dann mit AddDomainForResourceString('english'); aber dann wird meine Oberfläche nicht mehr in englisch angezeigt, wenn ich ihm dann hingegen wieder die default gebe, wird wieder alles in Englisch angezeigt. Das zweite ist, dass ich ihm doch auch sagen kann, dass er bestimmte sachen nicht übersetzten soll. Ich hab dies mit TP_GlobalIgnoreClass (TDocViewer) versucht und das ganze auch dort eingebunden, wie auch das AddDomainForResourceString steht. Aber dann bekomme ich einen Fehler, dass dies ein undefinierter Bezeichner ist. Laut Dokumentation soll das doch genau an diese Stelle? |
Re: Programm mehrsprachig
Zitat:
Zitat:
Welche Datei für die Oberfläche verwendet werden soll bestimmst Du mit der Funktion textdomain, z.b. so wenn Du Deine Übersetzungsdatei formulare.mo genannt hast:
Delphi-Quellcode:
Alternativ kannst Du den Aufruf von TranslateComponent(self) auch in TranslateComponent(self,'formulare') ändern.
begin
{ Translation Domain für Formulare } textdomain('formulare'); end; Zitat:
Du kannst natürlich in der Unit, wo Du TDocViewer verwendest das OnCreate Ereignis abändern:
Delphi-Quellcode:
procedure TMyForm.FormCreate(Sender: TObject);
begin TP_Ignore(self,'MyDocViewer'); TranslateComponent(self); end; Gruß, Marcel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 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 by Thomas Breitkreuz