sprache auswählen mit ini datei

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • sprache auswählen mit ini datei

    hallo

    ich würde gerne ein mehrsprachiges spiel erstellen.und habe mich informiert und mir wurde gesagt es wäre am besten mit einer ini datei zu arbeiten.

    aber wie soll ich das verwirklichen???

    als erstes mach ich mal ein object_language_control für den button den ich im optionsmenü habe....(sprache button)
    darin kann man dann zwischen englisch und deutsch auswählen.

    GML-Quellcode

    1. var file;
    2. file = working_directory + language.ini';
    3. if file_exists(language.ini)
    4. {
    5. ini_open(language.ini);


    aber wie kann ich das jetzt machen das ich jedes wort übersetze.....muss ich dafür ini_write_real benutzen???
    geht es nicht mit einer txt datei in der ich die einzelnen wörter übersetze?und dann irgendwie einfüge??

    ich will kein automatisches programm vom interent dafür nehmen da ich es von einem freund gehört habe das er es so gemacht hat.

    wäre toll wenn mir da jemand helfen könnte.thx
  • du brauchst keine reals(zahlen), sondern ini_read_string(buchstaben)
    In der ini Datei hast du alle Sätze auf alles Sprachen abgespeichert und mit den ini_read funktionen holst du dir die richtigen Sätze aus der Datei.
    Die könnte dann zB so aussehen:

    Quellcode

    1. [Tutorialtext_00]
    2. deutsch = "Das ist ein Tutorial";
    3. english = "This is a turorial";
    4. spanish = "...";
    5. [Tutorialtext_01]
    6. deutsch = "Hier geht es weiter";
    7. english = "It continues here";
    8. spanish = "...";

    GML-Quellcode

    1. text = ini_read_string( "Tutorialtext_00", "deutsch", "error" );



    oder du kannst die Datei auch andersrum aufbauen, jenachdem was für dich nachher angenehmer ist

    Quellcode

    1. [deutsch]
    2. tutorialtext_00 = "Das ist ein Tutorial";
    3. tutorialtext_01 = "Hier geht es weiter";
    4. [english]
    5. tutorialtext_00 = "This is a turorial";
    6. tutorialtext_01 = "It continues here";
    7. [spanish]
    8. tutorialtext_00 = "...";
    9. tutorialtext_01 = "...";
    Alles anzeigen

    GML-Quellcode

    1. text = ini_read_string( "deutsch", "tutorialtext_00", "error" );

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • eine tolle antwort danke wirklich.....eins noch


    wie kann ich das mit sprites machen???? also im menü hab ich ja jetzt die option sprache mit den unteroptionen deutsch und englisch....
    und wenn man eine auswählt soll sich das menü ja auch ändern auf die sprache....und es sind alles fertige sprites mit text darin...also kann ich das von oben
    nicht benutzen...und wie kann ich das dann abspeichern??? .wie sollte ich das machen
  • Ich würde es so machen, dass du anstatt fertige Sprites einfach die Buttons hast, die leer sind. Darin lässt du das dann mit zB draw_text einen Text schreiben
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • @Aku Ryou
    ich hab jetzt ein obj_language_control gemacht und die sprites so gemacht das kein text darin ist.sodass ich später mit draw text den text einfügen kann.
    im obj_language_control hab ich ein create event gemacht in dem ich dann die ini daten speichern wollte.
    das problem ist das er sobald ich zb [deutsch] oder [englisch} schreibe einen fehler anzeigt .


    wie kann ich das dann am besten kategoriesieren

    ich hab es jetzt einfach mit deutsch1 und englisch1 -20 gemacht.

    und eins noch wegen dem ini_read_string
    wie sage ich dem spiel das es jetzt englisch ausgewählt ist.also welche section es ist.

    oder meintest du das ich einfach eine txt datei als ini abspeichere und in den game ordner einfüge

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von acidrain833 ()

  • Du solltest eine globale Variable machen wo Deutsch oder englisch steht. Der Name muss gleich mit der Section sein also "Deutsch" oder "Englisch". (ohne [ und ])
    Dann kannst du die variable einfach dort einsetzen.
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • danke dir wirklich....also wähle ich zb global.languageEN und global.languageDE aus die ich im obj_language_control definiere.


    aber wie mache ich das dann mit dem speichern das das spiel es sich merkt???

    muss ich das mit if abfragen machen??? könntest mir dabei noch einmal helfen....
    sorry wie ihr wisst bin ich noch anfänger...aber durch so tolle leute wie ihr seit lerne ich schnell dazu...
  • Hui, da hat sich ja einiges getan^^

    Also du kannst natürlich die variable language und auch zB den Fortschritt des tutorials in der ini speichern, diesmal mit reals.
    du brauchst also nur die global.language = 1 oder 0 abspeichern in der ini, standart wert 0 für duetsch zB und beim starten des Spiels lässt du global.language aus der ini auslesen. Alle weiteren Lesevorgänge sind dann bei 0 mit der section "deutsch" und bei 1 mit "english"

    GML-Quellcode

    1. ini_open("language.ini");
    2. global.language = ini_read_real("saved", "language", 0);
    3. global.lasttutorialstep = ini_read_real("saved", "tutorialstep", 0);
    4. ini_close();
    5. //zB
    6. if global.lasttutorialstep > 20
    7. {
    8. room_goto(rm_level);
    9. }
    10. else
    11. {
    12. tut = instance_create(x,y,obj_tutorialbutton);
    13. if global.language == 0
    14. {
    15. tut.text = ini_read_string("deutsch",string(global.lasttutorialstep),"error");
    16. }
    17. if global.language == 1
    18. {
    19. tut.text = ini_read_string("english",string(global.lasttutorialstep),"error");
    20. }
    21. }
    Alles anzeigen


    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Aku_Ryou ()

  • @Aku_Ryou
    Hier würde ich noch anmerken, dass man in global.language direkt "deutsch"/"englisch" hat und man keine If abfragen braucht und diese Variable direkt dort einträgt
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • @Husi012
    Ja, kann man auch machen, ich habe wegen der größe im Speicher an 0 und 1/bzw false und true gedacht weil eine zahl bzw eine bool weniger Platz braucht als ein string.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • klar verständlich. Könnte man aber auch gleich die Sections 0 und 1 benennen :D
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Du schreibst die Datei nochmal im Objekt.

    GML-Quellcode

    1. ini_open("language.ini");
    2. text = ini_write_string("DE","deutsch1","Neues Spiel");
    3. ini_close();

    muss aber

    GML-Quellcode

    1. ini_open("language.ini");
    2. text = ini_read_string("DE","deutsch1","Neues Spiel");
    3. ini_close();

    du hast bei write einfach gelassen. Musste aber read heißen. Außerdem steht da einfach "DE" wo du eigentlich eine Variable einsetzen solltest bzw. eine if abfrage.

    Dann hast du noch im Draw einfach draw_text(x,y,+string("text")); gemacht. Einen Text Konvertiert man nicht in einen Text und ein + muss da auch nicht vor :D
    es sollte heißen draw_text(x,y, text);


    GM speichert das dort ab, weil GMS im Sandbox Mode läuft, dass heißt dass er "Berechtigungen" auf nur einen Ordner also genau diesen Ordner den du genannt hattest. Wo anders kann Gm nicht zugreifen
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • danke hatte es schon mit read probiert ging aber nicht da ich das draw text falsch hatte.ich dachte man muss sie nochmal schreiben da es ja gedrawt wird..aber jetzt weiß ichs besser.

    jetzt funktioniert es!!

    ich habe noch keine if abfrage gemacht weil ich nur mal den deutschen text einfügen wollte.
    da es jetzt geht werd ich mich an die if abfrage setzen...thx für die hilfe.

    achso was meinst mit das statt "DE" eine variable einfügen sollte??? das "DE" ist ja unter der global.language variable gespeichert.und es funktioniert ja jetzt bis jetzt.


    aber werd mich sicher wieder melden wenn ich das mit dem if nicht hinbekomme....

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von acidrain833 ()

  • gut ok hab schon wieder probleme

    also ich hab einen button_parent gemacht um die buttons zu wechseln und auf poppen zu lassen wenn man ihn mit der maus berührt
    mit diesem code

    obj_button_parent

    GML-Quellcode

    1. if (position_meeting(mouse_x,mouse_y,self))
    2. {
    3. image_index=1;
    4. image_xscale = 1.2;
    5. image_yscale = 1.2;
    6. }
    7. else
    8. {
    9. image_index=0;
    10. image_xscale = 1;
    11. image_yscale = 1;
    12. }
    Alles anzeigen


    dann habe ich den button_deutsch gemacht also den leeren button in den raum gestellt und dann diesen code benutzt um den text in das sprite zu schreiben

    obj_button_deutsch
    Create Event

    GML-Quellcode

    1. ini_open("language.ini");
    2. text = ini_read_string("DE","deutsch10","");
    3. ini_close();


    Draw Event

    GML-Quellcode

    1. draw_self();
    2. draw_set_font(fnt_1);
    3. draw_set_halign(fa_center);
    4. draw_set_valign(fa_middle);
    5. draw_text(x,y,text);
    6. if (image_index==1)
    7. {
    8. draw_set_color(c_black);
    9. }
    10. else
    11. {
    12. draw_set_color(c_lime);
    13. }
    Alles anzeigen


    und ich habe das obj_button_parent als parent gemacht bei obj_button_deutsch und englisch .

    und der englisch button hat fast den gleichen inhalt nur mit einer anderen variable...
    jedoch wenn ich mit der maus draufgehe verschwindet der text vom anderen und auch andersrum genau das selbe.....


    und mit der if abfrage komme ich auch überhaupt nicht weiter...weil das spiel sollte ja von anfang an deutsch sein und erst wenn man
    es auf englisch stellt englisch....aber wie mach ich das.....
  • also ich habe ein problem und zwar wie kann ich es jetzt speichern.
    also im untermenü von optionen gibt es sprache darunter dann die beiden buttons mit englisch und deutsch
    die ich mit diesem code also die sprache ändere.es funktioniert auch.
    natürlich hab ich noch andere events in diesem objekt wie create event in dem die variablen erstellt werden
    und left pressed wo global.deutsch auf true und global.englisch auf false gestellt wird.



    aber jetzt hab ich das problem das ich es speichern muss.also ich hab im selben menü noch den button save.
    jedoch keine ahnung wie ich es speichern kann wenn es zb auf englisch gestellt.sodass im darüberen menü auch english bleibt.

    OBJ_BUTTON_SAVE
    LEFT PRESSED EVENT

    GML-Quellcode

    1. if (room == rm_language)
    2. {
    3. ini_open("language.ini")
    4. ini_close();
    5. room_goto(rm_options)
    6. }



    bitte wiedermal um hilfe

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von acidrain833 ()

  • GML-Quellcode

    1. ​if (room == rm_language)
    2. {
    3. ini_open("language.ini")
    4. ini_write_real("Option", "Sprache", global.language);
    5. ini_close();
    6. room_goto(rm_options)
    7. }

    beim laden dann einfach
    global.language = ini_read_real("Option", "Sprache", false);

    Du hast "false" und "true" benutzt. ich würde es an deiner Stelle mit false und true machen, ist vom Speicher kleiner und das als String zu machen wäre auch komisch. Deswegen hab ich auch ini_*_real gemacht...
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • oje ein kleines problem noch.....

    also ich hab es so gemacht das wenn er vom rm_language kommt und im rm_options ist das er dann mit diesem code nachsieht ob
    er von diesem raum kommt und welche variable gespeichert ist.

    GML-Quellcode

    1. if (room_last == rm_language)
    2. {
    3. global.language = ini_read_string("Option","Sprache","")
    4. }


    das funktioniert auch super im option menü speichert er die sprache sofort und er gibt entweder englisch oder deutsch aus....

    dann wollte ich mit dem selben code machen nur halt im creation code des rm_language und mit rm_option statt language .

    damit man wenn man in den rm_language geht und vorher schon eine sprache ausgewählt hat und nnochmal in den raum geht es auch die angegeben sprache ist.

    aber das tut es nicht...