author | Dan |
Sun, 27 Dec 2009 02:28:21 -0500 | |
changeset 1196 | 704ba4b9819b |
parent 780 | f65e35566b63 |
child 1227 | bdac73ed481e |
permissions | -rw-r--r-- |
/* * Enano client-side localization library */ var Language = function(lang_id) { var have_lang = false; if ( typeof(enano_lang) == 'object' ) { if ( typeof(enano_lang[lang_id]) == 'object' ) { have_lang = true; } } if ( !have_lang ) { // load the language file load_show_win('strings'); console.info('Loading language ' + lang_id + ' via AJAX synchronous request'); var ajax = ajaxMakeXHR(); var uri = makeUrlNS('Special', 'LangExportJSON/' + lang_id, enano_version); ajax.open('GET', uri, false); ajax.send(null); if ( ajax.readyState == 4 && ajax.status == 200 ) { eval_global(ajax.responseText); } load_hide_win(); } if ( typeof(enano_lang) != 'object' ) return false; if ( typeof(enano_lang[lang_id]) != 'object' ) return false; this.strings = enano_lang[lang_id]; this.lang_id = lang_id; this.placeholder = false; this.get = function(string_id, subst) { var catname = string_id.substr(0, string_id.indexOf('_')); var string_name = string_id.substr(string_id.indexOf('_') + 1); if ( typeof(this.strings[catname]) != 'object' ) return string_id; if ( typeof(this.strings[catname][string_name]) != 'string' ) return string_id; return this.perform_subst(this.strings[catname][string_name], subst); } this.perform_subst = function(str, subst) { var this_regex = /%this\.([a-z0-9_]+)%/; var match; while ( str.match(this_regex) ) { match = str.match(this_regex); str = str.replace(match[0], this.get(match[1])); } // hackish workaround for %config.*% str = str.replace(/%config\.([a-z0-9_]+)%/g, '%$1%'); if ( typeof(subst) == 'object' ) { for ( var i in subst ) { if ( !i.match(/^([a-z0-9_]+)$/) ) continue; var regex = new RegExp('%' + i + '%', 'g'); str = str.replace(regex, subst[i]); } } return str; } } var language_onload = function() { $lang = new Language(ENANO_LANG_ID); } var $lang = { get: function(t, s) { language_onload(); return $lang.get(t, s); }, placeholder: true };