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 流程图
集成翻译插件
翻译插件以 aar 包方式提供。 请首先在融云官网 下载 IMLib/IMKit SDK。
-
解压下载的 SDK 压缩包后,打开
IMLib
文件夹,将其中的translation.aar
文件拷贝到项目libs
目录下。 -
在项目的
build.gradle
文件中添加以下依赖:dependencies {
...
implementation files('libs/translation.aar')
}
IMKit 使用翻译插件
从 IMKit 5.2.2 版本开始,IMKit 集成了翻译功能。在开始使用翻译插件之前,请确认已开通翻译服务。
-
App 需要向自身的应用服务器发起请求,由应用服务器调用融云服务端 API 获取 JWT Token。App 获取 JWT Token 后,通过
updateAuthToken
接口设置到 SDK 中。注意
IMKit 只处理翻译结果,不会维护 JWT Token 的有效性。App 开发者需自行更新 JWT Token。并利用翻译插件提供的回调,在 JWT Token 失效时,重新获取并设置 JWT Token。
示例代码
TranslationClient.getInstance()
.addTranslationResultListener(
new TranslationResultListener() {
@Override
public void onTranslationResult(int code, RCTranslationResult result) {
if (code == IRongCoreEnum.CoreErrorCode.RC_TRANSLATION_CODE_INVALID_AUTH_TOKEN.code
|| code == IRongCoreEnum.CoreErrorCode.RC_TRANSLATION_CODE_AUTH_FAILED.code
|| code == IRongCoreEnum.CoreErrorCode.RC_TRANSLATION_CODE_SERVER_AUTH_FAILED.code) {
updateJwtToken();
}
}
}); -
(可选)IMKit 已设置默认语言。可通过以下方法修改:
示例代码
RongConfigCenter.featureConfig().rc_translation_src_language = "zh_CN";
RongConfigCenter.featureConfig().rc_translation_target_language = "en";
IMLib 使用翻译插件
-
在用户登录成功之后,需先判断当前是否开通翻译服务。
示例代码
RongCoreClient.getInstance().isTextTranslationSupported()
-
在确认支持翻译服务之后,可以开始进行客户端鉴权。App 需要向自身的应用服务器发起请求,由应用服务器调用融云服务端 API 获取 JWT Token。App 获取 JWT Token 后,通过
updateAuthToken
接口设置到 SDK 中。示例代码
TranslationClient.getInstance().updateAuthToken("token");
-
通过
addTranslationResultListener
添加翻译结果回调。示例代码
// 添加监听
TranslationClient.getInstance()
.addTranslationResultListener(
new TranslationResultListener(){
@Override
public void onTranslationResult(int code,RCTranslationResult result){
// handle result
}
});
// 不需要时,及时移除监听,否则可能导致内存泄漏
TranslationClient.getInstance().removeTranslationResultListener(listener);RCTranslationResult
参数说明参数名 类型 描述 messageId Int 消息 ID。 srcText String 源文本。 translatedText String 翻译之后文本。 srcLanguage String 源语言类型。 targetLanguage String 目标语言类型。 -
调用
translate
翻译文本。示例代码
TranslationClient.getInstance()
.translate(
message.getMessageId(),
content,
"zh_CN", // 源语言类型
"en"); // 目标类型参数说明
参数名 类型 描述 messageId Int 消息 ID。 messageId
大于 0 时 SDK 会在本地缓存翻译结果(推荐)。如果无需缓存,可传入小于等于 0 的messageId
。content String 要翻译的文本。 srcLanguage String 源语言类型。 targetLanguage String 目标语言类型。 注意
接入 Google 翻译时,
srcLanguage
可传任意值。Google 翻译服务会自动识别待翻译文本的源语言,并仅以识别结果为准。
支持的语言类型
翻译插件支持的语言可参见文档中列出的语言列表。
Google 翻译服务
翻译插件已支持通过 Google Cloud Translation 服务翻译以下语言。更多细节,您可以直接参考 Google Cloud Translation 官方文档:语言列表 。
语言 | 枚举值(已替换 ISO-639 语言代码中的 - 为 _) |
---|---|
南非荷兰语 | af |
阿尔巴尼亚语 | sq |
阿姆哈拉语 | am |
阿拉伯语 | ar |
亚美尼亚文 | hy |
阿萨姆语 | as |
艾马拉语 | ay |
阿塞拜疆语 | az |
班巴拉语 | bm |
巴斯克语 | eu |
白俄罗斯语 | be |
孟加拉文 | bn |
博杰普尔语 | bho |
波斯尼亚语 | bs |
保加利亚语 | bg |
加泰罗尼亚语 | ca |
宿务语 | ceb |
中文(简体) | zh_CN 或 zh |
中文(繁体) | zh_TW |
科西嘉语 | co |
克罗地亚语 | hr |
捷克语 | cs |
丹麦语 | da |
迪维希语 | dv |
多格来语 | doi |
荷兰语 | nl |
英语 | en |
世界语 | eo |
爱沙尼亚语 | et |
埃维语 | ee |
菲律宾语(塔加拉语) | fil |
芬兰语 | fi |
法语 | fr |
弗里斯兰语 | fy |
加利西亚语 | gl |
格鲁吉亚语 | ka |
德语 | de |
希腊文 | el |
瓜拉尼人 | gn |
古吉拉特文 | gu |
海地克里奥尔语 | ht |
豪萨语 | ha |
夏威夷语 | haw |
希伯来语 | he 或 iw |
印地语 | hi |
苗语 | hmn |
匈牙利语 | hu |
冰岛语 | is |
伊博语 | ig |
伊洛卡诺语 | ilo |
印度尼西亚语 | id |
爱尔兰语 | ga |
意大利语 | it |
日语 | ja |
爪哇语 | jv 或 jw |
卡纳达文 | kn |
哈萨克语 | kk |
高棉语 | km |
卢旺达语 | rw |
贡根语 | gom |
韩语 | ko |
克里奥尔语 | kri |
库尔德语 | ku |
库尔德语(索拉尼) | ckb |
吉尔吉斯语 | ky |
老挝语 | lo |
拉丁文 | la |
拉脱维亚语 | lv |
林格拉语 | ln |
立陶宛语 | lt |
卢干达语 | lg |
卢森堡语 | lb |
马其顿语 | mk |
迈蒂利语 | mai |
马尔加什语 | mg |
马来语 | ms |
马拉雅拉姆文 | ml |
马耳他语 | mt |
毛利语 | mi |
马拉地语 | mr |
梅泰语(曼尼普尔语) | mni_Mtei |
米佐语 | lus |
蒙古文 | mn |
缅甸语 | my |
尼泊尔语 | ne |
挪威语 | no |
尼杨扎语(齐切瓦语) | ny |
奥里亚 语(奥里亚) | or |
奥罗莫语 | om |
普什图语 | ps |
波斯语 | fa |
波兰语 | pl |
葡萄牙语(葡萄牙、巴西) | pt |
旁遮普语 | pa |
克丘亚语 | qu |
罗马尼亚语 | ro |
俄语 | ru |
萨摩亚语 | sm |
梵语 | sa |
苏格兰盖尔语 | gd |
塞佩蒂语 | nso |
塞尔维亚语 | sr |
塞索托语 | st |
修纳语 | sn |
信德语 | sd |
僧伽罗语 | si |
斯洛伐克语 | sk |
斯洛文尼亚语 | sl |
索马里语 | so |
西班牙语 | es |
巽他语 | su |
斯瓦希里语 | sw |
瑞典语 | sv |
塔加路语(菲律宾语) | tl |
塔吉克语 | tg |
泰米尔语 | ta |
鞑靼语 | tt |
泰卢固语 | te |
泰语 | th |
蒂格尼亚语 | ti |
宗加语 | ts |
土耳其语 | tr |
土库曼语 | tk |
契维语(阿坎语) | ak |
乌克兰语 | uk |
乌尔都语 | ur |
维吾尔语 | ug |
乌兹别克语 | uz |
越南语 | vi |
威尔士语 | cy |
班图语 | xh |
意第绪语 | yi |
约鲁巴语 | yo |
祖鲁语 | zu |
状态码
状态码 | 原因 |
---|---|
26200 | 翻译成功 |
26201 | 翻译失败,融云鉴权失败 鉴权失败或者 token 过期 |
26202 | 翻译失败,翻译功能服务商鉴权失败 融云服务器的原因,token 无效 |
26203 | 翻译失败,翻译功能服务商返回失败 具体服务商失败码信息 |
26204 | 翻译失败,翻译功能未在融云开启 |
26205 | 翻译失败,融云限流 |
26206 | 翻译失败,Server 没有鉴权 token 的 secret 需要在控制台开启 |
26208 | 短语音转录结果为空, 请核对编解码类型 |
26209 | 语言设置错误 |
26210 | 编码格式设置错误 |
34100 | 没有设置 authToken 或者 authToken 为 空串 |
34101 | 待翻译文本内容为空 |
34102 | 目标语言为空 |
34103 | 源语言为空 |
34104 | 翻译服务器地址为空 |
34105 | app key 为空 |
34106 | 服务器返回数据无效 |