/// <summary> /// 翻訳シート情報を作成する。 /// </summary> /// <param name="sheetInfo">翻訳シート情報</param> /// <param name="path">CSV形式の翻訳シートファイルのパス</param> /// <param name="fileID">FileID</param> /// <param name="removeTag">タグ化の制御文字化の有無</param> /// <param name="enc">文字コード</param> public static void LoadFromFile( PfkTransSheetInfo sheetInfo, string path, string fileID, bool removeTag, Encoding enc = null) { if (enc == null) { enc = Encoding.UTF8; } using (var reader = new StreamReader(path, enc)) { using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { //// 区切り文字 csv.Configuration.Delimiter = ","; //// ヘッダーの有無 csv.Configuration.HasHeaderRecord = true; //// CSVファイルに合ったマッピングルールを登録 csv.Configuration.RegisterClassMap <CsvMapperTransSheetForMod>(); //// データを読み出し var records = csv.GetRecords <PfkTransSheetEntry>(); var sheetFile = new PfkTransSheetFile(fileID); foreach (var record in records) { record.FileID = fileID; if (removeTag) { //// タグを制御文字に置換する。 record.Japanese = PfkTransSheetEntry.GetUnEscapedText(record.Japanese); record.MachineTranslation = PfkTransSheetEntry.GetUnEscapedText(record.MachineTranslation); } //// 翻訳シートのTABはタグ化されているので、無条件に制御文字化する。 record.Japanese = PfkTransSheetEntry.GetUnEscapedTab(record.Japanese); record.MachineTranslation = PfkTransSheetEntry.GetUnEscapedTab(record.MachineTranslation); sheetFile.AddEntry(record); } sheetInfo.AddFile(sheetFile); } } }
/// <summary> /// 翻訳シートファイルを追加する。 /// </summary> /// <param name="newSheetFile">翻訳シートファイル</param> public void AddFile(PfkTransSheetFile newSheetFile) { if (this.Items.ContainsKey(newSheetFile.FileID)) { var currentSheetFile = this.Items[newSheetFile.FileID]; foreach (var newSheetEntry in newSheetFile.Items.Values) { if (currentSheetFile.Items.ContainsKey(newSheetEntry.Key)) { throw new Exception($"Duplicate key({newSheetEntry.Key}). FileID({newSheetFile.FileID})"); } else { currentSheetFile.AddEntry(newSheetEntry); } } } else { this.Items.Add(newSheetFile.FileID, newSheetFile); } }