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 (aufgerufen lang
). Die main
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":
Config.getConfig('main').setValue('lang', 'de'); // or 'en'
Dann überall dort, wo Text lokalisiert werden muss:
// this is in the construtor or some init method
...
var cfg:Config = Config.getConfig('main');
cfg.addEventListener(ConfigEvent.CONFIG_CHANGE, onConfigChange);
updateText(cfg.getValue('lang', 'en') + '.');
}
private function updateText(langns:String) : void {
var langCfg:Config = Config.getConfig('lang');
this.title.htmlText = langCfg.getValue(langns + "credits.TITLE", "<title>");
this.text.htmlText = langCfg.getValue(langns + "credits.TEXT", "<text>");
_btnClose.label = langCfg.getValue(langns + 'highscore.CLOSE', 'X');
}
private function onConfigChange(evt:ConfigEvent) : void {
if(evt.key == 'lang'){
updateText(evt.value + ".");
}
}
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 in your 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.