/// <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);
        }