using System.Globalization; using System.Text.Json.Nodes; using Remora.Discord.Extensions.Formatting; using Remora.Results; namespace Octobot.Data.Options; /// <inheritdoc /> public sealed class LanguageOption : Option<CultureInfo> { private static readonly Dictionary<string, CultureInfo> CultureInfoCache = new() { { "en", new CultureInfo("en-US") }, { "ru", new CultureInfo("ru-RU") } }; public LanguageOption(string name, string defaultValue) : base(name, CultureInfoCache[defaultValue]) { } public override string Display(JsonNode settings) { return Markdown.InlineCode(settings[Name]?.GetValue<string>() ?? "en"); } /// <inheritdoc /> public override CultureInfo Get(JsonNode settings) { var property = settings[Name]; return property != null ? CultureInfoCache[property.GetValue<string>()] : DefaultValue; } /// <inheritdoc /> public override Result Set(JsonNode settings, string from) { return CultureInfoCache.ContainsKey(from.ToLowerInvariant()) ? base.Set(settings, from.ToLowerInvariant()) : new ArgumentInvalidError(nameof(from), Messages.LanguageNotSupported); } }