Example #1
0
        public static bool CleanUnknownStrings()
        {
            var unknownStringsDoc           = new XDocument(new XElement("strings"));
            var needToSaveUnknownStringsDoc = false;

            if (!Directory.Exists(Settings.TargetLocalizationDirectory))
            {
                return(false);
            }

            foreach (var sterm in GetTargetFileStems())
            {
                var targetFilePath = GetTargetDocumentPath(sterm);
                var targetFile     = XDocument.Load(targetFilePath);

                //if source file is absent, then delete this target file
                if (!SourceFileStems.Contains(sterm))
                {
                    unknownStringsDoc.Root.Add(new XComment(sterm));
                    if (targetFile.Root != null)
                    {
                        unknownStringsDoc.Root.Add(targetFile.Root.Elements());
                    }
                    File.Delete(targetFilePath);
                    unknownStringsDoc.Save(Settings.UnknownStringsFilePath);
                    return(true);
                }

                var sourceKeys  = SourceFilesBySterm[sterm].Root.Elements().Attributes("key").Select(f => f.Value);
                var targetKeys  = targetFile.Root.Elements().Attributes("key").Select(f => f.Value);
                var unknownKeys = targetKeys.Except(sourceKeys).ToList();

                if (unknownKeys.Any())
                {
                    needToSaveUnknownStringsDoc = true;
                    unknownStringsDoc.Root.Add(new XComment(sterm));
                    unknownKeys.ForEach(key =>
                    {
                        var elementToRemove =
                            targetFile.Root.Elements("string").FirstOrDefault(e => e.Attribute("key").Value == key);
                        unknownStringsDoc.Root.Add(elementToRemove);
                        elementToRemove.Remove();
                    });
                    targetFile.Save(targetFilePath);
                    if (!_changedTargetFiles.Contains(sterm))
                    {
                        _changedTargetFiles.Add(sterm);
                    }
                }
            }

            if (needToSaveUnknownStringsDoc)
            {
                unknownStringsDoc.Save(Settings.UnknownStringsFilePath);
            }

            return(needToSaveUnknownStringsDoc);
        }
Example #2
0
        public static void FilterDataSource(string search, bool isFlaged)
        {
            search = search.ToLower();
            _stringsCurrentDataSource = new Dictionary <string, List <string> >();
            if (isFlaged && !File.Exists(Settings.FlagsFilePath))
            {
                return;
            }

            if (string.IsNullOrEmpty(search) && !isFlaged)
            {
                foreach (var file in SourceFileStems)
                {
                    _stringsCurrentDataSource[file] = GetStringKeys(file).ToList();
                }
                return;
            }

            if (isFlaged)
            {
                //filter by Flags
                var flagDocument = GetFlagsDocument();
                foreach (var el in flagDocument.Root.Elements("Flag").OrderBy(el => el.Attribute("File").Value).ToList())
                {
                    var file = el.Attribute("File").Value;
                    if (!SourceFileStems.Contains(file))
                    {
                        continue;
                    }

                    var key = el.Attribute("Key").Value;
                    if (!GetStringKeys(file).Contains(key))
                    {
                        continue;
                    }

                    List <string> keys;
                    if (!_stringsCurrentDataSource.TryGetValue(file, out keys))
                    {
                        _stringsCurrentDataSource[file] = new List <string>();
                    }
                    _stringsCurrentDataSource[file].Add(key);
                }
                if (!string.IsNullOrEmpty(search))
                {
                    //filter by search
                    var files = _stringsCurrentDataSource.Keys.ToList();
                    foreach (var file in files)
                    {
                        var keys = new List <string>(_stringsCurrentDataSource[file]);
                        foreach (var key in keys)
                        {
                            var sourceValue = GetSourceString(file, key);
                            var targetValue = GetTargetString(file, key);
                            if (!sourceValue.ToLower().Contains(search) && !key.ToLower().Contains(search))
                            {
                                if (string.IsNullOrEmpty(targetValue) || !targetValue.ToLower().Contains(search))
                                {
                                    _stringsCurrentDataSource[file].Remove(key);
                                }
                            }
                        }
                        if (!_stringsCurrentDataSource[file].Any())
                        {
                            _stringsCurrentDataSource.Remove(file);
                        }
                    }
                }
                return;
            }
            //filter only by Search term
            foreach (var file in SourceFileStems)
            {
                var sourceFile     = SourceFilesBySterm[file];
                var targetFile     = GetTargetDocument(file);
                var sourceElements =
                    sourceFile.Root.Elements("string").Where(
                        el =>
                        el.Attribute("key").Value.ToLower().Contains(search) || el.Attribute("value").Value.ToLower().Contains(search)).
                    Select(el => el.Attribute("key").Value).ToList();
                if (targetFile != null)
                {
                    var targetValues =
                        targetFile.Root.Elements("string").Where(el => el.Attribute("value").Value.ToLower().Contains(search)).Select(
                            el => el.Attribute("key").Value).ToList();
                    sourceElements = targetValues.Except(sourceElements).Union(sourceElements).ToList();
                }
                if (!sourceElements.Any())
                {
                    continue;
                }

                _stringsCurrentDataSource[file] = new List <string>();
                sourceElements.ForEach(el => _stringsCurrentDataSource[file].Add(el));
            }
            return;
        }
Example #3
0
 public static int TotalCountOfMissingStrings()
 {
     return(SourceFileStems.Sum(fileSterm => CountOfMissingStrings(fileSterm)));
 }