summaryrefslogtreecommitdiff
path: root/src/www/js/gftranslate.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/www/js/gftranslate.js')
-rw-r--r--src/www/js/gftranslate.js25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/www/js/gftranslate.js b/src/www/js/gftranslate.js
index 5bf1aaa6f..a232bde50 100644
--- a/src/www/js/gftranslate.js
+++ b/src/www/js/gftranslate.js
@@ -13,6 +13,12 @@ gftranslate.call=function(querystring,cont) {
http_get_json(gftranslate.jsonurl+querystring,cont,errcont)
}
+function enc_langs(g,to) {
+ return Array.isArray(to)
+ ? to.map(function(l){return g+l}).join("+")
+ : g+to
+}
+
// Translate a sentence
gftranslate.translate=function(source,from,to,start,limit,cont) {
var g=gftranslate.grammar
@@ -22,7 +28,7 @@ gftranslate.translate=function(source,from,to,start,limit,cont) {
function extract(result) { cont(result[0].translations) }
if(encsrc.length<500)
gftranslate.call("?command=c-translate&input="+encsrc
- +lexer+"&unlexer=text&from="+g+from+"&to="+g+to
+ +lexer+"&unlexer=text&from="+g+from+"&to="+enc_langs(g,to)
+"&start="+start+"&limit="+limit,extract)
else cont([{error:"sentence too long"}])
}
@@ -34,9 +40,10 @@ gftranslate.wordforword=function(source,from,to,cont) {
if(from=="Chi") lexer="",source=source.split("").join(" ")
var encsrc=encodeURIComponent(source)
function extract(result) { cont(result[0].translations) }
+ var enc_to = enc_langs(g,to)
if(encsrc.length<500)
gftranslate.call("?command=c-wordforword&input="+encsrc
- +lexer+"&unlexer=text&from="+g+from+"&to="+g+to
+ +lexer+"&unlexer=text&from="+g+from+"&to="+enc_to
,extract)
else cont([{error:"sentence too long"}])
}
@@ -77,12 +84,20 @@ function trans_text_quality(text) {
return {quality:quality,text:text}
}
-function trans_quality(r) {
- var text=r.linearizations[0].text
+// find_to :: Lang -> [{to:Lang,...}] -> Int
+find_to=function(to,lins) {
+ for(var i=0;i<lins.length;i++)
+ if(lins[i].to==to) return i
+ return 0 // Hmm....
+}
+
+trans_quality=function(r,to) {
+ var ix=to ? find_to(to,r.linearizations) : 0
+ var text=r.linearizations[ix].text
if(r.prob==0) return {quality:"high_quality",text:text}
else {
var t=trans_text_quality(text)
- if(t.quality=="default_quality" && r.tree[0]=="?")
+ if(t.quality=="default_quality" && r.tree && r.tree[0]=="?")
t.quality="low_quality"
return t
}