目錄web
因爲項目須要,我整理了網上一些跟在線翻譯有關的資料,作了一個整合Google和百度翻譯的Demo程序。大概工做就是將Google翻譯和百度翻譯的Web在線版本功能移植PC客戶端,用的是它們提供的一些翻譯API(非付費)。功能簡單,原理也不復雜,記下來但願可以幫助一些人。如下是截圖:工具
「麻雀雖小五臟俱全」,因爲支持兩種翻譯方式,因此能夠將一些共性抽象出來,放在一個獨立的接口當中(假如之後擴展更多種翻譯方式,也會方便不少)。咱們定義一個「翻譯接口」ITranslator,負責翻譯的兩個類分別爲GoogleTranslator和BaiduTranslator。ITranslator接口代碼以下:翻譯
1 /// <summary> 2 /// 翻譯器接口 全部翻譯器必須實現該接口 3 /// </summary> 4 interface ITranslator 5 { 6 /// <summary> 7 /// 翻譯方法 8 /// </summary> 9 /// <param name="srcTxt"></param> 10 /// <param name="srcLanguage"></param> 11 /// <param name="desLanguage"></param> 12 /// <returns></returns> 13 string TranslateText(string srcTxt, string srcLanguage, string desLanguage); 14 /// <summary> 15 /// 翻譯結果發音URL 16 /// </summary> 17 string TranslateSpeechURL 18 { 19 get; 20 } 21 /// <summary> 22 /// 全部支持的語言 23 /// </summary> 24 List<string> AllSupportedLanguages 25 { 26 get; 27 } 28 /// <summary> 29 /// 本次翻譯耗時 30 /// </summary> 31 double TranslateTime 32 { 33 get; 34 } 35 }
兩個翻譯類(GoogleTranslator和BaiduTranslator)均實現該接口。UI界面直接依賴於ITranslator接口,不會直接依賴於兩個具體的翻譯類:設計
以上是「依賴倒置原則」最簡單的應用場合。code
使用很簡單,定義一個ITranslator接口便可:接口
1 itranslator = new GoogleTranslator(); 2 //翻譯 3 string translated_string = itranslator.TranslateText("我是一個地球人 ——來自Google的翻譯", "中文", "英語"); 4 //翻譯結果朗讀URL 5 string speechURL = itranslator.TranslateSpeechURL; 6 //翻譯耗時(毫秒) 7 int translate_time = (int)itranslator.TranslateTime; 8 9 itranslator = new BaiduTranslator(); 10 //翻譯 11 translated_string = itranslator.TranslateText("我是一個地球人 ——來自百度的翻譯", "中文", "德語"); 12 //翻譯結果朗讀URL 13 speechURL = itranslator.TranslateSpeechURL; 14 //翻譯耗時(毫秒) 15 translate_time = (int)itranslator.TranslateTime;
後續若是有更多種翻譯方式,能夠參照GoogleTranslator和BaiduTranslator的實現。具體代碼我就不貼了,源碼中註釋很詳細。請求Web Server時用到了WebClient和WebRequest/WebResponse(前者較後者更高層、更抽象)。get