跳到主要内容

消息文本翻译

从 5.24.0 版本起,IMLib SDK(融云即时通讯能力库)支持对文本消息和纯文本内容进行翻译。您可以设置用户级别的翻译语言和自动翻译状态,也可为不同会话单独配置翻译策略。

IMLib SDK 提供了两个批量翻译接口:

  • translateMessagesWithParams:用于翻译文本消息(RCIMIWTextMessage)内容。
  • translateTextsWithParams:用于翻译任意文字内容。
提示

翻译功能需网络连接,请确保设备网络通畅。批量翻译内容可能耗时较长,接口不会直接返回翻译结果。请通过设置 RCIMIWEngine 的监听器获取翻译内容。

开启翻译服务

请前往融云控制台开启翻译功能。

用户级全局设置

全局设置对同一用户的所有登录设备生效。一端设置后,其他设备可通过 RCIMIWEngine 的事件监听获得变更通知。

设置翻译目标语言

通过 setTranslationLanguage 接口可以设置用户级别的翻译语言。支持的语种请参考翻译语言代码列表 。未设置时,默认目标语言为中文(zh)。

参数说明

参数类型说明
languageString翻译目标语言
callbackIRCIMIWTranslateResponseCallback?结果回调

示例代码

Dart
IRCIMIWTranslateResponseCallback callback = IRCIMIWTranslateResponseCallback(
onTranslateResponse: (int code) {
if (code == 0) {
// 设置翻译语言成功
print('设置翻译语言成功');
} else {
// 设置翻译语言失败
print('设置翻译语言失败,错误码:$code');
}
}
);

// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

int result = await engine?.setTranslationLanguage(
"zh",
callback: callback
) ?? -1;

获取翻译语言

通过 getTranslationLanguage 接口可以获取用户级别的翻译语言。

参数说明

参数类型说明
callbackIRCIMIWTranslateGetLanguageCallback?结果回调

示例代码

Dart
IRCIMIWTranslateGetLanguageCallback callback = IRCIMIWTranslateGetLanguageCallback(
onTranslateGetLanguage: (int code, String? language) {
if (code == 0) {
// 获取翻译语言成功
print('当前翻译语言: $language');
} else {
// 获取翻译语言失败
print('getTranslationLanguage error: $code');
}
}
);

// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

int result = await engine?.getTranslationLanguage(
callback: callback
) ?? -1;

标记自动翻译状态

注意

IMLib SDK 本身不包含自动翻译功能,仅用于向应用的业务逻辑提供开关存储和多端状态同步。

通过 setAutoTranslateEnable 接口可以标记用户级别的自动翻译状态。

参数说明

参数类型说明
enablebool是否标记为自动翻译
callbackIRCIMIWTranslateResponseCallback?结果回调

示例代码

Dart
IRCIMIWTranslateResponseCallback callback = IRCIMIWTranslateResponseCallback(
onTranslateResponse: (int code) {
if (code == 0) {
// 标记自动翻译状态成功
print('标记自动翻译状态成功');
} else {
// 标记自动翻译状态失败
print('标记自动翻译状态失败,错误码:$code');
}
}
);

// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

int result = await engine?.setAutoTranslateEnable(
true,
callback: callback
) ?? -1;

查询自动翻译状态

通过 getAutoTranslateEnabled 接口可以获取用户级别的自动翻译状态。

参数说明

参数类型说明
callbackIRCIMIWGetAutoTranslateEnabledCallback?结果回调

示例代码

Dart
IRCIMIWGetAutoTranslateEnabledCallback callback = IRCIMIWGetAutoTranslateEnabledCallback(
onGetAutoTranslateEnabled: (int code, bool? isEnable) {
if (code == 0) {
// 获取自动翻译状态成功
print('自动翻译状态: $isEnable');
} else {
// 获取自动翻译状态失败
print('getAutoTranslateEnabled error: $code');
}
}
);

// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

int result = await engine?.getAutoTranslateEnabled(
callback: callback
) ?? -1;

监听全局配置变更

全局设置(翻译语言、自动翻译状态)的多端同步,通过 onTranslationLanguageChangedonAutoTranslateStateChanged 回调。详见翻译事件监听

会话级翻译策略

注意

IMLib SDK 本身不包含自动翻译功能,仅用于向应用的业务逻辑提供开关存储和多端状态同步。

