python之对接有道翻译API接口实现批量翻译

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

python之对接有道翻译API接口实现批量翻译
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 有道翻译API 对接

为初学者节省宝贵的学习时间,避免困惑!


前言:

  最近在做软件语言本地化的时候,需要将软件中涉及到的中文全部翻译成英文,由于需要翻译的中文很多,一个一个翻译的话工作量很大,所以开发了这个工具,可是实现文本的批量翻译。

TechX 教程效果:

在这里插入图片描述


文章目录

  • 一、获取有道智云应用ID和应用密钥
    • 1、注册有道智云AI开放平台
    • 2、创建应用
    • 3、查看API接口文档和示例
    • 4、查看常见语种和计费方式
  • 二、实战


一、获取有道智云应用ID和应用密钥

1、注册有道智云AI开放平台


有道智云API接口调用官方网站:有道智云

首先先要去官网注册个账号,如果有账号直接登陆。

在这里插入图片描述


使用网易邮箱直接登录

在这里插入图片描述

2、创建应用


在官网登录后您会自动跳转至智云控制台

在这里插入图片描述

在业务指南页 / 应用总览页 ,点击创建应用按钮,进入创建应用页

应用名称:你想给你的应用取得名字

选择服务:选择文本翻译

接入方式:使用API接口访问

应用类别:选择实用工具

在这里插入图片描述

在业务指南页 / 业务总览页 ,可以查看到我们已经创建好的应用

在这里插入图片描述

3、查看API接口文档和示例


点击控制台左侧的自然语言翻译服务/文本翻译,可以进入服务详情页。

点击“接入方式”中的“文档”按钮,可以访问对应的技术文档。

点击“SDK下载”按钮可以下载SDK;在“示例”部分可以查看Demo。

在接入过程中您可能会用到“应用ID(即APP key)”、“应用密钥”等信息,这些信息可以在应用概览中查看。

在这里插入图片描述


接口调用参数
调用API需要向接口发送以下字段来访问服务。

在这里插入图片描述

4、查看常见语种和计费方式


在使用前我们可以查看产品文档,来了解API支持哪些常见语种的翻译,并且查看价格

在这里插入图片描述



二、实战


在进行代码开发之前需要安装两个包,使用以下命令进行包的安装。

pip install requests ttkbootstrap

APP_KEY 为你自己创建的应用的ID

APP_SECRET 为你自己创建的应用的密钥

