-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtranslate
executable file
·76 lines (61 loc) · 2.85 KB
/
translate
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
#!/usr/bin/env python3
# translate: google translate from command line (no api).
import requests
import sys
def google_translate(source, target, text):
url = "https://translate.googleapis.com/translate_a/single"
params = { "client": "gtx", "dt": "t", "sl": source, "tl": target, "q": text }
resp = requests.get(url, params=params)
if resp.status_code != 200:
return None
resp_lines = [ l[0] for l in resp.json()[0] ]
return ''.join(resp_lines)
CODE_TO_LANG = {
"auto": "auto", "af": "afrikaans", "sq": "albanian", "ar": "arabic",
"az": "azerbaijani", "eu": "basque", "be": "belarusian", "bn": "bengali",
"bg": "bulgarian", "ca": "catalan", "zh-cn": "chinese simplified",
"zh-tw": "chinese traditional", "hr": "croatian", "cs": "czech",
"da": "danish", "nl": "dutch", "en": "english", "eo": "esperanto",
"et": "estonian", "tl": "filipino", "fi": "finnish", "fr": "french",
"gl": "galician", "ka": "georgian", "de": "german", "el": "greek",
"gu": "gujarati", "ht": "haitian creole", "iw": "hebrew", "hi": "hindi",
"hu": "hungarian", "is": "icelandic", "id": "indonesian", "ga": "irish",
"it": "italian", "ja": "japanese", "kn": "kannada", "ko": "korean",
"la": "latin", "lv": "latvian", "lt": "lithuanian", "mk": "macedonian",
"ms": "malay", "mt": "maltese", "no": "norwegian", "fa": "persian",
"pl": "polish", "pt": "portuguese", "ro": "romanian", "ru": "russian",
"sr": "serbian", "sk": "slovak", "sl": "slovenian", "es": "spanish",
"sw": "swahili", "sv": "swedish", "ta": "tamil", "te": "telugu",
"th": "thai", "uk": "ukrainian", "ur": "urdu", "vi": "vietnamese",
"cy": "welsh", "yi": "yiddish", "tr": "turkish"
}
def list_langs():
for code, lang in sorted(CODE_TO_LANG.items(), key=lambda e: e[1]):
print("{:<7}{}".format(code, lang))
def parse_code(code):
code = code.lower()
return code if code in CODE_TO_LANG else None
def parse_codes(codes):
codes = codes.split(":")
source = codes[0] if len(codes) >= 2 else "auto"
target = codes[1] if len(codes) >= 2 else codes[0]
return parse_code(source), parse_code(target)
def main():
if len(sys.argv) < 2:
sys.exit("error: target language code is missing")
if sys.argv[1] in ("-h", "--help"):
print("usage: translate [-l|--list-languages] [source:]target [text...]")
return
elif sys.argv[1] in ("-l", "--list-languages"):
list_langs()
return
source, target = parse_codes(sys.argv[1])
if source is None or target is None:
sys.exit("error: unknown language code")
text = ' '.join(sys.argv[2:]) if len(sys.argv) > 2 else sys.stdin.read()
translated_text = google_translate(source, target, text)
if translated_text is None:
sys.exit("error: response status code != 200")
print(translated_text)
if __name__ == "__main__":
main()