FileStriker Geschrieben 14. Juli 2015 Melden Share Geschrieben 14. Juli 2015 Hallo Leute, Erst einmal hoffe ich, dass ich das an der richtigen Stelle poste. Ich hab vor ein paar Tagen ein Script für multi language geschrieben. Für dieses Script braucht ihr einmal ein C# Script mit dem Namen „XmlReader“ und eine XML-Datei, die ihr dann „Languages“ nennt. Das C#-Script sieht so aus: using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; using System.Xml; using System.Text; public class XmlReader : MonoBehaviour { public TextAsset dictionary; public int currentLanguage; public string GetName(string name){ XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(dictionary.text); XmlNodeList languageList = xmlDoc.GetElementsByTagName("language"); int i = 0; if(currentLanguage < languageList.Count) i = currentLanguage; XmlNodeList languageContent = languageList[i].ChildNodes; foreach(XmlNode value in languageContent) { if(value.Name == name){ name = value.InnerText; break; } } return name; } } Die xml-Datei könnte dann bei euch z.B. so aussehen: <?xml version="1.0" encoding="utf-8" ?> <languages> <language> <languageName>English</languageName> <Stone>Stone</Stone> <Wood>Wood</Wood> </language> <language> <languageName>Deutsch</languageName> <Stone>Stein</Stone> <Wood>Holz</Wood> </language> </languages> Habt ihr beide Dateien fertig so füge das C#-Script einem GameObject hinzu und an der stelle für „dictionary“ kommt die xml-Datei rein. Mit der Funktion „GetName“ also am Beispiel meiner xml-Datei GetName(„Stone“) und wenn dann zuvor als „currentLanguage = 1“ (Deutsch) ausgewählt wurde bekommt die Funktion als Rückmeldung „Stein“. Hoffe ihr könnt es gebrauche LG FileStriker 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 14. Juli 2015 Melden Share Geschrieben 14. Juli 2015 Bin echt kein Freund von xml. Für mich ist das zu unübersichtlich. Ich mag eher die Sachen wo man extra language files anlegt. Dann sowas wie stone = Stein macht oder sowas Aber trotzdem nützlicher Script Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Djeurissen Geschrieben 15. Juli 2015 Melden Share Geschrieben 15. Juli 2015 Joa für sowas würde ich lieber die ResX Dateien von Visual Studio bentuzen^^ Aber ich schließe mich meinem Vorredner an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hrungdak Geschrieben 15. Juli 2015 Melden Share Geschrieben 15. Juli 2015 XML ist ein ziemlich flexibles System, das in der IT-Welt überall eingesetzt wird. Insofern halte ich den Ansatz, XML zu benutzen, für eine gute Wahl. Ich wäre allerdings anders vorgegangen: <translation> <translate id="1"> <item language="english" value="stone" /> <item language="deutsch" value="Stein" /> </translate> <translate id="2"> <item language="english" value="wood" /> <item language="deutsch" value="Holz" /> </translate> <translate id="3"> <item language="english" value="Mary has a little lamb" /> <item language="deutsch" value="Hier ist die Kacke am dampfen" /> </translate> </translation> Hat den Vorteil, dass alle Sprachvarianten in einem XML-Block stehen. Ich würde auch den Nodes nicht direkt den Namen geben. <Stone>Stone</Stone> <Wood>Wood</Wood> hat den Nachteil, dass es umständlich wiederzufinden ist. Was machst du, wenn du mal einen ganzen Satz übersetzen willst? <Mary has a little lamb> geht nicht. Ohne Leerzeichen? Groß-Kleinschreibung? Umlaute? Außerdem kannst du das auch wieder nur umständlich mit XSLT und XPATH bearbeiten. Deine GetName-Methode ist von der Performance her relativ langsam. Jedesmal, wenn du eine Übersetzung brauchst, liest du ein Dictionary ein und gehst es dann per komplizierter Schleife durch. Der User wechselt ja nicht ständig seine Sprache. Wenn die Sprache gewechselt wird, würde ich eine Hashtable erstellen, die nur Items in der gewünschten Sprache enthält, und auf die dann per Static-Klasse zugreifen. Das Initialisieren der Hash-Table passiert ja nur beim Wechseln der Sprache, also normalerweise nur einmal pro Spielstart. Zu guter Letzt ist XmlDocument die umständlichere Variante. In .Net gibts die XDocument-Klasse, die wesentlich einfacher zu handhaben ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mark Geschrieben 15. Juli 2015 Melden Share Geschrieben 15. Juli 2015 *hust* Im gleichen SubForum auf der ersten Seite: http://forum.unity-community.de/topic/6346-stringtable/ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hrungdak Geschrieben 15. Juli 2015 Melden Share Geschrieben 15. Juli 2015 *hust* Im gleichen SubForum auf der ersten Seite: http://forum.unity-c...46-stringtable/ Gut. Wenn dann noch die Überschrift etwas brauchbarer wäre... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Mark Geschrieben 15. Juli 2015 Melden Share Geschrieben 15. Juli 2015 Stimmt schon, wollte auch das Snippet nicht schlecht reden, denn es zeigt relativ simpel an einem Beispiel wie man XML Files auslesen kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Metus Geschrieben 15. Juli 2015 Melden Share Geschrieben 15. Juli 2015 Und auf jeden Fall Danke für die konsequente Durchführung des open Source gedankens Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.