google翻譯模板 利用Google進(jìn)行無(wú)長(zhǎng)度限制的文本翻譯(無(wú)需API,無(wú)需Money)
日期:2023-03-11 12:39:36 / 人氣: 735 / 發(fā)布者:成都翻譯公司
在測(cè)試時(shí)發(fā)現(xiàn),其GET請(qǐng)求中加上一些參數(shù)可以實(shí)現(xiàn)翻譯功能,于是乎第一個(gè)GET版本的翻譯功能出爐了,其步驟大約分為以下兩步:然而,GET方式跟API有同樣的問(wèn)題,超出固定長(zhǎng)度后就會(huì)報(bào)請(qǐng)求異常。翻譯者接口,為以后擴(kuò)展使用請(qǐng)求方式翻譯者實(shí)現(xiàn)類附贈(zèng)大家Google網(wǎng)站翻譯器的使用方法:使用示例,只要將那兩個(gè)變量分別加在HTML頁(yè)面的Head中和想出現(xiàn)“選擇語(yǔ)言”框的地方即可。背景介紹
前段時(shí)間在做一個(gè)類似“一鍵翻譯”的小功能。有必要翻譯多種語(yǔ)言的長(zhǎng)文本。本來(lái)以為很簡(jiǎn)單,結(jié)果發(fā)現(xiàn)沒(méi)有完美的方法可以解決。我不得不從網(wǎng)上搜索各種翻譯APIgoogle翻譯模板,并弄清楚如何使用它們,但它們并不完美。各方面的不足大致如下:
在這四大翻譯巨頭的種種限制下,他們不得不另謀出路……
回轉(zhuǎn)
鑒于谷歌翻譯的準(zhǔn)確性,我們決定選擇谷歌作為目標(biāo),但它的價(jià)格真的很貴,所以我不得不從它的翻譯頁(yè)面上做文章。
測(cè)試中發(fā)現(xiàn)在GET請(qǐng)求中加入一些參數(shù)可以實(shí)現(xiàn)翻譯功能,所以發(fā)布了第一個(gè)GET版本的翻譯功能。步驟大致分為以下兩個(gè)步驟:
但是GET方法和API一樣存在問(wèn)題,超過(guò)固定長(zhǎng)度會(huì)報(bào)請(qǐng)求異常。所以只能想其他方法了。
后來(lái)嘗試構(gòu)造一個(gè)POST請(qǐng)求來(lái)訪問(wèn),沒(méi)想到……成功了……高興了一陣子,就是不敢獨(dú)占代碼。
源碼:1. 代碼部分
1)。翻譯接口,用于未來(lái)擴(kuò)展
查看代碼
using System; namespace Common.Translator { ////// 語(yǔ)言翻譯者接口 /// ZhangQingFeng 2012-7-27 add /// public interface ITranslator { /// /// 翻譯文本 /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 源語(yǔ)言類型代碼,如:en、zh-CN、zh-TW、ru等 /// 目標(biāo)語(yǔ)言類型代碼,如:en、zh-CN、zh-TW、ru等 /// 翻譯結(jié)果 string Translate(string sourceText, string sourceLanguageCode, string targetLanguageCode); /// /// 翻譯文本[自動(dòng)檢測(cè)源語(yǔ)言類型] /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 目標(biāo)語(yǔ)言類型代碼,如:en、zh-CN、zh-TW、ru等 /// 翻譯結(jié)果 string Translate(string sourceText, string targetLanguageCode); } }
2)。Google Post 請(qǐng)求方法翻譯器實(shí)現(xiàn)類
查看代碼
using System; using System.Web; using System.Net; using System.Text.RegularExpressions; using System.Text; namespace Common.Translator { ////// google translate翻譯者類[非API,URL訪問(wèn)Google的方式] /// ZhangQingFeng 2012-7-27 add /// public class GoogleTranslator : ITranslator { //private string UrlTemplate = "http://translate.google.com.hk/?langpair={0}&text={1}"; //google翻譯URL模板:GET方式請(qǐng)求 private string UrlTemplate = "http://translate.google.com.hk/"; //google翻譯URL模板:POST方式請(qǐng)求 #region 常用語(yǔ)言編碼 private string AutoDetectLanguage = "auto"; //google自動(dòng)判斷來(lái)源語(yǔ)系 #endregion /// /// 翻譯文本[自動(dòng)檢測(cè)源語(yǔ)言類型] /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 目標(biāo)語(yǔ)言類型代碼,如:en、zh-CN、zh-TW、ru等 /// 翻譯結(jié)果 public string Translate(string sourceText, string targetLanguageCode) { return Translate(sourceText, AutoDetectLanguage, targetLanguageCode); } /// /// 翻譯文本 /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 源語(yǔ)言類型代碼,如:en、zh-CN、zh-TW、ru等 /// 目標(biāo)語(yǔ)言類型代碼,如:en、zh-CN、zh-TW、ru等 /// 翻譯結(jié)果 public string Translate(string sourceText, string sourceLanguageCode, string targetLanguageCode) { if (string.IsNullOrEmpty(sourceText) || Regex.IsMatch(sourceText, @"^s*$")) { return sourceText; } string strReturn = string.Empty; #region POST方式實(shí)現(xiàn),無(wú)長(zhǎng)度限制 string url = UrlTemplate; //組織請(qǐng)求的數(shù)據(jù) string postData = string.Format("langpair={0}&text={1}", HttpUtility.UrlEncode(sourceLanguageCode + "|" + targetLanguageCode), HttpUtility.UrlEncode(sourceText)); byte[] bytes = Encoding.UTF8.GetBytes(postData); WebClient client = new WebClient(); client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); client.Headers.Add("ContentLength", postData.Length.ToString()); byte[] responseData = client.UploadData(url, "POST", bytes); string strResult = Encoding.UTF8.GetString(responseData); //響應(yīng)結(jié)果 #endregion #region GET方式實(shí)現(xiàn),有長(zhǎng)度限制 //string url = string.Format(UrlTemplate, HttpUtility.UrlEncode(sourceLanguageCode + "|" + targetLanguageCode), HttpUtility.UrlEncode(sourceText)); //WebClient wc = new WebClient(); //wc.Encoding = Encoding.UTF8; //string strResult = wc.DownloadString(url); //響應(yīng)結(jié)果 #endregion //使用的正則表達(dá)式: s+id="?result_box"?s+[^>]*>(.+)s*
替換為換行,如為HTML翻譯選項(xiàng)則可去除下行代碼 strReturn = Regex.Replace(strReturn, @"
3)。假工廠類...不要噴,只是簡(jiǎn)單的工廠實(shí)現(xiàn)
查看代碼
using System; namespace Common.Translator { ////// 翻譯者工廠類 /// public class TranslatorFactory { /// /// 翻譯者 /// /// 翻譯者類型,目前只有提供Google翻譯 /// 翻譯者對(duì)象 public static ITranslator CreateTranslator(string type) { ITranslator translator = null; switch (type) { case "Microsoft": break; case "Youdao": break; default: translator = new GoogleTranslator(); break; } return translator; } } }
4)。測(cè)試類別:
查看代碼
using System; using System.Collections.Generic; using Common.Translator; namespace ConsoleTest { class Program { static void Main(string[] args) { ITranslator translator = TranslatorFactory.CreateTranslator("Google"); List<string> lst = new List<string>(); lst.Add("Soft Leather Case for Apple iPad 1 /2/3 With Ploybag Package"); lst.Add("Soft Leather Case,Case for Apple iPad ,ipad case ,PU case"); lst.Add("1X ipad leather case"); lst.Add("Slim enough to slip into a backpack, bag or briefcase, tough enough to protect your iPad from whatever it may find in there. Slip your iPad into Elan Sleeve then flip the tab closure down to secure it. Then gently pull the tab to slide your iPad out quickly and safely. Stain-resistant synthetic outer shell with smooth micro suede interior."); lst.Add(@"Fit for apple iPad 1/2 /3 leather case
PU leather material with top quality
Three bright colors to meet your demand
Durable and waterproof,practical and favorable
Protect your tablet from scratches, damage and dirt
Unique design allows easy to controls &ports?
"); string strSource=string.Join(" ",lst.ToArray()); string str = translator.Translate(strSource, "zh-CN"); Console.WriteLine(str); Console.WriteLine("完成"); } } }
5)。*后,給出操作的結(jié)果:
PS:該方法的翻譯結(jié)果來(lái)自谷歌翻譯頁(yè)面,基本相同,但它對(duì)HTML的判斷遠(yuǎn)不如谷歌API,所以不要感到驚訝,也許你可以在什么時(shí)候改進(jìn)它有時(shí)間大家有需要的大俠也可以拿到源碼改一下,呵呵。
2. 以下是使用谷歌網(wǎng)站翻譯器的方法:
1)。代碼
查看代碼
using System; ////// 網(wǎng)站翻譯器[Google提供,整頁(yè)翻譯器] /// ZhangQingFeng 2012-7-27 add /// 說(shuō)明: /// 如果需要在頁(yè)面上使用google語(yǔ)言翻譯,需要做以下兩步: /// 1.將本類中的GoogleTranslateMeta內(nèi)容放入Head中,如:Response.Write(SiteTranslator.GoogleTranslateMeta); /// 2.將本類中的GoogleTranslateControl內(nèi)容放入頁(yè)面中需要顯示“選擇語(yǔ)言”的地方 /// public class SiteTranslator { public SiteTranslator() { } /// /// Google整頁(yè)翻譯Meta標(biāo)簽,放入Head部位 /// public const string GoogleTranslateMeta = @""; /// /// Google整頁(yè)翻譯控件,放入需要顯示“選擇語(yǔ)言”框的地方 /// public const string GoogleTranslateControl = @""; }
2)。例如,只需將這兩個(gè)變量添加到 HTML 頁(yè)面的頭部和您希望“選擇語(yǔ)言”框出現(xiàn)的位置。
PS:這是我第一次寫(xiě)博客?;▓@里有很多大鳥(niǎo)。我在你面前展示我的丑陋。剛剛寫(xiě)了希望大家遇到這樣的問(wèn)題不要重復(fù)輪子。換小弟的輪子。,也許比那些 API 更好用。更重要的是:無(wú)限制、免費(fèi),你懂的。^_^
如果代碼對(duì)你有用google翻譯模板,希望你能支持。另外,我不知道如何上傳園內(nèi)壓縮包附件,但我只能發(fā)送外部鏈接地址。希望各位前輩給點(diǎn)建議。
代碼包下載地址: