594246ea47
* add settings windows and children views * Expose hotkeys configuration on the UI * Remove double spacing from locale JSON * simplify button assigner * add cemuhook buttons and title to locale * move common button assigner to own class * cancel button assigner when window is closed * remove unused setting * address review. fix controller profile not loading default when switching devices * fix updater file name * Input cleanup (#37) * addressed review * add device type to controller device checks * change accessibility modifier of public classes to internal * Update Ryujinx.Ava/Ui/ViewModels/ControllerSettingsViewModel.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * Update de_DE.json * Update de_DE.json * Update tr_TR.json Translated newly added lines * Update it_IT.json * fix rebase * update avalonia * fix wrong key used for button text * Align settings window elements * Tabs to spaces * Update brazilian portuguese translation * Minor improvement on brazilian portuguese translation * fix turkish translation * remove unused text * change view related classes to public * unsubscribe from deferred event if dialog is closed * Load the default language before loading any other when switching languages * Make controller settings more compact * increase default width of settings window, reduce profile buttons width Co-authored-by: gdk <gab.dark.100@gmail.com> Co-authored-by: MutantAura <44103205+MutantAura@users.noreply.github.com> Co-authored-by: Niwu34 <67392333+Niwu34@users.noreply.github.com> Co-authored-by: aegiff <99728970+aegiff@users.noreply.github.com> Co-authored-by: Antonio Brugnolo <36473846+AntoSkate@users.noreply.github.com>
110 lines
No EOL
3.2 KiB
C#
110 lines
No EOL
3.2 KiB
C#
using Ryujinx.Ava.Ui.ViewModels;
|
|
using Ryujinx.Common;
|
|
using Ryujinx.Ui.Common.Configuration;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Text.Json;
|
|
|
|
namespace Ryujinx.Ava.Common.Locale
|
|
{
|
|
class LocaleManager : BaseModel
|
|
{
|
|
private const string DefaultLanguageCode = "en_US";
|
|
|
|
private Dictionary<string, string> _localeStrings;
|
|
private ConcurrentDictionary<string, object[]> _dynamicValues;
|
|
|
|
public static LocaleManager Instance { get; } = new LocaleManager();
|
|
public Dictionary<string, string> LocaleStrings { get => _localeStrings; set => _localeStrings = value; }
|
|
|
|
|
|
public LocaleManager()
|
|
{
|
|
_localeStrings = new Dictionary<string, string>();
|
|
_dynamicValues = new ConcurrentDictionary<string, object[]>();
|
|
|
|
Load();
|
|
}
|
|
|
|
public void Load()
|
|
{
|
|
string localeLanguageCode = CultureInfo.CurrentCulture.Name.Replace('-', '_');
|
|
|
|
if (Program.PreviewerDetached)
|
|
{
|
|
if (!string.IsNullOrEmpty(ConfigurationState.Instance.Ui.LanguageCode.Value))
|
|
{
|
|
localeLanguageCode = ConfigurationState.Instance.Ui.LanguageCode.Value;
|
|
}
|
|
}
|
|
|
|
// Load english first, if the target language translation is incomplete, we default to english.
|
|
LoadDefaultLanguage();
|
|
|
|
if (localeLanguageCode != DefaultLanguageCode)
|
|
{
|
|
LoadLanguage(localeLanguageCode);
|
|
}
|
|
}
|
|
|
|
public string this[string key]
|
|
{
|
|
get
|
|
{
|
|
if (_localeStrings.TryGetValue(key, out string value))
|
|
{
|
|
if (_dynamicValues.TryGetValue(key, out var dynamicValue))
|
|
{
|
|
return string.Format(value, dynamicValue);
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
return key;
|
|
}
|
|
set
|
|
{
|
|
_localeStrings[key] = value;
|
|
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public void UpdateDynamicValue(string key, params object[] values)
|
|
{
|
|
_dynamicValues[key] = values;
|
|
|
|
OnPropertyChanged("Item");
|
|
}
|
|
|
|
public void LoadDefaultLanguage()
|
|
{
|
|
LoadLanguage(DefaultLanguageCode);
|
|
}
|
|
|
|
public void LoadLanguage(string languageCode)
|
|
{
|
|
string languageJson = EmbeddedResources.ReadAllText($"Ryujinx.Ava/Assets/Locales/{languageCode}.json");
|
|
|
|
if (languageJson == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var strings = JsonSerializer.Deserialize<Dictionary<string, string>>(languageJson);
|
|
|
|
foreach (var item in strings)
|
|
{
|
|
this[item.Key] = item.Value;
|
|
}
|
|
|
|
if (Program.PreviewerDetached)
|
|
{
|
|
ConfigurationState.Instance.Ui.LanguageCode.Value = languageCode;
|
|
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
|
|
}
|
|
}
|
|
}
|
|
} |