原由:本人英语烂,没办法看不懂国外的代码注释!只能借助其他手段来助我一臂之力了. 虽然翻译内容不是很准确,但好过什么都看不懂的强. 对吧?!

代码有点乱有用的园友自个整理一下吧! 最近没时间所以翻译后内容保存还未实现,需不需要保存自个看着办吧!过段时间再整理实现一下!这只是一个简单的例子.

不足之处请大侠指出,在下感激不尽!

直接贴代码:

 class Program
{
private readonly string appid = "XXXXXXXXXXXXXXXXXX";//APPID
private readonly string sec_key = "XXXXXXXXXXXXXXXXXXXX";//私钥
private readonly string from = "en";
private readonly string to = "yue";
private readonly string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?";
static void Main(string[] args)
{
new Program().Run();
} private void Run()
{
string path = Directory.GetCurrentDirectory();
Console.WriteLine("起始目录:" + path); IList<FileInfo> files = GetFiles(path);
Console.WriteLine("File Size:" + files.Count); ConcurrentQueue<FileInfo> cq = new ConcurrentQueue<FileInfo>();
Parallel.ForEach(files, (e) => { cq.Enqueue(e); }); Parallel.ForEach(cq, (e) => {
// 读取cs文件内容
List<String> rcq = ReaderLine(e.FullName); Console.WriteLine(e.FullName + "翻译中..."); // 遍历cs文件代码行
foreach (String q in rcq)
{
if (!StringHandle.isNote(q)) continue;// 判断是否是注释 string note = StringHandle.GetNoteValue(q);// 获取注释内容 if (string.IsNullOrWhiteSpace(note)) continue; // 组织url参数
// string pars = GetUrlPars("2015063000000001", "12345678", "hello", from, to);
string pars = GetUrlPars(appid, sec_key, note.Trim(), from, to);
// 翻译
// 返回格式:{"from":"en","to":"zh","trans_result":[{"src":"using System;","dst":"\u4f7f\u7528\u7cfb\u7edf\uff1b"}]}
string result = GetUrltoHtml(url + pars); //反序列化结果
LanguageInfo info = Serialization<LanguageInfo>(result); if (info.IsNull)
{
ErrorInfo error = Serialization<ErrorInfo>(result);
Console.WriteLine("---Error:" + error.error_code + " --- " + error.error_msg + " --- " + error.CodeToMsg());
}
else
{
Console.WriteLine("原文:"+info.trans_result[].src);
Console.WriteLine("译文:"+info.trans_result[].dst);
Console.WriteLine();
} }
}); Console.ReadKey();
} private Random r = new Random(int.MaxValue); /// <summary>
/// 拼接地址参数
/// </summary>
/// <param name="appid">APPID</param>
/// <param name="sec_key">私钥</param>
/// <param name="q">翻译query</param>
/// <param name="from"></param>
/// <param name="to"></param>
/// <returns></returns>
public string GetUrlPars(string appid,string sec_key,string q,string from,string to)
{
StringBuilder sb = new StringBuilder();
sb.Append("appid=" + appid);
// 随机数
var salt = r.Next(, int.MaxValue).ToString();
sb.Append("&salt=" + salt);
sb.Append("&from=" + from);
sb.Append("&to=" + to);
sb.Append("&q=" + HttpUtility.UrlEncode(q, Encoding.GetEncoding("GB2312"))); //对 appid + 翻译内容 + 随机数 + 私钥 进行MD5加密
var sign = MD5Encrypt(appid + q + salt + sec_key, Encoding.Default);
sb.Append("&sign=" + sign); return sb.ToString();
} /// <summary>
/// 读取文件
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public List<String> ReaderLine(string path)
{
StreamReader sr = new StreamReader(path, Encoding.Default);
List<String> lines = new List<string>();
string line;
while ((line = sr.ReadLine()) != null)
{
lines.Add(line);
}
sr.Close();
return lines;
} /// <summary>
/// 反序列化JSON
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
private T Serialization<T>(string obj)where T:class
{
using (var mStream = new MemoryStream(Encoding.UTF8.GetBytes(obj)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
T entity = serializer.ReadObject(mStream) as T;
return entity;
}
} /// <summary>
/// 遍历当前目录及子目录
/// </summary>
/// <param name="strPath">文件路径</param>
/// <returns>所有文件</returns>
private static IList<FileInfo> GetFiles(string strPath)
{
List<FileInfo> lstFiles = new List<FileInfo>();
List<string> lstDirect = new List<string>();
lstDirect.Add(strPath);
DirectoryInfo diFliles = null;
GetDirectorys(strPath, ref lstDirect);
foreach (string str in lstDirect)
{
try
{
diFliles = new DirectoryInfo(str); lstFiles.AddRange(diFliles.GetFiles("*.cs"));
}
catch
{
continue;
}
}
return lstFiles;
} private static void GetDirectorys(string strPath, ref List<string> lstDirect)
{
DirectoryInfo diFliles = new DirectoryInfo(strPath);
DirectoryInfo[] diArr = diFliles.GetDirectories();
//DirectorySecurity directorySecurity = null;
foreach (DirectoryInfo di in diArr)
{
try
{
//directorySecurity = new DirectorySecurity(di.FullName, AccessControlSections.Access);
//if (!directorySecurity.AreAccessRulesProtected)
//{
lstDirect.Add(di.FullName);
GetDirectorys(di.FullName, ref lstDirect);
//}
}
catch
{
continue;
}
}
} /// <summary>
/// MD5加密
/// </summary>
/// <param name="input">需要加密的字符串</param>
/// <param name="encode">字符的编码</param>
/// <returns></returns>
public static string MD5Encrypt(string input, Encoding encode)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] t = md5.ComputeHash(encode.GetBytes(input));
StringBuilder sb = new StringBuilder();
for (int i = ; i < t.Length; i++)
sb.Append(t[i].ToString("x").PadLeft(, ''));
return sb.ToString();
} /// <summary>
/// 传入URL返回网页的html代码
/// </summary>
/// <param name="Url">URL</param>
/// <returns></returns>
public string GetUrltoHtml(string Url)
{ StringBuilder content = new StringBuilder(); try
{ //这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。 //ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); // 与指定URL创建HTTP请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); //创建证书文件 //X509Certificate objx509 = new X509Certificate(System.Net.Mime.MediaTypeNames.Application.StartupPath + "\\123.cer"); //添加到请求里 //request.ClientCertificates.Add(objx509); // 获取对应HTTP请求的响应 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // 获取响应流 Stream responseStream = response.GetResponseStream(); // 对接响应流(以"GBK"字符集) StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); // 开始读取数据 Char[] sReaderBuffer = new Char[]; int count = sReader.Read(sReaderBuffer, , ); while (count > )
{ String tempStr = new String(sReaderBuffer, , count); content.Append(tempStr); count = sReader.Read(sReaderBuffer, , ); } // 读取结束
sReader.Close();
}
catch (Exception)
{ content = new StringBuilder("Runtime Error"); } return content.ToString(); } }
 /*
{"from":"en","to":"zh","trans_result":[{"src":"using System;","dst":"\u4f7f\u7528\u7cfb\u7edf\uff1b"}]}
*/
[DataContract]
//翻译语言结果
public class LanguageInfo
{
[DataMember]
public string from { get; set; }
[DataMember]
public string to { get; set; }
[DataMember]
public ResultInfo[] trans_result { get; set; } public bool IsNull
{
get {
return (string.IsNullOrEmpty(from) && string.IsNullOrEmpty(to) && trans_result == null);
} }
} [DataContract]
public class ResultInfo
{
[DataMember]
//原文
public string src{get;set;}
[DataMember]
//译文
public string dst{get;set;}
} /*
{"error_code":"54001","error_msg":"Invalid Sign"}
*/
[DataContract]
//错误信息
public class ErrorInfo
{
[DataMember]
public string error_code { get; set; }
[DataMember]
public string error_msg { get; set; } public string CodeToMsg()
{
switch (error_code)
{
case "":return "请求超时 重试";
case "":return "系统错误 重试";
case "":return "未授权用户 检查您的appid 是否正确";
case "":return "必填参数为空 检查是否少传参数";
case "":return "客户端IP非法 检查个人资料里填写的IP地址是否正确";
case "":return "签名错误 请检查您的签名生成方法";
case "":return "访问频率受限 请降低您的调用频率";
case "":return "译文语言方向不支持 检查译文语言是否在语言列表里";
case "":return "账户余额不足 请前往管理控制平台为账户充值";
default: return "完了,都不知道什么错了!";
}
}
}
 public static class StringHandle
{
private static Regex regIsNote = new Regex(@"(///|//)");
private static Regex regGetNote = new Regex(@"(///\s+)|((<|</)summary>)|((<|</)param>)|((<|</)returns>)"); /// <summary>
/// 是否注释正文
/// </summary>
/// <param name="str">字符串</param>
/// <returns></returns>
public static bool isNote(string str)
{
return regIsNote.IsMatch(str);
} /// <summary>
/// 获取注释值
/// </summary>
/// <param name="str">注释</param>
/// <returns></returns>
public static string GetNoteValue(string str)
{
return regGetNote.Replace(str, "");
}
}

