当前位置: 首页 > news >正文

Lingarr插件开发实战:如何用.NET编写自定义翻译服务插件(附Cloudflare示例)

Lingarr插件开发实战:如何用.NET编写自定义翻译服务插件(附Cloudflare示例)

【免费下载链接】lingarrLingarr is an application that supports both local and SaaS translation services to translate subtitle files into a specified target language. With automated translation options, Lingarr simplifies translating subtitles.项目地址: https://gitcode.com/gh_mirrors/li/lingarr

你是否在使用Lingarr翻译字幕时遇到过这样的困扰:内置的翻译服务不够用,想接入自己公司的AI接口却无从下手?本文将带你进行Lingarr插件开发实战,用.NET编写自定义翻译服务插件。Lingarr是一款支持本地与SaaS翻译服务的开源字幕翻译应用,其灵活的插件机制允许任何人接入新的大模型。我们将以官方Cloudflare示例为蓝本,手把手完成从接口理解、编码实现到部署加载的全流程。

插件机制的核心:接口与清单

在动手写代码之前,先理解Lingarr插件系统的"三件套":

  • 翻译服务实现:实现ITranslationService接口,负责真正调用AI接口翻译文本。
  • 插件清单:实现IPluginManifest接口,告诉Lingarr在设置界面展示哪些配置项(如API Key、模型名)。
  • 版本声明:通过LingarrPluginApiVersion特性标记插件API版本,宿主会校验主版本号是否匹配。

官方已将这套机制整理成示例,源码位于 samples/CloudflarePlugin/,核心契约定义在 Lingarr.Contracts/Translation/ITranslationService.cs 和 Lingarr.Contracts/Interfaces/Plugins/IPluginManifest.cs。

第一步:搭建.NET类库项目

创建一个 .NET 类库,只需引用Lingarr.Contracts项目即可。参考官方示例的项目文件 samples/CloudflarePlugin/CloudflarePlugin.csproj:

  • 目标框架为 .NET 10
  • 引用Lingarr.Contracts项目
  • 引用Microsoft.Extensions.Logging.Abstractions用于日志

在 samples/CloudflarePlugin/AssemblyInfo.cs 中声明API版本:

[assembly: LingarrPluginApiVersion(1, 0)]

这一行至关重要,缺失或主版本不匹配的DLL会被 PluginLoader 直接跳过。

第二步:实现翻译服务

翻译服务类用[PluginProvider("你的标识")]标记,然后实现ITranslationService的四个成员:

  • TranslateAsync:核心翻译方法,接收文本、源语言、目标语言,还可选接收前后字幕行作为上下文。
  • GetLanguages:返回支持的语言列表;如果服务没有语言列表接口,返回空即可。
  • GetModels:返回可选的模型下拉列表。
  • GetLanguagePair:将请求的语言解析为实际语言代码。

Cloudflare示例的实现思路很清晰(见 samples/CloudflarePlugin/CloudflareTranslator.cs):

  1. 通过注入的ISettingsAccess读取账号ID、加密的API Token和模型配置。
  2. 构造HTTP请求,调用https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/{model}
  3. 处理429 Too Many Requests503状态码,按Lingarr配置的重试策略退避重试。
  4. 失败时抛出TranslationException,让Lingarr统一处理错误提示。

注意:插件标识不能与内置服务冲突,以下为保留标识:anthropicopenaigeminideepseekmistralxailocalaideepllibretranslategooglebingmicrosoftyandex

第三步:编写插件清单,自动生成配置界面

清单类的作用是"零前端代码"生成设置表单。它声明了提供者名称、显示名称、描述,以及一个PluginSettingField列表。每个字段包含Key、Label、类型(文本/URL/密钥/远程下拉)、是否必填、默认值和说明。

Cloudflare清单声明了三个字段:Account ID(文本)、API token(密钥类型,会加密存储)、Translation model(文本,默认@cf/meta/m2m100-1.2b),见 samples/CloudflarePlugin/CloudflarePluginManifest.cs。

有了清单,你在设置 > 插件页面就能看到完整的配置表单,无需修改前端代码。

第四步:构建与部署插件

执行以下命令编译:

dotnet build samples/CloudflarePlugin/CloudflarePlugin.csproj -c Release

构建产物中你需要Lingarr.Plugin.Cloudflare.dllLingarr.Contracts.dll两个文件。

Lingarr通过环境变量PLUGINS_PATH指定插件目录。以Docker Compose为例:

services: lingarr: image: lingarr/lingarr:latest environment: PLUGINS_PATH: /app/plugins volumes: - ./plugins:/app/plugins

把两个DLL放入./plugins目录并重启Lingarr,看到日志输出类似Loaded plugin ... (1 manifest(s))即加载成功,随后插件会出现在Settings > Plugins中。

