调谷歌自动翻译工具
前言
国际化是一个即简单有麻烦的事情,如果国际化转码两三个地区语言倒没什么,如果同时需要国际化转码多国语言那工作量就很大了,下面,介绍一个调用谷歌提供的在线翻译工具的代码解决问题。
谷歌支持的地区编码:
package com.ywx.test.i18n;
/**
* 谷歌支持的地区编码.
*/
public enum GoogleLanguage {
/**
* 地区编码及名称的枚举.
*/
CHINESE_SIMPLIFIED("zh-CN","简体中文"),
CHINESE_TRADITIONAL("zh-TW","繁体中文"),
ENGLISH("en","英文"),
JAPAN("ja","日语"),
INDIA("in","印度"),
RUSSIA("ru","俄文"),
FRANCE("fr","法语"),
SPAIN("es","西班牙语"),
NETHERLANDS("nl","荷兰语"),
SINGAPORE("sg","新加坡语"),
THAI("th","泰语");
/**
* 当前语言的字符串表示形式.
*/
private String languageCode;
/**
* 当前语言的名称.
*/
private String languageName;
/**
* 构造函数
*
* @param 语言标识符。
*/
private GoogleLanguage(final String languageCode) {
this.languageCode = languageCode;
}
/**
* 构造函数
*
* @param 语言标识符。
*/
private GoogleLanguage(final String languageCode, final String languageName) {
this.languageCode = languageCode;
this.languageName = languageName;
}
public static GoogleLanguage getLuanguage(final String languageCode) {
for (GoogleLanguage lang : values()) {
if (languageCode.equals(lang.toString())) {
return lang;
}
}
return null;
}
public String getLanguageCode() {
return languageCode;
}
public String getLanguageName() {
return languageName;
}
public String toString(){
return this.languageCode;
}
}
根据地区编码翻译语言的代码:
package com.ywx.test.i18n;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class TranslateToGoogle {
private final String ID_RESULTBOX = "result_box";
/** 默认地区编码. **/
private static final String DEFAULT_LANG = "zh-CN";
private String type = "";
public void setContentType(String type) {
this.type = type;
}
/**
* 默认翻译接口.
*
* @param text
* 需要翻译的内容
* @param targetLang
* 目标语言编码
* @return 翻译后的语言
* @throws Exception
* 翻译失败
*/
public String translate(String text, String targetLang) throws Exception {
return translate(text, DEFAULT_LANG, targetLang);
}
public String[] translate(String[] texts, String targetLang) throws Exception {
return translate(texts, "", targetLang);
}
/**
* 翻译.
*
* @param text
* 需要翻译的内容
* @param srcLang
* 源语言编码
* @param targetLang
* 目标语言编码
* @return 翻译后的语言
* @throws Exception
* 翻译失败
*/
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.cn")
// .connect("https://www.baidu.com/")
.data("sl", srcLang)
.data("ie", "UTF-8")
.data("oe", "UTF-8")
.data("text", text)
.data("tl", targetLang)
// .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7")
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER")
.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);
String content = element.text();
return content;
}
/**
* 检查Google是否支持语言.
*/
private void inspection(String srcLang, String targetLang) {
if (!"".equals(this.type))
setContentType(type);
if (GoogleLanguage.getLuanguage(srcLang) == null || GoogleLanguage.getLuanguage(targetLang) == null) {
System.out.println("Google不支持的语言!");
}
}
}
测试代码:
package com.ywx.test.i18n;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
* 主函数.
*
*/
public class TranslateTest {
public static void main(String[] args) {
TranslateToGoogle translate = new TranslateToGoogle();
try {
String str = "世界,你好!新年快乐!";
String language = "ru";
System.out.println("翻译原文:"+str);
System.out.println("翻译语种:" + GoogleLanguage.getLuanguage(language).getLanguageName());
System.out.println(translate.translate(str, language));
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
翻译原文:世界,你好!新年快乐!
翻译语种:俄文
Привет, мир! С Новым Годом!
切换为日语的运行结果:
翻译原文:世界,你好!新年快乐!
翻译语种:日语
こんにちは、世界!新年あけましておめでとうございます!
切换为英文的运行结果:
翻译原文:世界,你好!新年快乐!
翻译语种:英文
Hello World! happy New Year!
备注:也可以将英文或其他语言作为翻译的对象,翻译成其他地区编码的语言。
---------------------
作者:国境之南_ywx
来源:CSDN
原文:https://blog.csdn.net/yangwenxue_admin/article/details/53968623
版权声明:本文为博主原创文章,转载请附上博文链接!