一个基于 Rust 和 Bergamot 翻译引擎的轻量级多语言翻译服务,兼容多种翻译前端 API。
这个项目的起源是我看到了 MTranServer 这个仓库,它使用了 Firefox Translations Models 进行机器翻译,并且兼容了沉浸式翻译、简约翻译等 API,但发现它目前还没开源。
在寻找类似项目时,我发现了 Mozilla 的 translation-service,虽然能用但有一年没更新了,也不兼容沉浸式翻译、简约翻译的 API。由于该项目是 C++ 编写的,而我对 C++ 不太熟悉,所以我使用 Rust 重新编写了这个项目。
Docker 是本服务唯一推荐的部署方式。
docker run -d --name translation-service \ -p 3000:3000 \ docker.cnb.cool/aalivexy/translation-service:latest
注意:自带英译中模型的镜像大小约 70MiB,启动后单 worker 大约占用内存 300MiB+,且翻译延迟较低。
# 创建模型目录
mkdir -p models
# 下载你的模型到目录里
# 拉取并启动容器
docker run -d --name translation-service \
-p 3000:3000 \
-v "$(pwd)/models:/app/models" \
ghcr.io/linguaspark/server:main
创建 compose.yaml 文件:
services:
translation-service:
image: docker.cnb.cool/aalivexy/translation-service:latest
ports:
- "3000:3000"
environment:
API_KEY: "" # 可选,设置为空字符串则不启用 API 密钥保护
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
启动服务:
docker compose up -d
如果需要创建包含特定语言对的自定义镜像,可以使用以下 Dockerfile 模板:
FROM ghcr.io/linguaspark/server:main COPY ./your-models-directory /app/models ENV MODELS_DIR=/app/models ENV NUM_WORKERS=1 ENV IP=0.0.0.0 ENV PORT=3000 ENV RUST_LOG=info EXPOSE 3000 ENTRYPOINT ["/app/server"]
models/ ├── enzh/ # 语言对目录名格式为 "[源语言代码][目标语言代码]" │ ├── model.intgemm8.bin # 翻译模型 │ ├── model.s2t.bin # shortlist 文件 │ ├── srcvocab.spm # 源语言词表 │ └── trgvocab.spm # 目标语言词表 └── zhen/ # 另一个语言对 └── ...
翻译服务会自动扫描 models 目录下的所有语言对目录,并加载它们。目录名应遵循 [源语言][目标语言] 的格式,使用 ISO 639-1 语言代码。
| 变量名 | 描述 | 默认值 |
|---|---|---|
MODELS_DIR | 模型目录路径 | /app/models |
NUM_WORKERS | 翻译工作线程数 | 1 |
IP | 服务监听的 IP 地址 | 127.0.0.1 |
PORT | 服务监听的端口 | 3000 |
API_KEY | API 密钥(留空则不启用) | "" |
RUST_LOG | 日志级别 | info |
POST /translate
请求体:
{
"text": "Hello world",
"from": "en", // 可选,省略则自动检测
"to": "zh"
}
响应:
{
"text": "你好世界",
"from": "en",
"to": "zh"
}
POST /detect
请求体:
{
"text": "Hello world"
}
响应:
{
"language": "en"
}
POST /imme
请求体:
{
"source_lang": "auto", // 可选,省略则自动检测
"target_lang": "zh",
"text_list": ["Hello world", "How are you?"]
}
响应:
{
"translations": [
{
"detected_source_lang": "en",
"text": "你好世界"
},
{
"detected_source_lang": "en",
"text": "你好吗?"
}
]
}
POST /kiss
请求体:
{
"text": "Hello world",
"from": "en", // 可选,省略则自动检测
"to": "zh"
}
响应:
{
"text": "你好世界",
"from": "en",
"to": "zh"
}
POST /hcfy
请求体:
{
"text": "Hello world",
"source": "英语", // 可选,省略则自动检测
"destination": ["中文(简体)"]
}
响应:
{
"text": "Hello world",
"from": "英语",
"to": "中文(简体)",
"result": ["你好世界"]
}
POST /deeplx
请求体:
{
"text": "Hello world",
"source_lang": "EN", // 可选,省略则自动检测
"target_lang": "ZH"
}
响应:
{
"code": 200,
"id": 1744646400,
"data": "你好世界",
"alternatives": [],
"source_lang": "EN",
"target_lang": "ZH",
"method": "Free"
}
GET /health
响应:
{
"status": "ok"
}
如果设置了 API_KEY 环境变量,所有 API 请求都需要提供认证凭据,支持两种方式:
Authorization: Bearer your_api_key?token=your_api_key本项目基于 AGPL-3.0 许可证开源。