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)); }
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); }
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)); }
private static void MakerStartedLoading(object sender, RegisterCustomControlsEvent e) { CardNameTranslationManager.ClearCaches(); }
private static void MakerExiting(object sender, EventArgs e) { CharacterApi.CharacterReloaded -= MakerCharacterReloaded; CardNameTranslationManager.ClearCaches(); }
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))); } }
// 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); }