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); }
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; }
public static int TotalCountOfMissingStrings() { return(SourceFileStems.Sum(fileSterm => CountOfMissingStrings(fileSterm))); }