首先下载从
http://code.google.com/p/google-api-translate-java/下载最新的,目前最新的是google-api-translate-java-0.94.jar.
利用谷歌翻译提供的API可以实现文件和文本翻译
/**
* 2010-10-10
* GoogleTranslateDemo.java
* author:ZengZhaoShuai
*/
package wsg.google.translate;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import wsg.file.util.ReadFiles;
import com.google.api.Files;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
/**
* @author zengzhaoshuai
*
*/
public class GoogleTranslateDemo {
// 静态初始化块
static {
Translate
.setHttpReferrer("http://code.google.com/p/google-api-translate-java/");
}
/**
*
* @param text
* @param from
* @param to
* @return
*/
public static String gettranslatedText(String text, Language from,
Language to) {
/**
* 第一个参数:要翻译的内容 第二个参数:翻译内容原始的语言 第三个参数:翻译内容要得到结果的语言
*/
String translatedText = "";
try {
translatedText = Translate.execute(text, from, to);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return translatedText;
}
/**
*
* @param files
* @param from
* @param to
* @param size
* 设置限制文件的大小
*/
public static void TranslateFiles(List<File> files, Language from,
Language to, int size) { // 翻译某个目录下的所有文件
for (File file1 : files) {
File parent = new File(file1.getParent());
File file2 = new File(parent.getParent() + "\\" + parent.getName()
+ "_EN\\" + file1.getName());
if (!new File(parent.getParent() + "\\" + parent.getName()
+ "_EN\\").exists()) {
// 创建一个文件夹,文件夹名为先前文件加上_EN
new File(parent.getParent() + "\\" + parent.getName() + "_EN\\")
.mkdir();
}
try {
// 由于google会根据访问使用谷歌翻译的情况限制翻译文件的大小,一般翻译6KB大小的文件没什么问题
if (file1.length() <= 1024 * size) { // 文件大小小于或等于6KB(4*1024B)时
String translateText = gettranslatedText(Files.read(file1),
from, to);
Files.write(file2, translateText);// 写入文件
} else { // //文件大小大于设定的文件大小限制时,一般设置为6KB时
// 采取把文件分为多个块,每个块分别翻译,块的大小与文件限制大小相同
int len = 1024 * size, count = 1;
long length = file1.length();
if (length % len == 0) {
count = ((int) length) / len;
} else {
count = ((int) length) / len + 1;
}
byte buf[] = new byte[(int) length];
InputStream inputStream = null;
OutputStream outputStream = null;
inputStream = new FileInputStream(file1);
outputStream = new FileOutputStream(file2);
for (int i = 0; i < count; i++) {
if ((i + 1) * len <= length) {
inputStream.read(buf, i * len, len);
outputStream.write(gettranslatedText(
new String(buf, i * len, len), from, to)
.trim().getBytes());
} else {
inputStream.read(buf, i * len, (int) length - i
* len);
outputStream
.write(gettranslatedText(
new String(buf, i * len,
(int) length - i * len),
from, to).trim().getBytes());
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 翻译文本
String text = "我爱你";
System.out.println(GoogleTranslateDemo.gettranslatedText(text,
Language.CHINESE, Language.ENGLISH));
// 翻译所在目录下的文件,目前测试的好像只有txt文件的比较有效
ReadFiles readFiles = new ReadFiles("E:\\test");// 文档所在目录
// 实现中文翻译英文,设置文件限制大小为6KB
GoogleTranslateDemo.TranslateFiles(readFiles.getFiles(),
Language.CHINESE, Language.ENGLISH, 6);
}
}
//遍历文件
package wsg.file.util;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ReadFiles {
private List<File> files = new ArrayList<File>();
private File dir;
public ReadFiles(String directoryPath){
dir=new File(directoryPath);
}
public void listFiles(File dir) {
File file[] = dir.listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isDirectory()) {
this.listFiles(file[i]); //迭代遍历
} else {
//迭代选择txt文件
if (file[i].getName().lastIndexOf(".txt") != -1){
files.add(file[i]);
}
}
}
}
public List<File> getFiles(){
this.listFiles(dir);
return files;
}
}
暂时还没找到比较好的方法来直接翻译pdf和doc文档,还有txt翻译出来没有文本的格式,哪位大虾知道解决方法可以留言给我好吗?小弟感激不尽。