帮助与文档 > 产品文档 > 自然语言翻译 > IOS_SDK文档 > 文本翻译服务
文本翻译服务

文本翻译 IOS SDK 简介

概述

(1) 概念解释

文本翻译:将一段源语言文本转换成目标语言文本,可根据语言参数的不同实现多国语音之间的互译

(2) 说明

Hi,您好,欢迎使用有道智云翻译iOS SDK。

如果您想快速体验服务,建议您前往 翻译体验中心 或者在体验中心右下侧找到小程序二维码,扫描进行体验。

本文档主要针对需要集成翻译服务iOS SDK的开发工程师,详细描述有道智云翻译服务能力及集成过程。

如果您有与我们商务合作的需求,可以通过以下方式联系我们:

商务邮箱: AIcloud_Business@corp.youdao.com

如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:

客服QQ:1906538062

智云翻译技术交流QQ 1群: 652880659(已满)

智云翻译技术交流QQ 2群: 669384425

智云OCR技术交流QQ 1群: 654064748(已满)

智云OCR技术交流QQ 2群: 471638046

智云语音技术交流QQ群:861723255

联系邮箱: zyservice@corp.youdao.com

温馨提示:
本文档主要针对开发人员,接入测试前需要在后台创建iOS应用,并绑定翻译实例;如果您还没有,请按照 新手指南 操作。
平台向每个账户赠送50元的体验金,供用户集成前测试所用,具体资费规则详见 文本翻译服务报价

功能介绍

有道翻译SDK是有道开放平台提供的云服务之一,是有道在线翻译接口的一种实现,同时,支持离线中英查词。有道翻译SDK支持中文和目标文字(日文、英文、韩文、法文、俄文、葡萄牙文、西班牙文、越南文、中文繁体、德文、阿拉伯文和印尼文)之间的互译。

兼容性

支持设备:运行了iOS 8.0及以上系统的 iOS 设备

翻译SDK集成指南

集成前提

开始集成SDK之前开发者需要登录 有道智云平台 ,创建应用获取应用ID(或者通过运营人员获取应用ID),以便使用翻译服务。

集成步骤

SDK包导入

翻译SDK由如下几个SDK组成,用户可根据需要组合使用:

文件说明
FanYiSDK.h头文件(必选)
libbase.a翻译相关SDK基础库(必选)
libhanyucidianoffline.a汉语词典翻译SDK(可选,使用汉语词典功能时使用)
libonline.a在线翻译SDK(可选,包含英汉互译,以及小语种翻译,在线查询)
libwordoffline.a离线查词SDK(可选,中英单词的离线查询)
libsencentenceoffline.a离线句子SDK(可选,中英句子的离线查询)
libSpeechRecognition.a短语音识别SDK(可选,15秒短语音识别功能)
libspeechtransonline.a语音翻译SDK(可选,语音翻译功能)
libocrtrans.a图片翻译SDK(可选,图片翻译功能)
libStreamASR.a流式语音识别SDK(可选,流式语音识别功能)
libSpeechEvaluation.a在线语音评测SDK(可选,在线语音评测功能)
fanyidemoSDK使用demo
StaticResourceStaticResource文件夹下的文件用于离线查词和汉语词典翻译,如果不使用离线功能,不需要StaticResource文件。

文件目录如下图所示:

说明:无论使用何种功能,都需要加入 FanYiSDK.hlibbase.a ,和相应功能的SDK,各SDK可组合使用。

(1) 添加头文件和库文件:将 translateSDK 添加到工程中,包括 FanYiSDK.h 头文件、libbase.a文件和要导入功能对应的SDK包。可以直接将 translateSDK 文件夹拖动到工程中,也可以选择File “Add files to ‘Project Name’…”

(2) 设置工程 Other Linker Flags 为 -ObjC

(3) 若使用离线功能,修改工程中任意一个类后缀名为 .mm,参见 demo 中 ViewController.mm,Xcode 10.0之前的版本需要添加libstc++.6.0.9.tbd,Xcode 10.0及以上版本需要设置C++ Standard Library为libc++;若未使用离线功能可跳过此步骤;

