手把手教你设计一个翻译器

  • 1 获取百度翻译 API
  • 2 先简单实现调用百度翻译并打印翻译结果
  • 3 实现复制即翻译功能
    • 3.1 翻译剪贴板内容并在终端输出
    • 3.2 翻译剪贴板内容并在屏幕输出
  • 4 设计一个简单的翻译器

1 获取百度翻译 API

首先,我们需要使用百度翻译 API 进行翻译需要注册百度翻译开放平台账号并获取 API 密钥,可以在此网站中注册并获取 API 密钥:https://api.fanyi.baidu.com/
百度翻译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 random
import hashlib
import requests# 替换为你的百度翻译 appid
appid = '2022xxxxxx'# 填写你的百度翻译API密钥
secretKey = '7Bnxxxxxxxx'  # 要翻译的文本
translate_text = 'Hello World'# 随机数
salt = random.randint(32768, 65536)# 签名,拼接成字符串后,再进行md5加密
sign = appid + translate_text + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()# 百度翻译 API 地址
url = 'https://fanyi-api.baidu.com/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 pyperclip
import random
import hashlib
import requests
import time# 请替换为你的百度翻译 appid
appid = '2022xxxxxxxx'# 填写你的百度翻译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.baidu.com/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实现以下功能:

  1. 当发生复制操作时,获取剪贴板的待翻译文本,翻译为中文并将翻译结果显示在屏幕上;
  2. 只有当再次发生复制操作,即剪贴板内容发生变化时,再次触发第一步的翻译并显示
  3. 当剪贴板内容没有发生变化时,不执行翻译和显示操作,继续监视剪贴板内容是否发生改变,等待下一次复制操作

代码实现如下:

import pyperclip
import random
import hashlib
import requests
from tkinter import Tk, Label, StringVar# 请替换为您的百度翻译 appid
appid = '2022xxxxxx'# 填写你的百度翻译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.baidu.com/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 设计一个简单的翻译器

  1. 在 Tkinter 窗口中添加一个文本输入框,用于输入要翻译的英文。
  2. 在 Tkinter 窗口中添加一个按钮,点击按钮时调用百度翻译 API 进行翻译。
  3. 在 Tkinter 窗口中添加一个文本框,用于显示翻译结果。

在下面代码中,我们在 Tkinter 窗口中添加了一个文本输入框,一个按钮和一个文本框。点击按钮时,会调用百度翻译 API 进行翻译,并将翻译结果显示在文本框中。用户可以多次输入要翻译的英文,并点击按钮进行翻译,翻译结果会不断更新。

import random
import hashlib
import requests
import 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 = '2022xxxxx'# 填写你的百度翻译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.baidu.com/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(二)——百度翻译

手把手教你设计一个翻译器—实现复制即翻译(基于百度翻译API)相关推荐

  1. 手把手教你设计一个通用BootLoader

    关键技术:函数指针 1 BootLoader BootLoader大家应该都听过用过或者自己设计过,进入应正式应用程序前的一个很小的程序,检测应用程序是否需要更新,当需要的时候执行擦除.写入.校验等操 ...

  2. 手把手教你设计一个CSDN系统

    在CSDN发一个CSDN系统是什么体验? 大家都知道CSDN 有一个下载的模块,就是用户上传资源然后管理员会进行审核,上传资源的用户可以赚钱还可以赚积分. 那么个人可不可以开发这样的系统呢? 完全可以 ...

  3. 手把手教你写一个获取短信验证码业务(基于Spring Boot+Redis+阿里云短信服务)

    文章目录 一.阿里云短信环境搭建 1.开启使用子用户,创建用户组和用户 2.开通阿里云短信服务 二.环境测试 1.新建Spring Boot(web)项目,导入依赖 2.在测试类中进行测试 三.真实业 ...

  4. 手把手教你写一个Matlab App(一)

    对于传统工科的学生用的最多的编程软件应该就是matlab,其集成度高,计算能力强,容易上手,颇受大众青睐.今天挖的这个新坑,主要是分享用matlab app designer设计GUI界面的一些方法和 ...

  5. 这本读者期待的芯片书《手把手教你设计CPU——RISC-V处理器》终于出版!

    点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 ​ ​点击图片购书​ 参与文末话题讨论,每日赠送异步图书 --异步小编 在摩尔定律减缓的今天,一味比拼硬件性能的技术竞赛变得越发 ...

  6. 还没理解微前端?手把手教你实现一个迷你版

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 最近看了几个微前端框架的源码(single-spa[1].qiankun[2].micro- ...

  7. 后端思维篇:手把手教你写一个并行调用模板

    前言 36个设计接口的锦囊中,也提到一个知识点:就是使用并行调用优化接口.所以接下来呢,就快马加鞭写第二篇:手把手教你写一个并行调用模板~ 一个串行调用的例子(App首页信息查询) Completio ...

  8. 手把手教你做一个自己的chrome扩展程序

    手把手教你做一个自己的chrome扩展程序 [目录] first.效果 1.收藏夹修改 (1).鼠标移动到收藏夹上的动作效果 (2).收藏夹框 (3)百度搜索框功能 2.右上文字修改 3.背景图片修改 ...

  9. 手把手教你完成一个数据科学小项目(7):经纬度获取与BDP可视化

    前言 请先阅读"中国年轻人正带领国家走向危机",这锅背是不背? 一文,以对"手把手教你完成一个数据科学小项目"系列有个全局性的了解. 本系列代码统一开源在Git ...

最新文章

  1. 深入理解Java的接口和抽象类
  2. 桌面桌面虚拟化-Vmware 兼容性怎么查询
  3. MonkeyServer的使用及自动化
  4. windows下的库文件在linux的使用,Windows、Linux之间传输文件的几种方式
  5. 【CodeForces - 255A】Greg's Workout (水题)
  6. android layout.inflater,Android - LayoutInflater
  7. 四大组件之Activity
  8. 20200426:186周周赛(上)(leetcode5392-5394)
  9. shell if condition
  10. 从win到linux的小问题集锦(不断更新中)
  11. linux一个进程打印10次,如何发现linux中引起高io等待的进程
  12. postgres常用SQL
  13. RGBA(0,0,0,0)调色
  14. 微信公众号开发报错:错误代码:40164, 错误信息:invalid ip
  15. 负熵作为非高斯的度量
  16. 【SPRD CAMERA】1 HAL层初始化流程
  17. c语言remainder函数,remainder
  18. 老子研究文献知识发现数据竞赛
  19. FCHD: A fast and accurate head detector快速准确的人头检测代码预测出来的边界框位置不准确的解决方法
  20. php nss,CentOS PHP cURL NSS错误5938

热门文章

  1. css 在线颜色选择,CSS3 Only Color Picker 颜色选择器
  2. IDEA2017安装actibpmn插件中文乱码问题解决
  3. STM32_USART 串口通讯详解
  4. 知道股票期权制吗?看看历史上的它是怎么一步步成长起来的
  5. 在Ubuntu18.04安装GMT-6.1.1(在 Linux 下编译 GMT 源代码)
  6. android tv 桌面,自定义RecyclerView打造Android TV桌面
  7. 说一说物理中的dynamics和kinetics
  8. linksys 无线路由器如何设置一台服务器
  9. SAP BASIS常见问题解决
  10. Accurate Structured-Text Spotting for Arithmetical Exercise Correction 论文翻译