Пример #1
0
        internal static string ProcessTranslationResult(NameScope sexOnlyScope, string origName, string fullPath,
                                                        ITranslationResult result)
        {
            Assert.AreEqual(origName, origName);
            if (result.Succeeded)
            {
                CharaFileInfoTranslationManager.CacheRecentTranslation(sexOnlyScope, fullPath, result.TranslatedText);
            }

            return(result.TranslatedText);
        }
Пример #2
0
        public static TranslationResultHandler FileInfoCacheHandler(NameScope scope, string path, string originalName)
        {
            void Handler(ITranslationResult result)
            {
                if (!result.Succeeded || string.IsNullOrEmpty(path) ||
                    TranslationHelper.NameStringComparer.Equals(result.TranslatedText, originalName))
                {
                    return;
                }
                CharaFileInfoTranslationManager.CacheRecentTranslation(scope, path, result.TranslatedText);
            }

            return(Handler);
        }
Пример #3
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);
        }
Пример #4
0
        private static IEnumerator TranslateDisplayListEntry(CharaFileInfo entry, NameScope scope,
                                                             Action <string> callback = null)
        {
            Logger.DebugLogDebug(
                $"{nameof(TranslateDisplayListEntry)}: entry={entry}, scope={scope}, callback={callback}");
            if (entry == null)
            {
                yield break;
            }

            var origName = entry.name;

            var wrappedCallback =
                CharaFileInfoTranslationManager.MakeCachingCallbackWrapper(origName, entry, scope, callback);


            void UpdateName(CharaFileInfo charaFileInfo, string translatedName)
            {
                Logger.DebugLogDebug(
                    $"{nameof(TranslateDisplayListEntry)}:{nameof(UpdateName)}: charaFileInfo={charaFileInfo}, translatedName={translatedName}");
                charaFileInfo.name = charaFileInfo.node.text = translatedName;
            }

            void HandleResult(CharaFileInfo charaFileInfo, ITranslationResult result)
            {
                Logger.DebugLogDebug(
                    $"{nameof(TranslateDisplayListEntry)}:{nameof(HandleResult)}: charaFileInfo={charaFileInfo}, result={result}");
                if (!result.Succeeded)
                {
                    return;
                }
                UpdateName(charaFileInfo, result.TranslatedText);
            }

            if (TryApplyAlternateTranslation(scope, entry, origName, true))
            {
                Logger.DebugLogDebug($"{nameof(TranslateDisplayListEntry)}: applied alternate translation");
                wrappedCallback(entry.name);
                yield break;
            }

            if (TranslationHelper.TryFastTranslateFullName(scope, origName, entry.file, out var fastName))
            {
                Logger.DebugLogDebug($"{nameof(TranslateDisplayListEntry)}: fast translated!");
                UpdateName(entry, fastName);
                wrappedCallback(entry.name);
                yield break;
            }

            Logger.DebugLogDebug($"{nameof(TranslateDisplayListEntry)}: not fast translated!");

            yield return(null);

            void AsyncHandler(ITranslationResult result)
            {
                Logger.DebugLogDebug(
                    $"{nameof(TranslateDisplayListEntry)}:{nameof(AsyncHandler)}: result={result}, entry={entry}");
                // async handler, things may have gone null
                try
                {
                    HandleResult(entry, result);
                    TryApplyAlternateTranslation(scope, entry, origName, false);
                    wrappedCallback(entry.name);
                }
                catch (NullReferenceException err)
                {
                    Logger.LogDebug(
                        $"{nameof(TranslateDisplayListEntry)}:{nameof(AsyncHandler)}: unable to apply translation: {err.Message} (entry may no longer exist)");
                }
            }

            TranslationHelper.Instance.StartCoroutine(
                TranslationHelper.CardNameManager.TranslateFullName(origName, scope, AsyncHandler));
        }