0
0
Fork 0
mirror of https://github.com/GreemDev/Ryujinx.git synced 2025-01-09 15:51:59 +00:00

Improve locale file parsing error descriptions

This commit is contained in:
Evan Husted 2024-12-24 22:19:58 -06:00
parent 0ca4d6e921
commit 0bacdb8765

View file

@ -143,12 +143,8 @@ namespace Ryujinx.Ava.Common.Locale
LocaleChanged?.Invoke();
}
#nullable enable
private static LocalesJson? _localeData;
#nullable disable
private static Dictionary<LocaleKeys, string> LoadJsonLanguage(string languageCode)
{
var localeStrings = new Dictionary<LocaleKeys, string>();
@ -158,18 +154,28 @@ namespace Ryujinx.Ava.Common.Locale
foreach (LocalesEntry locale in _localeData.Value.Locales)
{
if (locale.Translations.Count != _localeData.Value.Languages.Count)
if (locale.Translations.Count < _localeData.Value.Languages.Count)
{
throw new Exception($"Locale key {{{locale.ID}}} is missing languages! Has {locale.Translations.Count} translations, expected {_localeData.Value.Languages.Count}!");
}
if (locale.Translations.Count > _localeData.Value.Languages.Count)
{
throw new Exception($"Locale key {{{locale.ID}}} has too many languages! Has {locale.Translations.Count} translations, expected {_localeData.Value.Languages.Count}!");
}
if (!Enum.TryParse<LocaleKeys>(locale.ID, out var localeKey))
continue;
localeStrings[localeKey] =
locale.Translations.TryGetValue(languageCode, out string val) && val != string.Empty
locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val)
? val
: locale.Translations[DefaultLanguageCode];
if (string.IsNullOrEmpty(localeStrings[localeKey]))
{
throw new Exception($"Locale key '{locale.ID}' has no valid translations for desired language {languageCode}! {DefaultLanguageCode} is an empty string or null");
}
}
return localeStrings;