google translate - 谷歌翻译小工具

本文档介绍了如何利用python库googletrans和tkinter创建一个简单的中英翻译工具。在安装googletrans库时遇到AttributeError问题,通过升级到4.0.0-rc1版本解决。翻译功能通过检测文本语言并进行相应翻译,界面包含源文本输入框、翻译结果显示框及翻译按钮。当点击翻译按钮时,会显示翻译结果并禁止编辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

同事小强在网上不知道从哪找了个翻译小工具,用着不太顺手。想着自己常用的google翻译还不错,就搜了一下google翻译接口,果然python里有相关的库googletrans,于是就结合tkinter和googletrans写了一个google翻译小工具。

​界面很简单如下:
工具界面

一、库安装

pip install googletrans==4.0.0-rc1

问题说明

本来是直接安装pip install googletrans,但是翻译的时候报错 - AttributeError: ‘NoneType’ object has no attribute ‘group’,通过对问题的一番搜索,发现是 googletrans的版本的问题,默认安装的是3.0.0版本,但是由于google翻译更改了API,导致3.0.0版本报错,所以需要安装更新的版本。具体参考如下文章
Python3 googletrans谷歌翻译出错

二、功能实现

1. 翻译功能代码

from googletrans import Translator

translator = Translator(service_urls=['translate.google.cn',])

#检测翻译文本的语种
src_lang = translator.detect(text).lang 

#源语种为中文,则目标语种为英语
#中文有时会识别为日语,所以加上日语判断
if src_lang == 'zh-CN' or src_lang == 'ja': 
    dest_lang = 'en'
else:
    dest_lang = 'zh-CN'

result = translator.translate(text, dest = dest_lang).text

2. 工具界面代码

import tkinter as tk
from tkinter import  ttk
from tkinter import scrolledtext

win = tk.Tk()
win.title('Google Translate(中英互译)')

scrol_w = 80
scrol_h = 15

#添加源文本scrolledtext输入框
scr1 = scrolledtext.ScrolledText(win, width = scrol_w, height = scrol_h, wrap = tk.WORD, font = 30)
scr1.grid(column = 0, row = 1)

ttk.Label(win, text='').grid(column = 1,row = 2)

#添加scrolledtext翻译文本显示框
scr2 = scrolledtext.ScrolledText(win, width = scrol_w, height = scrol_h, wrap = tk.WORD, font = 30)
scr2.grid(column = 0, row = 3)

#添加翻译按钮
btn = ttk.Button(win, text = 'translate', command=translate)
btn.grid(column = 1, row = 3)

scr1.focus()
win.mainloop()

3. 全部实现代码

import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
from googletrans import Translator


def translate():
    #获取源文本scrolledtext输入框文本
    text = scr1.get(1.0, 'end')

    translator = Translator(service_urls=[
        'translate.google.cn',
    ])
    src_lang = translator.detect(text).lang
    if src_lang == 'zh-CN' or src_lang == 'ja':
        dest_lang = 'en'
    else:
        dest_lang = 'zh-CN'
    result = translator.translate(text, dest=dest_lang).text

    #设置为正常状态
    scr2.configure(state='normal')
    #更新前删除上一次文本
    scr2.delete(1.0, 'end')
    #更新翻译文本
    scr2.insert('end', result)
    #设置为禁止编辑
    scr2.configure(state='disable')


win = tk.Tk()
win.title('Google Translate(中英互译)')

scrol_w = 80
scrol_h = 15
scr1 = scrolledtext.ScrolledText(win,
                                 width=scrol_w,
                                 height=scrol_h,
                                 wrap=tk.WORD,
                                 font=30)
scr1.grid(column=0, row=1)

ttk.Label(win, text='').grid(column=1, row=2)

scr2 = scrolledtext.ScrolledText(win,
                                 width=scrol_w,
                                 height=scrol_h,
                                 wrap=tk.WORD,
                                 font=30)
scr2.grid(column=0, row=3)

#添加按钮
btn = ttk.Button(win, text='translate', command=translate)
btn.grid(column=1, row=3)

scr1.focus()
win.mainloop()
注意
  • scrolledtext.ScrolledText里的wrap=tk.WORD的作用是在行尾遇到单词显示不全的情况,会自动将整个单词放到下一行显示。
  • scr2.delete(1.0, ‘end’)是用于清空上一次显示的翻译文本
  • scr2.configure(state=‘disable’)是为了翻译文本显示后禁止对文本进行编辑,scr2.configure(state=‘normal’) 是在显示翻译文本前设置scrolledtext框为正常状态。
  • scr1.focus() 的作用是打开界面时将光标设置在源文本scrolledtext输入框。

三、结语

以上就是google翻译小工具的实现过程,如发现错误或有任何疑问或建议,欢迎留言提出讨论。

实现谷歌在线翻译! //load方法 加载语言版本 当前版本号为1 google.load("language", "1"); //版本为1 function initialize() { //得到要翻译的内容 var text = document.getElementById("text").value; //要翻译成哪国语言 默认为中文 var toLanguage = document.getElementById("language").value; //调用google对象的检测要翻译的对象 arg1:要翻译的文本,arg2:回调函数 google.language.detect(text, function(result) { //如果返回值未出现错误(detect该函数用语检测,估计也有过滤的意思) if (!result.error && result.language) { //调用google语言api的翻译函数 //arg1:要翻译的内容,arg2:通过过滤后对象所属的语言格式,arg3:要转成的类型,arg4:回调函数 google.language.translate(text, result.language, toLanguage, function(result) { //获得要显示翻译结果textarea对象 var translated = document.getElementById("translation"); //如果对象被翻译成功 类似于java的jdbc结果集对象的 .next()方法 if (result.translation) { //设置要显示翻译结果textarea对象的html值 translated.innerHTML = result.translation; } }); } }); } // setOnLoadCallback 该函数 绑定页面加载完毕 调用initialize函数 类似于jQuery的 $(docuemnt).ready(function(){}) google.setOnLoadCallback(initialize); //选择由哪国语言翻译成另外一国语言 function to_language(str){ document.getElementById("language").value = str; if(str == "zh"){ document.getElementById("show").innerText = "英译汉"; }else if(str == "en"){ document.getElementById("show").innerText = "汉译英"; }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值