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;