google翻译模板 利用Google进行无长度限制的文本翻译(无需API,无需Money)
日期:2023-03-11 12:39:36 / 人气: 784 / 发布者:成都翻译公司
在测试时发现,其GET请求中加上一些参数可以实现翻译功能,于是乎第一个GET版本的翻译功能出炉了,其步骤大约分为以下两步:然而,GET方式跟API有同样的问题,超出固定长度后就会报请求异常。翻译者接口,为以后扩展使用请求方式翻译者实现类附赠大家Google网站翻译器的使用方法:使用示例,只要将那两个变量分别加在HTML页面的Head中和想出现“选择语言”框的地方即可。背景介绍
前段时间在做一个类似“一键翻译”的小功能。有必要翻译多种语言的长文本。本来以为很简单,结果发现没有完美的方法可以解决。我不得不从网上搜索各种翻译APIgoogle翻译模板,并弄清楚如何使用它们,但它们并不完美。各方面的不足大致如下:
在这四大翻译巨头的种种限制下,他们不得不另谋出路……
回转
鉴于谷歌翻译的准确性,我们决定选择谷歌作为目标,但它的价格真的很贵,所以我不得不从它的翻译页面上做文章。
测试中发现在GET请求中加入一些参数可以实现翻译功能,所以发布了第一个GET版本的翻译功能。步骤大致分为以下两个步骤:
但是GET方法和API一样存在问题,超过固定长度会报请求异常。所以只能想其他方法了。
后来尝试构造一个POST请求来访问,没想到……成功了……高兴了一阵子,就是不敢独占代码。
源码:1. 代码部分
1)。翻译接口,用于未来扩展
查看代码
using System; namespace Common.Translator { ////// 语言翻译者接口 /// ZhangQingFeng 2012-7-27 add /// public interface ITranslator { /// /// 翻译文本 /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 源语言类型代码,如:en、zh-CN、zh-TW、ru等 /// 目标语言类型代码,如:en、zh-CN、zh-TW、ru等 /// 翻译结果 string Translate(string sourceText, string sourceLanguageCode, string targetLanguageCode); /// /// 翻译文本[自动检测源语言类型] /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 目标语言类型代码,如:en、zh-CN、zh-TW、ru等 /// 翻译结果 string Translate(string sourceText, string targetLanguageCode); } }
2)。Google Post 请求方法翻译器实现类
查看代码
using System; using System.Web; using System.Net; using System.Text.RegularExpressions; using System.Text; namespace Common.Translator { ////// google translate翻译者类[非API,URL访问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方式请求 private string UrlTemplate = "http://translate.google.com.hk/"; //google翻译URL模板:POST方式请求 #region 常用语言编码 private string AutoDetectLanguage = "auto"; //google自动判断来源语系 #endregion /// /// 翻译文本[自动检测源语言类型] /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 目标语言类型代码,如:en、zh-CN、zh-TW、ru等 /// 翻译结果 public string Translate(string sourceText, string targetLanguageCode) { return Translate(sourceText, AutoDetectLanguage, targetLanguageCode); } /// /// 翻译文本 /// ZhangQingFeng 2012-7-27 add /// /// 源文本 /// 源语言类型代码,如:en、zh-CN、zh-TW、ru等 /// 目标语言类型代码,如:en、zh-CN、zh-TW、ru等 /// 翻译结果 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方式实现,无长度限制 string url = UrlTemplate; //组织请求的数据 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); //响应结果 #endregion #region GET方式实现,有长度限制 //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); //响应结果 #endregion //使用的正则表达式: s+id="?result_box"?s+[^>]*>(.+)s*
替换为换行,如为HTML翻译选项则可去除下行代码 strReturn = Regex.Replace(strReturn, @"
3)。假工厂类...不要喷,只是简单的工厂实现
查看代码
using System; namespace Common.Translator { ////// 翻译者工厂类 /// public class TranslatorFactory { /// /// 翻译者 /// /// 翻译者类型,目前只有提供Google翻译 /// 翻译者对象 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)。测试类别:
查看代码
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)。*后,给出操作的结果:
PS:该方法的翻译结果来自谷歌翻译页面,基本相同,但它对HTML的判断远不如谷歌API,所以不要感到惊讶,也许你可以在什么时候改进它有时间大家有需要的大侠也可以拿到源码改一下,呵呵。
2. 以下是使用谷歌网站翻译器的方法:
1)。代码
查看代码
using System; ////// 网站翻译器[Google提供,整页翻译器] /// ZhangQingFeng 2012-7-27 add /// 说明: /// 如果需要在页面上使用google语言翻译,需要做以下两步: /// 1.将本类中的GoogleTranslateMeta内容放入Head中,如:Response.Write(SiteTranslator.GoogleTranslateMeta); /// 2.将本类中的GoogleTranslateControl内容放入页面中需要显示“选择语言”的地方 /// public class SiteTranslator { public SiteTranslator() { } /// /// Google整页翻译Meta标签,放入Head部位 /// public const string GoogleTranslateMeta = @""; /// /// Google整页翻译控件,放入需要显示“选择语言”框的地方 /// public const string GoogleTranslateControl = @""; }
2)。例如,只需将这两个变量添加到 HTML 页面的头部和您希望“选择语言”框出现的位置。
PS:这是我第一次写博客。花园里有很多大鸟。我在你面前展示我的丑陋。刚刚写了希望大家遇到这样的问题不要重复轮子。换小弟的轮子。,也许比那些 API 更好用。更重要的是:无限制、免费,你懂的。^_^
如果代码对你有用google翻译模板,希望你能支持。另外,我不知道如何上传园内压缩包附件,但我只能发送外部链接地址。希望各位前辈给点建议。
代码包下载地址:


