Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【教程】部署本地离线机器翻译服务并在插件中使用 #5412

Closed
YiiGuxing opened this issue Mar 23, 2024 Discussed in #5411 · 1 comment
Closed

【教程】部署本地离线机器翻译服务并在插件中使用 #5412

YiiGuxing opened this issue Mar 23, 2024 Discussed in #5411 · 1 comment

Comments

@YiiGuxing
Copy link
Owner

Discussed in #5411

Originally posted by YiiGuxing March 23, 2024

教程:部署本地离线机器翻译服务并在插件中使用

前言

前些时候小伙伴 @hepengzhou8015 向我提出了自定义翻译引擎相关的需求建议,以便满足其本地离线翻译的需求。这并不是第一个提出这样需求的小伙伴,很早就有其他小伙伴提出了,我也早早地定制了相关的开发计划,计划中翻译引擎在 v4.0 时会有较大的改变,届时顺便推出此功能,而在那之前并不是加入此类灵活通用或者更多的翻译引擎的最佳时机,如果现在草草地加入一个简单的实现,到时候可能会被完全舍弃,重新设计实现,这完全是没有必要的。所以,我只好请他耐心等待 v4.0 的推出。但随后他向仍来一个可本地部署的开源机器翻译项目:LibreTranslate,我稍微了解了一下该项目,顿时被狠狠地震撼了一把,只恨没有早些知道这么一个项目,离线翻译也是一个很重要的一个需求。默默地看了一眼并不存在的插件开发计划表,感到有些无力,忽然我灵机一动,或许可以想个办法来临时解决这个问题,让大家能提前使用到本地离线的翻译服务。于是就有了这一篇教程,希望能帮助到有需求的小伙伴们。至于为什么另想个一个旁门左道的办法而不是直接开发一个插件分支版本来支持此需求,还请容我狡辩一二:一是这样不影响后续版本的更新,有新版本插件发布可以正常更新。二是实在是没有更多精力来维护分支版本了,一但出现Bug或兼容问题,将得不到解决。好了,废话不多说,让我们开始吧。

部署本地 LibreTranslate 服务

LibreTranslate 是一个免费开源的机器翻译 API,完全自托管。与其他 API 不同,它不依赖于 Google 或 Azure 等专有提供商来执行翻译。相反,它的翻译引擎由开源的基于 OpenNMTArgos Translate 库提供支持。

一、安装 Python

下载并安装 Python,推荐使用 3.83.11 的版本,其他版本在 LibreTranslate 的依赖时会报错。最后配置好环境变量(Windows 安装时勾选 Add python.exe to PATH 即可,建议还勾选“为所有用户安装”)。

检查安装:

# 检查 python 命令
python -V
# 检查 pip 命令
pip -V

配置国内阿里镜像源:

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

二、安装 LibreTranslate

1. 安装

pip install libretranslate

2. 启动服务

libretranslate

第一次启动服务 LibreTranslate 会默认自动下载安装所有语言模型,模型共 88 个,下载需要梯子。另外,启动服务时你也可以指定需要加载的语言模型,例如只需要中英互译:

libretranslate --load-only zh,en

详细服务配置参数参见:官方文档

服务启动成功后通过浏览器访问 http://localhost:5000 即可在 LibreTranslate 提供的 Web 页面进行翻译了:

LibreTranslate Web

注意:服务第一次启动一但成功安装了任何一个语言模型,下一次启动就不会再下载安装新的语言模型,即使目前安装的模型并不全。庆幸的是你仍然可以通过手动管理这些语言模型。

3. 手动管理语言模型

到语言模型的安装目录中手动添加或者删除语言模型文件即可实现手动对语言模型的管理。语言模型的安装目录:

  • Windows 系统

    # 将 <用户名> 替换为你的系统用户名
    C:\Users\<用户名>\.local\share\argos-translate\packages
    
  • 其他系统:

    ~/.local/share/argos-translate/packages
    

你可以到 Argos Open Tech 下载所需要的语言模型(需要梯子)。模型列表中的 From To 是指从xx语言翻译到xx语言,要实现中英互译你至少需要 Chinese -> EnglishEnglish -> Chinese 两个模型。

下载下来的模型文件是一个扩展名为 .argosmodel 的文件,其实它就是一个 ZIP 压缩包改了个扩展名而已。将模型文件的扩展名 .argosmodel 修改为 .zip 后将其解压缩至模型目录即可完成模型安装,要使模型生效需要重启 LibreTranslate 服务。

