(function(){ // global registry if (typeof(gtrans) == 'undefined') { window.gtrans = {}; } // send debugging output gtrans.debug = false; // fake firebug if it's not available if (!window.console || !console.firebug) { window.console = {}; var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {}; } gtrans.init = function() { google.language.getBranding('google_translate_branding'); switch(gtrans.type) { case 'detect': //alert('detect'); gtrans.init_detect(); break; case 'translate': default: //alert('translate'); gtrans.init_translate(); break; } }; // initialization gtrans.init_translate = function() { // set up to and from options gtrans.from_options = []; gtrans.to_options = []; gtrans.from_options.push(''); gtrans.from_options.push(''); gtrans.from_options.push(''); gtrans.from_options.push(''); gtrans.from_options.push(''); gtrans.to_options.push(''); gtrans.to_options.push(''); gtrans.to_options.push(''); var stuff = '', lang_code = '', phrase = '', addclass = ''; for (i in google.language.Languages) { lang_code = google.language.Languages[i]; lang_code_ph = gtrans.str_replace('-', '_', lang_code); stuff += '\n' + i + ' : ' + lang_code; if (lang_code && typeof(gtrans.phrase['lang_' + lang_code_ph]) != 'undefined') { phrase = gtrans.phrase['lang_' + lang_code_ph]; } else if (gtrans.debug) { // no phrase phrase = i + ' (' + lang_code + ')'; } else { phrase = ''; } if (phrase) { addclass = ' class="gtrans_optsortorder-b' + phrase + '"'; gtrans.to_options.push(''); gtrans.from_options.push(''); } } gtrans.dev_debug(stuff); // sort function function gtrans_sort_options(a, b) { var start_text = 'class="gtrans_optsortorder-'; var end_text = '"'; var a_start_pos = a.indexOf(start_text) + start_text.length; var a_end_pos = a.indexOf(end_text, a_start_pos); var a_lang = a.substr(a_start_pos, a_end_pos - a_start_pos); var b_start_pos = b.indexOf(start_text) + start_text.length; var b_end_pos = b.indexOf(end_text, b_start_pos); var b_lang = b.substr(b_start_pos, b_end_pos - b_start_pos); // lowercase a_lang = (a_lang + '').toLowerCase(); b_lang = (b_lang + '').toLowerCase(); // remove accents var accents = ['á', 'é', 'í', 'ó', 'ú', 'ü']; var replacements = ['a', 'e', 'i', 'o', 'u', 'u']; var i; for (i in accents) { a_lang = gtrans.str_replace(accents[i], replacements[i], a_lang); b_lang = gtrans.str_replace(accents[i], replacements[i], b_lang); } var retval = ( (a_lang == b_lang) ? 0 : ((a_lang > b_lang) ? 1 : -1)); gtrans.dev_debug('A: ' + a_lang + ' B: ' + b_lang + ' RETVAL: ' + retval + ' ORIG: A: ' + a + ' B: ' + b); return retval; } gtrans.from_options.sort(gtrans_sort_options) gtrans.to_options.sort(gtrans_sort_options); gtrans.from_options = gtrans.from_options.join(''); gtrans.to_options = gtrans.to_options.join(''); // populate the select lists var from_lang = YAHOO.util.Dom.get('gtrans_from_lang_span'); var to_lang = YAHOO.util.Dom.get('gtrans_to_lang_span'); from_lang.innerHTML = ''; to_lang.innerHTML = ''; //YAHOO.util.Event.on('gtrans_' + postid, 'click', gtrans.trans_start); //YAHOO.util.Event.on('gtrans_cancel_' + postid, 'click', gtrans.trans_cancel); //YAHOO.util.Event.on('gtrans_trans_' + postid, 'click', gtrans.trans_exec); //YAHOO.util.Event.on('gtrans_cancel_trans_' + postid, 'click', gtrans.trans_cancel_exec); YAHOO.util.Event.on('gtrans_button_translate', 'click', gtrans.button_translate); YAHOO.util.Event.on('gtrans_button_cancel', 'click', gtrans.button_cancel); }; // initialize detect gtrans.init_detect = function() { YAHOO.util.Event.on('gtrans_button_detect', 'click', gtrans.button_detect); }; // cancel the translation gtrans.button_cancel = function(e) { YAHOO.util.Event.stopEvent(e); YAHOO.util.Dom.setStyle('gtrans_translating', 'display', 'none'); }; // do the translation gtrans.button_translate = function(e) { YAHOO.util.Event.stopEvent(e); YAHOO.util.Dom.setStyle('gtrans_translating', 'display', ''); // clear the translation box var trans = YAHOO.util.Dom.get('gtrans_translation'); trans.innerHTML = ''; // do translation var thetext = YAHOO.util.Dom.get('gtrans_text').value; var from_lang = YAHOO.util.Dom.get('gtrans_from_lang').value; var to_lang = YAHOO.util.Dom.get('gtrans_to_lang').value; if (from_lang == 'auto') { from_lang = ''; } if (thetext == '') { YAHOO.util.Dom.setStyle('gtrans_translating', 'display', 'none'); trans.innerHTML = '' + gtrans.phrase['enter_text_to_translate'] + ''; } else { //alert('text: ' + text + ' from_lang: ' + from_lang + ' to_lang: ' + to_lang); google.language.translate(thetext, from_lang, to_lang, gtrans.translation_handler); } }; // do detection gtrans.button_detect = function(e) { YAHOO.util.Event.stopEvent(e); YAHOO.util.Dom.setStyle('gtrans_translating', 'display', ''); // clear the output box var output = YAHOO.util.Dom.get('gtrans_output'); output.innerHTML = ''; var text = YAHOO.util.Dom.get('gtrans_text'); //alert(text.value); if (text.value == '') { YAHOO.util.Dom.setStyle('gtrans_translating', 'display', 'none'); var output = YAHOO.util.Dom.get('gtrans_output'); output.innerHTML = '' + gtrans.phrase['enter_text_to_detect'] + ''; } else { google.language.detect(text.value, gtrans.lang_detect_handler); } }; // handle detected language gtrans.lang_detect_handler = function(result) { YAHOO.util.Dom.setStyle('gtrans_translating', 'display', 'none'); var output = YAHOO.util.Dom.get('gtrans_output'); if (!result.error && result.language) { var lang = ''; var lang_code = result.language; var lang_code_ph = gtrans.str_replace('-', '_', lang_code); if (gtrans.phrase['lang_' + lang_code_ph]) { lang = gtrans.phrase['lang_' + lang_code_ph] + ' (' + lang_code + ')'; } else { var i; for (i in google.language.Languages) { if (lang_code == google.language.Languages[i]) { // show lang code with google constant lang = i + ' (' + lang_code + ')'; } } if (lang == '') { // show the bare language code, since we have nothing else lang = lang_code; } } function round_to(num, dec) { return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec); } output.innerHTML = '' + gtrans.phrase['result'] + ':