600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > (转)利用Google翻译引擎制作自己的多国语言翻译机

(转)利用Google翻译引擎制作自己的多国语言翻译机

时间:2022-10-13 02:15:03

相关推荐

(转)利用Google翻译引擎制作自己的多国语言翻译机

出处:/ekinglong/archive//11/12/80704.html?Pending=true#Post

本文介绍如何利用Google在线翻译引擎来制作自己的多国语言翻译器。本程序利用Google的在线翻译引擎实现汉语到英语,英语到汉语,英语到日语的单词,整句的翻译。因为是在命令行运行,不支持\n,不能对文章、段落进行翻译,不过稍微做一个Application 程序扩展一下就可以了。

本类可以直接在命令行下使用:

java ekinglong.languageEngine.GoogleTranslationEngine2 [text] [langpair]

说明:

[text]表示要翻译的文本,可以有空格,这样支持英语的整句翻译。

[langpair]是指定翻译语言对值。这个翻译引擎类支持“汉语译英语”,“英语译汉语”和“英语译日语”,它们分别对应的翻译语言对值是:cn-en , en-cn , en-ja。

示例如下:

示例1:将英语“hello”翻译成“日语”

java ekinglong.languageEngine.GoogleTranslationEngine2 hello en - ja

结果1:

翻译内容:hello

Google翻译结果:こんにちは

示例2:翻译英文句子“hello, the world!”到中文。

java ekinglong.languageEngine.GoogleTranslationEngine2 hello,the world ! en - cn

结果2:

翻译内容:hello, the world !

Google翻译结果:你好,世界 !

示例3:将汉语“你好世界”翻译成英语

java ekinglong.languageEngine.GoogleTranslationEngine2 你好 世界 cn - en

结果3:

翻译内容:你好 世界

Google翻译结果:Hello world

下面是实现代码:

/** */ /**

* 利用Google在线翻译引擎实现多国语言互译

* 这里只使用google的对译项目

* 目前只针对中日英,且因为google不提供中日直接互译,

* 所以,此引擎也不能进行中日对译

*

* @author ekinglong

* @version 1.0 06/10/30

*/

package ekinglong.languageEngine;

import java.io. * ;

import . * ;

public class GoogleTranslationEngine2 {

// 定义互译语言对常数变量,符合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 = " /translate_t " ;

/** */ /**

* 利用google在线翻译引擎实现翻译,并获取翻译内容

* @param translateText 要翻译的文本内容

* @param langpair 对译语言的值对,如en|ja是由英语翻译到日语

*/

public String translate(String translateText,String langpair)

throws MalformedURLException,IOException,UnsupportedEncodingException {

// text是google翻译页面提交时对于欲翻译文字的变量名

// langpair是google翻译页面提交时对于采用何种互对语言的变量名

String urlstr = engineUrl + " ?text= " + encodeText(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源码来看

* 翻译内容被置于<div id=result_box dir=ltr>和</div>标签之间

* @param htmltext 获得的网业源代码

*/

private String getContent(String htmltext) {

String ss = " <div id=result_box dir=ltr> " ;

String se = " </div> " ;

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 = .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 = " hello " ;

String langpair = " en|ja " ;

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);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。