Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 52ae6a0b26 | |||
| 8ae72c1a00 | |||
| 06abba25c1 | |||
| de00a71690 | |||
| 315a1819c0 | |||
| 4ffb8aef12 | |||
| 290a6ad5de | |||
| eda4f4349b | |||
| 5fbcb1f3a7 | |||
| 1d80749526 | |||
| fa4102a803 |
@@ -1,6 +1,8 @@
|
|||||||
namespace Ryujinx.Common.Configuration.Hid.Controller
|
namespace Ryujinx.Common.Configuration.Hid.Controller
|
||||||
{
|
{
|
||||||
public class JoyconConfigControllerStick<TButton, TStick> where TButton : unmanaged where TStick : unmanaged
|
public class JoyconConfigControllerStick<TButton, TStick>
|
||||||
|
where TButton : unmanaged
|
||||||
|
where TStick : unmanaged
|
||||||
{
|
{
|
||||||
public TStick Joystick { get; set; }
|
public TStick Joystick { get; set; }
|
||||||
public bool InvertStickX { get; set; }
|
public bool InvertStickX { get; set; }
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
using LibHac.Common;
|
||||||
|
using LibHac.Ns;
|
||||||
|
using System;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Ryujinx.HLE
|
||||||
|
{
|
||||||
|
public static class StructHelpers
|
||||||
|
{
|
||||||
|
public static BlitStruct<ApplicationControlProperty> CreateCustomNacpData(string name, string version)
|
||||||
|
{
|
||||||
|
// https://switchbrew.org/wiki/NACP
|
||||||
|
const int OffsetOfDisplayVersion = 0x3060;
|
||||||
|
|
||||||
|
// https://switchbrew.org/wiki/NACP#ApplicationTitle
|
||||||
|
const int TotalApplicationTitles = 0x10;
|
||||||
|
const int SizeOfApplicationTitle = 0x300;
|
||||||
|
const int OffsetOfApplicationPublisherStrings = 0x200;
|
||||||
|
|
||||||
|
|
||||||
|
var nacpData = new BlitStruct<ApplicationControlProperty>(1);
|
||||||
|
|
||||||
|
// name and publisher buffer
|
||||||
|
// repeat once for each locale (the ApplicationControlProperty has 16 locales)
|
||||||
|
for (int i = 0; i < TotalApplicationTitles; i++)
|
||||||
|
{
|
||||||
|
Encoding.ASCII.GetBytes(name).AsSpan().CopyTo(nacpData.ByteSpan[(i * SizeOfApplicationTitle)..]);
|
||||||
|
"Ryujinx"u8.CopyTo(nacpData.ByteSpan[(i * SizeOfApplicationTitle + OffsetOfApplicationPublisherStrings)..]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// version buffer
|
||||||
|
Encoding.ASCII.GetBytes(version).AsSpan().CopyTo(nacpData.ByteSpan[OffsetOfDisplayVersion..]);
|
||||||
|
|
||||||
|
return nacpData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using CommandLine;
|
using CommandLine;
|
||||||
|
using Gommon;
|
||||||
using LibHac.Tools.FsSystem;
|
using LibHac.Tools.FsSystem;
|
||||||
using Ryujinx.Audio.Backends.SDL2;
|
using Ryujinx.Audio.Backends.SDL2;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
@@ -96,8 +97,13 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
}
|
}
|
||||||
|
|
||||||
Parser.Default.ParseArguments<Options>(args)
|
Parser.Default.ParseArguments<Options>(args)
|
||||||
.WithParsed(Load)
|
.WithParsed(Load)
|
||||||
.WithNotParsed(errors => errors.Output());
|
.WithNotParsed(errors =>
|
||||||
|
{
|
||||||
|
Logger.Error?.PrintMsg(LogClass.Application, "Error parsing command-line arguments:");
|
||||||
|
|
||||||
|
errors.ForEach(err => Logger.Error?.PrintMsg(LogClass.Application, $" - {err.Tag}"));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static InputConfig HandlePlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index)
|
private static InputConfig HandlePlayerConfiguration(string inputProfileName, string inputId, PlayerIndex index)
|
||||||
@@ -579,8 +585,8 @@ namespace Ryujinx.Headless.SDL2
|
|||||||
options.MultiplayerLanInterfaceId,
|
options.MultiplayerLanInterfaceId,
|
||||||
Common.Configuration.Multiplayer.MultiplayerMode.Disabled,
|
Common.Configuration.Multiplayer.MultiplayerMode.Disabled,
|
||||||
false,
|
false,
|
||||||
"",
|
string.Empty,
|
||||||
"",
|
string.Empty,
|
||||||
options.CustomVSyncInterval);
|
options.CustomVSyncInterval);
|
||||||
|
|
||||||
return new Switch(configuration);
|
return new Switch(configuration);
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using DynamicData;
|
using DynamicData;
|
||||||
using DynamicData.Kernel;
|
|
||||||
using Gommon;
|
using Gommon;
|
||||||
using LibHac;
|
using LibHac;
|
||||||
using LibHac.Common;
|
using LibHac.Common;
|
||||||
@@ -37,14 +36,13 @@ using System.Threading.Tasks;
|
|||||||
using ContentType = LibHac.Ncm.ContentType;
|
using ContentType = LibHac.Ncm.ContentType;
|
||||||
using MissingKeyException = LibHac.Common.Keys.MissingKeyException;
|
using MissingKeyException = LibHac.Common.Keys.MissingKeyException;
|
||||||
using Path = System.IO.Path;
|
using Path = System.IO.Path;
|
||||||
using SpanHelpers = LibHac.Common.SpanHelpers;
|
|
||||||
using TimeSpan = System.TimeSpan;
|
using TimeSpan = System.TimeSpan;
|
||||||
|
|
||||||
namespace Ryujinx.UI.App.Common
|
namespace Ryujinx.UI.App.Common
|
||||||
{
|
{
|
||||||
public class ApplicationLibrary
|
public class ApplicationLibrary
|
||||||
{
|
{
|
||||||
public static string DefaultLanPlayWebHost = "ryuldnweb.vudjun.com";
|
public const string DefaultLanPlayWebHost = "ryuldnweb.vudjun.com";
|
||||||
public Language DesiredLanguage { get; set; }
|
public Language DesiredLanguage { get; set; }
|
||||||
public event EventHandler<ApplicationCountUpdatedEventArgs> ApplicationCountUpdated;
|
public event EventHandler<ApplicationCountUpdatedEventArgs> ApplicationCountUpdated;
|
||||||
public event EventHandler<LdnGameDataReceivedEventArgs> LdnGameDataReceived;
|
public event EventHandler<LdnGameDataReceivedEventArgs> LdnGameDataReceived;
|
||||||
@@ -191,12 +189,9 @@ namespace Ryujinx.UI.App.Common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isExeFs)
|
return isExeFs
|
||||||
{
|
? GetApplicationFromExeFs(pfs, filePath)
|
||||||
return GetApplicationFromExeFs(pfs, filePath);
|
: null;
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <exception cref="LibHac.Common.Keys.MissingKeyException">The configured key set is missing a key.</exception>
|
/// <exception cref="LibHac.Common.Keys.MissingKeyException">The configured key set is missing a key.</exception>
|
||||||
@@ -512,10 +507,6 @@ namespace Ryujinx.UI.App.Common
|
|||||||
case ".xci":
|
case ".xci":
|
||||||
case ".nsp":
|
case ".nsp":
|
||||||
{
|
{
|
||||||
IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks
|
|
||||||
? IntegrityCheckLevel.ErrorOnInvalid
|
|
||||||
: IntegrityCheckLevel.None;
|
|
||||||
|
|
||||||
using IFileSystem pfs = PartitionFileSystemUtils.OpenApplicationFileSystem(filePath, _virtualFileSystem);
|
using IFileSystem pfs = PartitionFileSystemUtils.OpenApplicationFileSystem(filePath, _virtualFileSystem);
|
||||||
|
|
||||||
foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca"))
|
foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca"))
|
||||||
@@ -604,7 +595,7 @@ namespace Ryujinx.UI.App.Common
|
|||||||
controlNca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.None)
|
controlNca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.None)
|
||||||
.OpenFile(ref nacpFile.Ref, "/control.nacp".ToU8Span(), OpenMode.Read)
|
.OpenFile(ref nacpFile.Ref, "/control.nacp".ToU8Span(), OpenMode.Read)
|
||||||
.ThrowIfFailure();
|
.ThrowIfFailure();
|
||||||
nacpFile.Get.Read(out _, 0, SpanHelpers.AsByteSpan(ref controlData),
|
nacpFile.Get.Read(out _, 0, LibHac.Common.SpanHelpers.AsByteSpan(ref controlData),
|
||||||
ReadOption.None).ThrowIfFailure();
|
ReadOption.None).ThrowIfFailure();
|
||||||
|
|
||||||
var displayVersion = controlData.DisplayVersionString.ToString();
|
var displayVersion = controlData.DisplayVersionString.ToString();
|
||||||
@@ -827,7 +818,7 @@ namespace Ryujinx.UI.App.Common
|
|||||||
{
|
{
|
||||||
_downloadableContents.Edit(it =>
|
_downloadableContents.Edit(it =>
|
||||||
{
|
{
|
||||||
DownloadableContentsHelper.SaveDownloadableContentsJson(_virtualFileSystem, application.IdBase, dlcs);
|
DownloadableContentsHelper.SaveDownloadableContentsJson(application.IdBase, dlcs);
|
||||||
|
|
||||||
it.Remove(it.Items.Where(item => item.Dlc.TitleIdBase == application.IdBase));
|
it.Remove(it.Items.Where(item => item.Dlc.TitleIdBase == application.IdBase));
|
||||||
it.AddOrUpdate(dlcs);
|
it.AddOrUpdate(dlcs);
|
||||||
@@ -839,7 +830,7 @@ namespace Ryujinx.UI.App.Common
|
|||||||
{
|
{
|
||||||
_titleUpdates.Edit(it =>
|
_titleUpdates.Edit(it =>
|
||||||
{
|
{
|
||||||
TitleUpdatesHelper.SaveTitleUpdatesJson(_virtualFileSystem, application.IdBase, updates);
|
TitleUpdatesHelper.SaveTitleUpdatesJson(application.IdBase, updates);
|
||||||
|
|
||||||
it.Remove(it.Items.Where(item => item.TitleUpdate.TitleIdBase == application.IdBase));
|
it.Remove(it.Items.Where(item => item.TitleUpdate.TitleIdBase == application.IdBase));
|
||||||
it.AddOrUpdate(updates);
|
it.AddOrUpdate(updates);
|
||||||
@@ -1088,14 +1079,15 @@ namespace Ryujinx.UI.App.Common
|
|||||||
|
|
||||||
private bool AddAndAutoSelectUpdate(TitleUpdateModel update)
|
private bool AddAndAutoSelectUpdate(TitleUpdateModel update)
|
||||||
{
|
{
|
||||||
var currentlySelected = TitleUpdates.Items.FirstOrOptional(it =>
|
if (update == null) return false;
|
||||||
|
|
||||||
|
var currentlySelected = TitleUpdates.Items.FindFirst(it =>
|
||||||
it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected);
|
it.TitleUpdate.TitleIdBase == update.TitleIdBase && it.IsSelected);
|
||||||
|
|
||||||
var shouldSelect = !currentlySelected.HasValue ||
|
var shouldSelect = currentlySelected.Check(curr => curr.TitleUpdate?.Version < update.Version);
|
||||||
currentlySelected.Value.TitleUpdate.Version < update.Version;
|
|
||||||
|
|
||||||
_titleUpdates.AddOrUpdate((update, shouldSelect));
|
_titleUpdates.AddOrUpdate((update, shouldSelect));
|
||||||
|
|
||||||
if (currentlySelected.HasValue && shouldSelect)
|
if (currentlySelected.HasValue && shouldSelect)
|
||||||
{
|
{
|
||||||
_titleUpdates.AddOrUpdate((currentlySelected.Value.TitleUpdate, false));
|
_titleUpdates.AddOrUpdate((currentlySelected.Value.TitleUpdate, false));
|
||||||
@@ -1464,7 +1456,7 @@ namespace Ryujinx.UI.App.Common
|
|||||||
if (addedNewDlc)
|
if (addedNewDlc)
|
||||||
{
|
{
|
||||||
var gameDlcs = it.Items.Where(dlc => dlc.Dlc.TitleIdBase == application.IdBase).ToList();
|
var gameDlcs = it.Items.Where(dlc => dlc.Dlc.TitleIdBase == application.IdBase).ToList();
|
||||||
DownloadableContentsHelper.SaveDownloadableContentsJson(_virtualFileSystem, application.IdBase,
|
DownloadableContentsHelper.SaveDownloadableContentsJson(application.IdBase,
|
||||||
gameDlcs);
|
gameDlcs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1483,11 +1475,11 @@ namespace Ryujinx.UI.App.Common
|
|||||||
TitleUpdatesHelper.LoadTitleUpdatesJson(_virtualFileSystem, application.IdBase);
|
TitleUpdatesHelper.LoadTitleUpdatesJson(_virtualFileSystem, application.IdBase);
|
||||||
it.AddOrUpdate(savedUpdates);
|
it.AddOrUpdate(savedUpdates);
|
||||||
|
|
||||||
var selectedUpdate = savedUpdates.FirstOrOptional(update => update.IsSelected);
|
var selectedUpdate = savedUpdates.FindFirst(update => update.IsSelected);
|
||||||
|
|
||||||
if (TryGetTitleUpdatesFromFile(application.Path, out var bundledUpdates))
|
if (TryGetTitleUpdatesFromFile(application.Path, out var bundledUpdates))
|
||||||
{
|
{
|
||||||
var savedUpdateLookup = savedUpdates.Select(update => update.Item1).ToHashSet();
|
var savedUpdateLookup = savedUpdates.Select(update => update.Update).ToHashSet();
|
||||||
bool updatesChanged = false;
|
bool updatesChanged = false;
|
||||||
|
|
||||||
foreach (var update in bundledUpdates.OrderByDescending(bundled => bundled.Version))
|
foreach (var update in bundledUpdates.OrderByDescending(bundled => bundled.Version))
|
||||||
@@ -1495,12 +1487,11 @@ namespace Ryujinx.UI.App.Common
|
|||||||
if (!savedUpdateLookup.Contains(update))
|
if (!savedUpdateLookup.Contains(update))
|
||||||
{
|
{
|
||||||
bool shouldSelect = false;
|
bool shouldSelect = false;
|
||||||
if (!selectedUpdate.HasValue || selectedUpdate.Value.Item1.Version < update.Version)
|
if (selectedUpdate.Check(su => su.Update?.Version < update.Version))
|
||||||
{
|
{
|
||||||
shouldSelect = true;
|
shouldSelect = true;
|
||||||
if (selectedUpdate.HasValue)
|
_titleUpdates.AddOrUpdate((selectedUpdate.Value.Update, false));
|
||||||
_titleUpdates.AddOrUpdate((selectedUpdate.Value.Item1, false));
|
selectedUpdate = (update, true);
|
||||||
selectedUpdate = DynamicData.Kernel.Optional<(TitleUpdateModel, bool IsSelected)>.Create((update, true));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
modifiedVersion = modifiedVersion || shouldSelect;
|
modifiedVersion = modifiedVersion || shouldSelect;
|
||||||
@@ -1513,7 +1504,7 @@ namespace Ryujinx.UI.App.Common
|
|||||||
if (updatesChanged)
|
if (updatesChanged)
|
||||||
{
|
{
|
||||||
var gameUpdates = it.Items.Where(update => update.TitleUpdate.TitleIdBase == application.IdBase).ToList();
|
var gameUpdates = it.Items.Where(update => update.TitleUpdate.TitleIdBase == application.IdBase).ToList();
|
||||||
TitleUpdatesHelper.SaveTitleUpdatesJson(_virtualFileSystem, application.IdBase, gameUpdates);
|
TitleUpdatesHelper.SaveTitleUpdatesJson(application.IdBase, gameUpdates);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1525,14 +1516,14 @@ namespace Ryujinx.UI.App.Common
|
|||||||
private void SaveDownloadableContentsForGame(ulong titleIdBase)
|
private void SaveDownloadableContentsForGame(ulong titleIdBase)
|
||||||
{
|
{
|
||||||
var dlcs = DownloadableContents.Items.Where(dlc => dlc.Dlc.TitleIdBase == titleIdBase).ToList();
|
var dlcs = DownloadableContents.Items.Where(dlc => dlc.Dlc.TitleIdBase == titleIdBase).ToList();
|
||||||
DownloadableContentsHelper.SaveDownloadableContentsJson(_virtualFileSystem, titleIdBase, dlcs);
|
DownloadableContentsHelper.SaveDownloadableContentsJson(titleIdBase, dlcs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save the _currently tracked_ update state for the game
|
// Save the _currently tracked_ update state for the game
|
||||||
private void SaveTitleUpdatesForGame(ulong titleIdBase)
|
private void SaveTitleUpdatesForGame(ulong titleIdBase)
|
||||||
{
|
{
|
||||||
var updates = TitleUpdates.Items.Where(update => update.TitleUpdate.TitleIdBase == titleIdBase).ToList();
|
var updates = TitleUpdates.Items.Where(update => update.TitleUpdate.TitleIdBase == titleIdBase).ToList();
|
||||||
TitleUpdatesHelper.SaveTitleUpdatesJson(_virtualFileSystem, titleIdBase, updates);
|
TitleUpdatesHelper.SaveTitleUpdatesJson(titleIdBase, updates);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ApplicationData isnt live-updating (e.g. when an update gets applied) and so this is meant to trigger a refresh
|
// ApplicationData isnt live-updating (e.g. when an update gets applied) and so this is meant to trigger a refresh
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
using ARMeilleure;
|
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Common.Configuration.Hid;
|
using Ryujinx.Common.Configuration.Hid;
|
||||||
using Ryujinx.Common.Configuration.Hid.Controller;
|
|
||||||
using Ryujinx.Common.Configuration.Hid.Keyboard;
|
using Ryujinx.Common.Configuration.Hid.Keyboard;
|
||||||
using Ryujinx.Common.Configuration.Multiplayer;
|
using Ryujinx.Common.Configuration.Multiplayer;
|
||||||
using Ryujinx.Common.Logging;
|
|
||||||
using Ryujinx.Graphics.Vulkan;
|
using Ryujinx.Graphics.Vulkan;
|
||||||
using Ryujinx.HLE;
|
using Ryujinx.HLE;
|
||||||
using Ryujinx.UI.Common.Configuration.System;
|
using Ryujinx.UI.Common.Configuration.System;
|
||||||
using Ryujinx.UI.Common.Configuration.UI;
|
using Ryujinx.UI.Common.Configuration.UI;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Ryujinx.UI.Common.Configuration
|
namespace Ryujinx.UI.Common.Configuration
|
||||||
{
|
{
|
||||||
@@ -21,10 +17,10 @@ namespace Ryujinx.UI.Common.Configuration
|
|||||||
if (Instance != null)
|
if (Instance != null)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Configuration is already initialized");
|
throw new InvalidOperationException("Configuration is already initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance = new ConfigurationState();
|
Instance = new ConfigurationState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConfigurationFileFormat ToFileFormat()
|
public ConfigurationFileFormat ToFileFormat()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,6 +7,24 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
{
|
{
|
||||||
public static partial class ConsoleHelper
|
public static partial class ConsoleHelper
|
||||||
{
|
{
|
||||||
|
[SupportedOSPlatform("windows")]
|
||||||
|
[LibraryImport("kernel32")]
|
||||||
|
private static partial nint GetConsoleWindow();
|
||||||
|
|
||||||
|
[SupportedOSPlatform("windows")]
|
||||||
|
[LibraryImport("user32")]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
private static partial bool ShowWindow(nint hWnd, int nCmdShow);
|
||||||
|
|
||||||
|
[SupportedOSPlatform("windows")]
|
||||||
|
[LibraryImport("user32")]
|
||||||
|
private static partial nint GetForegroundWindow();
|
||||||
|
|
||||||
|
[SupportedOSPlatform("windows")]
|
||||||
|
[LibraryImport("user32")]
|
||||||
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
|
private static partial bool SetForegroundWindow(nint hWnd);
|
||||||
|
|
||||||
public static bool SetConsoleWindowStateSupported => OperatingSystem.IsWindows();
|
public static bool SetConsoleWindowStateSupported => OperatingSystem.IsWindows();
|
||||||
|
|
||||||
public static void SetConsoleWindowState(bool show)
|
public static void SetConsoleWindowState(bool show)
|
||||||
@@ -35,16 +53,11 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetForegroundWindow(hWnd);
|
||||||
|
|
||||||
|
hWnd = GetForegroundWindow();
|
||||||
|
|
||||||
ShowWindow(hWnd, show ? SW_SHOW : SW_HIDE);
|
ShowWindow(hWnd, show ? SW_SHOW : SW_HIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
[SupportedOSPlatform("windows")]
|
|
||||||
[LibraryImport("kernel32")]
|
|
||||||
private static partial nint GetConsoleWindow();
|
|
||||||
|
|
||||||
[SupportedOSPlatform("windows")]
|
|
||||||
[LibraryImport("user32")]
|
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
|
||||||
private static partial bool ShowWindow(nint hWnd, int nCmdShow);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SaveDownloadableContentsJson(VirtualFileSystem vfs, ulong applicationIdBase, List<(DownloadableContentModel, bool IsEnabled)> dlcs)
|
public static void SaveDownloadableContentsJson(ulong applicationIdBase, List<(DownloadableContentModel, bool IsEnabled)> dlcs)
|
||||||
{
|
{
|
||||||
DownloadableContentContainer container = default;
|
DownloadableContentContainer container = default;
|
||||||
List<DownloadableContentContainer> downloadableContentContainerList = new();
|
List<DownloadableContentContainer> downloadableContentContainerList = new();
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
{
|
{
|
||||||
private static readonly TitleUpdateMetadataJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
|
private static readonly TitleUpdateMetadataJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
|
||||||
|
|
||||||
public static List<(TitleUpdateModel, bool IsSelected)> LoadTitleUpdatesJson(VirtualFileSystem vfs, ulong applicationIdBase)
|
public static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdatesJson(VirtualFileSystem vfs, ulong applicationIdBase)
|
||||||
{
|
{
|
||||||
var titleUpdatesJsonPath = PathToGameUpdatesJson(applicationIdBase);
|
var titleUpdatesJsonPath = PathToGameUpdatesJson(applicationIdBase);
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SaveTitleUpdatesJson(VirtualFileSystem vfs, ulong applicationIdBase, List<(TitleUpdateModel, bool IsSelected)> updates)
|
public static void SaveTitleUpdatesJson(ulong applicationIdBase, List<(TitleUpdateModel, bool IsSelected)> updates)
|
||||||
{
|
{
|
||||||
var titleUpdateWindowData = new TitleUpdateMetadata
|
var titleUpdateWindowData = new TitleUpdateMetadata
|
||||||
{
|
{
|
||||||
@@ -77,7 +77,7 @@ namespace Ryujinx.UI.Common.Helper
|
|||||||
JsonHelper.SerializeToFile(titleUpdatesJsonPath, titleUpdateWindowData, _serializerContext.TitleUpdateMetadata);
|
JsonHelper.SerializeToFile(titleUpdatesJsonPath, titleUpdateWindowData, _serializerContext.TitleUpdateMetadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<(TitleUpdateModel, bool IsSelected)> LoadTitleUpdates(VirtualFileSystem vfs, TitleUpdateMetadata titleUpdateMetadata, ulong applicationIdBase)
|
private static List<(TitleUpdateModel Update, bool IsSelected)> LoadTitleUpdates(VirtualFileSystem vfs, TitleUpdateMetadata titleUpdateMetadata, ulong applicationIdBase)
|
||||||
{
|
{
|
||||||
var result = new List<(TitleUpdateModel, bool IsSelected)>();
|
var result = new List<(TitleUpdateModel, bool IsSelected)>();
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
</Application.Resources>
|
</Application.Resources>
|
||||||
<Application.Styles>
|
<Application.Styles>
|
||||||
<sty:FluentAvaloniaTheme PreferSystemTheme="False" />
|
<sty:FluentAvaloniaTheme PreferUserAccentColor="True" PreferSystemTheme="False" />
|
||||||
<StyleInclude Source="/Assets/Styles/Styles.xaml" />
|
<StyleInclude Source="/Assets/Styles/Styles.xaml" />
|
||||||
</Application.Styles>
|
</Application.Styles>
|
||||||
</Application>
|
</Application>
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "الغش متوفر لـ {0} [{1}]",
|
"CheatWindowHeading": "الغش متوفر لـ {0} [{1}]",
|
||||||
"BuildId": "معرف البناء:",
|
"BuildId": "معرف البناء:",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
||||||
"DlcWindowHeading": "المحتويات القابلة للتنزيل {0}",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "Cheats verfügbar für {0} [{1}]",
|
"CheatWindowHeading": "Cheats verfügbar für {0} [{1}]",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
||||||
"BuildId": "BuildId:",
|
"BuildId": "BuildId:",
|
||||||
"DlcWindowHeading": "DLC verfügbar für {0} [{1}]",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "Διαθέσιμα Cheats για {0} [{1}]",
|
"CheatWindowHeading": "Διαθέσιμα Cheats για {0} [{1}]",
|
||||||
"BuildId": "BuildId:",
|
"BuildId": "BuildId:",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
||||||
"DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -802,7 +802,7 @@
|
|||||||
"CheatWindowHeading": "Cheats Available for {0} [{1}]",
|
"CheatWindowHeading": "Cheats Available for {0} [{1}]",
|
||||||
"BuildId": "BuildId:",
|
"BuildId": "BuildId:",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
||||||
"DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -787,7 +787,7 @@
|
|||||||
"UpdateWindowBundledContentNotice": "Las actualizaciones agrupadas no pueden ser eliminadas, solamente deshabilitadas.",
|
"UpdateWindowBundledContentNotice": "Las actualizaciones agrupadas no pueden ser eliminadas, solamente deshabilitadas.",
|
||||||
"CheatWindowHeading": "Cheats disponibles para {0} [{1}]",
|
"CheatWindowHeading": "Cheats disponibles para {0} [{1}]",
|
||||||
"BuildId": "Id de compilación:",
|
"BuildId": "Id de compilación:",
|
||||||
"DlcWindowHeading": "Contenido descargable disponible para {0} [{1}]",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)",
|
"DlcWindowDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)",
|
||||||
"AutoloadDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)",
|
"AutoloadDlcAddedMessage": "Se agregaron {0} nuevo(s) contenido(s) descargable(s)",
|
||||||
"AutoloadDlcRemovedMessage": "Se eliminaron {0} contenido(s) descargable(s) faltantes",
|
"AutoloadDlcRemovedMessage": "Se eliminaron {0} contenido(s) descargable(s) faltantes",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "Cheats disponibles pour {0} [{1}]",
|
"CheatWindowHeading": "Cheats disponibles pour {0} [{1}]",
|
||||||
"BuildId": "BuildId :",
|
"BuildId": "BuildId :",
|
||||||
"DlcWindowBundledContentNotice": "Les DLC inclus avec le jeu ne peuvent pas être supprimés mais peuvent être désactivés.",
|
"DlcWindowBundledContentNotice": "Les DLC inclus avec le jeu ne peuvent pas être supprimés mais peuvent être désactivés.",
|
||||||
"DlcWindowHeading": "{0} Contenu(s) téléchargeable(s)",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)",
|
"DlcWindowDlcAddedMessage": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)",
|
||||||
"AutoloadDlcAddedMessage": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)",
|
"AutoloadDlcAddedMessage": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)",
|
||||||
"AutoloadDlcRemovedMessage": "{0} contenu(s) téléchargeable(s) manquant(s) supprimé(s)",
|
"AutoloadDlcRemovedMessage": "{0} contenu(s) téléchargeable(s) manquant(s) supprimé(s)",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "Trucchi disponibili per {0} [{1}]",
|
"CheatWindowHeading": "Trucchi disponibili per {0} [{1}]",
|
||||||
"BuildId": "ID Build",
|
"BuildId": "ID Build",
|
||||||
"DlcWindowBundledContentNotice": "i DLC \"impacchettati\" non possono essere rimossi, ma solo disabilitati.",
|
"DlcWindowBundledContentNotice": "i DLC \"impacchettati\" non possono essere rimossi, ma solo disabilitati.",
|
||||||
"DlcWindowHeading": "DLC disponibili per {0} [{1}]",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} nuovo/i contenuto/i scaricabile/i aggiunto/i",
|
"DlcWindowDlcAddedMessage": "{0} nuovo/i contenuto/i scaricabile/i aggiunto/i",
|
||||||
"AutoloadDlcAddedMessage": "{0} contenuto/i scaricabile/i aggiunto/i",
|
"AutoloadDlcAddedMessage": "{0} contenuto/i scaricabile/i aggiunto/i",
|
||||||
"AutoloadDlcRemovedMessage": "{0} contenuto/i scaricabile/i mancante/i rimosso/i",
|
"AutoloadDlcRemovedMessage": "{0} contenuto/i scaricabile/i mancante/i rimosso/i",
|
||||||
|
|||||||
@@ -787,7 +787,7 @@
|
|||||||
"UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.",
|
"UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.",
|
||||||
"CheatWindowHeading": "利用可能なチート {0} [{1}]",
|
"CheatWindowHeading": "利用可能なチート {0} [{1}]",
|
||||||
"BuildId": "ビルドID:",
|
"BuildId": "ビルドID:",
|
||||||
"DlcWindowHeading": "利用可能な DLC {0} [{1}]",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "{0} [{1}]에 사용 가능한 치트",
|
"CheatWindowHeading": "{0} [{1}]에 사용 가능한 치트",
|
||||||
"BuildId": "빌드ID:",
|
"BuildId": "빌드ID:",
|
||||||
"DlcWindowBundledContentNotice": "번들 DLC는 제거할 수 없으며 비활성화만 가능합니다.",
|
"DlcWindowBundledContentNotice": "번들 DLC는 제거할 수 없으며 비활성화만 가능합니다.",
|
||||||
"DlcWindowHeading": "{1} ({2})에 내려받기 가능한 콘텐츠 {0}개 사용 가능",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨",
|
"DlcWindowDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨",
|
||||||
"AutoloadDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨",
|
"AutoloadDlcAddedMessage": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨",
|
||||||
"AutoloadDlcRemovedMessage": "{0}개의 내려받기 가능한 콘텐츠가 제거됨",
|
"AutoloadDlcRemovedMessage": "{0}개의 내려받기 가능한 콘텐츠가 제거됨",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "Kody Dostępne dla {0} [{1}]",
|
"CheatWindowHeading": "Kody Dostępne dla {0} [{1}]",
|
||||||
"BuildId": "Identyfikator wersji:",
|
"BuildId": "Identyfikator wersji:",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
||||||
"DlcWindowHeading": "{0} Zawartości do Pobrania dostępna dla {1} ({2})",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -787,7 +787,7 @@
|
|||||||
"CheatWindowHeading": "Cheats disponíveis para {0} [{1}]",
|
"CheatWindowHeading": "Cheats disponíveis para {0} [{1}]",
|
||||||
"BuildId": "ID da Build:",
|
"BuildId": "ID da Build:",
|
||||||
"DlcWindowBundledContentNotice": "DLCs incorporadas não podem ser removidas, apenas desativadas.",
|
"DlcWindowBundledContentNotice": "DLCs incorporadas não podem ser removidas, apenas desativadas.",
|
||||||
"DlcWindowHeading": "{0} DLCs disponíveis para {1} ({2})",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} novo(s) conteúdo(s) para download adicionado(s)",
|
"DlcWindowDlcAddedMessage": "{0} novo(s) conteúdo(s) para download adicionado(s)",
|
||||||
"AutoloadDlcAddedMessage": "{0} novo(s) conteúdo(s) para download adicionado(s)",
|
"AutoloadDlcAddedMessage": "{0} novo(s) conteúdo(s) para download adicionado(s)",
|
||||||
"AutoloadDlcRemovedMessage": "{0} conteúdo(s) para download ausente(s) removido(s)",
|
"AutoloadDlcRemovedMessage": "{0} conteúdo(s) para download ausente(s) removido(s)",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "Доступные читы для {0} [{1}]",
|
"CheatWindowHeading": "Доступные читы для {0} [{1}]",
|
||||||
"BuildId": "ID версии:",
|
"BuildId": "ID версии:",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
||||||
"DlcWindowHeading": "{0} DLC",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "สูตรโกงมีให้สำหรับ {0} [{1}]",
|
"CheatWindowHeading": "สูตรโกงมีให้สำหรับ {0} [{1}]",
|
||||||
"BuildId": "รหัสการสร้าง:",
|
"BuildId": "รหัสการสร้าง:",
|
||||||
"DlcWindowBundledContentNotice": "แพ็ค DLC ไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น",
|
"DlcWindowBundledContentNotice": "แพ็ค DLC ไม่สามารถลบทิ้งได้ สามารถปิดใช้งานได้เท่านั้น",
|
||||||
"DlcWindowHeading": "{0} DLC ที่สามารถดาวน์โหลดได้",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} DLC ใหม่ที่เพิ่มเข้ามา",
|
"DlcWindowDlcAddedMessage": "{0} DLC ใหม่ที่เพิ่มเข้ามา",
|
||||||
"AutoloadDlcAddedMessage": "{0} ใหม่ที่เพิ่มเข้ามา",
|
"AutoloadDlcAddedMessage": "{0} ใหม่ที่เพิ่มเข้ามา",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "{0} için Hile mevcut [{1}]",
|
"CheatWindowHeading": "{0} için Hile mevcut [{1}]",
|
||||||
"BuildId": "BuildId:",
|
"BuildId": "BuildId:",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
||||||
"DlcWindowHeading": "{0} Downloadable Content(s) available for {1} ({2})",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"Language": "Українська",
|
"Language": "Українська",
|
||||||
"MenuBarFileOpenApplet": "Відкрити аплет",
|
"MenuBarFileOpenApplet": "Відкрити аплет",
|
||||||
"MenuBarFileOpenAppletOpenMiiApplet": "Mii Edit Applet",
|
"MenuBarFileOpenAppletOpenMiiApplet": "Аплет для редагування Mii",
|
||||||
"MenuBarFileOpenAppletOpenMiiAppletToolTip": "Відкрити аплет Mii Editor в автономному режимі",
|
"MenuBarFileOpenAppletOpenMiiAppletToolTip": "Відкрити аплет Mii Editor в автономному режимі",
|
||||||
"SettingsTabInputDirectMouseAccess": "Прямий доступ мишею",
|
"SettingsTabInputDirectMouseAccess": "Прямий доступ мишею",
|
||||||
"SettingsTabSystemMemoryManagerMode": "Режим диспетчера пам’яті:",
|
"SettingsTabSystemMemoryManagerMode": "Режим диспетчера пам’яті:",
|
||||||
@@ -11,10 +11,10 @@
|
|||||||
"SettingsTabSystemUseHypervisor": "Використовувати гіпервізор",
|
"SettingsTabSystemUseHypervisor": "Використовувати гіпервізор",
|
||||||
"MenuBarFile": "_Файл",
|
"MenuBarFile": "_Файл",
|
||||||
"MenuBarFileOpenFromFile": "_Завантажити програму з файлу",
|
"MenuBarFileOpenFromFile": "_Завантажити програму з файлу",
|
||||||
"MenuBarFileOpenFromFileError": "No applications found in selected file.",
|
"MenuBarFileOpenFromFileError": "У вибраному файлі не знайдено жодних додатків.",
|
||||||
"MenuBarFileOpenUnpacked": "Завантажити _розпаковану гру",
|
"MenuBarFileOpenUnpacked": "Завантажити _розпаковану гру",
|
||||||
"MenuBarFileLoadDlcFromFolder": "Load DLC From Folder",
|
"MenuBarFileLoadDlcFromFolder": "Завантажити DLC з теки",
|
||||||
"MenuBarFileLoadTitleUpdatesFromFolder": "Load Title Updates From Folder",
|
"MenuBarFileLoadTitleUpdatesFromFolder": "Завантажити оновлення заголовків з теки",
|
||||||
"MenuBarFileOpenEmuFolder": "Відкрити теку Ryujinx",
|
"MenuBarFileOpenEmuFolder": "Відкрити теку Ryujinx",
|
||||||
"MenuBarFileOpenLogsFolder": "Відкрити теку журналів змін",
|
"MenuBarFileOpenLogsFolder": "Відкрити теку журналів змін",
|
||||||
"MenuBarFileExit": "_Вихід",
|
"MenuBarFileExit": "_Вихід",
|
||||||
@@ -37,9 +37,9 @@
|
|||||||
"MenuBarToolsManageFileTypes": "Керувати типами файлів",
|
"MenuBarToolsManageFileTypes": "Керувати типами файлів",
|
||||||
"MenuBarToolsInstallFileTypes": "Установити типи файлів",
|
"MenuBarToolsInstallFileTypes": "Установити типи файлів",
|
||||||
"MenuBarToolsUninstallFileTypes": "Видалити типи файлів",
|
"MenuBarToolsUninstallFileTypes": "Видалити типи файлів",
|
||||||
"MenuBarToolsXCITrimmer": "Trim XCI Files",
|
"MenuBarToolsXCITrimmer": "Обрізати XCI файли",
|
||||||
"MenuBarView": "_View",
|
"MenuBarView": "_Вид",
|
||||||
"MenuBarViewWindow": "Window Size",
|
"MenuBarViewWindow": "Розмір вікна",
|
||||||
"MenuBarViewWindow720": "720p",
|
"MenuBarViewWindow720": "720p",
|
||||||
"MenuBarViewWindow1080": "1080p",
|
"MenuBarViewWindow1080": "1080p",
|
||||||
"MenuBarHelp": "_Допомога",
|
"MenuBarHelp": "_Допомога",
|
||||||
@@ -89,8 +89,8 @@
|
|||||||
"GameListContextMenuOpenModsDirectoryToolTip": "Відкриває каталог, який містить модифікації Додатків",
|
"GameListContextMenuOpenModsDirectoryToolTip": "Відкриває каталог, який містить модифікації Додатків",
|
||||||
"GameListContextMenuOpenSdModsDirectory": "Відкрити каталог модифікацій Atmosphere",
|
"GameListContextMenuOpenSdModsDirectory": "Відкрити каталог модифікацій Atmosphere",
|
||||||
"GameListContextMenuOpenSdModsDirectoryToolTip": "Відкриває альтернативний каталог SD-карти Atmosphere, що містить модифікації Додатків. Корисно для модифікацій, зроблених для реального обладнання.",
|
"GameListContextMenuOpenSdModsDirectoryToolTip": "Відкриває альтернативний каталог SD-карти Atmosphere, що містить модифікації Додатків. Корисно для модифікацій, зроблених для реального обладнання.",
|
||||||
"GameListContextMenuTrimXCI": "Check and Trim XCI File",
|
"GameListContextMenuTrimXCI": "Перевірка та Нарізка XCI Файлів",
|
||||||
"GameListContextMenuTrimXCIToolTip": "Check and Trim XCI File to Save Disk Space",
|
"GameListContextMenuTrimXCIToolTip": "Перевірка та Нарізка XCI Файлів для збереження місця на диску",
|
||||||
"StatusBarGamesLoaded": "{0}/{1} ігор завантажено",
|
"StatusBarGamesLoaded": "{0}/{1} ігор завантажено",
|
||||||
"StatusBarSystemVersion": "Версія системи: {0}",
|
"StatusBarSystemVersion": "Версія системи: {0}",
|
||||||
"StatusBarXCIFileTrimming": "Trimming XCI File '{0}'",
|
"StatusBarXCIFileTrimming": "Trimming XCI File '{0}'",
|
||||||
@@ -107,15 +107,15 @@
|
|||||||
"SettingsTabGeneralEnableDiscordRichPresence": "Увімкнути розширену присутність Discord",
|
"SettingsTabGeneralEnableDiscordRichPresence": "Увімкнути розширену присутність Discord",
|
||||||
"SettingsTabGeneralCheckUpdatesOnLaunch": "Перевіряти наявність оновлень під час запуску",
|
"SettingsTabGeneralCheckUpdatesOnLaunch": "Перевіряти наявність оновлень під час запуску",
|
||||||
"SettingsTabGeneralShowConfirmExitDialog": "Показати діалогове вікно «Підтвердити вихід».",
|
"SettingsTabGeneralShowConfirmExitDialog": "Показати діалогове вікно «Підтвердити вихід».",
|
||||||
"SettingsTabGeneralRememberWindowState": "Remember Window Size/Position",
|
"SettingsTabGeneralRememberWindowState": "Запам'ятати Розмір/Позицію вікна",
|
||||||
"SettingsTabGeneralShowTitleBar": "Show Title Bar (Requires restart)",
|
"SettingsTabGeneralShowTitleBar": "Показувати рядок заголовка (Потрібен перезапуск)",
|
||||||
"SettingsTabGeneralHideCursor": "Сховати вказівник:",
|
"SettingsTabGeneralHideCursor": "Сховати вказівник:",
|
||||||
"SettingsTabGeneralHideCursorNever": "Ніколи",
|
"SettingsTabGeneralHideCursorNever": "Ніколи",
|
||||||
"SettingsTabGeneralHideCursorOnIdle": "Сховати у режимі очікування",
|
"SettingsTabGeneralHideCursorOnIdle": "Сховати у режимі очікування",
|
||||||
"SettingsTabGeneralHideCursorAlways": "Завжди",
|
"SettingsTabGeneralHideCursorAlways": "Завжди",
|
||||||
"SettingsTabGeneralGameDirectories": "Тека ігор",
|
"SettingsTabGeneralGameDirectories": "Тека ігор",
|
||||||
"SettingsTabGeneralAutoloadDirectories": "Autoload DLC/Updates Directories",
|
"SettingsTabGeneralAutoloadDirectories": "Автозавантаження каталогів DLC/Оновлень",
|
||||||
"SettingsTabGeneralAutoloadNote": "DLC and Updates which refer to missing files will be unloaded automatically",
|
"SettingsTabGeneralAutoloadNote": "DLC та Оновлення, які посилаються на відсутні файли, будуть автоматично вимкнуті.",
|
||||||
"SettingsTabGeneralAdd": "Додати",
|
"SettingsTabGeneralAdd": "Додати",
|
||||||
"SettingsTabGeneralRemove": "Видалити",
|
"SettingsTabGeneralRemove": "Видалити",
|
||||||
"SettingsTabSystem": "Система",
|
"SettingsTabSystem": "Система",
|
||||||
@@ -148,7 +148,18 @@
|
|||||||
"SettingsTabSystemSystemLanguageTraditionalChinese": "Традиційна китайська",
|
"SettingsTabSystemSystemLanguageTraditionalChinese": "Традиційна китайська",
|
||||||
"SettingsTabSystemSystemTimeZone": "Часовий пояс системи:",
|
"SettingsTabSystemSystemTimeZone": "Часовий пояс системи:",
|
||||||
"SettingsTabSystemSystemTime": "Час системи:",
|
"SettingsTabSystemSystemTime": "Час системи:",
|
||||||
"SettingsTabSystemEnableVsync": "Вертикальна синхронізація",
|
"SettingsTabSystemVSyncMode": "Вертикальна синхронізація (VSync):",
|
||||||
|
"SettingsTabSystemEnableCustomVSyncInterval": "Увімкнути користувацьку частоту оновлення (Експериментально)",
|
||||||
|
"SettingsTabSystemVSyncModeSwitch": "Switch",
|
||||||
|
"SettingsTabSystemVSyncModeUnbounded": "Безмежна",
|
||||||
|
"SettingsTabSystemVSyncModeCustom": "Користувацька",
|
||||||
|
"SettingsTabSystemVSyncModeTooltip": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень.",
|
||||||
|
"SettingsTabSystemVSyncModeTooltipCustom": "Емульована вертикальна синхронізація. 'Switch' емулює частоту оновлення Switch 60 Гц. 'Безмежна' — частота оновлення не матиме обмежень. 'Користувацька' емулює вказану користувацьку частоту оновлення.",
|
||||||
|
"SettingsTabSystemEnableCustomVSyncIntervalTooltip": "Дозволяє користувачу вказати емульовану частоту оновлення. У деяких іграх це може прискорити або сповільнити логіку гри. У інших іграх це може дозволити обмежити FPS на певні кратні частоти оновлення або призвести до непередбачуваної поведінки. Це експериментальна функція, без гарантій того, як це вплине на ігровий процес. \n\nЗалиште ВИМКНЕНИМ, якщо не впевнені.",
|
||||||
|
"SettingsTabSystemCustomVSyncIntervalValueTooltip": "Цільове значення користувацької частоти оновлення.",
|
||||||
|
"SettingsTabSystemCustomVSyncIntervalSliderTooltip": "Користувацька частота оновлення, як відсоток від стандартної частоти оновлення Switch.",
|
||||||
|
"SettingsTabSystemCustomVSyncIntervalPercentage": "Користувацька частота оновлення %:",
|
||||||
|
"SettingsTabSystemCustomVSyncIntervalValue": "Значення користувацька частота оновлення:",
|
||||||
"SettingsTabSystemEnablePptc": "PPTC (профільований постійний кеш перекладу)",
|
"SettingsTabSystemEnablePptc": "PPTC (профільований постійний кеш перекладу)",
|
||||||
"SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC",
|
"SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC",
|
||||||
"SettingsTabSystemEnableFsIntegrityChecks": "Перевірка цілісності FS",
|
"SettingsTabSystemEnableFsIntegrityChecks": "Перевірка цілісності FS",
|
||||||
@@ -160,10 +171,10 @@
|
|||||||
"SettingsTabSystemHacks": "Хитрощі",
|
"SettingsTabSystemHacks": "Хитрощі",
|
||||||
"SettingsTabSystemHacksNote": " (може викликати нестабільність)",
|
"SettingsTabSystemHacksNote": " (може викликати нестабільність)",
|
||||||
"SettingsTabSystemDramSize": "Використовувати альтернативне розташування пам'яті (розробники)",
|
"SettingsTabSystemDramSize": "Використовувати альтернативне розташування пам'яті (розробники)",
|
||||||
"SettingsTabSystemDramSize4GiB": "4GiB",
|
"SettingsTabSystemDramSize4GiB": "4Гб",
|
||||||
"SettingsTabSystemDramSize6GiB": "6GiB",
|
"SettingsTabSystemDramSize6GiB": "6Гб",
|
||||||
"SettingsTabSystemDramSize8GiB": "8GiB",
|
"SettingsTabSystemDramSize8GiB": "8Гб",
|
||||||
"SettingsTabSystemDramSize12GiB": "12GiB",
|
"SettingsTabSystemDramSize12GiB": "12Гб",
|
||||||
"SettingsTabSystemIgnoreMissingServices": "Ігнорувати відсутні служби",
|
"SettingsTabSystemIgnoreMissingServices": "Ігнорувати відсутні служби",
|
||||||
"SettingsTabSystemIgnoreApplet": "Ігнорувати Аплет",
|
"SettingsTabSystemIgnoreApplet": "Ігнорувати Аплет",
|
||||||
"SettingsTabGraphics": "Графіка",
|
"SettingsTabGraphics": "Графіка",
|
||||||
@@ -201,7 +212,7 @@
|
|||||||
"SettingsTabLoggingEnableGuestLogs": "Увімкнути журнали гостей",
|
"SettingsTabLoggingEnableGuestLogs": "Увімкнути журнали гостей",
|
||||||
"SettingsTabLoggingEnableFsAccessLogs": "Увімкнути журнали доступу Fs",
|
"SettingsTabLoggingEnableFsAccessLogs": "Увімкнути журнали доступу Fs",
|
||||||
"SettingsTabLoggingFsGlobalAccessLogMode": "Режим журналу глобального доступу Fs:",
|
"SettingsTabLoggingFsGlobalAccessLogMode": "Режим журналу глобального доступу Fs:",
|
||||||
"SettingsTabLoggingDeveloperOptions": "Параметри розробника (УВАГА: знизиться продуктивність)",
|
"SettingsTabLoggingDeveloperOptions": "Параметри розробника (УВАГА: шкодить продуктивності)",
|
||||||
"SettingsTabLoggingDeveloperOptionsNote": "УВАГА: Знижує продуктивність",
|
"SettingsTabLoggingDeveloperOptionsNote": "УВАГА: Знижує продуктивність",
|
||||||
"SettingsTabLoggingGraphicsBackendLogLevel": "Рівень журналу графічного сервера:",
|
"SettingsTabLoggingGraphicsBackendLogLevel": "Рівень журналу графічного сервера:",
|
||||||
"SettingsTabLoggingGraphicsBackendLogLevelNone": "Немає",
|
"SettingsTabLoggingGraphicsBackendLogLevelNone": "Немає",
|
||||||
@@ -291,29 +302,29 @@
|
|||||||
"ControllerSettingsMotionGyroDeadzone": "Мертва зона гіроскопа:",
|
"ControllerSettingsMotionGyroDeadzone": "Мертва зона гіроскопа:",
|
||||||
"ControllerSettingsSave": "Зберегти",
|
"ControllerSettingsSave": "Зберегти",
|
||||||
"ControllerSettingsClose": "Закрити",
|
"ControllerSettingsClose": "Закрити",
|
||||||
"KeyUnknown": "Unknown",
|
"KeyUnknown": "Невідома",
|
||||||
"KeyShiftLeft": "Shift Left",
|
"KeyShiftLeft": "Shift Лівий",
|
||||||
"KeyShiftRight": "Shift Right",
|
"KeyShiftRight": "Shift Правий",
|
||||||
"KeyControlLeft": "Ctrl Left",
|
"KeyControlLeft": "Ctrl Лівий",
|
||||||
"KeyMacControlLeft": "⌃ Left",
|
"KeyMacControlLeft": "⌃ Лівий",
|
||||||
"KeyControlRight": "Ctrl Right",
|
"KeyControlRight": "Ctrl Правий",
|
||||||
"KeyMacControlRight": "⌃ Right",
|
"KeyMacControlRight": "⌃ Правий",
|
||||||
"KeyAltLeft": "Alt Left",
|
"KeyAltLeft": "Alt Лівий",
|
||||||
"KeyMacAltLeft": "⌥ Left",
|
"KeyMacAltLeft": "⌥ Лівий",
|
||||||
"KeyAltRight": "Alt Right",
|
"KeyAltRight": "Alt Правий",
|
||||||
"KeyMacAltRight": "⌥ Right",
|
"KeyMacAltRight": "⌥ Правий",
|
||||||
"KeyWinLeft": "⊞ Left",
|
"KeyWinLeft": "⊞ Лівий",
|
||||||
"KeyMacWinLeft": "⌘ Left",
|
"KeyMacWinLeft": "⌘ Лівий",
|
||||||
"KeyWinRight": "⊞ Right",
|
"KeyWinRight": "⊞ Правий",
|
||||||
"KeyMacWinRight": "⌘ Right",
|
"KeyMacWinRight": "⌘ Правий",
|
||||||
"KeyMenu": "Menu",
|
"KeyMenu": "Menu",
|
||||||
"KeyUp": "Up",
|
"KeyUp": "Up",
|
||||||
"KeyDown": "Down",
|
"KeyDown": "Down",
|
||||||
"KeyLeft": "Left",
|
"KeyLeft": "Вліво",
|
||||||
"KeyRight": "Right",
|
"KeyRight": "Вправо",
|
||||||
"KeyEnter": "Enter",
|
"KeyEnter": "Enter",
|
||||||
"KeyEscape": "Escape",
|
"KeyEscape": "Escape",
|
||||||
"KeySpace": "Space",
|
"KeySpace": "Пробіл",
|
||||||
"KeyTab": "Tab",
|
"KeyTab": "Tab",
|
||||||
"KeyBackSpace": "Backspace",
|
"KeyBackSpace": "Backspace",
|
||||||
"KeyInsert": "Insert",
|
"KeyInsert": "Insert",
|
||||||
@@ -327,7 +338,7 @@
|
|||||||
"KeyPrintScreen": "Print Screen",
|
"KeyPrintScreen": "Print Screen",
|
||||||
"KeyPause": "Pause",
|
"KeyPause": "Pause",
|
||||||
"KeyNumLock": "Num Lock",
|
"KeyNumLock": "Num Lock",
|
||||||
"KeyClear": "Clear",
|
"KeyClear": "Очистити",
|
||||||
"KeyKeypad0": "Keypad 0",
|
"KeyKeypad0": "Keypad 0",
|
||||||
"KeyKeypad1": "Keypad 1",
|
"KeyKeypad1": "Keypad 1",
|
||||||
"KeyKeypad2": "Keypad 2",
|
"KeyKeypad2": "Keypad 2",
|
||||||
@@ -366,7 +377,7 @@
|
|||||||
"KeyPeriod": ".",
|
"KeyPeriod": ".",
|
||||||
"KeySlash": "/",
|
"KeySlash": "/",
|
||||||
"KeyBackSlash": "\\",
|
"KeyBackSlash": "\\",
|
||||||
"KeyUnbound": "Unbound",
|
"KeyUnbound": "Відв'язати",
|
||||||
"GamepadLeftStick": "L Stick Button",
|
"GamepadLeftStick": "L Stick Button",
|
||||||
"GamepadRightStick": "R Stick Button",
|
"GamepadRightStick": "R Stick Button",
|
||||||
"GamepadLeftShoulder": "Left Shoulder",
|
"GamepadLeftShoulder": "Left Shoulder",
|
||||||
@@ -446,7 +457,7 @@
|
|||||||
"DialogExitSubMessage": "Усі незбережені дані буде втрачено!",
|
"DialogExitSubMessage": "Усі незбережені дані буде втрачено!",
|
||||||
"DialogMessageCreateSaveErrorMessage": "Під час створення вказаних даних збереження сталася помилка: {0}",
|
"DialogMessageCreateSaveErrorMessage": "Під час створення вказаних даних збереження сталася помилка: {0}",
|
||||||
"DialogMessageFindSaveErrorMessage": "Під час пошуку вказаних даних збереження сталася помилка: {0}",
|
"DialogMessageFindSaveErrorMessage": "Під час пошуку вказаних даних збереження сталася помилка: {0}",
|
||||||
"FolderDialogExtractTitle": "Виберіть папку для видобування",
|
"FolderDialogExtractTitle": "Виберіть теку для видобування",
|
||||||
"DialogNcaExtractionMessage": "Видобування розділу {0} з {1}...",
|
"DialogNcaExtractionMessage": "Видобування розділу {0} з {1}...",
|
||||||
"DialogNcaExtractionTitle": "Екстрактор розділів NCA",
|
"DialogNcaExtractionTitle": "Екстрактор розділів NCA",
|
||||||
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Помилка видобування. Основний NCA не був присутній у вибраному файлі.",
|
"DialogNcaExtractionMainNcaNotFoundErrorMessage": "Помилка видобування. Основний NCA не був присутній у вибраному файлі.",
|
||||||
@@ -550,7 +561,7 @@
|
|||||||
"MenuBarOptionsPauseEmulation": "Пауза",
|
"MenuBarOptionsPauseEmulation": "Пауза",
|
||||||
"MenuBarOptionsResumeEmulation": "Продовжити",
|
"MenuBarOptionsResumeEmulation": "Продовжити",
|
||||||
"AboutUrlTooltipMessage": "Натисніть, щоб відкрити сайт Ryujinx у браузері за замовчування.",
|
"AboutUrlTooltipMessage": "Натисніть, щоб відкрити сайт Ryujinx у браузері за замовчування.",
|
||||||
"AboutDisclaimerMessage": "Ryujinx жодним чином не пов’язано з Nintendo™,\nчи будь-яким із їхніх партнерів.",
|
"AboutDisclaimerMessage": "Ryujinx жодним чином не пов’язаний з Nintendo™,\nчи будь-яким із їхніх партнерів.",
|
||||||
"AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) використовується в нашій емуляції Amiibo.",
|
"AboutAmiiboDisclaimerMessage": "AmiiboAPI (www.amiiboapi.com) використовується в нашій емуляції Amiibo.",
|
||||||
"AboutPatreonUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Patreon Ryujinx у вашому браузері за замовчування.",
|
"AboutPatreonUrlTooltipMessage": "Натисніть, щоб відкрити сторінку Patreon Ryujinx у вашому браузері за замовчування.",
|
||||||
"AboutGithubUrlTooltipMessage": "Натисніть, щоб відкрити сторінку GitHub Ryujinx у браузері за замовчуванням.",
|
"AboutGithubUrlTooltipMessage": "Натисніть, щоб відкрити сторінку GitHub Ryujinx у браузері за замовчуванням.",
|
||||||
@@ -587,8 +598,8 @@
|
|||||||
"AddGameDirBoxTooltip": "Введіть каталог ігор, щоб додати до списку",
|
"AddGameDirBoxTooltip": "Введіть каталог ігор, щоб додати до списку",
|
||||||
"AddGameDirTooltip": "Додати каталог гри до списку",
|
"AddGameDirTooltip": "Додати каталог гри до списку",
|
||||||
"RemoveGameDirTooltip": "Видалити вибраний каталог гри",
|
"RemoveGameDirTooltip": "Видалити вибраний каталог гри",
|
||||||
"AddAutoloadDirBoxTooltip": "Enter an autoload directory to add to the list",
|
"AddAutoloadDirBoxTooltip": "Введіть шлях автозавантаження для додавання до списку",
|
||||||
"AddAutoloadDirTooltip": "Add an autoload directory to the list",
|
"AddAutoloadDirTooltip": "Додайте шлях автозавантаження для додавання до списку",
|
||||||
"RemoveAutoloadDirTooltip": "Remove selected autoload directory",
|
"RemoveAutoloadDirTooltip": "Remove selected autoload directory",
|
||||||
"CustomThemeCheckTooltip": "Використовуйте користувацьку тему Avalonia для графічного інтерфейсу, щоб змінити вигляд меню емулятора",
|
"CustomThemeCheckTooltip": "Використовуйте користувацьку тему Avalonia для графічного інтерфейсу, щоб змінити вигляд меню емулятора",
|
||||||
"CustomThemePathTooltip": "Шлях до користувацької теми графічного інтерфейсу",
|
"CustomThemePathTooltip": "Шлях до користувацької теми графічного інтерфейсу",
|
||||||
@@ -635,10 +646,10 @@
|
|||||||
"DebugLogTooltip": "Друкує повідомлення журналу налагодження на консолі.\n\nВикористовуйте це лише за спеціальною вказівкою співробітника, оскільки це ускладнить читання журналів і погіршить роботу емулятора.",
|
"DebugLogTooltip": "Друкує повідомлення журналу налагодження на консолі.\n\nВикористовуйте це лише за спеціальною вказівкою співробітника, оскільки це ускладнить читання журналів і погіршить роботу емулятора.",
|
||||||
"LoadApplicationFileTooltip": "Відкриває файловий провідник, щоб вибрати для завантаження сумісний файл Switch",
|
"LoadApplicationFileTooltip": "Відкриває файловий провідник, щоб вибрати для завантаження сумісний файл Switch",
|
||||||
"LoadApplicationFolderTooltip": "Відкриває файловий провідник, щоб вибрати сумісну з комутатором розпаковану програму для завантаження",
|
"LoadApplicationFolderTooltip": "Відкриває файловий провідник, щоб вибрати сумісну з комутатором розпаковану програму для завантаження",
|
||||||
"LoadDlcFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load DLC from",
|
"LoadDlcFromFolderTooltip": "Відкрийте провідник файлів, щоб вибрати одну або кілька папок для масового завантаження DLC",
|
||||||
"LoadTitleUpdatesFromFolderTooltip": "Open a file explorer to choose one or more folders to bulk load title updates from",
|
"LoadTitleUpdatesFromFolderTooltip": "Відкрийте провідник файлів, щоб вибрати одну або кілька папок для масового завантаження оновлень заголовків",
|
||||||
"OpenRyujinxFolderTooltip": "Відкриває папку файлової системи Ryujinx",
|
"OpenRyujinxFolderTooltip": "Відкриває теку файлової системи Ryujinx",
|
||||||
"OpenRyujinxLogsTooltip": "Відкриває папку, куди записуються журнали",
|
"OpenRyujinxLogsTooltip": "Відкриває теку, куди записуються журнали",
|
||||||
"ExitTooltip": "Виходить з Ryujinx",
|
"ExitTooltip": "Виходить з Ryujinx",
|
||||||
"OpenSettingsTooltip": "Відкриває вікно налаштувань",
|
"OpenSettingsTooltip": "Відкриває вікно налаштувань",
|
||||||
"OpenProfileManagerTooltip": "Відкриває вікно диспетчера профілів користувачів",
|
"OpenProfileManagerTooltip": "Відкриває вікно диспетчера профілів користувачів",
|
||||||
@@ -694,8 +705,8 @@
|
|||||||
"TitleXCIStatusTrimmableLabel": "Untrimmed",
|
"TitleXCIStatusTrimmableLabel": "Untrimmed",
|
||||||
"TitleXCIStatusUntrimmableLabel": "Trimmed",
|
"TitleXCIStatusUntrimmableLabel": "Trimmed",
|
||||||
"TitleXCIStatusFailedLabel": "(Failed)",
|
"TitleXCIStatusFailedLabel": "(Failed)",
|
||||||
"TitleXCICanSaveLabel": "Save {0:n0} Mb",
|
"TitleXCICanSaveLabel": "Зберегти {0:n0} Мб",
|
||||||
"TitleXCISavingLabel": "Saved {0:n0} Mb",
|
"TitleXCISavingLabel": "Збережено {0:n0} Мб",
|
||||||
"RyujinxInfo": "Ryujin x - Інформація",
|
"RyujinxInfo": "Ryujin x - Інформація",
|
||||||
"RyujinxConfirm": "Ryujinx - Підтвердження",
|
"RyujinxConfirm": "Ryujinx - Підтвердження",
|
||||||
"FileDialogAllTypes": "Всі типи",
|
"FileDialogAllTypes": "Всі типи",
|
||||||
@@ -703,8 +714,8 @@
|
|||||||
"SwkbdMinCharacters": "Мінімальна кількість символів: {0}",
|
"SwkbdMinCharacters": "Мінімальна кількість символів: {0}",
|
||||||
"SwkbdMinRangeCharacters": "Має бути {0}-{1} символів",
|
"SwkbdMinRangeCharacters": "Має бути {0}-{1} символів",
|
||||||
"CabinetTitle": "Cabinet Dialog",
|
"CabinetTitle": "Cabinet Dialog",
|
||||||
"CabinetDialog": "Enter your Amiibo's new name",
|
"CabinetDialog": "Вкажіть ваше нове ім'я Amiibo",
|
||||||
"CabinetScanDialog": "Please scan your Amiibo now.",
|
"CabinetScanDialog": "Проскануйте ваш Amiibo будь ласка.",
|
||||||
"SoftwareKeyboard": "Програмна клавіатура",
|
"SoftwareKeyboard": "Програмна клавіатура",
|
||||||
"SoftwareKeyboardModeNumeric": "Повинно бути лише 0-9 або “.”",
|
"SoftwareKeyboardModeNumeric": "Повинно бути лише 0-9 або “.”",
|
||||||
"SoftwareKeyboardModeAlphabet": "Повинно бути лише не CJK-символи",
|
"SoftwareKeyboardModeAlphabet": "Повинно бути лише не CJK-символи",
|
||||||
@@ -732,12 +743,15 @@
|
|||||||
"AllSupportedFormats": "Усі підтримувані формати",
|
"AllSupportedFormats": "Усі підтримувані формати",
|
||||||
"RyujinxUpdater": "Програма оновлення Ryujinx",
|
"RyujinxUpdater": "Програма оновлення Ryujinx",
|
||||||
"SettingsTabHotkeys": "Гарячі клавіші клавіатури",
|
"SettingsTabHotkeys": "Гарячі клавіші клавіатури",
|
||||||
|
"SettingsTabHotkeysToggleVSyncModeHotkey": "Перемкнути VSync режим:",
|
||||||
"SettingsTabHotkeysHotkeys": "Гарячі клавіші клавіатури",
|
"SettingsTabHotkeysHotkeys": "Гарячі клавіші клавіатури",
|
||||||
"SettingsTabHotkeysToggleVsyncHotkey": "Увімк/вимк вертикальну синхронізацію:",
|
"SettingsTabHotkeysToggleVsyncHotkey": "Увімк/вимк вертикальну синхронізацію:",
|
||||||
"SettingsTabHotkeysScreenshotHotkey": "Знімок екрана:",
|
"SettingsTabHotkeysScreenshotHotkey": "Знімок екрана:",
|
||||||
"SettingsTabHotkeysShowUiHotkey": "Показати інтерфейс:",
|
"SettingsTabHotkeysShowUiHotkey": "Показати інтерфейс:",
|
||||||
"SettingsTabHotkeysPauseHotkey": "Пауза:",
|
"SettingsTabHotkeysPauseHotkey": "Пауза:",
|
||||||
"SettingsTabHotkeysToggleMuteHotkey": "Вимкнути звук:",
|
"SettingsTabHotkeysToggleMuteHotkey": "Вимкнути звук:",
|
||||||
|
"SettingsTabHotkeysIncrementCustomVSyncIntervalHotkey": "Підвищити користувацьку частоту оновлення",
|
||||||
|
"SettingsTabHotkeysDecrementCustomVSyncIntervalHotkey": "Понизити користувацьку частоту оновлення",
|
||||||
"ControllerMotionTitle": "Налаштування керування рухом",
|
"ControllerMotionTitle": "Налаштування керування рухом",
|
||||||
"ControllerRumbleTitle": "Налаштування вібрації",
|
"ControllerRumbleTitle": "Налаштування вібрації",
|
||||||
"SettingsSelectThemeFileDialogTitle": "Виберіть файл теми",
|
"SettingsSelectThemeFileDialogTitle": "Виберіть файл теми",
|
||||||
@@ -750,19 +764,19 @@
|
|||||||
"SelectDlcDialogTitle": "Виберіть файли DLC",
|
"SelectDlcDialogTitle": "Виберіть файли DLC",
|
||||||
"SelectUpdateDialogTitle": "Виберіть файли оновлення",
|
"SelectUpdateDialogTitle": "Виберіть файли оновлення",
|
||||||
"SelectModDialogTitle": "Виберіть теку з модами",
|
"SelectModDialogTitle": "Виберіть теку з модами",
|
||||||
"TrimXCIFileDialogTitle": "Check and Trim XCI File",
|
"TrimXCIFileDialogTitle": "Перевірити та Обрізати XCI файл",
|
||||||
"TrimXCIFileDialogPrimaryText": "This function will first check the empty space and then trim the XCI File to save disk space.",
|
"TrimXCIFileDialogPrimaryText": "Ця функція спочатку перевірить вільний простір, а потім обрізатиме файл XCI для економії місця на диску.",
|
||||||
"TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB",
|
"TrimXCIFileDialogSecondaryText": "Поточний розмір файла: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB",
|
||||||
"TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details",
|
"TrimXCIFileNoTrimNecessary": "XCI файл не потребує обрізання. Перевірте журнали для додаткової інформації",
|
||||||
"TrimXCIFileNoUntrimPossible": "XCI File cannot be untrimmed. Check logs for further details",
|
"TrimXCIFileNoUntrimPossible": "XCI файл не може бути обрізаний. Перевірте журнали для додаткової інформації",
|
||||||
"TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details",
|
"TrimXCIFileReadOnlyFileCannotFix": "XCI файл Тільки для Читання і не може бути прочитаним. Перевірте журнали додаткової інформації",
|
||||||
"TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.",
|
"TrimXCIFileFileSizeChanged": "Розмір файлу XCI змінився з моменту сканування. Перевірте, чи не записується файл, і спробуйте знову.",
|
||||||
"TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim",
|
"TrimXCIFileFreeSpaceCheckFailed": "Файл XCI містить дані в зоні вільного простору, тому обрізка небезпечна",
|
||||||
"TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details",
|
"TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details",
|
||||||
"TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details",
|
"TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details",
|
||||||
"TrimXCIFileFailedPrimaryText": "Trimming of the XCI file failed",
|
"TrimXCIFileFailedPrimaryText": "Не вдалося обрізати файл XCI",
|
||||||
"TrimXCIFileCancelled": "The operation was cancelled",
|
"TrimXCIFileCancelled": "Операція перервана",
|
||||||
"TrimXCIFileFileUndertermined": "No operation was performed",
|
"TrimXCIFileFileUndertermined": "Операція не проводилася",
|
||||||
"UserProfileWindowTitle": "Менеджер профілів користувачів",
|
"UserProfileWindowTitle": "Менеджер профілів користувачів",
|
||||||
"CheatWindowTitle": "Менеджер читів",
|
"CheatWindowTitle": "Менеджер читів",
|
||||||
"DlcWindowTitle": "Менеджер вмісту для завантаження",
|
"DlcWindowTitle": "Менеджер вмісту для завантаження",
|
||||||
@@ -773,27 +787,27 @@
|
|||||||
"XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)",
|
"XCITrimmerTitleStatusCountWithFilter": "{0} of {1} Title(s) Selected ({2} displayed)",
|
||||||
"XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...",
|
"XCITrimmerTitleStatusTrimming": "Trimming {0} Title(s)...",
|
||||||
"XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...",
|
"XCITrimmerTitleStatusUntrimming": "Untrimming {0} Title(s)...",
|
||||||
"XCITrimmerTitleStatusFailed": "Failed",
|
"XCITrimmerTitleStatusFailed": "Невдача",
|
||||||
"XCITrimmerPotentialSavings": "Potential Savings",
|
"XCITrimmerPotentialSavings": "Потенційна економія",
|
||||||
"XCITrimmerActualSavings": "Actual Savings",
|
"XCITrimmerActualSavings": "Зекономлено",
|
||||||
"XCITrimmerSavingsMb": "{0:n0} Mb",
|
"XCITrimmerSavingsMb": "{0:n0} Mb",
|
||||||
"XCITrimmerSelectDisplayed": "Select Shown",
|
"XCITrimmerSelectDisplayed": "Select Shown",
|
||||||
"XCITrimmerDeselectDisplayed": "Deselect Shown",
|
"XCITrimmerDeselectDisplayed": "Deselect Shown",
|
||||||
"XCITrimmerSortName": "Title",
|
"XCITrimmerSortName": "Заголовок",
|
||||||
"XCITrimmerSortSaved": "Space Savings",
|
"XCITrimmerSortSaved": "Економія місця",
|
||||||
"XCITrimmerTrim": "Trim",
|
"XCITrimmerTrim": "Обрізка",
|
||||||
"XCITrimmerUntrim": "Untrim",
|
"XCITrimmerUntrim": "Зшивання",
|
||||||
"UpdateWindowUpdateAddedMessage": "{0} new update(s) added",
|
"UpdateWindowUpdateAddedMessage": "{0} нове оновлення додано",
|
||||||
"UpdateWindowBundledContentNotice": "Bundled updates cannot be removed, only disabled.",
|
"UpdateWindowBundledContentNotice": "Вбудовані оновлення не можуть бути видалені, лише вимкнені.",
|
||||||
"CheatWindowHeading": "Коди доступні для {0} [{1}]",
|
"CheatWindowHeading": "Коди доступні для {0} [{1}]",
|
||||||
"BuildId": "ID збірки:",
|
"BuildId": "ID збірки:",
|
||||||
"DlcWindowBundledContentNotice": "Bundled DLC cannot be removed, only disabled.",
|
"DlcWindowBundledContentNotice": "Вбудований DLC не може бути видаленим, лише вимкненим.",
|
||||||
"DlcWindowHeading": "Вміст для завантаження, доступний для {1} ({2}): {0}",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "{0} new downloadable content(s) added",
|
"DlcWindowDlcAddedMessage": "{0} новий завантажувальний вміст додано",
|
||||||
"AutoloadDlcAddedMessage": "{0} new downloadable content(s) added",
|
"AutoloadDlcAddedMessage": "{0} новий завантажувальний вміст додано",
|
||||||
"AutoloadDlcRemovedMessage": "{0} missing downloadable content(s) removed",
|
"AutoloadDlcRemovedMessage": "{0} відсутній завантажуваний вміст видалено.",
|
||||||
"AutoloadUpdateAddedMessage": "{0} new update(s) added",
|
"AutoloadUpdateAddedMessage": "{0} нове оновлення додано",
|
||||||
"AutoloadUpdateRemovedMessage": "{0} missing update(s) removed",
|
"AutoloadUpdateRemovedMessage": "{0} відсутнє оновлення видалено",
|
||||||
"ModWindowHeading": "{0} мод(ів)",
|
"ModWindowHeading": "{0} мод(ів)",
|
||||||
"UserProfilesEditProfile": "Редагувати вибране",
|
"UserProfilesEditProfile": "Редагувати вибране",
|
||||||
"Continue": "Continue",
|
"Continue": "Continue",
|
||||||
@@ -834,7 +848,7 @@
|
|||||||
"Name": "Назва",
|
"Name": "Назва",
|
||||||
"Size": "Розмір",
|
"Size": "Розмір",
|
||||||
"Search": "Пошук",
|
"Search": "Пошук",
|
||||||
"UserProfilesRecoverLostAccounts": "Відновлення втрачених облікових записів",
|
"UserProfilesRecoverLostAccounts": "Відновлення профілів",
|
||||||
"Recover": "Відновити",
|
"Recover": "Відновити",
|
||||||
"UserProfilesRecoverHeading": "Знайдено збереження для наступних облікових записів",
|
"UserProfilesRecoverHeading": "Знайдено збереження для наступних облікових записів",
|
||||||
"UserProfilesRecoverEmptyList": "Немає профілів для відновлення",
|
"UserProfilesRecoverEmptyList": "Немає профілів для відновлення",
|
||||||
@@ -866,15 +880,15 @@
|
|||||||
"MultiplayerModeDisabled": "Вимкнено",
|
"MultiplayerModeDisabled": "Вимкнено",
|
||||||
"MultiplayerModeLdnMitm": "ldn_mitm",
|
"MultiplayerModeLdnMitm": "ldn_mitm",
|
||||||
"MultiplayerModeLdnRyu": "RyuLDN",
|
"MultiplayerModeLdnRyu": "RyuLDN",
|
||||||
"MultiplayerDisableP2P": "Disable P2P Network Hosting (may increase latency)",
|
"MultiplayerDisableP2P": "Вимкнути хостинг P2P мережі (може збільшити затримку)",
|
||||||
"MultiplayerDisableP2PTooltip": "Disable P2P network hosting, peers will proxy through the master server instead of connecting to you directly.",
|
"MultiplayerDisableP2PTooltip": "Вимкнути хостинг P2P мережі, піри будуть підключатися через майстер-сервер замість прямого з'єднання з вами.",
|
||||||
"LdnPassphrase": "Network Passphrase:",
|
"LdnPassphrase": "Мережевий пароль:",
|
||||||
"LdnPassphraseTooltip": "You will only be able to see hosted games with the same passphrase as you.",
|
"LdnPassphraseTooltip": "Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.",
|
||||||
"LdnPassphraseInputTooltip": "Enter a passphrase in the format Ryujinx-<8 hex chars>. You will only be able to see hosted games with the same passphrase as you.",
|
"LdnPassphraseInputTooltip": "Введіть пароль у форматі Ryujinx-<8 символів>. Ви зможете бачити лише ті ігри, які мають такий самий пароль, як і у вас.",
|
||||||
"LdnPassphraseInputPublic": "(public)",
|
"LdnPassphraseInputPublic": "(публічний)",
|
||||||
"GenLdnPass": "Generate Random",
|
"GenLdnPass": "Згенерувати випадкову",
|
||||||
"GenLdnPassTooltip": "Generates a new passphrase, which can be shared with other players.",
|
"GenLdnPassTooltip": "Генерує новий пароль, яким можна поділитися з іншими гравцями.",
|
||||||
"ClearLdnPass": "Clear",
|
"ClearLdnPass": "Очистити",
|
||||||
"ClearLdnPassTooltip": "Clears the current passphrase, returning to the public network.",
|
"ClearLdnPassTooltip": "Очищає поточну пароль, повертаючись до публічної мережі.",
|
||||||
"InvalidLdnPassphrase": "Invalid Passphrase! Must be in the format \"Ryujinx-<8 hex chars>\""
|
"InvalidLdnPassphrase": "Невірний пароль! Має бути в форматі \"Ryujinx-<8 символів>\""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -788,7 +788,7 @@
|
|||||||
"CheatWindowHeading": "可用於 {0} [{1}] 的密技",
|
"CheatWindowHeading": "可用於 {0} [{1}] 的密技",
|
||||||
"BuildId": "組建識別碼:",
|
"BuildId": "組建識別碼:",
|
||||||
"DlcWindowBundledContentNotice": "附帶的 DLC 只能被停用而無法被刪除。",
|
"DlcWindowBundledContentNotice": "附帶的 DLC 只能被停用而無法被刪除。",
|
||||||
"DlcWindowHeading": "{0} 個可下載內容",
|
"DlcWindowHeading": "{0} DLC(s) available",
|
||||||
"DlcWindowDlcAddedMessage": "已加入 {0} 個 DLC",
|
"DlcWindowDlcAddedMessage": "已加入 {0} 個 DLC",
|
||||||
"AutoloadDlcAddedMessage": "已加入 {0} 個 DLC",
|
"AutoloadDlcAddedMessage": "已加入 {0} 個 DLC",
|
||||||
"AutoloadDlcRemovedMessage": "已刪除 {0} 個遺失的 DLC",
|
"AutoloadDlcRemovedMessage": "已刪除 {0} 個遺失的 DLC",
|
||||||
|
|||||||
@@ -4,18 +4,6 @@
|
|||||||
<ResourceDictionary x:Key="Default">
|
<ResourceDictionary x:Key="Default">
|
||||||
<SolidColorBrush x:Key="DataGridSelectionBackgroundBrush"
|
<SolidColorBrush x:Key="DataGridSelectionBackgroundBrush"
|
||||||
Color="{DynamicResource DataGridSelectionColor}" />
|
Color="{DynamicResource DataGridSelectionColor}" />
|
||||||
<SolidColorBrush x:Key="ThemeAccentColorBrush"
|
|
||||||
Color="{DynamicResource SystemAccentColor}" />
|
|
||||||
<SolidColorBrush x:Key="ThemeAccentBrush4"
|
|
||||||
Color="{DynamicResource ThemeAccentColor4}" />
|
|
||||||
<Color x:Key="SystemAccentColor">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark1">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark2">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark3">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight1">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight2">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight3">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="ThemeAccentColor4">#FFe8e8e8</Color>
|
|
||||||
<Color x:Key="DataGridSelectionColor">#FF00FABB</Color>
|
<Color x:Key="DataGridSelectionColor">#FF00FABB</Color>
|
||||||
<Color x:Key="ThemeContentBackgroundColor">#FFF0F0F0</Color>
|
<Color x:Key="ThemeContentBackgroundColor">#FFF0F0F0</Color>
|
||||||
<Color x:Key="ThemeControlBorderColor">#FFd6d6d6</Color>
|
<Color x:Key="ThemeControlBorderColor">#FFd6d6d6</Color>
|
||||||
@@ -26,6 +14,7 @@
|
|||||||
<Color x:Key="AppListBackgroundColor">#b3ffffff</Color>
|
<Color x:Key="AppListBackgroundColor">#b3ffffff</Color>
|
||||||
<Color x:Key="AppListHoverBackgroundColor">#80cccccc</Color>
|
<Color x:Key="AppListHoverBackgroundColor">#80cccccc</Color>
|
||||||
<Color x:Key="SecondaryTextColor">#A0000000</Color>
|
<Color x:Key="SecondaryTextColor">#A0000000</Color>
|
||||||
|
<Color x:Key="FavoriteApplicationIconColor">#fffcd12a</Color>
|
||||||
<Color x:Key="Switch">#FF2EEAC9</Color>
|
<Color x:Key="Switch">#FF2EEAC9</Color>
|
||||||
<Color x:Key="Unbounded">#FFFF4554</Color>
|
<Color x:Key="Unbounded">#FFFF4554</Color>
|
||||||
<Color x:Key="Custom">#6483F5</Color>
|
<Color x:Key="Custom">#6483F5</Color>
|
||||||
@@ -33,18 +22,6 @@
|
|||||||
<ResourceDictionary x:Key="Light">
|
<ResourceDictionary x:Key="Light">
|
||||||
<SolidColorBrush x:Key="DataGridSelectionBackgroundBrush"
|
<SolidColorBrush x:Key="DataGridSelectionBackgroundBrush"
|
||||||
Color="{DynamicResource DataGridSelectionColor}" />
|
Color="{DynamicResource DataGridSelectionColor}" />
|
||||||
<SolidColorBrush x:Key="ThemeAccentColorBrush"
|
|
||||||
Color="{DynamicResource SystemAccentColor}" />
|
|
||||||
<SolidColorBrush x:Key="ThemeAccentBrush4"
|
|
||||||
Color="{DynamicResource ThemeAccentColor4}" />
|
|
||||||
<Color x:Key="SystemAccentColor">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark1">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark2">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark3">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight1">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight2">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight3">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="ThemeAccentColor4">#FFe8e8e8</Color>
|
|
||||||
<Color x:Key="DataGridSelectionColor">#FF00FABB</Color>
|
<Color x:Key="DataGridSelectionColor">#FF00FABB</Color>
|
||||||
<Color x:Key="ThemeContentBackgroundColor">#FFF0F0F0</Color>
|
<Color x:Key="ThemeContentBackgroundColor">#FFF0F0F0</Color>
|
||||||
<Color x:Key="ThemeControlBorderColor">#FFd6d6d6</Color>
|
<Color x:Key="ThemeControlBorderColor">#FFd6d6d6</Color>
|
||||||
@@ -59,18 +36,7 @@
|
|||||||
<ResourceDictionary x:Key="Dark">
|
<ResourceDictionary x:Key="Dark">
|
||||||
<SolidColorBrush x:Key="DataGridSelectionBackgroundBrush"
|
<SolidColorBrush x:Key="DataGridSelectionBackgroundBrush"
|
||||||
Color="{DynamicResource DataGridSelectionColor}" />
|
Color="{DynamicResource DataGridSelectionColor}" />
|
||||||
<SolidColorBrush x:Key="ThemeAccentColorBrush"
|
|
||||||
Color="{DynamicResource SystemAccentColor}" />
|
|
||||||
<SolidColorBrush x:Key="ThemeAccentBrush4"
|
|
||||||
Color="{DynamicResource ThemeAccentColor4}" />
|
|
||||||
<Color x:Key="ControlFillColorSecondary">#008AA8</Color>
|
<Color x:Key="ControlFillColorSecondary">#008AA8</Color>
|
||||||
<Color x:Key="SystemAccentColor">#FF00C3E3</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark1">#FF99b000</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark2">#FF006d7d</Color>
|
|
||||||
<Color x:Key="SystemAccentColorDark3">#FF00525E</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight1">#FF00dbff</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight2">#FF19dfff</Color>
|
|
||||||
<Color x:Key="SystemAccentColorLight3">#FF33e3ff</Color>
|
|
||||||
<Color x:Key="DataGridSelectionColor">#FF00FABB</Color>
|
<Color x:Key="DataGridSelectionColor">#FF00FABB</Color>
|
||||||
<Color x:Key="ThemeContentBackgroundColor">#FF2D2D2D</Color>
|
<Color x:Key="ThemeContentBackgroundColor">#FF2D2D2D</Color>
|
||||||
<Color x:Key="ThemeControlBorderColor">#FF505050</Color>
|
<Color x:Key="ThemeControlBorderColor">#FF505050</Color>
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ namespace Ryujinx.Ava.Common.Markup
|
|||||||
public virtual string Name => "Item";
|
public virtual string Name => "Item";
|
||||||
public virtual Action<object, T?>? Setter => null;
|
public virtual Action<object, T?>? Setter => null;
|
||||||
|
|
||||||
protected abstract T? GetValue();
|
protected abstract T? Value { get; }
|
||||||
|
|
||||||
protected virtual void ConfigureBindingExtension(CompiledBindingExtension _) { }
|
protected virtual void ConfigureBindingExtension(CompiledBindingExtension _) { }
|
||||||
|
|
||||||
private ClrPropertyInfo PropertyInfo =>
|
private ClrPropertyInfo PropertyInfo =>
|
||||||
new(Name,
|
new(Name,
|
||||||
_ => GetValue(),
|
_ => Value,
|
||||||
Setter as Action<object, object?>,
|
Setter as Action<object, object?>,
|
||||||
typeof(T));
|
typeof(T));
|
||||||
|
|
||||||
|
|||||||
@@ -6,17 +6,17 @@ namespace Ryujinx.Ava.Common.Markup
|
|||||||
{
|
{
|
||||||
internal class IconExtension(string iconString) : BasicMarkupExtension<Icon>
|
internal class IconExtension(string iconString) : BasicMarkupExtension<Icon>
|
||||||
{
|
{
|
||||||
protected override Icon GetValue() => new() { Value = iconString };
|
protected override Icon Value => new() { Value = iconString };
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class SpinningIconExtension(string iconString) : BasicMarkupExtension<Icon>
|
internal class SpinningIconExtension(string iconString) : BasicMarkupExtension<Icon>
|
||||||
{
|
{
|
||||||
protected override Icon GetValue() => new() { Value = iconString, Animation = IconAnimation.Spin };
|
protected override Icon Value => new() { Value = iconString, Animation = IconAnimation.Spin };
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class LocaleExtension(LocaleKeys key) : BasicMarkupExtension<string>
|
internal class LocaleExtension(LocaleKeys key) : BasicMarkupExtension<string>
|
||||||
{
|
{
|
||||||
protected override string GetValue() => LocaleManager.Instance[key];
|
protected override string Value => LocaleManager.Instance[key];
|
||||||
|
|
||||||
protected override void ConfigureBindingExtension(CompiledBindingExtension bindingExtension)
|
protected override void ConfigureBindingExtension(CompiledBindingExtension bindingExtension)
|
||||||
=> bindingExtension.Source = LocaleManager.Instance;
|
=> bindingExtension.Source = LocaleManager.Instance;
|
||||||
|
|||||||
@@ -91,7 +91,7 @@
|
|||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
VerticalAlignment="Top"
|
VerticalAlignment="Top"
|
||||||
FontSize="16"
|
FontSize="16"
|
||||||
Foreground="{DynamicResource SystemAccentColor}"
|
Foreground="{DynamicResource FavoriteApplicationIconColor}"
|
||||||
IsVisible="{Binding Favorite}"
|
IsVisible="{Binding Favorite}"
|
||||||
Symbol="StarFilled" />
|
Symbol="StarFilled" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -146,7 +146,7 @@
|
|||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
VerticalAlignment="Top"
|
VerticalAlignment="Top"
|
||||||
FontSize="16"
|
FontSize="16"
|
||||||
Foreground="{DynamicResource SystemAccentColor}"
|
Foreground="{DynamicResource FavoriteApplicationIconColor}"
|
||||||
IsVisible="{Binding Favorite}"
|
IsVisible="{Binding Favorite}"
|
||||||
Symbol="StarFilled" />
|
Symbol="StarFilled" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ using Ryujinx.Ava.UI.ViewModels;
|
|||||||
using Ryujinx.Ava.UI.Windows;
|
using Ryujinx.Ava.UI.Windows;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Utilities;
|
using Ryujinx.Common.Utilities;
|
||||||
|
using Ryujinx.HLE;
|
||||||
using Ryujinx.UI.App.Common;
|
using Ryujinx.UI.App.Common;
|
||||||
using Ryujinx.UI.Common;
|
using Ryujinx.UI.Common;
|
||||||
using Ryujinx.UI.Common.Configuration;
|
using Ryujinx.UI.Common.Configuration;
|
||||||
@@ -126,32 +127,22 @@ namespace Ryujinx.Ava.UI.Views.Main
|
|||||||
|
|
||||||
public async void OpenMiiApplet(object sender, RoutedEventArgs e)
|
public async void OpenMiiApplet(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
const string name = "miiEdit";
|
const string AppletName = "miiEdit";
|
||||||
const ulong programId = 0x0100000000001009;
|
const ulong AppletProgramId = 0x0100000000001009;
|
||||||
string contentPath = ViewModel.ContentManager.GetInstalledContentPath(programId, StorageId.BuiltInSystem, NcaContentType.Program);
|
const string AppletVersion = "1.0.0";
|
||||||
|
|
||||||
|
string contentPath = ViewModel.ContentManager.GetInstalledContentPath(AppletProgramId, StorageId.BuiltInSystem, NcaContentType.Program);
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(contentPath))
|
if (!string.IsNullOrEmpty(contentPath))
|
||||||
{
|
{
|
||||||
ApplicationData applicationData = new()
|
ApplicationData applicationData = new()
|
||||||
{
|
{
|
||||||
Name = name,
|
Name = AppletName,
|
||||||
Id = programId,
|
Id = AppletProgramId,
|
||||||
Path = contentPath,
|
Path = contentPath
|
||||||
};
|
};
|
||||||
|
|
||||||
string version = "1.0.0";
|
var nacpData = StructHelpers.CreateCustomNacpData(AppletName, AppletVersion);
|
||||||
var nacpData = new BlitStruct<ApplicationControlProperty>(1);
|
|
||||||
|
|
||||||
//version buffer
|
|
||||||
Encoding.ASCII.GetBytes(version).AsSpan().CopyTo(nacpData.ByteSpan.Slice(0x3060));
|
|
||||||
|
|
||||||
//name and distributor buffer
|
|
||||||
//repeat once for each locale (the ApplicationControlProperty has 16 locales)
|
|
||||||
for (int i = 0; i < 0x10; i++)
|
|
||||||
{
|
|
||||||
Encoding.ASCII.GetBytes(name).AsSpan().CopyTo(nacpData.ByteSpan.Slice(i * 0x300));
|
|
||||||
"Ryujinx"u8.ToArray().AsSpan().CopyTo(nacpData.ByteSpan.Slice(i * 0x300 + 0x200));
|
|
||||||
}
|
|
||||||
|
|
||||||
await ViewModel.LoadApplication(applicationData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData);
|
await ViewModel.LoadApplication(applicationData, ViewModel.IsFullScreen || ViewModel.StartGamesInFullscreen, nacpData);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,23 +61,17 @@ namespace Ryujinx.Ava.UI.Windows
|
|||||||
|
|
||||||
private void RemoveDLC(object sender, RoutedEventArgs e)
|
private void RemoveDLC(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is Button button)
|
if (sender is Button { DataContext: DownloadableContentModel dlc })
|
||||||
{
|
{
|
||||||
if (button.DataContext is DownloadableContentModel model)
|
ViewModel.Remove(dlc);
|
||||||
{
|
|
||||||
ViewModel.Remove(model);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OpenLocation(object sender, RoutedEventArgs e)
|
private void OpenLocation(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is Button button)
|
if (sender is Button { DataContext: DownloadableContentModel dlc })
|
||||||
{
|
{
|
||||||
if (button.DataContext is DownloadableContentModel model)
|
OpenHelper.LocateFile(dlc.ContainerPath);
|
||||||
{
|
|
||||||
OpenHelper.LocateFile(model.ContainerPath);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user