Wide Coverage Demo App: show all Phrasebook translations

Also improve behaviour for languages that are missing in Phrasebook (Chinese).
Also update the initial set of languages in the menus to match Translate11.pgf.
This commit is contained in:
hallgren
2014-05-07 23:42:05 +00:00
parent b3d92a1378
commit b7bd866237
3 changed files with 69 additions and 40 deletions

View File

@@ -85,20 +85,23 @@ function trans_text_quality(text) {
} }
// find_to :: Lang -> [{to:Lang,...}] -> Int // find_to :: Lang -> [{to:Lang,...}] -> Int
find_to=function(to,lins) { function find_to(to,lins) {
for(var i=0;i<lins.length;i++) for(var i=0;i<lins.length;i++)
if(lins[i].to==to) return i if(lins[i].to==to) return i
return 0 // Hmm.... return -1 // Hmm....
} }
trans_quality=function(r,to) { function trans_quality(r,to) {
var ix=to ? find_to(to,r.linearizations) : 0 var ix=to ? find_to(to,r.linearizations) : 0
var text=r.linearizations[ix].text if(ix<0) return null
if(r.prob==0) return {quality:"high_quality",text:text}
else { else {
var t=trans_text_quality(text) var text=r.linearizations[ix].text
if(t.quality=="default_quality" && r.tree && r.tree[0]=="?") if(r.prob==0) return {quality:"high_quality",text:text}
t.quality="low_quality" else {
return t var t=trans_text_quality(text)
if(t.quality=="default_quality" && r.tree && r.tree[0]=="?")
t.quality="low_quality"
return t
}
} }
} }

View File

