Implemented Definitions and Translations in Web interface

git-svn-id: file:///srv/svn/repo/mai/trunk@22 e410bdd4-646f-c54f-a7ce-fffcc4f439ae
This commit is contained in:
manerakai 2023-08-31 12:56:47 +00:00
parent 0b826f2255
commit 79983d9e7e
3 changed files with 143 additions and 85 deletions

View File

@ -120,6 +120,8 @@ func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationRe
doc, err := goquery.NewDocumentFromReader(response.Body)
translatedText := doc.Find(".result-container").Text()
if err != nil {
return TranslationResult{}, err
}
@ -164,14 +166,16 @@ func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationRe
fmt.Println("Error:", err)
return TranslationResult{}, nil
}
definitions := make(map[string][]map[string]interface{})
translations := make(map[string]map[string]map[string]interface{})
if len(raw) > 0 && raw[0] != nil &&
len(raw[0].([]interface{})) > 2 && raw[0].([]interface{})[2] != nil {
data := raw[0].([]interface{})[2].(string)
var json_ []interface{}
err = json.Unmarshal([]byte(data), &json_)
definitions := make(map[string][]map[string]interface{})
if len(json_) > 3 && json_[3] != nil &&
len(json_[3].([]interface{})) > 1 && json_[3].([]interface{})[1] != nil &&
len(json_[3].([]interface{})[1].([]interface{})) > 0 && json_[3].([]interface{})[1].([]interface{})[0] != nil {
@ -199,7 +203,7 @@ func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationRe
}
if len(definitionBox) > 1 && definitionBox[1] != nil {
definitions[definitionType.(string)][i]["use-in-sentence"] = definitionBox[1]
definitions[definitionType.(string)][i]["use_in_sentence"] = definitionBox[1]
}
if len(definitionBox) > 5 && definitionBox[5] != nil {
@ -230,7 +234,6 @@ func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationRe
}
}
translations := make(map[string]map[string]map[string]interface{})
if len(json_) > 3 && json_[3] != nil &&
len(json_[3].([]interface{})) > 5 && json_[3].([]interface{})[5] != nil &&
len(json_[3].([]interface{})[5].([]interface{})) > 0 && json_[3].([]interface{})[5].([]interface{})[0] != nil {
@ -272,11 +275,12 @@ func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationRe
}
}
}
}
return TranslationResult{
SourceLanguage: from,
Definitions: definitions,
Translations: translations,
TranslatedText: doc.Find(".result-container").Text(),
TranslatedText: translatedText,
}, nil
}

View File

@ -39,6 +39,7 @@ func main() {
ttsFrom := ""
ttsTo := ""
var translation engines.TranslationResult
if c.Method() == "POST" {
from = c.FormValue("from")
to = c.FormValue("to")
@ -47,6 +48,7 @@ func main() {
return c.SendStatus(500)
} else {
translatedText = result.TranslatedText
translation = result
}
ttsFromURL, _ := url.Parse("api/tts")
@ -93,7 +95,7 @@ func main() {
"SourceLanguages": sourceLanguages,
"TargetLanguages": targetLanguages,
"OriginalText": originalText,
"TranslatedText": translatedText,
"Translation": translation,
"From": from,
"To": to,
"TtsFrom": ttsFrom,

View File

@ -66,7 +66,7 @@
<div class="item-wrapper">
<textarea id="output" class="translation item" dir="auto" placeholder="Translation"
readonly>{{.TranslatedText}}</textarea>
readonly>{{.Translation.TranslatedText}}</textarea>
{{if .TtsTo}}
<audio controls>
<source type="audio/mpeg" src="{{ .TtsTo }}">
@ -81,6 +81,58 @@
<button type="submit">Translate with {{ .Engine }}!</button>
</div>
<br>
<div id="definitions_and_translations">
{{ if .Translation.Definitions }}
<div class="definitions">
{{ range $type, $definitions :=.Translation.Definitions }}
<span class="def_type">{{ $type }}</span>
<ol>
{{ range $definition_item := $definitions }}
<li>
{{ $definition_item.definition }}
<br>
{{with $definition_item.use_in_sentence}}
<span class="use_in_sentence">"{{$definition_item.use_in_sentence}}"</span>
<br>
{{end}}
{{with $definition_item.synonyms}}
{{ range $synonym_type, $_ := $definition_item.synonyms }}
<span class="syn">
{{if $synonym_type }}
<br>
<span class="syn_type">{{$synonym_type}}: </span>{{end}}{{ range $index, $element := index
$definition_item.synonyms $synonym_type}}{{if $index}}, {{end}}{{$element}}{{end}}
</span>
{{end}}
{{end}}
</li>
{{end}}
</ol>
{{end}}
</div>
{{ end}}
{{ if .Translation.Translations }}
<div class="translations">
{{ range $def_type, $translations := .Translation.Translations }}
<span class="def_type">{{ $def_type }}</span>
<ul>
{{ range $word, $word_translations := $translations }}
<li>
<span class="syn_type">{{$word}}:</span>
<span class="syn">{{ range $index, $element := $word_translations.words}}{{if $index}}, {{end}}{{$element}}{{end}}</span>
<span class="syn_type">{{$word_translations.frequency}}</span>
</li>
<br>
{{end}}
</ul>
{{end}}
</div>
{{end}}
</div>
</form>
<script src="/static/script.js"></script>
</body>