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); }
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); }
// 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); }
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)); }