Di recente ho sviluppato un gioco Flash che ho tradotto in tedesco e inglese. Puoi dare un'occhiata qui: http://www.bioaschi.ch/?lang=en#/game . Puoi cambiare la lingua al volo nel menu delle impostazioni .
Per tradurre il gioco, ho usato il seguente approccio: ho una classe Config scritta personalizzata che è fondamentalmente solo un registro di coppie chiave => valore . La classe config può leggere da un file XML e invia anche eventi quando cambia un valore.
Per il gioco ho creato 2 diversi file di configurazione. Uno è la main
configurazione, quindi un file contenente le traduzioni (chiamate lang
). La loro main
configurazione contiene una chiave che specifica la lingua, ad es. lang = en . Nel gioco ascolto gli eventi di cambiamento su quel tasto. Ogni volta che succede, leggo / applico i valori dalla lingua appropriata.
Ecco un piccolo frammento di codice che mostra come viene cambiata la lingua nel gioco:
Da qualche parte nel codice del pannello "Impostazioni":
Config.getConfig('main').setValue('lang', 'de'); // or 'en'
Quindi in qualsiasi altro luogo in cui il testo deve essere localizzato:
// 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 + ".");
}
}
Puoi dare un'occhiata al file che viene caricato dal gioco qui: http://www.bioaschi.ch/game/language.xml
Per sostituire parti del testo con variabili (ad es. your score is %d
Trasformazioni in your score is 10000
), ti suggerisco di utilizzare l'eccellente Libreria di datastrutture poligonali . Contiene un'implementazione AS3 di Sprintf .
Invece di avere tutte le traduzioni in un unico file, potresti anche avere facilmente un singolo file per lingua.
Per completezza, ecco alcuni elenchi di codici:
Wow, questo tipo si è rivelato essere un lungo post, mi dispiace. L'approccio che ho adottato è piuttosto semplicistico e non copre gli argomenti più complicati dell'internazionalizzazione, come i formati di data , la formattazione dei numeri o delle valute, ecc. Per le traduzioni semplici funziona bene comunque.