Android使用有道翻译API实现在线翻译功能

在Android应用中,添加在线翻译的功能,这里调用的是有道翻译的API。

使用有道翻译API,首先要申请一个key,申请地址为:有道翻译API申请地址

申请之后就会得到一个keyfrom和一个key。

获取翻译结果的数据接口为:http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本。我们只需要把内容拼接成这样,使用GET的方式,就能得到翻译的结果。

我翻译了“程序员”,接口返回的数据为:

{
    "translation": [
        "The programmer"
    ],
    "basic": {
        "phonetic": "chéng xù yuán",
        "explains": [
            "programmer"
        ]
    },
    "query": "程序员",
    "errorCode": 0,
    "web": [
        {
            "value": [
                "Programmer",
                "CODER",
                "SCJP"
            ],
            "key": "程序员"
        },
        {
            "value": [
                "Systems Programmer",
                "Java Card",
                "system programmer"
            ],
            "key": "系统程序员"
        },
        {
            "value": [
                "programmer",
                "computer programmer",
                "Job-InterviewComputer Programmer"
            ],
            "key": "电脑程序员"
        }
    ]
}

我们只需要从中解析出我们所需要的内容即可。

具体实现如下:

public class MainActivity extends Activity {

	private EditText edit = null;
	private TextView search = null;
	private TextView text = null;
	private String YouDaoBaseUrl = "http://fanyi.youdao.com/openapi.do";
	private String YouDaoKeyFrom = "YouDaoKeyFrom";
	private String YouDaoKey = "YouDaoKey";
	private String YouDaoType = "data";
	private String YouDaoDoctype = "json";
	private String YouDaoVersion = "1.1";
	private TranslateHandler handler;

