Skip to content

mt — 机器翻译 ​

接 DeepL / LLM / 本地翻译模型。当前引擎互斥:同一时间只有一个 MT 生效。


声明 ​

json
{
  "id": "myteam.mt.deepl",
  "name": "DeepL 翻译",
  "version": "1.0.0",
  "target_app_version": "0.2",
  "type": "mt",
  "entrypoint": "deepl_mt.py:DeepLProvider",
  "tags": ["cloud"],
  "requires_hf": false,
  "supports_glossary": true,
  "supported_langs": ["en", "zh", "ja", "de", "fr", "es"],
  "target_langs": ["en", "zh", "ja", "de", "fr", "es", "it", "nl", "pl", "pt-BR"],
  "config_schema": [
    { "key": "api_key", "label": "DeepL API Key", "type": "password", "is_secret": true }
  ]
}

启用后到 设置 → 机器翻译 选为当前引擎。

supports_glossary: true 表示原生吃术语库/热词(不写则按 type/tags/id 推断: DashScope/Qwen 以及 mt / assistant / middleware 默认 true)。


可翻译语言(target_langs) ​

target_langs 决定字幕「翻译语言」下拉框里可以被用户激活的语种全集:

  • 默认常驻中英;用户在「查看全部 N 种语言」里激活的语种会进入下拉框;
  • 激活列表全局保存,但每个模型只显示自己能力目录内的项;
  • 切换模型后,当前不可用的目标语种自动回落到中英;
  • 省略时回落 supported_langs;两者都为空按 33 语种通用能力处理。
json
"target_langs": ["zh", "en", "ja", "ko", "yue", "zh-TW", "fr", "de", "es", "ru"]

⚠️ 不要把「目标语种」只写进 supported_langs:后者约束的是源语言。 完整规则、代码格式(zh-TW / pt-BR / sr-Latn)、别名归一与 33 语种表见 语言代码与可翻译语种。

宿主会自动为云端与第三方本地 MT 渲染激活入口,不需要自己写语种 UI; 自带 settings_view 的插件可调用 bridge.getMtTargetLangCatalog(providerId) 读取目录。


最小实现 ​

python
from transbox.plugins.base import BaseMTEngineProvider
from transbox.mt.engine import Translation


class CustomMTProvider(BaseMTEngineProvider):
    def translate(self, text, source_lang="en", target_lang="zh",
                  glossary_context=None, target=None, source=None) -> Translation:
        return Translation(text=f"[译] {text}", complete=True)

签名硬约束:

  • 调用方只允许传基类参数(glossary_context / target / source 都是基类参数)。
  • 底层 SDK 参数更少时,在实现内部适配;禁止把 source= / glossary_context= 直接透传给底层客户端。
  • 失败时返回空 text,不要抛异常(宿主按"这句没译出来"处理)。

增量流式翻译(可选) ​

用 LLM 做翻译、想让译文边生成边出字时覆盖它:

python
def translate_partial(self, text, source_lang="en", target_lang="zh",
                      committed_prefix="", glossary_context=None,
                      target=None, source=None) -> Translation:
    """committed_prefix = 已经定稿展示的前缀,你只需翻译剩余部分。"""
    ...

默认实现回退到整句 translate。


术语库接入 ​

宿主把当前语向的词库注入 glossary_context(字符串),并在翻译前后做替换/回正。 你只要:

  • 在 translate 里把 glossary_context 拼进 system prompt / 请求体(LLM 类),或
  • 对支持术语表的引擎(DeepL 等)走它自己的 glossary 参数。

声明 supports_glossary: true 让宿主知道用你的语境(而不是仅做前后替换)。


本地离线 MT ​

与本地 ASR 同一套:声明 tags: ["local"] + model_artifacts,宿主自动接管下载与就绪检查 (见 asr § 本地离线 与 模型工件)。

自己起本地服务的(llama-server / Ollama / 自研 HTTP)必须读 本地服务型引擎强制契约。

想接别人的 llama-server / Ollama / LM Studio?直接用现成的 OpenAI 兼容插件 extensions/workshop_openai_mt 即可,不必自己写(它支持自定义 endpoint / 请求模板 / 响应路径)。


参考实现 ​

目录类型
extensions/community_cloud_hunyuan_mt/云端 API
extensions/community_hy_mt_7b/本地服务型(llama.cpp,最小 model_artifacts + 完整契约范例)
extensions/workshop_openai_mt/OpenAI 兼容(可选自定义协议)

相关 ​

TransBox - 赋能全人类无界限跨语言交流