Beispiel #1
0
        protected IEnumerable <ITranslationDumper> GetScenarioTextMergers()
        {
            if (!TextDump.IsReadyForFinalDump())
            {
                yield break;
            }
            var needle = CombinePaths("", "abdata", "adv", "scenario", "");
            var paths  = BaseTextDumpPlugin.GetTranslationPaths().Where(k => k.Contains(needle)).ToList();

            paths.Sort();
            paths.Reverse();
            var personalityCheckChars = "01234567890-".ToCharArray();

            var mappings = new Dictionary <string, Dictionary <string, string> >();
            var fileMaps = new Dictionary <string, List <string> >();

            foreach (var path in paths)
            {
                var parts            = path.Split(PathSplitter).ToList();
                var personalityIndex = parts.IndexOf("scenario") + 1;
                if (personalityIndex == 0)
                {
                    continue;
                }
                var personality       = parts[personalityIndex];
                var isPersonalityFile = personality.Length > 1 && personality.StartsWith("c") &&
                                        personalityCheckChars.Contains(personality[1]);
                if (!isPersonalityFile)
                {
                    continue;
                }

                var personalityMap = mappings.GetOrInit(personality,
                                                        () => new Dictionary <string, string>(new TrimmedStringComparer()));

                var personalityFiles = fileMaps.GetOrInit(personality);

                personalityFiles.Add(path);

                foreach (var entry in BaseTextDumpPlugin.GetTranslationsForPath(path)
                         .Where(entry => !entry.Value.IsNullOrEmpty()))
                {
                    AddLocalizationToResults(personalityMap, entry);
                }
            }

            foreach (var translationDumper in BuildTranslationMergers(fileMaps, mappings))
            {
                yield return(translationDumper);
            }
        }
Beispiel #2
0
        protected IEnumerable <ITranslationDumper> GetCommunicationTextMergers()
        {
            if (!TextDump.IsReadyForFinalDump())
            {
                yield break;
            }
            var needle = CombinePaths("", "abdata", "communication", "");
            var paths  = BaseTextDumpPlugin.GetTranslationPaths().Where(k => k.Contains(needle)).ToList();

            paths.Sort();
            paths.Reverse();

            var splitter = new HashSet <char> {
                Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar
            }.ToArray();

            var mappings = new Dictionary <string, Dictionary <string, string> >();
            var fileMaps = new Dictionary <string, List <string> >();

            foreach (var path in paths)
            {
                var parent = Path.GetFileName(Path.GetDirectoryName(path));
                if (parent is null)
                {
                    continue;
                }
                var personalityMap = mappings.GetOrInit(parent,
                                                        () => new Dictionary <string, string>(new TrimmedStringComparer()));
                var personalityFiles = fileMaps.GetOrInit(parent);

                personalityFiles.Add(path);

                foreach (var entry in BaseTextDumpPlugin.GetTranslationsForPath(path)
                         .Where(entry => !entry.Value.IsNullOrEmpty()))
                {
                    AddLocalizationToResults(personalityMap, entry);
                }
            }

            foreach (var translationDumper in BuildTranslationMergers(fileMaps, mappings))
            {
                yield return(translationDumper);
            }
        }
Beispiel #3
0
        protected IEnumerable <ITranslationDumper> BuildTranslationMergers(Dictionary <string, List <string> > fileMaps,
                                                                           Dictionary <string, Dictionary <string, string> > mappings)
        {
            foreach (var personalityFileMap in fileMaps)
            {
                var personality      = personalityFileMap.Key;
                var personalityMap   = mappings[personality];
                var personalityFiles = personalityFileMap.Value;

                foreach (var path in personalityFiles)
                {
                    var mapPath = path.Substring(TextDump.AssetsRoot.Length).TrimStart(PathSplitter);
                    mapPath = CombinePaths(Path.GetDirectoryName(mapPath), Path.GetFileNameWithoutExtension(mapPath));

                    var toUpdate = new HashSet <string>(BaseTextDumpPlugin.GetTranslationsForPath(path)
                                                        .Where(e => e.Value.IsNullOrWhiteSpace()).Select(e => e.Key));

                    if (toUpdate.Count == 0)
                    {
                        continue;
                    }

                    IDictionary <string, string> Dumper()
                    {
                        var result = new OrderedDictionary <string, string>();

                        foreach (var key in toUpdate)
                        {
                            if (personalityMap.TryGetValue(key, out var match))
                            {
                                AddLocalizationToResults(result, key, match);
                            }
                        }

                        return(result);
                    }

                    yield return(new StringTranslationDumper(mapPath, Dumper));
                }
            }
        }