C#實(shí)現(xiàn)文件篩選讀取并翻譯的自動(dòng)化工具
背景
我們項(xiàng)目一開始的所有提示都是中文,后來要做國際化。發(fā)現(xiàn)項(xiàng)目中的帶雙引號的中文居然有 2.3 w 多條?。?!簡直讓人欲哭無淚...
如果使用人工改的話,首先不說正確率了。光是效率都是難難難。所以發(fā)揮了自己的才能寫了一個(gè)自動(dòng)化工具。
思路
- 首選讀取項(xiàng)目文件夾下的所有文件路徑
- 篩選路徑文件后綴.只對.cs或自定義的文件操作讀取
- 使用正則表達(dá)式進(jìn)行查詢并處理為數(shù)組
- 調(diào)用免費(fèi)的百度翻譯api進(jìn)行任意類型的翻譯
- 使用replace進(jìn)行替換字符串,并保存
準(zhǔn)備工作
1,百度智能云領(lǐng)取免費(fèi)的api接口

2,創(chuàng)建應(yīng)用

3,調(diào)試api

代碼實(shí)現(xiàn)
以上準(zhǔn)備工作就緒后,代碼就比較容易實(shí)現(xiàn)了,完整控制臺代碼如下:
Program.cs
using Batch_translation;
using System.Text.RegularExpressions;
Console.WriteLine("請按下任意鍵進(jìn)行批量翻譯!");
Console.ReadLine();
string strFolderPath = "you FolderPath";//你的項(xiàng)目文件夾路徑
string[] files = Directory.GetFiles(strFolderPath, "*", SearchOption.AllDirectories); // 獲取文件夾下所有文件路徑,包括子文件夾
string[] subFolders = Directory.GetDirectories(strFolderPath, "*", SearchOption.AllDirectories); // 獲取所有子文件夾路徑
foreach (var filePath in files)
{
//業(yè)務(wù)邏輯
if (filePath.EndsWith(".cs"))
{
BatchTran(filePath);//獲取文件內(nèi)容并進(jìn)行轉(zhuǎn)換操作
}
}
foreach (var folder in subFolders)
{
foreach (var filePath in Directory.GetFiles(folder))
{
//業(yè)務(wù)邏輯
if (filePath.EndsWith(".cs"))
{
BatchTran(filePath);//獲取文件內(nèi)容并進(jìn)行轉(zhuǎn)換操作
}
}
}
Console.WriteLine("轉(zhuǎn)化完成");
void BatchTran(string filePath)
{
/* 核心邏輯:
首選讀取項(xiàng)目文件夾下的所有文件路徑
篩選路徑文件后綴.只對.cs或自定義的文件操作讀取
使用正則表達(dá)式進(jìn)行查詢并處理為數(shù)組
調(diào)用免費(fèi)的百度翻譯api進(jìn)行任意類型的翻譯
使用replace進(jìn)行替換字符串,并保存
*/
BaiDuApi baiDuApi = new BaiDuApi("you apikey", "you secretKey");//百度api 初始化
string content = File.ReadAllText(filePath);//讀取文本
string pattern = @"("".*[\u4E00-\u9FA5]+.*[\u4E00-\u9FA5]+.*"")";//定義所需要的正則表達(dá)式(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)
// 將修改后的內(nèi)容寫入到文件中
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");
// 定義一個(gè)匿名類型對象
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 生成鑒權(quán)簽名(Access Token)
* @return 鑒權(quán)簽名信息(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();
}
}
}到此這篇關(guān)于C#實(shí)現(xiàn)文件篩選讀取并翻譯的自動(dòng)化工具的文章就介紹到這了,更多相關(guān)C#文件篩選讀取翻譯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# 6.0 內(nèi)插字符串(Interpolated Strings )的使用方法
這篇文章主要為大家詳細(xì)介紹了C# 6.0 內(nèi)插字符串的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
WPF/Silverlight實(shí)現(xiàn)圖片局部放大的方法分析
這篇文章主要介紹了WPF/Silverlight實(shí)現(xiàn)圖片局部放大的方法,結(jié)合實(shí)例形式分析了WPF/Silverlight針對圖片屬性操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03

