1 // ================================================================================================
3 // 言語間の対訳表をあらわすモデルクラスソース</summary>
5 // <copyright file="TranslationTable.cs" company="honeplusのメモ帳">
6 // Copyright (C) 2010 Honeplus. All rights reserved.</copyright>
9 // ================================================================================================
11 namespace Honememo.Wptscs.Models
14 using System.Collections.Generic;
16 using System.Xml.Serialization;
17 using Honememo.Utilities;
20 /// 言語間の対訳表をあらわすモデルクラスです。
22 public class TranslationTable : List<IDictionary<string, string>>, IXmlSerializable
51 /// <param name="from">翻訳元言語コード。</param>
52 /// <param name="to">翻訳先言語コード。</param>
53 /// <param name="word">翻訳元語。</param>
54 /// <returns>対訳語。登録されていない場合 <c>null</c>。</returns>
55 /// <remarks>大文字小文字は区別しない。</remarks>
56 public string GetWord(string from, string to, string word)
58 // nullは不可。以降でエラーになるためここでチェック
59 Validate.NotNull(from, "from");
60 Validate.NotNull(to, "to");
61 Validate.NotNull(word, "word");
63 string w = word.ToLower();
64 foreach (IDictionary<string, string> record in this)
66 if (record.ContainsKey(from) && record[from].ToLower() == w)
69 if (record.ContainsKey(to))
82 /// 指定されている言語の組み合わせで対訳語を取得する。
84 /// <param name="word">翻訳元語。</param>
85 /// <returns>対訳語。登録されていない場合 <c>null</c>。</returns>
86 /// <remarks>大文字小文字は区別しない。</remarks>
87 public string GetWord(string word)
89 if (String.IsNullOrEmpty(this.From) || String.IsNullOrEmpty(this.To))
91 throw new InvalidOperationException("empty from or to");
94 return this.GetWord(this.From, this.To, word);
99 #region XMLシリアライズ用メソッド
102 /// シリアライズするXMLのスキーマ定義を返す。
104 /// <returns>XML表現を記述するXmlSchema。</returns>
105 public System.Xml.Schema.XmlSchema GetSchema()
111 /// XMLからオブジェクトをデシリアライズする。
113 /// <param name="reader">デシリアライズ元のXmlReader</param>
114 public void ReadXml(XmlReader reader)
116 XmlDocument xml = new XmlDocument();
119 // ※ 以下、基本的に無かったらNGの部分はいちいちチェックしない。例外飛ばす
120 XmlElement tableElement = xml.DocumentElement;
124 foreach (XmlNode recordNode in tableElement.SelectNodes("Group"))
126 IDictionary<string, string> record = new Dictionary<string, string>();
127 foreach (XmlNode wordNode in recordNode)
129 XmlElement wordElement = wordNode as XmlElement;
130 record[wordElement.GetAttribute("Lang")] = wordElement.InnerText;
138 /// オブジェクトをXMLにシリアライズする。
140 /// <param name="writer">シリアライズ先のXmlWriter</param>
141 public void WriteXml(XmlWriter writer)
144 foreach (IDictionary<string, string> record in this)
146 writer.WriteStartElement("Group");
147 foreach (KeyValuePair<string, string> word in record)
149 writer.WriteStartElement("Word");
150 writer.WriteAttributeString("Lang", word.Key);
151 writer.WriteValue(word.Value);
152 writer.WriteEndElement();
155 writer.WriteEndElement();