Eine Frage zu MainMenu



  • Ich will im MainMenu die Sprache auswälen...
    Da hab ich dann ein Menüpunkt Sprache und dort dann Deutsch und Englisch...

    Ich will wenn ich auf deutsch klicke das Deutsche Menü angezeigt bekommen und wenn ich auf englisch klicke das Englische menü...

    Sprich ich hab zwei Menüs, ein Deutsches und ein englisches und je nachdem was ausgewählt ist soll das angezeigt werden.

    Allerdings bekomm ich das so net hin ^^, die funktion visible gibt es beim Menü nicht...

    Hat jemand eine idee?

    gruß stetze



  • Hallo,

    wenn du nur die Menüpunkte in 2 Sprachen haben willst, kannst du zB. Folgendes machen:

    Du erstellst eine Variable "Sprache", in die die aktuelle Sprachauswahl gespeichert wird. Wenn man nun auf "deutsch" klickt, wird in der Variable "1" gespeichert, bei "englisch" wird "2" gespeichert.
    Dann kannst du eine Funktion schreiben, die nach dem Klick auf eine Sprache aufgerufen wird. Die Funktion setzt je nach Sprachauswahl (1 / 2) die Caption's der Menüpunkte neu - mit den von dir in der Funktion hinterlegten Texten. Fertig. 🙂
    Dadurch das du eine Variable mit dem Sprachwert hast, kannst du die Sprache sogar speichern und beim nächsten Programmstart die zuletzt eingestellte Sprache benutzen. 😉
    Das müsste der einfachste Weg sein...

    MfG



  • BTW. Willst Du den Punkt Sprachwahl wirklich in ein Menü verstecken? Jemand der nur englisch spricht, wird vielleicht nicht verstehen, dass er auf Sprache klicken muss um sie auf Englisch umzustellen.



  • Nenn' den Menüpunkt einfach "Sprache / Language".



  • Und wenn's 10 Sprachen sind?



  • witte schrieb:

    Und wenn's 10 Sprachen sind?

    stetze schrieb:

    Ich will im MainMenu die Sprache auswählen...
    Da hab ich dann ein Menüpunkt Sprache und dort dann Deutsch und Englisch...

    Es sind nicht 10 Sprachen 😉

    Streithammel 🤡

    PS: Schlag' doch einfach 'ne Alternative vor, anstatt hier rumzusticheln. 🙂



  • Ja, ich überlege ja auch noch, wie man das am besten löst. Wenn er sich Flaggen unter das Mainmenü knallt, sieht's bei größerem Sprachsupport so aus, als wäre es die Flaggenleine eines weitgereisten Luxusdampfers. Oder dieses Menü mit Icons versehen? Im Hauptmenü ein Globus?
    😕



  • Ich habs jetzt so gelöst...

    void __fastcall TForm1::English1Click(TObject *Sender)
    {
       English1->Checked=true;
       Deutsch1->Checked=false;
       Spiel1->Caption="Game";
       SpielStarten1->Caption="Start Game";
       SpielBeenden1->Caption="Exit Game";
       Optionen2->Caption="Options";
       Soundan1->Caption="Sound on";
       Soundaus1->Caption="Sound off";
       Sprache1->Caption="Language";
       Highscoreanzeigen1->Caption="Show Highscore";
       Hilfe1->Caption="Help";
       Spielanleitung1->Caption="Game instructions";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Deutsch1Click(TObject *Sender)
    {
       English1->Checked=false;
       Deutsch1->Checked=true;
       Spiel1->Caption="Spiel";
       SpielStarten1->Caption="Spiel Starten";
       SpielBeenden1->Caption="Spiel Beenden";
       Optionen2->Caption="Optionen";
       Soundan1->Caption="Sound an";
       Soundaus1->Caption="Sound aus";
       Sprache1->Caption="Sprache";
       Highscoreanzeigen1->Caption="Highscore anzeigen";
       Hilfe1->Caption="Hilfe";
       Spielanleitung1->Caption="Spielanleitung";
    }
    

    Aber ihr habt ja recht ^^ wenn man kein Deutsch kann is doof... also muss ich die Sprache abfragen bevor das Spiel gestartet wird... oda so...



  • witte schrieb:

    [...] Oder dieses Menü mit Icons versehen? Im Hauptmenü ein Globus?

    Ja, oder gleich nach dem Programmstart 'nen riesigen Globus animiert darstellen, wo man dann auf ein Land klicken muss, um eine Sprache zu wählen und dann zoomt es so an das Land heran und man muss eine Region im Land wählen, damit der korrekte Dialekt für das Programm ausgewählt wird und dann kommt ein kurzes Video von einem landestypischen Festumzug mit einer Laufschrift drunter "Herzlichen Glückwunsch, Sie haben die Spracheinstellung erfolgreich abgeschlossen"... 🤡
    Mal ehrlich: Wer "Language" nicht versteht sollte keinen PC benutzen, oder!?

    Wenn man nur 2 Sprachen hat und auf Nummer sicher gehen will, kann man ja wenn "deutsch" gewählt ist den Menüpunkt "Language" nennen und wenn "english" ausgewählt ist, nennt man ihn "Sprache" - dann findet der Nutzer der jeweils anderen Sprache den Menüpunkt leicht, obwohl das Programm gerade eine Sprache nutzt die er nicht versteht.

    PS: Ich persönliche mag Programme nicht, wo ich nicht mittendrin die Sprache umstellen kann!



  • Kolumbus schrieb:

    PS: Ich persönliche mag Programme nicht, wo ich nicht mittendrin die Sprache umstellen kann!

    und ich mag Programme nicht wo man das kann. Ehrlich gesagt sehe ich auch keinen Sinn darin das zur Laufzeit zu machen.
    Wir packen die verschieden Strings in Stringressourcen die wiederum in dlls kommen. Dann können wir bei Programmstart einfach die passende Sprach-dll laden und fertig. Das System ist auch gut erweiterbar. Theorethisch auch zur Laufzeit wenn man die dlls dynamisch lädt.



  • Kommt halt darauf an, was es für eine Software ist. Jemand, der die Benutzerschnittstelle eines Geldautomaten implementiert, wird dies sehr wohl zur Laufzeit tun müssen.
    Ich habe das früher so gelöst, dass beim Starten die eingestellte Lokale des OS ausgelesen wird und dann entsprechend die Sprache eingestellt wird. Ist aber auch nicht optimal, da der Benutzer ja nicht unbedingt mit dieser Sprachwahl einverstanden sein muss.



  • Gut, da hast du Recht. An sowas wie Geldautomaten habe ich jetzt nicht gedacht.



  • Hallo, ich habe ein ähnliches Problem, jedoch in C...

    Möchte eine Sprachauswahl (Eng/Deu) beim Start des Programms. Das Programm ist zum steuern eines Roboters...

    Alle Ausgaben, also LCD und Bildschirmausgaben liegen als Funktionen in 2 Quellcode Dateien (inkl. der dazugehörigen Header Datei), also eine auf englisch und die andere auf deutsch.

    Bsp.:

    void print_lcd6()
    {
    	printLcd(" Automatik Mode ",16);
    }
    void print_lcdNotaus()
    {
    	printLcd("  N O T A U S   ",16);
    }
    
    // Bildschirm Ausgaben:
    ///////////////////////
    // Menüauswahl
    void print_auswahl()
    {
    	printf("Bitte waehlen Sie aus folgenden Optionen:\n\n");
    

    Gibt es irgendeine Möglichkeit gezielt nur einen Quellcode nach Auswahl zu laden?

    Wenn es jemanden interessiert, hier gibts den kompletten VisualStudio Projektordner. Projektarbeit im Rahmen einer Weiterbildung zum Techniker Fach Technische Informatik - Graupner Roboter.

    Passwort bitte per mail bei mir anfordern.



  • Statt die Ausgabe-Texte direkt in die Funktionsaufrufe zu schreiben, solltest du dort Variablen einsetzen. Die Variablen kannst du dann je nach Auswahl des Anwenders aus einer deutschen oder englischen Liste befüllen.
    Da brauchst du auch keine separaten Quellcodedateien mehr.

    Allerdings ist dein Problem weder Borland-spezifisch noch hat es direkt mit C zu tun; solche Fragen passen eher nach Rund um die Programmierung.



  • Danke für die schnelle Antwort, aber ich kann dir leider nicht ganz folgen.

    Allerdings ist dein Problem weder Borland-spezifisch noch hat es direkt mit C zu tun; solche Fragen passen eher nach Rund um die Programmierung.

    Das stimmt, der Beitrag gehört nicht wirklich hier her. War halt das einzig brauchbare was ich durch die Suche finden konnte...



  • Jansen schrieb:

    Statt die Ausgabe-Texte direkt in die Funktionsaufrufe zu schreiben, solltest du dort Variablen einsetzen. Die Variablen kannst du dann je nach Auswahl des Anwenders aus einer deutschen oder englischen Liste befüllen.
    Da brauchst du auch keine separaten Quellcodedateien mehr.

    hoeslnet schrieb:

    Danke für die schnelle Antwort, aber ich kann dir leider nicht ganz folgen.

    Pseudocode:

    // beim Start:
    funktion FrageSpracheAb()
    {
      Bildschirmausgabe("Bitte Sprache wählen / Pls select Language");
      Benutzerauswahl= HoleEingabe();                                 // Benutzer macht Eingabe
      SetzeSprache(Benutzerauswahl);                                  // Variablen für das Programm werden erstellt
    }
    
    // hier werden dann die Variablen gesetzt:
    funktion SetzeSprache()
    {
      wenn Benutzerauswahl=1:
        Überschrift1= "Willkommen";
        Überschrift2= "Einstellungen";
        ...
        Status1= "Automatischer Modus";
        Abbrechen1= "Abbrechen";
        ...
      ansonsten / wenn Benutzerauswahl=2:
        Überschrift1= "Welcome";
        Überschrift2= "Settings";
        ...
        Status1= "Automatic Mode";
        Abbrechen1= "Cancel";
        ...
    }
    
    // im weiteren Quellcode werden die Variablen benutzt,
    // so brauchst du bloss einen Quellcode!!!!!
    void print_lcd6()
    {
        printLcd(Status1,16);
    }
    

    MfG



  • Für so etwas benutzt man den ETM oder z.B. dxgettext.


Anmelden zum Antworten