第一次在CSDN写博客,想着记录一下自己一些作业过程中的问题和心得,没想到要用Markdown语言写,说实话我还真没用过呢,还要边学边写。话不多说,进入正题。
1.引言
平时在上网浏览网站或者阅读一些英文文献的时候,遇到不明白意思的单词导致整句话不太理解时总得打开百度
然后搜索意思,频繁地打开翻译页面让整个过程显得很繁琐,或者分屏操作一边放文献一边放翻译的时候,文章或网站会被压缩,排版会有变化
两种方法都不够合适,所以我就想做一款即时翻译的软件,需要达到的功能有:
- 常驻在屏幕最顶层,通过监听剪切板来获取复制的单词或长句,然后在软件页面自动进行翻译。同时有一些附加功能:支持中文与多门外语互译、监听剪切板或者根据自己输入的内容翻译等。
- 加入记录单词功能,查询后可以添加单词,并提供复习回顾的页面。
2.具体实现思路
- 使用Transferable变量通过getSystemClipboard()函数来获取剪切板的内容getContent(),返回剪切板所得到的数据getTransferData()。
- 获取翻译的内容:
- 第一种方式:到网页源代码里进行截取和回传。在百度首页查找“translate”单词,然后打开开发人员工具搜索“翻译”“转变”等几个意思,最后在标记里面发现网页显示的翻译都存在于这个标记里面。连续尝试了几个单词后发现都是在标签里,那么就可以确定这种方法的思路了。
首先明确是要去 http://www.baidu.com/s?wd= 这个网站找寻标签,那么就分别定义三个变量来代表网站、标签头和标签尾。然后定义一个HttpURLConnection对象来建立起连接,通过BufferedReader将获得的输入流数据进行整理,获取翻译内容放入字符串变量,作为函数的返回值来调用。
- 第二种方式:使用百度翻译API。首先要去百度翻译http://api.fanyi.baidu.com 进行开发者申请,申请通过后会获得一个APP_ID和SECURITY_KEY,这是相当于后面要调用API的账号密码。然后下载网站底部的Java Demo,提取出HttpGet.java、MD5.java、TransApi.java三个文件,放入新建的一个package中。上述三个是百度官方写的调用API的方法。
HttpGet.java是建立起http连接的一个类,将输入的字符串进行URL编码,转换为%20形式,并且读取服务器的数据,进行翻译内容的获取。
MD5.java是百度官方为了调用的安全,使用该算法来生成一段字符串,该java文件负责生成该字符串。
TransApi.java用来发送所需要的总共六个字段。
- 接下来是具体将获取的文本添加到TextArea中。首先创建一个新线程来随时监听剪切板的文本,然后监听文本框使用addDocumentListener()来进行insertUpdate()操作。
- 然后是数据库文件的建立。在MySQL中新建一个数据库,新建一个word表,将页面记录的单词存入该表中,然后通过JTable和DefaultTableModel将记录的单词展示出来。
3.两种方式的对比
- 通过获取网页源代码的方式的优点是完全免费,无任何次数限制。缺点是目前只能提供单个单词的翻译,长句中单词与单词间的空格在URL中无法识别;同时仅限于英语翻译中文。
- 通过百度翻译API。优点是可以进行单词、长句的翻译,支持中文译成多种外语,也支持多种外语译成中文。缺点是百度规定一个月只给200万字符的免费额度,超出的部分按100万字符/49元收费。
4.源代码
参考资料:用Java做一个及时翻译工具