|
背景:
我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 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- 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();
- }
- }
- }
复制代码 结语:
在每次编码中成长,提升自己的思想。这只是一个很简陋的代码工具,如有好的建议也可以评论区讨论。感谢观看。
来源:https://www.cnblogs.com/BFMC/archive/2023/03/15/17217831.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|