Localize all (I think...) previously hardcoded english strings in the setup wizard

This commit is contained in:
GreemDev 2025-12-07 02:03:10 -06:00
parent bbbeace1f6
commit a8b0d2a2ce
7 changed files with 368 additions and 62 deletions

View file

@ -25067,6 +25067,56 @@
"zh_TW": "" "zh_TW": ""
} }
}, },
{
"ID": "SetupWizardKeysPageHelpText",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Not sure how to get your keys?",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardKeysPageSkipText",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Skipped setting up keys as you already have a valid key installation and did not choose a folder to install from.\nClick '{0}' if you wish to reinstall your keys.",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{ {
"ID": "SetupWizardFirmwarePageTitle", "ID": "SetupWizardFirmwarePageTitle",
"Translations": { "Translations": {
@ -25217,6 +25267,156 @@
"zh_TW": "" "zh_TW": ""
} }
}, },
{
"ID": "SetupWizardFirmwarePageInstallSuccessNotificationTitle",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Firmware installed",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardFirmwarePageInstallSuccessNotificationText",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Installed firmware version {0}.",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardFirmwarePageInstallFailNotificationTitle",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Firmware not installed",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardFirmwarePageInstallFailNotificationText",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "It seems some error occurred when trying to install the firmware at path '{0}'.\nDid that folder contain a firmware dump?",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardFirmwarePageHelpText",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Not sure how to get your firmware off of your Switch?",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardFirmwarePageSkipText",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Skipped setting up firmware as you already have a valid firmware installation and did not choose a folder or file to install from.\nClick '{0}' if you wish to overwrite your firmware.",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{ {
"ID": "SetupWizardGameDirsPageTitle", "ID": "SetupWizardGameDirsPageTitle",
"Translations": { "Translations": {
@ -25242,6 +25442,81 @@
"zh_TW": "" "zh_TW": ""
} }
}, },
{
"ID": "SetupWizardGameDirsPageDescription",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "{0} can be pointed at any number of folders to look for your games, updates, and DLC content.\nAt least one folder must be specified in game directories before continuing.",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardGameDirsPageNoFoldersSelectedError",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "At least one folder for games must be selected; otherwise the UI will be empty.",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{
"ID": "SetupWizardGameDirsPageHelpText",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Not sure how to get your games, updates, and/or DLC onto your PC?",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
},
{ {
"ID": "SetupWizardFinalPageTitle", "ID": "SetupWizardFinalPageTitle",
"Translations": { "Translations": {
@ -25316,6 +25591,31 @@
"zh_CN": "", "zh_CN": "",
"zh_TW": "" "zh_TW": ""
} }
},
{
"ID": "SetupWizardHelpLinkButton",
"Translations": {
"ar_SA": "",
"de_DE": "",
"el_GR": "",
"en_US": "Click here to view a guide.",
"es_ES": "",
"fr_FR": "",
"he_IL": "",
"it_IT": "",
"ja_JP": "",
"ko_KR": "",
"no_NO": "",
"pl_PL": "",
"pt_BR": "",
"ru_RU": "",
"sv_SE": "",
"th_TH": "",
"tr_TR": "",
"uk_UA": "",
"zh_CN": "",
"zh_TW": ""
}
} }
] ]
} }

View file

