Zotero PDF翻译插件自定义翻译功能实现

Zotero PDF翻译插件自定义翻译功能实现 一 需求二、实现演示三、Zetero翻译插件的功能定制3.1 开发环境3.2 开发步骤3.3 插件开发实现3.3.1 添加服务3.3.2 编写任务处理程序3.3.3 导入任务处理程序3.3.4 添加服务名称3.3.5 构建 四、服务器的开发4.1 环境4.2 代码实现

一 需求

在使用Zotero PDF翻译插件的时候,感觉总是受到一些限制。Google翻译在国内无法使用,百度、deepl等翻译,都需要key。所以很大程度上,无法直接进行划词翻译。最常见的操作就是复制到浏览器中进行翻译。现在的需求就是: ** 能不能将复制这个动作自动化?**

我的思路就是: 对Zotero 插件进行修改,使其能够支持自定义的服务器访问。然后将需要翻译的内容,在服务器上,利用Pytho的爬虫功能,实现自动化的操作浏览器,并将结果返回到Zotero。

二、实现演示

三、Zetero翻译插件的功能定制 3.1 开发环境

nodejs

3.2 开发步骤

依据官网的介绍,开发的具体步骤如下:

插件是基于Zotero插件模板.

可以运行如下命令进行构建:

git clone https://github.com/windingwind/zotero-pdf-translate.gitcd zotero-pdf-translatenpm installnpm run build

插件生成在: ./builds/*.xpi.

添加新的翻译服务:

添加新的服务配置到: src/utils/config.ts > SERVICES;添加一个与其他服务格式相同的新的任务处理过程到src/modules/services/${serviceId}.ts 。 如果>程序运行成功,导出函数将翻译的结果放在 data.result 中,如果运行失败,则抛出一个异常;在src/modules/services.ts中导入任务处理函数在addon/chrome/locale/${lang}/addon.properties中添加本地语言的服务名称: service.${serviceId}构建与测试 3.3 插件开发实现 3.3.1 添加服务

在这里相当于要用建立一个自定义服务的对象

3.3.2 编写任务处理程序

文件位置如下图所示: 图中代码如下:

import { TranslateTask, TranslateTaskProcessor } from "../../utils/translate";export default async function (data) { const url = data.secret; const reqBody = `data=${encodeURIComponent(data.raw)}&from=${encodeURIComponent(data.langfrom)}&to=${encodeURIComponent(data.langto)}`; const xhr = await Zotero.HTTP.request("POST", url, { responseType: "json", body: reqBody, }); if (xhr?.status !== 200) { throw `Request error: ${xhr?.status}`; } data.result = xhr.response.data;}; 3.3.3 导入任务处理程序

3.3.4 添加服务名称

3.3.5 构建

构建命令如下:

npm run build

构建后的插件目录: 插件安装后的效果:

四、服务器的开发 4.1 环境

python:

flask作为服务器selenium:作为自动化工具 4.2 代码实现 from flask import Flask, jsonify,requestimport loggingfrom urllib.parse import urlparseimport seleniumwire.undetected_chromedriver as ucfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import TimeoutExceptionfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECimport pyperclipimport timeimport osapp = Flask(__name__)class Translate(): def __init__(self,options=None,sw_options={},isUC=False) -> None: self.opened_domain = {} if options is None: options = uc.ChromeOptions() assert isinstance(options,uc.ChromeOptions) self.options = options self.sw_options = sw_options if isUC: self.driver = uc.Chrome( options=self.options, seleniumwire_options=self.sw_options ) else: self.driver = webdriver.Chrome(options=self.options) def openUrl(self,url): domain = urlparse(url).netloc handles = self.driver.window_handles # 判断当前浏览器是否打开 if len(self.opened_domain)

比丘资源网 » Zotero PDF翻译插件自定义翻译功能实现

发表回复

提供最优质的资源集合

立即查看 了解详情