您的位置:首页 > 编程语言 > Go语言

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

2007-04-27 11:10 561 查看
本文介绍如何利用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);


     }


 }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息