Esempio n. 1
0
        /// <summary>
        /// Builds an <see cref="XmlLocalizationDictionary"/> from given xml string.
        /// </summary>
        /// <param name="xmlString">XML string</param>
        public static XmlLocalizationDictionary BuildFomXmlString(string xmlString)
        {
            var xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(xmlString);

            var localizationDictionaryNode = xmlDocument.SelectNodes("/localizationDictionary");

            if (localizationDictionaryNode == null || localizationDictionaryNode.Count <= 0)
            {
                throw new Exception("A Localization Xml must include localizationDictionary as root node.");
            }
            var cultureName = localizationDictionaryNode[0].GetAttributeValueOrNull("culture");

            if (string.IsNullOrEmpty(cultureName))
            {
                throw new Exception("culture is not defined in language XML file!");
            }
            var dictionary     = new XmlLocalizationDictionary(new CultureInfo(cultureName));
            var dublicateNames = new List <string>();
            var textNodes      = xmlDocument.SelectNodes("/localizationDictionary/texts/text");

            if (textNodes != null)
            {
                foreach (XmlNode node in textNodes)
                {
                    var name = node.GetAttributeValueOrNull("name");

                    if (string.IsNullOrEmpty(name))
                    {
                        throw new Exception("name attribute of a text is empty in given xml string.");
                    }

                    if (dictionary.Contains(name))
                    {
                        dublicateNames.Add(name);
                    }
                    dictionary[name] = (node.GetAttributeValueOrNull("value") ?? node.InnerText).NormalizeLineEndings();
                }
            }

            if (dublicateNames.Count > 0)
            {
                throw new Exception("A dictionary can not contain same key twice. There are some duplicated names: " + dublicateNames.JoinAsString(", "));
            }
            return(dictionary);
        }
 protected virtual XmlLocalizationDictionary CreateXmlLocalizationDictionary(string fileName)
 {
     return(XmlLocalizationDictionary.BuildFomFile(fileName));
 }
 protected virtual XmlLocalizationDictionary CreateXmlLocalizationDictionary(string xmlString)
 {
     return(XmlLocalizationDictionary.BuildFomXmlString(xmlString));
 }