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         
20         if (!Pman.GoogleTranslate.key) {
21             
22             new Pman.Request({
23                 method : 'POST',
24                 url : baseURL + '/Core/GoogleKey',
25                 success : function(data)
26                 {
27                     Pman.GoogleTranslate.key = data.data;
28                     
29                     Pman.GoogleTranslate(str, src, dest, cb, force);
30                     
31                 }
32                 
33                 
34             });
35             
36             
37             
38             
39             return;
40         }
41         
42         
43         function escapeDecode(encodedString) {
44             var output = encodedString;
45             var binVal, thisString;
46             var myregexp = /(&#([0-9]+);)/;
47             while ((match = myregexp.exec(output)) != null
48                        && match.length > 1
49                        && match[1] != '') {
50               //     Roo.log(match);
51               binVal = parseInt(match[2]);
52               thisString = String.fromCharCode(binVal);
53               output = output.replace(match[1], thisString);
54             }
55             return Roo.util.Format.htmlDecode( output);
56         }
57         
58          
59         function transbits()
60         {
61             while (true) {
62                 if ((cur +1) > sbits.length) {
63                     //Roo.log("CALLING COMPLETED: " + complete);
64                     cb(complete);
65                     return;
66                 }
67                 if (!sbits[cur].length || !sbits[cur].replace(/\s+/).length) {
68                     cur++;
69                     continue;
70                 }
71                 break;
72             }
73             
74            // Roo.log("SEND : " + sbits[cur]);
75             Pman.GoogleTranslate( sbits[cur], src, dest, function(result) {
76                 if (typeof(result) == 'object') {
77                     cb(result);
78                     return;
79                 }
80                 //padding might not be needed...
81                 complete += complete.length ? ' ' : ''; 
82                 complete += result;
83                 cur++;
84                 transbits();
85             }, true);
86         }
87         
88         // chunk up long strings..
89         // we should roo.encode to test lenght..
90         if (!force && str.length > 200) {
91             var bits = str.split(/(\s+|[0-9\u3002\uff0c\u3001\u201c\u201d]+)/);
92             sbits[0]  = '';
93             for (var i =0; i < bits.length; i++) {
94                 if (sbits[cur].length + bits[i].length > 190) {
95                     cur++;
96                     sbits[cur] = bits[i];
97                     continue;
98                 }
99                 //sbits[cur] += sbits[cur].length  ? ' ' : '';
100                 sbits[cur] += bits[i] + ' '
101                 
102             }
103            // Roo.log(sbits);
104             cur = 0; // reset cursor.
105             
106             transbits();
107             return;
108         }
109                 
110                 
111                 
112                 
113           
114         var x = new Roo.data.ScriptTagProxy({ 
115             url:   'https://www.googleapis.com/language/translate/v2',
116                   //'http://ajax.googleapis.com/ajax/services/language/translate', 
117             callbackParam : 'callback'
118             
119             
120         });
121         /// fix some of the languages..
122         //switch (dest) {
123         //        case 'zh-CN' : dest = 'zh-CN'; break;
124          //       case 'zh-HK' : dest = 'zh-TW'; break;
125          //           
126         //}
127          
128         
129         x.load(
130             {
131                 key :  Pman.GoogleTranslate.key,
132               //  v: '1.0',
133                 q : str,
134                 source : src,
135                 target : dest
136                 //langpair : src + '|' +dest
137             }, // end params.
138             { // reader
139                 readRecords : function (o) {
140                     Roo.log(o);
141                     if (!o.responseData) {
142                         return o;
143                     }
144                     return escapeDecode(o.responseData.translations[0].translatedText);
145                 }
146             }, 
147             function (result) {
148                 cb(result);
149             },
150             this,
151             []
152         );
153         
154             
155         
156     };
157             
158     
159 Pman.gtranslate = Pman.GoogleTranslate;