跳到主要内容

消息文本翻译

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

开启翻译服务

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

消息翻译结果

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

RCTranslateInfo 属性说明

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

翻译状态枚举

RCTranslateStatus 枚举,定义了翻译的如下状态:

  • RCTranslateStatusNone:无翻译状态
  • RCTranslateStatusTranslating:翻译中
  • RCTranslateStatusSuccess:翻译成功
  • RCTranslateStatusFailed:翻译失败

示例代码

Objective C
    // 检查文本消息是否有翻译信息
RCTextMessage *textMessage = ...;
if (textMessage.translateInfo) {
switch (textMessage.translateInfo.status) {
case RCTranslateStatusSuccess:
// 翻译成功,可以显示翻译结果
NSString *translatedText = textMessage.translateInfo.translatedText;
NSString *targetLanguage = textMessage.translateInfo.targetLanguage;
break;
case RCTranslateStatusTranslating:
// 翻译中,显示加载状态
break;
case RCTranslateStatusFailed:
// 翻译失败,显示错误信息
break;
default:
break;
}
}

会话翻译策略

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

属性说明

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

翻译策略枚举

RCTranslateStrategy 枚举:

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

示例代码

Objective C
    // 检查会话的翻译策略
RCConversation *conversation = ...;
switch (conversation.translateStrategy) {
case RCTranslateStrategyDefault:
// 使用默认策略,跟随用户级别设置
break;
case RCTranslateStrategyAutoOn:
// 该会话开启自动翻译
break;
case RCTranslateStrategyAutoOff:
// 该会话关闭自动翻译
break;
}

批量翻译文本消息

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

参数说明

参数类型说明
paramsRCTranslateMessagesParams翻译的消息参数
completionHandlerBlock结果回调

示例代码

Objective C
NSMutableArray *array =[NSMutableArray array];

RCTranslateMessageParam *param = [RCTranslateMessageParam new];

// 翻译的语言,为空时,使用配置的全局语言。
param.targetLanguage = @"zh";

/// 消息内容的语言,为空时,会自动识别。
param.sourceLanguage = @"en";
param.messageUId = @"messageUId";
[array addObject:param];

RCTranslateMessagesParams *params = [RCTranslateMessagesParams new];
/// 待翻译消息信息数组,最多 10 条消息。
params.list = array;

// 翻译模式,默认为 `RCTranslateModeMechanical`。
params.mode = RCTranslateModeMechanical;

// 是否强制重新翻译,默认为 NO。
params.force = YES;

[[RCCoreClient sharedCoreClient] translateMessagesWithParams:params
completionHandler:^(RCErrorCode code) {
if (code == RC_SUCCESS) {
// 翻译请求发送成功
} else {
// 翻译请求发送失败
}
}];

翻译结果通过 RCTranslationDelegate 代理的 - (void)translationDidFinished:(NSArray<RCTranslateItem *> *)items 方法异步返回。

批量翻译文本内容

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

参数说明

参数类型说明
paramsRCTranslateTextsParams翻译文本参数
completionHandlerBlock结果回调

示例代码

Objective C
NSMutableArray *array =[NSMutableArray array];

RCTranslateTextParam *param = [RCTranslateTextParam new];

// 翻译的语言,为空时,使用配置的全局语言。
param.targetLanguage = @"zh";

/// 消息内容的语言,为空时,会自动识别。
param.sourceLanguage = @"en";
param.text = @"content";
[array addObject:param];

RCTranslateTextsParams *params = [[RCTranslateTextsParams alloc] init];
// 待翻译消息信息数组,最多 10 条内容。
params.list = array;

// 翻译模式,默认为 `RCTranslateModeMechanical`。
params.mode = RCTranslateModeMechanical;

[[RCCoreClient sharedCoreClient] translateTextsWithParams:params
completionHandler:^(RCErrorCode code) {
if (code == RC_SUCCESS) {
// 翻译请求发送成功
} else {
// 翻译请求发送失败
}
}];

翻译结果通过 RCTranslationDelegate 代理的 - (void)translationDidFinished:(NSArray<RCTranslateItem *> *)items 方法异步返回。

设置翻译语言

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

参数说明

参数类型说明
languageNSString翻译目标语言
completionHandlerBlock结果回调
信息

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

示例代码

Objective C
    [[RCCoreClient sharedCoreClient] setTranslationLanguage:@"zh"
completionHandler:^(RCErrorCode code) {
if (code == RC_SUCCESS) {
// 设置翻译语言成功
} else {
// 设置翻译语言失败
}
}];

多端登录时,设置结果会通过 RCTranslationDelegate 代理中 - (void)translationLanguageDidChange:(NSString *)language; 方法同步到其他端。

获取翻译语言

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

参数说明

参数类型说明
successBlockBlock成功回调
errorBlockBlock失败回调

示例代码

Objective C
 [[RCCoreClient sharedCoreClient] getTranslationLanguage:^(NSString * _Nonnull language) {
// 获取翻译语言成功
NSLog(@"当前翻译语言: %@", language);
} errorBlock:^(RCErrorCode errorCode) {
// 获取翻译语言失败
NSLog(@"getTranslationLanguage: code:%ld", errorCode);

}];

设置自动翻译开关

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

参数说明

参数类型说明
isEnableBOOL是否开启自动翻译
completionHandlerBlock结果回调

示例代码

Objective C
    [[RCCoreClient sharedCoreClient] setAutoTranslateState:YES
completionHandler:^(RCErrorCode code) {
if (code == RC_SUCCESS) {
// 设置自动翻译开关成功
} else {
// 设置自动翻译开关失败
}
}];

多端登录时,设置结果会通过 RCTranslationDelegate 代理中 - (void)autoTranslateStateDidChange:(BOOL)isEnable; 方法同步到其他端。

获取自动翻译开关状态

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

参数说明

参数类型说明
successBlockBlock成功回调
errorBlockBlock失败回调

示例代码

Objective C
[[RCCoreClient sharedCoreClient] getAutoTranslateEnabled:^(BOOL isEnable) {
// 获取自动翻译开关状态成功
NSLog(@"getAutoTranslateEnabled: %d", isEnable);
} errorBlock:^(RCErrorCode errorCode) {
// 获取自动翻译开关状态失败
NSLog(@"getAutoTranslateEnabled code:%ld", errorCode);
}];

批量设置会话翻译策略

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

参数说明

参数类型说明
identifiersNSArray会话标识 RCConversationIdentifier 数组
strategyRCTranslateStrategy翻译策略
completionHandlerBlock结果回调

示例代码

Objective C
    RCConversationIdentifier *identifier = [[RCConversationIdentifier alloc] init];
identifier.type = ConversationType_PRIVATE;
identifier.targetId = @"targetId";

[[RCCoreClient sharedCoreClient] batchSetConversationTranslateStrategy:@[identifier]
strategy:RCTranslateStrategyAuto
completionHandler:^(RCErrorCode code) {
if (code == RC_SUCCESS) {
// 设置会话翻译策略成功
} else {
// 设置会话翻译策略失败
}
}];

多端登录时,设置结果会通过 RCConversationStatusChangeDelegate 代理中的- (void)conversationStatusDidChange:(NSArray<RCConversationStatusInfo *> *)conversationStatusInfos;方法通知其他端,其中,RCConversationStatusInfoconversationStatusType 将被设置为RCConversationStatusType_Translation, conversationStatusValue则对应当前会话的翻译策略。

翻译事件监听

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

添加翻译事件代理

通过 addTranslationDelegate: 接口可以添加翻译事件代理。

参数说明

参数类型说明
delegateRCTranslationDelegate翻译事件代理

示例代码

Objective C
    // 添加翻译事件监听
[[RCCoreClient sharedCoreClient] addTranslationDelegate:self];

// 在代理方法中处理翻译事件
- (void)onTranslationCompleted:(RCTranslationResult *)result {
// 处理翻译完成事件
}

移除翻译事件代理

通过 removeTranslationDelegate: 接口可以移除翻译事件代理。

参数说明

参数类型说明
delegateRCTranslationDelegate翻译事件代理

示例代码

Objective C
    // 移除翻译事件监听
[[RCCoreClient sharedCoreClient] removeTranslationDelegate:self];

注意事项

  • 翻译功能需网络连接,请确保设备网络通畅。
  • 翻译结果通过 RCTranslationDelegate 代理方法异步返回。
  • 建议在使用翻译功能前先设置翻译语言,否则可能使用默认语言。