python使用谷歌翻译API[免key]

此法可在中国内地使用,还不需申请 API key 。速度可能略慢(请实际测试)。

快速入门

请先将后文类的代码复制粘贴,然后参考这里的调用示例,享受生活。

若需自动识别原始文本语言,则使用auto代码。

调用示例:

1
2
3
4
5
t2=GoogleTranslator(src='zh-CN',dest='en') # 中译英初始化
result = t2.translate('您好,龙的传人!')
print(result)
result2 = t2.translate('很高兴认识你。')
print(result2)

语言列表

支持109种语言,可“Ctrl+F”使用浏览器页内搜索

语言 ISO-639-1 代码
南非荷兰语 af
阿尔巴尼亚语 sq
阿姆哈拉语 am
阿拉伯语 ar
亚美尼亚语 hy
阿塞拜疆语 az
巴斯克语 eu
白俄罗斯语 be
孟加拉语 bn
波斯尼亚语 bs
保加利亚语 bg
加泰罗尼亚语 ca
宿务语 ceb (ISO-639-2)
中文(简体) zh-CNzh (BCP-47)
中文(繁体) zh-TW (BCP-47)
科西嘉语 co
克罗地亚语 hr
捷克语 cs
丹麦语 da
荷兰语 nl
英语 en
世界语 eo
爱沙尼亚语 et
芬兰语 fi
法语 fr
弗里斯兰语 fy
加利西亚语 gl
格鲁吉亚语 ka
德语 de
希腊语 el
古吉拉特语 gu
海地克里奥尔语 ht
豪萨语 ha
夏威夷语 haw (ISO-639-2)
希伯来语 heiw
印地语 hi
苗语 hmn (ISO-639-2)
匈牙利语 hu
冰岛语 is
伊博语 ig
印度尼西亚语 id
爱尔兰语 ga
意大利语 it
日语 ja
爪哇语 jv
卡纳达语 kn
哈萨克语 kk
高棉语 km
卢旺达语 rw
韩语 ko
库尔德语 ku
吉尔吉斯语 ky
老挝语 lo
拉丁文 la
拉脱维亚语 lv
立陶宛语 lt
卢森堡语 lb
马其顿语 mk
马尔加什语 mg
马来语 ms
马拉雅拉姆文 ml
马耳他语 mt
毛利语 mi
马拉地语 mr
蒙古文 mn
缅甸语 my
尼泊尔语 ne
挪威语 no
尼杨扎语(齐切瓦语) ny
奥里亚语(奥里亚) or
普什图语 ps
波斯语 fa
波兰语 pl
葡萄牙语(葡萄牙、巴西) pt
旁遮普语 pa
罗马尼亚语 ro
俄语 ru
萨摩亚语 sm
苏格兰盖尔语 gd
塞尔维亚语 sr
塞索托语 st
修纳语 sn
信德语 sd
僧伽罗语 si
斯洛伐克语 sk
斯洛文尼亚语 sl
索马里语 so
西班牙语 es
巽他语 su
斯瓦希里语 sw
瑞典语 sv
塔加路语(菲律宾语) tl
塔吉克语 tg
泰米尔语 ta
鞑靼语 tt
泰卢固语 te
泰文 th
土耳其语 tr
土库曼语 tk
乌克兰语 uk
乌尔都语 ur
维吾尔语 ug
乌兹别克语 uz
越南语 vi
威尔士语 cy
班图语 xh
意第绪语 yi
约鲁巴语 yo
祖鲁语 zu

类代码

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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
import requests
import re
import json
import time

class GoogleTranslator ():
_host = 'translate.google.cn'

_headers = {
'Host': _host,
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Mobile Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
'Referer': 'https://' + _host,
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0'
}

_language = {
'afrikaans': 'af',
'arabic': 'ar',
'belarusian': 'be',
'bulgarian': 'bg',
'catalan': 'ca',
'czech': 'cs',
'welsh': 'cy',
'danish': 'da',
'german': 'de',
'greek': 'el',
'english': 'en',
'esperanto': 'eo',
'spanish': 'es',
'estonian': 'et',
'persian': 'fa',
'finnish': 'fi',
'french': 'fr',
'irish': 'ga',
'galician': 'gl',
'hindi': 'hi',
'croatian': 'hr',
'hungarian': 'hu',
'indonesian': 'id',
'icelandic': 'is',
'italian': 'it',
'hebrew': 'iw',
'japanese': 'ja',
'korean': 'ko',
'latin': 'la',
'lithuanian': 'lt',
'latvian': 'lv',
'macedonian': 'mk',
'malay': 'ms',
'maltese': 'mt',
'dutch': 'nl',
'norwegian': 'no',
'polish': 'pl',
'portuguese': 'pt',
'romanian': 'ro',
'russian': 'ru',
'slovak': 'sk',
'slovenian': 'sl',
'albanian': 'sq',
'serbian': 'sr',
'swedish': 'sv',
'swahili': 'sw',
'thai': 'th',
'filipino': 'tl',
'turkish': 'tr',
'ukrainian': 'uk',
'vietnamese': 'vi',
'yiddish': 'yi',
'chinese_simplified': 'zh-CN',
'chinese_traditional': 'zh-TW',
'auto': 'auto'
}
_url = 'https://' + _host + '/translate_a/single'
_params = {
'client': 'webapp',
'sl': 'en',
'tl': 'zh-CN',
'hl': 'zh-CN',
'dt': 'at',
'dt': 'bd',
'dt': 'ex',
'dt': 'ld',
'dt': 'md',
'dt': 'qca',
'dt': 'rw',
'dt': 'rm',
'dt': 'ss',
'dt': 't',
'otf': '1',
'ssel': '0',
'tsel': '0',
'kc': '1'
}

