Exemplo n.º 1
0
        public IEnumerable <ResWord> GetListResWords(ResCurrent current, string search)
        {
            var dbManager = GetDb();
            var exist     = new SqlQuery(ResDataTable + " rd3")
                            .Select("rd3.title")
                            .Where("rd3.fileid = rd1.fileid")
                            .Where("rd3.title = concat('del_', rd1.title)")
                            .Where("rd3.cultureTitle = rd1.cultureTitle");

            var sql = new SqlQuery(ResDataTable + " rd1")
                      .Select("rd1.title", "rd1.fileid", "rd1.textValue", "rd1.description", "rd1.flag", "rd1.link", "rf.resName", "rd2.id", "rd2.flag", "rd2.textValue")
                      .LeftOuterJoin(ResDataTable + " rd2", Exp.EqColumns("rd1.fileid", "rd2.fileid") & Exp.EqColumns("rd1.title", "rd2.title") & Exp.Eq("rd2.cultureTitle", current.Language.Title))
                      .InnerJoin(ResFilesTable + " rf", Exp.EqColumns("rf.ID", "rd1.fileID"))
                      .Where("rd1.cultureTitle", "Neutral")
                      .Where("rd1.flag != 4")
                      .Where("rd1.resourceType", "text")
                      .Where(!Exp.Like("rd1.title", @"del\_", SqlLike.StartWith) & !Exp.Exists(exist))
                      .OrderBy("rd1.id", true);

            if (current.Module != null && !string.IsNullOrEmpty(current.Module.Name))
            {
                sql.Where("rf.moduleName", current.Module.Name);
            }

            if (current.Project != null && !string.IsNullOrEmpty(current.Project.Name))
            {
                sql.Where("rf.projectName", current.Project.Name);
            }

            if (current.Word != null && current.Word.ResFile != null && !string.IsNullOrEmpty(current.Word.ResFile.FileName))
            {
                sql.Where("rf.resName", current.Word.ResFile.FileName);
            }

            if (!string.IsNullOrEmpty(search))
            {
                sql.Where(Exp.Like("rd1.textvalue", search));
            }

            return(dbManager.ExecuteList(sql).ConvertAll(r =>
            {
                var word = GetWord(r);
                word.ResFile.FileName = Convert.ToString(r[6]);

                if (r[7] != null)
                {
                    word.Status = (int)r[8] == 3 ? WordStatusEnum.Changed : WordStatusEnum.Translated;
                    word.ValueTo = Convert.ToString(r[9]);
                }
                else
                {
                    word.Status = WordStatusEnum.Untranslated;
                }

                return word;
            }).OrderBy(r => r.ValueFrom));
        }
Exemplo n.º 2
0
        public void GetListModules(ResCurrent currentData)
        {
            var dbManager = GetDb();
            var notExist  = new SqlQuery(ResDataTable + " rd1")
                            .Select("1")
                            .Where("rd1.fileid = rd.fileid")
                            .Where("rd1.title = concat('del_', rd.title)")
                            .Where("rd1.cultureTitle = 'Neutral'");

            var exist = new SqlQuery(ResDataTable + " rd2")
                        .Select("1")
                        .Where("rd2.fileid = rd.fileid")
                        .Where("rd2.title = rd.title")
                        .Where("rd2.cultureTitle = 'Neutral'");

            var sql = new SqlQuery(ResFilesTable + " rf").Select("rf.moduleName",
                                                                 string.Format("sum(case rd.cultureTitle when '{0}' then (case rd.flag when 3 then 0 else 1 end) else 0 end)", currentData.Language.Title),
                                                                 string.Format("sum(case rd.cultureTitle when '{0}' then (case rd.flag when 3 then 1 else 0 end) else 0 end)", currentData.Language.Title),
                                                                 string.Format("sum(case rd.cultureTitle when '{0}' then 1 else 0 end)", "Neutral"))
                      .InnerJoin(ResDataTable + " rd", Exp.EqColumns("rd.fileid", "rf.id"))
                      .Where("rf.projectName", currentData.Project.Name)
                      .Where("rd.resourceType", "text")
                      .Where(!Exp.Like("rd.title", @"del\_", SqlLike.StartWith) & Exp.Exists(exist) & !Exp.Exists(notExist))
                      .GroupBy("moduleName");


            dbManager.ExecuteList(sql).ForEach(r =>
            {
                var module = currentData.Project.Modules.Find(mod => mod.Name == r[0].ToString());
                if (module == null)
                {
                    return;
                }
                module.Counts[WordStatusEnum.Translated]   = Convert.ToInt32(r[1]);
                module.Counts[WordStatusEnum.Changed]      = Convert.ToInt32(r[2]);
                module.Counts[WordStatusEnum.All]          = Convert.ToInt32(r[3]);
                module.Counts[WordStatusEnum.Untranslated] = module.Counts[WordStatusEnum.All] - module.Counts[WordStatusEnum.Changed] - module.Counts[WordStatusEnum.Translated];
            });
        }
