diff --git a/JetKarmaBot/Commands/AwardCommand.cs b/JetKarmaBot/Commands/AwardCommand.cs index 5b308ed..178561f 100644 --- a/JetKarmaBot/Commands/AwardCommand.cs +++ b/JetKarmaBot/Commands/AwardCommand.cs @@ -16,7 +16,7 @@ namespace JetKarmaBot.Commands { if (args.Message.ReplyToMessage == null) { - Client.SendTextMessageAsync(args.Message.Chat.Id, Locale["jetkarmabot.award.errawardnoreply"]); + Client.SendTextMessageAsync(args.Message.Chat.Id, Locale["jetkarmabot.award.errawardnoreply", "en-US"]); return true; } @@ -29,7 +29,7 @@ namespace JetKarmaBot.Commands { Client.SendTextMessageAsync( args.Message.Chat.Id, - Locale["jetkarmabot.award.errawardself"], + Locale["jetkarmabot.award.errawardself", "en-US"], replyToMessageId: args.Message.MessageId); return true; } @@ -39,8 +39,8 @@ namespace JetKarmaBot.Commands Client.SendTextMessageAsync( args.Message.Chat.Id, awarding - ? Locale["jetkarmabot.award.errawardbot"] - : Locale["jetkarmabot.award.errrevokebot"], + ? Locale["jetkarmabot.award.errawardbot", "en-US"] + : Locale["jetkarmabot.award.errrevokebot", "en-US"], replyToMessageId: args.Message.MessageId); return true; } @@ -52,10 +52,10 @@ namespace JetKarmaBot.Commands Db.AddAward(awardTypeId, awarder.Id, recipient.Id, args.Message.Chat.Id, awarding ? 1 : -1); string message = awarding - ? string.Format(Locale["jetkarmabot.award.awardmessage"], awardType.Name, "@" + recipient.Username) - : string.Format(Locale["jetkarmabot.award.revokemessage"], awardType.Name, "@" + recipient.Username); + ? string.Format(Locale["jetkarmabot.award.awardmessage", "en-US"], awardType.Name, "@" + recipient.Username) + : string.Format(Locale["jetkarmabot.award.revokemessage", "en-US"], awardType.Name, "@" + recipient.Username); - var response = message + "\n" + String.Format(Locale["jetkarmabot.award.statustext"], "@" + recipient.Username, Db.CountUserAwards(recipient.Id, awardTypeId), awardType.Symbol); + var response = message + "\n" + String.Format(Locale["jetkarmabot.award.statustext", "en-US"], "@" + recipient.Username, Db.CountUserAwards(recipient.Id, awardTypeId), awardType.Symbol); Client.SendTextMessageAsync( args.Message.Chat.Id, diff --git a/JetKarmaBot/Commands/StatusCommand.cs b/JetKarmaBot/Commands/StatusCommand.cs index 475fa7c..468cc38 100644 --- a/JetKarmaBot/Commands/StatusCommand.cs +++ b/JetKarmaBot/Commands/StatusCommand.cs @@ -24,7 +24,7 @@ namespace JetKarmaBot.Commands { var awards = Db.CountAllUserAwards(asker.Id); - response = Locale["jetkarmabot.status.listalltext"] + "\n" + response = Locale["jetkarmabot.status.listalltext", "en-US"] + "\n" + string.Join("\n", awards.Select(a => $" - {Db.AwardTypes[a.AwardTypeId].Symbol} {a.Amount}")); } @@ -33,7 +33,7 @@ namespace JetKarmaBot.Commands var awardTypeId = Db.GetAwardTypeId(cmd.Parameters.FirstOrDefault()); var awardType = Db.AwardTypes[awardTypeId]; - response = string.Format(Locale["jetkarmabot.status.listspecifictext"], Db.CountUserAwards(asker.Id, awardTypeId), awardType.Symbol); + response = string.Format(Locale["jetkarmabot.status.listspecifictext", "en-US"], Db.CountUserAwards(asker.Id, awardTypeId), awardType.Symbol); } Client.SendTextMessageAsync( diff --git a/JetKarmaBot/Config.cs b/JetKarmaBot/Config.cs index a88f0c1..2ca639f 100644 --- a/JetKarmaBot/Config.cs +++ b/JetKarmaBot/Config.cs @@ -11,7 +11,6 @@ namespace JetKarmaBot public string ApiKey { get; private set; } public string ConnectionString { get; private set; } - public string Language { get; private set; } public class ProxySettings { diff --git a/JetKarmaBot/Services/Localization.cs b/JetKarmaBot/Services/Localization.cs index 80db7b5..f5bf332 100644 --- a/JetKarmaBot/Services/Localization.cs +++ b/JetKarmaBot/Services/Localization.cs @@ -13,53 +13,40 @@ namespace JetKarmaBot { public class Localization { - private string currentFile; - private Dictionary currentLocalization; + private Dictionary> locales = new Dictionary>(); [Inject] public Localization(Config cfg) { Log("Initializing..."); - currentFile = cfg.Language; - if (string.IsNullOrEmpty(currentFile)) currentFile = "en-US"; - Log("Language is " + currentFile); if (!Directory.Exists("lang")) Directory.CreateDirectory("lang"); - if (!File.Exists("lang/" + currentFile + ".json") && currentFile != "en-US") + foreach (string lang in Directory.EnumerateFiles("lang")) { - Log("Language " + currentFile + " not found, falling back to en-US"); - currentFile = "en-US"; - } - if (!File.Exists("lang/" + currentFile + ".json")) - { - Log("Language en-US doesn't exist! Making empty localization"); - currentLocalization = new Dictionary(); - } - else - { - currentLocalization = JObject.Parse(File.ReadAllText("lang/" + currentFile + ".json")).ToObject>(); - Log("Loaded " + currentFile); + string langname = Path.GetFileName(lang).Split(".")[0]; + Log("Found " + langname); + locales[langname] = JObject.Parse(File.ReadAllText(lang)).ToObject>(); } Log("Initialized!"); } - public string this[string name] + public string this[string name, string locale] { - get => GetString(name); + get => GetString(name, locale); } - public string GetString(string name) + public string GetString(string name, string locale) { - if (!currentLocalization.ContainsKey(name)) + if (!locales[locale].ContainsKey(name)) { Log(name + " doesn't exist in this localization"); - currentLocalization[name] = "unknown"; - File.WriteAllText("lang/" + currentFile + ".json", JObject.FromObject(currentLocalization).ToString()); + locales[locale][name] = "unknown"; + File.WriteAllText("lang/" + locale + ".json", JObject.FromObject(locales[locale]).ToString()); return "unknown"; } else { - return currentLocalization[name]; + return locales[locale][name]; } } void Log(string Message) => Console.WriteLine($"[{nameof(Localization)}]: {Message}");