/// <summary> /// CSVファイルから翻訳シート情報(Localization)を作成する。 /// </summary> /// <param name="sheetInfo">翻訳シート情報(Localization)</param> /// <param name="path">CSVファイルのパス</param> /// <param name="enc">CSVファイルの文字コード</param> public static void LoadFromCsv( UapTransSheetLocalizationInfo 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 <CsvMapperLocalization>(); //// データを読み出し var records = csv.GetRecords <UapTransSheetLocalizationEntry>(); foreach (var record in records) { var sheetEntry = new UapTransSheetLocalizationEntry(); sheetEntry.English = record.English; //// 簡略形式のFileIDを正規のFileIDに変換する。 sheetEntry.FileID = ConverSheetFileIdToFileID(record.FileID); sheetEntry.ID = record.ID.Replace("#", string.Empty); sheetEntry.Japanese = record.Japanese; sheetEntry.MTrans = record.MTrans; sheetEntry.Name = record.Name; sheetEntry.Sequence = record.Sequence; sheetInfo.AddEntry(sheetEntry); } } }
/// <summary> /// ローカライズ情報をCSV形式で保存する。 /// </summary> /// <param name="uapLocalizationInfo">ローカライズ情報</param> /// <param name="path">CSV形式のファイルのパス</param> /// <param name="langCode">言語番号</param> public static void SaveToCsv( UapLocalizationInfo uapLocalizationInfo, string path, int langCode) { using (var writer = new CsvWriter( new StreamWriter(path, false, Encoding.UTF8))) { writer.Configuration.RegisterClassMap <CsvMapperLocalization>(); writer.WriteHeader <UapTransSheetLocalizationEntry>(); writer.NextRecord(); foreach (var localizationFile in uapLocalizationInfo.Items.Values) { var seq = 1; foreach (var entry in localizationFile.Items.Values) { var data = new UapTransSheetLocalizationEntry(); //// FileIDを簡略形式に変換する。 data.FileID = ConvertFileIDToSheetFileID(localizationFile.FileID); data.Name = entry.Name; data.ID = $"#{entry.ID}"; //// 英語のエントリを出力する。 data.English = entry.GetEntry(langCode); data.Japanese = string.Empty; data.MTrans = string.Empty; data.Sequence = seq; seq++; writer.WriteRecord(data); writer.NextRecord(); } } } }
/// <summary> /// 翻訳シートエントリー(Localization)を追加する。 /// </summary> /// <param name="localizationEntry">翻訳シートエントリー(Dialog)</param> public void AddEntry(UapTransSheetLocalizationEntry localizationEntry) { if (this.Items.ContainsKey(localizationEntry.ID)) { throw new Exception($"Duplicate ID({localizationEntry.ID}). FileID({localizationEntry.FileID})"); } else { this.Items.Add(localizationEntry.ID, localizationEntry); } }
/// <summary> /// 翻訳シートエントリー(Localization)を追加する。 /// </summary> /// <param name="sheetEntry">翻訳シートエントリー(Localization)</param> public void AddEntry(UapTransSheetLocalizationEntry sheetEntry) { if (this.Items.ContainsKey(sheetEntry.FileID)) { var sheetFile = this.Items[sheetEntry.FileID]; sheetFile.AddEntry(sheetEntry); } else { //// 翻訳シートファイルが存在しない時は新たに作成する。 var sheetFile = new UapTransSheetLocalizationFile(sheetEntry.FileID); sheetFile.AddEntry(sheetEntry); this.Items.Add(sheetFile.FileID, sheetFile); } }
/// <summary> /// 指定した FileID, ID の翻訳シートエントリー(Localization)を返す。 /// </summary> /// <param name="fileID">FileID</param> /// <param name="id">id</param> /// <returns>翻訳シートエントリー(Localization)</returns> public UapTransSheetLocalizationEntry GetEntry(string fileID, string id) { if (this.Items.ContainsKey(fileID)) { var locFile = this.Items[fileID]; if (locFile.Items.ContainsKey(id)) { var locEntry = locFile.Items[id]; return(locEntry); } } //// 存在しない場合はnullオブジェクトを返す。 var nullObject = new UapTransSheetLocalizationEntry(); return(nullObject); }