- Timestamp:
- Sep 2, 2023, 12:15:30 PM (21 months ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/engines/engine.go
r21 r23 9 9 10 10 type Engine interface { 11 InternalName() string12 11 DisplayName() string 13 12 SourceLanguages() (Language, error) 14 13 TargetLanguages() (Language, error) 15 14 Translate(text string, from, to string) (TranslationResult, error) 16 DetectLanguage(text string) (string, error)17 15 Tts(text, lang string) (string, error) 18 16 } … … 22 20 var Engines = map[string]Engine{ 23 21 "google": &GoogleTranslate{}, 24 // "icibia": 22 // "icibia": &ICIBA{}, 25 23 // "libre": &LibreTranslate{}, 26 24 "reverseo": &Reverso{}, -
trunk/engines/google.go
r22 r23 16 16 type GoogleTranslate struct{} 17 17 18 func (_ *GoogleTranslate) InternalName() string { return "google" }19 20 18 func (_ *GoogleTranslate) DisplayName() string { return "Google" } 21 19 … … 30 28 31 29 default: 32 panic(fmt.Errorf("getLangs was passed an invalid language type: %s", langsType))30 return nil, fmt.Errorf("Invalid language type: %s", langsType) 33 31 } 34 32 … … 94 92 return requestURL.String(), nil 95 93 } 96 97 func (_ *GoogleTranslate) DetectLanguage(text string) (string, error) { return "", nil }98 94 99 95 func (_ *GoogleTranslate) Translate(text string, from, to string) (TranslationResult, error) { … … 276 272 } 277 273 } 274 275 if len(json_) > 0 && json_[0] != nil && len(json_[0].([]interface{})) > 2 && json_[0].([]interface{})[2] != nil { 276 from = json_[0].([]interface{})[2].(string) 277 } 278 278 } 279 279 -
trunk/engines/iciba.go
r20 r23 12 12 // ICIBA is an engine that fetches data from https://www.iciba.com. 13 13 type ICIBA struct{} 14 15 func (_ *ICIBA) InternalName() string { return "iciba" }16 14 17 15 func (_ *ICIBA) DisplayName() string { return "iCIBA" } … … 216 214 func (_ *ICIBA) TargetLanguages() (Language, error) { return icibaLanguages, nil } 217 215 218 func (_ *ICIBA) DetectLanguage(text string) (string, error) { return "", nil }219 220 type icibaTranslateResponse struct {221 Content struct {222 From string `json:"from"`223 Out string `json:"out"`224 } `json:"content"`225 }226 227 216 func (_ *ICIBA) Translate(text string, from, to string) (TranslationResult, error) { 228 217 requestURL, _ := url.Parse("https://ifanyi.iciba.com/index.php") … … 255 244 } 256 245 257 var responseJSON icibaTranslateResponse 246 var responseJSON struct { 247 Content struct { 248 From string `json:"from"` 249 Out string `json:"out"` 250 } `json:"content"` 251 } 258 252 259 253 if err := json.NewDecoder(response.Body).Decode(&responseJSON); err != nil { -
trunk/engines/libretranslate.go
r20 r23 23 23 APIKey string 24 24 } 25 26 func (_ *LibreTranslate) InternalName() string { return "libre" }27 25 28 26 func (_ *LibreTranslate) DisplayName() string { return "LibreTranslate" } … … 71 69 } 72 70 73 func (e *LibreTranslate) DetectLanguage(text string) (string, error) {71 func (e *LibreTranslate) detectLanguage(text string) (string, error) { 74 72 formData := map[string]string{"q": text} 75 73 … … 125 123 } 126 124 127 type libreTranslateResponse struct {128 TranslatedText string `json:"translatedText"`129 }130 131 125 func (e *LibreTranslate) Translate(text string, from, to string) (TranslationResult, error) { 132 126 formData := map[string]string{ … … 158 152 } 159 153 160 var responseJSON libreTranslateResponse 154 var responseJSON struct { 155 TranslatedText string `json:"translatedText"` 156 } 161 157 162 158 if err := json.NewDecoder(response.Body).Decode(&responseJSON); err != nil { … … 164 160 } 165 161 166 return TranslationResult{TranslatedText: responseJSON.TranslatedText}, nil 162 if r, err := e.detectLanguage(text); err == nil { 163 from = r 164 } 165 166 return TranslationResult{ 167 TranslatedText: responseJSON.TranslatedText, 168 SourceLanguage: from, 169 }, nil 167 170 } -
trunk/engines/reverso.go
r20 r23 10 10 // Reverso is an engine that fetches data from https://reverso.net. 11 11 type Reverso struct{} 12 13 func (_ *Reverso) InternalName() string { return "reverso" }14 12 15 13 func (_ *Reverso) DisplayName() string { return "Reverso" } … … 84 82 85 83 request.Header.Set("Content-Type", "application/json") 86 // Returns 403 with empty or no user agent.87 84 request.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; rv:110.0) Gecko/20100101 Firefox/110.0") 88 85 … … 110 107 } 111 108 112 func (e *Reverso) DetectLanguage(text string) (string, error) { 113 // Any language pair works here, does not affect result 114 r, err := e.callAPI(text, "ara", "chi") 115 116 if err != nil { 117 return "", err 109 func (e *Reverso) Translate(text string, from, to string) (TranslationResult, error) { 110 if from == "auto" || from == "" { 111 from = "eng" 118 112 } 119 113 114 var translation string 115 116 r, err := e.callAPI(text, from, to) 117 if err != nil { 118 return TranslationResult{}, err 119 } 120 121 translation = r.Translation[0] 120 122 langCode := r.LanguageDetection.DetectedLanguage 121 123 122 124 for code := range reversoLangs { 123 125 if code == langCode { 124 return code, nil126 from = code 125 127 } 126 }127 128 return "", fmt.Errorf("language code \"%s\" is not in Reverso's language list", langCode)129 }130 131 func (e *Reverso) Translate(text string, from, to string) (TranslationResult, error) {132 if from == "auto" {133 from_, err := e.DetectLanguage(text)134 135 if err != nil {136 return TranslationResult{}, err137 }138 139 from = from_140 }141 142 var translation string143 144 if from == to {145 translation = text146 } else {147 r, err := e.callAPI(text, from, to)148 149 if err != nil {150 return TranslationResult{}, err151 }152 153 translation = r.Translation[0]154 128 } 155 129 156 130 return TranslationResult{ 157 131 TranslatedText: translation, 132 SourceLanguage: from, 158 133 }, nil 159 134 } -
trunk/web/main.go
r22 r23 21 21 22 22 app.All("/", func(c *fiber.Ctx) error { 23 engine := c.Query("engine") 24 if _, ok := engines.Engines[engine]; !ok || engine == "" { 23 engine := c.Cookies("engine") 24 if c.Query("engine") != "" { 25 engine = c.Query("engine") 26 } 27 if _, ok := engines.Engines[engine]; !ok { 25 28 engine = "google" 26 29 } … … 50 53 translatedText = result.TranslatedText 51 54 translation = result 55 from = result.SourceLanguage 52 56 } 53 57 … … 69 73 fromCookie.Name = "from" 70 74 fromCookie.Value = from 71 fromCookie.Expires = time.Now().Add( 24 * time.Hour* 365)75 fromCookie.Expires = time.Now().Add(time.Hour * 24 * 365) 72 76 c.Cookie(fromCookie) 73 77 … … 75 79 toCookie.Name = "to" 76 80 toCookie.Value = to 77 toCookie.Expires = time.Now().Add( 24 * time.Hour* 365)81 toCookie.Expires = time.Now().Add(time.Hour * 24 * 365) 78 82 c.Cookie(toCookie) 79 83 84 engineCookie := new(fiber.Cookie) 85 engineCookie.Name = "engine" 86 engineCookie.Value = engine 87 engineCookie.Expires = time.Now().Add(time.Hour * 24 * 365) 88 c.Cookie(engineCookie) 80 89 } else if c.Method() == "GET" { 81 90 from = c.Cookies("from") … … 185 194 } 186 195 } 187 188 196 }) 189 197
Note:
See TracChangeset
for help on using the changeset viewer.