消息翻译

小于 1 分钟

消息翻译

功能说明

为方便用户在聊天过程中 翻译文本消息,环信即时通讯 IM SDK 集成了 Microsoft Azure Translation API,支持以下两种方式:

  • 按需翻译:接收方收到文本消息后,将消息内容翻译为目标语言。
  • 自动翻译:发送方设置目标语言后,SDK 在发送消息前翻译文本,将原文和译文一起发送给接收方。

如下为按需翻译示例:

功能开通

消息翻译为增值服务,使用前请先在 环信控制台开通 。

单次翻译请求最多支持 10,000 个字符。计费字符数按 源文本字符数 × 目标语言数量 计算。例如,将 500 个字符翻译为 4 种语言,计费字符数为 2,000。

该服务的费用详见 计费策略 。

前提条件

  • Web v4.x:使用 4.0.4 或以上版本;示例中的 conn 为 SDK 实例,WebIM 为所用 SDK 入口。确保使用该功能前,已完成 初始化 并登录成功。
  • Web v5.x:本页自动翻译和编辑前翻译示例以 5.2.0 或以上版本为准;示例中的 client 已注册 ChatManager,通过 client.chatManager 调用消息接口。确保使用该功能前,已完成 初始化 并登录成功。
  • 已 开通消息翻译服务 ,并了解 IM API 的 使用限制 。
  • 目标语言使用服务支持的语言编码,语言范围参见 翻译语言支持open in new window 。

获取翻译服务支持的语言

你可以查询翻译服务支持的语言,并从返回结果中选取目标语言编码。无论是按需翻译还是自动翻译,都需要在翻译前确认目标语言受支持。

已知有效语言编码时,无需在每次翻译前重复查询。

调用 conn.getSupportedLanguages() 查询支持的语言。

// conn 为已初始化并登录的 Web v4.x 实例。
try {
  const result = await conn.getSupportedLanguages();
  for (const language of result.data || []) {
    console.log(language.code, language.name, language.nativeName);
  }
} catch (error) {
  console.error('查询语言失败:', error);
}

语言条目包含以下字段,列表位于 getSupportedLanguages() 返回结果的 data 中。

字段类型描述
codestring语言编码,例如 zh-Hans。
namestring语言名称。
nativeNamestring该语言的本地显示名称。

按需翻译

收到文本消息后,可按需将原文翻译为目标语言,并使用结果更新展示。

调用 conn.translateMessage({ text, languages }),传入待翻译文本和目标语言。以下 receivedMessage 为收到的文本消息;方法返回结果,不会自动更新页面展示。

try {
  const result = await conn.translateMessage({
    text: receivedMessage.msg,
    languages: ['zh-Hans'],
  });
  const translations = result.data?.[0]?.translations || [];
  const translation = translations.find(item => item.to === 'zh-Hans');
  console.log('译文:', translation?.text ?? receivedMessage.msg);
} catch (error) {
  console.error('翻译失败:', error);
}

按需翻译结果:本页示例从 result.data[0] 读取翻译结果。

字段类型描述
translationsArray<{ to: string; text: string }>译文条目数组;to 为目标语言编码,text 为译文。
detectedLanguage{ language: string; score: number }识别出的原文语言及置信度,以服务实际返回为准。

设置自动翻译

创建文本消息时设置目标语言,再发送消息。SDK 会先翻译,再将原文与译文一起发送。

创建文本消息时,通过 msgConfig.languages 设置目标语言:

const message = WebIM.message.create({
  chatType: 'singleChat',
  type: 'txt',
  to: 'user2',
  msg: 'Hello!',
  msgConfig: { languages: ['zh-Hans', 'ja'] },
});
conn.send(message);

接收并展示译文

接收方收到文本消息后,可以读取译文并选择展示语言。没有所需语言的译文时,可回退展示原文。

在 onTextMessage 中读取实时文本消息顶层的 translations 数组:

conn.addEventHandler('translation-listener', {
  onTextMessage: message => {
    const translations = message.translations || [];
    const translation = translations.find(item => item.code === 'zh-Hans');
    console.log('展示内容:', translation?.text ?? message.msg);
  },
});

实时文本消息的译文:onTextMessage 中的 message.translations 为 { code, text } 条目数组:

字段类型描述
codestring译文的语言编码。
textstring译文文本。

这里描述的是实时消息接收回调。历史消息接口可能使用不同的译文包装,应按相应接口的返回结构读取。

注意事项

  • 消息翻译适用于普通文本消息。Web v5.x 的 复合消息 不支持按需翻译,也不会自动翻译其中的文本分段。
  • Web v5.x 按需翻译结果由业务侧保存和展示;自动翻译的译文从发送结果、接收消息或编辑结果中获取。
  • Web v5.x 自动翻译失败会阻止发送或编辑,请处理 Promise 异常并提供重试等交互。
  • 如需设置离线推送的展示语言,参见 设置推送翻译 。

常见错误

Web v4.x 与 v5.x 的翻译错误码不同,请按实际集成版本处理,不要直接复用另一版本的错误码判断逻辑。小程序使用对应 Web SDK 版本的错误码。

v4.x

以下列出与翻译相关的常见错误,更多错误参见 v4.x 错误码 。

错误码错误信息描述可能原因解决方法
505SERVICE_NOT_ENABLED相关服务未开启。当前应用未开通所调用的服务;调用翻译接口时,应检查翻译服务是否已开通。根据错误描述确认未开通的服务,在环信控制台开通后重试。
50MAX_LIMIT服务用量达到上限。翻译用量或其他服务用量达到上限;该错误码并非翻译专用。根据错误描述确认是否为翻译额度不足;若是,联系环信商务续费或增加翻译用量。
1200TRANSLATION_NOT_VALID目标语言编码不合法。传入的语言编码不正确或不受翻译服务支持。调用 getSupportedLanguages() 查询支持的语言,使用返回的有效语言编码。
1201TRANSLATION_TEXT_TOO_LONG待翻译文本过长。文本长度超过单次翻译请求上限。缩短或拆分待翻译文本,确保单次请求不超过 10,000 个字符。
1204TRANSLATION_FAILED获取翻译服务失败。翻译服务调用未成功,具体原因需结合返回信息确认。检查返回的错误信息,稍后重试;若持续失败,保留日志并联系技术支持。

v5.x

以下列出与翻译相关的常见错误,更多错误参见 v5.x 错误码 。服务未开通时,可能返回通用错误码 505 或翻译专用错误码 1111,应结合 error.code 和 error.message 判断。

错误码错误信息描述可能原因解决方法
505SERVICE_NOT_ENABLED相关服务未开通。当前应用未开通所调用的服务;调用翻译接口时,应检查翻译服务是否已开通。根据 error.message 确认未开通的服务,在环信控制台开通后重试。
1110TRANSLATE_PARAM_INVALID翻译参数无效。目标语言不合法、待翻译文本为空,或消息类型不支持翻译。查询并使用有效的目标语言编码,检查文本内容,仅对普通文本消息调用翻译接口。
1111TRANSLATE_SERVICE_NOT_ENABLED翻译服务未开通。当前应用尚未开通翻译服务。在环信控制台开通翻译服务后重试。
1112TRANSLATE_USAGE_LIMIT翻译服务用量达到上限。当前应用的翻译额度已用尽。等待额度恢复,或联系环信商务提升配额后重试。
1113TRANSLATE_FAILED翻译服务异常或翻译失败。翻译服务异常或请求处理失败,具体原因需结合返回信息确认。稍后重试;若持续失败,保留错误码、error.message 和 SDK 日志,联系技术支持。

接口列表

API所属模块/类说明
getSupportedLanguagesv4.x conn查询支持的语言。
translateMessagev4.x conn传入 text、languages,按需翻译文本。
WebIM.message.create / conn.sendv4.x WebIM / conn创建和发送消息,通过 msgConfig.languages 开启自动翻译。
getSupportedTranslationLanguagesv5.x ChatManager查询支持的语言。
translateMessagev5.x ChatManager传入 message、targetLanguages,按需翻译普通文本消息。
createTextMessage / sendMessagev5.x ChatManager创建和发送消息,通过 targetLanguages 开启自动翻译。
modifyMessagev5.x ChatManager编辑普通文本消息,可在 body.targetLanguages 中设置目标语言。
上次编辑于: