예제 #1
0
        /// <summary>
        /// Removes the resource.
        /// </summary>
        /// <param name="element">The element.</param>
        /// <returns></returns>
        public bool RemoveResource(Element element)
        {
            locker.AcquireWriterLock(Timeout.Infinite);
            try
            {
                CreateDir();
                string filePath = Path.Combine(this.path, ResXResourceFileHelper.GetFileName(element.Category, element.Culture));

                XmlDocument document = GetResxDocument(filePath);

                if (document == null)
                {
                    return(false);
                }

                var newElement = document.Root.Elements("data")
                                 .FirstOrDefault(d => d.Attribute("name").Value.EqualsOrNullEmpty(element.Name, StringComparison.OrdinalIgnoreCase));

                if (newElement == null)
                {
                    return(false);
                }

                newElement.Remove();
                document.Save(filePath);

                return(true);
            }
            finally
            {
                locker.ReleaseWriterLock();
            }
        }
예제 #2
0
        /// <summary>
        /// Gets the element.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="category">The category.</param>
        /// <param name="culture">The culture.</param>
        /// <returns></returns>
        public Element GetElement(string name, string category, string culture)
        {
            locker.AcquireReaderLock(Timeout.Infinite);
            try
            {
                string filePath = Path.Combine(this.path, ResXResourceFileHelper.GetFileName(category, culture));

                XDocument document = GetResxDocument(filePath);

                if (document == null)
                {
                    return(null);
                }

                return(document.Root.Elements("data")
                       .Where(it => it.Attribute("name").Value.EqualsOrNullEmpty(name, StringComparison.OrdinalIgnoreCase))
                       .Select(it => new Element()
                {
                    Name = it.Attribute("name").Value,
                    Value = it.Element("value").Value,
                    Category = category,
                    Culture = culture
                }).FirstOrDefault());
            }
            finally
            {
                locker.ReleaseReaderLock();
            }
        }
예제 #3
0
        /// <summary>
        /// Adds the resource.
        /// </summary>
        /// <param name="element">The element.</param>
        public void AddResource(Element element)
        {
            locker.AcquireWriterLock(Timeout.Infinite);
            try
            {
                CreateDir();
                string    filePath = Path.Combine(this.path, ResXResourceFileHelper.GetFileName(element.Category, element.Culture));
                XDocument document = GetResxDocument(filePath);

                if (document == null)
                {
                    document = CreateResXDocument();
                }
                var exists = document.Root.Elements("data")
                             .FirstOrDefault(d => d.Attribute("name").Value == element.Name);
                if (exists == null)
                {
                    document.Root.Add(
                        new XElement("data",
                                     new XAttribute("name", element.Name),
                                     new XAttribute(XNamespace.Xml + "space", "preserve"),
                                     new XElement("value", element.Value)));
                    document.Save(filePath);
                }
            }
            finally
            {
                locker.ReleaseWriterLock();
            }
        }
예제 #4
0
 /// <summary>
 /// Gets the cultures.
 /// </summary>
 /// <returns></returns>
 public IEnumerable <CultureInfo> GetCultures()
 {
     if (Directory.Exists(path))
     {
         string[] files = Directory.GetFiles(path);
         foreach (var file in files)
         {
             string culture;
             string category;
             ResXResourceFileHelper.Parse(file, out culture, out category);
             if (!string.IsNullOrEmpty(culture))
             {
                 yield return(new CultureInfo(culture));
             }
         }
     }
 }
예제 #5
0
        /// <summary>
        /// Adds the category.
        /// </summary>
        /// <param name="category">The category.</param>
        /// <param name="culture">The culture.</param>
        public void AddCategory(string category, string culture)
        {
            string filePath = Path.Combine(this.path, ResXResourceFileHelper.GetFileName(category, culture));

            XmlDocument document = GetResxDocument(filePath);

            if (document == null)
            {
                document = CreateResXDocument();
            }
            locker.AcquireWriterLock(Timeout.Infinite);
            try
            {
                document.Save(filePath);
            }
            finally
            {
                locker.ReleaseWriterLock();
            }
        }
예제 #6
0
        /// <summary>
        /// Gets the elements.
        /// </summary>
        /// <returns></returns>
        public IEnumerable <Element> GetElements()
        {
            locker.AcquireWriterLock(Timeout.Infinite);
            try
            {
                IEnumerable <Element> elements = new List <Element>();
                if (Directory.Exists(path))
                {
                    string[] files = Directory.GetFiles(path);

                    for (int i = 0; i < files.Length; i++)
                    {
                        string fileName = files[i];
                        if (fileName.EndsWith(".resx"))
                        {
                            XmlDocument doc = new XmlDocument();
                            doc.Load(files[i]);
                            string culture;
                            string category;
                            ResXResourceFileHelper.Parse(fileName, out culture, out category);

                            IEnumerable <Element> newElements = doc.Root.Elements("data")
                                                                .Select(x => new Element()
                            {
                                Category = category,
                                Culture  = culture,
                                Name     = x.Attribute("name").Value,
                                Value    = x.Element("value").Value
                            });

                            elements = elements.(newElements);
                        }
                    }
                }
                return(elements);
            }
            finally
            {
                locker.ReleaseWriterLock();
            }
        }
예제 #7
0
        /// <summary>
        /// Gets the categories.
        /// </summary>
        /// <returns></returns>
        public IEnumerable <ElementCategory> GetCategories()
        {
            if (Directory.Exists(path))
            {
                string[] files = Directory.GetFiles(path);
                foreach (var file in files)
                {
                    string culture;
                    string category;
                    ResXResourceFileHelper.Parse(file, out culture, out category);

                    if (!string.IsNullOrEmpty(category))
                    {
                        yield return(new ElementCategory()
                        {
                            Category = category, Culture = culture
                        });
                    }
                }
            }
        }
예제 #8
0
 /// <summary>
 /// Removes the category.
 /// </summary>
 /// <param name="category">The category.</param>
 /// <param name="culture">The culture.</param>
 /// <returns></returns>
 public bool RemoveCategory(string category, string culture)
 {
     locker.AcquireWriterLock(Timeout.Infinite);
     try
     {
         string[] files = Directory.GetFiles(path);
         foreach (var file in files)
         {
             string culture1;
             string category1;
             ResXResourceFileHelper.Parse(file, out culture1, out category1);
             if (StringExtensions.EqualsOrNullEmpty(category, category1, StringComparison.CurrentCultureIgnoreCase) && StringExtensions.EqualsOrNullEmpty(culture1, culture, StringComparison.CurrentCultureIgnoreCase))
             {
                 File.Delete(file);
             }
         }
         return(true);
     }
     finally
     {
         locker.ReleaseWriterLock();
     }
 }