手把手教你设计一个翻译器
1 获取百度翻译 API2 先简单实现调用百度翻译并打印翻译结果3 实现复制即翻译功能3.1 翻译剪贴板内容并在终端输出3.2 翻译剪贴板内容并在屏幕输出 4 设计一个简单的翻译器1 获取百度翻译 API
首先,我们需要使用百度翻译 API 进行翻译需要注册百度翻译开放平台账号并获取 API 密钥,可以在此网站中注册并获取 API 密钥:https://api./
百度翻译API申请教程
在获取了 API 密钥之后,我们可以使用 Python 的 requests 库来调用百度翻译 API:
pip install requests
2 先简单实现调用百度翻译并打印翻译结果
在调用百度翻译 API 时,我们需要提供以下参数:
q:要翻译的文本from:需要翻译的源语言,例如:en(英文),zh(中文),auto(自动)to:需要转换成的语言appid:申请成为开发者后生成的appid,在在控制台中查看salt:随机数sign:生成的签名(appid+q+salt+密钥 的MD5值)
其中,salt 和 sign 是用来防止 API 被滥用的参数。
import randomimport hashlibimport requests# 替换为你的百度翻译 appidappid = 'xxxxxx'# 填写你的百度翻译API密钥secretKey = '7Bnxxxxxxxx' # 要翻译的文本translate_text = 'Hello World'# 随机数salt = random.randint(32768, 65536)# 签名,拼接成字符串后,再进行md5加密sign = appid + translate_text + str(salt) + secretKeysign = hashlib.md5(sign.encode()).hexdigest()# 百度翻译 API 地址url = 'https://fanyi-/api/trans/vip/translate'# 发送请求response = requests.get(url, params={'q': translate_text,'from': 'en', # auto'to': 'zh','appid': appid,'salt': salt,'sign': sign})# 解析响应result = response.json()# 输出翻译结果print(result['trans_result'][0]['dst'])
3 实现复制即翻译功能
3.1 翻译剪贴板内容并在终端输出
这一小节实现的功能:当发生复制待翻译文本的操作后,调用API进行翻译,将翻译结果显示在终端
import pyperclipimport randomimport hashlibimport requestsimport time# 请替换为你的百度翻译 appidappid = 'xxxxxxxx'# 填写你的百度翻译API密钥secretKey = '7Bnxxxxxxx' # 初始化上一次的剪贴板内容last_clipboard_content = ''while True:# 获取当前剪贴板内容clipboard_content = pyperclip.paste()# 如果剪贴板内容发生了变化if clipboard_content != last_clipboard_content:# 更新上一次的剪贴板内容last_clipboard_content = clipboard_content# 随机数salt = random.randint(32768, 65536)# 签名sign = appid + clipboard_content + str(salt) + secretKeysign = hashlib.md5(sign.encode()).hexdigest()# 百度翻译 API 地址url = 'https://fanyi-/api/trans/vip/translate'try:# 发送请求response = requests.get(url, params={'q': clipboard_content,'from': 'en', # auto'to': 'zh','appid': appid,'salt': salt,'sign': sign})# 解析响应result = response.json() # 输出翻译结果print(result['trans_result'][0]['dst'])except:print('发生了错误,无法获取翻译结果')# 休眠 1 秒time.sleep(1)
注意:上面代码要在终端运行,结果如下:
3.2 翻译剪贴板内容并在屏幕输出
这一小节我们调用百度翻译API实现以下功能:
当发生复制操作时,获取剪贴板的待翻译文本,翻译为中文并将翻译结果显示在屏幕上;只有当再次发生复制操作,即剪贴板内容发生变化时,再次触发第一步的翻译并显示当剪贴板内容没有发生变化时,不执行翻译和显示操作,继续监视剪贴板内容是否发生改变,等待下一次复制操作
代码实现如下:
import pyperclipimport randomimport hashlibimport requestsfrom tkinter import Tk, Label, StringVar# 请替换为您的百度翻译 appidappid = 'xxxxxx'# 填写你的百度翻译API密钥secretKey = '7Bnxxxxxxxx' # 初始化上一次的剪贴板内容last_clipboard_content = ''# 创建窗口root = Tk()root.title('熊哩翻译器')# 创建字符串变量result_str = StringVar()# 创建标签label = Label(root, textvariable=result_str, font=("Arial", 14))# 使用 config() 函数来设置文本框的宽度和高度label.config(width=30, height=10)label.pack()def translate():global last_clipboard_content# 获取当前剪贴板内容clipboard_content = pyperclip.paste()# 如果剪贴板内容发生了变化if clipboard_content != last_clipboard_content:# 更新上一次的剪贴板内容last_clipboard_content = clipboard_content# 随机数salt = random.randint(32768, 65536)# 签名sign = appid + clipboard_content + str(salt) + secretKeysign = hashlib.md5(sign.encode()).hexdigest()# 百度翻译 API 地址url = 'https://fanyi-/api/trans/vip/translate'# 发送请求response = requests.get(url, params={'q': clipboard_content,'from': 'en', # auto'to': 'zh','appid': appid,'salt': salt,'sign': sign})# 解析响应result = response.json()# 更新字符串变量的值result_str.set(result['trans_result'][0]['dst'])# 延迟一秒后再次执行 translate 函数root.after(1000, translate)# 开始循环translate()# 进入消息循环root.mainloop()
运行结果如下:
这里发现了一个问题,复制的待翻译文本必须没有换行,否则翻译结果总是只能翻译一行,不知道是百度翻译API的问题还是我的代码问题,希望有大佬帮我解惑!
4 设计一个简单的翻译器
在 Tkinter 窗口中添加一个文本输入框,用于输入要翻译的英文。在 Tkinter 窗口中添加一个按钮,点击按钮时调用百度翻译 API 进行翻译。在 Tkinter 窗口中添加一个文本框,用于显示翻译结果。在下面代码中,我们在 Tkinter 窗口中添加了一个文本输入框,一个按钮和一个文本框。点击按钮时,会调用百度翻译 API 进行翻译,并将翻译结果显示在文本框中。用户可以多次输入要翻译的英文,并点击按钮进行翻译,翻译结果会不断更新。
import randomimport hashlibimport requestsimport tkinter as tk# 创建窗口root = tk.Tk()root.title('翻译结果')# 创建文本输入框,用于输入要翻译的英文text_input = tk.Entry(root, width=60)text_input.pack()# 创建按钮,点击按钮时调用百度翻译 API 进行翻译def translate():# 读取文本输入框中的文本translate_text = text_input.get()# 调用百度翻译 API 进行翻译# 替换为你的百度翻译 appidappid = 'xxxxx'# 填写你的百度翻译API密钥secretKey = '7Bxxxxxxx' # 随机数salt = random.randint(32768, 65536)# 签名sign = appid + translate_text + str(salt) + secretKeysign = hashlib.md5(sign.encode()).hexdigest()# 百度翻译 API 地址url = 'https://fanyi-/api/trans/vip/translate'# 发送请求response = requests.get(url, params={'q': translate_text,'from': 'en', # auto'to': 'zh','appid': appid,'salt': salt,'sign': sign})# 解析响应result = response.json()# 将翻译结果显示在文本框中text_output.delete(0.0, tk.END)text_output.insert(tk.END, result['trans_result'][0]['dst'])button = tk.Button(root, text='翻译', command=translate)button.pack()# 创建文本框,用于显示翻译结果text_output = tk.Text(root)text_output.pack()# 运行主循环root.mainloop()
运行结果如下:
后续还可以增加选择待翻译语言选择、目标语言选择、清空按钮等等功能,大家自行探究吧!感谢支持!
特别致谢
1. python实现调用百度API批量翻译单词
2. 调用百度API(二)——百度翻译