Ich möchte einige Texte in einem Flash-Spiel (nicht Flex-Spiel), an dem ich arbeite, internationalisieren, und ich kann keinen einfachen Weg finden, dies zu erreichen ... Ich habe einige Bibliotheken und andere Lösungen gefunden, aber ich habe etwas viel Einfacheres erwartet ( Mit anderen Technologien ist es wirklich einfach.
Hast du Erfahrung damit? Wie machst du das?
flash
actionscript-3
miguelSantirso
quelle
quelle
Antworten:
Ich habe kürzlich ein Flash-Spiel entwickelt, das ich ins Deutsche und Englische übersetzt habe. Sie können es hier ansehen: http://www.bioaschi.ch/?lang=en#/game . Sie können die Sprache im Einstellungsmenü im laufenden Betrieb ändern .
Um das Spiel zu übersetzen, habe ich den folgenden Ansatz: Ich habe eine benutzerdefinierte geschrieben Config - Klasse , die im Grunde nur eine Registrierung von Schlüsseln => Wert - Paaren. Die Konfigurationsklasse kann aus einer XML-Datei lesen und Ereignisse auslösen, wenn sich ein Wert ändert.
Für das Spiel habe ich 2 verschiedene Konfigurationsdateien erstellt. Eine ist die
main
Konfiguration und dann eine Datei mit den Übersetzungen (aufgerufenlang
). Diemain
Konfiguration enthält einen Schlüssel, der die Sprache angibt, z. lang = en . Im Spiel höre ich auf Änderungsereignisse auf dieser Taste. Immer wenn das passiert, lese / wende ich die Werte aus der entsprechenden Sprache an.Hier ist ein kleiner Codeausschnitt, der zeigt, wie die Sprache im Spiel umgeschaltet wird:
Irgendwo im Bedienfeldcode "Einstellungen":
Dann überall dort, wo Text lokalisiert werden muss:
Sie können sich die Datei ansehen, die vom Spiel geladen wird: http://www.bioaschi.ch/game/language.xml
Um Teile des Textes durch Variablen zu ersetzen (z. B.
your score is %d
Transformationen inyour score is 10000
), empfehle ich die Verwendung der hervorragenden Bibliothek für polygonale Datenstrukturen . Es enthält eine AS3-Implementierung von Sprintf .Anstatt alle Übersetzungen in einer Datei zu haben, können Sie auch problemlos eine einzige Datei pro Sprache verwenden.
Der Vollständigkeit halber hier einige Codeauflistungen:
Wow, das hat sich als langer Beitrag herausgestellt, tut mir leid. Der Ansatz, den ich gewählt habe, ist ziemlich simpel und deckt nicht die komplizierteren Themen der Internationalisierung ab, wie Datumsformate , Zahlen- oder Währungsformatierungen usw. Für einfache Übersetzungen funktioniert es jedoch einwandfrei.
quelle
Aus der C ++ - Welt stammend, besteht die allgemeine Idee für das schnelle Ändern von Sprachen darin, den gesamten Sprachtext irgendwo in einer Tabelle zu speichern, wobei jeder Zeichenfolge (oder jedem Sprite, das Text enthält) eine numerische ID zugewiesen wird. Alle IDs sind in verschiedenen Sprachen gleich, zuzüglich eines Sprachversatzes. Zum Beispiel:
const LANG_EN: int = 0; const LANG_DE: int = 1000;
const STRING_HELLO_WORLD: int = 0;
var StringTable: Array / * von String * /; StringTable [STRING_HELLO_WORLD + LANG_EN] = "Hallo Welt!" StringTable [STRING_HELLO_WORLD + LANG_DE] = "Hallo, Veldt!"
Dies erfordert zwar eine beträchtliche Einrichtungszeit, muss jedoch nur einmal durchgeführt werden.
Dann verweisen Sie in Ihrem Code einfach mit der Zeichenfolge und dem aktuellen Sprachversatz auf die Tabelle: myObject.text = StringTable [STRING_HELLO_WORLD + currentLanguage];
quelle
Binden Sie Ihre Komponenten an ein flash.utils.Dictionary-Objekt. Ein Wörterbuch ist im Grunde ein assoziatives Array. Wenn Sie untereinander tauschen und Ihre Bindungen vorhanden sind, ändern sich die Ansichten automatisch. Verwendung kann Datumsformatierung usw. Informationen dort zwei platzieren. Ich habe auch ein unbeliebtes und unfreundliches "nummeriertes ID" -System eingeführt. Dies lag daran, dass Sie bei der Erforschung von Internationalisierung / mehrsprachigen Apps feststellen werden, dass einige englische Wörter je nach Kontext unterschiedlich übersetzt werden (auf Französisch oder Spanisch ist dies sehr häufig).
quelle