//using System; //using System.Globalization; //using System.Linq; //using System.Text.RegularExpressions; //using Newtonsoft.Json; //using Newtonsoft.Json.Linq; //namespace StoicGoose.Common.Localization //{ // public static class Localizer // { // public static string FallbackCulture { get; set; } = "en"; // static JObject source = default; // public static void Initialize(string jsonData) => source = JsonConvert.DeserializeObject(jsonData) as JObject; // public static CultureInfo[] GetSupportedLanguages() => source?.Children().Select(x => new CultureInfo((x as JProperty).Name)).ToArray() ?? Array.Empty(); // private static JToken GetToken(string path) => source?.SelectToken($"{CultureInfo.CurrentUICulture.TwoLetterISOLanguageName}.{path}") ?? source?.SelectToken($"{FallbackCulture}.{path}"); // public static string GetString(string path) => GetToken(path)?.Value() ?? path[(path.LastIndexOf('.') + 1)..]; // public static string GetString(string path, object parameters) // { // var result = GetString(path); // var properties = parameters.GetType().GetProperties(); // foreach (Match match in Regex.Matches(result, @"{(?[^}:]*):*(?[^}]*)}").Where(x => x.Success)) // { // var property = properties.First(x => x.Name == match.Groups["param"].Value); // var format = match.Groups["format"].Value; // var formattedValue = string.IsNullOrEmpty(format) ? $"{property.GetValue(parameters)}" : string.Format($"{{0:{format}}}", property.GetValue(parameters)); // result = result.Replace(match.Value, formattedValue); // } // return result; // } // } //}