(4) 在工程build Phases – Link Binary With Libraries中添加libFanYiSDK.a, AdSupport.framework, CoreTelephony.framework, SystemConfiguration, libz.tbd和libsqlite3.tbd。如下:

SDK初始化

说明:所有的查询都需要初始化appKey(应用ID),只执行初始化一次即可。
注:appKey即应用ID

//初始化appKey(应用ID)
YDTranslateInstance *yd = [YDTranslateInstance sharedInstance];
yd.appKey = @"your appkey";

功能集成

1.离线汉语词典查词功能

说明:请参考 demo 中 HanyucidianViewController 的使用

(1) 使用的库文件:头文件、libbase.a、libhanyucidianoffline.a,以及离线词库文件hh,离线词库可以下载或者放入工程中,开发者根据需求自行决定:若下载则需要提供下载url,先下载再初始化;若放入工程中则可提词库路径直接初始化。

(2) 构造查询器

offlinetranslate = [YDHanyucidianOfflineTranslate request];

(3) 初始化离线词库

-(void)offLineInit {
  // 执行此初始化方法之后,确保hh文件在指定路径中存在(hh文件可压缩成zip文件后供用户下载,客户端使用之前解压即可)
  if([offlinetranslate initOfflineWithPath:[XUtil getDownloadPath]]){
      [HUDUtil show:self.view text:@"离线查词初始化成功"];
  }else{
      [HUDUtil show:self.view text:@"离线查词初始化失败"];
  }
}

注意: initOffline 方法是 YDHanyucidianOfflineTranslate 的实例方法,当 YDHanyucidianOfflineTranslate 被重新初始化之后,若想使用离线查词,必须调用 initOffline 方法。

(4) 执行查词过程。

查询,返回两种情况,一种是成功,相关结果存储在 response 参数中,另外一种是失败,失败信息放在error中,可根据 错误代码 进行查询。整个查询是异步的,查询结果存在数组中。

[offlinetranslate lookup:textField.text WithCompletionHandler:^(YDHanyucidianOfflineTranslate *request, NSArray *transltes, NSError *error) {
      if (error) {
          NSString *des = [error.userInfo objectForKey:NSLocalizedDescriptionKey];
          NSLog(@"================> %ld%@", (long)error.code,des);

      }
      [self showTrans:transltes];
}];

2.在线查词和翻译功能(支持小语种)

说明:请参考demo中TranslatesViewController的使用

(1) 使用的库文件:头文件、libbase.a、libonline.a

(2) 构造查询器

translateRequest  = [YDTranslateRequest request];

(3) 设置查词所需要的附加信息

YDTranslateParameters *parameters = [YDTranslateParameters targeting];
parameters.source = @"youdaosw";
parameters.from = YDLanguageTypeChinese;
parameters.to = YDLanguageTypeEnglish;
translateRequest.translateParameters = parameters;

(4) 执行查词过程

查询,返回两种情况,一种是成功,相关结果存储在 response 参数中,另外一种是失败,失败信息放在error中,可根据 错误代码 进行查询。整个查询是异步的。

[translateRequest lookup:[_translate objectForKey:@"content"] WithCompletionHandler:^(YDTranslateRequest *request, YDTranslate *response, NSError *error) {
      if (error) {
          //查询失败
      } else {
         //查询成功
      }
}];

3.离线汉英单词互译功能

说明:请参考 demo 中 OfflineTranslatesViewController 的使用, StaticResource 中文件夹中包含离线查词的库。

(1) 使用的库文件:头文件、libbase.a、libwordoffline.a、以及离线词库,离线词库可以下载或者放入工程中,开发者根据需求自行决定:若下载则需要提供下载url,先下载再初始化;若放入工程中则可提词库路径直接初始化。

(2) 构造查询器

offlinetranslate  = [YDWordOfflineTranslate request];

(3) 初始化离线词库

离线查词包含2个库,dicta 和 dictb,区别是 dicta 词库包含的词比较多,文件较大,dictb 只包含常见词汇。开发者可根据实际情况,选择一个词库使用即可。下面以 dictb 词库为例,介绍如何使用离线查词功能。

