前些时候,做个了Android项目,由于是需要国际化,只能找个翻译网站手动翻译下,但是内容实在太多,而且纯手动的操作,感觉效率地下,所以偷了个懒,想写个程序,自动翻译下。

经过若干次谷歌和度娘,发现提供翻译接口的有2家,一个是google的,还有个就是microsoft,后来发现google的翻译接口,不是免费的,而且经常调用接口就会限制访问,所以就只能用微软的,微软的接口也是要收费的,不过有个翻译内容数量的限制。

下面是两家提供翻译的连接,本人英语也很懒,不能说的很全面,如果需要全面的资料还是浏览官方的网站吧。

Google Translate:https://developers.google.com/translate/?hl=zh-CN

Microsoft Translate:http://msdn.microsoft.com/en-us/library/dd576287.aspx

外国的互联网公司稍微有点良知,最起码在赚钱的同时,也同时回馈了社会,国内简直没有提供这样服务的网站(这里不爽的吐槽下)。

下面简简述用Java访问微软翻译接口,翻译字符串的方法。

要使用微软的翻译接口,必须首先注册微软的Marketplace,然后填写发布软的名称,分别得到一个软件名称和一个key,这个基本上和现在各个广告平台和第三方接口的模式差不多。

在使用翻译的接口前,发送请求,提交你的名称和key,然后得到token,然后在发送需要翻译的内容加token,最后得到的就是翻译后的内容。

由于在获取token的时候,必须使用post请求,返回的数据是json,所以在使用的时候,额外引用了第三方jar包,commons-httpclient.jar、commons-logging-1.0.4.jar、org.json.jar等。

下面是代码部分:

1、第一部分读取本地配置,包括名称、key、微软支持的语种类型(38种,真的很强大,),以及需要翻译的内容。

private void getTokenFromMs() throws HttpException, IOException {MCLog.i("Begin to get token.");HttpClient client = new HttpClient();PostMethod postMethod = new PostMethod("https://datamarket.accesscontrol.windows.net/v2/OAuth2-13");postMethod.addParameter("grant_type", "client_credentials");postMethod.addParameter("client_id", "xxx");postMethod.addParameter("client_secret", "xxxxxxxx");postMethod.addParameter("scope", "http://api.microsofttranslator.com");client.executeMethod(postMethod);String body = postMethod.getResponseBodyAsString();try {JSONObject jsonObj = new JSONObject(body);tokenText = jsonObj.getString("access_token");MCLog.i("Success get token.");MCLog.i("token = %s .", tokenText);} catch (JSONException e) {e.printStackTrace();}}

上面的xxx的地方写上自己的软件的名称和key。

2、开启线程池,使用线程池来发送请求,翻译数据,翻译的速度真的很快,

        Properties pro = I18n.getInstance().getProperties();ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 5);CompletionService<TextOut> completionService = new ExecutorCompletionService<TextOut>(executorService);Iterator<Object> iterator = pro.keySet().iterator();int cout = 0;while (iterator.hasNext()) {final String key = iterator.next().toString();completionService.submit(new Callable<TextOut>() {public TextOut call() throws Exception {Translator translate = new Translator();TextOut ce = translate.translate("en", key, in.getEneitys());return ce;}});cout++;}for (int i = 0; i < cout; i++) {TextOut ce = null;try {ce = completionService.take().get();} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}if (ce != null) {onTranslate(ce);}}

3、翻译的代码

public synchronized TextOut translate(String from, String to, List<Entity> entitys) {if (token == null) {throw new RuntimeException("Token is null.");}list.clear();MultiThreadedHttpConnectionManager manager = new MultiThreadedHttpConnectionManager();HttpClient client = new HttpClient(manager);HttpMethod getMethod = null;for (Entity e : entitys) {String name = e.getName();String text = e.getText();String url = "http://api.microsofttranslator.com/v2/Http.svc/Translate?From={0}&To={1}&Text={2}";MessageFormat message = new MessageFormat(url);try {url = message.format(new Object[] { URLEncoder.encode(from, "utf-8"), URLEncoder.encode(to, "utf-8"), URLEncoder.encode(text, "utf-8") });getMethod = new GetMethod(url);getMethod.addRequestHeader("Authorization", authorization);client.executeMethod(getMethod);String body = getMethod.getResponseBodyAsString();getMethod.releaseConnection();Entity entity = new Entity(name, body.replaceAll("<([^>]*)>", ""));list.add(entity);MCLog.i("Translate %s is completing in %s.", name, to);} catch (HttpException ex) {ex.printStackTrace();} catch (IOException ex) {ex.printStackTrace();}}TextOut out = new TextOut(to, list);if (onTranslateCompleteCallback != null) {onTranslateCompleteCallback.onTranslateCompleteCallback(out);}return out;}

上面翻译的核心代码就是发送一个get请求,使用url传参技术,但是在请求前,必须先编码,不然会有错误,我在使用的时候,就出现过这样的错误。

比如翻译hello是没有问题的,如果翻译welcome to china。那么就会出现问题,因为中间有空格,在url中当然不能出现空格了,所以必须先编码下。

