在线调用google翻译_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 在线调用google翻译

在线调用google翻译

 2013/10/28 15:57:37  紫_色  程序员俱乐部  我要评论(0)
  • 摘要:很是无奈,google翻译收费了,像我们一般人就用不起了.只能另想办法了.上一篇介绍了使用bing也是解决的办法之一,但是不可否认还是google翻译的更加理想.首先下载项目所需要的jar包:jsoup-*.jar,commons-io-*.jar,commons-logging-*.jar.为了提高可扩展性我使用了接口,看代码:packagegd.hz.lily.util.translate;/***提供系统的语言翻译功能*@authorlfd*2013-10
  • 标签:翻译 Google 在线

??????? 很是无奈,google翻译收费了,像我们一般人就用不起了.只能另想办法了.上一篇介绍了使用bing也是解决的办法之一,但是不可否认还是google翻译的更加理想.

?????? 首先下载项目所需要的jar包:jsoup-*.jar,commons-io-*.jar,commons-logging-*.jar.为了提高可扩展性我使用了接口,看代码:

class="java" name="code">package gd.hz.lily.util.translate;

/**
 * 提供系统的语言翻译功能
 * @author lfd
 * 2013-10-01
 */
public interface TranslateUtil {
	
	/**
	 * http请求的类型(如"text/html" , "text/plain")
	 * @param type 请求的类型
	 */
	public void setContentType(String type) ;
	
	/**
	 * 翻译语言(自动识别源语言)
	 * @param text 翻译的内容
	 * @param srcLang 源语言
	 * @param targetLang 目标语言
	 * @return 目标语言内容
	 */
	public String translate(final String text, final String targetLang) throws Exception ;
	
	/**
	 * 翻译语言(自动识别源语言)
	 * @param texts 翻译的内容数组
	 * @param targetLang 目标语言
	 * @return 目标语言内容
	 */
	public String[] translate(final String[] texts, final String targetLang) throws Exception ;
	
	/**
	 * 翻译语言
	 * @param text 翻译的内容
	 * @param srcLang 源语言
	 * @param targetLang 目标语言
	 * @return 目标语言内容
	 */
	public String translate(final String text, final String srcLang, final String targetLang) throws Exception ;
	
	/**
	 * 翻译语言
	 * @param texts 翻译的内容数组
	 * @param srcLang 源语言
	 * @param targetLang 目标语言
	 * @return 目标语言内容
	 */
	public String[] translate(final String[] texts, final String srcLang, final String targetLang) throws Exception ;
}

?

在这里我提供了一个枚举类,列出google所支持的翻译语言.

?

package gd.hz.lily.util.translate;

/**
 * 谷歌翻译API定义的语言信息。
 * @author lfd 改
 * 2013-10-01
 */
public enum GoogleLanguage {
	AUTO_DETECT(""),
	AFRIKAANS("af"),
	ALBANIAN("sq"),
	AMHARIC("am"),
	ARABIC("ar"),
	ARMENIAN("hy"),
	AZERBAIJANI("az"),
	BASQUE("eu"),
	BELARUSIAN("be"),
	BENGALI("bn"),
	BIHARI("bh"),
	BULGARIAN("bg"),
	BURMESE("my"),
	CATALAN("ca"),
	CHEROKEE("chr"),
	CHINESE("zh"),
	CHINESE_SIMPLIFIED("zh-CN"),
	CHINESE_TRADITIONAL("zh-TW"),
	CROATIAN("hr"),
	CZECH("cs"),
	DANISH("da"),
	DHIVEHI("dv"),
	DUTCH("nl"),
	ENGLISH("en"),
	ESPERANTO("eo"),
	ESTONIAN("et"),
	FILIPINO("tl"),
	FINNISH("fi"),
	FRENCH("fr"),
	GALICIAN("gl"),
	GEORGIAN("ka"),
	GERMAN("de"),
	GREEK("el"),
	GUARANI("gn"),
	GUJARATI("gu"),
	HEBREW("iw"),
	HINDI("hi"),
	HUNGARIAN("hu"),
	ICELANDIC("is"),
	INDONESIAN("id"),
	INUKTITUT("iu"),
	IRISH("ga"),
	ITALIAN("it"),
	JAPANESE("ja"),
	KANNADA("kn"),
	KAZAKH("kk"),
	KHMER("km"),
	KOREAN("ko"),
	KURDISH("ku"),
	KYRGYZ("ky"),
	LAOTHIAN("lo"),
	LATVIAN("lv"),
	LITHUANIAN("lt"),
	MACEDONIAN("mk"),
	MALAY("ms"),
	MALAYALAM("ml"),
	MALTESE("mt"),
	MARATHI("mr"),
	MONGOLIAN("mn"),
	NEPALI("ne"),
	NORWEGIAN("no"),
	ORIYA("or"),
	PASHTO("ps"),
	PERSIAN("fa"),
	POLISH("pl"),
	PORTUGUESE("pt"),
	PUNJABI("pa"),
	ROMANIAN("ro"),
	RUSSIAN("ru"),
	SANSKRIT("sa"),
	SERBIAN("sr"),
	SINDHI("sd"),
	SINHALESE("si"),
	SLOVAK("sk"),
	SLOVENIAN("sl"),
	SPANISH("es"),
	SWAHILI("sw"),
	SWEDISH("sv"),
	TAJIK("tg"),
	TAMIL("ta"),
	TAGALOG("tl"),
	TELUGU("te"),
	THAI("th"),
	TIBETAN("bo"),
	TURKISH("tr"),
	UKRANIAN("uk"),
	URDU("ur"),
	UZBEK("uz"),
	UIGHUR("ug"),
	VIETNAMESE("vi"),
	WELSH("cy"),
	YIDDISH("yi");
	
