Menü mit verschiedenen Sprachen (Klassen, Vererbung)
-
Hi,
ich habe ein etwas größeres Programm geschrieben, mit einer abstrakten Basisklasse und mehreren Unterklassen welche von der Basisklasse erben.
Nun soll in dieses Programm mit verschiedenen Sprachen gestartet werden.
Sprich das gesammte Menü sowie alle Kontrollausgaben sollen in der am Anfang festgelegten Sprache ausgegeben werden.Ich habe nun mal ein kleines Testprogramm erstellt, wo ich versucht habe dies Testweise umzusetzten.(Basisklasse,Klasse Deutsch, Klasse Englisch)
Jetzt weiß ich nicht genau wie ich das eigentlich Menü in die Klasse einbauen soll, wo dann später die MEthoden etc. aufgerufen werden.
In das eigentliche Menü müsste dann z.B
klassexyz L; string name; cout<<"Benutzer anlegen"; cin>>name; L.anlegen(name); .......
Hier das Beispiel:
//Main int _tmain(int argc, _TCHAR* argv[]) { int auswahl_sprache; cout <<"Bitte wählen Sie Ihre Sprache: "<<endl; cout <<"<1> Deutsch"<<endl; cout <<"<2> Englisch"<<endl; cout <<"<3> Tuerkisch"<<endl; cin >> auswahl_sprache; if (auswahl_sprache==1) { klasse_deutsch deutsch; basis_klasse *test; test = &deutsch; test->menue( ); } if (auswahl_sprache==2) { klasse_englisch englisch; basis_klasse *test; test = &englisch; test->menue( ); } if (auswahl_sprache==3) { } getch(); return 0; }
//Basis Klasse class basis_klasse { private: public: string sprache; basis_klasse(string lang) :sprache(lang){}; virtual void xxx(void)=0; void menue(void) { cout << "gewaehlte Sprache: "; cout << sprache; } };
//Klasse Deutsch class klasse_deutsch: public basis_klasse { private: public: string sprache; klasse_deutsch()//Konstrucktor :basis_klasse( "DEUTSCH_STRING\n" //1. String ){}; void xxx() { cout << "Deutsch" << endl; } };
//Klasse Englisch class klasse_englisch: public basis_klasse { private: public: string sprache; klasse_englisch() //Konstrucktor :basis_klasse( "ENGLISCH_STRING\n" // 1. String ){}; void xxx() { cout << "Englisch\n" ; } };
-
OOP ist zwar meistens ein guter Weg, jedoch bei Mehrsprachigkeit m.E. nicht, da du ja nicht mehrere Sprachen mischen möchtest.
Besser ist es, du legst die Sprachtexte einfach in ein Array und liest dann die Texte aus entsprechenden Textdateien.
Und wenn schon OOP, dann richtig:
basis_klasse *test = 0; // dies ausgelagert als Funktion oder Klasse, nennt man dann eine "Factory" switch(auswahl_sprache) { case 1: test = new klasse_deutsch(); break; case 2: test = new klasse_englisch(); break; } if(test != 0) { test->menue(); // virtueller Aufruf delete test; }
In deinem Source-Code hättest du keine abstrakte bzw. virtuelle Klasse benötigt, wenn die Aufrufe lokal (d.h. jedesmal kopiert) sind.
-
OOP ist zwar meistens ein guter Weg, jedoch bei Mehrsprachigkeit m.E. nicht, da du ja nicht mehrere Sprachen mischen möchtest.
Ich sehe den Zusammenhang zu OOP nicht... hat wohl auch nichts damit zu tun.
Simon
-
Th69 schrieb:
...
Naja - erstens ist dein Weg ziemlich sinnlos und alle Beschriftungen müssten in den Quellcode.
Zweitens sollten die Klassen alle genau das gleiche machen... Warum sollte man also andere Typen nehmen, wenn andere Instanzen reichen würden?
Ich find deine Lösung nicht gerade hübsch - und die Aussage von wegen OOP würd hier nich passen, kann ich absolut nicht nachvollziehen... theta hatte das ja auch schon passend kommentiert... ^^wie wärs damit, für jede sprache eine xml-datei zu machen (oder was auch immer) und einfach nur eine sprach-klasse zu haben?
je nach dem, welche sprache du übergibst, nimmt er sich dann die jeweilige xml-datei und liest dort die werte aus...zum beschriften an sich gibts 2 möglichkeiten:
- getter für jedes feld (was sich bei consolen-anwendungen anbietet)
- man registriert jedes label o.ä. (bei gui-anwendungen ^^) und die klasse ändert bei einer änderung der sprache automatisch den inhalt des labels/...hatte so was auch ma für ne gui-anwendung geschrieben - allerdings gefällt die klasse mir (durch die vorgaben, die ich bekommen hab), selbst nich mehr, sonst hätt ich dir mal paar teile gezeigt - vll hättest du ja was gesehen, was dir gefällt oder dich auf ne bessere Idee bringt...
bb
-
@theta und @unskilled, ihr habt beide meinen Beitrag NICHT verstanden.
Ich habe mich auf den Beispielcode von @Dolphon bezogen (er verwendet zwar OOP, d.h. eine Klassenhierachie), aber benutzt diese falsch!!!
Und meine Lösung habe ich ja auch beschrieben:
Besser ist es, du legst die Sprachtexte einfach in ein Array und liest dann die Texte aus entsprechenden Textdateien.
Ob diese Textdatei nun im XML-Format (so wie @unskilled schrieb) oder sonstwie ist, ist doch völlig egal!
-
Th69 schrieb:
@theta und @unskilled, ihr habt beide meinen Beitrag NICHT verstanden.
Doch doch.. den habe ich schon verstanden, deinen Beitrag.
OOP ist zwar meistens ein guter Weg, jedoch bei Mehrsprachigkeit m.E. nicht, da du ja nicht mehrere Sprachen mischen möchtest.
er verwendet zwar OOP, d.h. eine Klassenhierachie
OOP besteht nicht nur aus Vererbung. Ich finde desshalb diese beiden Aussagen einfach unpassend.
Simon
-
Du störst dich also an dem Begriff OOP? Hätte ich hier lieber Polymorphie schreiben sollen?
Ich finde einfach die Definition und Benutzung der Klassen von @Dolphon falsch, um mehrsprachige Menüs anzuwenden.
Wie schon geschrieben: "Und wenn schon OOP, dann richtig"!
P.S: @theta, welche Lösung schlägst du denn dann vor?