使用离线查询功能, 涉及到4个包,ba160111.ydd,bb160111,dictWithSeg.dat,yddict.dat.其中 dictWithSeg.dat 和 yddict.idx 文件必须导入到工程中,并且已经添加到 Copy bundle Resource 中。如下:

ba160111.ydd 和 bb160111 支持两种路径。开发者可指定词库的位置,也可以打到安装包中,分别调用不同的初始化方法即可。

//可选方式一、指定离线词库(ba160111.ydd和bb160111.ydd文件的)路径。注意,调用前提是该位置下已经包含这两个文件,否则初始化失败。
[offlinetranslate initOfflineWithPath:[XUtil getDownloadPath]];//布尔型返回值,代表初始化成功或者失败

//可选方式二、离线词库在安装包中(需要将这2个文件导入到工程中,确保Copy bundle Resource中能找到这2个文件)
[offlinetranslate initOffline]; //布尔型返回值,代表初始化成功或者失败

注意:initOffline方法是YDWordOfflineTranslate的实例方法,当YDWordOfflineTranslate被重新初始化之后,若想使用离线查词,必须调用initOffline方法。

(4) 执行查词过程

查询,返回两种情况,一种是成功,相关结果存储在 response 参数中,另外一种是失败,失败信息放在error中,可根据 错误代码 进行查询。整个查询是异步的。

[offlinetranslate lookup:[_translate objectForKey:@"content"] WithCompletionHandler:^(YDWordOfflineTranslate *request, YDTranslate *translte, NSError *error) {
     if (error) {
        //查询失败
    } else {
       //查询成功
    }
}];

4.离线汉英句子互译功能

说明:请参考 demo 中 SentenceOfflineTranslateViewController 的使用

(1) 使用的库文件:头文件、libbase.a、libsencentenceoffline.a,以及离线词库文件ce.zip,离线词库可以下载或者放入工程中,开发者根据需求自行决定:若下载则需要提供下载url,先下载再初始化;若放入工程中则可提词库路径直接初始化。

(2) 构造查询器

offlinetranslate  = [YDSentenceOfflineTranslate request];

(3) 初始化离线词库

-(void)offLineInit{
   //初始化之前先下载离线词库文件ce.zip(参见demo),每次查询均要先初始化离线翻译句子词库
   if([offlinetranslate initOfflineSenWithPath:[XUtil getDownloadPath]]){
       [HUDUtil show:self.view text:@"离线句子初始化成功"];
   }else{
       [HUDUtil show:self.view text:@"离线句子初始化失败"];
   }
}

注意: offLineInit 方法是 YDSentenceOfflineTranslate 的实例方法,当 YDSentenceOfflineTranslate 被重新初始化之后,若想使用离线查词,必须调用 offLineInit 方法。

(4) 执行查词过程。

查询,返回两种情况,一种是成功,相关结果存储在 response 参数中,另外一种是失败,失败信息放在error中,可根据 错误代码 进行查询。整个查询是异步的,查询结果存在数组中。

[offlinetranslate lookup:[_translate objectForKey:@"content"] WithCompletionHandler:^(YDSentenceOfflineTranslate *request, YDTranslate *translte, NSError *error) {
       if (error) {
           //查询失败
       } else {
           //查询成功
       }
}];

5.deeplink 跳转

说明:请参考 demo 中 DetailWordsViewController 的使用

点击查看更多,将进行deeplink跳转,若安装有道词典,则跳转到有道词典app里并显示所查单词的解释,若未安装有道词典,则跳转到Safari浏览器web界面并显示所查单词的解释;

- (void)toDict{
   //    //跳转到词典
   [_translate.ydTranslate openMore];
}

若在汉语词典界面点击查看更多,也会进行deeplink跳转;

- (void)toDict{
   //跳转到词典
   if (self.transltes.count) {
       YDChDictTranslate *translate = [self.transltes objectAtIndex:0];
       [translate openMore];
   }
}

6.在线语音翻译功能

说明:请参考 demo 中 SpeechOnlineViewController 的使用

