eSearch 翻译功能实战指南:屏幕翻译、多引擎并行翻译与生词本
eSearch 翻译功能实战指南屏幕翻译、多引擎并行翻译与生词本【免费下载链接】eSearch截屏 离线OCR 搜索翻译 以图搜图 贴图 录屏 万向滚动截屏 屏幕翻译 Screenshot Offline OCR Search Translate Search for picture Paste the picture on the screen Screen recorder Omnidirectional scrolling screenshot Screen translator 支持Windows Linux macOS项目地址: https://gitcode.com/GitHub_Trending/es/eSearcheSearch 内置了一套完整的翻译体系覆盖屏幕翻译OCR 识别屏幕文字并实时翻译与主页面翻译文本翻译 多引擎并行对照两大场景支持接入 Google、DeepL、百度、腾讯、Yandex 以及各类兼容 OpenAI API 的本地/在线大模型LLM。本文以 docs/use/translate.md 为主体结合仓库源码完整讲解翻译器的添加与配置、屏幕翻译的两种模式、生词本模板语法、LLM 翻译接入以及免费翻译服务的用法读完即可在 eSearch 中搭建一套属于自己的翻译工作流。[!IMPORTANT]翻译引擎的准确度和翻译质量取决于翻译平台本身请根据需求自行选择合适的平台翻译结果仅供参考软件仅提供学习交流用途作者不对翻译结果负责。一、添加与配置翻译器eSearch 的翻译功能依赖第三方翻译平台的 API 实现大部分翻译引擎需要提供 Key密钥等信息才能使用。设置界面中会给出相关链接你在添加翻译器时可以看到其中大部分需要付费本文后续也会介绍一些免费用法。1.1 添加步骤在设置中添加翻译器会弹出一个对话框需要完成以下配置命名为翻译器命名可以重名也可以不填不填时软件会按引擎类型自动命名选择翻译引擎类型从支持的翻译平台列表中选择例如 Google、DeepL、百度、腾讯、ChatGPT大模型等填入 API 信息根据对话框内给出的链接指引在第三方平台创建 API将 Key、URL 等信息填入。填完后点击测试若提示测试通过即可完成添加如果填写的信息有所缺失则无法点击完成按钮。可以添加同种翻译引擎的不同翻译器例如配置多个不同的 DeepL Key主页面翻译时会显示翻译器名称。1.2 排序与默认引擎翻译器采用列表形式管理可以在设置中调节顺序。第一个翻译器将作为屏幕翻译的默认翻译引擎主页面翻译中多个翻译器的显示顺序也遵循该设置。从源码可以看到这一约定屏幕翻译在初始化时直接取翻译.翻译器列表的第一个条目作为引擎src/renderer/lib/translate.tsconst transE store.get(翻译.翻译器); if (transE.length 0) { const x transE[0]; const e getTranslators(store, x); // ... }设置项的定义同样注明“第一个为默认引擎”src/renderer/setting/setting.ts翻译.翻译器: { name: 翻译引擎, desc: 适用于屏幕翻译和搜索翻译第一个为默认引擎, // ... }1.3 翻译器数据结构在类型定义中翻译器条目包含以下字段src/ShareTypes.d.ts翻译: { 翻译器: { id: string; name: string; type: keyof typeof import(xtranslator)[default][e] | llm; keys: Recordstring, string | object; }[]; 收藏: { 文件: { path: string; template: string }[]; fetch: myFetch[]; }; 常用语言: string[]; };type翻译引擎类型llm表示使用大模型其余为xtranslator库内置引擎Google、DeepL 等keys保存该引擎所需的 API Key、URL 等凭据收藏即生词本配置分为文件生词本与网络生词本详见后文。1.4 屏幕翻译的语言设置目前无法在屏幕翻译窗口中直接设置翻译语言需要在设置中设置目标语言源语言一般默认为auto自动检测目标语言已自动设置为软件的显示语言。对应设置项为屏幕翻译.语言.from与屏幕翻译.语言.tosrc/renderer/setting/setting.ts其可选语言列表取自第一个翻译引擎即默认引擎所支持的语言范围。运行时源语言取屏幕翻译.语言.from为空则用auto目标语言取屏幕翻译.语言.to为空则回退到软件显示语言语言.语言见 src/renderer/lib/translate.ts。二、主页面翻译主页面翻译提供两种方式搜索引擎式在线翻译和内置多引擎并行翻译。2.1 搜索引擎式翻译你可以使用搜索引擎的方式进行翻译自定义翻译引擎的搜索 URL翻译时软件会打开对应的在线翻译页面并自动填入文字进行翻译。这类翻译引擎的 URL 中一般用%s占位符表示待翻译文本文档给出了一些示例平台URLGooglehttps://translate.google.com/?optranslatetext%sDeepLhttps://www.deepl.com/translator#any/any/%s金山词霸http://www.iciba.com/word?w%s百度https://fanyi.baidu.com/#auto/auto/%s腾讯https://fanyi.qq.com/?text%s这些翻译方式需要打开对应网站页面大多不够简洁因此 eSearch 提供了自定义翻译 API的方式即下面介绍的内置翻译界面。2.2 内置多引擎并行翻译主页面翻译引擎列表中已经内置一个名为翻译的翻译引擎你可以在设置中修改名称、调整顺序。该引擎会打开软件内置的翻译界面对应渲染页面 translate.html 与实现 src/renderer/translate/translate.ts通过读取设置好的翻译器同时启用多个翻译器进行并行翻译方便对照译文并可一键复制结果。从源码可以看到并行翻译的实现页面会为每个翻译器创建一个结果卡片翻译时依次调用每个引擎src/renderer/translate/translate.ts每个卡片提供复制一键复制该引擎的翻译结果保存星标把该条译文写入生词本仅在配置了生词本时显示重试重新调用该引擎翻译回译在原文为“自动检测”时不可用否则把译文再反向翻译回去用于校验翻译质量。翻译引擎的初始化同样走 getTranslatorstype为llm时按 ChatGPT 引擎处理并注入在线模型的 URL/Key其余类型直接setKeys填入密钥。2.3 语言检测主页面翻译还内置了基于 FastText 的本地语言检测xushengfeng/fasttext_wasm输入文字后自动识别源语言并匹配到已支持的语言同时智能推荐目标语言优先取常用语言中与源语言不同的那个否则回退到软件显示语言见 src/renderer/translate/translate.ts。翻译过的语言组合会被记入翻译.常用语言方便下次快速切换src/renderer/translate/translate.ts。三、屏幕翻译屏幕翻译会自动识别屏幕区域的文字并将其翻译成目标语言非常适合科研图片、视频或游戏场景。3.1 两种模式贴图翻译与自动翻译在截屏工具栏按钮的右上角可以切换屏幕翻译模式贴图或自动翻译。贴图模式适用于除了翻译文字还需要同时关注图标原本形状、结构的图片。它会像贴图一样生成一个覆盖在原图上的窗口并把文字翻译好。贴图翻译拥有和贴图一样的功能缩放、保存、复制等区别在于图片上的文字被翻译了。自动翻译模式适用于需要不停翻译的场合如视频或游戏定时截取屏幕并自动翻译。3.2 运行原理源码级屏幕翻译的渲染页面是 translator.html核心实现在 src/renderer/translator/translator.ts。其工作流程为截屏根据传入的屏幕 id 与矩形区域调用截屏模块抓取画面translator.tsOCR对截取画面运行离线 OCR得到按段落划分的文字及其坐标框translator.ts翻译把识别出的文字批量交给默认翻译引擎并将译文按原坐标渲染成覆盖层同时保留原文行高与字号以贴合原图translator.ts。翻译结果带有一个缓存 Map相同文本不会重复请求定时循环自动翻译模式下按屏幕翻译.dTime默认 3000ms定时重复上述流程translator.ts工具栏还提供暂停/继续与手动刷新按钮。3.3 屏幕翻译相关设置设置项说明屏幕翻译.语言.from源语言默认为自动检测屏幕翻译.语言.to目标语言默认跟随软件显示语言屏幕翻译.dTime自动翻译的定时间隔毫秒默认 3000屏幕翻译.color.bg翻译覆盖层背景色默认rgb(255,255,255,0.5)屏幕翻译.color.text翻译文字颜色默认#000以上配置项均可在 src/renderer/setting/setting.ts 与 src/ShareTypes.d.ts 中找到定义。四、生词本把翻译结果沉淀下来生词本功能用于在主页面翻译时把翻译结果自动添加到生词本。生词本分为文件生词本和网络生词本两种文件生词本把生词和翻译以追加方式写入指定本地文件网络生词本把生词和翻译上传到网络服务器可与 Anki 等记忆软件联动。4.1 模板语法模板用来格式化生词本的输出支持以下占位符占位符含义${from}原始语言${to}目标语言${fromT}翻译前的文字${toT}翻译后的文字${engine}使用的翻译引擎模板示例${fromT} - ${toT} (${engine})以Hello World为例翻译结果为你好世界模板输出为Hello World - 你好世界 (ChatGPT)源码中的模板替换实现见 src/renderer/translate/translate.ts五个占位符依次被替换为实际值function saveTemplate(t: string, obj: saveData) { return t .replaceAll(${from}, obj.from) .replaceAll(${to}, obj.to) .replaceAll(${fromT}, obj.fromT) .replaceAll(${toT}, obj.toT) .replaceAll(${engine}, obj.engine); }[!NOTE] 注意在一些格式中如 JSON请不要忘记双引号。4.2 文件生词本文件生词本只需要指定路径path和模板template两个字段对话框实现见 src/renderer/setting/setting.ts。由于文件生词本使用文本追加模式所以不支持 JSON 格式可以使用 JSONL、csv、txt 等格式。csv 格式模板示例${fromT}, ${from}, ${toT}, ${to}, ${engine}生成的文件内容示例如下可以使用 Excel 等表格软件打开... Hello World, en, 你好世界, zh, ChatGPT ...源码中通过fs.appendFile以追加模式写入每次翻译保存时追加一行换行分隔的记录src/renderer/translate/translate.tsfunction saveFile(obj: saveData) { const filesx showCang.文件; for (const i of filesx) { fs.appendFile(i.path, \n${saveTemplate(i.template, obj)}, () {}); } }4.3 网络生词本以 Anki 为例网络生词本支持配置名称、URL、请求方式GET/POST、请求头和请求体。其中URL 和请求体body都可以使用模板。配置项对应的对话框实现见 src/renderer/setting/setting.ts默认请求方式为 GET请求头按行输入每行格式为key:value。以 Anki 为例安装AnkiConnect插件并在 Anki 中启用该插件URL 填写http://127.0.0.1:8765请求体body填写{ action: addNote, version: 6, params: { note: { deckName: 你的牌组, modelName: 类型名称, fields: { Front: ${fromT}, Back: ${toT} }, options: { allowDuplicate: false } } } }这样每次在主页面翻译并点击保存后译文就会通过 AnkiConnect 写入 Anki 的指定牌组。源码中网络生词本通过fetch发送请求URL、请求体都先经过模板渲染src/renderer/translate/translate.tsfunction saveFetch(obj: saveData) { const webx showCang.fetch; for (const i of webx) { fetch(saveTemplate(i.url, obj), { method: i.method, body: saveTemplate(i.body, obj), headers: i.headers, }); } }保存生词时文件生词本与网络生词本会同时触发saveW失败也不影响翻译主流程。五、使用 LLM 模型翻译eSearch 支持本地 LLM 或在线 LLM作为翻译引擎。使用步骤先按在线 AI 模型文档添加在线 AI本地 LLM 可以部署任何兼容 OpenAI API 的服务例如 ollama添加时 URL 填http://localhost:11434/v1点击获取模型列表并选择模型确保测试通过回到翻译设置添加翻译器类型选择“大模型”选择已添加的在线模型测试通过后即可使用。从源码看LLM 翻译器在初始化时直接复用在线 AI 的配置找到对应名称的在线模型把 URL 拼上chat/completions作为 API 地址并使用该模型的 Key 与模型名src/renderer/lib/translate.tsif (settingItem.type llm) { const model store.get(AI.在线模型).find((i) i.name settingItem.keys.name); if (!model) return; e.setKeys({ url: new URL(chat/completions, model.url).toString(), key: model.key, config: { model: model.model }, }); }六、其他免费翻译服务以下服务不需要付费即可使用谷歌翻译Google Translate直接在软件设置中添加翻译器测试通过即可Yandex 翻译同上直接添加即可腾讯交互式翻译同上直接添加即可DeeplX通过 DeeplX 项目部署的自托管服务可搭配 DeepL 风格翻译使用。这些翻译引擎与xtranslator库内置的类型一一对应添加时选择对应引擎类型并填入必要信息如有即可。免费服务的可用性与稳定性取决于对应平台请结合自身网络环境选择。小结eSearch 的翻译体系可以概括为一套翻译器配置服务两大场景。屏幕翻译负责“看图翻译”自动翻译模式适合视频与游戏贴图模式适合需要保留原图结构的图片主页面翻译提供搜索引擎式跳转与内置多引擎并行对照两种方式配合语言检测、一键复制、回译校验与生词本沉淀构成了从“看懂”到“记住”的完整闭环。翻译器配置集中在设置界面的“翻译引擎”列表第一个翻译器决定屏幕翻译引擎顺序即优先级生词本的模板语法简洁通用既可以落盘为 CSV/JSONL 供表格软件处理也可以对接 AnkiConnect 实现记忆卡片自动化。【免费下载链接】eSearch截屏 离线OCR 搜索翻译 以图搜图 贴图 录屏 万向滚动截屏 屏幕翻译 Screenshot Offline OCR Search Translate Search for picture Paste the picture on the screen Screen recorder Omnidirectional scrolling screenshot Screen translator 支持Windows Linux macOS项目地址: https://gitcode.com/GitHub_Trending/es/eSearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考