实战要点与安全提醒

  • 上下文翻译TranslateAsync的上下文参数可传递前后字幕行,这对依赖上下文的模型(如人名、术语一致性)很有帮助,务必善用。
  • 加密存储:API密钥类字段使用Secret类型,并通过GetEncryptedSettingAsync读取,避免明文落盘。
  • 错误处理:统一抛出TranslationException(定义在 Lingarr.Contracts/Exceptions/TranslationException.cs),让上层重试与展示逻辑正常工作。
  • 安全警示:Lingarr的插件以完整权限运行,没有沙箱隔离,请只加载可信来源的DLL。

写在最后

通过本文的Lingarr插件开发实战,你已经掌握了自定义翻译服务插件的完整链路:理解ITranslationService接口、编写清单驱动配置界面、声明API版本、构建并部署到PLUGINS_PATH目录。无论你想接入企业私有大模型、国产AI服务,还是自建翻译网关,这套模式都完全适用。现在就动手写一个属于你自己的翻译插件吧!🚀

如需获取完整项目,可执行git clone https://gitcode.com/gh_mirrors/li/lingarr查看源码与示例。

【免费下载链接】lingarrLingarr is an application that supports both local and SaaS translation services to translate subtitle files into a specified target language. With automated translation options, Lingarr simplifies translating subtitles.项目地址: https://gitcode.com/gh_mirrors/li/lingarr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1405492/

相关文章:

  • database/sql标准库:直接操作数据库
  • Lingarr字幕解析器源码解读:SRT与SSA解析/写入的完整实现原理
  • Input Leap 开源 KVM 深度解析:一套键鼠无缝穿越多台电脑的 5 个关键机制
  • 越华环保集团污水边缘数采与HJ212对接:数字化污水治理分层架构实践
  • 5分钟快速上手quanttrader:从pip安装到跑通第一个回测策略
  • 2026 年 8 月北京西城区,旧金资产优化处置优选途径 - 大牌科普时报
  • 还在为呆板的 Windows 任务栏发愁?TranslucentTB 的 5 种通透玩法,3 分钟让你的桌面焕然一新
  • 2026年8月优质的手工型板生产厂家推荐,水平线模具/铸铝铁模具/煤粉砂铸造模具/铁件产品加工,手工型板源头厂家有哪些 - 企业权威推荐大使
  • 丽水漏水检测维修全城上门2026全网口碑优选:防水补漏公司#丽水莲都区 - 超人防水
  • 面向AI的极简输出协议:Ix --format llm格式深度解析
  • ComfyUI 语义分块放大完整指南:Smart Tile 2.0 如何让 800 万像素大图不再爆显存
  • PinView API参考速查手册:全部属性与方法一表看懂
  • 用AI生成你的Clojure MCP服务器:LLM辅助配置与提示词模板
  • 你的内存条真的在按BIOS设定跑吗?用ZenTimings把AMD内存时序看个明明白白
  • 用Chebfun求解常微分方程:chebop与chebgui从入门到精通的终极指南
  • 深蓝变局:业务稳定且发展潜力巨大的旅游类上市公司有哪些 - 2027品牌AI展
  • 用 SQLGlot 打通多数据库:SQL 解析器 3 大核心能力与跨库迁移实战指南
  • 2026年无锡滨湖区健康管理公司解析:全周期服务与细胞技术如何匹配需求
  • 2026年企业GEO优化培训选型全攻略:3家合规服务商盘点+合作避坑核心FAQ - 商业大观
  • FreeRTOS与ThreadX双平台适配:embedded-resources的RTOS线程支持实现解析
  • 2026广州普拉提教练培训哪家专业?广佛口碑实力梯队盘点 - 米諾
  • 固始专业的视频制作团队口碑好
  • 4步搞定Zotero PDF中文翻译插件:英文文献轻松变中文,双语对照随心读
  • 从零定制:如何基于Materia KDE打造你自己的KDE专属主题
  • 2026郑州布契拉提首饰回收就来毓典奢品汇18617962974全国连锁专业靠谱 - 丽坤奢品汇
  • 进阶实战:基于android_maskable_layout 源码扩展自定义遮罩ViewGroup的完整指南
  • iOS越狱终极完整指南:从机型确认到插件安装的保姆级全流程
  • 2026 年 8 月更新:太原代理记账公司哪家靠谱?5 家正规机构盘点,附实用避坑指南 - 山西融纳集团
  • 臻品玉源玉器行:16载深耕和田玉的直营专业服务商 - 互联网科技品牌测评
  • 潮州湘桥 2026 靠谱防水补漏|本地实体房屋渗漏检测维修服务商 - 超人防水