大家好,我是安来 Aalivexy
最近用 Rust 写了个小项目 BergaRust,想和大家分享一下。
项目地址: https://github.com/aalivexy/translation-service Docker 镜像: https://github.com/aalivexy/translation-service/pkgs/container/translation-service (国内加速见下文)
起因:
之前看到 MTranServer 这个项目,用了 Firefox 的离线翻译模型,还兼容沉浸式翻译 API ,感觉很不错,但项目没开源。找了一圈发现 Mozilla 官方有个 C++ 的 translation-service
,但很久没更新了,API 也不兼容。我对 C++ 不熟,干脆就用 Rust 基于 Mozilla 的 Bergamot 翻译引擎重写了一个。
BergaRust 是什么?
一个轻量级的、自托管的多语言翻译服务。核心是 Rust + Bergamot 翻译引擎 (Firefox 同款)。
主要特点:
技术栈:
快速部署 (推荐国内镜像):
如果你只需要 英译中,可以直接用下面这个预置了模型的镜像 (镜像约 70MB):
docker run -d --name translation-service \
-p 3000:3000 \
docker.cnb.cool/aalivexy/translation-service:latest
Docker Compose 部署 (带健康检查和可选 API Key):
services:
translation-service:
# 国内用户推荐用 cnb.cool 加速镜像
image: docker.cnb.cool/aalivexy/translation-service:latest
# 或者用官方 GitHub 镜像 (需要自己挂载模型)
# image: ghcr.io/aalivexy/translation-service:main
# 如果使用 ghcr.io 镜像,需要取消下面 volumes 的注释并准备好模型文件
# volumes:
# - ./models:/app/models
ports:
- "3000:3000" # 左边的 3000 可以改成你想要的外部端口
environment:
API_KEY: "" # 设置你的 API 密钥,留空则不启用密码保护
# NUM_WORKERS: "1" # 可以调整翻译工作线程数,默认为 1
# RUST_LOG: "info" # 日志级别
restart: unless-stopped
healthcheck:
test: ["CMD", "/bin/sh", "-c", "echo -e 'GET /health HTTP/1.1\r\nHost: localhost:3000\r\n\r\n' | timeout 5 bash -c 'cat > /dev/tcp/localhost/3000' && echo 'Health check passed'"]
interval: 30s
timeout: 10s
retries: 3
保存为 compose.yaml
,然后 docker compose up -d
启动。
如何使用?
部署后,你就可以在沉浸式翻译、简约翻译、划词翻译等插件的设置里,选择自定义 API ,填入你的服务地址 (例如 http://your-server-ip:3000
) 和对应的 API 路径 (/imme
, /kiss
, /hcfy
),如果设置了 API_KEY
环境变量,记得在插件设置或请求中带上。
添加其他语言模型:
可以从 Firefox Translations Models 下载模型文件,放到挂载的 models
目录下,服务会自动加载。具体目录结构请参考 GitHub README 。
为什么分享?
如果你像我一样:
那么 BergaRust 可能是一个不错的选择。
项目基于 AGPL-3.0 许可证开源。
欢迎大家试用、反馈、或者去 GitHub 点个 Star 支持一下!
![]() |
1
mzsone 22 天前
老哥执行力真强啊,已 star !
|
![]() |
2
7gugu 22 天前 via iPhone
晚上回家试试看,看起来很棒
|
![]() |
4
ZiLong 22 天前
支持,已 star
|
![]() |
5
molezznet 22 天前
|
6
zcp19970603 22 天前
已部署 支持一下
|
7
fiercex 22 天前
二进制可执行文件搞一个,特别是 mac 的
|
![]() |
8
aalivexy OP |
9
fiercex 22 天前
主要是我的 nas 是 freebsd ,试了下编译不通过,所以以为在 mac 下问题不大,没想到强依赖 mkl
|