aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Ava/UI/Views
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2023-01-11 01:29:22 +0100
committerGitHub <noreply@github.com>2023-01-11 01:29:22 +0100
commit2355c2af62282ff36e56106495c09ed5cfcc3672 (patch)
tree34247874f3676ab6567c198e1a427a9bb3ed72d8 /Ryujinx.Ava/UI/Views
parent5e0f8e873857ce3ca3f532aff0936beb28e412c8 (diff)
ava: Generate Locale menu automatically (#4243)
Currently in `MenuMainBarView.axaml` we list all available languages and hardcode the language name with the language key. It's a bit bad beause if we want to add a new language, we have to edit the `csproj` and the `axaml` with the translated language name and the language code. I've put all translations in their respective locale files, add code into `MainMenuBarView` constructor to generate the menu automatically. Now we just have to edit the `csproj` if we want to add a new language.
Diffstat (limited to 'Ryujinx.Ava/UI/Views')
-rw-r--r--Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml58
-rw-r--r--Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs49
2 files changed, 46 insertions, 61 deletions
diff --git a/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml b/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml
index 0d0ae119..bd26561a 100644
--- a/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml
+++ b/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml
@@ -77,63 +77,7 @@
</MenuItem.Icon>
</MenuItem>
<Separator />
- <MenuItem Header="{locale:Locale MenuBarOptionsChangeLanguage}">
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="de_DE"
- Header="Deutsch" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="en_US"
- Header="English (US)" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="es_ES"
- Header="Español (ES)" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="fr_FR"
- Header="Français" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="it_IT"
- Header="Italiano" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="pt_BR"
- Header="Português (BR)" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="tr_TR"
- Header="Türkçe" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="el_GR"
- Header="Ελληνικά" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="pl_PL"
- Header="Polski" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="ru_RU"
- Header="Русский" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="zh_CN"
- Header="简体中文" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="zh_TW"
- Header="繁體中文" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="ja_JP"
- Header="日本語" />
- <MenuItem
- Command="{ReflectionBinding ChangeLanguage}"
- CommandParameter="ko_KR"
- Header="한국어" />
+ <MenuItem Name="ChangeLanguageMenuItem" Header="{locale:Locale MenuBarOptionsChangeLanguage}">
</MenuItem>
<Separator />
<MenuItem
diff --git a/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs b/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs
index 788f47a1..31dbb1b7 100644
--- a/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs
+++ b/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs
@@ -1,13 +1,20 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
-using Ryujinx.Ava.UI.ViewModels;
-using Ryujinx.Ava.UI.Windows;
-using System.Threading.Tasks;
using LibHac.FsSystem;
using LibHac.Ncm;
+using Ryujinx.Ava.UI.Helpers;
+using Ryujinx.Ava.UI.ViewModels;
+using Ryujinx.Ava.UI.Windows;
+using Ryujinx.Common;
+using Ryujinx.Common.Utilities;
using Ryujinx.HLE.HOS;
using Ryujinx.Modules;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
namespace Ryujinx.Ava.UI.Views.Main
{
@@ -19,13 +26,47 @@ namespace Ryujinx.Ava.UI.Views.Main
public MainMenuBarView()
{
InitializeComponent();
+
+ List<MenuItem> menuItems = new();
+
+ string localePath = "Ryujinx.Ava/Assets/Locales";
+ string localeExt = ".json";
+
+ string[] localesPath = EmbeddedResources.GetAllAvailableResources(localePath, localeExt);
+
+ Array.Sort(localesPath);
+
+ foreach (string locale in localesPath)
+ {
+ string languageCode = Path.GetFileNameWithoutExtension(locale).Split('.').Last();
+ string languageJson = EmbeddedResources.ReadAllText($"{localePath}/{languageCode}{localeExt}");
+ var strings = JsonHelper.Deserialize<Dictionary<string, string>>(languageJson);
+
+ if (!strings.TryGetValue("Language", out string languageName))
+ {
+ languageName = languageCode;
+ }
+
+ MenuItem menuItem = new()
+ {
+ Header = languageName,
+ Command = MiniCommand.Create(() =>
+ {
+ ViewModel.ChangeLanguage(languageCode);
+ })
+ };
+
+ menuItems.Add(menuItem);
+ }
+
+ ChangeLanguageMenuItem.Items = menuItems.ToArray();
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
- if (this.VisualRoot is MainWindow window)
+ if (VisualRoot is MainWindow window)
{
Window = window;
}