Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm mehrsprachig (https://www.delphipraxis.net/46134-programm-mehrsprachig.html)

Susanne 19. Mai 2005 11:08


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

MathiasSimmack 19. Mai 2005 11:14

Re: Programm mehrsprachig
 
Zitat:

Zitat von Susanne
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?

So, IMHO, gar nicht. Die Ressourcen-DLLs haben ja den Sinn, dass das Programm automatisch die eingestellte Systemsprache benutzt (deutsches Windows -> .DE-Resourcendatei), bzw. dass es die Standardsprache verwendet, wenn keine DLL für eine bestimmte Sprache vorhanden ist.

barf00s 19. Mai 2005 11:16

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

Marcel Gascoyne 19. Mai 2005 11:31

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: GNU Gettext für Delphi

Damit kannst Du auch zur Laufzeit die Sprache der Anwendung wechseln.

Gruß,
Marcel

Susanne 19. Mai 2005 12:26

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?

Marcel Gascoyne 19. Mai 2005 12:51

Re: Programm mehrsprachig
 
Zitat:

Zitat von Susanne
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?

GNU Gettext erzeugt aus den Quellcodes der Anwendung eine .po Datei, die mit einem Unicode Editor oder einem Tool wie z.b. poEdit bearbeitet werden kann. Hierbei werden die Strings aus den Formulardateien sowie Ressorcenkonstanten (Abschnitt resourcestring) aus den .pas Dateien in ein Template extrahiert.

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:
unit MyResources;

interface

resourcestring
  MSG_KONSTANTE1 = 'Meine erste zu übersetzende Konstante';
  MSG_KONSTANTE2 = 'Meine zweite Konstante';

implementation

end.
Die Anleitung gibt hierfür ein paar gute Beispiele.

Gruß,
Marcel

Susanne 19. Mai 2005 13:15

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.

Marcel Gascoyne 19. Mai 2005 13:41

Re: Programm mehrsprachig
 
Zitat:

Zitat von Susanne
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.

Meinst Du die Runtime Fehlermeldungen von Delphi die auf deutsch sind ? Auf der GNU Gettext für Delphi Homepage kann man die Übersetzungen der Delphi Runtime Libs runterladen.

Diese werden dann in die Projektdatei eingebunden, z.b. so:

Delphi-Quellcode:
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.
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.

Gruß,
Marcel

Susanne 20. Mai 2005 10:04

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?

Marcel Gascoyne 20. Mai 2005 10:49

Re: Programm mehrsprachig
 
Zitat:

Zitat von Susanne
erzeugt wird ja mit gnu gettext immer die default.po - Datei. Kann ich die auch umbenennen in z.B. english.po?

Klar, das ist kein Problem.

Zitat:

Zitat von Susanne
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.

Mit AddDomainForResourceString werden nur Domains für Ressourcenstrings hinzugefügt, z.b. eine Datei mit Deinen Strings in der Datei default.mo und die Delphi Runtime Strings in delphi7.mo.

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:
begin
  { Translation Domain für Formulare }
  textdomain('formulare');
end;
Alternativ kannst Du den Aufruf von TranslateComponent(self) auch in TranslateComponent(self,'formulare') ändern.


Zitat:

Zitat von Susanne
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?

Der Parameter für TP_GlobalIgnoreClass ist eine Klasse, daher muß diese Klasse auch bekannt sein. Wenn Dein TDocViewer dort nicht bekannt ist kann es nicht funktionieren, z.b. wenn die Komponente nur in bestimmten Units "geused" wird.

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 19:54 Uhr.
Seite 1 von 2  1 2      

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