Exemplo n.º 3
0
        public IEnumerable <ResWord> GetListResWords(ResCurrent current, string search)
        {
            IQueryable <TempResData> exist = DbContext.ResData
                                             .Where(r => r.Flag != 4)
                                             .Where(r => r.ResourceType == "text")
                                             .Where(r => r.CultureTitle == "Neutral")
                                             .Join(DbContext.ResData.DefaultIfEmpty(), r => new { r.FileId, r.Title }, r => new { r.FileId, r.Title }, (r1, r2) => new { r1, r2 })
                                             .Join(DbContext.ResFiles, r => r.r1.FileId, f => f.Id, (d, f) => new TempResData {
                R1 = d.r1, R2 = d.r2, RF = f
            })
                                             .Where(r => r.R2.CultureTitle == current.Language.Title)
                                             .Where(r => !r.R1.Title.StartsWith(@"del\_"))
                                             .Where(r =>
                                                    !DbContext.ResData
                                                    .Where(d => d.FileId == r.R1.FileId)
                                                    .Where(d => d.Title == "del_" + r.R1.Title)
                                                    .Where(d => d.CultureTitle == r.R1.CultureTitle)
                                                    .Any()
                                                    )
                                             .OrderBy(r => r.R1.Id);

            if (current.Module != null && !string.IsNullOrEmpty(current.Module.Name))
            {
                exist = exist.Where(r => r.RF.ModuleName == current.Module.Name);
            }

            if (current.Project != null && !string.IsNullOrEmpty(current.Project.Name))
            {
                exist = exist.Where(r => r.RF.ProjectName == current.Project.Name);
            }

            if (current.Word != null && current.Word.ResFile != null && !string.IsNullOrEmpty(current.Word.ResFile.FileName))
            {
                exist = exist.Where(r => r.RF.ResName == current.Word.ResFile.FileName);
            }

            if (!string.IsNullOrEmpty(search))
            {
                exist = exist.Where(r => r.R1.TextValue == search);
            }

            return(exist.ToList().Select(r =>
            {
                var word = new ResWord
                {
                    Title = r.R1.Title,
                    ResFile = new ResFile
                    {
                        FileID = r.R1.FileId
                    },
                    ValueFrom = r.R1.TextValue,
                    TextComment = r.R1.Description,
                    Flag = r.R1.Flag,
                    Link = r.R1.Link
                };
                word.ResFile.FileName = r.RF.ResName;

                if (r.R2 != null)
                {
                    word.Status = r.R2.Flag == 3 ? WordStatusEnum.Changed : WordStatusEnum.Translated;
                    word.ValueTo = r.R2.TextValue;
                }
                else
                {
                    word.Status = WordStatusEnum.Untranslated;
                }

                return word;
            }).OrderBy(r => r.ValueFrom));
        }
Exemplo n.º 4
0
        public static void Export(ResourceData resourceData, string project, string module, string fName, string language, string exportPath, string key = null)
        {
            var filter = new ResCurrent
            {
                Project = new ResProject {
                    Name = project
                },
                Module = new ResModule {
                    Name = module
                },
                Language = new ResCulture {
                    Title = language
                },
                Word = new ResWord()
                {
                    ResFile = new ResFile()
                    {
                        FileName = fName
                    }
                }
            };

            var words = resourceData.GetListResWords(filter, string.Empty).GroupBy(x => x.ResFile.FileID).ToList();

            if (!words.Any())
            {
                Console.WriteLine("Error!!! Can't find appropriate project and module. Possibly wrong names!");
                return;
            }

            foreach (var fileWords in words)
            {
                var wordsDictionary = new Dictionary <string, object>();

                var firstWord = fileWords.FirstOrDefault();
                var fileName  = firstWord == null
                    ? module
                    : Path.GetFileNameWithoutExtension(firstWord.ResFile.FileName);
                var zipFileName = Path.Combine(exportPath, $"{fileName}{(language == "Neutral" ? string.Empty : "." + language)}.resx");
                var dirName     = Path.GetDirectoryName(zipFileName);
                if (!Directory.Exists(dirName))
                {
                    Directory.CreateDirectory(dirName);
                }

                var toAdd = new List <ResWord>();

                if (!string.IsNullOrEmpty(key))
                {
                    var keys = key.Split(",").Distinct();

                    if (File.Exists(zipFileName))
                    {
                        using var resXResourceReader = new ResXResourceReader(zipFileName);
                        foreach (var v in resXResourceReader.Cast <DictionaryEntry>())
                        {
                            toAdd.Add(new ResWord {
                                Title = v.Key.ToString(), ValueTo = v.Value?.ToString()
                            });
                        }
                    }

                    foreach (var k in keys)
                    {
                        if (!toAdd.Any(r => r.Title == k))
                        {
                            var exists = fileWords.FirstOrDefault(r => r.Title == k);
                            if (exists != null)
                            {
                                toAdd.Add(exists);
                            }
                        }
                    }
                }
                else
                {
                    toAdd.AddRange(fileWords.Where(word => !wordsDictionary.ContainsKey(word.Title)));
                }

                using var resXResourceWriter = new ResXResourceWriter(zipFileName);

                foreach (var word in toAdd.Where(r => r != null && (!string.IsNullOrEmpty(r.ValueTo) || language == "Neutral")).OrderBy(x => x.Title))
                {
                    resXResourceWriter.AddResource(word.Title, word.ValueTo);
                }

                resXResourceWriter.Generate();
                resXResourceWriter.Close();
            }
        }