import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter import ttk
import requests
import hashlib
import time
import uuid
import os
import threading
import datetime
import csv
import ttkbootstrap as ttkb
from ttkbootstrap.constants import *# 有道翻译API配置信息
YOUDAO_URL = 'https://openapi.youdao.com/api'
APP_KEY = 'YOUR_APP_KEY'
APP_SECRET = 'YOUR_APP_SECRET 'LANGUAGES = {"Chinese": "zh-CHS","English": "en","French": "fr","Spanish": "es","German": "de","Japanese": "ja","Korean": "ko","Russian": "ru","Portuguese": "pt","Italian": "it"
}def encrypt(signStr):hash_algorithm = hashlib.sha256()hash_algorithm.update(signStr.encode('utf-8'))return hash_algorithm.hexdigest()def truncate(q):if q is None:return Nonesize = len(q)return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]def do_request(data):headers = {'Content-Type': 'application/x-www-form-urlencoded'}response = requests.post(YOUDAO_URL, data=data, headers=headers)response.raise_for_status()  # 检查请求是否成功return responsedef translate(text, from_lang, to_lang):data = {'from': from_lang,'to': to_lang,'signType': 'v3','curtime': str(int(time.time())),'appKey': APP_KEY,'q': text,'salt': str(uuid.uuid1()),'vocabId': ''  # 可选,用户词表ID}signStr = APP_KEY + truncate(text) + data['salt'] + data['curtime'] + APP_SECRETdata['sign'] = encrypt(signStr)response = do_request(data)result = response.json()if result.get('errorCode') == '0':return result['translation'][0]else:raise Exception(f"Error: {result.get('errorCode')}, {result.get('errorMsg')}")def select_file():file_path = filedialog.askopenfilename(filetypes=[("Text Files", "*.txt")])if file_path:file_path_var.set(file_path)def translate_file():file_path = file_path_var.get()from_lang = LANGUAGES[source_lang_var.get()]to_lang = LANGUAGES[target_lang_var.get()]if not file_path:messagebox.showerror("Error", "Please select a TXT file first.")returntry:with open(file_path, 'r', encoding='utf-8') as file:lines = file.readlines()except Exception as e:messagebox.showerror("Error", f"Failed to read TXT file: {e}")returntranslated_lines = []# 显示进度条和进度标签progress_bar["maximum"] = len(lines)progress_bar["value"] = 0progress_bar.grid(row=5, column=0, columnspan=4, pady=5, sticky=(tk.W, tk.E))progress_label["text"] = "Translation in progress..."progress_label.grid(row=4, column=0, columnspan=4, pady=5)def translate_and_update_progress():for i, line in enumerate(lines, start=1):try:translated_text = translate(line.strip(), from_lang, to_lang)translated_lines.append((line.strip(), translated_text))app.update()time.sleep(1)except Exception as e:messagebox.showerror("Error", f"Translation failed for line: {line.strip()}\nError: {e}")progress_bar.stop()returnprogress_bar["value"] = iprogress_label["text"] = f"Progress: {i}/{len(lines)}"save_translated_file(translated_lines)progress_label["text"] = "Translation completed"threading.Thread(target=translate_and_update_progress).start()def save_translated_file(translated_lines):output_dir = os.path.dirname(file_path_var.get())output_file_path = os.path.join(output_dir, "Translate_output.csv")# 检查文件是否存在以决定是否写入标题行file_exists = os.path.isfile(output_file_path)# 读取现有的内容到一个集合中以避免重复existing_lines = set()if file_exists:with open(output_file_path, 'r', encoding='utf-8') as file:csv_reader = csv.reader(file)for row in csv_reader:if len(row) > 1:existing_lines.add(tuple(row))try:with open(output_file_path, 'a', encoding='utf-8', newline='') as file:csv_writer = csv.writer(file, quoting=csv.QUOTE_ALL)if not file_exists:csv_writer.writerow(["源语言", "目标语言"])csv_writer.writerow(["Source", "Target"])for line in translated_lines:row = (line[0], line[1])if row not in existing_lines:csv_writer.writerow(row)existing_lines.add(row)except Exception as e:messagebox.showerror("Error", f"Failed to write CSV file: {e}")returnmessagebox.showinfo("Success", "File translated successfully and saved to:\n{}".format(output_file_path))# 打开保存文件所在的文件夹folder_path = os.path.dirname(output_file_path)os.startfile(folder_path)app = ttkb.Window(themename="superhero")  # 可以选择不同的主题
app.title("Localization Translator")file_path_var = tk.StringVar()
source_lang_var = tk.StringVar(value="Chinese")
target_lang_var = tk.StringVar(value="English")frame = ttk.Frame(app, padding=10)
frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S), padx=10, pady=10)source_lang_label = ttk.Label(frame, text="Source Language:")
source_lang_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.E)
source_lang_menu = ttk.OptionMenu(frame, source_lang_var, source_lang_var.get(), *LANGUAGES.keys(), bootstyle="primary-outline")
source_lang_menu.grid(row=0, column=1, padx=5, pady=5, sticky=tk.W)target_lang_label = ttk.Label(frame, text="Target Language:")
target_lang_label.grid(row=0, column=2, padx=5, pady=5, sticky=tk.E)
target_lang_menu = ttk.OptionMenu(frame, target_lang_var, target_lang_var.get(), *LANGUAGES.keys(), bootstyle="primary-outline")
target_lang_menu.grid(row=0, column=3, padx=5, pady=5, sticky=tk.W)select_button = ttk.Button(frame, text="Select File", command=select_file, bootstyle="primary-outline")
select_button.grid(row=1, column=0, padx=5, pady=20)file_path_entry = ttk.Entry(frame, textvariable=file_path_var, width=50)
file_path_entry.grid(row=1, column=1, columnspan=3, padx=5, pady=5, sticky=(tk.W, tk.E))translate_button = ttk.Button(frame, text="Translate", command=translate_file, bootstyle="primary-outline")
translate_button.grid(row=2, column=0, columnspan=4, pady=10)progress_label = ttk.Label(frame, text="")
progress_label.grid(row=4, column=0, columnspan=4, pady=5)progress_bar = ttk.Progressbar(frame, orient=tk.HORIZONTAL, mode="determinate")
progress_bar.grid(row=5, column=0, columnspan=4, pady=5, sticky=(tk.W, tk.E))# 在窗口创建后隐藏进度条和进度标签
progress_bar.grid_forget()
progress_label.grid_forget()app.mainloop()

