背景:

我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 2.3 w 多条!!!简直让人欲哭无泪...

如果使用人工改的话,首先不说正确率了。光是效率都是难难难。所以发挥了自己的才能写了一个自动化工具。

思路:

  1. 首选读取项目文件夹下的所有文件路径
  2. 筛选路径文件后缀.只对.cs或自定义的文件操作读取
  3. 使用正则表达式进行查询并处理为数组
  4. 调用免费的百度翻译api进行任意类型的翻译
  5. 使用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();
} }
}

结语:

在每次编码中成长,提升自己的思想。这只是一个很简陋的代码工具,如有好的建议也可以评论区讨论。感谢观看。

C# || 批量翻译工具 || 百度翻译api || 读取.cs文件内容 || 正则表达式筛选文件的更多相关文章

  1. 用C#Winform写个简单的批量清空文件内容和删除文件的小工具

    用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...

  2. 【HDFS API编程】查看HDFS文件内容、创建文件并写入内容、更改文件名

    首先,重点重复重复再重复: /** * 使用Java API操作HDFS文件系统 * 关键点: * 1)创建 Configuration * 2)获取 FileSystem * 3)...剩下的就是 ...

  3. java文件相关(文件追加内容、文件内容清空、文件内容读取)

    https://blog.csdn.net/xnz0616/article/details/39137177 1.文件内容追加 // 在已有的文件后面追加信息 public static void a ...

  4. Android引用百度定位API第三方组件后导致其它.so文件无法正常加载的问题

    查看当前调试设备CPU架构的方法: adb.exe shell getprop ro.product.cpu.abi  (一般返回值为:armeabi-v7a) adb.exe shell getpr ...

  5. Spark:java api读取hdfs目录下多个文件

    需求: 由于一个大文件,在spark中加载性能比较差.于是把一个大文件拆分为多个小文件后上传到hdfs,然而在spark2.2下如何加载某个目录下多个文件呢? public class SparkJo ...

  6. Linux批量清理多个文件内容而不删除文件

    清理单个文件,可以这样:echo > myLog.log 但是,如果我要清理一堆文件,比如在/logs目录下面的所有以.log结尾的文件的内容,而不删除文件,该如何操作呢? 我一开始的语句是这样 ...

  7. python利用爬虫获取百度翻译,爱词霸翻译结果,制作翻译小工具

    先看效果展示(仅作学习使用,非商业) 效果图是采用的 爱词霸 翻译,百度翻译 也实现了,只不过被注释了. 学计算机很多时候碰到生词,每次打开手机/浏览器翻译总觉得很麻烦,就想着自己写一个软件,自己去实 ...

  8. 用Python做一个简单的翻译工具

    编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过 ...

  9. C# 10分钟完成百度翻译(机器翻译)——入门篇

    我们之前基于百度ai开发平台实现了人脸识别 [1].文字识别 [2].语音识别 [3] 与合成的入门和进阶,今天我们来实现百度翻译的实现. 随着"一带一路"政策的开展,各种项目迎接 ...

  10. 【百度地图API】百度API卫星图使用方法和卫星图对比工具

    原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度 ...

随机推荐

  1. 第三課:信道学习Source Connect Reader & Destinations File Writer

    第一步: 切换到主信道(Channels)界面,右键点击新建信道(New Channel) 第二步 : 下面是设置一些信道概要(Summary)信息 其中summary(概要) 界面主要包含 信道名称 ...

  2. 力扣58(java)-最后一个单词的长度(简单)

    题目: 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开.返回字符串中 最后一个 单词的长度. 单词 是指仅由字母组成.不包含任何空格字符的最大子字符串. 示例 1: 输入:s = &q ...

  3. Serverless 架构模式及演进

    ​简介: Serverless 架构从使用技术上有计算,数据存储,消息通信,我们可从运维性,安全性,可靠性,可扩展性,成本几个角度来衡量架构的优劣.本文会介绍一些常见的业务场景,探讨如何使用 Serv ...

  4. [FAQ] Truffle Deployer 合约传参问题: Invalid number of parameters for "undefined". Got 0 expected 1!

    在使用 `truffle migrate` 时,如果合约的构造函数需要传参,而部署脚本里没有传的时候,就会报这个错. 未传参时: const Migrations = artifacts.requir ...

  5. [Contract] 一次搞懂 Solidity 的 using xx for xx

    using A for *;    # 把 A 的函数附给任意类型使用 using A for B; # 意思是把 A 中的方法附给 B 使用 使用上面的方式,那么在我们的合约中定义了 B 类型的变量 ...

  6. [FAQ] Solidity 合约销毁 ?

    仅创建者可以销毁合约的示例: address public owner; // When deploy contract constructor() public { owner = msg.send ...

  7. FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass

    ​libass是一个适用于ASS和SSA格式(Advanced Substation Alpha/Substation Alpha)的字幕渲染器,支持的字幕类型包括srt.ass等,凡是涉及到给视频画 ...

  8. 机器学习策略篇:详解开发集和测试集的大小(Size of dev and test sets)

    在深度学习时代,设立开发集和测试集的方针也在变化. 可能听说过一条经验法则,在机器学习中,把取得的全部数据用70/30比例分成训练集和测试集.或者如果必须设立训练集.开发集和测试集,会这么分60%训练 ...

  9. docker-compose 安装 etcd

    目录 docker-compose.yaml docker-compose.yaml version: "3" services: etcd: hostname: etcd ima ...

  10. leaflet常用插件汇总介绍

    1.Leaflet Ant Path(线条流动效果) 在交通项目.管网应用的项目中,常常需要标注出道路的走向.河流的流向或者管线的流向等等,Leaflet Ant Path能够很好的解决这类问题: g ...