mt — 机器翻译
接 DeepL / LLM / 本地翻译模型。当前引擎互斥:同一时间只有一个 MT 生效。
声明
{
"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 语种通用能力处理。
"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) 读取目录。
最小实现
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 做翻译、想让译文边生成边出字时覆盖它:
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 兼容(可选自定义协议) |
相关
- 语言代码与可翻译语种 —
target_langs权威规则与 33 语种表 - Provider 签名与数据类型
- 本地服务型引擎强制契约
- 模型工件
- glossary 术语库
