/// <summary> /// Filters a set of localized strings and prepares them for display. /// </summary> /// <param name="unic">The string list.</param> /// <param name="stringIds">The string ID cache to use.</param> /// <param name="strings">The strings to display.</param> /// <param name="language">The language to display strings from.</param> /// <param name="filter">The filter to match strings and stringIDs against. Can be <c>null</c> to display everything.</param> /// <returns>The strings to print.</returns> public static List <DisplayString> PrepareForDisplay(MultilingualUnicodeStringList unic, StringIdCache stringIds, IEnumerable <LocalizedString> strings, GameLanguage language, string filter) { // Filter the input strings var display = new List <DisplayString>(); foreach (var localizedString in strings) { var str = unic.GetString(localizedString, language); if (str == null) { continue; } var stringId = stringIds.GetString(localizedString.StringID); if (filter != null && !str.Contains(filter) && !stringId.Contains(filter)) { continue; } display.Add(new DisplayString { StringID = stringId, String = str }); } display.Sort((a, b) => String.Compare(a.StringID, b.StringID, StringComparison.Ordinal)); return(display); }
private void MergeMultilingualUnicodeStringList(Stream cacheStream, Stream blamCacheStream, Dictionary <ResourceLocation, Stream> resourceStreams, CachedTag edTag, CachedTag h3Tag) { MultilingualUnicodeStringList h3Def = BlamCache.Deserialize <MultilingualUnicodeStringList>(blamCacheStream, h3Tag); var edDef = CacheContext.Deserialize <MultilingualUnicodeStringList>(cacheStream, edTag); ConvertMultilingualUnicodeStringList(cacheStream, blamCacheStream, resourceStreams, h3Def); var mergedStringCount = 0; for (var i = 0; i < h3Def.Strings.Count; i++) { var found = false; for (var j = 0; j < edDef.Strings.Count; j++) { if (h3Def.Strings[i].StringID == edDef.Strings[j].StringID) { found = true; break; } } if (!found) { var localizedStr = new LocalizedString { StringID = h3Def.Strings[i].StringID, StringIDStr = h3Def.Strings[i].StringIDStr }; edDef.Strings.Add(localizedStr); for (var x = 0; x < 12; x++) { edDef.SetString( localizedStr, (GameLanguage)x, h3Def.GetString( h3Def.Strings[i], (GameLanguage)x)); } mergedStringCount++; } } if (mergedStringCount > 0) { Console.WriteLine($"Merged {mergedStringCount} localized strings."); CacheContext.Serialize(cacheStream, edTag, edDef); } }