using System; using System.Collections.Generic; using System.IO; using System.Linq; using Newtonsoft.Json.Linq; using Perfusion; namespace JetKarmaBot { public class Localization { private Dictionary> locales = new Dictionary>(); [Inject] public Localization(Config cfg) { Log("Initializing..."); string langsFolder = "lang"; if (!Directory.Exists(langsFolder)) Directory.CreateDirectory(langsFolder); foreach (string langFilePath in Directory.EnumerateFiles(langsFolder, "*.json")) { try { string langName = Path.GetFileNameWithoutExtension(langFilePath); string langKey = langName.ToLowerInvariant(); locales[langKey] = JObject.Parse(File.ReadAllText(langFilePath)).ToObject>(); Log("Found " + langName); } catch (Exception e) { Log($"Error while parsing {langFilePath}!"); Log(e); } } if (locales.Any()) Log("Initialized!"); else throw new FileNotFoundException($"No locales found in {langsFolder}!"); } public Locale this[string locale] { get { locale = locale.ToLowerInvariant(); return new Locale(locales[locale], locale); } } public bool ContainsLocale(string locale) { locale = locale.ToLowerInvariant(); return locales.ContainsKey(locale); } void Log(string Message) => Console.WriteLine($"[{nameof(Localization)}]: {Message}"); void Log(Exception e) => Console.WriteLine(e); public class Locale { private Dictionary locale; private string localeName; public Locale(Dictionary locale, string localeName) { this.locale = locale; this.localeName = localeName; } public string this[string name] => locale.ContainsKey(name) ? locale[name] : "unknown"; } } }