C# || 批量翻译工具 || 百度翻译api || 读取.cs文件内容 || 正则表达式筛选文件
背景:
我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 2.3 w 多条!!!简直让人欲哭无泪...
如果使用人工改的话,首先不说正确率了。光是效率都是难难难。所以发挥了自己的才能写了一个自动化工具。
思路:
- 首选读取项目文件夹下的所有文件路径
- 筛选路径文件后缀.只对.cs或自定义的文件操作读取
- 使用正则表达式进行查询并处理为数组
- 调用免费的百度翻译api进行任意类型的翻译
- 使用replace进行替换字符串,并保存
准备工作:
1,百度智能云领取免费的api接口
2,创建应用
3,调试api
代码实现:
以上准备工作就绪后,代码就比较容易实现了,完整控制台代码如下:
Program.cs
using Batch_translation; using System.Text.RegularExpressions; Console.WriteLine("请按下任意键进行批量翻译!"); Console.ReadLine(); string strFolderPath = "you FolderPath";//你的项目文件夹路径 string[] files = Directory.GetFiles(strFolderPath, "*", SearchOption.AllDirectories); // 获取文件夹下所有文件路径,包括子文件夹 string[] subFolders = Directory.GetDirectories(strFolderPath, "*", SearchOption.AllDirectories); // 获取所有子文件夹路径 foreach (var filePath in files) { //业务逻辑 if (filePath.EndsWith(".cs")) { BatchTran(filePath);//获取文件内容并进行转换操作 } } foreach (var folder in subFolders) { foreach (var filePath in Directory.GetFiles(folder)) { //业务逻辑 if (filePath.EndsWith(".cs")) { BatchTran(filePath);//获取文件内容并进行转换操作 } } } Console.WriteLine("转化完成"); void BatchTran(string filePath) { /* 核心逻辑: 首选读取项目文件夹下的所有文件路径 筛选路径文件后缀.只对.cs或自定义的文件操作读取 使用正则表达式进行查询并处理为数组 调用免费的百度翻译api进行任意类型的翻译 使用replace进行替换字符串,并保存 */ BaiDuApi baiDuApi = new BaiDuApi("you apikey", "you secretKey");//百度api 初始化 string content = File.ReadAllText(filePath);//读取文本 string pattern = @"("".*[\u4E00-\u9FA5]+.*[\u4E00-\u9FA5]+.*"")";//定义所需要的正则表达式(ps:此正则表示查询英文双引号下的中文) Regex myRegex = new Regex(pattern); MatchCollection collection = myRegex.Matches(content); foreach (Match match in collection) { var oldStr = ""; oldStr = match.Value;//.Substring(0, match.Value.Length - 1) var newStr = baiDuApi.Translate(oldStr); if (!string.IsNullOrEmpty(newStr)) content = content.Replace(oldStr, newStr); } if (collection.Count > 0) // 将修改后的内容写入到文件中 File.WriteAllText(filePath, content); }
BaiDuApi.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | using System; using System.IO; using Newtonsoft.Json; using RestSharp; namespace Batch_translation { public class BaiDuApi { private readonly string apiKey; private readonly string secretKey; public BaiDuApi( string apiKey, string secretKey) { this .apiKey = apiKey; this .secretKey = secretKey; } public string Translate( string sourceText) { var token = GetAccessToken(apiKey, secretKey); if (token == "" ) return "" ; var client = new RestClient($ "https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token={token}" ); var request = new RestRequest( "" , Method.Post); request.AddHeader( "Content-Type" , "application/json" ); request.AddHeader( "Accept" , "application/json" ); // 定义一个匿名类型对象 var data = new { from = "zh" , to = "en" , q = sourceText }; // 将对象序列化成 JSON 字符串 string body = JsonConvert.SerializeObject(data); request.AddParameter( "application/json" , body, ParameterType.RequestBody); var response = client.Execute(request); if (response.Content == null ) { return "" ; } var dataResult = JsonConvert.DeserializeObject<BaiDuMode>(response.Content); if (dataResult.result != null ) { if (dataResult.result.trans_result != null && dataResult.result.trans_result.Count > 0) { return dataResult.result.trans_result[0].dst; } } return sourceText; } /** * 使用 AK,SK 生成鉴权签名(Access Token) * @return 鉴权签名信息(Access Token) */ static string GetAccessToken( string API_KEY, string SECRET_KEY) { var client = new RestClient($ "https://aip.baidubce.com/oauth/2.0/token" ); var request = new RestRequest( "" , Method.Post); request.AddParameter( "grant_type" , "client_credentials" ); request.AddParameter( "client_id" , API_KEY); request.AddParameter( "client_secret" , SECRET_KEY); var response = client.Execute(request); Console.WriteLine(response.Content); if (response.Content == null ) return "" ; var result = JsonConvert.DeserializeObject<dynamic>(response.Content); return result.access_token.ToString(); } } } |
结语:
在每次编码中成长,提升自己的思想。这只是一个很简陋的代码工具,如有好的建议也可以评论区讨论。感谢观看。
从前慢,车马慢。
一生只爱一个人。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?