背景:

我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 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. 阿里云全站加速DCDN重磅发布!打造新一代加速引擎

    简介: 新一代的加速引擎DCDN,安全.高效.可计算 在数字化转型变革逐步深入的当下,安全高效成为企业上云.全球化部署的关键需求. 随着应用场景复杂度不断提升.业务需求差异化发展,为了给企业提供更完善 ...

  2. 【SIGIR 2022】面向长代码序列的Transformer模型优化方法,提升长代码场景性能

    简介: 论文主导通过引入稀疏自注意力的方式来提高Transformer模型处理长序列的效率和性能 阿里云机器学习平台PAI与华东师范大学高明教授团队合作在SIGIR2022上发表了结构感知的稀疏注意力 ...

  3. 阿里云GanosBase重磅升级,发布首个云孪生时空数据库

    ​简介: GanosBase是李飞飞带领的达摩院数据库与存储实验室联合阿里云共同研发的新一代位置智能引擎:本次重磅升级为V4.0版本,推出首个云孪生时空数据库. ​ 作者 | 谢炯 来源 | 阿里技术 ...

  4. 2019-10-31-ASP.NET-Core-连接-GitLab-与-MatterMost-打造-devops-工具

    title author date CreateTime categories ASP.NET Core 连接 GitLab 与 MatterMost 打造 devops 工具 lindexi 201 ...

  5. STM32F10X 部分引脚不能使用的问题

    一.概述 说来惭愧,我到现在都没有完整的学习过STM32.接触 STM32 还是突然的一个项目,需要用到 STM32,紧急需求,只能边学边完成.不过好在 ST 的资料还是比较多的,相对也比较简单,基本 ...

  6. Oracle、达梦:☆获取数据库对象、获取对象的DDL定义语句(达梦)

    一.获取数据库对象(Oracle.达梦) 以下方式在达梦DM数据库中都能跑通,Oracle未测试所有的方式. 1.获取所有对象--所有模式下的 数据库所有对象表:包括表.视图.物化视图.函数.存储过程 ...

  7. Plumed分子模拟后分析

    技术背景 在前面的几篇博客中,我们分别介绍过Histogram算法的使用.Plumed安装与简单使用.Plumed一般就是两种用法:要么在运行分子动力学模拟的过程中实时的对接,要么就是把分子模拟的相关 ...

  8. docker-compose 配置LNMP环境

    仓库地址: https://gitee.com/haima1004/docker-lnmp 参考文档: 视频地址: https://www.bilibili.com/video/BV1S54y1B7K ...

  9. rubymineIDE配置启动

    debug启动 debug启动 安装插件 报错: 网络问题 下载 ruby-debug-ide-2.3.1 解压到 /home/haima/.rvm/gems/ruby-2.3.8/gems/

  10. postgresql 创建索引

    --查询索引 select * from pg_indexes where tablename='tab1'; --创建索引(查询用到哪几列,就对哪几个字段创建索引) CREATE INDEX ind ...