在线调用google通译
在线调用google翻译
转:http://mylfd.iteye.com/blog/1965585
很是无奈,google翻译收费了,像我们一般人就用不起了.只能另想办法了.上一篇介绍了使用bing也是解决的办法之一,但是不可否认还是google翻译的更加理想.
首先下载项目所需要的jar包:jsoup-*.jar,commons-io-*.jar,commons-logging-*.jar.为了提高可扩展性我使用了接口,看代码:
- 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"),
- *N("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"),
- *("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 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", "UTF-8")
- .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) {
- System.out.println("Google不支持的语言") ; }
- }
- }
测试:
- public static void main(String[] args) {
- TranslateUtil translate = new TranslateToGoogle() ;
- try {
- System.out.println(translate.translate("世界你好!", "en")) ;
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
这里需要注意,如果使用get请求是有字数限制的.