??????? 很是无奈,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请求是有字数限制的.