Пример #1
0
        private static void db2files(Appsettings settings)
        {
            string path = settings.Db2FilesPath;

            string[] files = Directory.GetFiles(path, "*.json", SearchOption.TopDirectoryOnly);

            if (files.Any())
            {
                string mess = string.Format("All .json files in {0} will be deleted. Proceed? [Y/N] ", path);
                Console.Write(mess);
                string line = Console.ReadLine().ToLower();

                if (line.Last() != 'y')
                {
                    Console.WriteLine("Nothing has been changed");
                    Console.WriteLine("");
                    return;
                }

                foreach (string file in files)
                {
                    File.Delete(file);
                }
            }

            TranslateContext context = new TranslateContext(settings.ConnectionString);

            List <Language>         languages         = context.Languages.ToList();
            List <EnglishMessage>   englishMessages   = context.EnglishMessages.ToList();
            List <Translate>        translates        = context.Translates.ToList();
            List <TranslateVersion> translateVersions = context.TranslateVersions.ToList();


            foreach (Language language in languages)
            {
                Dictionary <string, string> translatesDict = new Dictionary <string, string>();
                foreach (EnglishMessage message in englishMessages)
                {
                    foreach (Translate translate in translates.Where(x =>
                                                                     x.EnglishMessageId == message.Id &&
                                                                     x.LanguageId == language.Id &&
                                                                     !x.Reference))
                    {
                        translatesDict.Add(message.Name, translate.Name);
                        foreach (TranslateVersion version in translateVersions.Where(x =>
                                                                                     x.TranslateId == translate.Id && !x.Reference))
                        {
                            translatesDict.Add(message.Name + "." + version.Version, version.Name);
                        }
                    }
                }
                string json = JsonConvert.SerializeObject(translatesDict, Formatting.Indented);
                File.WriteAllText(path + language.Code + ".json", json);
            }

            Console.WriteLine("{0} file(s) created", context.Languages.Count());
            Console.WriteLine("");
        }
Пример #2
0
        private static void files2db(string[] args, Appsettings settings)
        {
            if (!args.Any())
            {
                Console.WriteLine("Usage: translate db2files or translate 'files2db' 'all or en ru fr...'");
                return;
            }

            string path  = settings.Files2DbPath;
            Regex  regex = new Regex("^[A-za-z]{2}$");

            string[] files = Directory.GetFiles(path, "*.json", SearchOption.TopDirectoryOnly)
                             .Where(file => regex.IsMatch(Path.GetFileNameWithoutExtension(file))).ToArray();

            if (!files.Any())
            {
                Console.WriteLine("No valid *.json files found. Files must match xx.json pattern where x is a letter.");
                return;
            }

            if (args[0] == "all")
            {
                args = files.Select(x => Path.GetFileNameWithoutExtension(x)).ToArray();
            }

            string missing;

            TranslateContext context = new TranslateContext(settings.ConnectionString);

            var l = context.Languages;

            missing = args.FirstOrDefault(x => !context.Languages.Any(
                                              y => y.Code.Equals(x, StringComparison.InvariantCultureIgnoreCase)));

            if (missing != null)
            {
                Console.WriteLine("Languge {0} was not found in db", missing);
                return;
            }

            missing = args.FirstOrDefault(x => !files.Any(y =>
                                                          Path.GetFileNameWithoutExtension(y).Equals(x, StringComparison.InvariantCultureIgnoreCase)));

            if (missing != null)
            {
                Console.WriteLine("File {0}.json not found ", missing);
                return;
            }

            List <string> files2db = new List <string>();

            files2db.AddRange(files.Where(x => args.Any(
                                              y => Path.GetFileNameWithoutExtension(x).Equals(y, StringComparison.InvariantCultureIgnoreCase))));

            context.Database.BeginTransaction();

            try
            {
                loadFiles2Db(context, files2db);
                context.Database.CommitTransaction();
                Console.WriteLine("{0} file(s) processed", files2db.Count);
            }
            catch (Exception e)
            {
                context.Database.RollbackTransaction();

                string message = e.InnerException == null ? e.Message : e.InnerException.Message;

                Console.WriteLine("Translation failed with error message: {0}", message);
            }
        }
Пример #3
0
        private static void loadFiles2Db(TranslateContext context, List <string> files)
        {
            context.TranslateVersions.RemoveRange(context.TranslateVersions);
            context.Translates.RemoveRange(context.Translates);
            context.EnglishMessages.RemoveRange(context.EnglishMessages);

            context.SaveChanges();

            JsonSerializerSettings settings = new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            };

            foreach (string file in files)
            {
                Language language = context.Languages.First(x => x.Code.Equals(Path.GetFileNameWithoutExtension(file),
                                                                               StringComparison.InvariantCultureIgnoreCase));

                string json = File.ReadAllText(file);
                List <EnglishMessage> messages = JsonConvert.DeserializeObject <List <EnglishMessage> >(json, settings);
                foreach (EnglishMessage message in messages)
                {
                    if (message.Translates != null)
                    {
                        foreach (Translate t in message.Translates)
                        {
                            t.Language = language;
                            t.Message  = message;
                        }
                    }

                    EnglishMessage dbmess = context.EnglishMessages.FirstOrDefault(x => x.Name.Equals(message.Name, StringComparison.InvariantCultureIgnoreCase));
                    if (dbmess == null)
                    {
                        context.EnglishMessages.Add(message);
                        continue;
                    }

                    Translate translate;

                    if (message.Translates == null || !message.Translates.Any())
                    {
                        translate = dbmess.Translates.FirstOrDefault(x => x.LanguageId == language.Id);
                        if (translate != null)
                        {
                            dbmess.Translates.Remove(translate);
                        }
                        continue;
                    }

                    translate = message.Translates.First();

                    if (dbmess.Translates == null)
                    {
                        dbmess.Translates = new List <Translate>();
                    }

                    Translate t2r = dbmess.Translates.FirstOrDefault(x =>
                                                                     x.Name.Equals(translate.Name, StringComparison.InvariantCultureIgnoreCase) &&
                                                                     x.LanguageId == language.Id);

                    if (t2r != null)
                    {
                        dbmess.Translates.Remove(t2r);
                    }

                    translate.Message = dbmess;
                    dbmess.Translates.Add(translate);
                }
                context.SaveChanges();
            }
        }