利用GoogleTranslate API翻译文档和文本

   首先下载从 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翻译出来没有文本的格式,哪位大虾知道解决方法可以留言给我好吗?小弟感激不尽。
   

你可能感兴趣的:(java,Google)