(1) 使用的库文件:头文件、libbase.a、libspeechtransonline.a;

(2) 构造查询器

YDSpeechOnlineRequest *request = [YDSpeechOnlineRequest request];

(3) 设置查词所需要的附加信息

YDSpeechOnlineParam *param = [YDSpeechOnlineParam param];
param.from = @"en";//源语言
param.to = @"zh-CHS";//翻译目标语言
param.rate = @"16000";//采样率
param.channel = @"1";//声道数,目前只支持单声道,请写固定值1
param.voice = @"0";  //女声代码为0,男声代码为1,英语有四种:0 美式女声  1 美式男声   2 英式女声  3 英式男声
request.param = param;

(4) 执行语音翻译过程

查询输入为语音base64编码,返回两种情况,一种是成功,相关结果存储在 info 参数中,另外一种是失败,失败信息放在error中,可根据 错误代码 进行查询。

[request lookup:base64Str WithCompletionHandler:^(YDSpeechOnlineRequest *request, NSDictionary *info, NSError *error) {
  if (error) {
    //查询失败
  } else {
    //查询成功
    YDSpeechResult *result = [YDSpeechResult mj_objectWithKeyValues:info];
    [self showResult:result];
  }
}];

7.在线短语音识别功能

说明:支持最长15秒的短语音在线识别功能,请参考 demo 中 SpeechRecognitionViewController 的使用;

(1) 使用的库文件:头文件、libbase.a、libSpeechRecognition.a;

(2) 构造查询器

YDSpeechRecognitionRequest *request = [YDSpeechRecognitionRequest request];

(3) 设置语音识别所需要的附加信息

YDSpeechRecognitionParam *param = [YDSpeechRecognitionParam param];
param.langType = @"zh-CHS";//源语言
param.rate = @"8000";//采样率
param.channel = @"1";//声道数,目前只支持单声道,请写固定值1
request.param = param;

(4) 执行语音识别过程

查询输入为语音base64编码,返回两种情况,一种是成功,相关结果存储在 info 参数中,另外一种是失败,失败信息放在error中,可根据 错误代码 进行查询。

[request lookup:base64Str WithCompletionHandler:^(YDSpeechRecognitionRequest *request, NSDictionary *info, NSError *error) {
  if (!error) {
      YDSpeechRecognitionResult *result = [YDSpeechRecognitionResult initWithDict:info];
      [self showResult:result];
  }
}];

8.在线图片翻译功能

说明:请参考 demo 中 OCRTransController 的使用

(1) 使用的库文件:头文件、libbase.a、libocrtrans.a;

(2) 构造查询器

YDOCRTransRequest *request = [YDOCRTransRequest request];

(3) 设置查词所需要的附加信息

YDOCRTransParameter *param = [YDOCRTransParameter param];
param.from = @"en"; //设置源语言
param.to = @"zh-CHS"; //设置目标语言
request.param = param;

(4) 执行图片翻译过程

查询输入为图片base64编码,返回两种情况,一种是成功,相关结果存储在 info 参数中,另外一种是失败,失败信息放在error中,可根据 错误代码 进行查询。

[request lookup:base64Str WithCompletionHandler:^(YDOCRTransRequest *request, NSDictionary *info, NSError *error) {
  if (error) {
    //查询失败
  } else {
    //查询成功
    YDOCRTransResult *result = [YDOCRTransResult mj_objectWithKeyValues:info];
    [self showResult:result];
  }
}];

9.流式语音识别功能

说明:支持实时流式语音识别,目前支持中英文,请参考 demo 中 StreamASRController 的使用

(1) 使用的库文件:头文件、libbase.a、libStreamASR.a;

(2) 构造识别器

YDSpeechRecognizer *recognizer = [YDSpeechRecognizer sharedRecognizer];
recognizer.delegate = self;

(3) 设置识别所需要的附加信息

YDSpeechRecognizerParam *param = [YDSpeechRecognizerParam param];
param.langType = @"zh-CHS";//源语言
param.rate = @"16000";//采样率
param.format = @"wav";//语音文件格式
param.vadBOS = 2000;//前端点静音检测时长,ms
param.vadEOS = 2000;//后端点静音检测时长,ms
recognizer.param = param;

