C#实现文件筛选读取并翻译的自动化工具

作者:CoolDog; 时间:2021-11-07 18:49:46 

背景

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

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

思路

  • 首选读取项目文件夹下的所有文件路径

  • 筛选路径文件后缀.只对.cs或自定义的文件操作读取

  • 使用正则表达式进行查询并处理为数组

  • 调用免费的百度翻译api进行任意类型的翻译

  • 使用replace进行替换字符串,并保存

准备工作

1,百度智能云领取免费的api接口

C#实现文件筛选读取并翻译的自动化工具

2,创建应用

C#实现文件筛选读取并翻译的自动化工具

3,调试api

C#实现文件筛选读取并翻译的自动化工具

代码实现

以上准备工作就绪后,代码就比较容易实现了,完整控制台代码如下:

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/p/17217831.html

标签:C#,文件,筛选,读取,翻译
0
投稿

猜你喜欢

  • C#延时函数的使用说明

    2023-10-11 19:58:34
  • Eclipse添加xml文件提示及Hibernate配置学习

    2023-08-17 05:01:47
  • JAVA 格式化日期、时间的方法

    2023-10-17 07:53:22
  • Flutter如何轻松实现动态更新ListView浅析

    2023-05-23 09:32:37
  • java与js代码互调示例代码

    2022-11-09 20:19:05
  • C++之try catch 异常处理入门实例

    2021-09-13 04:42:07
  • Android编程之Sdcard相关代码集锦

    2022-08-15 09:55:24
  • Android下拉刷新ListView——RTPullListView(demo)

    2022-10-11 12:03:10
  • 关于Mybatis的@param注解及多个传参

    2021-09-10 21:17:21
  • java 中 System.out.println()和System.out.write()的区别

    2021-09-17 04:30:52
  • 相对路径和绝对路径的写法总结

    2022-06-17 07:38:47
  • C#实现Xml序列化与反序列化的方法

    2022-07-26 22:16:23
  • Spring学习笔记之bean的基础知识

    2021-09-08 10:09:27
  • datatable生成excel和excel插入图片示例详解

    2022-06-18 21:48:38
  • 如何在Golang中运行JavaScript

    2022-11-03 14:50:48
  • 详解Java面向对象中的继承

    2023-10-06 13:26:14
  • 详解Java中的Lambda表达式

    2023-06-05 01:37:16
  • SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码

    2021-06-01 03:25:14
  • Java实现AWT四大事件的详细过程

    2023-11-28 18:39:52
  • 详解三种java实现多线程的方式

    2021-11-02 10:09:30
  • asp之家 软件编程 m.aspxhome.com