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();
|
Load();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Load()
|
private void Load()
|
||||||
{
|
{
|
||||||
// Load the system Language Code.
|
var localeLanguageCode = !string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value) ?
|
||||||
string localeLanguageCode = CultureInfo.CurrentCulture.Name.Replace('-', '_');
|
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 (Program.PreviewerDetached)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value))
|
ConfigurationState.Instance.UI.LanguageCode.Value = _localeLanguageCode;
|
||||||
{
|
|
||||||
localeLanguageCode = ConfigurationState.Instance.UI.LanguageCode.Value;
|
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
localeLanguageCode = DefaultLanguageCode;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load en_US as default, if the target language translation is incomplete.
|
|
||||||
LoadDefaultLanguage();
|
|
||||||
|
|
||||||
LoadLanguage(localeLanguageCode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string this[LocaleKeys key]
|
public string this[LocaleKeys key]
|
||||||
|
@ -126,24 +120,42 @@ namespace Ryujinx.Ava.Common.Locale
|
||||||
|
|
||||||
private void LoadDefaultLanguage()
|
private void LoadDefaultLanguage()
|
||||||
{
|
{
|
||||||
_localeDefaultStrings = LoadJsonLanguage();
|
_localeDefaultStrings = LoadJsonLanguage(DefaultLanguageCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadLanguage(string languageCode)
|
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;
|
this[item.Key] = item.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
_localeLanguageCode = languageCode;
|
|
||||||
LocaleChanged?.Invoke();
|
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>();
|
var localeStrings = new Dictionary<LocaleKeys, string>();
|
||||||
string languageJson = EmbeddedResources.ReadAllText($"Ryujinx/Assets/Locales/{languageCode}.json");
|
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);
|
var strings = JsonHelper.Deserialize(languageJson, CommonJsonContext.Default.StringDictionary);
|
||||||
|
|
||||||
foreach (var item in strings)
|
foreach (var item in strings)
|
||||||
|
|
Loading…
Reference in a new issue