/// <summary> /// 日本語化されたデータをXMLファイルに保存する。 /// </summary> /// <param name="transSheet">翻訳シート情報</param> /// <param name="episodeID">EpisodeID</param> /// <param name="fileType">FileType</param> /// <param name="langFilePathEN">原文のXMLファイルのパス</param> /// <param name="langFolderPathJP">翻訳されたXMLファイルを格納するフォルダーのパス</param> /// <param name="useMT">機械翻訳の使用有無</param> /// <param name="useReplace">上書きの有無</param> /// <returns>エラーの有無</returns> public static bool SaveToXml( SuTransSheetInfo transSheet, string episodeID, SuLanguageFile.NFileType fileType, string langFilePathEN, string langFolderPathJP, bool useMT, bool useReplace) { var langFile = new SuLanguageFile(episodeID, fileType); //// 保存フォルダーを作成する。 var saveFolder = Path.Combine(langFolderPathJP, langFile.EpisodeID); SuFileUtils.SafeCreateDirectory(saveFolder); //// XMLファイルを保存する。 var fileName = Path.GetFileName(langFilePathEN); var savePath = Path.Combine(saveFolder, fileName); //// 出力ファイルの存在確認。 if (!useReplace && File.Exists(savePath)) { return(false); } //// 原文を読み込む。 var xml = XDocument.Load(langFilePathEN); XElement table = null; if (langFile.FileKey.Equals("E04:UI", StringComparison.OrdinalIgnoreCase)) { //// E04のUI.xmlのみUIではなく DIALOGUE var fileTypeString = langFile.GetFileTypeStrint(SuLanguageFile.NFileType.Dialog); table = xml.Element(fileTypeString); } else { table = xml.Element(langFile.FileTypeString); } //// 各エントリーのテキストを翻訳する。 var rows = table.Elements("txt"); foreach (var row in rows) { var attr = row.Attribute("id"); var id = attr.Value; //// このエントリーの翻訳シートエントリーを取得する。 var sheetEntry = transSheet.GetEntry(langFile.EpisodeID, id); //// 翻訳する。 string text = transSheet.Translate(langFile.EpisodeID, id, row.Value, useMT); //// 翻訳済みのテキストをXMLに反映する。 row.Value = text; } xml.Save(savePath); return(true); }
/// <summary> /// 言語ファイルを追加する。 /// </summary> /// <param name="langFile">言語ファイル</param> public void AddFile(SuLanguageFile langFile) { if (this.Items.ContainsKey(langFile.FileKey)) { throw new Exception($"Duplicate EpisodeFolderName({langFile.EpisodeID})"); } else { this.Items.Add(langFile.FileKey, langFile); } }
/// <summary> /// 指定されたXMLファイルを読み込み、言語情報に格納する。 /// </summary> /// <param name="langInfo">言語情報</param> /// <param name="episodeID">EpisodeID</param> /// <param name="fileType">FileType</param> /// <param name="path">XMLファイルのパス</param> public static void LoadFromXml( SuLanguageInfo langInfo, string episodeID, SuLanguageFile.NFileType fileType, string path) { var langFile = new SuLanguageFile(episodeID, fileType); langInfo.AddFile(langFile); var xml = XDocument.Load(path); XElement table = null; if (langFile.FileKey.Equals("E04:UI", StringComparison.OrdinalIgnoreCase)) { //// E04のUI.xmlのみUIではなく DIALOGUE var fileTypeString = langFile.GetFileTypeStrint(SuLanguageFile.NFileType.Dialog); table = xml.Element(fileTypeString); } else { table = xml.Element(langFile.FileTypeString); } var rows = table.Elements("txt"); foreach (var row in rows) { var attr = row.Attribute("id"); var id = attr.Value; var text = row.Value; var entry = new SuLanguageEntry(id, text); langFile.AddEntry(entry); } }