コード例 #1
0
        private IEnumerator StudioDump <T>(string currentRoot, string topLevelFileName, Dictionary <int, T> infoList)
            where T : LoadCommonInfo
        {
            yield return(new WaitUntilStable(infoList, infoList.Count > 0 ? 1 : 3));

            var groupResults = GetTranslationsForPath(CombinePaths(currentRoot, topLevelFileName));

            foreach (var grouping in infoList.Where(e => IsMod(e.Key)).Select(e => e.Value)
                     .GroupBy(GetStudioGrouping).OrderBy(g => g.Key, StringComparer.OrdinalIgnoreCase))
            {
                var names = grouping.Select(i => i.name).Where(n => !groupResults.ContainsKey(n)).Select(
                    origName =>
                {
                    var shouldInclude = ShouldIncludeEntry(origName, out var translatedName);
                    var result        = new { origName, translatedName };
                    return(new { shouldInclude, result });
                }).Where(r => r.shouldInclude && r.result.origName != r.result.translatedName)
                            .Select(r => r.result)
                            .OrderBy(n => n.origName, StringComparer.OrdinalIgnoreCase)
                            .ToList();
                if (names.Count < 1)
                {
                    continue;
                }
                TextResourceHelper.AddLocalizationToResults(groupResults, $"{FilePattern}{grouping.Key}",
                                                            FilePattern);

                foreach (var entry in names)
                {
                    TextResourceHelper.AddLocalizationToResults(groupResults, entry.origName, entry.translatedName);
                }
            }
        }
コード例 #2
0
        private IEnumerator StudioDump <T>(string currentRoot, string topLevelFileName,
                                           Dictionary <int, Dictionary <int, Dictionary <int, T> > > nestedInfoList,
                                           Dictionary <int, GroupInfo> groupInfoList)
            where T : LoadCommonInfo
        {
            var jobs = new List <Coroutine>
            {
                StartCoroutine(WaitForStableDictionary(nestedInfoList)),
                StartCoroutine(WaitForStableDictionary(groupInfoList))
            };

            foreach (var job in jobs)
            {
                yield return(job);
            }

            jobs.Clear();

            var groupResults = GetTranslationsForPath(CombinePaths(currentRoot, topLevelFileName));

            foreach (var group in nestedInfoList.Select(group =>
            {
                var groupRoot = CombinePaths(currentRoot, $"group_{group.Key:D10}");
                var groupInfo = GetStudioGroupInfo(groupInfoList, group.Key);
                var groupName = groupInfo?.name ?? string.Empty;
                return(new { group, groupRoot, groupInfo, groupName });
            }).OrderBy(g => g.groupRoot, StringComparer.OrdinalIgnoreCase))
            {
                var categoryResults = GetTranslationsForPath(CombinePaths(group.groupRoot, "category_names.txt"));

                if (ShouldIncludeEntry(group.groupName, out var groupNameTrans))
                {
                    TextResourceHelper.AddLocalizationToResults(groupResults, group.groupName, groupNameTrans);
                }


                foreach (var category in group.group.Value.Select(category =>
                {
                    var categoryName = GetStudioGroupCategoryName(group.groupInfo, category.Key);
                    var categoryFileName = $"category_{category.Key:D10}.txt";
                    return(new { category, categoryName, categoryFileName });
                }).OrderBy(c => c.categoryFileName, StringComparer.OrdinalIgnoreCase))
                {
                    if (ShouldIncludeEntry(category.categoryName, out var categoryNameTrans))
                    {
                        TextResourceHelper.AddLocalizationToResults(categoryResults, category.categoryName,
                                                                    categoryNameTrans);
                    }

                    jobs.Add(StartCoroutine(StudioDump(group.groupRoot, category.categoryFileName,
                                                       category.category.Value)));
                }
            }

            foreach (var job in jobs)
            {
                yield return(job);
            }
        }
コード例 #3
0
        private IEnumerator MakerDump()
        {
            NotificationMessage = "Collecting Maker Mod Strings, please wait...";
            ChaListControl chaListCtrl = null;

            while (chaListCtrl == null)
            {
                yield return(null);

#if !KKS
                Character.Instance.SafeProc(i => chaListCtrl = i.chaListCtrl);
#else
                if (Character.Instance == null || !Character.Instance.isActiveAndEnabled)
                {
                    continue;
                }
                chaListCtrl = Character.chaListCtrl;
#endif
            }

            var categories = Enum.GetValues(typeof(ChaListDefine.CategoryNo)).Cast <ChaListDefine.CategoryNo>();

            foreach (var category in categories)
            {
                try
                {
                    var results      = GetTranslationsForPath(CombinePaths(MakerRoot, $"{category}.txt"));
                    var categoryInfo = chaListCtrl.GetCategoryInfo(category);
                    foreach (var grouping in categoryInfo.Values.Where(IsMod).GroupBy(GetMakerGrouping)
                             .OrderBy(g => g.Key, StringComparer.OrdinalIgnoreCase))
                    {
                        try
                        {
                            var names = grouping.Select(i => i.Name).Where(n => !results.ContainsKey(n)).Select(
                                origName =>
                            {
                                var shouldInclude = ShouldIncludeEntry(origName, out var translatedName);
                                var result        = new { origName, translatedName };
                                return(new { shouldInclude, result });
                            }).Where(r => r.shouldInclude && r.result.origName != r.result.translatedName)
                                        .Select(r => r.result)
                                        .OrderBy(n => n.origName, StringComparer.OrdinalIgnoreCase)
                                        .ToList();

                            if (names.Count < 1)
                            {
                                continue;
                            }

                            TextResourceHelper.AddLocalizationToResults(results, $"{FilePattern}{grouping.Key}",
                                                                        FilePattern);
                            foreach (var entry in names)
                            {
                                TextResourceHelper.AddLocalizationToResults(results, entry.origName,
                                                                            entry.translatedName);
                            }
                        }
                        catch (Exception err)
                        {
                            Logger.LogError($"Looping {grouping}: {err.Message}");
                            UnityDebug.LogException(err);
                        }
                    }
                }
                catch (Exception err)
                {
                    Logger.LogError($"Looping {category}: {err.Message}");
                    UnityDebug.LogException(err);
                }
            }

            DumpCompleted = true;
        }