Multilanguage aber wie?

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Abend,
    Hab mittlerweile mein Gamemode eigentlich ganz gut nach meinen Wünschen hin bekommen.


    Da ich nun mehr Spieler auf meinem Server haben möchte und mein Reichweite über den Deutschsprachigen Raum erweitern möchte, suche ich jetzt nach einer Möglichkeit meinen Gamemode mit einer zweiten Sprache zu versehen.


    Gibt es dafür vielleicht ein Tuturial oder zumindest Ansätze wie man so was realisiert?


    Ich hab Google bemüht aber irgendwie nichts gefunden was mich da weiter bringt, vielleicht hab ich da auch was übersehen. :)


    MfG

  • Nehmen wir diese Forensoftware als Beispiel.
    Sie speichert jeden (!) Satz, bspw. "Erfolgreich eingeloggt." in einer Datei.
    Sagen wir, wir brauchen Deutsch und Englisch.
    Nun haben wir 2 Dateien: "lang_de.txt" und "lang_en.txt".
    Dort schreiben wir in jede Zeile einen Satz.


    Beim Login des Spielers am Server fragen wir ihn, welche Sprache er haben will.
    Wenn er bspw. Englisch will, laden wir jede Zeile in eine Variable.
    Bspw. lang_en.txt (Zeile 1): "Login successfully" -> lang_var[0].


    Jetzt setzen wir überall im Script wo "Login succesfully" bzw. "Erfolgreich eingeloggt" hinkommt die Variable ein.


    Ich hoffe du hast das Prinzip verstanden ;).

  • Ah okay.


    Sprich ich ersetze den Test der ausgegeben wir durch eine variabel. Diese Variabel verlinke ich mit den zwei Textdateien und in den Textdateien speichere ich den Text.


    Dann muss ich nur noch ein Menü vorschalten dass dann z.b. Englisch oder Deutsch als Auswahl hat. Wenn nun einer auf den Server kommt kann er auswählen und bekommt dan den Text in englisch oder Deutsch.


    Theoretisch eigentlich ganz leicht. Aber hast du vielleicht nen kleinen Ansatz wie das ungefähr aussieht. :)

  • du kannst sonst auch einfach 2 strings machen


    also iwie so


    if(language[playerid] == 1) //Englisch
    {
    SendClientMessage(playerid, COLOR_GREEN, "Hello!");
    }
    else if(language[playerid] == 2) //Deutsch
    {
    SendClientMessage(playerid, COLOR_GREEN, "Hallo!");
    }
    else if(language[playerid] == 3) //Französisch
    {
    SendClientMessage(playerid, COLOR_GREEN, "Salut!");
    }

  • Naja, erstellen wir mal 2 Dateien.


    lang_en.txt. -> Inhalt:

    Code
    Hello World!
    My name ist Michael!


    lang_de.txt. -> Inhalt:

    Code
    Hallo Welt!
    Mein Name ist mIchael!


    Beim login des Spielers fragen wir ihn, welche Sprache er haben will:

    public OnPlayerConnect(playerid)
    {
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Sprache", "Deutsch\r\nEnglish", "Auswählen", "");
    return 1;
    }


    Jetzt erstellen wir noch die Sprachvariable:

    new var_lang[1000]; // Größe muss eventuell angepasst werden.


    Dann fragen wir noch ab, welche Sprache er gewählt hat:

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == 1) {
    if(listitem == 0) // Deutsch
    {
    new string[1000]; // Größe muss eventuell angepasst werden
    new File:example = fopen("lang_de.txt", io_read); // Datei öffnen
    new i = 0; // Laufvariable


    while(fread(example, string)) // Datei Zeilenweise auslesen
    {
    var_lang[i] = string;
    i++;
    }


    fclose(example);
    }
    }
    return 1;
    }


    Habe es jetzt zwar nicht getestet, sollte aber funktionieren.
    Musst du natürlich noch je nach Sprache und Menge der Sprachen anpassen.


    Edit:


    Ist doch viel zu aufwändig, bei jeder Ausgabe abzufragen, welche Sprache er gewählt hat.

  • new Var[MAX_PLAYERS];


    Text senden:
    forward SendClientMessageEx(playerid,color,texten[],textger[]);
    public SendClientMessageEx(playerid,color,texten[],textger[]);
    {
    if(Var[playerid]==1)SendClientMessage(playerid,color,texten);
    if(Var[playerid]==2)SendClientMessage(playerid,color,textger);
    return 1;
    }


    Sprache setzen:
    Var[playerid]=1; // Englisch
    Var[playerid]=2; // Deutsch


    Keeeeine Ahnung ob es geht, ist freihand und ungetestet.

    Why do programmers always mix up Halloween and Christmas?
    Oct 31 == Dec 25

  • Variante 1 ist glaube nicht wirklich Ressourcen schonend.


    Variante 2 ist das was mir am meisten zusagt, aber wie kann ich den "Hallo Welt!" und "mein Name ist Michael" getrennt von einander ausgeben?

  • Man könnte dies auch mit Includes machen.
    Dann müsteste jede einzelne Textstelle in einer Variable speichern und in Includes lagern.


    Nicht recourcesparend naja ist es eigentlich so oder so nicht^^
    Es gab hier mal eine Include.


    Da musste man nurnoch sowas machen:
    SendCLientMessageMUltiLang("Arsch";"Ass");
    Oder so in der Art

    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


  • Variante 1 ist glaube nicht wirklich Ressourcen schonend.


    Variante 2 ist das was mir am meisten zusagt, aber wie kann ich den "Hallo Welt!" und "mein Name ist Michael" getrennt von einander ausgeben?

    Du hast ja deine Sprachvariable (var_lang[]).
    Diese hat eine Größe von 1000 Zeilen - Dies musst du natürlich entsprechend deiner Varaible anpassen.
    Wenn du jetzt die 1. Zeile, also "Hallo Welt!" bzw. "Hello World!" ausgeben willst, gibst du einfach "var_lang[0]" aus, da es in der 1. Zeile gespeichert ist.
    "Mein Name ist Michael" bzw. "My name is Michael" ist dann in der 2. Zeile, also "var_lang[1]" gespeichert.


    Das würde dann so aussehen:

    SendClientMessage(playerid, Farbe, var_lang[0]); // Ausgabe: (Je nach Sprachauswahl) Hallo Welt! oder Hello World!
    SendClientMessage(playerid, Farbe, var_lang[1]), // Ausgabe: (Je nach Sprachauswahl) Mein Name ist Michael! oder My name is Michael!

  • Hi


    Michael:


    Finde deine variante vom handhaben her zu kompliziert. Man muss immer wissen in welcher zeile in der datei was steht, das nervt, finde ich.
    Ich würd´s auch einfach so machen wie ZKX es vorgeschlagen hat.


    Und zudem ist glaube ich noch nen bug drinne :D
    var_lang[1000]
    muss doch eher
    var_lang[100][1000]


    Dann sind es 100 Strings mit ner länge von 1000. Also maximal 100 zeilen in der datei, die in nen 1000er string gepackt werden ;)


    MFG, Robdeflop®

  • wenn das mit dem Bug stimmt, ist das ein wenig problematisch, denn ich hab mehr als 100 Zeilen Text :)


    Sonst hätte ich noch die inc hier gefunden von der тαкє ιт ΣαѕZу geredet hat nur die ist offline.