/// <summary> /// 日本語化とXMLファイルの保存。 /// </summary> /// <param name="fileID">FileID</param> /// <param name="enFolderPath">原文のXMLファイルのパス</param> /// <param name="jpFolderPath">日本語版のXMLファイルのパス</param> /// <param name="transSheetFile">翻訳シートファイル</param> /// <param name="useReferenceID">ReferenceIDの有無</param> public static void SaveToXml( string fileID, string enFolderPath, string jpFolderPath, MieTransSheetFile transSheetFile, bool useReferenceID = false) { //// StringTableの読み込み var enPath = Path.Combine(enFolderPath, fileID + ".stringtable"); { //// Bugfix: stringtable内のNameパラメーターに誤りがあるため、修正する。 enPath = enPath.Replace("bounty encounters", "bounty_encounters"); } var stringTableFile = StringTableFile.Load(enPath); //// ファイル履歴の作成 MieLanguageHistoryFile mieLanguageHistoryFile = new MieLanguageHistoryFile(stringTableFile.Name); //// FileIDを統一形式に変換する。 var commonFileID = MieStringUtils.NormalizedFileID(fileID); var fileCode = MieHashTools.ComputeFileID(commonFileID); if (transSheetFile == null) { //// 翻訳シートがない場合は転記しない。 } else { foreach (var entry in stringTableFile.Entries) { MieTransSheetEntry sheetEntry = transSheetFile.GetEntry(entry.ID); if (sheetEntry == null || string.IsNullOrWhiteSpace(entry.DefaultText)) { //// 原文の翻訳テキストが存在しない場合は転記しない。 } else { if (string.IsNullOrWhiteSpace(sheetEntry.DefaultTranslationText)) { //// 翻訳テキストが存在しない場合は転記しない。 } else { entry.DefaultText = sheetEntry.DefaultTranslationText; if (!string.IsNullOrWhiteSpace(entry.FemaleText)) { //// 女性版テキストが存在する場合は標準テキストを転記する。 entry.FemaleText = sheetEntry.DefaultTranslationText; } } } if (sheetEntry != null) { if (sheetEntry.FileID.StartsWith(@"game")) { if (useReferenceID) { entry.DefaultText = $"{sheetEntry.ReferenceID}:{entry.DefaultText}"; } } } } } var jpPath = Path.Combine(jpFolderPath, fileID + ".stringtable"); var jpFolder = Path.GetDirectoryName(jpPath); MieCommonUtils.SafeCreateDirectory(jpFolder); StringTableFile.Save(stringTableFile, jpPath, StringTableFile.ExportType.Xml); }
public static void CreateXml( string fileID, MieLanguageFile langFile, string jpPath, MieTransSheetFile transSheetFile, bool useMT, bool useReferenceID) { var stringTableFile = new StringTableFile(fileID); foreach (var tableEntry in langFile.Items) { MieTransSheetEntry transSheetEntry = null; if (transSheetFile != null) { transSheetEntry = transSheetFile.GetEntry(tableEntry.ID); } var translatedText = string.Empty; if (transSheetEntry == null) { //// 翻訳シートエントリーがないので、ReferenceIDを個別に算出。 //// no | useRef | en | result //// 0 | o | o | ref付きen //// 1 | o | x | en //// 2 | x | o | en //// 3 | x | x | en if (useReferenceID && !string.IsNullOrEmpty(tableEntry.DefaultText)) //// 0 { //// 翻訳シートにエントリーが存在しない。 logger.Error($"TransSheetEntry not found. Product({tableEntry.ProductLine.ToString()}) FileID({fileID}), ID({tableEntry.ID})"); //// ReferenceIDを算出。 long referenceID = MieHashTools.ComputeReferenceID(stringTableFile.Name, tableEntry.ID); //// ReferenceIDからhash文字列を生成 var strReferenceID = $"{MieHashTools.ComputeHashIds(referenceID)}:"; translatedText = $"{strReferenceID}{tableEntry.DefaultText}"; } else { translatedText = tableEntry.DefaultText; } } else { //// 翻訳 translatedText = transSheetEntry.Translate(tableEntry.DefaultText, useMT, useReferenceID); } if (string.IsNullOrWhiteSpace(tableEntry.FemaleText)) { //// 女性の台詞なしの場合。 var entry = new StringTableFile.Entry(tableEntry.ID, translatedText); stringTableFile.Entries.Add(entry); } else { //// 女性の台詞ありの場合。 //// 男性と同じ台詞を割り当てる。 var entry = new StringTableFile.Entry(tableEntry.ID, translatedText, translatedText); stringTableFile.Entries.Add(entry); } } Console.WriteLine(fileID); SaveToXml(fileID, stringTableFile, jpPath); }