利用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
翻譯內容:你好 世界
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);
         
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);
     }
 

 }
 
 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章