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