Pman.GoogleTranslate.js
[Pman.Core] / Pman.GoogleTranslate.js
1 //<script type="text/javascript">
2 /**
3  * 
4  * GoogleTranslate
5  * Translate a string using google translate API
6  * 
7  * Note: this does not handle html input at present - 
8  * @param str {String} input string
9  * @param src {String} source language (or '' for autoguess)
10  * @param str {String} target language
11  * @param str {String} callback - calls back with result or an error object.
12  */
13 Pman.GoogleTranslate = function(str, src, dest, cb, force) {
14         // load script: 
15         var cur = 0;
16         var sbits = [];
17         var complete = '';
18         
19         function escapeDecode(encodedString) {
20             var output = encodedString;
21             var binVal, thisString;
22             var myregexp = /(&#([0-9]+);)/;
23             while ((match = myregexp.exec(output)) != null
24                        && match.length > 1
25                        && match[1] != '') {
26               //     Roo.log(match);
27               binVal = parseInt(match[2]);
28               thisString = String.fromCharCode(binVal);
29               output = output.replace(match[1], thisString);
30             }
31             return Roo.util.Format.htmlDecode( output);
32         }
33         
34         
35         
36         function transbits()
37         {
38             while (true) {
39                 if ((cur +1) > sbits.length) {
40                     //Roo.log("CALLING COMPLETED: " + complete);
41                     cb(complete);
42                     return;
43                 }
44                 if (!sbits[cur].length || !sbits[cur].replace(/\s+/).length) {
45                     cur++;
46                     continue;
47                 }
48                 break;
49             }
50             
51            // Roo.log("SEND : " + sbits[cur]);
52             Pman.GoogleTranslate( sbits[cur], src, dest, function(result) {
53                 if (typeof(result) == 'object') {
54                     cb(result);
55                     return;
56                 }
57                 //padding might not be needed...
58                 complete += complete.length ? ' ' : ''; 
59                 complete += result;
60                 cur++;
61                 transbits();
62             }, true);
63         }
64         
65         // chunk up long strings..
66         // we should roo.encode to test lenght..
67         if (!force && str.length > 200) {
68             var bits = str.split(/(\s+|[0-9\u3002\uff0c\u3001\u201c\u201d]+)/);
69             sbits[0]  = '';
70             for (var i =0; i < bits.length; i++) {
71                 if (sbits[cur].length + bits[i].length > 190) {
72                     cur++;
73                     sbits[cur] = bits[i];
74                     continue;
75                 }
76                 //sbits[cur] += sbits[cur].length  ? ' ' : '';
77                 sbits[cur] += bits[i] + ' '
78                 
79             }
80            // Roo.log(sbits);
81             cur = 0; // reset cursor.
82             
83             transbits();
84             return;
85         }
86                 
87                 
88                 
89                 
90                 
91         
92         
93         
94         ,
95         var x = new Roo.data.ScriptTagProxy({ 
96             url:  'http://ajax.googleapis.com/ajax/services/language/translate', 
97             callbackParam : 'callback' 
98             
99         });
100         x.load(
101             {
102                 v: '1.0',
103                 q : str,
104                 langpair : src + '|' +dest
105             }, // end params.
106             { // reader
107                 readRecords : function (o) {
108                     if (!o.responseData) {
109                         return o;
110                     }
111                     return escapeDecode(o.responseData.translatedText);
112                 }
113             }, 
114             function (result) {
115                 cb(result);
116             },
117             this,
118             []
119         );
120         
121             
122         
123     };
124             
125     
126 Pman.gtranslate = Pman.GoogleTranslate;