跳到主要内容

消息文本翻译

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

开启翻译服务

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

消息翻译结果

TextMessage 新增了 translateInfo 属性,用于存储翻译结果。

TranslateInfo 属性说明

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

翻译状态枚举

TranslateInfo.TranslateStatus 枚举,定义了翻译的如下状态:

  • NONE:无翻译状态
  • TRANSLATING:翻译中
  • SUCCESS:翻译成功
  • FAILED:翻译失败

示例代码

Java
// 检查文本消息是否有翻译信息
if (message.getContent() instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message.getContent();
TranslateInfo translateInfo = textMessage.getTranslateInfo();

if (translateInfo != null) {
switch (translateInfo.getStatus()) {
case SUCCESS:
// 翻译成功,可以显示翻译结果
String translatedText = translateInfo.getTranslatedText();
String targetLanguage = translateInfo.getTargetLanguage();
break;
case TRANSLATING:
// 翻译中,显示加载状态
break;
case FAILED:
// 翻译失败,显示错误信息
break;
default:
break;
}
}
}

会话翻译策略

Conversation 新增了 translateStrategy 属性,用于标识会话级别的翻译策略。

属性说明

属性类型说明
translateStrategyTranslateStrategy会话的翻译策略

翻译策略枚举

TranslateStrategy 枚举:

  • DEFAULT:默认策略,跟随用户级别自动翻译设置。
  • AUTO_ON:自动翻译,会话内消息自动翻译。
  • AUTO_OFF:手动翻译,会话内消息不自动翻译。

示例:获取会话翻译策略

Java
// 检查会话的翻译策略
TranslateStrategy strategy = conversation.getTranslateStrategy();
switch (strategy) {
case DEFAULT:
// 使用默认策略,跟随用户级别设置
break;
case AUTO_ON:
// 该会话开启自动翻译
break;
case AUTO_OFF:
// 该会话关闭自动翻译
break;
}

批量翻译文本消息

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

参数说明

参数类型说明
paramsTranslateMessagesParams翻译的消息参数
callbackIRongCoreCallback.OperationCallback结果回调

示例代码

Java
List<TranslateMessageParam> messageParams = new ArrayList<>();

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

TranslateMessagesParams params = new TranslateMessagesParams(messageParams);
// 翻译模式,默认为 TranslateMode.MECHANICAL
params.setMode(TranslateMode.MECHANICAL);
// 是否强制重新翻译,默认为 false
params.setForce(true);

RongCoreClient.getInstance().translateMessagesWithParams(params,
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 翻译请求发送成功
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 翻译请求发送失败
}
});

翻译结果通过 IRongCoreListener.TranslationListeneronTranslationDidFinished(List<TranslateItem> translateItems) 方法异步返回。

批量翻译文本内容

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

参数说明

参数类型说明
paramsTranslateTextsParams翻译文本参数
callbackIRongCoreCallback.OperationCallback结果回调

示例代码

Java
List<TranslateTextParam> textParams = new ArrayList<>();

TranslateTextParam param = new TranslateTextParam("Hello, World!");
// 翻译的语言,为空时,使用配置的全局语言
param.setTargetLanguage("zh");
// 消息内容的语言,为空时,会自动识别
param.setSourceLanguage("en");
textParams.add(param);

TranslateTextsParams params = new TranslateTextsParams(textParams);
// 翻译模式,默认为 TranslateMode.MECHANICAL
params.setMode(TranslateMode.MECHANICAL);

RongCoreClient.getInstance().translateTextsWithParams(params,
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 翻译请求发送成功
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 翻译请求发送失败
}
});

翻译结果通过 IRongCoreListener.TranslationListeneronTranslationDidFinished(List<TranslateItem> translateItems) 方法异步返回。

设置翻译语言

通过 setTranslationLanguage 接口可设置用户级别的翻译目标语言。

参数说明

参数类型说明
languageString翻译目标语言
callbackIRongCoreCallback.OperationCallback结果回调
信息

language 请使用开发者文档中支持的语言。

示例代码

Java
RongCoreClient.getInstance().setTranslationLanguage("zh", 
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 设置翻译语言成功
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 设置翻译语言失败
}
});

多端登录时,设置结果会通过 IRongCoreListener.TranslationListener 监听器中的 onTranslationLanguageDidChange(String language) 方法同步到其他端。

获取翻译语言

通过 getTranslationLanguage 接口可获取当前用户级别的翻译目标语言。

参数说明

参数类型说明
callbackIRongCoreCallback.ResultCallback<String>结果回调

示例:获取翻译语言

Java
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);
}
});

设置自动翻译开关

通过 setAutoTranslateEnable 接口可设置用户级别的自动翻译开关。

参数说明

参数类型说明
enableboolean是否开启自动翻译
callbackIRongCoreCallback.OperationCallback结果回调

示例代码

Java
RongCoreClient.getInstance().setAutoTranslateEnable(true,
new IRongCoreCallback.OperationCallback() {
@Override
public void onSuccess() {
// 设置自动翻译开关成功
}

@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
// 设置自动翻译开关失败
}
});

多端登录时,设置结果会通过 IRongCoreListener.TranslationListener 监听器中的 onAutoTranslateStateDidChange(boolean isEnable) 方法同步到其他端。

获取自动翻译开关状态

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

参数说明

参数类型说明
callbackIRongCoreCallback.ResultCallback<Boolean>结果回调

示例代码

Java
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);
}
});

批量设置会话翻译策略

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

参数说明

参数类型说明
identifiersList<ConversationIdentifier>会话标识数组
strategyTranslateStrategy翻译策略
callbackIRongCoreCallback.OperationCallback结果回调

示例代码

Java
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) {
// 设置会话翻译策略失败
}
});

多端登录时,设置结果会通过 IRongCoreListener.ConversationStatusListener 监听器中的 onStatusChanged(ConversationStatus[] conversationStatus) 方法同步到其他端。ConversationStatus 的翻译状态键 TRANSLATION_KEY 将被设置为对应的翻译策略值。

会话状态监听

可通过设置会话状态监听器,监听翻译策略的多端同步变更。

设置会话状态监听器

调用 setConversationStatusListener 接口设置会话状态监听器。

参数说明

参数类型说明
listenerIRongCoreListener.ConversationStatusListener会话状态监听器

示例代码

Java
// 设置会话状态监听器
RongCoreClient.getInstance().setConversationStatusListener(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);
}
}
}
});

翻译事件监听

可通过添加翻译事件监听器,监听翻译相关事件。

添加翻译事件监听器

调用 addTranslationListener 接口添加翻译事件监听器。

参数说明

参数类型说明
listenerIRongCoreListener.TranslationListener翻译事件监听器

示例代码

Java
// 添加翻译事件监听
RongCoreClient.getInstance().addTranslationListener(new IRongCoreListener.TranslationListener() {
@Override
public void onTranslationDidFinished(List<TranslateItem> translateItems) {
// 翻译完成回调
for (TranslateItem item : translateItems) {
if (item.getCode() == IRongCoreEnum.CoreErrorCode.SUCCESS) {
// 翻译成功,获取翻译结果
TranslateInfo info = item.getTranslateInfo();
String translatedText = info.getTranslatedText();
String targetLanguage = info.getTargetLanguage();
TranslateInfo.TranslateStatus status = info.getStatus();
}
}
}

@Override
public void onTranslationLanguageDidChange(String language) {
// 翻译语言变更通知
}

@Override
public void onAutoTranslateStateDidChange(boolean isEnable) {
// 自动翻译状态变更通知
}
});

移除翻译事件监听器

调用 removeTranslationListener 接口可以移除翻译事件监听器。

参数说明

参数类型说明
listenerIRongCoreListener.TranslationListener翻译事件监听器

示例代码

Java
// 移除翻译事件监听
RongCoreClient.getInstance().removeTranslationListener(translationListener);

注意事项

  • 翻译功能需网络连接,请确保设备网络通畅。
  • 翻译结果通过 IRongCoreListener.TranslationListener 异步返回。
  • 建议在使用翻译功能前先设置翻译语言,否则可能使用默认语言。
  • 单次翻译请求的消息或文本数量限制为 1-10 条。
  • 请在适当时机移除翻译监听器,避免内存泄漏。