消息文本翻译
IMLib SDK(融云即时通讯能力库)自 5.24.0 版本起,内置了翻译功能。与原有 IM 翻译插件不同,内置翻译功能不限于新加坡数据中心,且无需额外安装依赖。
IMLib SDK 提供了两个批量翻译接口:
translateMessagesWithParams
:用于翻译文本消息(RC:TxtMsg)内容。translateTextsWithParams
:用于翻译任意文字内容。
批量翻译内容可能耗时较长,接口不会直接返回翻译结果。请通过监听 Events.TRANSLATE_RESPONSE
事件获取翻译内容。由于服务有并发限制,同一批次的翻译内容会分批下发,事件也会多次触发。
开启翻译服务
请前往融云控制台开启翻译功能。
用户级全局设置
全局设置对同一用户的所有登录设备生效。一端设置后,其他设备可通过 Events.USER_SETTINGS_CHANGED
事件监听变更。
设置翻译目标语言
调用 setTranslationLanguage
设置全局目标翻译语言。未设置时,默认目标语言为中文(zh
)。
RongIMLib
.setTranslationLanguage('en')
.then((res) => {
if (res.isOk) {
console.log('设置成功');
} else {
console.log('设置失败:', res.code);
}
})
查询翻译目标语言
调用 getTranslationLanguage
查询当前全局默认的目标语言。
RongIMLib
.getTranslationLanguage()
.then((res) => {
if (res.isOk) {
console.log('查询成功,当前目标语言配置:', res.data);
} else {
console.log('查询失败:', res.code);
}
})
设置自动翻译开关
该设置仅对 IMKit SDK 生效。IMLib SDK 本身不包含自动翻译功能,仅用于向 IMKit SDK 提供开关存储和多端状态同步。
调用 setAutoTranslateEnabled
配置用户级自动翻译开关。
RongIMLib
.setAutoTranslateEnabled(true)
.then((res) => {
if (res.isOk) {
console.log('设置成功');
} else {
console.log(`设置失败:${res.code}`);
}
})
查询自动翻译开关
调用 getAutoTranslateEnabled
查询当前用户级自动翻译开关状态。
RongIMLib
.getAutoTranslateEnabled()
.then((res) => {
if (res.isOk) {
console.log('查询成功,当前开关状态:', res.data ? '开启' : '关闭');
} else {
console.log('查询失败:', res.code);
}
})
监听全局配置变更
通过事件监听全局配置变更。
RongIMLib.addEventListener(Events.USER_SETTINGS_CHANGED, (evt) => {
switch (evt.key) {
case RongIMLib.UserSettingsChangedKey.TranslationLanguage:
console.log(`默认翻译语言变更:${evt.value}`);
break;
case RongIMLib.UserSettingsChangedKey.AutoTranslateEnable:
console.log(`自动翻译开关变更:${evt.value}`);
break;
}
});
会话级自动翻译开关配置
该设置仅对 IMKit SDK 生效。IMLib SDK 本身不包含自动翻译功能,仅用于开关存储和多端状态同步。
IMKit SDK 支持会话级配置,可针对不同会话单独设置自动翻译策略。会话级配置对同一用户的所有设备生效,变更后其他设备可通过监听 Events.CONVERSATION
事件获取通知。
设置自动翻译策略
调用 batchSetConversationTranslateStrategy
可同时对多个会话设置翻译策略。
枚举定义 | 值 | 说明 |
---|---|---|
TranslateStrategy.DEFAULT | 0 | 默认,按用户级全局开关配置 |
TranslateStrategy.AUTO_ON | 1 | 开启会话内消息自动翻译 |
TranslateStrategy.AUTO_OFF | 2 | 关闭会话内消息自动翻译 |
const conversations = [
{ conversationType: RongIMLib.ConversationType.PRIVATE, targetId: '<会话 TargetId>' },
];
const strategy = RongIMLib.TranslateStrategy.AUTO_ON;
RongIMLib
.batchSetConversationTranslateStrategy(conversations, strategy)
.then((res) => {
if (res.isOk) {
console.log('设置成功');
} else {
console.log(`设置失败:${res.code}`);
}
});
查询自动翻译策略
获取会话数据后,可通过 translateStrategy
属性读取当前策略。
监听会话状态变更
RongIMLib.addEventListener(Events.CONVERSATION, ({ conversationList }) => {
conversationList.forEach((item) => {
const { conversation, updatedItems } = item;
if (updatedItems.translateStrategy) {
console.log('会话自动翻译策略变更:', updatedItems.translateStrategy.val)
}
});
});
翻译文本消息
如需翻译文本消息,构建 TranslateMessageParam
类型参数。该对象的 identifier
属性为消息的 messageUId
,用于后续匹配 Events.TRANSLATE_RESPONSE
事件回调的翻译结果。
const msgParam = new TranslateMessageParam(
'<messaegUId>',
'', // sourceLanguage,即未翻译前的语种,选填
'', // targetLanguage,翻译目标语言,若不传则使用用户级全局配置
'[content]' // 消息内容,非 Electron 平台需要传递该参数,Electron 平台下该参数无效
)
console.log('identifier:', msgParam.identifier);
调用 translateMessagesWithParams
可批量翻译文本消息。参数定义参考 [TranslateMessagesParams]。
const params = {
list: [ msgParam ], // 支持同时翻译多条文本消息,最多一次翻译 10 条
force: false, // 可选填,用于在已存在翻译结果缓存的情况下,忽略缓存重新翻译
mode: RongIMLib.TranslateMode.MECHANICAL, // 可选填,当前版本仅支持机器翻译
};
RongIMLib
.translateMessagesWithParams(params)
.then((res) => {
if (res.isOk) {
console.log('翻译请求发送成功,结果将通过 Events.TRANSLATE_RESPONSE 事件返回');
} else {
console.log('翻译请求发送失败', res.code);
}
});
翻译任意文本
如需翻译任意文字内容,构建 TranslateTextParam
类型参数。其 identifier
属性用于匹配 Events.TRANSLATE_RESPONSE
事件回调的翻译结果。
const textParam = new TranslateTextParam(
'<待翻译内容>', // 单条内容不可超过 1024 个字符
'', // sourceLanguage,即未翻译前的语种,选填
'', // targetLanguage,翻译目标语言,若不传则使用用户级全局配置
)
console.log('identifier:', textParam.identifier);
调用 translateTextsWithParams
可批量翻译任意文本。参数定义参考 [TranslateTextsParams]。
const params = {
list: [ textParam ], // 支持同时翻译多条内容,最多一次翻译 10 条
mode: RongIMLib.TranslateMode.MECHANICAL, // 可选填,当前版本仅支持机器翻译
};
RongIMLib
.translateTextsWithParams(params)
.then((res) => {
if (res.isOk) {
console.log('翻译请求发送成功,结果将通过 Events.TRANSLATE_RESPONSE 事件返回');
} else {
console.log('翻译请求发送失败', res.code);
}
});
监听翻译结果
翻译结果通过 Events.TRANSLATE_RESPONSE
事件异步返回,回调参数为 TranslateItem
列表。
RongIMLib.addEventListener(Events.TRANSLATE_RESPONSE, (list) => {
list.forEach(item => {
console.log('信息来源:', item.from) // 0 为文本消息翻译结果,1 为文字翻译结果
console.log('内容标识:', item.idenfitier); // 用于业务层匹配翻译内容
console.log('翻译状态码:', item.code); // 0 表示翻译成功
if (item.code === ErrorCode.SUCCESS) {
const { targetLanguage, translatedText } = item.translateInfo;
console.log('翻译结果:', translatedText)
console.log('翻译目标语言:', targetLanguage)
}
});
});