@ -19,13 +19,14 @@ namespace Ryujinx.Ava.UI.SetupWizard.Pages
{ {
public partial class SetupFirmwarePageContext() : SetupWizardPageContext(LocaleKeys.SetupWizardFirmwarePageTitle) public partial class SetupFirmwarePageContext() : SetupWizardPageContext(LocaleKeys.SetupWizardFirmwarePageTitle)
{ {
[ObservableProperty] [ObservableProperty] public partial string FirmwareSourcePath { get; set; }
public partial string FirmwareSourcePath { get; set; }
[RelayCommand] [RelayCommand]
private static async Task BrowseFile(TextBox tb) private static async Task BrowseFile(TextBox tb)
{ {
Optional<IStorageFile> result = await RyujinxApp.MainWindow.ViewModel.StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions Optional<IStorageFile> result =
await RyujinxApp.MainWindow.ViewModel.StorageProvider.OpenSingleFilePickerAsync(
new FilePickerOpenOptions
{ {
Title = LocaleManager.Instance[LocaleKeys.SetupWizardFirmwarePageFilePopupTitle], Title = LocaleManager.Instance[LocaleKeys.SetupWizardFirmwarePageFilePopupTitle],
FileTypeFilter = new List<FilePickerFileType> FileTypeFilter = new List<FilePickerFileType>
@ -60,7 +61,9 @@ namespace Ryujinx.Ava.UI.SetupWizard.Pages
[RelayCommand] [RelayCommand]
private static async Task BrowseFolder(TextBox tb) private static async Task BrowseFolder(TextBox tb)
{ {
Optional<IStorageFolder> result = await RyujinxApp.MainWindow.ViewModel.StorageProvider.OpenSingleFolderPickerAsync(new FolderPickerOpenOptions Optional<IStorageFolder> result =
await RyujinxApp.MainWindow.ViewModel.StorageProvider.OpenSingleFolderPickerAsync(
new FolderPickerOpenOptions
{ {
Title = LocaleManager.Instance[LocaleKeys.SetupWizardFirmwarePageFolderPopupTitle] Title = LocaleManager.Instance[LocaleKeys.SetupWizardFirmwarePageFolderPopupTitle]
}); });
@ -81,14 +84,14 @@ namespace Ryujinx.Ava.UI.SetupWizard.Pages
grid.Children.Add(new TextBlock grid.Children.Add(new TextBlock
{ {
Text = "Not sure how to get your firmware off of your Switch?", Text = LocaleManager.Instance[LocaleKeys.SetupWizardFirmwarePageHelpText],
HorizontalAlignment = HorizontalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center,
GridRow = 0 GridRow = 0
}); });
grid.Children.Add(new HyperlinkButton grid.Children.Add(new HyperlinkButton
{ {
Content = "Click here to view a guide.", Content = LocaleManager.Instance[LocaleKeys.SetupWizardHelpLinkButton],
NavigateUri = new Uri(SharedConstants.DumpFirmwareWikiUrl), NavigateUri = new Uri(SharedConstants.DumpFirmwareWikiUrl),
HorizontalAlignment = HorizontalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center,
GridRow = 1 GridRow = 1
@ -102,8 +105,12 @@ namespace Ryujinx.Ava.UI.SetupWizard.Pages
if (string.IsNullOrEmpty(FirmwareSourcePath) && RyujinxSetupWizard.HasFirmware) if (string.IsNullOrEmpty(FirmwareSourcePath) && RyujinxSetupWizard.HasFirmware)
{ {
NotificationManager.Information( NotificationManager.Information(
title: LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle], title: LocaleManager.Instance[LocaleKeys.RyujinxInfo],
"Skipped setting up firmware as you already have a valid firmware installation and did not choose a folder or file to install from.\n\nClick 'Back' if you wish to overwrite your firmware."); text: LocaleManager.GetFormatted(
LocaleKeys.SetupWizardFirmwarePageSkipText,
LocaleManager.Instance[LocaleKeys.SetupWizardActionBack]
)
);
return Result.Success; // This handles the user selecting no file/dir and just hitting Next. return Result.Success; // This handles the user selecting no file/dir and just hitting Next.
} }
@ -117,18 +124,24 @@ namespace Ryujinx.Ava.UI.SetupWizard.Pages
if (installedFwVer != null) if (installedFwVer != null)
{ {
NotificationManager.Information( NotificationManager.Information(
"Firmware installed", LocaleManager.Instance[LocaleKeys.SetupWizardFirmwarePageInstallSuccessNotificationTitle],
$"Installed firmware version {installedFwVer.VersionString}." LocaleManager.GetFormatted(
LocaleKeys.SetupWizardFirmwarePageInstallSuccessNotificationTitle,
installedFwVer.VersionString
)
); );
} }
else else
{ {
NotificationManager.Error( NotificationManager.Error(
"Firmware not installed", LocaleManager.Instance[LocaleKeys.SetupWizardFirmwarePageInstallFailNotificationTitle],
$"It seems some error occurred when trying to install the firmware at path '{FirmwareSourcePath}'." + LocaleManager.GetFormatted(
"\nDid that folder contain a firmware dump?" LocaleKeys.SetupWizardFirmwarePageInstallFailNotificationText,
FirmwareSourcePath
)
); );
} }
RyujinxApp.MainWindow.ViewModel.RefreshFirmwareStatus(installedFwVer, allowNullVersion: true); RyujinxApp.MainWindow.ViewModel.RefreshFirmwareStatus(installedFwVer, allowNullVersion: true);
// Purge Applet Cache. // Purge Applet Cache.

View file

@ -11,8 +11,8 @@
Margin="10" Margin="10"
Spacing="10" Spacing="10"
Orientation="Vertical" HorizontalAlignment="Stretch"> Orientation="Vertical" HorizontalAlignment="Stretch">
<TextBlock Classes="h1" Text="{ext:Locale SetupWizardGameDirsPageDescription}" />
<TextBlock Classes="h1" Text="{ext:Locale SettingsTabGeneralGameDirectories}" /> <TextBlock Classes="h1" Text="{ext:Locale SettingsTabGeneralGameDirectories}" />
<StackPanel <StackPanel
Margin="10,0,0,0" Margin="10,0,0,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"

View file

@ -27,8 +27,8 @@ namespace Ryujinx.UI.SetupWizard.Pages
{ {
if (GameDirs.Count is 0) if (GameDirs.Count is 0)
{ {
NotificationManager.Error("At least one folder for games must be selected; otherwise the UI will be empty."); NotificationManager.Error(LocaleManager.Instance[LocaleKeys.SetupWizardGameDirsPageNoFoldersSelectedError]);
return Result.Failure(RetryError.Shared); return Result.Fail;
} }
ConfigurationState.Instance.UI.GameDirs.Value = GameDirs.ToList(); ConfigurationState.Instance.UI.GameDirs.Value = GameDirs.ToList();
@ -49,14 +49,14 @@ namespace Ryujinx.UI.SetupWizard.Pages
grid.Children.Add(new TextBlock grid.Children.Add(new TextBlock
{ {
Text = "Not sure how to get your games, updates, and/or DLC onto your PC?", Text = LocaleManager.Instance[LocaleKeys.SetupWizardGameDirsPageHelpText],
HorizontalAlignment = HorizontalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center,
GridRow = 0 GridRow = 0
}); });
grid.Children.Add(new HyperlinkButton grid.Children.Add(new HyperlinkButton
{ {
Content = "Click here to view a guide.", Content = LocaleManager.Instance[LocaleKeys.SetupWizardHelpLinkButton],
HorizontalAlignment = HorizontalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center,
NavigateUri = new Uri(SharedConstants.DumpContentWikiUrl), NavigateUri = new Uri(SharedConstants.DumpContentWikiUrl),
GridRow = 1 GridRow = 1
@ -65,9 +65,4 @@ namespace Ryujinx.UI.SetupWizard.Pages
return grid; return grid;
} }
} }
public struct RetryError : IErrorState
{
public static readonly RetryError Shared = new();
}
} }

View file

@ -31,14 +31,14 @@ namespace Ryujinx.Ava.UI.SetupWizard.Pages
grid.Children.Add(new TextBlock grid.Children.Add(new TextBlock
{ {
Text = "Not sure how to get your keys?", Text = LocaleManager.Instance[LocaleKeys.SetupWizardKeysPageHelpText],
HorizontalAlignment = HorizontalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center,
GridRow = 0 GridRow = 0
}); });
grid.Children.Add(new HyperlinkButton grid.Children.Add(new HyperlinkButton
{ {
Content = "Click here to view a guide.", Content = LocaleManager.Instance[LocaleKeys.SetupWizardHelpLinkButton],
HorizontalAlignment = HorizontalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center,
NavigateUri = new Uri(SharedConstants.DumpKeysWikiUrl), NavigateUri = new Uri(SharedConstants.DumpKeysWikiUrl),
GridRow = 1 GridRow = 1
@ -70,8 +70,11 @@ namespace Ryujinx.Ava.UI.SetupWizard.Pages
if (string.IsNullOrEmpty(KeysFolderPath) && RyujinxApp.MainWindow.VirtualFileSystem.HasKeySet) if (string.IsNullOrEmpty(KeysFolderPath) && RyujinxApp.MainWindow.VirtualFileSystem.HasKeySet)
{ {
NotificationManager.Information( NotificationManager.Information(
title: LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle], title: LocaleManager.Instance[LocaleKeys.RyujinxInfo],
"Skipped setting up keys as you already have a valid key installation and did not choose a folder to install from.\n\nClick 'Back' if you wish to reinstall your keys."); text: LocaleManager.GetFormatted(
LocaleKeys.SetupWizardKeysPageSkipText,
LocaleManager.Instance[LocaleKeys.SetupWizardActionBack]
));
return Result.Success; // This handles the user selecting no folder and just hitting Next. return Result.Success; // This handles the user selecting no folder and just hitting Next.
} }

View file

@ -68,12 +68,7 @@ namespace Ryujinx.Ava.UI.SetupWizard
if (!result) if (!result)
return false; return false;
var res = gdContext.CompleteStep(); if (!gdContext.CompleteStep())
if (res.IsOf<RetryError>())
return false;
if (!res)
goto Retry; goto Retry;
return true; return true;

View file

@ -62,7 +62,7 @@ namespace Ryujinx.Ava.UI.SetupWizard
// Fuck it, weird window height hack to do it instead. // Fuck it, weird window height hack to do it instead.
// 120 is not exact, just a random number. Looks fine though. // 120 is not exact, just a random number. Looks fine though.
NotificationPosition.TopCenter, NotificationPosition.TopCenter,
margin: new Thickness(0, _window.Height - 120, 0, 0) margin: new Thickness(0, _window.Height - 135, 0, 0)
); );
RyujinxSetupWizardWindow.IsOpen = true; RyujinxSetupWizardWindow.IsOpen = true;