聊天翻译

概述

聊天翻译扩展可使用各种翻译服务,对聊天消息进行不同语言之间的实时翻译。它同时支持手动翻译和自动翻译两种模式。

使用“Translate Message/翻譯訊息”消息操作按钮将角色消息从英文翻译为中文
使用“Translate Message/翻譯訊息”消息操作按钮将角色消息从英文翻译为中文
"Translate Chat", "Translate Input"
"Translate Chat", "Translate Input"
"翻译聊天", "翻译输入"
"翻译聊天", "翻译输入"
"翻譯聊天內容", "翻譯輸入內容"
"翻譯聊天內容", "翻譯輸入內容"
"채팅 번역하기", "입력 번역하기"
"채팅 번역하기", "입력 번역하기"
"Перевести чат", "Перевести моё сообщение"
"Перевести чат", "Перевести моё сообщение"

用法

翻译聊天消息的所有方式:

** 翻译聊天(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 以英文运作。

  1. 将自动模式设置为“翻译两者(Translate both)”
  2. 将目标语言设置为“简体中文(Chinese (Simplified))”或“繁体中文(Chinese (Traditional))”
  3. 选择一个语言自动检测能力较强的翻译服务(例如 Google 或 DeepL)

此设置会:

  • 将用户的中文输入翻译为英文供 AI 使用
  • 将 AI 的英文回复翻译回中文供用户阅读

此设置依赖于输入语言的自动检测。如需更精确的控制,未来的更新可能会加入显式的源语言选择。

翻译服务

基于云端 本地、自定义 URL 需要 API 密钥

服务提供商 位置 特性
Libre Translate 专有翻译服务的自托管(AGPL-3.0)替代方案,提供云端托管的 Pro 档位
Google Translate 使用广泛,支持多种语言,准确率较高
Lingva Translate Google Translate 的替代前端,开源(AGPL-3.0),注重隐私
DeepL 翻译质量高,尤其擅长欧洲语言
DeepLX 自托管的 DeepL 代理,开源(MIT),免费使用,但代理 DeepL Pro 需要 DeepL API 密钥
Bing Translator 微软的翻译服务,与 Azure 服务集成
OneRing Translator Google Translate 及其他服务提供商的自托管前端,注重隐私,开源(AGPL-3.0)
Yandex Translate 适合俄语及东欧语言

DeepL 专属配置

  • 支持德语、法语、意大利语、西班牙语、荷兰语、日语和俄语的正式度级别
  • 通过 config.yaml 中的 deepl.formality 进行配置

斜杠命令

使用 /translate 命令进行快速翻译。语法:/translate [target=language_code] text。如果未提供目标语言,将使用扩展设置中的值。

基本用法

将文本翻译为当前目标语言并在弹窗中显示:

/translate Welcome to the Tavern | /echo 
简体中文弹窗,“欢迎来到酒馆/Welcome to the Tavern”
简体中文弹窗,“欢迎来到酒馆/Welcome to the Tavern”

将文本翻译为西班牙语并添加到聊天中:

/translate target=es Hello world | /send
西班牙语用户消息,“Hola Mundo/Hello world”
西班牙语用户消息,“Hola Mundo/Hello world”

测试、流水线翻译、本地化

提示用户输入一条消息和一种语言,将该消息翻译为该语言,再重新翻译为已配置的目标语言,并在弹窗中显示两种翻译结果。本示例使用 /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/>

在你将文本写入某处重要位置之前,这有助于检查它被翻译为某种你不会说的语言时的翻译质量。

弹窗,“Welcome to the Tavern/欢迎来到酒馆/welcome to the pub”,en、zh-CN、en
弹窗,“Welcome to the Tavern/欢迎来到酒馆/welcome to the pub”,en、zh-CN、en
弹窗,“My hovercraft is full of eels/我的氣墊船裡裝滿了鰻魚/My hovercraft is filled with eels”,en、zh-TW、en
弹窗,“My hovercraft is full of eels/我的氣墊船裡裝滿了鰻魚/My hovercraft is filled with eels”,en、zh-TW、en

UI 控件以当前的区域设置显示,与已配置的目标语言无关。

/input /buttons
输入对话框,“发送测试消息/Send Test Message” 按钮对话框,“语言/Language”
弹窗,“我的氣墊船裡裝滿了鰻魚/My hovercraft is full of eels”,zh-TW -> en -> zh-TW
弹窗,“我的氣墊船裡裝滿了鰻魚/My hovercraft is full of eels”,zh-TW -> en -> zh-TW

在以下示例中,输入语言的检测效果相对较好:

弹窗,“(My hovercraft is full of eels)/A légpárnás hajóm tele van angolnával/我的氣墊船裡裝滿了鰻魚”,zh-TW -> hu -> zh-TW
弹窗,“(My hovercraft is full of eels)/A légpárnás hajóm tele van angolnával/我的氣墊船裡裝滿了鰻魚”,zh-TW -> hu -> zh-TW
弹窗,“我的氣墊船裡裝滿了鰻魚/Mi aerodeslizador está lleno de anguilas/My hovercraft is full of eels”,zh-TW -> es -> en
弹窗,“我的氣墊船裡裝滿了鰻魚/Mi aerodeslizador está lleno de anguilas/My hovercraft is full of eels”,zh-TW -> es -> en
弹窗,“Il mio hovercraft è pieno di anguille/我的气垫船里装满了鳗鱼/My hovercraft is filled with eels”,it -> zh-CN -> en
弹窗,“Il mio hovercraft è pieno di anguille/我的气垫船里装满了鳗鱼/My hovercraft is filled with eels”,it -> zh-CN -> en

技术说明

  • 支持 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 个字符

超长文本会自动分块进行翻译。