using System.Collections.Generic; using System.Text.Json.Serialization; namespace PKHeX.Core; /// /// Provides information for localizing sets. /// /// In-game strings /// Grammar and prefix/suffix tokens public sealed record BattleTemplateLocalization(GameStrings Strings, BattleTemplateConfig Config) { public const string DefaultLanguage = GameLanguage.DefaultLanguage; // English private static readonly Dictionary Cache = new(1); private static readonly BattleTemplateConfigContext Context = new(LocalizationStorage.Options); public static readonly LocalizationStorage ConfigCache = new("battle", Context.BattleTemplateConfig); public static readonly BattleTemplateLocalization Default = GetLocalization(DefaultLanguage); /// /// Gets the localization for the requested language. /// /// Language code public static BattleTemplateConfig GetConfig(string language) => ConfigCache.Get(language); /// index /// public static BattleTemplateLocalization GetLocalization(LanguageID language) => GetLocalization(language.GetLanguageCode()); /// /// Gets the localization for the requested language. /// /// Language code public static BattleTemplateLocalization GetLocalization(string language) { if (Cache.TryGetValue(language, out var result)) return result; var strings = GameInfo.GetStrings(language); var cfg = GetConfig(language); result = new BattleTemplateLocalization(strings, cfg); 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; } } [JsonSerializable(typeof(BattleTemplateConfig))] public sealed partial class BattleTemplateConfigContext : JsonSerializerContext;