Guten Abend erstmal.
Also ich bin noch ein blutiger Anfänger auf .net und c++. Ich habe in meinem ersten Programm eine Klasse gebaut, die die CurrentCulture ausliesst, mit den von mir unterstützten Sprachen vergleicht und dementsprechend eben eine Standardsprache setzt oder eben die gewünschte Sprache verwendet. Später kann dann mittels Methode die Sprache einfach umgestellt werden.
Ich muss noch hinzufügen, dass ich mit der Visual Studio Express Edition arbeite und, da ich zuerst noch ohne Forms gearbeitet habe, ich eben keine .resx Dateien erstellt habe, sondern eben .txt mit resgen in .resource und diese dann zu Satelliten compiliert habe lassen.
Nun zu meinen Fragen:
1. Ich habe nun zwei .dll Dateien (en und de). en soll std sein und möglichst schon in der .exe enthalten sein. Aber ich weiss nicht, wie ich das bewerkstelligen soll, denn mit "einbetten" in den Projekt-Eigenschaften geht das anscheinend nicht.
2. Ich hole mir mit der GetString Methode die Strings aus der entsprechend eingestellten .dll und stelle sie dar. Problem: Bis die Lokalisierung im laufenden Programm initialisiert ist, bin ich eben ohne unterwegs und somit mit evtl. auftretenden Fehlern, Excepions, Meldungen in hardgecodeter Form - das ist unschön. Gibt es einen Weg - so wie bei den Forms mit den .resx Dateien, eben die Std-Sprache auch gleich simpel mit in die .exe zu bringen, aber dennoch nicht so hardgecoded - aber eben ohne dann GetString von Anfang an benutzen zu müssen? (Es ist eben einiges zu initialisieren und ich versuche ja schon, einen möglichst sicheren Weg der Initialisierung des Programms zu gehen).
3. Was ist sinnvoller - .resource oder .resx (in Anbetracht der Express Edition, die ja keine .resx Resourcen erstellen kann, mal von den Forms abgesehen)?
4. Ich habe Lokalisierung.h (und .cpp) und z.B. Ausnahmen.h (und .cpp), dann noch main und eben eine ApplicationContext.h (und .cpp). Die ganze Initialisierung läuft quasi im ApplCon Konstruktor ab, später würden dann dort auch noch mehrere Forms gestartet werden. Nun ist aber die instantiierte Klasse Sprache^ nicht in den anderen Headern verwendbar. Das ist ja wohl ein ziemlich grundsätzliches Problem (strukturell) und ich hoffe, hier kann mir jemand auch ganz grundsätzlich erklären, wie das in c++ bzw. .net sinnvoller struktuiert werden kann?
Ich weiss, das ist ein Haufen Text und ich hoffe, ich habe die Probleme verständlich darstellen können. Frage 4 wäre eigentlich ein eigenes Thema für sich (wohl auch eher c++ und nicht .net, aber zumindest ist es in .net noch etwas schwieriger, wenn man "extern" verwenden will - die managed Types mögen das ja nicht wirklich).
Ich hoffe, jemand kann helfen.
lg Macan
Also ich bin noch ein blutiger Anfänger auf .net und c++. Ich habe in meinem ersten Programm eine Klasse gebaut, die die CurrentCulture ausliesst, mit den von mir unterstützten Sprachen vergleicht und dementsprechend eben eine Standardsprache setzt oder eben die gewünschte Sprache verwendet. Später kann dann mittels Methode die Sprache einfach umgestellt werden.
Ich muss noch hinzufügen, dass ich mit der Visual Studio Express Edition arbeite und, da ich zuerst noch ohne Forms gearbeitet habe, ich eben keine .resx Dateien erstellt habe, sondern eben .txt mit resgen in .resource und diese dann zu Satelliten compiliert habe lassen.
Nun zu meinen Fragen:
1. Ich habe nun zwei .dll Dateien (en und de). en soll std sein und möglichst schon in der .exe enthalten sein. Aber ich weiss nicht, wie ich das bewerkstelligen soll, denn mit "einbetten" in den Projekt-Eigenschaften geht das anscheinend nicht.
2. Ich hole mir mit der GetString Methode die Strings aus der entsprechend eingestellten .dll und stelle sie dar. Problem: Bis die Lokalisierung im laufenden Programm initialisiert ist, bin ich eben ohne unterwegs und somit mit evtl. auftretenden Fehlern, Excepions, Meldungen in hardgecodeter Form - das ist unschön. Gibt es einen Weg - so wie bei den Forms mit den .resx Dateien, eben die Std-Sprache auch gleich simpel mit in die .exe zu bringen, aber dennoch nicht so hardgecoded - aber eben ohne dann GetString von Anfang an benutzen zu müssen? (Es ist eben einiges zu initialisieren und ich versuche ja schon, einen möglichst sicheren Weg der Initialisierung des Programms zu gehen).
3. Was ist sinnvoller - .resource oder .resx (in Anbetracht der Express Edition, die ja keine .resx Resourcen erstellen kann, mal von den Forms abgesehen)?
4. Ich habe Lokalisierung.h (und .cpp) und z.B. Ausnahmen.h (und .cpp), dann noch main und eben eine ApplicationContext.h (und .cpp). Die ganze Initialisierung läuft quasi im ApplCon Konstruktor ab, später würden dann dort auch noch mehrere Forms gestartet werden. Nun ist aber die instantiierte Klasse Sprache^ nicht in den anderen Headern verwendbar. Das ist ja wohl ein ziemlich grundsätzliches Problem (strukturell) und ich hoffe, hier kann mir jemand auch ganz grundsätzlich erklären, wie das in c++ bzw. .net sinnvoller struktuiert werden kann?
Ich weiss, das ist ein Haufen Text und ich hoffe, ich habe die Probleme verständlich darstellen können. Frage 4 wäre eigentlich ein eigenes Thema für sich (wohl auch eher c++ und nicht .net, aber zumindest ist es in .net noch etwas schwieriger, wenn man "extern" verwenden will - die managed Types mögen das ja nicht wirklich).
Ich hoffe, jemand kann helfen.
lg Macan