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" @@ -73,14 +73,14 @@ wc.translate=function() { function show_pick(i) { return function() { show_trans(i); return false; } } function show_picks() { clear(p) - for(var i=0;i"+(r.tree||"") - if(wc.p /*&& rs.length>1*/) show_picks() + if(wc.p /*&& so.rs.length>1*/) show_picks() //if(f.speak.checked) wc.speak(t.text,f.to.value) } so.target.onclick=show_more function show_trans(i) { - var r=rs[i] + var r=so.rs[i] replaceChildren(so.target,text(r.text)) so.text=r.text so.target.className=r.t.quality - current_pick=i + so.current_pick=i if(wc.selected==so) show_more() } function showit2(r) { - rs.push(r) - var j=rs.length-1 - if(current_pick==j) show_trans(j) + so.rs.push(r) + var j=so.rs.length-1 + if(so.current_pick==j) show_trans(j) else if(wc.selected==so) show_picks() //disable(false) } - function showit(r) { - r.t=trans_quality(r) + function showit(r,grammar) { + r.grammar=grammar + r.t=trans_quality(r,grammar+f.to.value) r.text=r.t.text showit2(r) } function show_words(r) { - r.text=r.linearizations[0].text + var ix=find_to(gftranslate.grammar+f.to.value,r.linearizations) + r.text=r.linearizations[ix].text r.t={quality:"bad_quality",text:r.text} showit2(r) } @@ -130,17 +132,17 @@ wc.translate=function() { if(tra.length>=1) { var r=tra[0] if(r.error!=undefined) { - if(i==0 && rs.length==0) show_error(tra[0].error) + if(i==0 && so.rs.length==0) show_error(tra[0].error) } else { var r=tra[0] if(r.linearizations) show_words(r) } } - else if(i==0 && rs.length==0) + else if(i==0 && so.rs.length==0) show_error("Unable to translate") } - gftranslate.wordforword(text,f.from.value,f.to.value,step3) + gftranslate.wordforword(text,f.from.value,wc.languages || f.to.value,step3) } function trans(text,i,count) { @@ -148,7 +150,7 @@ wc.translate=function() { if(tra.length>=1) { var r=tra[0] if(r.error!=undefined) { - if(i==0 && rs.length==0) { + if(i==0 && so.rs.length==0) { //show_error(tra[0].error) word_for_word(text) } @@ -156,15 +158,15 @@ wc.translate=function() { else { for(var ti=0;ti=1) { var r=trans[0] r.prob=0 - showit(r) + showit(r,wc.cnl) } step2(text) } wc.pgf_online.translate({from:wc.cnl+f.from.value, - to:wc.cnl+f.to.value, + //to:wc.cnl+f.to.value, lexer:"text",unlexer:"text",input:text}, step3cnl, function(){step2(text)}) @@ -187,6 +189,22 @@ wc.translate=function() { else step2(so.input) } + function change_segment_to(so,to) { + var rs=so.rs + if(rs) { + for(var i=0;i