智能文本翻译
从 5.24.0 版本起,IMLib SDK(融云即时通讯能力库)支持 对文本消息和纯文本内容进行翻译。您可以设置用户级别的翻译语言和自动翻译状态,也可为不同会话单独配置翻译策略。
IMLib SDK 提供了两个批量翻译接口:
translateMessagesWithParams:用于翻译文本消息(TextMessage)内容。translateTextsWithParams:用于翻译任意文字内容。
翻译功能需网络连接,请确保设备网络通畅。批量翻译内容可能耗时较长,接口不会直接返回翻译结果。请通过注册 IRongCoreListener.TranslationListener 监听器获取翻译内容。
开启翻译服务
请前往融云控制台开启翻译功能。
用户级全局设置
全局设置对同一用户的所有登录设备生效。一端设置后,其他设备可通过 IRongCoreListener.TranslationListener 事件监听器获得变更通知。
设置翻译语言
通过 setTranslationLanguage 接口可设置用户级别的翻译目标语言。支持的语种请参考翻译语言代码列表 。未设置时,默认目标语言为中文(zh)。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
language | String | 翻译目标语言的语言代码 |
callback | IRongCoreCallback.OperationCallback | 结果回调 |
示例代码
RongCoreClient.getInstance().setTranslationLanguage("zh",
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 设置翻译语言成功
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 设置翻译语言失败
}
});
获取翻译语言
通过 getTranslationLanguage 接口可获取当前用户级别的翻译目标语言。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
callback | IRongCoreCallback.ResultCallback<String> | 结果回调 |
示例:获取翻译语言
RongCoreClient.getInstance().getTranslationLanguage(
new IRongCoreCallback.ResultCallback<String>() {
@Override
public void onSuccess(String language) {
// 获取翻译语言成功
Log.d(TAG, "当前翻译语言: " + language);
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 获取翻译语言失败
Log.e(TAG, "getTranslationLanguage error: " + errorCode);
}
});
标记自动翻译状态
IMLib SDK 本身不包含自动翻译功能,仅用于向应用的业务逻辑提供开关存储和多端状态同步。
通过 setAutoTranslateEnable 接口可标记用户级别的自动翻译状态。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
enable | boolean | 是否标记为自动翻译 |
callback | IRongCoreCallback.OperationCallback | 结果回调 |
示例代码
RongCoreClient.getInstance().setAutoTranslateEnable(true,
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 标记自动翻译状态成功
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 标记自动翻译状态失败
}
});
获取自动翻译状态
通过 getAutoTranslateEnabled 接口可获取当前用户级别的自动翻译状态。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
callback | IRongCoreCallback.ResultCallback<Boolean> | 结果回调 |
示例代码
RongCoreClient.getInstance().getAutoTranslateEnabled(
new IRongCoreCallback.ResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean isEnable) {
// 获取自动翻译状态成功
Log.d(TAG, "自动翻译状态: " + isEnable);
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 获取自动翻译状态失败
Log.e(TAG, "getAutoTranslateEnabled error: " + errorCode);
}
});
监听全局配置变更
全局设置(翻译语言、自动翻译状态)的多端同步,通过 IRongCoreListener.TranslationListener 的 onTranslationLanguageDidChange 和 onAutoTranslateStateDidChange 回调。详见翻译事件监听。
会话级翻译策略
IMLib SDK 本身不包含自动翻译功能,仅用于向应用的业务逻辑提供开关存储和多端状态同步。
IMLib SDK 支持会话级配置,可针对不同会话单独设置自动翻译策略。会话级配置对同一用户的所有设备生效,变更后其他设备可通过 IRongCoreListener.ConversationStatusListener 获取通知。
设置会话翻译策略
通过 batchSetConversationTranslateStrategy 接口可批量设置会话翻译策略。
翻译策略枚举
TranslateStrategy 枚举:
DEFAULT:默认策略,跟随用户级别自动翻译设置。AUTO_ON:自动翻译,会话内消息自动翻译。AUTO_OFF:手动翻译,会话内消息不自动翻译。
示例代码
List<ConversationIdentifier> identifiers = new ArrayList<>();
ConversationIdentifier identifier = new ConversationIdentifier();
identifier.setTargetId("targetId");
identifier.setType(Conversation.ConversationType.PRIVATE);
identifiers.add(identifier);
RongCoreClient.getInstance().batchSetConversationTranslateStrategy(
identifiers,
TranslateStrategy.AUTO_ON,
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 设置会话翻译策略成功
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 设置会话翻译策略失败
}
});
查询会话翻译策略
获取会话对象 Conversation 后,可通过其 translateStrategy 属性读取当前策略。
示例:获取会话翻译策略
// 检查会话的翻译策略
TranslateStrategy strategy = conversation.getTranslateStrategy();
switch (strategy) {
case DEFAULT:
// 使用默认策略,跟随用户级别设置
break;
case AUTO_ON:
// 该会话开启自动翻译
break;
case AUTO_OFF:
// 该会话关闭自动翻译
break;
}
监听会话状态变更
多端登录时,设置结果会通过 IRongCoreListener.ConversationStatusListener 监听器中的 onStatusChanged(ConversationStatus[] conversationStatus) 方法同步到其他端。ConversationStatus 的翻译状态键 TRANSLATION_KEY 将被设置为对应的翻译策略值。
示例代码
// 设置会话状态监听器
RongCoreClient.getInstance().addConversationStatusListener(new IRongCoreListener.ConversationStatusListener() {
@Override
public void onStatusChanged(ConversationStatus[] conversationStatus) {
// 会话状态变更回调,包含翻译策略变更
for (ConversationStatus status : conversationStatus) {
IRongCoreEnum.TranslateStrategy translateStrategy = status.getTranslateStrategy();
if (translateStrategy != null) {
// 处理翻译策略变更
Log.d(TAG, "会话翻译策略变更: " + translateStrategy);
}
}
}
});