__cookies = None

__googleTokenKey = '376032.257956'
__googleTokenKeyUpdataTime = 600.0
__googleTokenKeyRetireTime = time.time() + 600.0

def __init__(self, src = 'en', dest = 'zh-CN', tkkUpdataTime = 600.0):
if src not in self._language and src not in self._language.values():
src = 'auto'
if dest not in self._language and dest not in self._language.values():
dest = 'auto'
self._params['sl'] = src
self._params['tl'] = dest
self.googleTokenKeyUpdataTime = tkkUpdataTime
self.__updateGoogleTokenKey()

def __updateGoogleTokenKey(self):
self.__googleTokenKey = self.__getGoogleTokenKey()
self.__googleTokenKeyRetireTime = time.time() + self.__googleTokenKeyUpdataTime

def __getGoogleTokenKey(self):
"""Get the Google TKK from https://translate.google.cn"""
# TKK example: '435075.3634891900'
result = ''
try:
res = requests.get('https://' + self._host, timeout = 3)
res.raise_for_status()
self.__cookies = res.cookies
result = re.search(r'tkk\:\'(\d+\.\d+)?\'', res.text).group(1)
except requests.exceptions.ReadTimeout as ex:
print('ERROR: ' + str(ex))
time.sleep(1)
return result

def __getGoogleToken(self, a, TKK):
"""Calculate Google tk from TKK """


def RL(a, b):
for d in range(0, len(b)-2, 3):
c = b[d + 2]
c = ord(c[0]) - 87 if 'a' <= c else int(c)
c = a >> c if '+' == b[d + 1] else a << c
a = a + c & 4294967295 if '+' == b[d] else a ^ c
return a

g = []
f = 0
while f < len(a):
c = ord(a[f])
if 128 > c:
g.append(c)
else:
if 2048 > c:
g.append((c >> 6) | 192)
else:
if (55296 == (c & 64512)) and (f + 1 < len(a)) and (56320 == (ord(a[f+1]) & 64512)):
f += 1
c = 65536 + ((c & 1023) << 10) + (ord(a[f]) & 1023)
g.append((c >> 18) | 240)
g.append((c >> 12) & 63 | 128)
else:
g.append((c >> 12) | 224)
g.append((c >> 6) & 63 | 128)
g.append((c & 63) | 128)
f += 1

e = TKK.split('.')
h = int(e[0]) or 0
t = h
for item in g:
t += item
t = RL(t, '+-a^+6')
t = RL(t, '+-3^+b+-f')
t ^= int(e[1]) or 0
if 0 > t:
t = (t & 2147483647) + 2147483648
result = t % 1000000
return str(result) + '.' + str(result ^ h)

def translate(self, text):
if time.time() > self.__googleTokenKeyRetireTime:
self.__updateGoogleTokenKey()
data = {'q': text}
self._params['tk'] = self.__getGoogleToken(text, self.__googleTokenKey)
result = ''
try:
res = requests.post(self._url,
headers = self._headers,
cookies = self.__cookies,
data = data,
params = self._params,
timeout = 6)
res.raise_for_status()
jsonText = res.text
if len(jsonText)>0:
jsonResult = json.loads(jsonText)
if len(jsonResult[0])>0:
for item in jsonResult[0]:
result += item[0]
return result
except Exception as ex:
print('ERROR: ' + str(ex))
return ''

参考资料

参考资料不完整。

几个月前第一次写本文的时候,hexo-admin 不稳定,不仅掉了很多参考资料,还将我辛辛苦苦写的千字全文强行遗失了……现在,我重新“完成”本文时,大部分只是简略的粘贴了部分文章。

语言列表来自:

https://cloud.google.com/translate/docs/basic/discovering-supported-languages?hl=zh-cn

https://cloud.google.com/translate/docs/languages?hl=zh-cn

代码来自:https://www.cnblogs.com/popapa/p/google_translate.html

(您还可以在归档页搜索文章标题)