|
|
@@ -1,7 +1,6 @@
|
|
|
using Gommon;
|
|
|
using Ryujinx.Ava.UI.ViewModels;
|
|
|
using Ryujinx.Common;
|
|
|
-using Ryujinx.Common.Logging;
|
|
|
using Ryujinx.Common.Utilities;
|
|
|
using Ryujinx.UI.Common.Configuration;
|
|
|
using System;
|
|
|
@@ -17,7 +16,6 @@ namespace Ryujinx.Ava.Common.Locale
|
|
|
private const string DefaultLanguageCode = "en_US";
|
|
|
|
|
|
private readonly Dictionary<LocaleKeys, string> _localeStrings;
|
|
|
- private Dictionary<LocaleKeys, string> _localeDefaultStrings;
|
|
|
private readonly ConcurrentDictionary<LocaleKeys, object[]> _dynamicValues;
|
|
|
private string _localeLanguageCode;
|
|
|
|
|
|
@@ -27,7 +25,6 @@ namespace Ryujinx.Ava.Common.Locale
|
|
|
public LocaleManager()
|
|
|
{
|
|
|
_localeStrings = new Dictionary<LocaleKeys, string>();
|
|
|
- _localeDefaultStrings = new Dictionary<LocaleKeys, string>();
|
|
|
_dynamicValues = new ConcurrentDictionary<LocaleKeys, object[]>();
|
|
|
|
|
|
Load();
|
|
|
@@ -37,9 +34,7 @@ namespace Ryujinx.Ava.Common.Locale
|
|
|
{
|
|
|
var localeLanguageCode = !string.IsNullOrEmpty(ConfigurationState.Instance.UI.LanguageCode.Value) ?
|
|
|
ConfigurationState.Instance.UI.LanguageCode.Value : CultureInfo.CurrentCulture.Name.Replace('-', '_');
|
|
|
-
|
|
|
- // Load en_US as default, if the target language translation is missing or incomplete.
|
|
|
- LoadDefaultLanguage();
|
|
|
+
|
|
|
LoadLanguage(localeLanguageCode);
|
|
|
|
|
|
// Save whatever we ended up with.
|
|
|
@@ -66,26 +61,14 @@ namespace Ryujinx.Ava.Common.Locale
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
|
- // If formatting failed use the default text instead.
|
|
|
- if (_localeDefaultStrings.TryGetValue(key, out value))
|
|
|
- try
|
|
|
- {
|
|
|
- return string.Format(value, dynamicValue);
|
|
|
- }
|
|
|
- catch
|
|
|
- {
|
|
|
- // If formatting the default text failed return the key.
|
|
|
- return key.ToString();
|
|
|
- }
|
|
|
+ // If formatting the text failed,
|
|
|
+ // continue to the below line & return the text without formatting.
|
|
|
}
|
|
|
|
|
|
return value;
|
|
|
}
|
|
|
-
|
|
|
- // If the locale doesn't contain the key return the default one.
|
|
|
- return _localeDefaultStrings.TryGetValue(key, out string defaultValue)
|
|
|
- ? defaultValue
|
|
|
- : key.ToString(); // If the locale text doesn't exist return the key.
|
|
|
+
|
|
|
+ return key.ToString(); // If the locale text doesn't exist return the key.
|
|
|
}
|
|
|
set
|
|
|
{
|
|
|
@@ -114,11 +97,6 @@ namespace Ryujinx.Ava.Common.Locale
|
|
|
return this[key];
|
|
|
}
|
|
|
|
|
|
- private void LoadDefaultLanguage()
|
|
|
- {
|
|
|
- _localeDefaultStrings = LoadJsonLanguage(DefaultLanguageCode);
|
|
|
- }
|
|
|
-
|
|
|
public void LoadLanguage(string languageCode)
|
|
|
{
|
|
|
var locale = LoadJsonLanguage(languageCode);
|
|
|
@@ -126,7 +104,7 @@ namespace Ryujinx.Ava.Common.Locale
|
|
|
if (locale == null)
|
|
|
{
|
|
|
_localeLanguageCode = DefaultLanguageCode;
|
|
|
- locale = _localeDefaultStrings;
|
|
|
+ locale = LoadJsonLanguage(_localeLanguageCode);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -167,15 +145,16 @@ namespace Ryujinx.Ava.Common.Locale
|
|
|
if (!Enum.TryParse<LocaleKeys>(locale.ID, out var localeKey))
|
|
|
continue;
|
|
|
|
|
|
- localeStrings[localeKey] =
|
|
|
- locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val)
|
|
|
- ? val
|
|
|
- : locale.Translations[DefaultLanguageCode];
|
|
|
-
|
|
|
- if (string.IsNullOrEmpty(localeStrings[localeKey]))
|
|
|
+ var str = locale.Translations.TryGetValue(languageCode, out string val) && !string.IsNullOrEmpty(val)
|
|
|
+ ? val
|
|
|
+ : locale.Translations[DefaultLanguageCode];
|
|
|
+
|
|
|
+ if (string.IsNullOrEmpty(str))
|
|
|
{
|
|
|
throw new Exception($"Locale key '{locale.ID}' has no valid translations for desired language {languageCode}! {DefaultLanguageCode} is an empty string or null");
|
|
|
}
|
|
|
+
|
|
|
+ localeStrings[localeKey] = str;
|
|
|
}
|
|
|
|
|
|
return localeStrings;
|