Source Language:源语言

Target Language:目标语言

Select File:选择一个txt文件,txt文件包含要翻译的文字

Translate:开始进行翻译,等待翻译完成,在txt同级目录下将会输出一个csv源语言和目标语言对照表

在这里插入图片描述



TechX —— 心探索、心进取!

每一次跌倒都是一次成长

每一次努力都是一次进步

END
感谢您阅读本篇博客!希望这篇内容对您有所帮助。如果您有任何问题或意见,或者想要了解更多关于本主题的信息,欢迎在评论区留言与我交流。我会非常乐意与大家讨论和分享更多有趣的内容。
如果您喜欢本博客,请点赞和分享给更多的朋友,让更多人受益。同时,您也可以关注我的博客,以便及时获取最新的更新和文章。
在未来的写作中,我将继续努力,分享更多有趣、实用的内容。再次感谢大家的支持和鼓励,期待与您在下一篇博客再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/351628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度神经网络——深度学习中的 RNN 和 LSTM 是什么?

引言 自然语言处理和人工智能聊天机器人领域许多最令人印象深刻的进步都是由 递归神经网络&#xff08;RNN&#xff09; 和长短期记忆&#xff08;LSTM&#xff09;网络。 RNN 和 LSTM 是特殊的神经网络架构&#xff0c;能够处理顺序数据&#xff0c;即按时间顺序排列的数据。…

款基于SpringBoot+Vue+ElementUI技术栈开发的自定义表单工具(已开源)

TDuck填鸭表单是一个开源的问卷调查系统&#xff0c;一款基于SpringBootVueElementUI技术栈开发的自定义表单工具&#xff0c;它不仅支持问卷调查&#xff0c;还能进行数据收集。TDuck团队经过两年的优化&#xff0c;使得社区版功能趋于稳定。2023年5月&#xff0c;团队推出了可…

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

http穿透怎么做?

众所周知http协议的默认端口是80&#xff0c;由于国家工信部要求&#xff0c;域名必须备案才给开放80端口&#xff0c;而备案需要固定公网IP&#xff0c;这就使得开放http80端口的费用成本和时间成本变的很高。那么能不能利用内网穿透技术做http穿透呢&#xff1f;下面我就给大…

VMware Workstation 16安装ESXI7.0

一、新建虚拟机 根据新建虚拟机向导新建虚拟机&#xff0c;这里不在展示。 二、挂载ESXI7.0镜像 三、安装ESXI操作系统 1、打开电源 2、选择安装ESXI 回车&#xff0c;F11 选择安装位置&#xff0c;我这里只添加了一块盘&#xff0c;不用选择&#xff0c;回车 选择键盘&…

ComfyUI

文章目录 一、关于 ComfyUI特点快捷键QA你为什么做这个&#xff1f;这是给谁的&#xff1f; 二、安装1、Windows直接链接下载如何在另一个UI和ComfyUI之间共享模型&#xff1f; 2、Jupyter Notebook3、手动安装&#xff08;Windows、Linux&#xff09;AMD GPU&#xff08;仅Lin…

CloudFlare 里如何设置参数传递的 301 重定向

自从接到【哈哈,笑死我了都,黔驴技穷了都!】一文里提到的代维客户订单,这两天明月就一直在加班加点的重新部署着客户的四个服务器,因为有三个都是 WordPress+WooCommerce 式的电商平台,很是有些费时费力,好在现在基本都搞定了,剩下的就是些细节方面的优化、调整了。期间…

深入了解RSA加密算法

目录 前言 一、什么是RSA&#xff1f; 二、RSA加密的基本概念 1.非对称加密 2.密钥生成 3.加密和解密 三、RSA加密的工作原理 四、RSA的应用场景 五、RSA加密解密的实现 六、RSA算法的局限性及改进措施 前言 在当今的数字化时代&#xff0c;信息的安全性成为了人们关注…

