LinguaSpark - Translation Service

July 19, 2026 · View on GitHub

GitHub Repo Docker Image

一个由纯 Rust LinguaSpark 推理引擎驱动的轻量级多语言翻译服务,兼容多种翻译前端 API。

English

项目背景

这个项目的起源是我看到了 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

方式二:使用预构建镜像(不含翻译模型)

# 创建模型目录
mkdir -p models
# 下载你的模型到目录里
# 拉取并启动容器
docker run -d --name translation-service \
  -p 3000:3000 \
  -v "$(pwd)/models:/app/models" \
  ghcr.io/linguaspark/server:main

Docker Compose 部署

创建 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 IP=0.0.0.0
ENV PORT=3000
ENV RUST_LOG=info

EXPOSE 3000

ENTRYPOINT ["/app/linguaspark-server"]

翻译模型

获取模型

  1. Firefox Translations Models 下载预训练模型
  2. 模型放置结构应为:
models/
├── en-zh/
│   ├── model.enzh.intgemm.alphas.bin.gz
│   ├── lex.50.50.enzh.s2t.bin.gz
│   ├── srcvocab.enzh.spm.gz
│   └── trgvocab.enzh.spm.gz
└── zh-en/  # 另一个语言对
    └── ...

模型资产既可以保留 .gz 压缩,也可以使用已解压文件。只有一个 vocab*.spm[.gz] 的共享词表模型同样受支持。

语言对支持

翻译服务会自动扫描 models 目录下的语言对目录并加载模型。目录名使用 源语言-目标语言 形式,例如 en-zhzh-en,并采用 ISO 639-1 语言代码。

环境变量

变量名描述默认值
MODELS_DIR模型目录路径/app/models
IP服务监听的 IP 地址127.0.0.1
PORT服务监听的端口3000
API_KEYAPI 密钥(留空则不启用)""
RUST_LOG日志级别info

API 端点

原生 API

翻译

POST /translate

请求体:

{
  "text": "Hello world",
  "from": "en",  // 可选,省略则自动检测
  "to": "zh"
}

响应:

{
  "text": "你好世界",
  "from": "en",
  "to": "zh"
}

原生接口的 text 也可以传入数组进行批量翻译。同一批文本会按相同的源语言处理; 省略 from 时,使用第一条文本检测源语言。

{
  "text": ["Hello world", "How are you?"],
  "from": "en",
  "to": "zh"
}

响应会保持相同的数据形态:

{
  "text": ["你好世界", "你好吗?"],
  "from": "en",
  "to": "zh"
}

语言检测

POST /detect

请求体:

{
  "text": "Hello world"
}

响应:

{
  "language": "en"
}

兼容 API

沉浸式翻译 API

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": "你好吗?"
    }
  ]
}

简约翻译 API

POST /kiss

请求体:

{
  "text": "Hello world",
  "from": "en",  // 可选,省略则自动检测
  "to": "zh"
}

响应:

{
  "text": "你好世界",
  "from": "en",
  "to": "zh"
}

划词翻译 API

POST /hcfy

请求体:

{
  "text": "Hello world",
  "source": "英语",  // 可选,省略则自动检测
  "destination": ["中文(简体)"]
}

响应:

{
  "text": "Hello world",
  "from": "英语",
  "to": "中文(简体)",
  "result": ["你好世界"]
}

DeepLX API

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 环境变量,除 GET /health 外的所有 API 请求都需要提供认证凭据,支持两种方式:

  1. Authorization 头: Authorization: Bearer your_api_key
  2. 查询参数: ?token=your_api_key

许可证

本项目基于 AGPL-3.0 许可证开源。

致谢