前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >利用python制作一个翻译工具

利用python制作一个翻译工具

作者头像
冰霜
发布2022-03-15 17:10:07
发布2022-03-15 17:10:07
70600
代码可运行
举报
运行总次数:0
代码可运行

之前基于有道翻译的翻译工具,有访问限制,超过一定次数后会提示访问过于频繁,后来发现百度翻译API,如果月翻译字符少于200万是不收取费用的,所以可以利用百度通用翻译API做一个翻译工具

1. 首先注册一个百度个人开发者账号

注册地址:

http://api.fanyi.baidu.com/api/trans/product/index

注册完成后会得到一个APP ID和密钥,如下:

2. 查看“文档与支持/通用翻译API技术文档”

文档中介绍了如何调用百度翻译接口

3. 完整的代码

第59行写明如何调用百度翻译API以及参数的构造方法,同时相对之前的版本,修改了下页面按钮的布局

代码语言:javascript
代码运行次数:0
复制
# -*- coding:utf-8 -*-

import requests
from requests.exceptions import RequestException
import tkinter as tk
from tkinter import ttk
import hashlib
import random

class Translate():
def __init__(self):
self.window = tk.Tk()  #创建window窗口
self.window.title("简易翻译器")  # 定义窗口名称
# self.window.resizable(0,0)  # 禁止调整窗口大小
self.menu = ttk.Combobox(self.window,width=6)
self.input = tk.Entry(self.window, width=80)  # 创建一个输入框,并设置尺寸
self.info = tk.Text(self.window, height=20)   # 创建一个文本展示框,并设置尺寸

self.menu['value'] = ('转成繁体中文','转成英文', '转成日文', '转成韩文', '转成阿拉伯文')
self.menu.current(0)

# 添加一个按钮,用于触发翻译功能
self.t_button = tk.Button(self.window, text='翻译', relief=tk.RAISED, width=8, height=1, command=self.fanyi)
# 添加一个按钮,用于触发清空输入框功能
self.c_button1 = tk.Button(self.window, text='清空输入', relief=tk.RAISED, width=8, height=1, command=self.cle_e)
# 添加一个按钮,用于触发清空输出框功能
self.c_button2 = tk.Button(self.window, text='清空输出', relief=tk.RAISED,width=8, height=1, command=self.cle)
# 添加一张图标
self.image_file = tk.PhotoImage(file='py128.png')
self.label_image = tk.Label(self.window, image=self.image_file)

def gui_arrang(self):
"""完成页面元素布局,设置各部件的位置"""
self.input.grid(row=0,column=0,padx=5,pady=5)
self.info.grid(row=1,rowspan=2,column=0,padx=5,pady=5)

self.t_button.grid(row=0,column=1,padx=5,pady=5,sticky=tk.W)
self.c_button1.grid(row=0,column=2,padx=0,pady=5,sticky=tk.W)
self.c_button2.grid(row=0,column=3,padx=5,pady=5,sticky=tk.W)

self.menu.grid(row=1, column=1, padx=5, pady=5, rowspan=2, sticky=tk.NW)

self.label_image.grid(row=2, column=1,columnspan=3,sticky=tk.N)

def tran_type(self):
        type = None
if self.menu.get() == "转成繁体中文":
            type = "cht"
if self.menu.get() == "转成英文":
            type = "en"
        elif self.menu.get() == "转成日文":
            type = "jp"
        elif self.menu.get() == "转成韩文":
            type = "kor"
        elif self.menu.get() == "转成阿拉伯文":
            type = "ara"
return type

def fanyi(self):
"""定义一个函数,完成翻译功能"""

        original_str = self.input.get()  # 定义一个变量,用来接收输入框输入的值
        appid = 'XXXX'  # 你的appid
        secretKey = 'XXXX'  # 你的密钥

        salt = random.randint(32768, 65536)   # 生成一个随机数
        sign = appid + original_str + str(salt) + secretKey  # 将appid和要翻译的字符、随机数、密钥组合成一个原始签名
        m = hashlib.new("md5")  
        m.update(sign.encode(encoding="utf-8"))  # 注意使用utf-8编码
        msign = m.hexdigest() # 得到原始签名的MD5值

        data = {
"q": original_str,   
"from": "auto",
"to": self.tran_type(),
"appid": appid,
"salt": salt,
"sign": msign
        }
        url = "http://api.fanyi.baidu.com/api/trans/vip/translate"
try:
            r = requests.get(url, params=data)
if r.status_code == 200:
                result = r.json()
                translate_result = result["trans_result"][0]["dst"]
self.info.delete(1.0, "end")  # 输出翻译内容前,先清空输出框的内容
self.info.insert('end',translate_result)  # 将翻译结果添加到输出框中
        except RequestException:
self.info.insert('end', "发生错误")
def cle(self):
"""定义一个函数,用于清空输出框的内容"""
self.info.delete(1.0,"end")  # 从第一行清除到最后一行

def cle_e(self):
"""定义一个函数,用于清空输入框的内容"""
self.input.delete(0,"end")

def main():
    t = Translate()
    t.gui_arrang()
    tk.mainloop()

if __name__ == '__main__':
    main()

最终效果如下:

tips

下面是通用翻译API服务的使用详情,每天都会统计

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冰霜blog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档