protected override bool ReplaceOrUpdateAsset(string calculatedModificationPath, ref ExcelData asset, IAssetOrResourceLoadedContext context) { var cache = new SimpleTextTranslationCache(calculatedModificationPath, true, true, false); foreach (var param in asset.list) { for (int i = 0; i < param.list.Count; i++) { var key = param.list[i]; if (!string.IsNullOrEmpty(key)) { if (cache.TryGetTranslation(key, true, out var translated)) { param.list[i] = translated; } else if (IsDumpingEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } } } return(true); }
public override bool UpdateParam(string calculatedModificationPath, SimpleTextTranslationCache cache, TitleSkillName.Param param) { var result = false; var key = param.name0; if (string.IsNullOrEmpty(key)) { return(false); } if (cache.TryGetTranslation(key, true, out var translated)) { param.name0 = translated; TrackReplacement(calculatedModificationPath, key, translated); TranslationHelper.RegisterRedirectedResourceTextToPath(translated, calculatedModificationPath); result = true; } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, !string.IsNullOrEmpty(param.name1) ? param.name1 : key); } return(result); }
protected override bool DumpAsset(string calculatedModificationPath, TextAsset asset, IAssetOrResourceLoadedContext context) { if (!textAssetHelper.IsTable(asset)) { return(false); } var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var redirectedResources = RedirectedDirectory.GetFilesInDirectory(calculatedModificationPath, ".txt"); var streams = redirectedResources.Select(x => x.OpenStream()); var cache = new SimpleTextTranslationCache( outputFile: defaultTranslationFile, inputStreams: streams, allowTranslationOverride: false, closeStreams: true); bool DumpCell(string cellText) { if (!string.IsNullOrEmpty(cellText) && LanguageHelper.IsTranslatable(cellText)) { cache.AddTranslationToCache(cellText, cellText); return(true); } return(false); } return(textAssetHelper.ActOnCells(asset, DumpCell, out TextAssetHelper.TableResult tableResult)); }
public override bool UpdateParam(string calculatedModificationPath, SimpleTextTranslationCache cache, VoiceInfo.Param param) { var result = false; var key = param.Personality; if (string.IsNullOrEmpty(key)) { return(false); } if (cache.TryGetTranslation(key, true, out var translated)) { _personalityById[param.No] = translated; _personalityByName[key] = translated; TrackReplacement(calculatedModificationPath, key, translated); TranslationHelper.RegisterRedirectedResourceTextToPath(translated, calculatedModificationPath); result = true; } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, string.Empty); } return(result); }
public override void DumpScenarioParam(ScenarioData.Param param, SimpleTextTranslationCache cache) { if (!IsSupportedCommand(param.Command)) { Logger.DebugLogDebug("{0} skipping unsupported command: {1}", GetType().Name, param.Command); return; } if (SelectionCommands.Contains(param.Command)) { foreach (var i in GetScenarioCommandTranslationIndexes(param.Command)) { var key = param.Args[i]; if (!string.IsNullOrEmpty(key) && !TextKeysBlacklist.Contains(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } return; } base.DumpScenarioParam(param, cache); }
protected override bool DumpAsset(string calculatedModificationPath, ScenarioData asset, IAssetOrResourceLoadedContext context) { var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var cache = new SimpleTextTranslationCache( file: defaultTranslationFile, loadTranslationsInFile: false); foreach (var param in asset.list) { if (param.Command == Command.Text) { for (int i = 0; i < param.Args.Length; i++) { var key = param.Args[i]; if (!string.IsNullOrEmpty(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); //AutoTranslator.Default.TranslateAsync( key, result => //{ // if( result.Succeeded ) // { // cache.AddTranslationToCache( key, result.TranslatedText ); // } //} ); } } } } return(true); }
public override bool UpdateParam(string calculatedModificationPath, SimpleTextTranslationCache cache, EventInfo.Param param) { var result = false; var origKey = param.Name; foreach (var key in TextResourceHelper.GetTranslationKeys(param, origKey)) { if (string.IsNullOrEmpty(key)) { continue; } if (cache.TryGetTranslation(key, true, out var translated)) { param.Name = translated; TrackReplacement(calculatedModificationPath, origKey, translated); TranslationHelper.RegisterRedirectedResourceTextToPath(translated, calculatedModificationPath); result = true; break; } if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && LanguageHelper.IsTranslatable(origKey)) { cache.AddTranslationToCache(key, !string.IsNullOrEmpty(param.Name) ? param.Name : string.Empty); } } return(result); }
public override bool UpdateParam(string calculatedModificationPath, SimpleTextTranslationCache cache, EventInfo.Param param) { var key = TextResourceHelper.GetSpecializedKey(param, param.Name); if (string.IsNullOrEmpty(key)) { return(false); } var result = false; if (cache.TryGetTranslation(key, true, out var translated)) { param.Name = translated; TrackReplacement(calculatedModificationPath, key, translated); TranslationHelper.RegisterRedirectedResourceTextToPath(translated, calculatedModificationPath); result = true; } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, !string.IsNullOrEmpty(param.Name) ? param.Name : string.Empty); } return(result); }
protected override bool DumpAsset(string calculatedModificationPath, ExcelData asset, IAssetOrResourceLoadedContext context) { var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var cache = new SimpleTextTranslationCache( defaultTranslationFile, false); var columnsToDump = new HashSet <int>(TextResourceHelper.GetSupportedExcelColumns(calculatedModificationPath, asset)); for (var i = 1; i < asset.list.Count; i++) { var row = asset.GetRow(i); var rowColumns = Enumerable.Range(0, row.Count); if (columnsToDump.Count > 0) { rowColumns = rowColumns.Where(columnsToDump.Contains); } foreach (var key in rowColumns.Select(j => row[j]) .Where(k => !k.IsNullOrEmpty() && LanguageHelper.IsTranslatable(k))) { cache.AddTranslationToCache(key, key); } } return(true); }
private TextAndEncoding Translate(SimpleTextTranslationCache cache, ref TextAsset textAsset) { string TranslateCell(string cellText) { if (cache.TryGetTranslation(cellText, false, out string newText)) { return(newText); } else { if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled) { if (!string.IsNullOrEmpty(cellText) && LanguageHelper.IsTranslatable(cellText)) { cache.AddTranslationToCache(cellText, cellText); } } } return(null); } string result = textAssetHelper.ProcessTable(textAsset, TranslateCell, out TextAssetHelper.TableResult tableResult); //Logger.Log( BepinLogLevel.Debug, $"{this.GetType()}: {tableResult.RowsUpdated}/{tableResult.Rows} rows updated" ); if (tableResult.RowsUpdated > 0) { return(new TextAndEncoding(result, Encoding.UTF8)); } return(null); }
protected override bool ReplaceOrUpdateAsset(string calculatedModificationPath, ref ScenarioData asset, IAssetOrResourceLoadedContext context) { var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var redirectedResources = RedirectedDirectory.GetFilesInDirectory(calculatedModificationPath, ".txt"); var streams = redirectedResources.Select(x => x.OpenStream()); var cache = new SimpleTextTranslationCache( outputFile: defaultTranslationFile, inputStreams: streams, allowTranslationOverride: false, closeStreams: true); foreach (var param in asset.list) { if (param.Command == Command.Text) { for (int i = 0; i < param.Args.Length; i++) { var key = param.Args[i]; if (!string.IsNullOrEmpty(key)) { if (cache.TryGetTranslation(key, true, out var translated)) { param.Args[i] = translated; } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } } } } return(true); }
protected override bool ReplaceOrUpdateAsset(string calculatedModificationPath, ref ScenarioData asset, IAssetOrResourceLoadedContext context) { var cache = new SimpleTextTranslationCache(calculatedModificationPath, true); foreach (var param in asset.list) { if (param.Command == Command.Text) { for (int i = 0; i < param.Args.Length; i++) { var key = param.Args[i]; if (!key.IsNullOrWhiteSpace()) { if (cache.TryGetTranslation(key, true, out var translated)) { param.Args[i] = translated; } else if (IsDumpingEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } } } } return(true); }
private bool TryRegisterTranslation(SimpleTextTranslationCache cache, ScenarioData.Param param, int i, string calculatedModificationPath) { var key = TextResourceHelper.GetSpecializedKey(param, i, out var value); if (!string.IsNullOrEmpty(key)) { if (cache.TryGetTranslation(key, true, out var translated)) { var result = TextResourceHelper.GetSpecializedTranslation(param, i, translated); TranslationHelper.RegisterRedirectedResourceTextToPath(result, calculatedModificationPath); param.Args[i] = result; Logger.DebugLogDebug($"{GetType()} handled {calculatedModificationPath}"); return(true); } if (LanguageHelper.IsTranslatable(key)) { TranslationHelper.RegisterRedirectedResourceTextToPath(key, calculatedModificationPath); if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled) { cache.AddTranslationToCache(key, value); } } } return(false); }
private void GameSpecificReplaceOrUpdateAsset(string calculatedModificationPath, ref MapInfo asset, IAssetOrResourceLoadedContext context, SimpleTextTranslationCache cache, bool shouldTrack) { foreach (var key in asset.param.Select(GetMapDisplayName).Where(k => !string.IsNullOrEmpty(k))) { if (cache.TryGetTranslation(key, true, out var translated)) { if (string.IsNullOrEmpty(translated)) { continue; } _displayNameLookup[key] = translated; _reverseDisplayNameLookup[translated] = key; if (shouldTrack) { TrackReplacement(calculatedModificationPath, key, translated); } TranslationHelper.RegisterRedirectedResourceTextToPath(translated, calculatedModificationPath); } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && !string.IsNullOrEmpty(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } }
protected virtual bool DefaultDumpParam(SimpleTextTranslationCache cache, TParam param, string value) { var key = TextResourceHelper.GetSpecializedKey(param, value); if (string.IsNullOrEmpty(key) || !LanguageHelper.IsTranslatable(value)) { return(false); } cache.AddTranslationToCache(key, string.Empty); return(true); }
public override bool DumpParam(SimpleTextTranslationCache cache, EventInfo.Param param) { var key = TextResourceHelper.GetSpecializedKey(param, param.Name); var value = !string.IsNullOrEmpty(key) ? key : string.Empty; if (string.IsNullOrEmpty(key) || !LanguageHelper.IsTranslatable(key)) { return(false); } cache.AddTranslationToCache(key, value); return(true); }
/// <summary> /// Caches forward and reverse translation of assets as they're loaded, but does not apply them. /// to avoid breaking code that relies on original names being present. /// </summary> protected override bool ReplaceOrUpdateAsset(string calculatedModificationPath, ref MapInfo asset, IAssetOrResourceLoadedContext context) { // updating the MapInfo assets directly breaks places that are doing lookups by mapName // instead of id, so we just register this as a place to lookup MapInfo translations and // return true so it appears handled Hooks.Init(); // register new translations with helper without replacing var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var redirectedResources = RedirectedDirectory.GetFilesInDirectory(calculatedModificationPath, ".txt"); var streams = redirectedResources.Select(x => x.OpenStream()); var cache = new SimpleTextTranslationCache( defaultTranslationFile, streams, false, true); if (cache.IsEmpty) { return(true); } var shouldTrack = IsTranslationRegistrationAllowed(calculatedModificationPath); // register with helper or dump without translating here foreach (var key in asset.param .Select(entry => TextResourceHelper.GetSpecializedKey(entry, GetMapName(entry))) .Where(k => !string.IsNullOrEmpty(k))) { if (cache.TryGetTranslation(key, true, out var translated)) { if (string.IsNullOrEmpty(translated)) { continue; } _mapLookup[key] = translated; _reverseMapLookup[translated] = key; if (shouldTrack) { TrackReplacement(calculatedModificationPath, key, translated); } TranslationHelper.RegisterRedirectedResourceTextToPath(translated, calculatedModificationPath); } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && !string.IsNullOrEmpty(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } return(true); }
public override bool DumpParam(SimpleTextTranslationCache cache, VoiceInfo.Param param) { var key = param.Personality; if (string.IsNullOrEmpty(key) || !LanguageHelper.IsTranslatable(key)) { return(false); } var val = string.Empty; cache.AddTranslationToCache(key, val); return(true); }
public override bool DumpParam(SimpleTextTranslationCache cache, TitleSkillName.Param param) { var key = TextResourceHelper.GetSpecializedKey(param, param.name0); if (string.IsNullOrEmpty(key) || !LanguageHelper.IsTranslatable(key)) { return(false); } var value = !string.IsNullOrEmpty(param.name1) ? param.name1 : key; cache.AddTranslationToCache(key, value); return(true); }
protected virtual bool DumpParamField(SimpleTextTranslationCache cache, string[] field) { var key = field[0]; var value = TranslatedIndex > 0 && field.Length > TranslatedIndex && string.IsNullOrEmpty(field[TranslatedIndex]) ? field[TranslatedIndex] : key; if (string.IsNullOrEmpty(key) || !LanguageHelper.IsTranslatable(key)) { return(false); } cache.AddTranslationToCache(key, value); return(true); }
protected override bool DumpAsset(string calculatedModificationPath, ExcelData asset, IAssetOrResourceLoadedContext context) { var cache = new SimpleTextTranslationCache(calculatedModificationPath, false); foreach (var param in asset.list) { for (int i = 0; i < param.list.Count; i++) { var key = param.list[i]; if (!string.IsNullOrEmpty(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } } return(true); }
private bool TryRegisterTranslation(SimpleTextTranslationCache cache, ScenarioData.Param param, int i) { var key = textResourceHelper.GetSpecializedKey(param, i, out string value); if (!string.IsNullOrEmpty(key)) { if (cache.TryGetTranslation(key, true, out var translated)) { param.Args[i] = textResourceHelper.GetSpecializedTranslation(param, i, translated); return(true); } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, value); } } return(false); }
protected override bool DumpAsset(string calculatedModificationPath, ExcelData asset, IAssetOrResourceLoadedContext context) { var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var cache = new SimpleTextTranslationCache( file: defaultTranslationFile, loadTranslationsInFile: false); foreach (var param in asset.list) { for (int i = 0; i < param.list.Count; i++) { var key = param.list[i]; if (!string.IsNullOrEmpty(key) && LanguageHelper.IsTranslatable(key)) { TranslationHelper.RegisterRedirectedResourceTextToPath(key, calculatedModificationPath); cache.AddTranslationToCache(key, key); } } } return(true); }
protected override bool DumpAsset(string calculatedModificationPath, ScenarioData asset, IAssetOrResourceLoadedContext context) { var cache = new SimpleTextTranslationCache(calculatedModificationPath, false); foreach (var param in asset.list) { if (param.Command == Command.Text) { for (int i = 0; i < param.Args.Length; i++) { var key = param.Args[i]; if (!key.IsNullOrWhiteSpace() && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } } } return(true); }
protected override bool DumpAsset(string calculatedModificationPath, NickName asset, IAssetOrResourceLoadedContext context) { var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var cache = new SimpleTextTranslationCache( defaultTranslationFile, false); foreach (var entry in asset.param) { if (!entry.isSpecial) { continue; } var key = TextResourceHelper.GetSpecializedKey(entry, entry.Name); if (!string.IsNullOrEmpty(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, entry.Name); } } return(true); }
protected override bool DumpAsset(string calculatedModificationPath, MapInfo asset, IAssetOrResourceLoadedContext context) { var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var cache = new SimpleTextTranslationCache( defaultTranslationFile, false); var result = false; foreach (var entry in asset.param) { var key = TextResourceHelper.GetSpecializedKey(entry, GetMapName(entry)); if (string.IsNullOrEmpty(key) || !LanguageHelper.IsTranslatable(key)) { continue; } cache.AddTranslationToCache(key, GetMapNameTranslation(entry)); result = true; } return(result); }
public virtual bool TryRegisterScenarioTranslation(SimpleTextTranslationCache cache, ScenarioData.Param param, int i, string calculatedModificationPath) { var origKey = param.Args.SafeGet(i); if (origKey.IsNullOrEmpty()) { return(false); } foreach (var key in GetTranslationKeys(param, i)) { if (string.IsNullOrEmpty(key)) { return(false); } if (cache.TryGetTranslation(key, true, out var translated)) { var result = GetSpecializedTranslation(param, i, translated); TranslationHelper.RegisterRedirectedResourceTextToPath(result, calculatedModificationPath); param.Args[i] = result; Logger.DebugLogDebug("{0} handled {1}", GetType(), calculatedModificationPath); return(true); } if (!LanguageHelper.IsTranslatable(origKey)) { return(false); } TranslationHelper.RegisterRedirectedResourceTextToPath(key, calculatedModificationPath); if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled) { cache.AddTranslationToCache(key, key); } } return(false); }
public virtual void DumpScenarioParam(ScenarioData.Param param, SimpleTextTranslationCache cache) { if (!IsSupportedCommand(param.Command)) { return; } if (param.Command == Command.Text) { foreach (var i in GetScenarioCommandTranslationIndexes(param.Command)) { var key = param.Args[i]; if (!string.IsNullOrEmpty(key) && !TextKeysBlacklist.Contains(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } } else if (param.Command == Command.Calc) { if (param.Args.Length >= 3 && CalcKeys.Contains(param.Args[0])) { foreach (var i in GetScenarioCommandTranslationIndexes(param.Command)) { var key = param.Args[i]; cache.AddTranslationToCache(key, key); } } } else if (param.Command == Command.Format) { if (param.Args.Length >= 2 && FormatKeys.Contains(param.Args[0])) { foreach (var i in GetScenarioCommandTranslationIndexes(param.Command)) { var key = param.Args[i]; cache.AddTranslationToCache(key, key); } } } else if (param.Command == Command.Choice) { for (var i = 0; i < param.Args.Length; i++) { var key = GetSpecializedKey(param, i, out var value); if (!key.IsNullOrEmpty()) { cache.AddTranslationToCache(key, value); } } } #if false else if (param.Command == ADV.Command.Switch) { for (int i = 1; i < param.Args.Length; i += 1) { cache.AddTokenTranslationToCache(param.Args[i], param.Args[i]); } } #endif #if false else if (param.Command == ADV.Command.InfoText) { for (int i = 1; i < param.Args.Length; i += 1) { cache.AddTokenTranslationToCache(param.Args[i], param.Args[i]); } } #endif #if false else if (param.Command == ADV.Command.Jump) { // TODO: detect if should be dumped if (param.Args.Length >= 1) { cache.AddTokenTranslationToCache(param.Args[0], param.Args[0]); } } #endif }
/// <inheritdoc /> /// <remarks>Always returns <c>true</c> to signal nothing else should handle these.</remarks> protected override bool ReplaceOrUpdateAsset(string calculatedModificationPath, ref NickName asset, IAssetOrResourceLoadedContext context) { // updating the NickName assets directly causes issues, but after SaveData.LoadNickNameParam() they // are safe to manipulate InitHooks(); var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var redirectedResources = RedirectedDirectory.GetFilesInDirectory(calculatedModificationPath, ".txt"); var streams = redirectedResources.Select(x => x.OpenStream()); var cache = new SimpleTextTranslationCache( defaultTranslationFile, streams, false, true); if (cache.IsEmpty) { return(true); } var replacementKey = calculatedModificationPath .Split(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) .LastOrDefault(); // don't touch "player" entry if (string.IsNullOrEmpty(replacementKey) || replacementKey.Equals("player", StringComparison.OrdinalIgnoreCase)) { return(true); } if (!_replacements.TryGetValue(replacementKey, out var replacements)) { _replacements[replacementKey] = replacements = new Dictionary <string, string>(); } foreach (var entry in asset.param) { if (!entry.isSpecial) { continue; } var key = TextResourceHelper.GetSpecializedKey(entry, entry.Name); if (string.IsNullOrEmpty(key)) { continue; } if (cache.TryGetTranslation(key, true, out var translated)) { replacements[key] = translated; TranslationHelper.RegisterRedirectedResourceTextToPath(translated, calculatedModificationPath); } else if (AutoTranslatorSettings.IsDumpingRedirectedResourcesEnabled && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, entry.Name); } } return(true); }
protected override bool DumpAsset(string calculatedModificationPath, ScenarioData asset, IAssetOrResourceLoadedContext context) { var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt"); var cache = new SimpleTextTranslationCache( defaultTranslationFile, false); foreach (var param in asset.list) { if (!TextResourceHelper.IsSupportedCommand(param.Command)) { continue; } if (param.Command == Command.Text) { foreach (var key in param.Args) { if (!string.IsNullOrEmpty(key) && !TextResourceHelper.TextKeysBlacklist.Contains(key) && LanguageHelper.IsTranslatable(key)) { cache.AddTranslationToCache(key, key); } } } else if (param.Command == Command.Calc) { if (param.Args.Length >= 3 && TextResourceHelper.CalcKeys.Contains(param.Args[0])) { cache.AddTranslationToCache(param.Args[2], param.Args[2]); } } else if (param.Command == Command.Format) { if (param.Args.Length >= 2 && TextResourceHelper.FormatKeys.Contains(param.Args[0])) { cache.AddTranslationToCache(param.Args[1], param.Args[1]); } } else if (param.Command == Command.Choice) { for (var i = 0; i < param.Args.Length; i++) { var key = TextResourceHelper.GetSpecializedKey(param, i, out var value); if (!key.IsNullOrEmpty()) { cache.AddTranslationToCache(key, value); } } } #if false else if (param.Command == ADV.Command.Switch) { for (int i = 1; i < param.Args.Length; i += 1) { cache.AddTokenTranslationToCache(param.Args[i], param.Args[i]); } } #endif #if false else if (param.Command == ADV.Command.InfoText) { for (int i = 1; i < param.Args.Length; i += 1) { cache.AddTokenTranslationToCache(param.Args[i], param.Args[i]); } } #endif #if false else if (param.Command == ADV.Command.Jump) { // TODO: detect if should be dumped if (param.Args.Length >= 1) { cache.AddTokenTranslationToCache(param.Args[0], param.Args[0]); } } #endif } return(true); }