利用Google在线翻译引擎制作自己的多国语言翻译机

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

因为是刚刚接触java 的网络编程,如果有不当之错,还请各位看官指证。

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

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  java.net. * ;
 
 
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 = " http://translate.google.com/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);
       &nbs

p;  int  seidx = htmltext.indexOf(se,ssidx);
         
         String restr
= htmltext.substring(ssidx + ss.length(),seidx);
         
return  restr;
     }

     
     
// 将文本进行URL编码
      private  String encodeText(String text) {
         String str
= java.net.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);
     }

 }


 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值