mongodb command

1. start and stop ./mongod --dbpath -dbpath /data/shard1/db --logpath -dbpath /data/shard1/db/logs/mongodb.log --fork mongod --shutdown --dbpath /data/shard1/db MongoDB基础篇-03-启动与关闭_mongodb启动和关闭-CSDN博客 2. 查看分片数据分布 mongo mongo01.c…

C++ | Leetcode C++题解之第160题相交链表

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA nullptr || headB nullptr) {return nullptr;}ListNode *pA headA, *pB headB;while (pA ! pB) {pA pA nullptr ? headB : p…

FreeRTOS队列(queue)

队列(queue)可以用于"任务到任务"、 "任务到中断"、 "中断到任务"直接传输信息。 1、队列的特性 1、1常规操作 队列的简化操如下图所示&#xff0c;从此图可知&#xff1a; 队列中可以包含若干数据&#xff1a;队列中有若干项&#xff0c;这…

给客户做WMS培训时,客户说这是什么垃圾系统……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在上周的一次WMS系统培训现场&#xff0c;我们遭遇了意想不到的“小插曲”。 当时&#xff0c;培训师小李正热情洋溢地介绍WMS系统的种种优点&am…

使用 PNPM 从零搭建 Monorepo,测试组件并发布

1 目标 通过 PNPM 创建一个 monorepo&#xff08;多个项目在一个代码仓库&#xff09;项目&#xff0c;形成一个通用的仓库模板。 这里以在该 monorepo 项目中搭建 web components 类型的组件库为例&#xff0c;介绍从仓库搭建、组件测试到组件发布的整个流程。 这个仓库既可…

ffmpeg封装和解封装介绍-(10)综合完成视频重编码为h265,解封装解码编码再封装

主函数逐句解析&#xff1a; 由于代码太多我们只解析主函数&#xff0c;&#xff08;其他封装函数见前面文章&#xff0c;同时用到了解码编码封装代码&#xff09;。 初始化和参数处理 int main(int argc, char* argv[]) {/// 输入参数处理string useage "124_test_x…

教育小程序开发:技术实现与实践案例

随着信息技术的不断进步&#xff0c;教育小程序在教育领域的应用越来越广泛。教育小程序开发不仅可以提高教学效率&#xff0c;还能够提供个性化的学习体验。本文将以技术代码为例&#xff0c;详细介绍教育小程序开发的关键技术和实践案例&#xff0c;帮助开发者更好地理解和实…

鸿蒙应用开发

学习视频&#xff1a; 00.课程介绍_哔哩哔哩_bilibili 官网&#xff1a;开发者文档中心 | 华为开发者联盟 (huawei.com) 开发工具 &#xff1a;DevEcoStudio &#xff0c; 类似Jetbrains 全家桶 ArkTS开发语言 &#xff1a;&#xff08;基于TS,集成了前端语言&#xf…

奥特曼谈AI的机遇、挑战与人类自我反思:中国将拥有独特的大语言模型

奥特曼在对话中特别提到&#xff0c;中国将在这个领域扮演重要角色&#xff0c;孕育出具有本土特色的大语言模型。这一预见不仅彰显了中国在全球人工智能领域中日益增长的影响力&#xff0c;也预示着未来技术发展的多元化趋势。 ①奥特曼认为AI在提升生产力方面已显现积极作用&…

【JS重点17】原型链(面试重点)

一&#xff1a;原型链底层原理 以下面一段代码为例&#xff0c;基于原型对象&#xff08;Star构造函数的原型对象&#xff09;的继承使得不同构造函数的原型对象关联在一起&#xff08;此处是最大的构造函数Object原型对象&#xff09;&#xff0c;并且这种关联的关系是一种链…

Project ERROR: Unknown module(s) in QT: xlsx

Qt5下Qxlsx模块安装及使用_qt5xlsx-CSDN博客 主要参考上面这篇文章&#xff01; Perl的安装与配置_perl安装-CSDN博客 1.1 windows环境安装Perl_windows perl-CSDN博客 首先&#xff0c;需要安装Perl,我安装的是Windows版本的。 Download & Install Perl - ActiveStat…