www.pudn.com > mailVersion.rar > GoogleTranslationEngine.java


package Common; 
 
import java.io.*; 
import java.net.*; 
 
public class GoogleTranslationEngine { 
 
	// 定义互译语言对常数变量,符合google页面相关对译语言对的值  
	public static final String LANGPAIR_CN_EN = "zh-CN|en"; // 汉语到英语  
	public static final String LANGPAIR_EN_CN = "en|zh-CN"; // 英语到汉语  
	public static final String LANGPAIR_EN_JA = "en|ja"; // 英语到日语 
 
	// 定义编码常数  
	public static final String CHARSET_CN = "GBK"; 
	public static final String CHARSET_JA = "Shift_JIS"; 
 
	// google在线翻译引擎url  
	static final String engineUrl = "http://translate.google.com/translate_t"; 
 
	/** */ 
	/**  
	 * 利用google在线翻译引擎实现翻译,并获取翻译内容 
	 *  @param  translateText 要翻译的文本内容 
	 *  @param  langpair 对译语言的值对,如en|ja是由英语翻译到日语 
	 */ 
	public String translate(String translateText, String langpair) 
			throws MalformedURLException, IOException, 
			UnsupportedEncodingException { 
 
		// text是google翻译页面提交时对于欲翻译文字的变量名 
		// langpair是google翻译页面提交时对于采用何种互对语言的变量名 
		if(translateText.indexOf(" ") != -1){ 
			translateText = translateText.replace(" ", "\b"); 
		} 
		if(translateText.indexOf("\n") !=-1){ 
			translateText = translateText.replace("\n",","); 
		} 
		String urlstr = engineUrl + "?text=" + translateText 
				+ "&langpair=" + langpair; 
		URL url = new URL(urlstr); 
		URLConnection connection = (HttpURLConnection) url.openConnection(); 
		connection.setRequestProperty("User-agent", "IE/6.0"); // 必须,否则报错,到于FF的怎么写,没做过测试          
		connection.connect(); 
 
		String charset = getCharsetFromLangpair(langpair); // 自动获取目标语言的编码  
		BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), charset)); // 使用指定编码接收数据  
 
		String line = null; 
		StringBuilder sb = new StringBuilder(); 
		while ((line = in.readLine()) != null) { 
			sb.append(line); 
		} 
		in.close(); 
 
		String translation = getContent(sb.toString()); 
		return translation; 
	} 
 
	/** */ 
	/**  
	 * 从获得的源文件中剥取翻译内容 
	 * 分析google翻译生成的html源码来看 
	 * 翻译内容被置于
标签之间 * @param htmltext 获得的网业源代码 */ private String getContent(String htmltext) { String ss = "
"; String se = "
"; int ssidx = htmltext.indexOf(ss); int seidx = htmltext.indexOf(se, ssidx); String restr = htmltext.substring(ssidx + ss.length(), seidx); return restr; } // // 将文本进行URL编码 // private String encodeText(String text) { // String str = java.net.URLEncoder.encode(text); // return str; // } /** */ /** * 根据翻译的目标语言获取对应的接收编码 * * @langpair 对译语言的值对,如en|ja是由英语翻译到日语 */ private String getCharsetFromLangpair(String langpair) { // 当翻译的目标语言为日语时,采用Shift+JIS编码接收数据 if (langpair.equals(LANGPAIR_EN_JA)) return CHARSET_JA; else return CHARSET_CN; } /* public static void main(String[] args) throws Exception { GoogleTranslationEngine2 engine = new GoogleTranslationEngine2(); String text = "How\bare\byou!"; String langpair = "en|zh-CN"; if (args.length >= 2) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < args.length - 1; i++) { sb.append(args[i]).append(" "); } text = sb.toString(); String tmp = args[args.length - 1]; // 因为在cmd.exe中|是特殊字符,所以不能直接指定翻译对,如"en|ja"所以转一下 if (tmp.equals("cn-en")) langpair = GoogleTranslationEngine2.LANGPAIR_CN_EN; else if (tmp.equals("en-cn")) langpair = GoogleTranslationEngine2.LANGPAIR_EN_CN; else if (tmp.equals("en-ja")) langpair = GoogleTranslationEngine2.LANGPAIR_EN_JA; else throw new Exception(" 语言对指定错误 "); } String rst = engine.translate(text, langpair); System.out.println(" 翻译内容: " + text); System.out.println(" Google翻译结果: " + rst); } */ }