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