public void SetResxInfo(string fileName)
        {
            Clear();

            using (ResXResourceReader reader = new ResXResourceReader(fileName))
            {
                reader.UseResXDataNodes = true;
                reader.BasePath         = IOPath.GetDirectoryName(fileName);
                resxBaseName            = reader.BasePath;

                try
                {
                    foreach (var value in reader
                             .OfType <DictionaryEntry>()
                             .Select(en => (ResXDataNode)en.Value)
                             .OrderBy(value => value.Name))
                    {
                        AddItem(value);
                    }
                }
                catch (ArgumentException)
                {
                }
            }
        }
예제 #2
0
        private void Initialize()
        {
            try
            {
                ResXResourceReader reader = new ResXResourceReader(m_filename);

                IEnumerable <DictionaryEntry> enumerator = reader.OfType <DictionaryEntry>();

                if (enumerator == null)
                {
                    m_entriesInitialized = false;
                }
                else
                {
                    m_entries = (from ent in enumerator
                                 select new ResourceEntry(ent)).ToList();
                    m_totalCharacterCount = (int)m_entries.Sum(w => w.OriginalValue.Length);
                    m_entriesInitialized  = true;
                }

                reader.Close();
            }
            catch
            {
                m_entriesInitialized = false;
            }
        }
예제 #3
0
        public void CreateNewTranslation()
        {
            const string NewLanguage = ".es.resx";

            var nlFiles = Directory.GetFiles(@"C:\code\TribalWars\TWTactics\TribalWars", "*.nl.resx", SearchOption.AllDirectories);

            foreach (var nlFile in nlFiles)
            {
                var nlRes  = new ResXResourceReader(nlFile);
                var engRes = new ResXResourceReader(nlFile.Replace(".nl.resx", ".resx"));

                //var newFileName = nlFile.Replace(".nl.resx", NewLanguage);
                //var newFile = File.Create(newFileName);
                //var newRes = new ResXResourceWriter(newFile);

                if (IsFormResx(nlFile))
                {
                }

                Debug.WriteLine("");
                Debug.WriteLine("");
                Debug.WriteLine("");
                Debug.WriteLine(nlFile);
                Debug.WriteLine("-------------------------------------------");
                foreach (DictionaryEntry entry in nlRes.OfType <DictionaryEntry>().Where(IsRelevant))
                {
                    Debug.WriteLine(entry.Key + ": " + entry.Value);
                }
            }
        }
        private Dictionary <string, string> GetResources(ModuleInfo module)
        {
            var currentLanguage = System.Threading.Thread.CurrentThread.CurrentCulture.Name;

            System.IO.FileInfo fi = new System.IO.FileInfo(HttpContext.Current.Server.MapPath(string.Format(Constants.Properties.LOCALIZATION_PATH_FORMAT, _moduleContext.Configuration.ModuleControl.ControlSrc, currentLanguage)));
            string             physResourceFile = string.Format(Constants.Properties.PHYSICAL_FILE_FORMAT, fi.DirectoryName, Constants.Resources, fi.Name);
            string             relResourceFile  = string.Format(Constants.Properties.RELATIVE_FILE_FORMAT, Constants.DesktopModules, module.DesktopModule.FolderName, Constants.Resources, fi.Name);

            if (File.Exists(physResourceFile))
            {
                using (var rsxr = new ResXResourceReader(physResourceFile))
                {
                    var res = rsxr.OfType <DictionaryEntry>()
                              .ToDictionary(
                        entry => entry.Key.ToString().Replace(Constants.DOT, Constants.UNDERSCORE),
                        entry => Localization.GetString(entry.Key.ToString(), relResourceFile));

                    return(res);
                }
            }
            return(new Dictionary <string, string>());
        }
예제 #5
0
        private Dictionary <string, string> GetResources(ModuleInfo module)
        {
            var currentLanguage = System.Threading.Thread.CurrentThread.CurrentCulture.Name;

            System.IO.FileInfo fi = new System.IO.FileInfo(HttpContext.Current.Server.MapPath("~/" + _moduleContext.Configuration.ModuleControl.ControlSrc + "." + currentLanguage + ".resx"));
            //System.IO.FileInfo fi = new System.IO.FileInfo(HttpContext.Current.Server.MapPath("~/" + _moduleContext.Configuration.ModuleControl.ControlSrc + ".resx"));
            string physResourceFile = fi.DirectoryName + "/App_LocalResources/" + fi.Name;
            string relResourceFile  = "/DesktopModules/" + module.DesktopModule.FolderName + "/App_LocalResources/" + fi.Name;

            if (File.Exists(physResourceFile))
            {
                using (var rsxr = new ResXResourceReader(physResourceFile))
                {
                    var res = rsxr.OfType <DictionaryEntry>()
                              .ToDictionary(
                        entry => entry.Key.ToString().Replace(".", "_"),
                        entry => Localization.GetString(entry.Key.ToString(), relResourceFile));

                    return(res);
                }
            }
            return(new Dictionary <string, string>());
        }
예제 #6
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);
        }