(4) 执行语音识别过程

执行[self.recognizer startListening];开始流式语音识别,结果将在代理方法中回调给开发者;

#pragma mark - speech recognizer delegate
- (void)onBeginOfSpeech {
    [self startSpeakingAnimation];
    NSLog(@"------speech start-----");
}

- (void)onEndOfSpeech {
    [self endSpekingAnimation];
    NSLog(@"------speech end-----");
}

- (void)onResults:(NSDictionary *)result isLast:(BOOL)isLast {
    NSString *sentence = result[@"sentence"];
    self.recognizedLabel.text = [NSString stringWithFormat:@"%@%@", self.displayingText, sentence];
    if (isLast) {
        [self.displayingText appendString:sentence];
    }
}

- (void)onCompleted:(NSError *)speechError {
    [self endSpekingAnimation];
    NSLog(@"------speech completed-----");
}

- (void)onConstantlyQuietIsBOS:(BOOL)isBOS {
    NSLog(@"检测到%@静音", isBOS ? @"前端点" : @"后端点");
}

10.在线语音评测功能

说明:支持在线语音评测,目前只支持英语评测,请参考 demo 中 SpeechEvaluationController 的使用

(1) 使用的库文件:头文件、libbase.a、libSpeechEvaluation.a;

(2) 构造识别器

YDSpeechEvaluationRequest *request = [YDSpeechEvaluationRequest request];

(3) 设置识别所需要的附加信息

YDSpeechEvaluationParam *param = [YDSpeechEvaluationParam param];
param.langType = @"en";//目前只支持英语评测
param.rate = @"16000";//采样率
param.channel = @"1";//声道数,目前只支持单声道,请写固定值1
request.param = param;

(4) 执行语音识别过程

查询输入为语音录音文件base64的字符串,返回结果回调在block中,若成功返回则info包含了返回的所有json数据,开发者可自定义model对返回的info数据进行解析;

[request lookup:base64Str text:refText completionHandler:^(YDSpeechEvaluationRequest *request, NSDictionary *info, NSError *error) {
    if (!error) {
        NSLog(@"%@", info);
        YDSpeechEvaluationResult *result = [YDSpeechEvaluationResult mj_objectWithKeyValues:info];
        [self showResult:result];
    }
}];

支持语言

(1) 支持语言列表

源语言支持目标语言
中文英文、日文、韩文、法文、西班牙文、葡萄牙文、俄文、越南文、中文繁体、德文、阿拉伯文、印尼文
英文中文
日文中文
韩文中文
法文中文
西班牙文中文
葡萄牙文中文
俄文中文
越南文中文
德文中文
阿拉伯文中文
印尼文中文
中文繁体中文
自动识别中文

(2) 语言代码对照表

语言代码
中文zh-CHS
英文en
日文ja
韩文ko
法文fr
西班牙文es
葡萄牙文pt
俄文ru
越南文vi
德文de
阿拉伯文ar
印尼文id
自动识别auto

错误代码列表

