/// <summary> /// ローカライズエントリーを追加する。 /// </summary> /// <param name="entry">ローカライズエントリー</param> public void AddEntry(UapLocalizationEntry entry) { if (this.Items.ContainsKey(entry.ID)) { throw new Exception($"Duplicate dialog entry. ID({entry.ID}) Name({entry.Name}) FileID({this.FileID})"); } else { this.Items.Add(entry.ID, entry); } }
/// <summary> /// ローカライズエントリーをStreamに書き出す。 /// </summary> /// <param name="entry">ローカライズエントリー</param> /// <param name="bw">Stream</param> private static void WriteEntry(UapLocalizationEntry entry, BinaryWriter bw) { UapBinaryUtils.WriteString(bw, entry.Name); UapBinaryUtils.WriteString(bw, entry.ID); bw.Write(entry.LanguageEntries.Count); foreach (var langEntryPair in entry.LanguageEntries) { bw.Write(langEntryPair.Key); UapBinaryUtils.WriteString(bw, langEntryPair.Value); } }
/// <summary> /// 自分自身のクローンを作成しローカライズエントリーを返す。 /// </summary> /// <returns>ローカライズエントリー</returns> public UapLocalizationEntry Clone() { var entry = new UapLocalizationEntry(this.Name, this.ID); foreach (var langPair in this.LanguageEntries) { entry.LanguageEntries.Add(langPair.Key, langPair.Value); } return(entry); }
/// <summary> /// Streamからデータを読み込みローカライズエントリー返す。 /// </summary> /// <param name="br">Stream</param> /// <param name="fileID">fileID</param> /// <returns>ローカライズエントリー</returns> private static UapLocalizationEntry ReadEntry( BinaryReader br, string fileID) { var name = UapBinaryUtils.ReadString(br); var id = UapBinaryUtils.ReadString(br); var result = new UapLocalizationEntry(name, id); var size = br.ReadInt32(); for (int i = 0; i < size; i++) { var langCode = br.ReadInt32(); var text = UapBinaryUtils.ReadString(br); if (!result.AddEntry(langCode, text)) { //// GOG版(v2.7.1)のデータバグ対策。 Console.WriteLine($"Warning: Duplicate language FileID({fileID}) Name({name}) ID({id}) LangNo({langCode})"); } } return(result); }