mirror of
https://github.com/eeeXun/GTT.git
synced 2025-05-21 10:00:59 -07:00
add bing pos
This commit is contained in:
parent
462ae6ae74
commit
0d6a3576d6
@ -19,6 +19,7 @@ import (
|
|||||||
const (
|
const (
|
||||||
setUpURL = "https://www.bing.com/translator"
|
setUpURL = "https://www.bing.com/translator"
|
||||||
textURL = "https://www.bing.com/ttranslatev3?IG=%s&IID=%s"
|
textURL = "https://www.bing.com/ttranslatev3?IG=%s&IID=%s"
|
||||||
|
posURL = "https://www.bing.com/tlookupv3?IG=%s&IID=%s"
|
||||||
ttsURL = "https://www.bing.com/tfettts?IG=%s&IID=%s"
|
ttsURL = "https://www.bing.com/tfettts?IG=%s&IID=%s"
|
||||||
ttsSSML = "<speak version='1.0' xml:lang='%[1]s'><voice xml:lang='%[1]s' xml:gender='Female' name='%s'><prosody rate='-20.00%%'>%s</prosody></voice></speak>"
|
ttsSSML = "<speak version='1.0' xml:lang='%[1]s'><voice xml:lang='%[1]s' xml:gender='Female' name='%s'><prosody rate='-20.00%%'>%s</prosody></voice></speak>"
|
||||||
)
|
)
|
||||||
@ -121,6 +122,46 @@ func (t *BingTranslate) Translate(message string) (translation, definition, part
|
|||||||
translation = fmt.Sprintf("%v",
|
translation = fmt.Sprintf("%v",
|
||||||
data[0].(map[string]interface{})["translations"].([]interface{})[0].(map[string]interface{})["text"])
|
data[0].(map[string]interface{})["translations"].([]interface{})[0].(map[string]interface{})["text"])
|
||||||
|
|
||||||
|
userData = url.Values{
|
||||||
|
"from": {langCode[t.GetSrcLang()]},
|
||||||
|
"to": {langCode[t.GetDstLang()]},
|
||||||
|
"text": {message},
|
||||||
|
"key": {initData.key},
|
||||||
|
"token": {initData.token},
|
||||||
|
}
|
||||||
|
req, err = http.NewRequest("POST",
|
||||||
|
fmt.Sprintf(posURL, initData.ig, initData.iid),
|
||||||
|
strings.NewReader(userData.Encode()),
|
||||||
|
)
|
||||||
|
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
req.Header.Add("User-Agent", core.UserAgent)
|
||||||
|
res, err = http.DefaultClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", "", err
|
||||||
|
}
|
||||||
|
body, err = ioutil.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
return "", "", "", err
|
||||||
|
}
|
||||||
|
// Bing will return a list request part of speech success
|
||||||
|
// Otherwises, it would return map
|
||||||
|
// Then the following err would not be nil
|
||||||
|
if err = json.Unmarshal(body, &data); err == nil {
|
||||||
|
set := make(posSet)
|
||||||
|
for _, pos := range data[0].(map[string]interface{})["translations"].([]interface{}) {
|
||||||
|
pos := pos.(map[string]interface{})
|
||||||
|
var words translationWord
|
||||||
|
|
||||||
|
words.target = pos["displayTarget"].(string)
|
||||||
|
for _, backTranslation := range pos["backTranslations"].([]interface{}) {
|
||||||
|
backTranslation := backTranslation.(map[string]interface{})
|
||||||
|
words.add(backTranslation["displayText"].(string))
|
||||||
|
}
|
||||||
|
set.add(pos["posTag"].(string), words)
|
||||||
|
}
|
||||||
|
partOfSpeech = set.format()
|
||||||
|
}
|
||||||
|
|
||||||
return translation, definition, partOfSpeech, nil
|
return translation, definition, partOfSpeech, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
44
internal/translate/bingtranslate/utils.go
Normal file
44
internal/translate/bingtranslate/utils.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package bingtranslate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type translationWord struct {
|
||||||
|
target string
|
||||||
|
backTargets []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *translationWord) add(s string) {
|
||||||
|
t.backTargets = append(t.backTargets, s)
|
||||||
|
}
|
||||||
|
|
||||||
|
type posSet map[string][]translationWord
|
||||||
|
|
||||||
|
func (set posSet) add(tag string, words translationWord) {
|
||||||
|
if _, ok := set[tag]; !ok {
|
||||||
|
set[tag] = []translationWord{words}
|
||||||
|
} else {
|
||||||
|
set[tag] = append(set[tag], words)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (set posSet) format() (s string) {
|
||||||
|
for tag := range set {
|
||||||
|
s += fmt.Sprintf("[%s]\n", tag)
|
||||||
|
for _, words := range set[tag] {
|
||||||
|
s += fmt.Sprintf("\t%s:", words.target)
|
||||||
|
firstWord := true
|
||||||
|
for _, backTarget := range words.backTargets {
|
||||||
|
if firstWord {
|
||||||
|
s += fmt.Sprintf(" %s", backTarget)
|
||||||
|
firstWord = false
|
||||||
|
} else {
|
||||||
|
s += fmt.Sprintf(", %s", backTarget)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s += "\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user