Improved code
git-svn-id: file:///srv/svn/repo/mai/trunk@20 e410bdd4-646f-c54f-a7ce-fffcc4f439ae
This commit is contained in:
parent
a550111b23
commit
4b95465cbe
@ -12,13 +12,14 @@ type Engine interface {
|
||||
TargetLanguages() (Language, error)
|
||||
Translate(text string, from, to string) (TranslationResult, error)
|
||||
DetectLanguage(text string) (string, error)
|
||||
Tts(text, lang string) (string, error)
|
||||
}
|
||||
|
||||
type Language map[string]string
|
||||
|
||||
var Engines = map[string]Engine{
|
||||
"google": &GoogleTranslate{},
|
||||
"icibia": &ICIBA{},
|
||||
"libre": &LibreTranslate{},
|
||||
"google": &GoogleTranslate{},
|
||||
// "icibia": &ICIBA{},
|
||||
// "libre": &LibreTranslate{},
|
||||
"reverseo": &Reverso{},
|
||||
}
|
||||
|
@ -35,7 +35,6 @@ func (_ *GoogleTranslate) getLangs(type_ string) (Language, error) {
|
||||
requestURL.RawQuery = query.Encode()
|
||||
|
||||
response, err := http.Get(requestURL.String())
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -43,35 +42,27 @@ func (_ *GoogleTranslate) getLangs(type_ string) (Language, error) {
|
||||
defer response.Body.Close()
|
||||
|
||||
doc, err := goquery.NewDocumentFromReader(response.Body)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var langs Language
|
||||
var langs Language = make(Language)
|
||||
|
||||
doc.Find(".language-item").Each(func(_ int, s *goquery.Selection) {
|
||||
a := s.Find("a").First()
|
||||
|
||||
href, exists := a.Attr("href")
|
||||
|
||||
// Shouldn't happen, but here goes.
|
||||
if !exists {
|
||||
return
|
||||
}
|
||||
|
||||
langURL, err := url.Parse(href)
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
langCode := langURL.Query()[langsType][0]
|
||||
|
||||
if langCode == "auto" {
|
||||
return
|
||||
}
|
||||
|
||||
langs[langCode] = a.Text()
|
||||
})
|
||||
|
||||
@ -86,6 +77,18 @@ func (e *GoogleTranslate) TargetLanguages() (Language, error) {
|
||||
return e.getLangs("target")
|
||||
}
|
||||
|
||||
func (e *GoogleTranslate) Tts(text, lang string) (string, error) {
|
||||
requestURL, _ := url.Parse("https://translate.google.com/translate_tts")
|
||||
|
||||
query := url.Values{}
|
||||
query.Add("tl", lang)
|
||||
query.Add("q", text)
|
||||
query.Add("client", "tw-ob")
|
||||
requestURL.RawQuery = query.Encode()
|
||||
|
||||
return requestURL.String(), nil
|
||||
}
|
||||
|
||||
func (_ *GoogleTranslate) DetectLanguage(text string) (string, error) { return "", nil }
|
||||
|
||||
func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationResult, error) {
|
||||
|
@ -225,12 +225,7 @@ type icibaTranslateResponse struct {
|
||||
}
|
||||
|
||||
func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, error) {
|
||||
requestURL, err := url.Parse("https://ifanyi.iciba.com/index.php")
|
||||
|
||||
if err != nil {
|
||||
// The URL is constant, so it should never fail.
|
||||
panic(err)
|
||||
}
|
||||
requestURL, _ := url.Parse("https://ifanyi.iciba.com/index.php")
|
||||
|
||||
query := url.Values{}
|
||||
query.Add("c", "trans")
|
||||
@ -239,7 +234,6 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro
|
||||
query.Add("auth_user", "key_web_fanyi")
|
||||
|
||||
sum := md5.Sum([]byte(("6key_web_fanyiifanyiweb8hc9s98e" + text)))
|
||||
|
||||
query.Add("sign", hex.EncodeToString(sum[:])[:16])
|
||||
|
||||
requestURL.RawQuery = query.Encode()
|
||||
@ -250,7 +244,6 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro
|
||||
formData.Add("q", text)
|
||||
|
||||
response, err := http.PostForm(requestURL.String(), formData)
|
||||
|
||||
if err != nil {
|
||||
return TranslationResult{}, err
|
||||
}
|
||||
@ -286,3 +279,5 @@ func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, erro
|
||||
TranslatedText: responseJSON.Content.Out,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (_ *ICIBA) Tts(text, lang string) (string, error) { return "", nil }
|
||||
|
@ -63,6 +63,8 @@ func (e *LibreTranslate) SourceLanguages() (Language, error) { return e.getLangs
|
||||
|
||||
func (e *LibreTranslate) TargetLanguages() (Language, error) { return e.getLangs() }
|
||||
|
||||
func (e *LibreTranslate) Tts(text, lang string) (string, error) { return "", nil }
|
||||
|
||||
type libreDetectResponse []struct {
|
||||
Confidence float64 `json:"confidence"`
|
||||
LanguageCode string `json:"language"`
|
||||
|
@ -46,6 +46,8 @@ func (_ *Reverso) SourceLanguages() (Language, error) { return reversoLangs, nil
|
||||
|
||||
func (_ *Reverso) TargetLanguages() (Language, error) { return reversoLangs, nil }
|
||||
|
||||
func (_ *Reverso) Tts(text, lang string) (string, error) { return "", nil }
|
||||
|
||||
type reversoAPIResponse struct {
|
||||
LanguageDetection struct {
|
||||
DetectedLanguage string `json:"detectedLanguage"`
|
||||
|
25
web/main.go
25
web/main.go
@ -90,8 +90,8 @@ func main() {
|
||||
return c.Render("index", fiber.Map{
|
||||
"Engine": engine,
|
||||
"enginesNames": enginesNames,
|
||||
"SourceLanguages": targetLanguages,
|
||||
"TargetLanguages": sourceLanguages,
|
||||
"SourceLanguages": sourceLanguages,
|
||||
"TargetLanguages": targetLanguages,
|
||||
"OriginalText": originalText,
|
||||
"TranslatedText": translatedText,
|
||||
"From": from,
|
||||
@ -168,9 +168,6 @@ func main() {
|
||||
}
|
||||
|
||||
lang := c.Query("lang")
|
||||
if lang == "" {
|
||||
lang = "en"
|
||||
}
|
||||
|
||||
if url, err := engines.Engines[engine].Tts(text, lang); err != nil {
|
||||
return c.SendStatus(500)
|
||||
@ -188,6 +185,24 @@ func main() {
|
||||
|
||||
})
|
||||
|
||||
app.Post("/switchlanguages", func(c *fiber.Ctx) error {
|
||||
if c.Cookies("from") != "" {
|
||||
fromCookie := new(fiber.Cookie)
|
||||
fromCookie.Name = "from"
|
||||
fromCookie.Value = c.Cookies("to")
|
||||
fromCookie.Expires = time.Now().Add(24 * time.Hour * 365)
|
||||
|
||||
toCookie := new(fiber.Cookie)
|
||||
toCookie.Name = "to"
|
||||
toCookie.Value = c.Cookies("from")
|
||||
toCookie.Expires = time.Now().Add(24 * time.Hour * 365)
|
||||
|
||||
c.Cookie(fromCookie)
|
||||
c.Cookie(toCookie)
|
||||
}
|
||||
return c.Redirect("/")
|
||||
})
|
||||
|
||||
app.Static("/static", "./static")
|
||||
|
||||
app.Listen(":3000")
|
||||
|
@ -57,19 +57,21 @@
|
||||
<div class="item-wrapper">
|
||||
<textarea autofocus class="item" id="input" name="text" dir="auto"
|
||||
placeholder="Enter Text Here">{{ .OriginalText }}</textarea>
|
||||
<div class="center">
|
||||
<audio controls>
|
||||
<source type="audio/mpeg" src="{{ .TtsFrom }}">
|
||||
</audio>
|
||||
</div>
|
||||
{{if .TtsFrom}}
|
||||
<audio controls>
|
||||
<source type="audio/mpeg" src="{{ .TtsFrom }}">
|
||||
</audio>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
<div class="item-wrapper">
|
||||
<textarea id="output" class="translation item" dir="auto" placeholder="Translation"
|
||||
readonly>{{.TranslatedText}}</textarea>
|
||||
{{if .TtsTo}}
|
||||
<audio controls>
|
||||
<source type="audio/mpeg" src="{{ .TtsTo }}">
|
||||
</audio>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user