X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=Pman.GoogleTranslate.js;h=0a4fcfbf672e0f6609abc1ecb0434fb73b9198a9;hp=614bcd1ea269765b2826c98e324d195b93c17653;hb=586e4eb470252d837ba18b67e4c3c1702131fd1d;hpb=8b5a0d672f21932397f575cdc00c83f42867354d diff --git a/Pman.GoogleTranslate.js b/Pman.GoogleTranslate.js index 614bcd1e..0a4fcfbf 100644 --- a/Pman.GoogleTranslate.js +++ b/Pman.GoogleTranslate.js @@ -8,14 +8,43 @@ * @param str {String} input string * @param src {String} source language (or '' for autoguess) * @param str {String} target language - * @param str {String} callback - calls back with result or an error object. + * @param cb {String} callback - calls back with result or an error object. */ -Pman.GoogleTranslate = function(str, src, dest, cb) { +Pman.GoogleTranslate = function(str, src, dest, cb, force) { // load script: var cur = 0; var sbits = []; var complete = ''; + +// if (!Pman.GoogleTranslate.key) { +// +// new Pman.Request({ +// method : 'POST', +// url : baseURL + '/Core/GoogleKey', +// success : function(data) +// { +// Pman.GoogleTranslate.key = data.data; +// +// Pman.GoogleTranslate(str, src, dest, cb, force); +// +// }, +// failure : function() { +// Roo.log("Google key fetch failed"); +// // do not display error message... +// return true; +// } +// +// +// }); +// +// +// +// +// return; +// } + + function escapeDecode(encodedString) { var output = encodedString; var binVal, thisString; @@ -31,39 +60,48 @@ Pman.GoogleTranslate = function(str, src, dest, cb) { return Roo.util.Format.htmlDecode( output); } - - + function transbits() { - if ((cur +1) > sbits.length) { - //Roo.log("CALLING COMPLETED: " + complete); - cb(complete); - return; + while (true) { + if ((cur +1) > sbits.length) { + //Roo.log("CALLING COMPLETED: " + complete); + cb(complete); + return; + } + if (!sbits[cur].length || !sbits[cur].replace(/\s+/).length) { + cur++; + continue; + } + break; } + // Roo.log("SEND : " + sbits[cur]); - Pman.gtranslate( sbits[cur], src, dest, function(result) { + Pman.GoogleTranslate( sbits[cur], src, dest, function(result) { if (typeof(result) == 'object') { cb(result); return; } + //padding might not be needed... complete += complete.length ? ' ' : ''; complete += result; cur++; transbits(); - }); + }, true); } // chunk up long strings.. - if (str.length > 300) { - var bits = str.split(/\s+/); + // we should roo.encode to test lenght.. + if (!force && str.length > 200) { + var bits = str.split(/(\s+|[0-9\u3002\uff0c\u3001\u201c\u201d]+)/); sbits[0] = ''; for (var i =0; i < bits.length; i++) { - if (sbits[cur].length + bits[i].length > 290) { + if (sbits[cur].length + bits[i].length > 190) { cur++; sbits[cur] = bits[i]; continue; } - sbits[cur] += sbits[cur].length ? ' ' : ''; + //sbits[cur] += sbits[cur].length ? ' ' : ''; sbits[cur] += bits[i] + ' ' } @@ -73,42 +111,86 @@ Pman.GoogleTranslate = function(str, src, dest, cb) { transbits(); return; } - - - - - - +// +// +// +// +// +// var x = new Roo.data.ScriptTagProxy({ +// url: 'https://www.googleapis.com/language/translate/v2', +// //'http://ajax.googleapis.com/ajax/services/language/translate', +// callbackParam : 'callback' +// +// +// }); +// + src = src.replace('_','-'); + dest = dest.replace('_','-'); + // google does not recognize HK... + switch(dest){ + case 'zh': + src = 'zh-CN'; + break; + case 'zh-HK': + src = 'zh-TW'; + break; + } + switch(dest){ + case 'zh': + dest = 'zh-CN'; + break; + case 'zh-HK': + dest = 'zh-TW'; + break; + } - var x = new Roo.data.ScriptTagProxy({ - url: 'http://ajax.googleapis.com/ajax/services/language/translate', - callbackParam : 'callback' - - }); - x.load( + new Pman.Request({ + url : baseURL + '/Core/GoogleTranslate.php', + method :'POST', + mask : 'Translating', + maskEl : document.body, + params : { + text : str, + src : src, + dest : dest + }, + success: function(o) { - v: '1.0', - q : str, - langpair : src + '|' +dest - }, // end params. - { // reader - readRecords : function (o) { - if (!o.responseData) { - return o; - } - return escapeDecode(o.responseData.translatedText); + if (!o.data) { + return o; } - }, - function (result) { - cb(result); + if(typeof(o.data.error) != 'undefined'){ + Roo.get(document.body).unmask(); + Roo.MessageBox.alert("Failure ", o.data.error.message); + return; + } + if(typeof(o.data.translations[0].translatedText) == 'undefined'){ + Roo.MessageBox.alert("Failure ", "Does not found the translated text."); + } + cb(o.data.translations[0].translatedText); }, - this, - [] - ); - - + failure: function (res) { + Roo.log(res); + if (!res.data) { + return res; + } + + if(typeof(res.data.error) != 'undefined'){ + Roo.get(document.body).unmask(); + Roo.MessageBox.alert("Failure ", res.data.error.message); + return; + } + + if(typeof(res.data.translations[0].translatedText) == 'undefined'){ + Roo.MessageBox.alert("Failure ", "Does not found the translated text."); + } + cb(res.data.translations[0].translatedText); + + //Roo.MessageBox.alert("Failure ", res.message); + } + }); };