Make localization not use config

This commit is contained in:
Nikolay Kochulin 2018-12-21 23:00:32 +03:00
parent efb1a532bd
commit 12b90d010f
No known key found for this signature in database
GPG Key ID: 740A804DEB1981AC
4 changed files with 21 additions and 35 deletions

View File

@ -16,7 +16,7 @@ namespace JetKarmaBot.Commands
{ {
if (args.Message.ReplyToMessage == null) 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; return true;
} }
@ -29,7 +29,7 @@ namespace JetKarmaBot.Commands
{ {
Client.SendTextMessageAsync( Client.SendTextMessageAsync(
args.Message.Chat.Id, args.Message.Chat.Id,
Locale["jetkarmabot.award.errawardself"], Locale["jetkarmabot.award.errawardself", "en-US"],
replyToMessageId: args.Message.MessageId); replyToMessageId: args.Message.MessageId);
return true; return true;
} }
@ -39,8 +39,8 @@ namespace JetKarmaBot.Commands
Client.SendTextMessageAsync( Client.SendTextMessageAsync(
args.Message.Chat.Id, args.Message.Chat.Id,
awarding awarding
? Locale["jetkarmabot.award.errawardbot"] ? Locale["jetkarmabot.award.errawardbot", "en-US"]
: Locale["jetkarmabot.award.errrevokebot"], : Locale["jetkarmabot.award.errrevokebot", "en-US"],
replyToMessageId: args.Message.MessageId); replyToMessageId: args.Message.MessageId);
return true; return true;
} }
@ -52,10 +52,10 @@ namespace JetKarmaBot.Commands
Db.AddAward(awardTypeId, awarder.Id, recipient.Id, args.Message.Chat.Id, awarding ? 1 : -1); Db.AddAward(awardTypeId, awarder.Id, recipient.Id, args.Message.Chat.Id, awarding ? 1 : -1);
string message = awarding string message = awarding
? string.Format(Locale["jetkarmabot.award.awardmessage"], awardType.Name, "@" + recipient.Username) ? string.Format(Locale["jetkarmabot.award.awardmessage", "en-US"], awardType.Name, "@" + recipient.Username)
: string.Format(Locale["jetkarmabot.award.revokemessage"], 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( Client.SendTextMessageAsync(
args.Message.Chat.Id, args.Message.Chat.Id,

View File

@ -24,7 +24,7 @@ namespace JetKarmaBot.Commands
{ {
var awards = Db.CountAllUserAwards(asker.Id); 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}")); + 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 awardTypeId = Db.GetAwardTypeId(cmd.Parameters.FirstOrDefault());
var awardType = Db.AwardTypes[awardTypeId]; 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( Client.SendTextMessageAsync(

View File

@ -11,7 +11,6 @@ namespace JetKarmaBot
public string ApiKey { get; private set; } public string ApiKey { get; private set; }
public string ConnectionString { get; private set; } public string ConnectionString { get; private set; }
public string Language { get; private set; }
public class ProxySettings public class ProxySettings
{ {

View File

@ -13,53 +13,40 @@ namespace JetKarmaBot
{ {
public class Localization public class Localization
{ {
private string currentFile; private Dictionary<string, Dictionary<string, string>> locales = new Dictionary<string, Dictionary<string, string>>();
private Dictionary<string, string> currentLocalization;
[Inject] [Inject]
public Localization(Config cfg) public Localization(Config cfg)
{ {
Log("Initializing..."); Log("Initializing...");
currentFile = cfg.Language;
if (string.IsNullOrEmpty(currentFile)) currentFile = "en-US";
Log("Language is " + currentFile);
if (!Directory.Exists("lang")) if (!Directory.Exists("lang"))
Directory.CreateDirectory("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"); string langname = Path.GetFileName(lang).Split(".")[0];
currentFile = "en-US"; Log("Found " + langname);
} locales[langname] = JObject.Parse(File.ReadAllText(lang)).ToObject<Dictionary<string, string>>();
if (!File.Exists("lang/" + currentFile + ".json"))
{
Log("Language en-US doesn't exist! Making empty localization");
currentLocalization = new Dictionary<string, string>();
}
else
{
currentLocalization = JObject.Parse(File.ReadAllText("lang/" + currentFile + ".json")).ToObject<Dictionary<string, string>>();
Log("Loaded " + currentFile);
} }
Log("Initialized!"); 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"); Log(name + " doesn't exist in this localization");
currentLocalization[name] = "unknown"; locales[locale][name] = "unknown";
File.WriteAllText("lang/" + currentFile + ".json", JObject.FromObject(currentLocalization).ToString()); File.WriteAllText("lang/" + locale + ".json", JObject.FromObject(locales[locale]).ToString());
return "unknown"; return "unknown";
} }
else else
{ {
return currentLocalization[name]; return locales[locale][name];
} }
} }
void Log(string Message) => Console.WriteLine($"[{nameof(Localization)}]: {Message}"); void Log(string Message) => Console.WriteLine($"[{nameof(Localization)}]: {Message}");