package mt.text.translate; /** * Translation class fed by XML like * Atteindre un score de ::score:: Atteindre le level ::level:: Faire un temps de moins de ::time:: Faire un truc spécial dans ce jeu */ class TXml implements ITranslate{ static var TEXTS = new Hash(); public function new() { } public function init (raw:String, ?seed:Int) { var xml = Xml.parse( raw ).firstChild(); //trace ( xml.elements() ); var h = new Hash(); for( x in xml.elements() ) { var id = x.get("id"); if( id == null ) throw "Missing 'id' in data.xml"; if( h.exists(id) ) throw "Duplicate id '"+id+"' in data.xml"; var buf = new StringBuf(); for( c in x ) buf.add(c.toString()); var s = mt.deepnight.Lib.replaceTag(buf.toString(), "*", "", ""); s = mt.deepnight.Lib.replaceTag(s, "||", "", ""); //trace("text : "+id+", "+s); h.set(id,s); } TEXTS = h; } public function format(key:String, ?data:Dynamic):String { var str = TEXTS.get(key); var list = str.split("::"); var n = 0; if(data!=null){ for (k in Reflect.fields(data)){ str = StringTools.replace(str, "::" + k.substr(1) + "::", Reflect.field(data, k)); } } return str; } public function _(key:String, ?data:Dynamic):String { return format(key, data); } }