归档
This commit is contained in:
commit
50800699de
24
AutoRranslateTextToCsv.csproj
Normal file
24
AutoRranslateTextToCsv.csproj
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="System.Text.Encoding.CodePages" Version="7.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="SrcData\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="说明.txt">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
6
AutoRranslateTextToCsv.csproj.user
Normal file
6
AutoRranslateTextToCsv.csproj.user
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<_LastSelectedProfileId>F:\Sin365\AutoRranslateTextToCsv\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
25
AutoRranslateTextToCsv.sln
Normal file
25
AutoRranslateTextToCsv.sln
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.7.34031.279
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutoRranslateTextToCsv", "AutoRranslateTextToCsv.csproj", "{6F081B40-B803-4741-8A05-CB49F9095495}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{6F081B40-B803-4741-8A05-CB49F9095495}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{6F081B40-B803-4741-8A05-CB49F9095495}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{6F081B40-B803-4741-8A05-CB49F9095495}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{6F081B40-B803-4741-8A05-CB49F9095495}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {E41C24E3-4BE7-4C4F-934E-6DE391955CF7}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
61
FileHelper.cs
Normal file
61
FileHelper.cs
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace AutoRranslateTextToCsv
|
||||||
|
{
|
||||||
|
public class FileHelper
|
||||||
|
{
|
||||||
|
public static bool LoadFile(string FilePath, out byte[] data)
|
||||||
|
{
|
||||||
|
using (FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
byte[] buffur = new byte[fs.Length];
|
||||||
|
fs.Read(buffur, 0, (int)fs.Length);
|
||||||
|
fs.Close();
|
||||||
|
data = buffur;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
data = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string[] GetDirFile(string Path)
|
||||||
|
{
|
||||||
|
return Directory.GetFiles(Path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] String2Byte(string value)
|
||||||
|
{
|
||||||
|
return Encoding.Default.GetBytes(value);
|
||||||
|
}
|
||||||
|
public static bool SaveFile(string FilePath, byte[] buffer)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//创建一个文件流
|
||||||
|
using (FileStream wfs = new FileStream(FilePath, FileMode.Create))
|
||||||
|
{
|
||||||
|
//将byte数组写入文件中
|
||||||
|
wfs.Write(buffer, 0, buffer.Length);
|
||||||
|
//所有流类型都要关闭流,否则会出现内存泄露问题
|
||||||
|
wfs.Close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
183
Program.cs
Normal file
183
Program.cs
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace AutoRranslateTextToCsv
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
static string loc = Path.GetDirectoryName(AppContext.BaseDirectory) + "\\";
|
||||||
|
|
||||||
|
const string InDir = "Input";
|
||||||
|
const string OutDir = "Out";
|
||||||
|
const string SrcDataFile = "_TextDictionary.csv";
|
||||||
|
const string Ver = "0.1";
|
||||||
|
static Dictionary<string, string> mDictSrcData;
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
string title = $"AutoRranslateTextToCsv Ver.{Ver} By axibug.com";
|
||||||
|
Console.Title = title;
|
||||||
|
Console.WriteLine(title);
|
||||||
|
|
||||||
|
|
||||||
|
if (!Directory.Exists(loc + InDir))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Input文件不存在");
|
||||||
|
Console.ReadLine();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Directory.Exists(loc + OutDir))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Out文件不存在");
|
||||||
|
Console.ReadLine();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!File.Exists(loc + SrcDataFile))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{SrcDataFile}文件不存在");
|
||||||
|
Console.ReadLine();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
|
|
||||||
|
Console.WriteLine($"开始加载译文数据源……");
|
||||||
|
if (!LoadCsv(loc + SrcDataFile, out Dictionary<string, string> _dictSrcData))
|
||||||
|
{
|
||||||
|
Console.WriteLine($"译文数据源加载失败");
|
||||||
|
Console.ReadLine();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mDictSrcData = _dictSrcData;
|
||||||
|
Console.WriteLine($"译文数据源加载成功,共{_dictSrcData.Count}条数据");
|
||||||
|
|
||||||
|
string[] files = FileHelper.GetDirFile(loc + InDir);
|
||||||
|
Console.WriteLine($"Input中共{files.Length}个文件,是否处理? (y/n)");
|
||||||
|
string yn = Console.ReadLine();
|
||||||
|
if (yn.ToLower() != "y")
|
||||||
|
return;
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
int errcount = 0;
|
||||||
|
for (int i = 0; i < files.Length; i++)
|
||||||
|
{
|
||||||
|
string FileName = files[i].Substring(files[i].LastIndexOf("\\"));
|
||||||
|
|
||||||
|
if (!FileName.ToLower().Contains(".csv"))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
Console.WriteLine($">>>>>>>>>>>>>>开始处理 第{index}个文件 {FileName}<<<<<<<<<<<<<<<<<<<");
|
||||||
|
|
||||||
|
if (DoReplaceRranslateFile(files[i], out string[] TempArr,out int DoneIndex))
|
||||||
|
{
|
||||||
|
string newfileName = FileName;
|
||||||
|
string outstring = loc + OutDir + "\\" + newfileName;
|
||||||
|
File.WriteAllLines(outstring, TempArr);
|
||||||
|
Console.WriteLine($">>>>>>>>>>>>>>成功处理 第{index}个:{outstring} | 其中成功处理文本{DoneIndex}个");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errcount++;
|
||||||
|
Console.WriteLine($">>>>>>>>>>>>>>处理失败 第{index}个");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine($"已处理{files.Length}个文件,其中{errcount}个失败");
|
||||||
|
Console.ReadLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static bool LoadCsv(string path, out Dictionary<string, string> _dictSrcData)
|
||||||
|
{
|
||||||
|
_dictSrcData = new Dictionary<string, string>();
|
||||||
|
using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("gb2312")))
|
||||||
|
{
|
||||||
|
while (!sr.EndOfStream)
|
||||||
|
{
|
||||||
|
string line = sr.ReadLine();
|
||||||
|
string[] values = line.Split(',');
|
||||||
|
if (values.Length >= 2)
|
||||||
|
{
|
||||||
|
string k = null;
|
||||||
|
string v = null;
|
||||||
|
k = values[0];
|
||||||
|
v = values[1];
|
||||||
|
if (string.IsNullOrEmpty(k) || string.IsNullOrEmpty(v))
|
||||||
|
continue;
|
||||||
|
if (string.Equals(k,v))
|
||||||
|
continue;
|
||||||
|
_dictSrcData[k] = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool DoReplaceRranslateFile(string path,out string[] TempArr,out int DoneNum)
|
||||||
|
{
|
||||||
|
DoneNum = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string[] StrArr = File.ReadAllLines(path, Encoding.GetEncoding("shift-jis"));
|
||||||
|
TempArr = new string[StrArr.Length];
|
||||||
|
for (int i = 0; i < StrArr.Length; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
string line = StrArr[i];
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
TempArr[i] = line;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
string[] valueArr = StrArr[i].Split("\t");
|
||||||
|
if (valueArr.Length >= 2 && GetRranslateText(valueArr[2], out string Resultline))
|
||||||
|
{
|
||||||
|
string newline = "";
|
||||||
|
for (int j = 0; j < valueArr.Length; j++)
|
||||||
|
{
|
||||||
|
if (j == 2)
|
||||||
|
newline += EncodingConvert(Encoding.GetEncoding("gb2312"), Encoding.GetEncoding("shift-jis"), Resultline);
|
||||||
|
else
|
||||||
|
newline += valueArr[j];
|
||||||
|
|
||||||
|
if(j < valueArr.Length -1)
|
||||||
|
newline += "\t";
|
||||||
|
|
||||||
|
DoneNum++;
|
||||||
|
}
|
||||||
|
line = newline;
|
||||||
|
}
|
||||||
|
TempArr[i] = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
TempArr = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static string EncodingConvert(Encoding src, Encoding dst, string text)
|
||||||
|
{
|
||||||
|
var bytes = src.GetBytes(text);
|
||||||
|
bytes = Encoding.Convert(src, dst, bytes);
|
||||||
|
return dst.GetString(bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool GetRranslateText(string line, out string Resultline)
|
||||||
|
{
|
||||||
|
if (mDictSrcData.ContainsKey(line))
|
||||||
|
{
|
||||||
|
Resultline = mDictSrcData[line];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
Resultline = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
18
Properties/PublishProfiles/FolderProfile.pubxml
Normal file
18
Properties/PublishProfiles/FolderProfile.pubxml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Any CPU</Platform>
|
||||||
|
<PublishDir>bin\Release\net7.0\publish\win-x64\</PublishDir>
|
||||||
|
<PublishProtocol>FileSystem</PublishProtocol>
|
||||||
|
<_TargetId>Folder</_TargetId>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
|
<SelfContained>false</SelfContained>
|
||||||
|
<PublishSingleFile>true</PublishSingleFile>
|
||||||
|
<PublishReadyToRun>true</PublishReadyToRun>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
10
Properties/PublishProfiles/FolderProfile.pubxml.user
Normal file
10
Properties/PublishProfiles/FolderProfile.pubxml.user
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project>
|
||||||
|
<PropertyGroup>
|
||||||
|
<History>True|2023-10-16T06:28:28.4099321Z;True|2023-10-16T14:28:04.3437847+08:00;True|2023-10-16T14:26:50.3929900+08:00;False|2023-10-16T14:26:22.6712614+08:00;</History>
|
||||||
|
<LastFailureDetails />
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
31
README.md
Normal file
31
README.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
译文批量填CSV表转换工具 by 皓月云 axibug.com
|
||||||
|
|
||||||
|
服务于:ReFrontier魔改版本,下 FrontierTextTool 导出工具的译文批量处理
|
||||||
|
|
||||||
|
使用方法:
|
||||||
|
|
||||||
|
1._TextDictionary.csv
|
||||||
|
|
||||||
|
该文件为,原文和译文。在本CSV中填入文本。
|
||||||
|
|
||||||
|
程序将读取作为字典之用。
|
||||||
|
|
||||||
|
*本表固定文字编码为GB2312
|
||||||
|
|
||||||
|
2.Input文件夹中放入 需要处理的文件
|
||||||
|
|
||||||
|
如指针|日文 的csv文件
|
||||||
|
|
||||||
|
例:mhfdat_01.csv
|
||||||
|
|
||||||
|
*使用中不要破坏表列结构,默认即可
|
||||||
|
|
||||||
|
*读取本表文字编码固定为shift-jis
|
||||||
|
|
||||||
|
3.运行 AutoRranslateTextToCsv.exe
|
||||||
|
|
||||||
|
即可输入处理文件到Out文件夹
|
||||||
|
|
||||||
|
按照_TextDictionary.csv 替换文本列字段
|
||||||
|
|
||||||
|
*输出表文字编码固定为shift-jis
|
||||||
Loading…
Reference in New Issue
Block a user