Exemple #1
0
        public static void OnPointerEnterPostfix(CustomFileListCtrl __instance, GameObject obj)
        {
            if (obj == null)
            {
                return;
            }
            var component = obj.GetComponent <CustomFileInfoComponent>();

            if (component == null)
            {
                return;
            }
            var textDrawName = Traverse.Create(__instance)?.Field <Text>("textDrawName")?.Value;
            var name         = component.info.name;

            if (Configuration.ListInfoNameTranslatedMap.TryGetValue(component.info.FullPath, out var tmpName))
            {
                component.info.name = tmpName;
                if (textDrawName != null)
                {
                    textDrawName.text = tmpName;
                }
                return;
            }


            var sex = GuessSex(component.info.club, component.info.personality);

            void Handler(ITranslationResult result)
            {
                var newName = Configuration.ListInfoNameTranslatedMap[component.info.FullPath] = result.TranslatedText;

                component.info.name = newName;
                if (!result.Succeeded)
                {
                    return;
                }
                if (textDrawName == null)
                {
                    return;
                }
                textDrawName.text = newName;
            }

            if (textDrawName != null)
            {
                textDrawName.text = name;
            }

            PointerEnterCoroutine = TranslationHelper.Instance.StartCoroutine(
                TranslationHelper.CardNameManager.TranslateCardName(name, new NameScope((CharacterSex)sex),
                                                                    CardNameTranslationManager.CanForceSplitNameString(name),
                                                                    Handler, _ => PointerEnterCoroutine = null));
        }
Exemple #2
0
        public bool TryTranslateFullName(CharacterSex sex, string origName, out string result)
        {
            if (_hasEntries && _fullNameCache[sex].TryGetValue(origName, out result))
            {
                if (!TranslationHelper.NameStringComparer.Equals(origName, result) &&
                    !StringUtils.ContainsJapaneseChar(result))
                {
                    CardNameTranslationManager.CacheRecentTranslation(new NameScope(sex), origName, result);
                }

                return(true);
            }
            result = null;
            return(false);
        }
Exemple #3
0
        internal static void FileListCtrlAddListPrefix(CustomFileListCtrl __instance, int index, ref string name,
                                                       string club, string personality, string fullpath)
        {
            if (Configuration.ListInfoNameTranslatedMap.TryGetValue(fullpath, out var tmpName))
            {
                name = tmpName;
                return;
            }

            if (TranslationHelper.Instance == null || string.IsNullOrEmpty(club) ||
                TranslationHelper.Instance.CurrentCardLoadTranslationMode < CardLoadTranslationMode.CacheOnly)
            {
                return;
            }

            var sex = GuessSex(club, personality);


            void Handler(ITranslationResult result)
            {
                var newName = Configuration.ListInfoNameTranslatedMap[fullpath] = result.TranslatedText;

                var lstFileInfo = Traverse.Create(__instance)?.Field <List <CustomFileInfo> >("lstFileInfo")?.Value;
                var entry       = lstFileInfo?.FirstOrDefault(x => x.index == index);

                if (entry == null)
                {
                    return;
                }
                entry.name = newName;
            }

            TranslationHelper.Instance.StartCoroutine(
                TranslationHelper.CardNameManager.TranslateCardName(name, new NameScope((CharacterSex)sex),
                                                                    CardNameTranslationManager.CanForceSplitNameString(name), Handler));
        }
Exemple #4
0
 private static void MakerStartedLoading(object sender, RegisterCustomControlsEvent e)
 {
     CardNameTranslationManager.ClearCaches();
 }
Exemple #5
0
 private static void MakerExiting(object sender, EventArgs e)
 {
     CharacterApi.CharacterReloaded -= MakerCharacterReloaded;
     CardNameTranslationManager.ClearCaches();
 }
Exemple #6
0
        private static void TranslateDisplayList(CharaList charaList)
        {
            if (charaList == null || TranslationHelper.Instance == null ||
                !TranslationHelper.Instance.CurrentCardLoadTranslationEnabled)
            {
                return;
            }

            var cfiList = Traverse.Create(charaList)?.Field <CharaFileSort>("charaFileSort")?.Value?.cfiList;

            if (cfiList == null)
            {
                return;
            }

            var sex = Traverse.Create(charaList)?.Field <int>("sex")?.Value ?? -1;

            if (sex == -1)
            {
                return;
            }

            void HandleResult(CharaFileInfo charaFileInfo, ITranslationResult result)
            {
                if (!result.Succeeded)
                {
                    return;
                }
                charaFileInfo.name = charaFileInfo.node.text = result.TranslatedText;
            }

            var scope = new NameScope((CharacterSex)sex);

            foreach (var entry in cfiList)
            {
                var origName = entry.name;
                if (TryApplyAlternateTranslation(entry, origName))
                {
                    TreeNodeLimiter.EndImmediately();
                    return;
                }

                void Handler(ITranslationResult result)
                {
                    HandleResult(entry, result);
                    if (TryApplyAlternateTranslation(entry, origName))
                    {
                        TreeNodeLimiter.EndImmediately();
                    }

                    TreeNodeLimiter.EndImmediately();
                }

                TranslationHelper.Instance.StartCoroutine(TreeNodeLimiter.Start().AppendCo(
                                                              TranslationHelper.CardNameManager.TranslateCardName(origName, scope,
                                                                                                                  CardNameTranslationManager.CanForceSplitNameString(origName), Handler)));
            }
        }
Exemple #7
0
        // ReSharper disable Unity.PerformanceAnalysis
        public bool TryTranslateCardNames(ChaFile chaFile, out Dictionary <string, string> result)
        {
            var origName = chaFile.GetFullName();

            if (!_hasEntries)
            {
                result = null;
                return(false);
            }

            void PopulateResult(IDictionary <string, string> output, string nameType, string nameValue)
            {
                if (nameValue != null)
                {
                    output[nameType] = nameValue;
                }
            }

            result = null;
            var key = new CardNameCacheKey(chaFile);
            var sex = chaFile.GetSex();

            if (!_cardCache[sex].TryGetValue(key, out var match))
            {
                return(false);
            }


            result = new Dictionary <string, string>(GeBoAPI.Instance.ChaFileNameCount);
            PopulateResult(result, "fullname", match.FullName);
            PopulateResult(result, "firstname", match.GivenName);
            PopulateResult(result, "lastname", match.FamilyName);

            var fullName = BuildFullName(match);

            if (!StringUtils.ContainsJapaneseChar(fullName))
            {
                CardNameTranslationManager.CacheRecentTranslation(new NameScope(sex), origName, fullName);
                var fullPath = chaFile.GetFullPath();
                if (!string.IsNullOrEmpty(fullPath))
                {
                    CharaFileInfoTranslationManager.CacheRecentTranslation(
                        new NameScope(chaFile.GetSex()), fullPath, fullName);
                }
            }


            var origNick = chaFile.GetName("nickname");

            if (string.IsNullOrEmpty(origNick))
            {
                return(true);
            }

            if (_nickNameCache[sex].TryGetValue(key, out var nickLookup) &&
                nickLookup.TryGetValue(origNick, out var translatedNick))
            {
                PopulateResult(result, "nickname", translatedNick);
            }
            else if (key.GivenName == origNick)
            {
                PopulateResult(result, "nickname", match.GivenName);
            }

            return(true);
        }