三、插件内访问 LibreTranslate 服务

1. 安装配置 OpenResty

OpenResty 官方下载页面 下载你所需要的版本并安装。

下载配置文件:openresty.zip

解压缩 openresty.zip 文件得到 conflualib 两个文件夹,Windows 系统的话直接将这两个文件夹覆盖到你的 openresty 的安装目录下即可,如果是其他系统,你可能需要找到并覆盖到对应的目录下。

如果你的 LibreTranslate 服务 Url 不是默认的或者配置了 API key,你需要修改 conf/nginx.conf 配置中以下对应的配置项:

-- 如果需要 API Key,在这里输入你的 API Key
local api_key = ""
-- API 请求地址
local api_url = "http://127.0.0.1:5000/translate"

2. 启动 OpenResty

Windows 系统只需要运行 openresty 安装目录下的 nginx.exe 即可。

如需停止服务,可运行以下命令:

nginx.exe -s stop

3. 修改 Hosts

在你的系统 Hosts 中添加以下内容:

127.0.0.1 mt.aliyuncs.com

4. 在插件中使用

经过上面的步骤后,插件内的阿里翻译已经被拦截并代理到了本地的 LibreTranslate 服务,只需将插件的翻译引擎设置为阿里翻译(翻译引擎配置中的应用ID和密钥随便乱填就行),即可愉快地使用本地离线机器翻译服务了。

第一次翻译时IDE会提示“不可信服务器的证书”,直接点击对话框左边“接受”按钮即可:

警告

翻译效果:

1

2

翻译效果还是很不错的。

四、注册系统服务(仅 Windows 系统)

经过上面的步骤后,我们就已经可以愉快地使用本地离线的机器翻译服务了,但是每次重启系统后都需要手动启动 LibreTranslateOpenResty,这显然是不太方便的。我们可以将其注册为系统服务,这样就可以实现静默开机自启动了。这里仅以 Windows 系统为例,其他系统可能需要自行查找对应的方法了,也欢迎小伙伴们补充分享其他系统的方法给大家。

1. 设置系统变量(重要)

打开终端管理员从以下选择对应的命令执行以配置 SNAPSNAP_USER_DATA 两个系统环境变量 (必须在终端管理员上执行,否则将会执行失败)

# CMD (管理员)
setx SNAP %USERPROFILE% /M
setx SNAP_USER_DATA %USERPROFILE% /M

# PowerShell (管理员)
setx SNAP $env:USERPROFILE /M
setx SNAP_USER_DATA $env:USERPROFILE /M

注意:这一步比较重要,如果不设置这两个环境变量,后续添加或者删除语言模型将对自启动的 LibreTranslate 服务无效。而对于非 Windows 系统,则无需设置。

2. 安装 WinSW

注意:这里以 WinSW v3 版本为例,如果你使用的是 v2 版本,后续的步骤需要自行调整为 v2 版本对应的方式。建议大家也用 v3 版本的,使用更加方便。

WinSW Releases 上下载 WinSW 可执行文件并将其重命名为 winsw.exe,后面将通过它来创建系统服务。

3. 创建 LibreTranslate 系统服务

下载配置文件:libretranslate.zip

解压缩得到 libretranslate.xml 文件,将其放到一个固定的目录内,执行命令创建系统服务(创建服务后不可移动、删除或者重命名此文件):

winsw install libretranslate.xml

此时你可以在任务管理器的服务标签卡内找到名为 LibreTranslate 的系统服务,并能管理其状态,如开始、停止、重新启动等。

也可能通过 WinSW 进行管理,如启动服务:

winsw start libretranslate.xml

删除服务:

winsw uninstall libretranslate.xml

4. 创建 OpenResty 系统服务

下载配置文件:openresty.zip

解压缩得到 openresty.xml 文件,将其放到你的 OpenResty 安装目录内,执行命令创建并启动系统服务(创建服务后不可移动、删除或者重命名此文件):

winsw install openresty.xml
winsw start openresty.xml

此时你可以在任务管理器的服务标签卡内找到名为 Openresty 的系统服务,并能管理其状态。

至此,所有安装与配置均已完成,祝你使用愉快!

Repository owner locked as resolved and limited conversation to collaborators Mar 23, 2024
@YiiGuxing YiiGuxing pinned this issue Mar 23, 2024
@YiiGuxing
Copy link
Owner Author

如需讨论或评论请转至 #5411

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant