IM 翻译插件
IM 翻译插件
- IMLib 与 IMKit 从 5.2.2 版本开始支持翻译插件。
- 该插件暂仅适用于使用新加坡数据中心的应用。详见海外数据中心。
融云即时通讯业务提供翻译插件,可为 IMLib 与 IMKit SDK 快速接入外部翻译服务,由融云服务端负责对接外部翻译服务供应商的鉴权、API 调用、账号管理、计费等流程。翻译插件支持翻译文本。IMKit SDK 提供翻译 UI。
目前已支持接入 Google 翻译服务。
翻译流程
服务开通
该功能为付费增值服务。如有需求,请前往控制台 IM 翻译页面开通服务。
关于 IM 翻译服务费用,详见 IM 翻译计费说明。
客户端鉴权
客户端需要持有有效的 JWT Token,才能向融云请求翻译结果。
您的 App 服务端需要调用融云服务端 API 接口获取 JWT Token,然后返回给客户端。详见服务端文档获取 JWT Token。
注意
翻译插件鉴权专用的 JWT Token 不同于 IM 用户连接 IM 服务的 Token,请注意区分。
JWT
JWT 全称 JSON web Token,是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准。 JWT 包含 header、payload、signature 三部分。通过解析 payload 部分可获取到 Token 有效期和 UserId 等信息。
获取和刷新 JWT Token 流程图
集成翻译插件
翻译插件以 xframework 包方式提供。请首先在融云官网 下载 IMLib/IMKit SDK。
-
解压下载的 SDK 压缩包后,打开
IMLib
文件 夹,将其中的RongTranslation.xcframework
文件拷贝到项目目录下,并将其添加到项目中。 -
在项目中,选择
Target
>Frameworks and Libraries
,找到RongTranslation.xcframework
。在Embed
列中选择Embed and Sign
,将其嵌入工程。 -
在需要使用翻译功能的地方添加头文件:
#import <RongTranslation/RongTranslation.h>
IMKit 使用翻译插件
从 IMKit 5.2.2 版本开始,IMKit 集成了翻译功能。在开始使用翻译插件之前,请确认已开通翻译服务。
-
使用 IMKit,需要提前设置默认源语言和目标语言。以下示例中我们设置简体中文为默认源语言,英语(英国)为默认目标语言。更多支持语言参见下文支持的语言类型。
// srcLanguage 源语言
// targetLanguage 目标语言
NSString *srcLanguage = @"zh_CN";
NSString *targetLanguage = @"en";
RCKitTranslationConfig *translationConfig = [[RCKitTranslationConfig alloc] initWithSrcLanguage:srcLanguage targetLanguage:targetLanguage];
[RCKitConfig defaultConfig].message.translationConfig = translationConfig; -
在确认支持翻译服务之后,可以开始进行客户端鉴权。App 需要向自身的应用服务器发起请求,由应用服务器调用融云服务端 API 获取 JWT Token。App 获取 JWT Token 后,通过
updateAuthToken
接口设置到 SDK 中。示例代码
[[RCTranslationClient sharedInstance] updateAuthToken:@"YOUR_JWT_TOKEN"];
-
IMKit 只处理翻译结果,不会维护 JWT Token 的有效性,所以 App 需要单独调用
addTranslationDelegate
注册翻译结果回调。示例代码
// 添加监听, 可多次添加
[[RCTranslationClient sharedInstance] addTranslationDelegate:delegate];
// 不需要时,可移除监听
[[RCTranslationClient sharedInstance] removeTranslationDelegate:delegate]; -
在 JWT Token 失效时,重新获取并设置 JWT Token。
示例代码
- (void)onTranslation:(RCTranslation *)translation
finishedWith:(RCTranslationCode)code {
if (code == RCTranslationCodeAuthFailed
|| code == RCTranslationCodeServerAuthFailed
|| code == RCTranslationCodeInvalidAuthToken) {
[self requestTranslationTokenBy:[RCIM sharedRCIM].currentUserInfo.userId];
}
}翻译结果会保存在
RCTranslation
对象中:@interface RCTranslation : NSObject
/// 消息ID
@property (nonatomic, assign) NSInteger messageId;
/// 源语言
@property (nonatomic, copy) NSString *srcLanguage;
/// 目标语言
@property (nonatomic, copy) NSString *targetLanguage;
/// 原始文本
@property (nonatomic, copy) NSString *text;
/// 翻译文本
@property (nonatomic, copy) NSString *translationString;