	private static final int SUCCEE_RESULT = 10;
	private static final int ERROR_TEXT_TOO_LONG = 20;
	private static final int ERROR_CANNOT_TRANSLATE = 30;
	private static final int ERROR_UNSUPPORT_LANGUAGE = 40;
	private static final int ERROR_WRONG_KEY = 50;
	private static final int ERROR_WRONG_RESULT = 60;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		edit = (EditText) findViewById(R.id.edit);
		search = (TextView) findViewById(R.id.search);
		search.setOnClickListener(new searchListener());
		text = (TextView) findViewById(R.id.text);
		handler = new TranslateHandler(this, text);
	}

	private class searchListener implements OnClickListener {
		@Override
		public void onClick(View v) {

			String content = edit.getText().toString().trim();
			if (content == null || "".equals(content)) {
				Toast.makeText(getApplicationContext(), "请输入要翻译的内容", Toast.LENGTH_SHORT).show();
				return;
			}
			final String YouDaoUrl = YouDaoBaseUrl + "?keyfrom=" + YouDaoKeyFrom + "&key=" + YouDaoKey + "&type="
					+ YouDaoType + "&doctype=" + YouDaoDoctype + "&type=" + YouDaoType + "&version=" + YouDaoVersion
					+ "&q=" + content;
			new Thread() {
				public void run() {
					try {
						AnalyzingOfJson(YouDaoUrl);
					} catch (Exception e) {
						e.printStackTrace();
					}
				};
			}.start();
		}
	}

	private void AnalyzingOfJson(String url) throws Exception {
		// 第一步,创建HttpGet对象
		HttpGet httpGet = new HttpGet(url);
		// 第二步,使用execute方法发送HTTP GET请求,并返回HttpResponse对象
		HttpResponse httpResponse = new DefaultHttpClient().execute(httpGet);
		if (httpResponse.getStatusLine().getStatusCode() == 200) {
			// 第三步,使用getEntity方法活得返回结果
			String result = EntityUtils.toString(httpResponse.getEntity());
			System.out.println("result:" + result);
			JSONArray jsonArray = new JSONArray("[" + result + "]");
			String message = null;
			for (int i = 0; i < jsonArray.length(); i++) {
				JSONObject jsonObject = jsonArray.getJSONObject(i);
				if (jsonObject != null) {
					String errorCode = jsonObject.getString("errorCode");
					if (errorCode.equals("20")) {
						handler.sendEmptyMessage(ERROR_TEXT_TOO_LONG);
					} else if (errorCode.equals("30 ")) {
						handler.sendEmptyMessage(ERROR_CANNOT_TRANSLATE);
					} else if (errorCode.equals("40")) {
						handler.sendEmptyMessage(ERROR_UNSUPPORT_LANGUAGE);
					} else if (errorCode.equals("50")) {
						handler.sendEmptyMessage(ERROR_WRONG_KEY);
					} else {
						Message msg = new Message();
						msg.what = SUCCEE_RESULT;
						// 要翻译的内容
						String query = jsonObject.getString("query");
						message = "翻译结果:";
						// 翻译内容
						Gson gson = new Gson();
						Type lt = new TypeToken<String[]>() {
						}.getType();
						String[] translations = gson.fromJson(jsonObject.getString("translation"), lt);
						for (String translation : translations) {
							message += "\t" + translation;
						}
						// 有道词典-基本词典
						if (jsonObject.has("basic")) {
							JSONObject basic = jsonObject.getJSONObject("basic");
							if (basic.has("phonetic")) {
								String phonetic = basic.getString("phonetic");
								// message += "\n\t" + phonetic;
							}
							if (basic.has("explains")) {
								String explains = basic.getString("explains");
								// message += "\n\t" + explains;
							}
						}
						// 有道词典-网络释义
						if (jsonObject.has("web")) {
							String web = jsonObject.getString("web");
							JSONArray webString = new JSONArray("[" + web + "]");
							message += "\n网络释义:";
							JSONArray webArray = webString.getJSONArray(0);
							int count = 0;
							while (!webArray.isNull(count)) {

								if (webArray.getJSONObject(count).has("key")) {
									String key = webArray.getJSONObject(count).getString("key");
									message += "\n(" + (count + 1) + ")" + key + "\n";
								}
								if (webArray.getJSONObject(count).has("value")) {
									String[] values = gson.fromJson(webArray.getJSONObject(count).getString("value"),
											lt);
									for (int j = 0; j < values.length; j++) {
										String value = values[j];
										message += value;
										if (j < values.length - 1) {
											message += ",";
										}
									}
								}
								count++;
							}
						}
						msg.obj = message;
						handler.sendMessage(msg);
					}
				}
			}
			text.setText(message);
		} else {
			handler.sendEmptyMessage(ERROR_WRONG_RESULT);
		}
	}

	private class TranslateHandler extends Handler {
		private Context mContext;
		private TextView mTextView;

		public TranslateHandler(Context context, TextView textView) {
			this.mContext = context;
			this.mTextView = textView;
		}

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case SUCCEE_RESULT:
				mTextView.setText((String) msg.obj);
				closeInput();
				break;
			case ERROR_TEXT_TOO_LONG:
				Toast.makeText(mContext, "要翻译的文本过长", Toast.LENGTH_SHORT).show();
				break;
			case ERROR_CANNOT_TRANSLATE:
				Toast.makeText(mContext, "无法进行有效的翻译", Toast.LENGTH_SHORT).show();
				break;
			case ERROR_UNSUPPORT_LANGUAGE:
				Toast.makeText(mContext, "不支持的语言类型", Toast.LENGTH_SHORT).show();
				break;
			case ERROR_WRONG_KEY:
				Toast.makeText(mContext, "无效的key", Toast.LENGTH_SHORT).show();
				break;
			case ERROR_WRONG_RESULT:
				Toast.makeText(mContext, "提取异常", Toast.LENGTH_SHORT).show();
				break;
			default:
				break;
			}
			super.handleMessage(msg);
		}
	}

	public void closeInput() {
		InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		if ((inputMethodManager != null) && (this.getCurrentFocus() != null)) {
			inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),
					InputMethodManager.HIDE_NOT_ALWAYS);
		}
	}
}

看一下效果:

Demo下载地址http://download.csdn.net/detail/u014375869/8844145

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 05:07:51

Android使用有道翻译API实现在线翻译功能的相关文章

利用百度翻译API,获取翻译结果

translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding("utf8") import json #导入json模块 import urllib #导入urllib模块 from urllib2 import Request, urlopen, URLError, HTTPError #导入urllib2模块 def translate(input

一点翻译将短句在线翻译