IMLib SDK 支持会话级配置,可针对不同会话单独设置自动翻译策略。会话级配置对同一用户的所有设备生效,变更后其他设备可通过 onConversationTranslationStrategySynced 获取通知。

设置会话翻译策略

通过 batchSetConversationTranslateStrategy 接口可以批量设置会话翻译策略。成功设置后,对应会话的 translateStrategy 属性将会被更新。

翻译策略枚举

RCIMIWTranslateStrategy 枚举定义了会话的翻译策略:

  • defaultFollowUser:默认策略,会跟随用户级别的自动翻译方式
  • autoOn:自动翻译,该会话中的消息会自动翻译
  • autoOff:手动翻译,该会话中的消息不会自动翻译

示例代码

Dart
List<RCIMIWConversationType> types = [RCIMIWConversationType.private];
List<String> targetIds = ["targetId"];
List<String> channelIds = [""];

IRCIMIWTranslateResponseCallback callback = IRCIMIWTranslateResponseCallback(
onTranslateResponse: (int code) {
if (code == 0) {
// 设置会话翻译策略成功
print('设置会话翻译策略成功');
} else {
// 设置会话翻译策略失败
print('设置会话翻译策略失败,错误码:$code');
}
}
);

// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

int result = await engine?.batchSetConversationTranslateStrategy(
types,
targetIds,
channelIds,
RCIMIWTranslateStrategy.autoOn,
callback: callback
) ?? -1;

查询会话翻译策略

获取会话对象 RCIMIWConversation 后,可通过其 translateStrategy 属性读取当前策略。

示例代码

Dart
// 检查会话的翻译策略
RCIMIWTranslateStrategy? strategy = conversation.translateStrategy;
switch (strategy) {
case RCIMIWTranslateStrategy.defaultFollowUser:
// 使用默认策略,跟随用户级别设置
print('使用默认翻译策略');
break;
case RCIMIWTranslateStrategy.autoOn:
// 该会话开启自动翻译
print('该会话开启自动翻译');
break;
case RCIMIWTranslateStrategy.autoOff:
// 该会话关闭自动翻译
print('该会话关闭自动翻译');
break;
default:
break;
}

监听会话状态变更

多端登录时,设置结果会通过 onConversationTranslationStrategySynced 方法通知其他端。详见翻译事件监听

批量翻译文本消息

通过 translateMessagesWithParams 接口可以批量翻译文本消息。

参数说明

参数类型说明
paramsRCIMIWTranslateMessagesParams翻译的消息参数
callbackIRCIMIWTranslateResponseCallback?结果回调

RCIMIWTranslateMessagesParams 属性说明

属性类型说明
listList<RCIMIWTranslateMessageParam>待翻译的消息参数数组。数组长度限制为 1 到 10。
forceboolean是否强制重新翻译,并忽略已有的翻译缓存。默认为 false
modeRCIMIWTranslateMode翻译模式。目前仅支持高速翻译(mechanical)。

RCIMIWTranslateMessageParam 属性说明

属性类型说明
messageUIdString消息的唯一标识符(必须)。
sourceLanguageString源语言。为空时,则自动检测。
targetLanguageString目标语言,为空时使用配置的全局语言。

示例代码

Dart
List<RCIMIWTranslateMessageParam> messageParams = [];

RCIMIWTranslateMessageParam param = RCIMIWTranslateMessageParam.create(
messageUId: "messageUId"
);
// 翻译的语言,为空时,使用配置的全局语言
param.targetLanguage = "zh";
// 消息内容的语言,为空时,会自动识别
param.sourceLanguage = "en";
messageParams.add(param);

RCIMIWTranslateMessagesParams params = RCIMIWTranslateMessagesParams.create(
list: messageParams
);
// 翻译模式,默认为 RCIMIWTranslateMode.mechanical
params.mode = RCIMIWTranslateMode.mechanical;
// 是否强制重新翻译,默认为 false
params.force = true;

IRCIMIWTranslateResponseCallback callback = IRCIMIWTranslateResponseCallback(
onTranslateResponse: (int code) {
if (code == 0) {
// 翻译请求发送成功
print('翻译请求发送成功');
} else {
// 翻译请求发送失败
print('翻译请求发送失败,错误码:$code');
}
}
);

// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

int result = await engine?.translateMessagesWithParams(
params,
callback: callback
) ?? -1;

批量翻译文本内容

通过 translateTextsWithParams 接口可以批量翻译文本内容。

参数说明

