using System.Collections.Generic; namespace PKHeX.Core; /// /// Contains localized strings for legality checks, moves, encounters, and general game information. /// public sealed class LegalityLocalizationSet { private static readonly Dictionary Cache = new(1); public required LegalityCheckLocalization Lines { get; init; } public required GameStrings Strings { get; init; } public required EncounterDisplayLocalization Encounter { get; init; } public required MoveSourceLocalization Moves { get; init; } public required GeneralLocalization General { get; init; } public static LegalityLocalizationSet GetLocalization(LanguageID language) => GetLocalization(language.GetLanguageCode()); public string Description(Severity s) => s switch { Severity.Invalid => Lines.SInvalid, Severity.Fishy => Lines.SFishy, Severity.Valid => Lines.SValid, _ => Lines.NotImplemented, }; /// /// Gets the localization for the requested language. /// /// Language code public static LegalityLocalizationSet GetLocalization(string language) { if (Cache.TryGetValue(language, out var result)) return result; result = new LegalityLocalizationSet { Strings = GameInfo.GetStrings(language), Lines = LegalityCheckLocalization.Get(language), Encounter = EncounterDisplayLocalization.Get(language), Moves = MoveSourceLocalization.Get(language), General = GeneralLocalization.Get(language), }; Cache[language] = result; return result; } /// /// Force loads all localizations. /// public static bool ForceLoadAll() { bool anyLoaded = false; foreach (var lang in GameLanguage.AllSupportedLanguages) { if (Cache.ContainsKey(lang)) continue; _ = GetLocalization(lang); anyLoaded = true; } return anyLoaded; } /// /// Gets all localizations. /// public static IReadOnlyDictionary GetAll() { _ = ForceLoadAll(); return Cache; } }