/// <summary> /// StringTableを読み込み、言語ファイルを返す。 /// 言語ファイルにファイル履歴の枠組みを作成し設定する。 /// </summary> /// <param name="path">StringTableファイルのパス</param> /// <param name="productLine">製品区分</param> /// <param name="fileID">FileID</param> /// <returns>言語ファイル</returns> public static MieLanguageFile LoadFromXml(string path, MieProduct.NProductLine productLine, out string fileID) { //// StringTableの読み込み var stringTableFile = StringTableFile.Load(path); //// ファイル履歴の作成 MieLanguageHistoryFile mieLanguageHistoryFile = new MieLanguageHistoryFile(stringTableFile.Name); //// FileIDを統一形式に変換する。 fileID = MieFileUtils.ConvertFileIDToCommon(stringTableFile.Name); var commonFileID = MieStringUtils.NormalizedFileID(fileID); var fileCode = MieHashTools.ComputeFileID(commonFileID); var mieLanguageFile = new MieLanguageFile(fileCode); stringTableFile .Entries .ForEach(entry => { var referenceID = MieTranslationLib.MieUtils.MieHashTools.ComputeReferenceID(stringTableFile.Name, entry.ID); var mieLanguageEntry = new MieLanguageEntry(entry.ID, entry.DefaultText, entry.FemaleText, productLine, referenceID); mieLanguageFile.AddEntry(mieLanguageEntry); }); return(mieLanguageFile); }
/// <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); }