浔川 AI 翻译 v6.1.0 版本正式发布 全面升级安全体验与交互效率
浔川 AI 翻译工具完成 v6.1.0 版本迭代更新并正式上线。本次版本围绕账号安全体系、翻译服务体验、界面交互逻辑三大维度进行优化升级,进一步提升工具的安全性、易用性与稳定性,为用户提供更专业、高效的桌面端翻译解决方案。
一、核心升级亮点
1. 强化账号安全体系,保障用户使用权益
为筑牢账号安全防线,v6.1.0 版本新增完整的账号管理模块:
- 登录环节新增四位数随机验证码校验机制,有效防范非授权登录风险;
- 新增 "密码记忆" 功能,采用本地加密存储方式保存账号信息,在提升使用便捷性的同时,确保用户数据安全;
- 完善注册流程,新增用户名唯一性校验、密码一致性核验等规则,从源头保障账号信息规范,降低操作失误率。
2. 优化翻译核心能力,提升双语互译精准度
依托百度翻译开放 API,版本持续优化核心翻译能力,聚焦汉英双向互译场景:
- 新增输入内容空值检测机制,避免无效操作,提升翻译请求处理效率;
- 完善异常处理体系,针对网络异常、接口调用失败等场景,新增可视化错误提示,帮助用户快速定位并解决问题;
- 优化翻译结果解析逻辑,确保汉译英、英译汉双向翻译结果的准确性与完整性,满足日常办公、学习等场景的翻译需求。
3. 迭代界面交互设计,提升操作体验
围绕用户操作习惯优化界面布局与交互逻辑:
- 翻译窗口支持屏幕居中自适应显示,无需手动调整窗口位置,提升操作便捷性;
- 优化界面元素布局,统一采用清晰易读的字体规范与交互控件,降低操作学习成本;
- 新增翻译模式可视化标识,切换 "汉译英 / 英译汉" 时同步更新窗口标题,明确当前翻译状态。
二、快速使用指引
- 账号登录 / 注册:启动软件后,在登录界面输入用户名、密码及实时显示的验证码完成登录;未注册用户可点击 "注册" 按钮,按提示完成账号创建;
- 翻译模式选择:进入翻译界面后,通过 "汉译英 / 英译汉" 单选按钮切换翻译方向,窗口标题将同步标识当前模式;
- 文本翻译操作:在输入框填写待翻译文本,点击 "翻译" 按钮即可获取精准翻译结果;
- 退出操作:完成翻译后,点击 "退出" 按钮即可安全关闭翻译窗口。
三、版本说明
浔川 AI 翻译 v6.1.0 版本聚焦用户核心使用场景,在保障数据安全的前提下,进一步简化操作流程、提升翻译效率。后续,我们将持续基于用户反馈迭代优化,计划拓展多语种翻译、离线翻译等功能,不断完善产品能力,为用户提供更全面的翻译服务。
如在使用过程中遇到问题,可通过产品反馈渠道提交相关问题,我们将及时响应并处理。
四 、程序代码
python
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.messagebox
import pickle
import random
import http.client
import hashlib
import json
import urllib.parse
# 登录窗口
window = tk.Tk()
window.title('浔川AI翻译v6.1.0登录界面')
window.geometry('450x250')
# 记住密码变量
remember_pwd = tk.IntVar()
# 标签 用户名密码
Verification_Code = random.randint(1000, 9999) # 设置一个随机的四位数
Verification_Code = str(Verification_Code) # 把类型转换为str型
tk.Label(window, text='用户名:').place(x=100, y=30)
tk.Label(window, text='密码:').place(x=100, y=70)
tk.Label(window, text='验证码').place(x=100, y=110)
tk.Label(window, text=Verification_Code).place(x=320, y=110)
tk.Checkbutton(window, text="记住密码", variable=remember_pwd).place(x=160, y=150)
# 用户名输入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=30)
# 密码输入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=70)
# 验证码输入框
var_usr_yzm = tk.StringVar()
entry_usr_yzm = tk.Entry(window, textvariable=var_usr_yzm)
entry_usr_yzm.place(x=160, y=110)
# 打开翻译窗口的函数(替代原来的下载窗口)
def show_translate_window():
# 创建翻译窗口
root = tk.Tk()
# 标题
root.title('浔川AI翻译v6.1.0')
# 窗口大小
root.geometry('370x220') # 微调高度以容纳提示文字
# 获取屏幕宽
s_with = root.winfo_screenwidth()
# 获取屏幕高度
s_height = root.winfo_screenheight()
# 计算页面打开在屏幕中央的位置
l_x = str(round((s_with - 370) / 2))
l_y = str(round((s_height - 100) / 2))
root.geometry('+' + l_x + '+' + l_y)
# ========== 添加提示文字 ==========
tip_label = tk.Label(root, text='哟!来翻译咯?莫慌,我巴适得很,帮你整得明明白白!', fg='green', font=('微软雅黑', 10))
tip_label.grid(row=0, column=0, columnspan=2, pady=5)
# 单选按钮事件函数
def setRadio1():
root.title("汉译英")
def setRadio2():
root.title("英译汉")
# 单选按钮
v = tk.IntVar() # 保存一个整型变量, 默认值为0
radio1 = tk.Radiobutton(root, text="汉译英", variable=v, value=1, command=setRadio1)
radio1.grid(row=1, column=0)
radio2 = tk.Radiobutton(root, text="英译汉", variable=v, value=2, command=setRadio2)
radio2.grid(row=1, column=1)
# 输入标签和输入框
lable = tk.Label(root, text='请输入内容:')
lable.grid(row=2, column=0)
entry = tk.Entry(root, font=('微软雅黑', 15))
entry.grid(row=2, column=1)
# 翻译结果标签和输入框
res = tk.StringVar() # 保存一个 string 类型变量, 默认值为""
lable1 = tk.Label(root, text='翻译结果:')
lable1.grid(row=3, column=0)
entry1 = tk.Entry(root, font=('微软雅黑', 15), textvariable=res)
entry1.grid(row=3, column=1)
# 百度翻译函数
def baidu_translate():
# 获取界面输入的内容
content = entry.get().strip()
# 判断输入翻译的内容是否为空
if content == '':
tk.messagebox.showinfo('提示', '请输入翻译内容')
else:
appid = '20151113000005349'
secretKey = 'osubCEzlGjzvw8qdQc41'
myurl = '/api/trans/vip/translate'
q = content
fromLang = 'zh' # 源语言
toLang = 'en' # 翻译后的语言
salt = random.randint(32768, 65536)
sign = appid + q + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest() # 作为十六进制数据字符串值
if v.get() == 1:
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
salt) + '&sign=' + sign
else:
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
q) + '&from=' + toLang + '&to=' + fromLang + '&salt=' + str(
salt) + '&sign=' + sign
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
response = httpClient.getresponse() # response是HTTPResponse对象
jsonResponse = response.read().decode("utf-8") # 获得返回的结果,结果为json格式
js = json.loads(jsonResponse) # 将json格式的结果转换字典结构
dst = str(js["trans_result"][0]["dst"]) # 取得翻译后的文本结果
res.set(dst)
except Exception as e:
print('err:' + str(e))
tk.messagebox.showerror('错误', f'翻译失败:{str(e)}')
finally:
if httpClient:
httpClient.close()
# 翻译按钮
button = tk.Button(root, text='翻译', width='10', command=baidu_translate)
button.grid(row=4, column=0, sticky=tk.W)
# 退出按钮
exit_button = tk.Button(root, text='退出', width='10', command=root.quit)
exit_button.grid(row=4, column=1, sticky=tk.E)
# 翻译窗口主循环
root.mainloop()
# 登录函数
def usr_log_in():
# 输入框获取用户名密码
usr_name = var_usr_name.get()
usr_pwd = var_usr_pwd.get()
usr_yzm = var_usr_yzm.get()
# 从本地字典获取用户信息,如果没有则新建本地数据库
try:
with open('usr_info.pickle', 'rb') as usr_file:
usrs_info = pickle.load(usr_file)
except FileNotFoundError:
with open('usr_info.pickle', 'wb') as usr_file:
usrs_info = {'admin': 'admin'}
pickle.dump(usrs_info, usr_file)
# 判断验证码是否正确用户名和密码是否匹配
if usr_yzm == Verification_Code:
if usr_name in usrs_info:
if usr_pwd == usrs_info[usr_name]:
tk.messagebox.showinfo(title='welcome',
message='欢迎您:' + usr_name)
if remember_pwd.get() == 1:
with open('remember_pwd.pickle', 'wb') as pwd_file:
pickle.dump({'name': usr_name, 'pwd': usr_pwd}, pwd_file)
window.destroy()
# 登录成功后直接打开翻译窗口(替代原来的下载窗口)
show_translate_window()
else:
tk.messagebox.showerror(message='密码错误')
# 用户名密码不能为空
elif usr_name == '' or usr_pwd == '':
tk.messagebox.showerror(message='用户名或密码为空')
# 不在数据库中弹出是否注册的框
else:
is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')
if is_signup:
usr_sign_up()
elif usr_yzm == '':
tk.messagebox.showerror(message='验证码不能为空')
else:
tk.messagebox.showerror(message='验证码有误!')
# 注册函数
def usr_sign_up():
# 确认注册时的相应函数
def signtowcg():
# 获取输入框内的内容
nn = new_name.get()
np = new_pwd.get()
npf = new_pwd_confirm.get()
# 本地加载已有用户信息,如果没有则已有用户信息为空
try:
with open('usr_info.pickle', 'rb') as usr_file:
exist_usr_info = pickle.load(usr_file)
except FileNotFoundError:
exist_usr_info = {}
# 检查用户名存在、密码为空、密码前后不一致
if nn in exist_usr_info:
tk.messagebox.showerror('错误', '用户名已存在')
elif np == '' or nn == '':
tk.messagebox.showerror('错误', '用户名或密码为空')
elif np != npf:
tk.messagebox.showerror('错误', '密码前后不一致')
# 注册信息没有问题则将用户名密码写入数据库
else:
exist_usr_info[nn] = np
with open('usr_info.pickle', 'wb') as usr_file:
pickle.dump(exist_usr_info, usr_file)
tk.messagebox.showinfo('欢迎', '注册成功')
# 注册成功关闭注册框
window_sign_up.destroy()
# 新建注册界面
window_sign_up = tk.Toplevel(window)
window_sign_up.geometry('350x200')
window_sign_up.title('注册')
# 用户名变量及标签、输入框
new_name = tk.StringVar()
tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)
tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)
# 密码变量及标签、输入框
new_pwd = tk.StringVar()
tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)
tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)
# 重复密码变量及标签、输入框
new_pwd_confirm = tk.StringVar()
tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)
tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)
# 确认注册按钮及位置
bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',
command=signtowcg)
bt_confirm_sign_up.place(x=150, y=130)
# 退出的函数
def usr_sign_quit():
window.destroy()
# 加载记住的密码
try:
with open('remember_pwd.pickle', 'rb') as pwd_file:
pwd_info = pickle.load(pwd_file)
var_usr_name.set(pwd_info['name'])
var_usr_pwd.set(pwd_info['pwd'])
remember_pwd.set(1)
except FileNotFoundError:
pass
# 登录 注册按钮
bt_login = tk.Button(window, text='登录', command=usr_log_in)
bt_login.place(x=140, y=190)
bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
bt_logup.place(x=210, y=190)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=280, y=190)
# 登录窗口主循环
window.mainloop()
总结
- 官方版本核心调整:弱化口语化表达,采用 "安全体系 / 核心能力 / 交互设计" 等专业分类,符合企业公告的行文逻辑;
- 保留核心功能亮点:验证码安全校验、汉英互译、界面优化等核心信息完整保留,同时强化 "安全""效率" 等官方发布的核心诉求;
- 补充版本服务说明:新增版本后续规划与反馈渠道,体现官方产品的服务闭环思维。