比如我翻译loading,得到数据内容是这样的。

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">正在加载。</string>

然后把xml的标签全部去掉,就得到翻译的结构了。

body = body.replaceAll("<([^>]*)>", "")

最后使用Java中的Future,当所有的任务完成的时候,调用回调。

public interface OnTranslateCallback {public void onTranslate(int current, int count);public void onComplete(List<TextOut> outs);}

好的,打完收工, ,如有问题,欢迎指导。

转载于:https://www.cnblogs.com/liushuibufu/p/3253610.html

[置顶] 微软翻译接口相关推荐

  1. [置顶] 有关ListIterator接口的add与remove方法探究

    ListIterator接口继承自Iterator接口,新增了add()等方法. 关于ListIterator的add()方法的作用(接口是没有方法实现的,但其实现类对于add()方法的实现机制大致相 ...

  2. [置顶] 中文翻译 for S5PV210_iROM

    转自:http://blog.csdn.net/a627088424/article/details/9149671 感谢作者~ 应用笔记 (Internal ROM Booting) S5PV210 ...

  3. Qt 调用 Windows 接口实现窗口置顶

    前言 用 Qt 做 Windows 软件开发,有时候会用到窗口置顶功能,其实 Qt 有自带的接口来实现窗口置顶,但是效果并不太理想,比如说没办法置顶于系统标题栏,或者在全屏状态下如果有键盘事件的时候窗 ...

  4. 微软服务器异常是什么原因,远程服务器返回异常:(400)异常的请求,微软的翻译接口...

    当前位置:我的异常网» C# » 远程服务器返回异常:(400)异常的请求,微软的翻译接 远程服务器返回异常:(400)异常的请求,微软的翻译接口 www.myexceptions.net  网友分享 ...

  5. 翻译接口java_微软翻译api的java实现

    #MicrosoftTranslator4java 这是一个微软翻译api的java实现版本,由于我最近用jfinal弄了个blog,里面文章的文章标题为了提升逼格就想要出个英文版本,鉴于我的英文能力 ...

  6. 微软翻译突破百种语言和方言大关

    编者按:" ياخشىمۇ سىز.ᠲᠠ ᠰᠠᠢᠨ.سالەمەتسىڭبە .ཁམས་བཟང་།",你知道这句话里有几种语言,它们又是什么意思么?其实这只是我国少数民族语言的一部 ...

  7. 阅读目录(置顶)(长期科技领域知识)

    第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...

  8. [置顶]LGame框架问题汇总,有疑问请发至此文

    [置顶]LGame框架问题汇总,有疑问请发至此文 应网友要求,增加一篇博文用以汇总在LGame框架使用中出现的各种问题,此文将长期置顶. _______________________________ ...

  9. layui修改table中的按钮_layui数据表格中如何设置按钮切换(是否置顶)与分页居中...

    手记1 一.数据表格中按钮切换(置顶与取消) 在layUI数据表格中是可以使用toolbar设置表格内的按钮 使用laytel语法 置顶 {{#  if(d.order>0){ }} 取消 {{ ...

最新文章

  1. ajax提交表单,导致浏览器卡死
  2. 说一说技术和管理……
  3. C++/QT:获取当前路径并通过相对路径读取文件
  4. 多线程-非共享数据(python 版)
  5. 解决python中出现IndentationError:unindent does not match any outer indentation level错误
  6. python二维平面上依次得到(0,0)距离相等的点(x,y)坐标,并打印距离
  7. js querySelector与getElementById
  8. 《程序化广告实战》一 1.1 常见的广告形式及业态
  9. 戴尔u盘安装linux系统,戴尔服务器操作系统安装 Centos 系统安装详解教程。
  10. Mybatis Generator最完整配置详解 叩丁狼教育
  11. gwt 测试_GWT应用程序的单元和集成测试
  12. 服务器管理系统推荐,十大Windows服务器工具 系统管理员必备
  13. 什么是DFX测试.md
  14. BNUZ自动打卡系统
  15. Centos安装python3并设为默认
  16. linux ipa 权限管理,FreeIPA增加Linux用户及sudo权限
  17. Lync Server 2013 Preview 安装体验(一)部署准备
  18. 《计算广告》_刘鹏_[一]在线广告市场与背景_(2)计算广告基础
  19. php自媒体,新手怎么做自媒体
  20. 计算机设备折旧率,电脑折旧年限及折旧率是多少

热门文章

  1. 微信小程序的一种全局数据共享Mobx
  2. python线性回归模型预测北京市未来12小时PM2.5值
  3. 3d建模:人物建模之影视建模与游戏建模的差异
  4. U盘直接拔掉会对数据有损坏吗
  5. QVariant万能数据类型联合
  6. vim第 *** 行: E1208: -complete used without allowing arguments
  7. jquery 根据日期计算年龄
  8. 字符串出现的次数,进制转换
  9. python课程学习===小象学院
  10. 最新小储云商城源码Ver1.782版本+无需授权