public async void Format(bool isLink) { var exportRawPath = _exportPath + @"RawText/"; var exportForTranslatePath = _exportPath + @"ForTranslateText/"; var exportForTranslateWithNewLinePath = _exportPath + @"ForTranslateTextWithNewLine/"; if (!Directory.Exists(exportRawPath)) { Directory.CreateDirectory(exportRawPath); } if (!Directory.Exists(exportForTranslatePath)) { Directory.CreateDirectory(exportForTranslatePath); } if (!Directory.Exists(exportForTranslateWithNewLinePath)) { Directory.CreateDirectory(exportForTranslateWithNewLinePath); } var ofd = new OpenFileDialog { Title = @"选择要打开的文件", Multiselect = true, Filter = @"剧情文件|*.json", RestoreDirectory = true }; var nameDirectory = new NameDirectory { NameTranslates = new List <NameTranslate>() }; if (ofd.ShowDialog() == DialogResult.OK) { StreamWriter exportText = null, exportRawText = null, exportTextWithNewLine = null; foreach (var filePath in ofd.FileNames) { var fileNameVer2 = Crypt.Crypt.ConvertFileName(filePath, EncVersion.Ver2, EncVersion.Ver1); var fileName = Path.GetFileNameWithoutExtension(fileNameVer2); await ParseResultJsonAsync(filePath); var dialogList = _resultJsonObject["Pages"] as JArray; if (isLink) { if (exportText == null) { exportText = File.CreateText(exportForTranslatePath + fileName + ".txt"); exportRawText = File.CreateText(exportRawPath + "raw_" + fileName + ".txt"); exportTextWithNewLine = File.CreateText(exportForTranslateWithNewLinePath + "raw_" + fileName + ".txt"); } exportText.WriteLine("==============================="); exportText.WriteLine("位置 : Main episode EP4.0~ > EPISODE 4.0 AXiS "); exportText.WriteLine("翻译人 : "); exportText.WriteLine("==============================="); exportText.WriteLine($"文件名 : {fileNameVer2}"); exportText.WriteLine("文本 :\n"); exportTextWithNewLine.WriteLine("==============================="); exportTextWithNewLine.WriteLine("位置 : Main episode EP4.0~ > EPISODE 4.0 AXiS "); exportTextWithNewLine.WriteLine("翻译人 : "); exportTextWithNewLine.WriteLine("==============================="); exportTextWithNewLine.WriteLine($"文件名 : {fileNameVer2}"); exportTextWithNewLine.WriteLine("文本 :\n"); exportRawText.WriteLine($"文件名 : {fileNameVer2}"); exportRawText.WriteLine("文本 :\n"); await StartFormat(dialogList, nameDirectory, exportText, exportRawText, exportTextWithNewLine); } else { exportText = File.CreateText(exportForTranslatePath + fileName + ".txt"); exportRawText = File.CreateText(exportRawPath + "raw_" + fileName + ".txt"); exportTextWithNewLine = File.CreateText(exportForTranslateWithNewLinePath + "raw_" + fileName + ".txt"); var title = (dialogList ?? throw new InvalidOperationException()).SingleOrDefault(d => ((JObject)d).ContainsKey("SubTitle"))?["SubTitle"]["EpisodeName"]; exportText.WriteLine("==============================="); exportText.WriteLine($"标题 : {title}"); exportText.WriteLine("副标题 : "); exportText.WriteLine("位置 : Main episode EP4.0~ > EPISODE 4.0 AXiS "); exportText.WriteLine("翻译人 : "); exportText.WriteLine("==============================="); exportText.WriteLine($"文件名 : {fileNameVer2}"); exportText.WriteLine("文本 :\n"); exportTextWithNewLine.WriteLine("==============================="); exportTextWithNewLine.WriteLine($"标题 : {title}"); exportTextWithNewLine.WriteLine("副标题 : "); exportTextWithNewLine.WriteLine("位置 : Main episode EP4.0~ > EPISODE 4.0 AXiS "); exportTextWithNewLine.WriteLine("翻译人 : "); exportTextWithNewLine.WriteLine("==============================="); exportTextWithNewLine.WriteLine($"文件名 : {fileNameVer2}"); exportTextWithNewLine.WriteLine("文本 :\n"); exportRawText.WriteLine($"标题 : {title}"); exportRawText.WriteLine($"文件名 : {fileNameVer2}"); exportRawText.WriteLine("文本 :\n"); await StartFormat(dialogList, nameDirectory, exportText, exportRawText, exportTextWithNewLine); exportText.Close(); exportRawText.Close(); exportTextWithNewLine.Close(); } } if (isLink) { exportText?.Close(); exportRawText?.Close(); exportTextWithNewLine?.Close(); } } nameDirectory.NameTranslates = nameDirectory.NameTranslates.Distinct(n => n.Name).ToList(); for (var id = 0; id < nameDirectory.NameTranslates.Count; id++) { nameDirectory.NameTranslates[id].Id = id + 1; nameDirectory.NameTranslates[id].Translate = " "; } var directoryText = JsonConvert.SerializeObject(nameDirectory); using var streamWriter = new StreamWriter(_exportPath + "dictionary.json"); streamWriter.Write(directoryText); streamWriter.Close(); }
private static async Task StartFormat(JArray dialogList, NameDirectory nameDirectory, TextWriter exportText, TextWriter exportRawText, TextWriter exportTextWithNewLine) { var nowIndex = 0; foreach (var dialog in (dialogList).Where(d => ((JObject)d).ContainsKey("TextArea"))) { nowIndex++; var name = dialog["TextArea"]["Name"]; var dialogue = dialog["TextArea"]["Dialogue"]; var dialogueWithoutSymbols = dialogue.ToString(); await exportText.WriteLineAsync($"◆ {nowIndex:D4} ◆ {name} :"); await exportText.WriteLineAsync($"◆ {nowIndex:D4} ◆「 {dialogueWithoutSymbols.Replace("\n", "")} 」"); await exportText.WriteLineAsync($"◇ {nowIndex:D4} ◇ {name} :"); await exportText.WriteLineAsync( Regex.Matches(dialogueWithoutSymbols.Replace("\n", ""), @"\p{P}").Count == dialogueWithoutSymbols.Replace("\n", "").Length ?$"◇ {nowIndex:D4} ◇「 {dialogueWithoutSymbols.Replace("\n", "")} 」" : $"◇ {nowIndex:D4} ◇「 」 "); await exportText.WriteLineAsync(" "); await exportRawText.WriteLineAsync($"{name}"); await exportRawText.WriteLineAsync($"「 {dialogueWithoutSymbols.Replace("\n", "")} 」"); await exportRawText.WriteLineAsync(" "); //exportText.WriteLine($"◆ {NowIndex:D4} ◆:{name}:"); //exportText.WriteLine($"◆ {NowIndex:D4} ◆:{dialogue}"); //exportText.WriteLine($"◇ {NowIndex:D4} ◇:"); //exportText.WriteLine($"◇ {NowIndex:D4} ◇:"); //exportText.WriteLine(" "); await exportTextWithNewLine.WriteLineAsync($" {nowIndex:D4} : {name} :"); if (dialogueWithoutSymbols.Length > 0) { await exportTextWithNewLine.WriteLineAsync($" 「 {dialogueWithoutSymbols.Substring(0, dialogueWithoutSymbols.Length - 1)} 」"); } await exportTextWithNewLine.WriteLineAsync($" {nowIndex:D4} : {name} :"); await exportTextWithNewLine.WriteLineAsync( Regex.Matches(dialogueWithoutSymbols.Replace("\n", ""), @"\p{P}").Count == dialogueWithoutSymbols.Replace("\n", "").Length ?$" 「 {dialogueWithoutSymbols.Substring(0, dialogueWithoutSymbols.Length - 1)} 」" : $" 「 」 "); await exportTextWithNewLine.WriteLineAsync(" "); if (name == null) { continue; } var nameText = name.ToString(); if (!Regex.IsMatch(nameText, @"\p{P}")) { nameDirectory.NameTranslates.Add(new NameTranslate { Name = nameText }); } } }