当在需要对短句进行翻译的时候,通常这些句字都是比较的简短,那么我们是怎么进行在线翻译的呢?下面就让小编简单的给大家介绍一下.步骤一:我们可以直接通过在浏览器中搜索一点翻译网站,找到短句在线翻译进行翻译:步骤二:然后我们可以进行语言的自定义,将需要转换的语言进行选择好: 步骤三:选择好语言之后就可以进行文字的输入,将文字输入到左界面中,然后点击开始翻译: 步骤四:翻译是需要一定的过程,我们需要耐心的等待一段时间,等文字转换完成: 步骤五:等文字转换完成之后就可以进行文字的查看了,在有界面的矩形框中

Android应用记录一:有道翻译API调用

因为某些原因,我需要记单词,而且讨厌广告,所以就想着自己写个能够查自己不认识的单词并且以后可以随时查看的APP. 首先我需要调用一个翻译API,中文翻译比较好用的API有有道翻译API,百度翻译API等,因为先期用过百度地图API,觉得很好用,所以我先查阅了百度翻译API 觉得还不错,因为我写的APP是给自己用的,所以这肯定够用,然后我就申请了一个API接口,当我看了文档之后,百度为了安全的原因,在现版本的接口中加入了签名,通过一定的输入序列形成MD5序列,而这个感觉有点麻烦,虽然我后来试了下,

基于百度翻译API开发属于自己的翻译工具

你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那每次弹出来的广告?其实我们想要的就是简单的翻译一个单词.今天就来使用百度翻译开放API,做一个属于自己的翻译工具,只有简单的翻译功能,至于外观自己根据自己的爱好,想做成什么样就做成什么样,终于可以任性一回了~~ 下面先来看一下词典效果:  一.百度翻译API简介 百度翻译可以通过HTTP访问,返回J

百度翻译API

1 #/usr/bin/env python3 2 #coding=utf8 3 4 """百度翻译api功能实现函数,本模块基于Python3.x实现,getTransResult(q)中参数q是需被翻译的内容,目前该函数的源语言默认英文,目标语言默认简体中文""" 5 6 7 import http.client 8 import hashlib 9 import urllib 10 import random 11 import demjs

【Python】Python的urllib、urllib2模块调用“百度翻译”API进行批量自动翻译

1.问题描述 在文本数据处理时,经常回出现文本中各种语言的混杂情况,包括:英文.日语.俄语.法语等,需要将不同语种的语言批量翻译成中文进行处理.可以通过Python直接调用百度提供的翻译API进行批量的翻译. 百度翻译API详细文档见:百度翻译API文档 2.问题解决 开发环境:Linux 将文本中的中文和非中文进行分离,对非中文的部分进行翻译. Python的代码如下:translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys

PPT文件怎么在线翻译的?PPT在线翻译的方法

PPT文件是我们无论在学习过程中还是商业化的操作中都会用到的一种文件形式将PPT文件进行在线翻译,下面就让小编给大家简单介绍一下PPT在线翻译的方法. 步骤一:PPT文件是需要准备好的,然后通过在浏览器上的搜索迅捷PDF在线转换器进入到在线网站中去:步骤二:在导航栏中找到文档处理中PPT在线翻译功能,然后点击进入到PPT在线翻译中:步骤三:然后进入到自定义设置的选择,将文件需要转换的语言进行选择和设置好:步骤四:然后将PDF文件选择到界面中去,找到PPT文件,然后将PPT文件直接拖动到界面中去:

Android使用有道翻译API实如今线翻译功能

在Android应用中,加入在线翻译的功能,这里调用的是有道翻译的API. 使用有道翻译API.首先要申请一个key,申请地址为:有道翻译API申请地址. 申请之后就会得到一个keyfrom和一个key. 获取翻译结果的数据接口为:http://fanyi.youdao.com/openapi.do? keyfrom=<keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&a

关于网站调用在线翻译api实现翻译功能

在做一些网站的时候偶尔会遇到需要中英文翻译的部分,也许是提供用户在线翻译的功能,也可能是把用户输入的一整段文字进行翻译.小龙最近就遇到这么一个事儿,对接中外两方用户的沟通,为了对语言不那么顺畅的用户提供一点点帮助,在网站里嵌入了自动翻译的功能,就简化了用户复制黏贴,再打开百度翻译的步骤了. 小龙用的是有道提供的api,普通用户就可以免费使用的.有道提供了网页模块的调用法和数据接口型的,网页模块的会比较简单一些,在他们官网上把写好的代码复制进html就好,这边简单展开以下数据接口型的调用. 首先,