	/**
	 * 谷歌的当前语言的字符串表示形式。
	 */
	private final String language;
	
	/**
	 * 构造函数
	 * @param 语言标识符。
	 */
	private GoogleLanguage(final String pLanguage) {
		language = pLanguage;
	}
	
	public static GoogleLanguage fromString(final String pLanguage) {
		for (GoogleLanguage lang : values()) {
			if (pLanguage.equals(lang.toString())) {
				return lang ;
			}
		}
		return null;
	}
	
	/**
	 * 返回的字符串表示这种语言。
	 * @return 这种语言的字符串表示形式。
	 */
	@Override
	public String toString() {
		return language;
	}
}

?接下来看一下TranslateUtil的实现类TranslateToGoogle

package gd.hz.lily.util.translate;

import gd.hz.lily.error.ApplicationException;
import gd.hz.lily.util.Define;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
 * 使用google进行翻译
 * @author lfd 
 * 2013-10-01
 */
public class TranslateToGoogle implements TranslateUtil {
	
	private final String ID_RESULTBOX = "result_box";
	
	private String type = "" ;

	public void setContentType(String type) {
		this.type = type ;
	}

	public String translate(String text, String targetLang) throws Exception {
		return translate(text, "", targetLang) ;
	}

	public String[] translate(String[] texts, String targetLang)
			throws Exception {
		return translate(texts, "", targetLang) ;
	}

	public String translate(String text, String srcLang, String targetLang)
			throws Exception {
		return execute(text, srcLang, targetLang) ;
	}

	public String[] translate(String[] texts, String srcLang, String targetLang)
			throws Exception {
		
		StringBuilder content = new StringBuilder() ;
		int size = texts.length ;
		for(int i = 0 ; i < size ; i++) {
			if(i < size-1) {
				content.append(texts[i]).append("{*}") ;
			} else {
				content.append(texts[i]) ;
			}
		}
		String[] temps = execute(content.toString(),srcLang , targetLang).split("\\{\\*\\}") ;
		size = temps.length ;
		//去除左右空白字符
		for (int i = 0; i < size; i++) {
			temps[i] = temps[i].trim() ;
		}
		return temps ;
	}
	
	/**
	 * 发送翻译请求
	 * @param text 要翻译的内容
	 * @param srcLang 源语言
	 * @param targetLang 目标语言
	 * @return 目标语言
	 * @throws Exception 翻译失败
	 */
	private String execute(final String text, final String srcLang,
			final String targetLang) throws Exception {
		inspection(srcLang, targetLang) ;
		Document document = Jsoup.connect("http://translate.google.com.hk")
		  .data("sl", srcLang)
		  .data("ie", "UTF-8")
		  .data("oe", "UTF-8")
		  .data("text", text)
		  .data("tl", targetLang)
		  .data("ie", Define.getEncoding())
		  .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7")
		  .cookie("Cookie", "Cookie	PREF=ID=8daa1f767f10d1fe:U=f5ac701cf7d3f2e0:FF=0:LD=en:CR=2:TM=1277174286:LM=1289370601:S=q7yslRWEZs3uK1H8; NID=39=UO-TWo9HzzjHc-d_wYm7BVR1cH33KpqaN5h5877_i29nERA93FeG1GSuV3ZSvsOx8D-TnHKpB9m0KhZRH8U9uPwoE-arYd0bAyAlILyXZxLO2_TyGQhJpcMiOLVEuCpq; SID=DQAAAHoAAADMlGzeKhnGkbkIJ36tVO0ZPXgmQ6Cth7Oa6geyyE1WJooW8P01uKUHNrsRkjggvFMAWIWB9J5i18z0F6GjC_oV79mSwXEDGuRFGhRnDyJdid3ptjFW0pIyt4_2D6AMIqtOWF71aWdvY7IvAU1AWMNs8fBZHAOgRqtf3aCUkr36ZA; HSID=A6-YJTnhjBdFWukoR")
		  .timeout(2000000)
		  .post();
		Element element = document.getElementById(ID_RESULTBOX);
		return element.text() ;
	}
	
	/**
	 * 检查Google是否支持语言.
	 */
	private void inspection(String srcLang, String targetLang) {
		if(!"".equals(this.type)) setContentType(type) ;
		if(GoogleLanguage.fromString(srcLang) == null || GoogleLanguage.fromString(targetLang) == null) {
			throw new ApplicationException("Google不支持的语言") ;
		}
	}
}

?

测试:

public static void main(String[] args) {
		TranslateUtil translate = new TranslateToGoogle() ;
		try {
			System.out.println(translate.translate("世界你好!", "en")) ;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

?这里需要注意,如果使用get请求是有字数限制的.

发表评论
用户名: 匿名