百度翻译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":"\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文件英文注释的更多相关文章
- python利用爬虫获取百度翻译,爱词霸翻译结果,制作翻译小工具
先看效果展示(仅作学习使用,非商业) 效果图是采用的 爱词霸 翻译,百度翻译 也实现了,只不过被注释了. 学计算机很多时候碰到生词,每次打开手机/浏览器翻译总觉得很麻烦,就想着自己写一个软件,自己去实 ...
- 基于Winform的.cs文件命名空间排序及注释批量处理工具
公司里每个程序员在命名空间的排序和注释上都有很多的不同. 杂乱的命名空间: using System; using System.Collections.Generic; using Autodesk ...
- 【Winform】.cs文件命名空间排序及注释批量处理工具
公司里每个程序员在命名空间的排序和注释上都有很多的不同. 杂乱的命名空间: using System; using System.Collections.Generic; using Autodesk ...
- CS文件类头注释
1.修改unity生成CS文件的模板(模板位置:Unity\Editor\Data\Resources\ScriptTemplates 文件名:81-C# Script-NewBehaviourScr ...
- 公众号对接百度翻译API
有时候在公众号中需要对接一些翻译的功能或者其他.最常见的翻译API就是中英互译,程序员用的最多的也就是中译英. 1.到百度翻译官网申请账号 http://api.fanyi.baidu.com/api ...
- Android开发学习之路-机器学习库(图像识别)、百度翻译
对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...
- 基于百度翻译API开发属于自己的翻译工具
你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...
- Asp.NET调用百度翻译
Asp.NET调用百度翻译,图示: HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFil ...
- Python爬虫教程-05-python爬虫实现百度翻译
使用python爬虫实现百度翻译功能 python爬虫实现百度翻译: python解释器[模拟浏览器],发送[post请求],传入待[翻译的内容]作为参数,获取[百度翻译的结果] 通过开发者工具,获取 ...
随机推荐
- php防止网站被刷新
在实际应用中,总会遇到某些页面被恶意用户刷新.当你的系统在某些模块没有使用缓存的时候,频繁的刷新会导致数据库吃紧.下面附上一段代码,防止频繁的刷新造成的死机情况. 主要是从 session方面进行限制 ...
- spring-boot-maven-plugin多模块install问题解决办法
一.问题描述: 项目分多个模块,open-eureka注册中心.open-provider服务提供者.open-common公共部分,provider依赖common.父pom使用spring-boo ...
- Dota2APP--第一天
从今天开始,下定决心自己独立开发一个有关于Dota2的APP,因为非常喜欢这个游戏恰好自己又是做iOS移动开发的所以萌生了这个想法.希望可以坚持下去,有喜欢dota2的朋友也可以提点建议. 一.项目的 ...
- SHELL脚本扩展
使用SED命令 sed称为流编辑器,命令格式如下: sed option script file -e script #指定多个命令 -f script_file #指定命令文件 -n #不需要为每个 ...
- [BZOJ 1056][HAOI2008]排名系统
传送门 \(\color{green}{solution}\) \(fhq \_treap\)模板题. 对于 \(+\) 操作,如果当前人不存在,那么直接加入;如果存在,那么先将他删除,再加入.复杂度 ...
- [LibreOJ #2983]【WC2019】数树【计数】【DP】【多项式】
Description 此题含有三个子问题 问题1: 给出n个点的两棵树,记m为只保留同时在两棵树中的边时连通块的个数,求\(y^m\) 问题2: 给出n个点的一棵树,另外一棵树任意生成,求所有方案总 ...
- 除法保留小数bit位 + 四舍五入
/*num1/num2 保留bit 位小数 , 四舍五入*/ #include<bits/stdc++.h> using namespace std; ]; int main() { in ...
- (转)Python 运算符
原文:https://blog.csdn.net/liang19890820/article/details/69690954 简述 在 Python 中,运算符是执行算术或逻辑运算的特殊符号,操作的 ...
- 高性能的数据压缩库libzling-20140324
libzling(https://github.com/richox/libzling,求观看[watch],求星[star],求叉[fork])是一款高性能的数据压缩库,在压缩时间和压缩率上都超过了 ...
- javac之Method Invocation Expressions
15.12.1. Compile-Time Step 1: Determine Class or Interface to Search 15.12.2. Compile-Time Step 2: D ...