错误码含义
101缺少必填的参数
102不支持的语言类型
103翻译文本过长
104不支持的API类型
105不支持的签名类型
106不支持的响应类型
107不支持的传输加密类型
108应用ID无效,注册账号,登录后台创建应用和实例并完成绑定,可获得应用ID和应用密钥等信息
109batchLog格式不正确
110无相关服务的有效实例
111开发者账号无效
113q不能为空
114不支持的图片传输方式
201解密失败,可能为DES,BASE64,URLDecode的错误
202签名检验失败
203访问IP地址不在可访问IP列表
205请求的接口与应用的平台类型不一致,如有疑问请参考入门指南
206因为时间戳无效导致签名校验失败
207重放请求
301辞典查询失败
302翻译查询失败
303服务端的其它异常
304会话闲置太久超时
401账户已经欠费停
402offlinesdk不可用
411访问频率受限,请稍后访问
412长请求过于频繁,请稍后访问
1001无效的OCR类型
1002不支持的OCR image类型
1003不支持的OCR Language类型
1004识别图片过大
1201图片base64解密失败
1301OCR段落识别失败
1411访问频率受限
1412超过最大识别字节数
2003不支持的语音声道
2004不支持的语音上传类型
2005不支持的语言类型
2006不支持的识别类型
2201识别音频文件过大
2301识别音频时长过长
2411不支持的音频文件类型
2412不支持的发音类型
3001不支持的语音格式
3002不支持的语音采样率
3003不支持的语音声道
3004不支持的语音上传类型
3005不支持的语言类型
3006不支持的识别类型
3007识别音频文件过大
3008识别音频时长过长
3009不支持的音频文件类型
3010不支持的发音类型
3201解密失败
3301语音识别失败
3302语音翻译失败
3303服务的异常
3411访问频率受限,请稍后访问
3412超过最大请求字符数
4001不支持的语音识别格式
4002不支持的语音识别采样率
4003不支持的语音识别声道
4004不支持的语音上传类型
4005不支持的语言类型
4006识别音频文件过大
4007识别音频时长过长
4201解密失败
4301语音识别失败
4303服务的异常
4411访问频率受限,请稍后访问
4412超过最大请求时长
5001无效的OCR类型
5002不支持的OCR image类型
5003不支持的语言类型
5004识别图片过大
5005不支持的图片类型
5006文件为空
5201解密错误,图片base64解密失败
5301OCR段落识别失败
5411访问频率受限
5412超过最大识别流量
9001不支持的语音格式
9002不支持的语音采样率
9003不支持的语音声道
9004不支持的语音上传类型
9005不支持的语音识别 Language类型
9301ASR识别失败
9303服务器内部错误
9411访问频率受限(超过最大调用次数)
9412超过最大处理语音长度
10001无效的OCR类型
10002不支持的OCR image类型
10004识别图片过大
10201图片base64解密失败
10301OCR段落识别失败
10411访问频率受限
10412超过最大识别流量
11001不支持的语音识别格式
11002不支持的语音识别采样率
11003不支持的语音识别声道
11004不支持的语音上传类型
11005不支持的语言类型
11006识别音频文件过大
11007识别音频时长过长,最大支持30s
11201解密失败
11301语音识别失败
11303服务的异常
11411访问频率受限,请稍后访问
11412超过最大请求时长
12001图片尺寸过大
12002图片base64解密失败
12003引擎服务器返回错误
12004图片为空
12005不支持的识别图片类型
12006图片无匹配结果
13001不支持的角度类型
13002不支持的文件类型
13003表格识别图片过大
13004文件为空
13301表格识别失败
15001需要图片
15002图片过大(1M)
15003服务调用失败
17001需要图片
17002图片过大(1M)
17003识别类型未找到
17004不支持的识别类型
17005服务调用失败
-1000未知错误
-2000查询输入为空

常见问题及注意事项

1.翻译没结果?
检查下翻译接口回调的错误信息,保证申请的应用ID是有效且提前绑定了。

2.离线查询无效?
确保离线库正确放置,离线初始化成功。

3.添加翻译 SDK 之后审核没有通过?
翻译 SDK 使用了 AdSupport 框架获取设备 IDFA 信息用以统计计费,提交审核时对应用是否有广告选项请选择“是”。

版本更新记录

上线日期版本号更新内容
2017.05.08v1.0.0有道智云翻译 iOS SDK上线,支持在线离线翻译
2017.06.07v1.1.01. 拆分翻译 SDK,SDK 拆分为多个文件,用户可根据需要引用
2. 修复已知 bug
2017.06.30v1.2.0修复已知 bug
2017.07.24v1.3.0修复 deeplink 相关 bug
2017.08.16v1.4.0修复已知 bug
2018.02.09v1.5.0支持在线语音翻译功能
2018.04.10v1.6.0在线文本翻译增加越南文
2018.05.15v1.7.0增加图片翻译功能
2018.10.10v1.8.0在线文本翻译增加德文,阿拉伯文和印尼文
2018.11.02v1.9.0增加流式语音识别,支持中英文
2018.11.16v1.10.0增加语音评测,支持英文