zoukankan      html  css  js  c++  java
  • 百度翻译cs文件英文注释

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

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

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

    直接贴代码:

     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":"u4f7fu7528u7cfbu7edfuff1b"}]}
                        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[0].src);    
                            Console.WriteLine("译文:"+info.trans_result[0].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(1000000, 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(32);
                for (int i = 0; i < t.Length; i++)
                    sb.Append(t[i].ToString("x").PadLeft(2, '0'));
                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[256];
    
                    int count = sReader.Read(sReaderBuffer, 0, 256);
    
                    while (count > 0)
                    {
    
                        String tempStr = new String(sReaderBuffer, 0, count);
    
                        content.Append(tempStr);
    
                        count = sReader.Read(sReaderBuffer, 0, 256);
    
                    }
    
                    // 读取结束  
                    sReader.Close();
                }
                catch (Exception)
                {
    
                    content = new StringBuilder("Runtime Error");
    
                }
    
                return content.ToString();
    
            } 
    
    
        }
     /*
         {"from":"en","to":"zh","trans_result":[{"src":"using System;","dst":"u4f7fu7528u7cfbu7edfuff1b"}]}
         */
        [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 "52001":return "请求超时    重试";
                    case "52002":return "系统错误    重试"; 
                    case "52003":return "未授权用户      检查您的appid 是否正确"; 
                    case "54000":return "必填参数为空    检查是否少传参数"; 
                    case "58000":return "客户端IP非法    检查个人资料里填写的IP地址是否正确"; 
                    case "54001":return "签名错误    请检查您的签名生成方法"; 
                    case "54003":return "访问频率受限    请降低您的调用频率"; 
                    case "58001":return "译文语言方向不支持      检查译文语言是否在语言列表里"; 
                    case "54004":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, "");
            }
        }
  • 相关阅读:
    ansible自动化运维04
    ansible自动化运维03
    ansible自动化运维02
    ansible自动化运维01
    mysql innodb存储引擎和一些参数优化
    Mysql 数据库常用配置命令
    zabbix server3.4 使用mailx配置邮件报警
    32_redis cluster的核心原理分析:gossip通信、jedis smart定位、主备切换
    31_redis cluster的自动化slave迁移实现更强的高可用架构的部署方案
    30_redis cluster通过master水平扩容来支撑更高的读写吞吐+海量数据
  • 原文地址:https://www.cnblogs.com/mycing/p/5007902.html
Copyright © 2011-2022 走看看