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

2024-06-14 05:20

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

这篇关于python之对接有道翻译API接口实现批量翻译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059489

相关文章

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财