# 聊天翻译

# 概述

聊天翻译扩展能够使用各种翻译提供商在不同语言之间实时翻译聊天消息。 它支持手动和自动翻译模式。

Character message translated from English to Chinese using 'Translate Message/翻譯訊息' message action button
Character message translated from English to Chinese using 'Translate Message/翻譯訊息' message action button

"Translate Chat", "Translate Input"
"Translate Chat", "Translate Input"

"翻译聊天", "翻译输入"
"翻译聊天", "翻译输入"

"翻譯聊天內容", "翻譯輸入內容"
"翻譯聊天內容", "翻譯輸入內容"

"채팅 번역하기", "입력 번역하기"
"채팅 번역하기", "입력 번역하기"

"Перевести чат", "Перевести моё сообщение"
"Перевести чат", "Перевести моё сообщение"

# 使用方法

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

扩展菜单中的** 翻译聊天**按钮

  • 一次性翻译整个聊天历史记录

扩展菜单中的** 翻译输入**按钮

  • 仅翻译当前输入的文本
  • 在发送消息之前很有用

任何消息的** 消息操作工具栏中的 翻译消息**图标

  • 点击仅翻译该消息
  • 再次点击恢复原始文本

扩展面板中聊天翻译抽屉中的自动模式配置

  • 自动翻译用户输入、AI 响应或两者

/translate 斜杠命令

  • 使用 /translate [target=language_code] text 来翻译文本

# 配置

配置选项可在** 扩展面板的聊天翻译**抽屉中找到。

# 提供商

  • 选择您偏好的翻译服务
  • 如果出现** API 密钥**图标,点击它以输入 API 密钥
  • 如果出现** 自定义 URL**图标,点击它以输入自定义 API URL

# 目标语言

选择您想要用来编写消息的语言,或想要阅读 AI 响应的语言。

# 自动模式

配置自动翻译行为。

  • : 无自动翻译
  • 翻译响应: 自动将 AI 响应翻译为目标语言
  • 翻译输入: 自动将用户输入翻译为英语
  • 翻译两者: 同时翻译用户输入和 AI 响应

# 清除翻译

清除翻译按钮会移除当前聊天中所有消息的翻译。 原始消息将被保留。

# 配置示例:中英文聊天

要设置一个让中文用户能够用中文与运行英语的 AI 聊天的工作流程:

  1. 将自动模式设置为"翻译两者"
  2. 将目标语言设置为"中文(简体)"或"中文(繁体)"
  3. 选择一个具有良好语言自动检测功能的翻译提供商(例如 Google 或 DeepL)

此设置将:

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

此设置依赖于输入的自动语言检测。为了更精确的控制,未来的更新可能会包括 明确的源语言选择。

# 翻译提供商

基于云服务 本地,自定义 URL 需要 API 密钥

提供商 位置 特性
Libre Translate 自托管(AGPL-3.0)的专有翻译服务替代方案,提供云托管专业版
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">示例文本</span> | 
/let key=input ||
/buttons labels=["zh-CN", "zh-TW", "es", "hu", "en"] <span data-i18n="UI 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">测试消息</b>: {{var::input}} <br/>
<b data-i18n="Output">输出</b> ({{var::lang}}): {{var::tx_target}} <br/>
<b data-i18n="Output">输出</b> (<span data-i18n="ext_translate_target_lang">目标语言</span>): {{var::tx_orig}} <br/>

这对于在将翻译写入重要位置之前检查翻译成您不懂的语言的质量很有用。

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

UI 控件以当前语言环境显示,与配置的目标语言无关。

/input /buttons
输入对话框,'发送测试消息/Send Test Message' 按钮对话框,'语言/Language'

Popup, '我的氣墊船裡裝滿了鰻魚/My hovercraft is full of eels', zh-TW -> en -> zh-TW
Popup, '我的氣墊船裡裝滿了鰻魚/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 编码、特殊字符和表情符号
  • 通过在需要时将大消息分块来处理
  • 保留消息中的格式和嵌入图像
  • 缓存翻译以避免冗余 API 调用

# AI 输入语言

internal_language 控制用户消息在发送给 AI 之前自动翻译成的语言。 在默认设置中它被硬编码为 'en',无法通过 UI 更改。因此,发送给 AI 的消息的翻译目标语言始终是英语。 之前的测试表明,AI 在接收英语消息时性能更好,但随着更多 LLM 在更多样化的语言数据上进行训练,这种情况可能会改变。 我想有人可以更改 settings.json 中的 internal_language 来尝试。

# 中文变体处理

该扩展支持简体中文和繁体中文,但并非所有翻译提供商都支持。UI 将 它们分别显示为"中文(简体)"和"中文(繁体)",语言代码为 '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 字符

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