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) {
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             if ((cur +1) > sbits.length) {
39                 //Roo.log("CALLING COMPLETED: " + complete);
40                 cb(complete);
41                 return;
42             }
43            // Roo.log("SEND : " + sbits[cur]);
44             Pman.gtranslate( sbits[cur], src, dest, function(result) {
45                 if (typeof(result) == 'object') {
46                     cb(result);
47                     return;
48                 }
49                 complete += complete.length ? ' ' : ''; 
50                 complete += result;
51                 cur++;
52                 transbits();
53             });
54         }
55         
56         
57         if (str.length > 400) {
58             var bits = str.split(/\s+/);
59             sbits[0]  = '';
60             for (var i =0; i < bits.length; i++) {
61                 if (sbits[cur].length + bits[i].length > 290) {
62                     cur++;
63                     sbits[cur] = bits[i];
64                     continue;
65                 }
66                 sbits[cur] += sbits[cur].length  ? ' ' : '';
67                 sbits[cur] += bits[i] + ' '
68                 
69             }
70            // Roo.log(sbits);
71             cur = 0; // reset cursor.
72             
73             transbits();
74             return;
75         }
76                 
77                 
78                 
79                 
80                 
81         
82         
83         
84         
85         var x = new Roo.data.ScriptTagProxy({ 
86             url:  'http://ajax.googleapis.com/ajax/services/language/translate', 
87             callbackParam : 'callback' 
88             
89         });
90         x.load(
91             {
92                 v: '1.0',
93                 q : str,
94                 langpair : src + '|' +dest
95             }, // end params.
96             { // reader
97                 readRecords : function (o) {
98                     if (!o.responseData) {
99                         return o;
100                     }
101                     return escapeDecode(o.responseData.translatedText);
102                 }
103             }, 
104             function (result) {
105                 cb(result);
106             },
107             this,
108             []
109         );
110         
111             
112         
113     };
114             
115     
116 Pman.gtranslate = Pman.GoogleTranslate;