diff --git a/src/Extensions/GenericsExtensions.cs b/src/Extensions/GenericsExtensions.cs index 6ce52cab..1851b864 100644 --- a/src/Extensions/GenericsExtensions.cs +++ b/src/Extensions/GenericsExtensions.cs @@ -157,5 +157,25 @@ public static T LoadFromFile(this string filePath) return data.FromJson(); } + + public static Dictionary Merge(this Dictionary locales1, Dictionary locales2, bool updateValues = false) + { + var result = locales1; + foreach (var (key, value) in locales2) + { + if (!result.ContainsKey(key)) + { + result.Add(key, value); + continue; + } + + // Key already exists, check if values are the same + if (result[key] != value && updateValues) + { + result[key] = value; + } + } + return result; + } } } \ No newline at end of file diff --git a/src/HostedServices/StatisticReportsHostedService.cs b/src/HostedServices/StatisticReportsHostedService.cs index 8f8debef..cb210be4 100644 --- a/src/HostedServices/StatisticReportsHostedService.cs +++ b/src/HostedServices/StatisticReportsHostedService.cs @@ -20,13 +20,13 @@ public class StatisticReportsHostedService : IHostedService, IDisposable { - private readonly ILogger _logger; + private readonly ILogger _logger; private readonly Dictionary _tzMidnightTimers; private readonly ConfigHolder _config; private readonly IDiscordClientService _discordService; public StatisticReportsHostedService( - ILogger logger, + ILogger logger, ConfigHolder config, IDiscordClientService discordService) { diff --git a/src/Localization/Translator.cs b/src/Localization/Translator.cs index dd921086..d2f97689 100644 --- a/src/Localization/Translator.cs +++ b/src/Localization/Translator.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Threading.Tasks; + using Microsoft.Extensions.Logging; using ActivityType = POGOProtos.Rpc.HoloActivityType; using AlignmentType = POGOProtos.Rpc.PokemonDisplayProto.Types.Alignment; using CharacterCategory = POGOProtos.Rpc.EnumWrapper.Types.CharacterCategory; @@ -19,6 +20,9 @@ public class Translator : Language> { + private static readonly ILogger _logger = + new Logger(LoggerFactory.Create(x => x.AddConsole())); + private const string SourceLocaleUrl = "https://raw.githubusercontent.com/WatWowMap/pogo-translations/master/static/locales/"; private static readonly string _appLocalesFolder = Directory.GetCurrentDirectory() + $"/../{Strings.LocaleFolder}"; private static readonly string _binLocalesFolder = Directory.GetCurrentDirectory() + $"/{Strings.BasePath}/{Strings.LocaleFolder}"; @@ -35,57 +39,62 @@ public class Translator : Language> #endregion - public async Task CreateLocaleFiles() + #region Static Methods + + public static async Task CreateLocaleFilesAsync() { - var files = Directory.GetFiles(_appLocalesFolder, "*.json") - .Select(fileName => Path.GetFileName(fileName)) - .Where(fileName => fileName.StartsWith('_')) - .ToList(); + // Copy any missing base locale files to bin directory + await CopyLocaleFilesAsync(); + var files = GetBaseLocaleFileNames(); foreach (var file in files) { - var locale = Path.GetFileName(file).Replace("_", null); - var localeFile = locale; + // Replace locale prefix + var localeFile = Path.GetFileName(file).Replace("_", null); + var locale = Path.GetFileNameWithoutExtension(localeFile); - var json = await NetUtils.GetAsync(SourceLocaleUrl + locale); + var url = SourceLocaleUrl + localeFile; + var json = await NetUtils.GetAsync(url); if (json == null) { - Console.WriteLine($"Failed to fetch locales from {SourceLocaleUrl + locale}, skipping..."); + _logger.LogWarning($"Failed to fetch locales from {url}, skipping..."); return; } - var remote = json.FromJson>(); - - Console.WriteLine($"Creating locale {locale}"); - var keys = remote.Keys.ToList(); - for (var i = 0; i < keys.Count; i++) + _logger.LogInformation($"Creating locale {locale}..."); + var remote = json.FromJson>(); + foreach (var (key, _) in remote) { - var key = keys[i]; - remote[key] = remote[key].Replace("%", "{"); - remote[key] = remote[key].Replace("}", "}}"); + // Make locale variables compliant with Handlebars/Mustache templating + remote[key] = remote[key].Replace("%", "{") + .Replace("}", "}}"); } if (locale != "en") { // Include en as fallback first - var appTransFallback = File.ReadAllText( + var enTransFallback = File.ReadAllText( Path.Combine(_appLocalesFolder, "_en.json") ); - var fallbackTranslations = appTransFallback.FromJson>(); - remote = MergeDictionaries(remote, fallbackTranslations); + var fallbackTranslations = enTransFallback.FromJson>(); + remote = remote.Merge(fallbackTranslations, updateValues: true); } - var appTranslations = File.ReadAllText(Path.Combine(_appLocalesFolder, file)); - remote = MergeDictionaries(remote, appTranslations.FromJson>()); + var appTranslationsData = File.ReadAllText(Path.Combine(_appLocalesFolder, file)); + var appTranslations = appTranslationsData.FromJson>(); + remote = remote.Merge(appTranslations, updateValues: true); File.WriteAllText( Path.Combine(_binLocalesFolder, localeFile), remote.ToJson() ); - Console.WriteLine($"{localeFile} file saved."); + _logger.LogInformation($"{locale} file saved."); } } + #endregion + + #region Public Methods public override string Translate(string value) { @@ -196,19 +205,40 @@ public string GetGruntType(InvasionCharacter gruntType) return Translate($"grunt_{(int)gruntType}"); } - private static Dictionary MergeDictionaries(Dictionary locales1, Dictionary locales2) + #endregion + + #region Private Methods + + private static async Task CopyLocaleFilesAsync() { - var result = locales1; - foreach (var (key, value) in locales2) + // Copy base locale files from app directory to bin directory if they do not exist + var files = GetBaseLocaleFileNames(); + foreach (var file in files) { - if (result.ContainsKey(key)) - { - // Key already exists, skip... + // Replace locale prefix + var localeFile = Path.GetFileName(file); + var localeBin = Path.Combine(_binLocalesFolder, localeFile); + if (File.Exists(localeBin)) continue; - } - result.Add(key, value); + + _logger.LogDebug($"Copying base locale '{localeFile}' to {localeBin}..."); + var baseLocalePath = Path.Combine(_appLocalesFolder, file); + File.Copy(baseLocalePath, localeBin); } - return result; + + await Task.CompletedTask; + } + + private static List GetBaseLocaleFileNames(string extension = "*.json", string prefix = "_") + { + // Get a list of locale file names that have prefix '_' + var files = Directory.GetFiles(_appLocalesFolder, extension) + .Select(fileName => Path.GetFileName(fileName)) + .Where(fileName => fileName.StartsWith(prefix)) + .ToList(); + return files; } + + #endregion } } \ No newline at end of file diff --git a/src/Services/Webhook/Models/PokemonData.cs b/src/Services/Webhook/Models/PokemonData.cs index 37b39b6c..8accf483 100644 --- a/src/Services/Webhook/Models/PokemonData.cs +++ b/src/Services/Webhook/Models/PokemonData.cs @@ -53,7 +53,6 @@ public sealed class PokemonData : IWebhookData, IWebhookPokemon, IWebhookPoint public string IVRounded => IVReal == -1 ? "?" : Math.Round(IVReal) + "%"; [ - JsonIgnore, NotMapped, ] diff --git a/src/Startup.cs b/src/Startup.cs index 618307e1..d4d3d9f5 100644 --- a/src/Startup.cs +++ b/src/Startup.cs @@ -79,7 +79,7 @@ public Startup(IConfiguration configuration) // Create locale translation files try { - Translator.Instance.CreateLocaleFiles().ConfigureAwait(false).GetAwaiter().GetResult(); + Translator.CreateLocaleFilesAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Translator.Instance.SetLocale(_config.Instance.Locale); } catch (Exception ex) diff --git a/static/locales/_de.json b/static/locales/_de.json index 60e40e59..6c061466 100644 --- a/static/locales/_de.json +++ b/static/locales/_de.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_en.json b/static/locales/_en.json index 60e40e59..6c061466 100644 --- a/static/locales/_en.json +++ b/static/locales/_en.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_es.json b/static/locales/_es.json index 60e40e59..6c061466 100644 --- a/static/locales/_es.json +++ b/static/locales/_es.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_fr.json b/static/locales/_fr.json index 60e40e59..6c061466 100644 --- a/static/locales/_fr.json +++ b/static/locales/_fr.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_it.json b/static/locales/_it.json index 60e40e59..6c061466 100644 --- a/static/locales/_it.json +++ b/static/locales/_it.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_ja.json b/static/locales/_ja.json index 60e40e59..6c061466 100644 --- a/static/locales/_ja.json +++ b/static/locales/_ja.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_ko.json b/static/locales/_ko.json index 60e40e59..6c061466 100644 --- a/static/locales/_ko.json +++ b/static/locales/_ko.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_pt-br.json b/static/locales/_pt-br.json index 60e40e59..6c061466 100644 --- a/static/locales/_pt-br.json +++ b/static/locales/_pt-br.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_th.json b/static/locales/_th.json index 60e40e59..6c061466 100644 --- a/static/locales/_th.json +++ b/static/locales/_th.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.", diff --git a/static/locales/_zh-tw.json b/static/locales/_zh-tw.json index 60e40e59..6c061466 100644 --- a/static/locales/_zh-tw.json +++ b/static/locales/_zh-tw.json @@ -119,15 +119,15 @@ "PVP_ULTRA_LEAGUE": "Ultra League", "REMOVED_TOTAL_DEPARTED_MEMBERS": "Removed {{removed}} of {{users}} total members.", "SHINY_STATS_INVALID_CHANNEL": "{{author}} Shiny stats channel does not exist.", - "SHINY_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", - "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "SHINY_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours.", + "SHINY_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{shiny}}** shiny out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "SHINY_STATS_NEWLINE": "----------------------------------------------", "SHINY_STATS_TITLE": "[**Shiny Pokemon stats for {{date}}**]", "SHINY_STATS_TOTAL_MESSAGE": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities.", "SHINY_STATS_TOTAL_MESSAGE_WITH_RATIO": "Found **{{shiny}}** total shinies out of **{{total}}** possiblities with a **1/{{chance}}** ratio in total.", "HUNDO_STATS_INVALID_CHANNEL": "{{author}} Hundo stats channel does not exist.", - "HUNDO_STATS_MESSAGE": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", - "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{pokemon}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", + "HUNDO_STATS_MESSAGE": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours.", + "HUNDO_STATS_MESSAGE_WITH_RATIO": "**{{{pokemon}}} (#{{id}})** | **{{count}}** 100% IV out of **{{total}}** total seen in the last 24 hours with a **1/{{chance}}** ratio.", "HUNDO_STATS_NEWLINE": "----------------------------------------------", "HUNDO_STATS_TITLE": "[**Hundo Pokemon stats for {{date}}**]", "HUNDO_STATS_TOTAL_MESSAGE": "Found **{{count}}** total hundos out of **{{total}}** possiblities.",