Exemplo n.º 5
0
        public static bool Export(IServiceProvider serviceProvider, string project, string module, string fName, string language, string exportPath, string key = null)
        {
            var filter = new ResCurrent
            {
                Project = new ResProject {
                    Name = project
                },
                Module = new ResModule {
                    Name = module
                },
                Language = new ResCulture {
                    Title = language
                },
                Word = new ResWord()
                {
                    ResFile = new ResFile()
                    {
                        FileName = fName
                    }
                }
            };

            using var scope = serviceProvider.CreateScope();
            var resourceData = scope.ServiceProvider.GetService <ResourceData>();
            var words        = resourceData.GetListResWords(filter, string.Empty).GroupBy(x => x.ResFile.FileID).ToList();

            if (!words.Any())
            {
                Console.WriteLine($"db empty file:{fName}, lang:{language}");
                return(false);
            }

            foreach (var fileWords in words)
            {
                var wordsDictionary = new Dictionary <string, object>();

                var firstWord = fileWords.FirstOrDefault();
                var fileName  = firstWord == null
                    ? module
                    : Path.GetFileNameWithoutExtension(firstWord.ResFile.FileName);
                var zipFileName = Path.Combine(exportPath, $"{fileName}{(language == "Neutral" ? string.Empty : "." + language)}.resx");
                var dirName     = Path.GetDirectoryName(zipFileName);
                if (!Directory.Exists(dirName))
                {
                    Directory.CreateDirectory(dirName);
                }

                var toAdd      = new List <ResWord>();
                var toAddFiles = new Dictionary <string, ResXFileRef>();

                if (!string.IsNullOrEmpty(key))
                {
                    var keys = key.Split(",").Distinct();

                    if (File.Exists(zipFileName))
                    {
                        using var resXResourceReader        = new ResXResourceReader(zipFileName);
                        resXResourceReader.BasePath         = Path.GetDirectoryName(zipFileName);
                        resXResourceReader.UseResXDataNodes = true;

                        foreach (var v in resXResourceReader.OfType <DictionaryEntry>())
                        {
                            var k   = v.Key.ToString();
                            var val = v.Value as ResXDataNode;

                            if (keys.Any())
                            {
                                if (val.FileRef != null)
                                {
                                    var fileRef = new ResXFileRef(Path.GetFileName(val.FileRef.FileName), val.FileRef.TypeName);
                                    toAddFiles.Add(k, fileRef);
                                }
                                else
                                {
                                    if (!keys.Any(r => r.EndsWith("*") && k.StartsWith(r.Replace("*", ""))) && (!k.Contains("_") || k.StartsWith("subject_") || k.StartsWith("pattern_")))
                                    {
                                        k = keys.FirstOrDefault(r => r == k);
                                    }

                                    if (k != null)
                                    {
                                        var word = fileWords.FirstOrDefault(r => r.Title == k);
                                        if (word != null)
                                        {
                                            toAdd.Add(word);
                                        }
                                        else
                                        {
                                            toAdd.Add(new ResWord()
                                            {
                                                Title = k, ValueTo = val.GetValue((ITypeResolutionService)null)?.ToString()
                                            });
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (val.FileRef != null)
                                {
                                    var fileRef = new ResXFileRef(Path.GetFileName(val.FileRef.FileName), val.FileRef.TypeName);
                                    toAddFiles.Add(k, fileRef);
                                }
                                else
                                {
                                    toAdd.Add(new ResWord {
                                        Title = k, ValueTo = val.GetValue((ITypeResolutionService)null)?.ToString()
                                    });
                                }
                            }
                        }
                    }

                    foreach (var k in keys)
                    {
                        if (!toAdd.Any(r => r.Title == k))
                        {
                            var exists = fileWords.FirstOrDefault(r => r.Title == k);
                            if (exists != null)
                            {
                                toAdd.Add(exists);
                            }
                        }
                    }
                }
                else
                {
                    if (File.Exists(zipFileName))
                    {
                        using var resXResourceReader        = new ResXResourceReader(zipFileName);
                        resXResourceReader.BasePath         = Path.GetDirectoryName(zipFileName);
                        resXResourceReader.UseResXDataNodes = true;

                        foreach (var v in resXResourceReader.OfType <DictionaryEntry>())
                        {
                            var k   = v.Key.ToString();
                            var val = v.Value as ResXDataNode;

                            if (val.FileRef != null)
                            {
                                var fileRef = new ResXFileRef(Path.GetFileName(val.FileRef.FileName), val.FileRef.TypeName);
                                toAddFiles.Add(k, fileRef);
                            }
                        }
                    }

                    toAdd.AddRange(fileWords.Where(word => !wordsDictionary.ContainsKey(word.Title)));
                }



                using var resXResourceWriter = new ResXResourceWriter(zipFileName);

                foreach (var word in toAdd.Where(r => r != null && (!string.IsNullOrEmpty(r.ValueTo) || language == "Neutral")).OrderBy(x => x.Title))
                {
                    resXResourceWriter.AddResource(word.Title, word.ValueTo);
                }

                foreach (var f in toAddFiles)
                {
                    resXResourceWriter.AddResource(new ResXDataNode(f.Key, f.Value));
                }

                resXResourceWriter.Generate();
                resXResourceWriter.Close();
            }

            return(true);
        }
Exemplo n.º 6
0
        public static void Export(IServiceProvider serviceProvider, string project, string module, string fName, string language, string exportPath, string key = null)
        {
            var filter = new ResCurrent
            {
                Project = new ResProject {
                    Name = project
                },
                Module = new ResModule {
                    Name = module
                },
                Language = new ResCulture {
                    Title = language
                },
                Word = new ResWord {
                    ResFile = new ResFile {
                        FileName = fName
                    }
                }
            };

            using var scope = serviceProvider.CreateScope();
            var resourceData = scope.ServiceProvider.GetService <ResourceData>();
            var words        = resourceData.GetListResWords(filter, string.Empty).GroupBy(x => x.ResFile.FileID).ToList();

            if (!words.Any())
            {
                Console.WriteLine("Error!!! Can't find appropriate project and module. Possibly wrong names!");
                return;
            }

            foreach (var fileWords in words)
            {
                var wordsDictionary = new Dictionary <string, object>();
                var firstWord       = fileWords.FirstOrDefault();
                var fileName        = firstWord == null
                    ? module
                    : Path.GetFileNameWithoutExtension(firstWord.ResFile.FileName);
                var zipFileName = Path.Combine(exportPath, language == "Neutral" ? "en" : language, $"{fileName}.json");

                var dirName = Path.GetDirectoryName(zipFileName);
                if (!Directory.Exists(dirName))
                {
                    Directory.CreateDirectory(dirName);
                }

                var toAdd = new List <ResWord>();
                if (!string.IsNullOrEmpty(key))
                {
                    if (File.Exists(zipFileName))
                    {
                        var jObject = JObject.Parse(File.ReadAllText(zipFileName));
                        foreach (var j in jObject)
                        {
                            toAdd.Add(new ResWord {
                                Title = j.Key, ValueFrom = j.Value.ToString()
                            });
                        }
                    }

                    if (!toAdd.Any(r => r.Title == key))
                    {
                        toAdd.Add(fileWords.FirstOrDefault(r => r.Title == key));
                    }
                }
                else
                {
                    toAdd.AddRange(fileWords.OrderBy(x => x.Title).Where(word => !wordsDictionary.ContainsKey(word.Title)));
                }

                foreach (var word in toAdd.Where(r => r != null))
                {
                    if (string.IsNullOrEmpty(word.ValueTo))
                    {
                        continue;
                    }

                    var newVal = word.ValueTo ?? word.ValueFrom;

                    if (!string.IsNullOrEmpty(newVal))
                    {
                        newVal = newVal.TrimEnd('\n').TrimEnd('\r');
                    }

                    var newKey = GetKey(word.Title, newVal);
                    wordsDictionary.Add(newKey.Keys.First(), newKey.Values.First());
                }

                using TextWriter writer = new StreamWriter(zipFileName);

                var obj = JsonConvert.SerializeObject(wordsDictionary, Formatting.Indented);
                writer.Write(obj);
            }
        }