手动合并gitignore

This commit is contained in:
mengwei
2023-11-02 17:01:09 +08:00
parent 61cb121a06
commit e7ec15683b
6 changed files with 294 additions and 1 deletions

123
Program.cs Normal file
View File

@@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
// 通过正则提取所有代码中的中文字符串
// 将中文字符串分行写入到文件
// 通过有道翻译进行翻译https://fanyi.youdao.com/index.html#/可每次复制不多于5000的内容进行翻译
// 翻译内容保存在translation.xx.txt中xx即语言选项
// 通过resxhelper将中文及对应翻译写入到对应资源文件
namespace i18n_formatter
{
class Program
{
static HashSet<string> needI18n = new HashSet<string>();
static void Main()
{
ResxHelper.GenerateResxFileForTranslationsInCurrentDirectory();
}
// call this first
static void ExtractChineseStrings()
{
string directory = "samples";
// 遍历给定目录提取代码文件中所有中文字符串并保存到HashSet中
WalkDirectory(new DirectoryInfo(directory));
// 将HashSet写入到json文件
//string json = CreateJsonFromHashSet(needI18n);
//File.WriteAllText("i18n.json", json);
string result = CreateRawTextFromHashSet(needI18n);
File.WriteAllText("raw.text", result);
// 之后要手动进行翻译了
// 读取翻译结果,将翻译结果写入到对应的资源文件中
}
static string CreateJsonFromHashSet(HashSet<string> set)
{
string json = "[";
foreach (var item in set)
{
json += "\"" + item + "\",";
}
json = json.TrimEnd(',') + "]";
return json;
}
static string CreateRawTextFromHashSet(HashSet<string> set)
{
string result = "";
string splitter = "";
foreach (var item in set)
{
result += splitter + item;
splitter = "\r\n";
}
return result;
}
static HashSet<string> ReadHardedcodedStrings(string fileContent, string filePath)
{
HashSet<string> result = new HashSet<string>();
// Define a regular expression to match string literals
Regex stringLiteralRegex = new Regex("\"(.*?)\"", RegexOptions.Compiled);
// Find all matches of string literals in the file content
MatchCollection matches = stringLiteralRegex.Matches(fileContent);
Console.WriteLine(filePath);
// Display all the matched string literals
foreach (Match match in matches)
{
if (!CheckChineses(match.Groups[1].Value)) continue;
needI18n.Add(match.Groups[1].Value);
result.Add(match.Groups[1].Value);
//Console.WriteLine(match.Groups[1].Value);
}
return result;
}
static bool CheckChineses(string sample)
{
string pattern = @"[\u4E00-\u9FFF]"; // The pattern to match Chinese characters
// Create a Regex object with the pattern and check if there is a match
Regex regex = new Regex(pattern);
Match match = regex.Match(sample);
return match.Success;
}
static void WalkDirectory(DirectoryInfo directory)
{
// Process files in the current directory
foreach (FileInfo file in directory.GetFiles("*.cs"))
{
if (file.Name.ToUpper().Contains(".DESIGNER."))
continue;
string fileContent = File.ReadAllText(file.FullName);
HashSet<string> hardcodedChineseStrings = ReadHardedcodedStrings(fileContent, file.FullName);
foreach(string hcString in hardcodedChineseStrings)
{
Console.WriteLine("replacing" + hcString);
Console.WriteLine(fileContent.Contains(hcString));
fileContent = fileContent.Replace("\"" + hcString + "\"", "LocalizationManager.GetString(" + "\"" + hcString + "\"" + ")");
}
File.WriteAllText("D:/DevWorkspace/i18n_formatter/bin/Debug/output/"+ file.Name, fileContent);
}
// Recursively process subdirectories
foreach (DirectoryInfo subdirectory in directory.GetDirectories())
{
WalkDirectory(subdirectory);
}
}
}
}