百度翻译cs文件英文注释的更多相关文章

  1. python利用爬虫获取百度翻译,爱词霸翻译结果,制作翻译小工具

    先看效果展示(仅作学习使用,非商业) 效果图是采用的 爱词霸 翻译,百度翻译 也实现了,只不过被注释了. 学计算机很多时候碰到生词,每次打开手机/浏览器翻译总觉得很麻烦,就想着自己写一个软件,自己去实 ...

  2. 基于Winform的.cs文件命名空间排序及注释批量处理工具

    公司里每个程序员在命名空间的排序和注释上都有很多的不同. 杂乱的命名空间: using System; using System.Collections.Generic; using Autodesk ...

  3. 【Winform】.cs文件命名空间排序及注释批量处理工具

    公司里每个程序员在命名空间的排序和注释上都有很多的不同. 杂乱的命名空间: using System; using System.Collections.Generic; using Autodesk ...

  4. CS文件类头注释

    1.修改unity生成CS文件的模板(模板位置:Unity\Editor\Data\Resources\ScriptTemplates 文件名:81-C# Script-NewBehaviourScr ...

  5. 公众号对接百度翻译API

    有时候在公众号中需要对接一些翻译的功能或者其他.最常见的翻译API就是中英互译,程序员用的最多的也就是中译英. 1.到百度翻译官网申请账号 http://api.fanyi.baidu.com/api ...

  6. Android开发学习之路-机器学习库(图像识别)、百度翻译

    对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...

  7. 基于百度翻译API开发属于自己的翻译工具

    你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...

  8. Asp.NET调用百度翻译

    Asp.NET调用百度翻译,图示: HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFil ...

  9. Python爬虫教程-05-python爬虫实现百度翻译

    使用python爬虫实现百度翻译功能 python爬虫实现百度翻译: python解释器[模拟浏览器],发送[post请求],传入待[翻译的内容]作为参数,获取[百度翻译的结果] 通过开发者工具,获取 ...

随机推荐

  1. Make ISO安装ArchLinux加Cinnamon

    Arch安装一直对大家对普通用户来說一直很难.国外大神为Arch安装进行了优化提供了更方便的安装方式 官网:http://www.evolutionlinux.com/ 以下爲个人理解,供大家参考. ...

  2. ansible api2.0 多进程执行不同的playbook

    自动化运维工具:ansible 多进程调用ansible api的应用场景:   应用系统检查 一个应用系统可能具有20—50台服务器的集群,初步的系统层面检查可以用一个统一的playbook来检查, ...

  3. 链式二叉树的实现(Java)

    定义树节点: package 链式二叉树; public class TreeNode { private Object data; private TreeNode left; private Tr ...

  4. 安卓monkey自动化测试,软硬回车

    1.Monkey程序介绍 在android手机上做自动化测试,monkey比cts,Android UnitTest 好用多了,他其实是继承与adb shell中的一段的shell指令. monkey ...

  5. 算法图解学习笔记01:二分查找&大O表示法

    二分查找 二分查找又称折半查找,其输入的必须是有序的元素列表.二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止:如果x<a[ ...

  6. mac下抓包工具charles

    图片没带过来,想看截图的可以直接点击有道云笔记的链接: http://note.youdao.com/share/?id=f5c7369a0c1e1e37cdcd08a04d33be7e 1.下载 h ...

  7. 【文档】二、Binlog结构和内容概述

    binlog是一系列文件,这些文件包含了Mysql服务实例中数据的变化. binlog包含一系列二进制日志文件,还包含一个索引文件. 每个日志文件包含了一个4字节的魔法数,后面跟着描述数据变化的事件内 ...

  8. jenkins构建GitHub项目

    一.Jenkins 配置 Git 首先,登录 Jenkins ,在首页找到 “系统管理 -> Global Tool Configuration -> Git ” Path to Git ...

  9. 老司机谈APK瘦身套路-图片资源篇

    APK作为Android系统安装包的文件格式,一直备受广大用户的关注,APK越是臃肿肥大,在下载安装过程中,它们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率会越低(因为竞品中 ...

  10. FX4300超频4.7GHz

    先贴出本人计算机配置: (本人cpu为fx4300,默认频率为3.8GHz) 谨记:超频有风险,很可能烧坏主板.cpu.内存等硬件,特别是增加主板电压时一定一次增加0.025V,不要一次增加太多,并且 ...