参数类型说明
paramsRCIMIWTranslateTextParams翻译的文本参数
callbackIRCIMIWTranslateResponseCallback?结果回调

RCIMIWTranslateTextParams 属性说明

属性类型说明
listList<RCIMIWTranslateTextParam>待翻译的文本内容参数数组。数组长度限制为 1 到 10。
modeRCIMIWTranslateMode翻译模式。目前仅支持高速翻译(mechanical)。

RCIMIWTranslateTextParam 属性说明

属性类型说明
textString待翻译的文本内容(必须)。
sourceLanguageString源语言,为空时,则自动检测。
targetLanguageString目标语言,为空时使用配置的全局语言。

示例代码

Dart
List<RCIMIWTranslateTextParam> textParams = [];

RCIMIWTranslateTextParam param = RCIMIWTranslateTextParam.create(
text: "Hello, World!"
);
// 翻译的语言,为空时,使用配置的全局语言
param.targetLanguage = "zh";
// 消息内容的语言,为空时,会自动识别
param.sourceLanguage = "en";
textParams.add(param);

RCIMIWTranslateTextParams params = RCIMIWTranslateTextParams.create(
list: textParams
);
// 翻译模式,默认为 RCIMIWTranslateMode.mechanical
params.mode = RCIMIWTranslateMode.mechanical;

IRCIMIWTranslateResponseCallback callback = IRCIMIWTranslateResponseCallback(
onTranslateResponse: (int code) {
if (code == 0) {
// 翻译请求发送成功
print('翻译请求发送成功');
} else {
// 翻译请求发送失败
print('翻译请求发送失败,错误码:$code');
}
}
);

// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

int result = await engine?.translateTextsWithParams(
params,
callback: callback
) ?? -1;

监听翻译结果

翻译结果通过 onTranslationDidFinished 方法异步返回。同时,消息对象 RCIMIWTextMessagetranslateInfo 属性也会更新。

翻译结果数据结构

RCIMIWTranslateItem

onTranslationDidFinished 回调返回 RCIMIWTranslateItem 列表。

属性类型说明
errorCodeint翻译结果的状态码。
translateInfoRCIMIWTranslateInfo?翻译结果信息。

RCIMIWTranslateInfo

RCIMIWTextMessagetranslateInfo 属性以及 RCIMIWTranslateItem 中的 translateInfo 属性,都使用 RCIMIWTranslateInfo 对象存储翻译结果。

属性类型说明
translatedTextString?翻译后的内容
statusRCIMIWTranslateStatus?翻译状态(无、翻译中、成功、失败)
targetLanguageString?翻译目标语言

翻译状态枚举

RCIMIWTranslateStatus 枚举定义了翻译的各种状态:

  • none:无翻译状态
  • translating:翻译中
  • success:翻译成功
  • failed:翻译失败

翻译事件监听

可以通过设置 RCIMIWEngine 的监听器属性来监听翻译相关的事件。

设置翻译事件监听器

Dart
// 设置翻译事件监听
// 假设您已经创建并保存了引擎实例
RCIMIWEngine? engine = yourEngineInstance; // 替换为您的引擎实例

// 批量翻译完成回调
engine?.onTranslationDidFinished = (List<RCIMIWTranslateItem> translateItems) {
for (RCIMIWTranslateItem item in translateItems) {
if (item.errorCode == 0) {
// 翻译成功,获取翻译结果
RCIMIWTranslateInfo? info = item.translateInfo;
if (info != null) {
String? translatedText = info.translatedText;
String? targetLanguage = info.targetLanguage;
RCIMIWTranslateStatus? status = info.status;
print('翻译成功: $translatedText (目标语言: $targetLanguage, 状态: $status)');
}
} else {
print('翻译失败,错误码:${item.errorCode}');
}
}
};

// 用户级翻译语言变更通知
engine?.onTranslationLanguageChanged = (String language) {
print('翻译语言已变更为: $language');
};

// 用户级自动翻译状态变更通知
engine?.onAutoTranslateStateChanged = (bool isEnable) {
print('自动翻译状态已变更为: $isEnable');
};

// 会话翻译策略变更通知
engine?.onConversationTranslationStrategySynced = (
RCIMIWConversationType? type,
String? targetId,
String? channelId,
RCIMIWTranslateStrategy? strategy
) {
print('会话翻译策略已同步: type=$type, targetId=$targetId, strategy=$strategy');
};