v/GTT
1
0
mirror of https://github.com/eeeXun/GTT.git synced 2025-05-19 01:00:20 -07:00
GTT/internal/translate/translator.go
eeeXun cbd985b599 refactor: make Language, TTSLock and EngineName to struct in Translator
GetSrcLang, GetDstLang, SetSrcLang, SetDstLang, SwapLang are reusable
functions from translator to translator. So make Language struct.

GetEngineName is also a reusable function. So make EngineName struct.

Finally, let Translator to inherit those functions in these three
(Language, TTSLock, EngineName) structs. No need to write the duplicated
functions for each Translator.
2023-03-10 23:37:08 +08:00

68 lines
1.6 KiB
Go

package translate
import (
"github.com/eeeXun/gtt/internal/translate/apertiumtranslate"
"github.com/eeeXun/gtt/internal/translate/argostranslate"
"github.com/eeeXun/gtt/internal/translate/googletranslate"
"github.com/eeeXun/gtt/internal/translate/reversotranslate"
)
var (
AllTranslator = []string{"ApertiumTranslate", "ArgosTranslate", "GoogleTranslate", "ReversoTranslate"}
)
type Translator interface {
// Get engine name of the translator
GetEngineName() string
// Get all languages of the translator
GetAllLang() []string
// Get source language of the translator
GetSrcLang() string
// Get destination language of the translator
GetDstLang() string
// Set source language of the translator
SetSrcLang(lang string)
// Set destination language of the translator
SetDstLang(lang string)
// Swap source and destination language of the translator
SwapLang()
// Check if lock is available
LockAvailable() bool
// Acquire the lock
AcquireLock()
// Stop text to speech
StopTTS()
// Translate from source to destination language
Translate(message string) (translation, definition, partOfSpeech string, err error)
// Play text to speech
PlayTTS(lang, message string) error
}
func NewTranslator(name string) Translator {
var translator Translator
switch name {
case "ApertiumTranslate":
translator = apertiumtranslate.NewApertiumTranslate()
case "ArgosTranslate":
translator = argostranslate.NewArgosTranslate()
case "GoogleTranslate":
translator = googletranslate.NewGoogleTranslate()
case "ReversoTranslate":
translator = reversotranslate.NewReversoTranslate()
}
return translator
}