聊天翻译
概述
聊天翻译扩展可使用各种翻译服务,对聊天消息进行不同语言之间的实时翻译。它同时支持手动翻译和自动翻译两种模式。
用法
翻译聊天消息的所有方式:
** 翻译聊天(Translate Chat)**按钮,位于 扩展(Extensions) 菜单
- 一次性翻译整段聊天历史
** 翻译输入(Translate Input)**按钮,位于 扩展(Extensions) 菜单
- 仅翻译当前输入的文本
- 适合在发送消息前使用
** 翻译消息(Translate Message)**图标,位于任意消息的 消息操作(Message Actions) 工具栏
- 点击可仅翻译该条消息
- 再次点击可还原为原文
**自动模式(Auto-mode)**配置,位于 扩展(Extensions) 面板的 聊天翻译(Chat Translation) 抽屉中
- 自动翻译用户输入、AI 回复,或两者兼有
/translate 斜杠命令
- 使用
/translate [target=language_code] text来翻译文本
配置
配置选项位于 扩展(Extensions) 面板的 聊天翻译(Chat Translation) 抽屉中。
服务提供商
- 选择你偏好的
翻译服务 - 如果出现 API 密钥(API Key) 图标,点击它以输入 API 密钥
- 如果出现 自定义 URL(Custom URL) 图标,点击它以输入自定义 API URL
目标语言
选择你希望编写消息所用的语言,或希望阅读 AI 回复所用的语言。
自动模式(Auto-mode)
配置自动翻译行为。
- 无(None):不进行自动翻译
- 翻译回复(Translate responses):自动将 AI 回复翻译为目标语言
- 翻译输入(Translate inputs):自动将用户输入翻译为英文
- 翻译两者(Translate both):同时翻译用户输入和 AI 回复
清除翻译(Clear Translations)
清除翻译(Clear Translations) 按钮会移除当前对话中所有消息的翻译。原始消息将被保留。
配置示例:中文用户与英文 AI 聊天
用于搭建这样一个工作流:中文用户可以用中文聊天,而 AI 以英文运作。
- 将自动模式设置为“翻译两者(Translate both)”
- 将目标语言设置为“简体中文(Chinese (Simplified))”或“繁体中文(Chinese (Traditional))”
- 选择一个语言自动检测能力较强的翻译服务(例如 Google 或 DeepL)
此设置会:
- 将用户的中文输入翻译为英文供 AI 使用
- 将 AI 的英文回复翻译回中文供用户阅读
此设置依赖于输入语言的自动检测。如需更精确的控制,未来的更新可能会加入显式的源语言选择。
翻译服务
基于云端 本地、自定义 URL 需要 API 密钥
DeepL 专属配置
- 支持德语、法语、意大利语、西班牙语、荷兰语、日语和俄语的正式度级别
- 通过 config.yaml 中的
deepl.formality进行配置
斜杠命令
使用 /translate 命令进行快速翻译。语法:/translate [target=language_code] text。如果未提供目标语言,将使用扩展设置中的值。
基本用法
将文本翻译为当前目标语言并在弹窗中显示:
/translate Welcome to the Tavern | /echo
将文本翻译为西班牙语并添加到聊天中:
/translate target=es Hello world | /send
测试、流水线翻译、本地化
提示用户输入一条消息和一种语言,将该消息翻译为该语言,再重新翻译为已配置的目标语言,并在弹窗中显示两种翻译结果。本示例使用 /input 和 /buttons 命令来收集用户输入:
/input default="Hello, world!" <span data-i18n="Test Message">Sample text</span> |
/let key=input ||
/buttons labels=["zh-CN", "zh-TW", "es", "hu", "en"] <span data-i18n="UI Language">Language</span> |
/let key=lang ||
/translate target={{var::lang}} {{var::input}} | /let key=tx_target |
/translate | /let key=tx_orig ||
/echo escapeHtml=false cssClass=wider_dialogue_popup
<b data-i18n="Test Message">Test message</b>: {{var::input}} <br/>
<b data-i18n="Output">Output</b> ({{var::lang}}): {{var::tx_target}} <br/>
<b data-i18n="Output">Output</b> (<span data-i18n="ext_translate_target_lang">target language</span>): {{var::tx_orig}} <br/>
在你将文本写入某处重要位置之前,这有助于检查它被翻译为某种你不会说的语言时的翻译质量。
UI 控件以当前的区域设置显示,与已配置的目标语言无关。
在以下示例中,输入语言的检测效果相对较好:
技术说明
- 支持 UTF-8 编码、特殊字符和 emoji
- 必要时通过分块处理大消息
- 保留消息中的格式和内嵌图片
- 缓存翻译结果以避免重复的 API 调用
AI 输入语言
internal_language 控制用户消息在发送给 AI 之前被自动翻译为的语言。它在默认设置中被硬编码为 'en',无法通过 UI 修改。因此,发送给 AI 的消息的翻译目标语言始终是英文。先前的测试表明,AI 接收英文消息时性能更好,但随着越来越多的大语言模型在更多样化的语言数据上接受训练,这一点可能会有所改变。我想,可以修改 settings.json 中的 internal_language 来验证一下。
中文变体处理
该扩展同时支持简体中文和繁体中文,但并非所有翻译服务都支持。UI 中分别以“简体中文(Chinese (Simplified))”和“繁体中文(Chinese (Traditional))”的形式呈现,对应的语言代码为 'zh-CN' 和 'zh-TW'。它们会被映射为以下翻译服务所使用的语言代码:
- Libre Translate:'zh-CN' 映射为 'zh','zh-TW' 映射为 'zt'。
- DeepL 和 DeepLX:两种变体均映射为 'ZH'。
- Bing:'zh-CN' 映射为 'zh-Hans','zh-TW' 保持不变。
- 其他服务按原样使用 'zh-CN' 和 'zh-TW'。
文本长度限制
部分服务对每次请求有字符数限制:
- Yandex:5000 个字符
- DeepLX:1500 个字符
- Bing:1000 个字符
- Google:5000 个字符
超长文本会自动分块进行翻译。

