-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
106 lines (93 loc) · 2.39 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
import (
"flag"
"fmt"
"log"
"github.com/0xAX/notificator"
"github.com/arrufat/papago"
"github.com/atotto/clipboard"
)
func main() {
known := flag.String("k", "en", "the language you already know")
learn := flag.String("l", "ko", "the language you are learning")
list := flag.Bool("list", false, "list all possible language codes")
var primary bool
if hasPrimary {
flag.BoolVar(&primary, "p", false, "use primary selection")
}
flag.Parse()
if *list {
fmt.Println("Supported language codes:")
for _, lang := range papago.SupportedLanguages() {
fmt.Printf("%s \t=> %s\n", lang.Code(), lang)
}
return
}
// notification setup
notify := notificator.New(notificator.Options{
// DefaultIcon: "/home/adria/Pictures/papago.png",
AppName: "Papago",
})
knownLang, err := papago.ParseLanguageCode(*known)
if err != nil {
notify.Push("Error", err.Error(), "", notificator.UR_NORMAL)
log.Fatal(err)
}
learnLang, err := papago.ParseLanguageCode(*learn)
if err != nil {
notify.Push("Error", err.Error(), "", notificator.UR_NORMAL)
log.Fatal(err)
}
// set clipboard to use selection
if primary {
setPrimary(true)
}
// read from the clipboard
text, err := clipboard.ReadAll()
if err != nil {
notify.Push("Error", err.Error(), "", notificator.UR_NORMAL)
log.Fatal(err)
}
if text == "" {
notify.Push("Error", "No text selected", "", notificator.UR_NORMAL)
return
}
log.Println("selected text:", text)
// detect language from selection
lang, err := papago.Detect(text)
if err != nil {
notify.Push("Error", "Unable to detect the language", "", notificator.UR_NORMAL)
log.Fatal(err)
}
log.Println("detected language:", lang)
// translate
var trans string
switch lang {
case knownLang:
trans, err = papago.Translate(text,
knownLang,
learnLang,
papago.TranslateOptions{Honorific: false})
default:
trans, err = papago.Translate(text,
lang,
knownLang,
papago.TranslateOptions{Honorific: false})
}
// handle translation errors
if err != nil {
notify.Push("Error", err.Error(), "", notificator.UR_NORMAL)
log.Fatal(err)
}
log.Println("translation:", trans)
// copy the translation to the clipboard
if primary {
setPrimary(false)
}
if err := clipboard.WriteAll(trans); err != nil {
log.Fatal(err)
}
// notify
notify.Push(fmt.Sprintf("Translating from %s: %s", lang, text), trans, "", notificator.UR_CRITICAL)
return
}