1 // ================================================================================================
3 // 言語に関する情報をあらわすモデルクラスソース</summary>
5 // <copyright file="Language.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;
18 using Honememo.Wptscs.Properties;
21 /// 言語に関する情報をあらわすモデルクラスです。
23 public class Language : IXmlSerializable
35 private IDictionary<string, LanguageName> names = new Dictionary<string, LanguageName>();
40 private string bracket;
49 /// <param name="code">言語のコード。</param>
50 public Language(string code)
57 /// コンストラクタ(シリアライズ or 拡張用)。
79 // ※必須な情報が設定されていない場合、例外を返す
80 this.code = Validate.NotBlank(value, "code").ToLower();
87 /// <remarks>空でもオブジェクトは存在。</remarks>
88 public IDictionary<string, LanguageName> Names
97 // ※必須な情報が設定されていない場合、例外を返す
98 this.names = Validate.NotNull(value, "names");
105 /// <remarks>値が指定されていない場合、デフォルト値を返す。</remarks>
106 public string Bracket
110 if (String.IsNullOrWhiteSpace(this.bracket))
112 return Settings.Default.Bracket;
120 this.bracket = value;
126 #region XMLシリアライズ用メソッド
129 /// シリアライズするXMLのスキーマ定義を返す。
131 /// <returns>XML表現を記述するXmlSchema。</returns>
132 public System.Xml.Schema.XmlSchema GetSchema()
138 /// XMLからオブジェクトをデシリアライズする。
140 /// <param name="reader">デシリアライズ元のXmlReader</param>
141 public void ReadXml(XmlReader reader)
143 XmlDocument xml = new XmlDocument();
147 // ※ 以下、基本的に無かったらNGの部分はいちいちチェックしない。例外飛ばす
148 XmlElement langElement = xml.DocumentElement;
149 this.Code = langElement.GetAttribute("Code");
150 this.Bracket = XmlUtils.InnerText(langElement.SelectSingleNode("Bracket"));
153 foreach (XmlNode nameNode in langElement.SelectNodes("Names/LanguageName"))
155 XmlElement nameElement = nameNode as XmlElement;
156 this.Names[nameElement.GetAttribute("Code")] = new LanguageName
158 Name = XmlUtils.InnerText(nameElement.SelectSingleNode("Name")),
159 ShortName = XmlUtils.InnerText(nameElement.SelectSingleNode("ShortName"))
165 /// オブジェクトをXMLにシリアライズする。
167 /// <param name="writer">シリアライズ先のXmlWriter</param>
168 public void WriteXml(XmlWriter writer)
171 writer.WriteAttributeString("Code", this.Code);
174 writer.WriteStartElement("Names");
175 foreach (KeyValuePair<string, LanguageName> name in this.Names)
177 writer.WriteStartElement("LanguageName");
178 writer.WriteAttributeString("Code", name.Key);
179 writer.WriteElementString("Name", name.Value.Name);
180 writer.WriteElementString("ShortName", name.Value.ShortName);
181 writer.WriteEndElement();
184 writer.WriteEndElement();
185 writer.WriteElementString("Bracket", this.bracket);
193 /// ある言語の、各言語での名称・略称を格納するための構造体です。
195 public struct LanguageName
205 public string ShortName;