@@ -57,9 +57,15 @@ wc.translate=function() {
return s.split(/([.!?]+[ \t\n]+|\n\n+|[ \t\n]*[-•*+#]+[ \t\n]+)/) return s.split(/([.!?]+[ \t\n]+|\n\n+|[ \t\n]*[-•*+#]+[ \t\n]+)/)
} }
function find_pick(rs) {
for(var i=0;i<rs.length && !rs[i].t;i++)
;
return i
}
function translate_segment(so) { // so = segment output function translate_segment(so) { // so = segment output
so.rs=[] // list of alternative translations for this segment so.rs=[] // list of alternative translations for this segment
so.current_pick=0 // index of currently selected alternative so.current_pick= -1 // index of currently selected alternative
function show_error(msg) { function show_error(msg) {
//if(e) e.innerHTML="<span class=low_quality>Translation problem: "+msg+"</span>" //if(e) e.innerHTML="<span class=low_quality>Translation problem: "+msg+"</span>"
@@ -74,14 +80,16 @@ wc.translate=function() {
function show_picks() { function show_picks() {
clear(p) clear(p)
for(var i=0;i<so.rs.length;i++) { for(var i=0;i<so.rs.length;i++) {
p.appendChild(text(" ")) if(so.rs[i].t) {
var pick=text(i+1) // +"⃝" var pick=text(i+1) // +"⃝"
if(i!=so.current_pick) { if(i!=so.current_pick) {
var pick=node("a",{href:"#"},[pick]) var pick=node("a",{href:"#"},[pick])
pick.onclick=pick.onmouseover=show_pick(i) pick.onclick=pick.onmouseover=show_pick(i)
}
var q=so.rs[i].t.quality
p.appendChild(text(" "))
p.appendChild(span_class("pick "+q,pick))
} }
var q=so.rs[i].t.quality
p.appendChild(span_class("pick "+q,pick))
} }
/* /*
p.appendChild(wrap_class("small","pick", p.appendChild(wrap_class("small","pick",
@@ -101,31 +109,37 @@ wc.translate=function() {
function show_trans(i) { function show_trans(i) {
var r=so.rs[i] var r=so.rs[i]
replaceChildren(so.target,text(r.text)) if(!r.t) {
so.text=r.text i=find_pick(so.rs)
so.target.className=r.t.quality r=so.rs[i]
so.current_pick=i }
if(wc.selected==so) show_more() if(r && r.t) {
replaceChildren(so.target,text(r.t.text))
so.text=r.t.text
so.target.className=r.t.quality
so.current_pick=i
if(wc.selected==so) show_more()
}
} }
function showit2(r,grammar) { function showit2(r,grammar) {
r.grammar=grammar r.grammar=grammar
so.rs.push(r) so.rs.push(r)
var j=so.rs.length-1 var j=so.rs.length-1
if(so.current_pick==j) show_trans(j) if(so.current_pick<0 || so.current_pick==j) show_trans(j)
else if(wc.selected==so) show_picks() else if(wc.selected==so) show_picks()
//disable(false) //disable(false)
} }
function showit(r,grammar) { function showit(r,grammar) {
r.t=trans_quality(r,grammar+f.to.value) r.t=trans_quality(r,grammar+f.to.value)
r.text=r.t.text
showit2(r,grammar) showit2(r,grammar)
} }
function show_words(r) { function show_words(r) {
var g=gftranslate.grammar var g=gftranslate.grammar
var ix=find_to(g+f.to.value,r.linearizations) var ix=find_to(g+f.to.value,r.linearizations)
r.text=r.linearizations[ix].text if(ix>=0) {
r.t={quality:"bad_quality",text:r.text} r.t={quality:"bad_quality",text:r.linearizations[ix].text}
showit2(r,g) showit2(r,g)
}
} }
function word_for_word(text,cont) { function word_for_word(text,cont) {
@@ -174,9 +188,11 @@ wc.translate=function() {
function step3cnl(results) { function step3cnl(results) {
var trans=results[0].translations var trans=results[0].translations
if(trans && trans.length>=1) { if(trans && trans.length>=1) {
var r=trans[0] for(var i=0;i<trans.length;i++) {
r.prob=0 var r=trans[i]
showit(r,wc.cnl) r.prob=0
showit(r,wc.cnl)
}
} }
step2(text) step2(text)
} }
@@ -193,15 +209,19 @@ wc.translate=function() {
function change_segment_to(so,to) { function change_segment_to(so,to) {
var rs=so.rs var rs=so.rs
if(rs) { if(rs) {
for(var i=0;i<rs.length;i++) { for(var i=0;i<rs.length;i++)
var r=rs[i] rs[i].t=trans_quality(rs[i],rs[i].grammar+to)
r.t=trans_quality(r,r.grammar+to) var i=so.current_pick
r.text=r.t.text if(!rs[i].t) {
if(i==so.current_pick) { i=find_pick(rs)
so.text=r.text so.current_pick=i
replaceChildren(so.target,text(r.text)) clear(p)
} wc.selected=null
} }
var r=rs[i]
so.text=r.t.text
replaceChildren(so.target,text(r.t.text))
so.target.className=r.t.quality
} }
so.to=to so.to=to
} }
@@ -267,7 +287,7 @@ wc.colors=function() {
wc.swap=function() { wc.swap=function() {
var f=wc.f var f=wc.f
function txt(r) { return r.text } function txt(r) { return r.t.text }
f.input.value=wc.os.map(txt).join("").trimRight() f.input.value=wc.os.map(txt).join("").trimRight()
var from=f.from.value var from=f.from.value
f.from.value=f.to.value f.from.value=f.to.value

View File

@@ -38,11 +38,14 @@ small { color: #666; }
<select name=from> <select name=from>
<option value=Bul>Bulgarian</option> <option value=Bul>Bulgarian</option>
<option value=Chi>Chinese</option> <option value=Chi>Chinese</option>
<option value=Dut>Dutch</option>
<option value=Eng selected>English</option> <option value=Eng selected>English</option>
<option value=Fin>Finnish</option> <option value=Fin>Finnish</option>
<option value=Fre>French</option> <option value=Fre>French</option>
<option value=Ger>German</option> <option value=Ger>German</option>
<option value=Hin>Hindi</option> <option value=Hin>Hindi</option>
<option value=Ita>Italian</option>
<option value=Spa>Spanish</option>
<option value=Swe>Swedish</option> <option value=Swe>Swedish</option>
</select> </select>
<input type=button value="Clear" onclick="wc.clear()"> <input type=button value="Clear" onclick="wc.clear()">
@@ -52,11 +55,14 @@ small { color: #666; }
<select name=to onchange="wc.translate()"> <select name=to onchange="wc.translate()">
<option value=Bul>Bulgarian</option> <option value=Bul>Bulgarian</option>
<option value=Chi>Chinese</option> <option value=Chi>Chinese</option>
<option value=Dut>Dutch</option>
<option value=Eng>English</option> <option value=Eng>English</option>
<option value=Fin>Finnish</option> <option value=Fin>Finnish</option>
<option value=Fre>French</option> <option value=Fre>French</option>
<option value=Ger>German</option> <option value=Ger>German</option>
<option value=Hin>Hindi</option> <option value=Hin>Hindi</option>
<option value=Ita>Italian</option>
<option value=Spa>Spanish</option>
<option value=Swe selected>Swedish</option> <option value=Swe selected>Swedish</option>
</select> </select>
<input name=colors type=checkbox checked onchange="wc.colors()"> Colors <input name=colors type=checkbox checked onchange="wc.colors()"> Colors
@@ -83,7 +89,7 @@ small { color: #666; }
</div> </div>
<p> <p>
<div class=modtime><small> <div class=modtime><small>
<!-- hhmts start -->Last modified: Thu Apr 17 15:45:17 CEST 2014 <!-- hhmts end --> <!-- hhmts start -->Last modified: Thu May 8 01:37:42 CEST 2014 <!-- hhmts end -->
</small></div> </small></div>
<script src="js/support.js"></script> <script src="js/support.js"></script>
<script src="js/gftranslate.js"></script> <script src="js/gftranslate.js"></script>