J'ai récemment développé un jeu flash que j'ai traduit en allemand et en anglais. Vous pouvez le consulter ici: http://www.bioaschi.ch/?lang=en#/game . Vous pouvez changer la langue à la volée dans le menu des paramètres .
Pour traduire le jeu, j'ai utilisé l'approche suivante: J'ai une classe Config écrite personnalisée qui est fondamentalement juste un registre de paires clé => valeur . La classe config peut lire à partir d'un fichier XML et distribue également des événements lorsqu'une valeur change.
Pour le jeu, j'ai créé 2 fichiers de configuration différents. L'un est la main
configuration, puis un fichier contenant les traductions (appelé lang
). Leur main
configuration contient une clé qui spécifie la langue, par exemple. lang = en . Dans le jeu, j'écoute les événements de changement sur cette touche. Chaque fois que cela se produit, je lis / applique les valeurs de la langue appropriée.
Voici un petit extrait de code qui montre comment la langue est changée dans le jeu:
Quelque part dans le code du panneau "Paramètres":
Config.getConfig('main').setValue('lang', 'de'); // or 'en'
Puis n'importe où ailleurs où le texte doit être localisé:
// 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 + ".");
}
}
Vous pouvez consulter le fichier en cours de chargement par le jeu ici: http://www.bioaschi.ch/game/language.xml
Pour remplacer des parties du texte par des variables (par exemple, se your score is %d
transforme en your score is 10000
), je vous suggère d'utiliser l'excellente bibliothèque des infrastructures polygonales . Il contient une implémentation AS3 de Sprintf .
Au lieu d'avoir toutes les traductions dans un seul fichier, vous pouvez également facilement avoir un seul fichier par langue.
Par souci d'exhaustivité, voici quelques listes de codes:
Wow, ce s'est avéré être un long post, je suis désolé. L'approche que j'ai adoptée est plutôt simpliste et ne couvre pas les sujets les plus compliqués de l'internationalisation, comme les formats de date , le formatage des nombres ou des devises, etc. Pour les traductions simples, cela fonctionne très bien.