/// <summary> /// 言語情報から翻訳シートをCSV形式で保存する。 /// </summary> /// <param name="uapDialogInfo">言語情報</param> /// <param name="path">CSVファイルのパス</param> /// <param name="langCode">言語コード</param> public static void SaveToCsv( UapDialogInfo uapDialogInfo, string path, int langCode) { //// ToDo: 言語コードを enum 化する。 using (var writer = new CsvWriter( new StreamWriter(path, false, Encoding.UTF8))) { writer.Configuration.RegisterClassMap <CsvMapperDialog>(); writer.WriteHeader <UapTransSheetDialogEntry>(); writer.NextRecord(); foreach (var dialogFile in uapDialogInfo.Items.Values) { var seq = 1; foreach (var entry in dialogFile.Items.Values) { var data = new UapTransSheetDialogEntry(); //// FileIDを簡略形式に変換する。 data.FileID = ConvertFileIDToSheetFileID(dialogFile.FileID); data.LineID = entry.LineID; data.Character = entry.Character; data.English = entry.GetEntry(langCode).Text; data.Japanese = string.Empty; data.MTrans = string.Empty; data.Sequence = seq; seq++; writer.WriteRecord(data); writer.NextRecord(); } } } }
/// <summary> /// CSVファイルから翻訳シート情報を作成する。 /// </summary> /// <param name="sheetInfo">翻訳シート情報</param> /// <param name="path">CSVファイルのパス</param> /// <param name="enc">CSVファイルの文字コード</param> public static void LoadFromCsv( UapTransSheetDialogInfo sheetInfo, string path, Encoding enc = null) { if (enc == null) { enc = Encoding.UTF8; } using (var reader = new StreamReader(path, enc)) using (var csv = new CsvReader(reader)) { //// 区切り文字 csv.Configuration.Delimiter = ","; csv.Configuration.HasHeaderRecord = true; csv.Configuration.RegisterClassMap <CsvMapperDialog>(); //// データを読み出し var records = csv.GetRecords <UapTransSheetDialogEntry>(); foreach (var record in records) { var sheetEntry = new UapTransSheetDialogEntry(); sheetEntry.Character = record.Character; sheetEntry.English = record.English; //// 簡略形式のFileIDを正規のFileIDに変換する。 sheetEntry.FileID = ConverSheetFileIdToFileID(record.FileID); sheetEntry.Japanese = record.Japanese; sheetEntry.LineID = record.LineID; sheetEntry.MTrans = record.MTrans; sheetEntry.Sequence = record.Sequence; sheetInfo.AddEntry(sheetEntry); } } }
/// <summary> /// 翻訳シートエントリー(Dialog)を追加する。 /// </summary> /// <param name="dialogEntry">翻訳シートエントリー(Dialog)</param> public void AddEntry(UapTransSheetDialogEntry dialogEntry) { if (this.Items.ContainsKey(dialogEntry.LineID)) { throw new Exception($"Duplicate LineID({dialogEntry.LineID}). FileID({dialogEntry.FileID})"); } else { this.Items.Add(dialogEntry.LineID, dialogEntry); } }
/// <summary> /// 翻訳シートエントリー(Dialog)を追加する。 /// </summary> /// <param name="sheetEntry">翻訳シートエントリー(Dialog)</param> public void AddEntry(UapTransSheetDialogEntry sheetEntry) { if (this.Items.ContainsKey(sheetEntry.FileID)) { var sheetFile = this.Items[sheetEntry.FileID]; sheetFile.AddEntry(sheetEntry); } else { //// 翻訳シートファイルが存在しない時は新たに作成する。 var sheetFile = new UapTransSheetDialogFile(sheetEntry.FileID); sheetFile.AddEntry(sheetEntry); this.Items.Add(sheetFile.FileID, sheetFile); } }
/// <summary> /// 指定した FileID, LineID の翻訳シートエントリー(Dialog)を返す。 /// </summary> /// <param name="fileID">FileID</param> /// <param name="lineID">LineID</param> /// <returns>翻訳シートエントリー(Dialog)</returns> public UapTransSheetDialogEntry GetEntry(string fileID, string lineID) { if (this.Items.ContainsKey(fileID)) { var sheetFile = this.Items[fileID]; if (sheetFile.Items.ContainsKey(lineID)) { return(sheetFile.Items[lineID]); } } //// 存在しない場合はnullオブジェクトを返す。 var nullEntry = new UapTransSheetDialogEntry(); return(nullEntry); }