Wir machen euer RPG Maker MZ-Spiel mehrsprachig!

  • Hallo auch!

    Sicherlich gibt es unter euch auch jene, welche ihr Spiel gerne sowohl der internationalen Spielerschaft, wie auch dem deutschsprachigem Publikum möglichst zugänglich machen möchten.

    Am einfachsten geht dies natürlich mit unterschiedlichen Lokalisierungen!





    Für dieses kurze Tutorial verwenden wir folgendes Plugin von Open Digital World, dessen Einrichtung ich hier gerne im Detail erläutern möchte.

    Außerdem brauchen wir noch einen Texteditor für den JSON-Teil des Tutorials. Ich verwende in diesem Beispiel Notepad++.



    Folgende Schritte werden uns erwarten:

    1. Das Plugin und den Projektordner vorbereiten
    2. JSON-Dateien erstellen und Strukturen aufbauen
    3. Im RPG Maker MZ alle gewünschten Texte durch Strings austauschen
    4. Optional: Weitere Überlegungen



    1. Das Plugin und den Projektordner vorbereiten

    Zuerst wird das Plugin ganz normal in den Projekt-Ordner kopiert. Im RPG Maker MZ gehen wir in den Plugin Manager und aktivieren es dort. Hier fällt bei den Parametern sofort auf, dass dieses Plugin kein "Plug & Play" ist, sondern noch ein paar Vorbereitungen benötigt, um seine Funktion erfüllen zu können.


    Hier kann man sehen, dass ich bereits (oben rechts) bei "Languages Option" (in der JSON) mit einem String arbeite, damit dieser Punkt ebenfalls berücksichtigt wird.


    Im Projektordner eures Spieles erstellen wir einen neuen Ordner namens "languages" oder einen anderen beliebigen Namen, welcher dann aber auch in der 2. Parameter-Spalte des Plugins ("Languages Folder") angepasst werden muss. In diesem Ordner können wir uns nun Abkürzungen für die angestrebten Sprachen erstellen, welche als eigenständige Ordner in "languages" erstellt werden. In meinem Fall waren dies einmal "en" für die englische Sprachversion und einmal "ger" für die deutsche Version.


    Hier lässt sich bereits (für Notepad++-Nutzer anhand der Icons) erahnen, was später in die Ordner kommen wird.


    Nun werden wir auch nochmal im Plugin schauen, dass wir alles nach demselben Prinzip vorbereiten.


    Hier sieht man, wie das Plugin in der 3. Parameter-Spalte einen Bezug zu den gerade erstellten Ordnern herstellt. Die 4. Spalte ist ebenso wichtig und wird im 2. Themenpunkt behandelt.


    Sobald dies der Fall ist, öffnen wir nun den Texteditor unserer Wahl und erstellen in jedem Ordner (in dem Fall "en" und "ger") eine JSON-Datei, welche wir "main" nennen. Diese Datei ist ebenfalls bereits im Plugin vordefiniert (4. Spalte des obigen Bildes). Und genau mit diesen JSON-Dateien machen wir nun weiter!
    Wichtig ist, dass alle Bezeichnungen (auch in Sachen Groß- und Kleinschreibung) 1:1 identisch sind.


    2. JSON-Dateien erstellen und Strukturen aufbauen

    Wir haben nun das Plugin eingestellt und im Projektordner die entsprechenden Vorbereitungen getroffen. Nun gehen wir dazu über zu definieren, welche Inhalte wir gerne im Spiel übersetzen möchten. Dafür öffnen wir eine der beiden mit "main" betitelten JSON-Dateien und bauen uns eine Struktur auf!

    Hier zeige ich euch mal den Inhalt meiner exemplarischen "main"-JSON-Datei und erkläre euch die einzelnen Abschnitte.
    Wichtig ist hervorzuheben, dass in einer JSON-Datei keine simplen Kommentare möglich sind, wie man es vom Programmieren in diversen Sprachen mit "#" oder "//" vor einem Text kennt, welcher für den Programmierer als Gedankenstütze dient und keinen vom Programm auszuführenden Code enthält. Die Leerzeilen dienen deswegen als thematische Trennzeichen zur Erleichterung des Lesens.
    Auch muss aufgrund der Syntax (grob der "Grammatik" des Datenformats) hinter jeder Zeile ein "," stehen - außer in der letzten Zeile.

    Wenn man mit längeren Listen arbeitet, kann man diese durch "{" über und "}" unter einem Abschnitt ein- bzw. ausklappbar machen. Dies erleichtert die Verwaltung enorm und sorgt für Übersicht.


    Da der RPG Maker (MZ) in Dialogboxen leider keinen Zeilenumbruch beherrscht, empfehle ich noch "\n" in einem String einzusetzen, wenn ein solcher notwendig ist. Der entsprechende Textinhalt innerhalb der JSON-Datei muss jedoch in derselben Zeile geschrieben bleiben und auf zuvor gesetzte Leerzeichen Acht gegeben werden, da diese - plötzlich an den Beginn einer Zeile gerutscht - deplatziert wirken können.


    Hierbei handelt es sich um folgende Gliederung, welche ich vom Plugin-Ersteller übernommen und (bislang) minimal erweitert habe.

    1. Abschnitt:
    Der Name des Projektes, welcher oben im Fenster des Spiels (und wenn aktiviert im Titelmenü) angezeigt wird.
    Bei Bedarf lässt sich hier auch die Währung an die jeweilige Sprache des Spielers anpassen, indem man (beispielsweise) eine Spalte mit ""Game.currencyUnit":" und gemäß der grundlegenden Struktur mit einem in "Wert" auf der rechten Seite verwendet. Ebenso kann man im Falle eines Schrittzählers oder anderer Funktionen diese hier aufgreifen und entsprechend übersetzen.


    2. Abschnitt:
    Befehle aus diversen Menüpunkten, welche der Spieler auswählen kann.
    Der Plugin-Ersteller hat hier mit "command." gearbeitet, um die Buttons beim Lesen besser hervorzuheben. Grundlegend kann man sich aber auch hier seine eigene Logik überlegen, da diese Werte auf der Linken Seite lediglich als Verknüpfung von Datenbank-Spalten und JSON-Übersetzung dienen. Je prägnanter diese Namen sind, desto leichter lässt sich damit arbeiten. Deswegen rate ich dazu, diese zu übernehmen und nach denselben Prinzipien neue Verknüpfungen zu erstellen - gerade wenn man das Spiel durch anpassbare Menüs und zusätzliche Funktionen weiter individualisiert.


    3. Abschnitt
    Informationen aus dem Optionen-Menü, welche nur dort gebündelt vorkommen.
    Hier habe ich in der ersten Spalte "Message.language" hinzugefügt, damit im Optionsmenü auch der Menüpunkt für ausgewählte Sprachen in der jeweilig ausgewählten Sprache benannt wird. Darüber hinaus kann man auch hier die gegebene Logik konsequent weiterverfolgen, wenn man durch Plugins ein wesentlich umfassenderes Optionsmenü hat.



    3. Im RPG Maker MZ alle gewünschten Texte durch Strings austauschen

    Jetzt ist es an der Zeit, in die Datenbank des RPG Maker MZ zu gehen.
    Dort "verlinken" wir nun mit

    Code
    ${beliebiger-Inhalt-der-linken-Spalte-der-JSON-Datei}

    die Textausgabe des Spielprojektes mit den multiplen Möglichkeiten der unterschiedlichen Sprachvarianten. Da nach Auswahl der Sprache die jeweilige "main"-JSON-Datei verwendet wird, reicht der soeben genannte Befehl vollkommen aus, um mehrere Sprachen gleichzeitig zu verwalten.




    Da Bilder mehr sagen als Worte - hier ein Beispiel! Man kann sehr gut sehen, wieviel Arbeit noch vor einem liegen wird. Oben rechts lässt sich das Vorgehen am besten lesen/herleiten.

    4. Optional: Weitere Überlegungen

    Nun haben wir die Grundsteinlegung hinter uns. Doch die tatsächliche Arbeit wird darin bestehen, all die Dialoge des Spiels in die JSONs zu schreiben und diese Strings in Nachrichtenfenster, Auswahlfenster, Item Beschreibungen, etc zu setzen.

    Neben diesem Zusatzschritt hat man nun natürlich auch mindestens die doppelte Arbeit, da der Maker keinen automatischen Zeilenumbruch in den Dialogfenstern nutzt und übersetzte Texte ohne sorgfältige Überprüfung abgeschnitten werden können.


    Aber eigentlich möchte ich auf etwas anderes hinaus: Wie viele JSON-Dateien pro Sprache machen Sinn?

    Wir wissen ja, dass wir derer einige im Plugin einstellen können. In welchen Situationen kann dies sinnvoll sein?

    • Beispielsweise kann bei sehr dialoglastigen RPGs eine Aufteilung im Sinne der Kapitel/Akte/etc auf eigene JSON-Dateien sinnvoll sein. So lassen sich Übersetzungen und/oder Korrekturen schneller vornehmen, da man beim Öffnen der Datei sofort in einem Themenbereich steckt.
    • Wenn man dies wünscht, kann man auch alle Formen von Gegenständen ("Items", "Ausrüstung", "Wichtige Gegenstände") in einer eigenen JSON-Datei bündeln, um sich im Workflow das viele Scrollen (trotz Einklappen der Elemente) etwas zu reduzieren.
    • Ebenso könnte man Bereiche durch eigene JSON-Dateien "ausklammern", welche unter Umständen noch einer starken Überarbeitung unterliegen - wie beispielsweise ein selbst geschriebenes Plugin im WIP-Zustand. Dieses ließe sich bei Bedarf im Nachhinein leicht in eine größere Datei hinüber kopieren, wo man dann mit den Klammern arbeiten kann.




    Das war es erst einmal von meiner Seite!

    Ich wünsche euch nun viel Spaß beim Übersetzen eurer Spiele und freue mich ebenso über Erfahrungsberichte und Anregungen!


    Als Dreingabe hänge ich euch die beschriebene Ordnerstruktur samt beispielhafter JSON-Dateien zur freien Verwendung an, welche bereits ein paar (aber bei Weitem nicht alle) Parameter aus der Datenbank und die Sprachoption im Spiel selbst übersetzen. Das erspart euch etwas Schreibarbeit. =)

  • Danke für das schöne Tutorial! :)


    Hast du eine Ahnung wie es mit Zeilenumbrüchen aussieht. Muss man die in der JSON machen oder wird das vom Plugin dann in der Textbox erledigt?


    Hast du eine Idee wie man das bei großen Spielen macht, dass man in den vielen Dialogen nicht durch einander kommt?

  • Danke Dir! :]


    Es scheint so zu sein, dass man nur den Weg über die JSON-Datei hat (\n), was entweder Try & Error oder über den Daumen gepeilt grob eine maximale Zeichenanzahl pro Zeile zur Folge hat (grob, da manche Zeichen trotzdem mehr Platz einnehmen und somit eine fixe Zahl nur eine Orientierung sein kann).

    Gerade bin ich mit dem Ersteller wegen eines bereits ausgemerzten Bugs im Austausch. Ich könnte Mal nachfragen, ob sich die Zeilenumbrüche irgendwie automatisieren ließen, indem beispielsweise ein benutzerdefinierter Wert (Zeichen pro Zeile) als neuer Parameter in das Plugin aufgenommen wird. (Benutzerdefiniert, da man als Nutzer unter Umständen die Textbox modifiziert hat.)

    Das wäre zwar keine komplette Lösung (aus oben genannten Gründen), aber dürfte zumindest in vielen Fällen ausreichen.


    Dafür würde ich tatsächlich empfehlen, dass man mehrere JSON-Dateien verwendet (Struktur nach eigener Logik), sodass man beim "Abarbeiten der Übersetzung" fern der nativen Sprache einen möglichst schnellen und übersichtlichen Zugriff auf die entsprechenden Strings hat.

    Wenn beispielsweise jedes Kapitel eine eigene JSON ist, kann man innerhalb dieser mit den Leerzeilen die Orte in chronologischer Reihenfolge unterteilen. Eine ausgelagerte Textdatei oder eine externe Excel-Tabelle könnte da als "Erinnerungs-Backup" herhalten.


    Was man auch ausprobieren könnte wäre, wenn man in der JSON Zeilen hinzufügt, welche nie abgerufen werden. Das wären keine klassischen Kommentare, aber könnte dieselbe Funktion erfüllen. Das habe ich bislang noch nicht ausprobiert, da ich "sauber" arbeiten wollte.

    Meine Projekte:

    Hauptprojekt:Village Siege (Arbeitstitel)Tower-Defense Spiel mit kleinem TwistPrototyp: ~ 30%GDevelop
    Nebenprojekt:Misty Hollow: Makabere Abenteuer (Arbeitstitel)klassisches RPG mit einer Mischung aus Witz und GruselDemo: ~ 5%RPG Maker MZ
  • Mir ging das jetzt mal durch den Kopf und ich denke rein zum Develop würde ich die Übersetzung noch nicht mit rein nehmen.


    Grund ist ganz einfach, weil alles noch in Bau ist. Wenn Dinge hinzu kommen, verworfen oder geändert werden, haste ziemlich viel Aufwand und wenn du Pech hast kommst du durch einander. :hmm: Zum nicht durcheinander kommen ist es denke ich sehr gut, die Links sehr Präzise zu gestalten und sie eventuell mit der ID jeder Map und der ID des Charakters zu versehen.


    Im Endeffekt, wenn das Spiel fertig ist, ist eh erst der Punkt wo man sich an die Übersetzung macht. Genau an diesem Punkt würde ich dann das Plugin einbauen, dann ändert sich ja im Spiel nichts mehr. :laechelderork:


    'Forgotten Foe' wollen wir auch zweisprachig machen, aber wie bei 'Der einzig wahre Auserwählte' würde ich es denke ich nicht noch einmal machen. Hier haben wir nach der fertigen Version diese dupliziert und alle Textboxen wurden ins englische übersetzt. Wir haben das Projekt damit also zwei mal! Problem ist dann bei Bugfixen und Erweiterungen, dass du jeden Arbeitsschritt in zwei Projekten parallel machen musst. Unglaublich viel Aufwand! :traurigerork:


    Da freue ich mich echt darauf mit dem Plugin zu arbeiten! :grinsenderork:

  • Ich kann Dich da sehr gut verstehen!

    Zu Beginn eines Projektes würde ich (und praktisch ist das bei Misty Hollow auch so) das Plugin schon Mal einbauen, um mit einer Hauptsprache zu arbeiten und überall im Projekt bereits die Verknüpfungen für die Strings zu platzieren, damit ich später nichts übersehe, was dann partout in der Hauptsprache bleibt, da ich genau DAS Event nicht mehr angepasst habe.

    Die Idee die Map- und Event-ID festzuhalten ist an sich schon sehr präzise und sollte dies verhindern - sehr cool! :D


    Von Anfang an multilingual zu arbeiten erscheint mir auch nicht sonderlich sinnvoll. Da sind die ständigen Überarbeitungen nichts, was ich mir in 2-5 Sprachen (Zahlen jetzt aus'm Bauch heraus - wahrscheinlich sind die Klassiker Deutsch, Englisch, Spanisch, Französisch, & vllt einfaches Mandarin) antun möchte - davon abgesehen ob man dies maschinell versucht oder tatsächlich noch andere Menschen ins Boot holt, welche dann ebenso betroffen sind.

    Wenn jemand masochistische Tendenzen hat und sehr sprachbegabt ist, kann die Person das natürlich gerne Mal als Selbstversuch mit der eigenen Leidensfähigkeit angehen. 8)

    Meine Projekte:

    Hauptprojekt:Village Siege (Arbeitstitel)Tower-Defense Spiel mit kleinem TwistPrototyp: ~ 30%GDevelop
    Nebenprojekt:Misty Hollow: Makabere Abenteuer (Arbeitstitel)klassisches RPG mit einer Mischung aus Witz und GruselDemo: ~ 5%RPG Maker MZ
  • Ich denke Deutsch und Englisch ist erst einmal gut zum Start, dass deckt schon einen großen Sprachraum ab. Später kann man ja noch nachliefern. :laechelderork:


    Im Endeffekt macht ja eine Übersetzung nur Sinn, wenn man einen Muttersprachler hat oder jemanden hat, der die entsprechende Sprache sehr shr gut kann. Andernfalls hat man bei der Übersetzung nicht die Qualität die man sich vielleicht wünscht. Gerade bei 'Factorio' und 'Rim World' kommen immer mal wieder Übersetzungen hinzu die Fans gemacht haben, finde ich richtig toll! Da wäre so eine JSON Datei genau richtig. Man gibt ihnen die Datei und können dann übersetzen. Das könnte man nicht machen, wie bei uns bei 'Der einzig wahre Auserwählte'.


    Andernfalls will man es übersetzen lassen, wird das teuer. Ich habe vor Jahren mal eine Übersetzung ins Französische machen lassen. Das ganze war für eine App. 250 Wörter und kam um die 25 €. Sind insgesamt 0,10 € pro Wort, was für eine Übersetzung schon echt günstig ist. War noch der günstigste Tarif, wo einmal wer fix übersetzt und gut. Keine Nachkontrolle und nix. Hochgerechnet aber auf ein Projekt was mehrere dutzend A4-Seiten hat kommt da nen stattliches Sümmchen zusammen. :geschockterork:

  • Auf jeden Fall - es ist natürlich Aufwand, aber als deutschsprachiger Entwickler wäre mir schon daran gelegen, nicht "nur" die englische Sprache zu bieten. Natürlich spielen da auch ab einem gewissen Punkt Fragen der Wirtschaftlichkeit mit hinein, aber ich sehe die Projekte welche ich habe nicht als potenzielle Haupteinkommensquelle für meinen Lebensunterhalt, dieser ist ja anderweitig abgedeckt. Ich wage sogar zu behaupten, dass es ohne eine starke Nische ("Erotik" scheint meist verhältnismäßig gut zu laufen) generell sehr schwierig sein kann, sich denselben Lebensstandard zu sichern, als wenn man angestellt ist. Da sehe ich im Spielemarkt einfach eine zu starke Übersättigung. Natürlich gibt es immer Phänomene (beispielsweise neues Spielgenre-Crossover) und den Einfluss der Influencer, aber das sind selten(er) Dinge welche man selbst in der Hand hat.

    Davon abgesehen ist es aber natürlich super, wenn man möglichst viele Menschen erreicht, was sich nicht nur in potenziellen Verkäufen (im Falle eines kommerziellen Projektes), sondern auch potenziell mehr Reviews und einem entsprechenden Ruf/Sichtbarkeit für Folgeprojekte widerspiegelt. Aber gut - ich drifte leicht ab.

    Was Übersetzungen betrifft, so bin ich echt mal gespannt, was da maschinell künftig noch alles weiter verbessert wird - inzwischen haben wir ja stellenweise schon echt einen guten Stand erreicht. RPGs stellen hier aber natürlich nochmal eine andere Herausforderung dar, als Spiele mit mehr Action, wo Dialoge eher eine Nebensächlichkeit sind und man im Zweifel lediglich das UI übersetzen muss.

    Danke übrigens für den Einblick, was das professionell so kosten kann (in Deinem Fall eine günstige Variante - wahrscheinlich vor (starker) (Kern-)Inflation und anderen Wirtschaftsfaktoren)!
    Es ist immer hilfreich, wenn man da möglichst früh weiss was gängiger(e) Standard(s) sind - gerade damit Freelancer nicht mit völlig utopischen Preisvorstellungen der Kunden konfrontiert werden, von welchen man einfach nicht leben kann. Denn leider vergessen manche schnell, dass Menschen welche sowas beruflich machen rein nach erbrachter Leistung bezahlt werden und da der Zeitfaktor stark mit hinein spielt. Es ist halt kein Hobby, in dem man endlos Zeit versenken könnte.

    Meine Projekte:

    Hauptprojekt:Village Siege (Arbeitstitel)Tower-Defense Spiel mit kleinem TwistPrototyp: ~ 30%GDevelop
    Nebenprojekt:Misty Hollow: Makabere Abenteuer (Arbeitstitel)klassisches RPG mit einer Mischung aus Witz und GruselDemo: ~ 5%RPG Maker MZ
  • Vielen Dank für das hilfreiche Tutorial! Wenn man sein Spiel mehrsprachig anbieten möchte, kommt man nicht drumherum, sich früher oder später mit einem Plugin dafür zu beschäftigen - es sei denn, man erstellt pro Sprache eine komplett eigene, downloadbare Version des Spiels. So käme man um die arbeitsintensive Pluginvariante herum, allerdings wirkt es dann natürlich aus Spielersicht auch weniger komfortabel, als wenn man einfach im Spiel eine Option ändert.


    Ich kenne noch dieses Plugin, welches (auf den ersten Blick) sehr ähnlich funktioniert:

    Localization (MZ Version) - DK Plugins
    Localization of game. Translate your project into several languages.
    dk-plugins.ru


    Aus Entwicklersicht muss ich sagen, dass ich meine Spiele erst zum Ende hin übersetze oder übersetzen lasse, entsprechend auch erst dann das Plugin einbauen würde. Es ist schlichtweg einfacher, im Maker selbst Dialoge zu ändern, als in ausgelagerten json-Dateien die richtigen Stellen wiederzufinden und dann erst wieder die richtigen Zeilenumbrüche testen zu müssen. Der Nachteil daran ist, dass einen zum Schluss ein nicht zu unterschätzender Arbeitsaufwand erwartet, vor allem bei dialoglastigen Spielen. Wenn man sich hingegen über den finalen Stand seiner Dialoge (und ggf. Bilder mit Texten) bewusst ist, spricht natürlich nichts dagegen, auch schon sehr früh mit Plugins zu arbeiten, sodass man nicht erst zur Fertigstellung des Projekts diese gewaltige Baustelle angehen muss.

  • Danke für das ausführliche Tutorial! Großes Lob für die Mühe und Sorgfalt, die du hineingesteckt hast! :laechelderork: Es gibt sicher viele, die davon profitieren werden, auch wenn diese Methode (wie jede eigentlich) natürlich nicht für jeden etwas ist.


    Was Übersetzungen betrifft, so bin ich echt mal gespannt, was da maschinell künftig noch alles weiter verbessert wird - inzwischen haben wir ja stellenweise schon echt einen guten Stand erreicht.

    Es gibt inzwischen sehr gute Tools, doch natürlich haben auch sie ein großes ABER:


    Maschinelle Übersetzungen waren zum Beispiel beim Auserwählten trotz der abartigen Textmenge nicht sinnvoll, da entscheidende Wörter wie "Spitzrübendorf", "Formfleischschmuggel", "Gammelschwert", "Sülzicon" oder "Bösonien" nun mal in keinem Wörterbuch stehen und zum einen der Wortwitz auch in die Fremdsprache transportiert werden soll, aber die Resultate auch präzise sein müssen und nicht nur irgendwie halbwegs passend. Eigennamen und Begrifflichkeiten, die nicht ohne weiteres automatisch übersetzt werden sollten, hat man in vielen Spielen.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!