Ava UI: Fix locale crash (#6385)
* Fix locale crash * Apply suggestions from code review --------- Co-authored-by: Ac_K <Acoustik666@gmail.com>
This commit is contained in:
parent
bb8c5ebae1
commit
a0552fd78b
1 changed files with 33 additions and 21 deletions
|
@ -30,28 +30,22 @@ namespace Ryujinx.Ava.Common.Locale
|
|||
Load();
|
||||
}
|
||||
|
||||
public void Load()
|
||||
private void Load()
|
||||
{
|
||||
// Load the system Language Code.
|
||||
string localeLanguageCode = CultureInfo.CurrentCulture.Name.Replace('-', '_');
|
||||
var localeLanguageCode = !string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value) ?
|
||||
ConfigurationState.Instance.UI.LanguageCode.Value : CultureInfo.CurrentCulture.Name.Replace('-', '_');
|
||||
|
||||
// If the view is loaded with the UI Previewer detached, then override it with the saved one or default.
|
||||
// Load en_US as default, if the target language translation is missing or incomplete.
|
||||
LoadDefaultLanguage();
|
||||
LoadLanguage(localeLanguageCode);
|
||||
|
||||
// Save whatever we ended up with.
|
||||
if (Program.PreviewerDetached)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value))
|
||||
{
|
||||
localeLanguageCode = ConfigurationState.Instance.UI.LanguageCode.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
localeLanguageCode = DefaultLanguageCode;
|
||||
}
|
||||
}
|
||||
ConfigurationState.Instance.UI.LanguageCode.Value = _localeLanguageCode;
|
||||
|
||||
// Load en_US as default, if the target language translation is incomplete.
|
||||
LoadDefaultLanguage();
|
||||
|
||||
LoadLanguage(localeLanguageCode);
|
||||
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||
}
|
||||
}
|
||||
|
||||
public string this[LocaleKeys key]
|
||||
|
@ -126,24 +120,42 @@ namespace Ryujinx.Ava.Common.Locale
|
|||
|
||||
private void LoadDefaultLanguage()
|
||||
{
|
||||
_localeDefaultStrings = LoadJsonLanguage();
|
||||
_localeDefaultStrings = LoadJsonLanguage(DefaultLanguageCode);
|
||||
}
|
||||
|
||||
public void LoadLanguage(string languageCode)
|
||||
{
|
||||
foreach (var item in LoadJsonLanguage(languageCode))
|
||||
var locale = LoadJsonLanguage(languageCode);
|
||||
|
||||
if (locale == null)
|
||||
{
|
||||
_localeLanguageCode = DefaultLanguageCode;
|
||||
locale = _localeDefaultStrings;
|
||||
}
|
||||
else
|
||||
{
|
||||
_localeLanguageCode = languageCode;
|
||||
}
|
||||
|
||||
foreach (var item in locale)
|
||||
{
|
||||
this[item.Key] = item.Value;
|
||||
}
|
||||
|
||||
_localeLanguageCode = languageCode;
|
||||
LocaleChanged?.Invoke();
|
||||
}
|
||||
|
||||
private static Dictionary<LocaleKeys, string> LoadJsonLanguage(string languageCode = DefaultLanguageCode)
|
||||
private static Dictionary<LocaleKeys, string> LoadJsonLanguage(string languageCode)
|
||||
{
|
||||
var localeStrings = new Dictionary<LocaleKeys, string>();
|
||||
string languageJson = EmbeddedResources.ReadAllText($"Ryujinx/Assets/Locales/{languageCode}.json");
|
||||
|
||||
if (languageJson == null)
|
||||
{
|
||||
// We were unable to find file for that language code.
|
||||
return null;
|
||||
}
|
||||
|
||||
var strings = JsonHelper.Deserialize(languageJson, CommonJsonContext.Default.StringDictionary);
|
||||
|
||||
foreach (var item in strings)
|
||||
|
|
Loading…
Reference in a new issue