Merge remote-tracking branch 'upstream/master' into appimage

This commit is contained in:
Piplup 2024-10-23 16:43:00 +01:00
commit 734597a0ef
56 changed files with 615 additions and 308 deletions

View File

@ -1,40 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: weekly
labels:
- "infra"
reviewers:
- TSRBerry
commit-message:
prefix: "ci"
- package-ecosystem: nuget
directory: /
open-pull-requests-limit: 10
schedule:
interval: daily
labels:
- "infra"
reviewers:
- TSRBerry
commit-message:
prefix: nuget
groups:
Avalonia:
patterns:
- "*Avalonia*"
Silk.NET:
patterns:
- "Silk.NET*"
OpenTK:
patterns:
- "OpenTK*"
SixLabors:
patterns:
- "SixLabors*"
NUnit:
patterns:
- "NUnit*"

View File

@ -492,7 +492,7 @@ namespace Ryujinx.Common.Collections
Start = start; Start = start;
End = end; End = end;
Max = end; Max = end;
Values = [ new RangeNode<TKey, TValue>(start, end, value) ]; Values = [new RangeNode<TKey, TValue>(start, end, value)];
Parent = parent; Parent = parent;
} }
} }

View File

@ -4,8 +4,8 @@ using System.Diagnostics;
using System.Numerics; using System.Numerics;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Runtime.Intrinsics.X86;
using System.Runtime.Intrinsics; using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace Ryujinx.Common namespace Ryujinx.Common
@ -67,18 +67,198 @@ namespace Ryujinx.Common
private static ReadOnlySpan<byte> Xxh3KSecret => private static ReadOnlySpan<byte> Xxh3KSecret =>
[ [
0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c, 0xb8,
0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f, 0xfe,
0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21, 0x6c,
0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c, 0x39,
0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3, 0x23,
0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8, 0xa4,
0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d, 0x4b,
0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64, 0xbe,
0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb, 0x7c,
0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e, 0x01,
0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce, 0x81,
0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e 0x2c,
0xf7,
0x21,
0xad,
0x1c,
0xde,
0xd4,
0x6d,
0xe9,
0x83,
0x90,
0x97,
0xdb,
0x72,
0x40,
0xa4,
0xa4,
0xb7,
0xb3,
0x67,
0x1f,
0xcb,
0x79,
0xe6,
0x4e,
0xcc,
0xc0,
0xe5,
0x78,
0x82,
0x5a,
0xd0,
0x7d,
0xcc,
0xff,
0x72,
0x21,
0xb8,
0x08,
0x46,
0x74,
0xf7,
0x43,
0x24,
0x8e,
0xe0,
0x35,
0x90,
0xe6,
0x81,
0x3a,
0x26,
0x4c,
0x3c,
0x28,
0x52,
0xbb,
0x91,
0xc3,
0x00,
0xcb,
0x88,
0xd0,
0x65,
0x8b,
0x1b,
0x53,
0x2e,
0xa3,
0x71,
0x64,
0x48,
0x97,
0xa2,
0x0d,
0xf9,
0x4e,
0x38,
0x19,
0xef,
0x46,
0xa9,
0xde,
0xac,
0xd8,
0xa8,
0xfa,
0x76,
0x3f,
0xe3,
0x9c,
0x34,
0x3f,
0xf9,
0xdc,
0xbb,
0xc7,
0xc7,
0x0b,
0x4f,
0x1d,
0x8a,
0x51,
0xe0,
0x4b,
0xcd,
0xb4,
0x59,
0x31,
0xc8,
0x9f,
0x7e,
0xc9,
0xd9,
0x78,
0x73,
0x64,
0xea,
0xc5,
0xac,
0x83,
0x34,
0xd3,
0xeb,
0xc3,
0xc5,
0x81,
0xa0,
0xff,
0xfa,
0x13,
0x63,
0xeb,
0x17,
0x0d,
0xdd,
0x51,
0xb7,
0xf0,
0xda,
0x49,
0xd3,
0x16,
0x55,
0x26,
0x29,
0xd4,
0x68,
0x9e,
0x2b,
0x16,
0xbe,
0x58,
0x7d,
0x47,
0xa1,
0xfc,
0x8f,
0xf8,
0xb8,
0xd1,
0x7a,
0xd0,
0x31,
0xce,
0x45,
0xcb,
0x3a,
0x8f,
0x95,
0x16,
0x04,
0x28,
0xaf,
0xd7,
0xfb,
0xca,
0xbb,
0x4b,
0x40,
0x7e
]; ];
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -551,6 +731,6 @@ namespace Ryujinx.Common
}; };
} }
#endregion #endregion
} }
} }

View File

@ -7,10 +7,10 @@ namespace Ryujinx.Common
public static T AlignUp<T>(T value, T size) where T : IBinaryInteger<T> public static T AlignUp<T>(T value, T size) where T : IBinaryInteger<T>
=> (value + (size - T.One)) & -size; => (value + (size - T.One)) & -size;
public static T AlignDown<T>(T value, T size) where T : IBinaryInteger<T> public static T AlignDown<T>(T value, T size) where T : IBinaryInteger<T>
=> value & -size; => value & -size;
public static T DivRoundUp<T>(T value, T dividend) where T : IBinaryInteger<T> public static T DivRoundUp<T>(T value, T dividend) where T : IBinaryInteger<T>
=> (value + (dividend - T.One)) / dividend; => (value + (dividend - T.One)) / dividend;
public static int Pow2RoundDown(int value) => BitOperations.IsPow2(value) ? value : Pow2RoundUp(value) >> 1; public static int Pow2RoundDown(int value) => BitOperations.IsPow2(value) ? value : Pow2RoundUp(value) >> 1;

View File

@ -72,7 +72,7 @@ namespace Ryujinx.Graphics.Nvdec.FFmpeg.H264
Flush(); Flush();
} }
public readonly Span<byte> AsSpan() public readonly Span<byte> AsSpan()
=> new Span<byte>(workBuffer)[.._offset]; => new Span<byte>(workBuffer)[.._offset];
public void WriteU(uint value, int valueSize) => WriteBits((int)value, valueSize); public void WriteU(uint value, int valueSize) => WriteBits((int)value, valueSize);

View File

@ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Texture
_height == other._height && _height == other._height &&
_stride == other._stride && _stride == other._stride &&
_bytesPerPixel == other._bytesPerPixel; _bytesPerPixel == other._bytesPerPixel;
return !other._isLinear && _layoutConverter.LayoutMatches(other._layoutConverter); return !other._isLinear && _layoutConverter.LayoutMatches(other._layoutConverter);
} }

View File

@ -589,12 +589,12 @@ namespace Ryujinx.HLE.FileSystem
// So, we check it early for a better user experience. // So, we check it early for a better user experience.
if (_virtualFileSystem.KeySet.HeaderKey.IsZeros()) if (_virtualFileSystem.KeySet.HeaderKey.IsZeros())
throw new MissingKeyException("HeaderKey is empty. Cannot decrypt NCA headers."); throw new MissingKeyException("HeaderKey is empty. Cannot decrypt NCA headers.");
Dictionary<ulong, List<(NcaContentType type, string path)>> updateNcas = new(); Dictionary<ulong, List<(NcaContentType type, string path)>> updateNcas = new();
if (Directory.Exists(firmwarePackage)) if (Directory.Exists(firmwarePackage))
return VerifyAndGetVersionDirectory(firmwarePackage); return VerifyAndGetVersionDirectory(firmwarePackage);
if (!File.Exists(firmwarePackage)) if (!File.Exists(firmwarePackage))
throw new FileNotFoundException("Firmware file does not exist."); throw new FileNotFoundException("Firmware file does not exist.");
@ -620,7 +620,7 @@ namespace Ryujinx.HLE.FileSystem
return null; return null;
SystemVersion VerifyAndGetVersionDirectory(string firmwareDirectory) SystemVersion VerifyAndGetVersionDirectory(string firmwareDirectory)
=> VerifyAndGetVersion(new LocalFileSystem(firmwareDirectory)); => VerifyAndGetVersion(new LocalFileSystem(firmwareDirectory));
SystemVersion VerifyAndGetVersionZip(ZipArchive archive) SystemVersion VerifyAndGetVersionZip(ZipArchive archive)

View File

@ -30,6 +30,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange.MemoryArrange4GiBAppletDev => 2048 * MiB, MemoryArrange.MemoryArrange4GiBAppletDev => 2048 * MiB,
MemoryArrange.MemoryArrange6GiB => 4916 * MiB, MemoryArrange.MemoryArrange6GiB => 4916 * MiB,
MemoryArrange.MemoryArrange8GiB => 6964 * MiB, MemoryArrange.MemoryArrange8GiB => 6964 * MiB,
MemoryArrange.MemoryArrange12GiB => 11060 * MiB,
_ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."), _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."),
}; };
} }
@ -43,7 +44,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange.MemoryArrange4GiBSystemDev => 448 * MiB, MemoryArrange.MemoryArrange4GiBSystemDev => 448 * MiB,
MemoryArrange.MemoryArrange6GiB => 562 * MiB, MemoryArrange.MemoryArrange6GiB => 562 * MiB,
MemoryArrange.MemoryArrange6GiBAppletDev => 2193 * MiB, MemoryArrange.MemoryArrange6GiBAppletDev => 2193 * MiB,
MemoryArrange.MemoryArrange8GiB => 562 * MiB, MemoryArrange.MemoryArrange8GiB or
MemoryArrange.MemoryArrange12GiB => 562 * MiB,
_ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."), _ => throw new ArgumentException($"Invalid memory arrange \"{arrange}\"."),
}; };
} }
@ -71,6 +73,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemorySize.MemorySize4GiB => 4 * GiB, MemorySize.MemorySize4GiB => 4 * GiB,
MemorySize.MemorySize6GiB => 6 * GiB, MemorySize.MemorySize6GiB => 6 * GiB,
MemorySize.MemorySize8GiB => 8 * GiB, MemorySize.MemorySize8GiB => 8 * GiB,
MemorySize.MemorySize12GiB => 12 * GiB,
_ => throw new ArgumentException($"Invalid memory size \"{size}\"."), _ => throw new ArgumentException($"Invalid memory size \"{size}\"."),
}; };
} }

View File

@ -8,5 +8,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemoryArrange6GiB, MemoryArrange6GiB,
MemoryArrange6GiBAppletDev, MemoryArrange6GiBAppletDev,
MemoryArrange8GiB, MemoryArrange8GiB,
MemoryArrange12GiB,
} }
} }

View File

@ -5,5 +5,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Common
MemorySize4GiB = 0, MemorySize4GiB = 0,
MemorySize6GiB = 1, MemorySize6GiB = 1,
MemorySize8GiB = 2, MemorySize8GiB = 2,
MemorySize12GiB = 3,
} }
} }

View File

@ -6,11 +6,12 @@ namespace Ryujinx.HLE
public enum MemoryConfiguration public enum MemoryConfiguration
{ {
MemoryConfiguration4GiB = 0, MemoryConfiguration4GiB = 0,
MemoryConfiguration4GiBAppletDev = 1, MemoryConfiguration6GiB = 1,
MemoryConfiguration4GiBSystemDev = 2, MemoryConfiguration8GiB = 2,
MemoryConfiguration6GiB = 3, MemoryConfiguration12GiB = 3,
MemoryConfiguration6GiBAppletDev = 4, MemoryConfiguration4GiBAppletDev = 4,
MemoryConfiguration8GiB = 5, MemoryConfiguration4GiBSystemDev = 5,
MemoryConfiguration6GiBAppletDev = 6,
} }
static class MemoryConfigurationExtensions static class MemoryConfigurationExtensions
@ -28,6 +29,7 @@ namespace Ryujinx.HLE
MemoryConfiguration.MemoryConfiguration6GiB => MemoryArrange.MemoryArrange6GiB, MemoryConfiguration.MemoryConfiguration6GiB => MemoryArrange.MemoryArrange6GiB,
MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemoryArrange.MemoryArrange6GiBAppletDev, MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemoryArrange.MemoryArrange6GiBAppletDev,
MemoryConfiguration.MemoryConfiguration8GiB => MemoryArrange.MemoryArrange8GiB, MemoryConfiguration.MemoryConfiguration8GiB => MemoryArrange.MemoryArrange8GiB,
MemoryConfiguration.MemoryConfiguration12GiB => MemoryArrange.MemoryArrange12GiB,
_ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."), _ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."),
}; };
} }
@ -42,6 +44,7 @@ namespace Ryujinx.HLE
MemoryConfiguration.MemoryConfiguration6GiB or MemoryConfiguration.MemoryConfiguration6GiB or
MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemorySize.MemorySize6GiB, MemoryConfiguration.MemoryConfiguration6GiBAppletDev => MemorySize.MemorySize6GiB,
MemoryConfiguration.MemoryConfiguration8GiB => MemorySize.MemorySize8GiB, MemoryConfiguration.MemoryConfiguration8GiB => MemorySize.MemorySize8GiB,
MemoryConfiguration.MemoryConfiguration12GiB => MemorySize.MemorySize12GiB,
_ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."), _ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."),
}; };
} }
@ -56,6 +59,7 @@ namespace Ryujinx.HLE
MemoryConfiguration.MemoryConfiguration6GiB or MemoryConfiguration.MemoryConfiguration6GiB or
MemoryConfiguration.MemoryConfiguration6GiBAppletDev => 6 * GiB, MemoryConfiguration.MemoryConfiguration6GiBAppletDev => 6 * GiB,
MemoryConfiguration.MemoryConfiguration8GiB => 8 * GiB, MemoryConfiguration.MemoryConfiguration8GiB => 8 * GiB,
MemoryConfiguration.MemoryConfiguration12GiB => 12 * GiB,
_ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."), _ => throw new AggregateException($"Invalid memory configuration \"{configuration}\"."),
}; };
} }

View File

@ -18,7 +18,7 @@ namespace Ryujinx.Headless.SDL2
public bool TextProcessingEnabled public bool TextProcessingEnabled
{ {
get => Volatile.Read(ref _canProcessInput); get => Volatile.Read(ref _canProcessInput);
set set
{ {
Volatile.Write(ref _canProcessInput, value); Volatile.Write(ref _canProcessInput, value);

View File

@ -1,5 +1,6 @@
using CommandLine; using CommandLine;
using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration;
using Ryujinx.HLE;
using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.HOS.SystemState;
namespace Ryujinx.Headless.SDL2 namespace Ryujinx.Headless.SDL2
@ -219,8 +220,8 @@ namespace Ryujinx.Headless.SDL2
// Hacks // Hacks
[Option("expand-ram", Required = false, Default = false, HelpText = "Expands the RAM amount on the emulated system from 4GiB to 8GiB.")] [Option("dram-size", Required = false, Default = MemoryConfiguration.MemoryConfiguration4GiB, HelpText = "Set the RAM amount on the emulated system.")]
public bool ExpandRAM { get; set; } public MemoryConfiguration DramSize { get; set; }
[Option("ignore-missing-services", Required = false, Default = false, HelpText = "Enable ignoring missing services.")] [Option("ignore-missing-services", Required = false, Default = false, HelpText = "Enable ignoring missing services.")]
public bool IgnoreMissingServices { get; set; } public bool IgnoreMissingServices { get; set; }

View File

@ -562,7 +562,7 @@ namespace Ryujinx.Headless.SDL2
_userChannelPersistence, _userChannelPersistence,
renderer, renderer,
new SDL2HardwareDeviceDriver(), new SDL2HardwareDeviceDriver(),
options.ExpandRAM ? MemoryConfiguration.MemoryConfiguration8GiB : MemoryConfiguration.MemoryConfiguration4GiB, options.DramSize,
window, window,
options.SystemLanguage, options.SystemLanguage,
options.SystemRegion, options.SystemRegion,

View File

@ -147,7 +147,8 @@ namespace Ryujinx.Input.SDL2
public void Rumble(float lowFrequency, float highFrequency, uint durationMs) public void Rumble(float lowFrequency, float highFrequency, uint durationMs)
{ {
if (!Features.HasFlag(GamepadFeaturesFlag.Rumble)) return; if (!Features.HasFlag(GamepadFeaturesFlag.Rumble))
return;
ushort lowFrequencyRaw = (ushort)(lowFrequency * ushort.MaxValue); ushort lowFrequencyRaw = (ushort)(lowFrequency * ushort.MaxValue);
ushort highFrequencyRaw = (ushort)(highFrequency * ushort.MaxValue); ushort highFrequencyRaw = (ushort)(highFrequency * ushort.MaxValue);
@ -260,12 +261,13 @@ namespace Ryujinx.Input.SDL2
{ {
if (_buttonsUserMapping.Count == 0) if (_buttonsUserMapping.Count == 0)
return rawState; return rawState;
// ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator
foreach (ButtonMappingEntry entry in _buttonsUserMapping) foreach (ButtonMappingEntry entry in _buttonsUserMapping)
{ {
if (!entry.IsValid) continue; if (!entry.IsValid)
continue;
// Do not touch state of button already pressed // Do not touch state of button already pressed
if (!result.IsPressed(entry.To)) if (!result.IsPressed(entry.To))
@ -291,11 +293,28 @@ namespace Ryujinx.Input.SDL2
return value * ConvertRate; return value * ConvertRate;
} }
private JoyconConfigControllerStick<GamepadInputId, Common.Configuration.Hid.Controller.StickInputId> GetLogicalJoyStickConfig(StickInputId inputId)
{
switch (inputId)
{
case StickInputId.Left:
if (_configuration.RightJoyconStick.Joystick == Common.Configuration.Hid.Controller.StickInputId.Left)
return _configuration.RightJoyconStick;
else
return _configuration.LeftJoyconStick;
case StickInputId.Right:
if (_configuration.LeftJoyconStick.Joystick == Common.Configuration.Hid.Controller.StickInputId.Right)
return _configuration.LeftJoyconStick;
else
return _configuration.RightJoyconStick;
}
return null;
}
public (float, float) GetStick(StickInputId inputId) public (float, float) GetStick(StickInputId inputId)
{ {
if (inputId == StickInputId.Unbound) if (inputId == StickInputId.Unbound)
return (0.0f, 0.0f); return (0.0f, 0.0f);
(short stickX, short stickY) = GetStickXY(inputId); (short stickX, short stickY) = GetStickXY(inputId);
@ -304,24 +323,22 @@ namespace Ryujinx.Input.SDL2
if (HasConfiguration) if (HasConfiguration)
{ {
if ((inputId == StickInputId.Left && _configuration.LeftJoyconStick.InvertStickX) || var joyconStickConfig = GetLogicalJoyStickConfig(inputId);
(inputId == StickInputId.Right && _configuration.RightJoyconStick.InvertStickX))
{
resultX = -resultX;
}
if ((inputId == StickInputId.Left && _configuration.LeftJoyconStick.InvertStickY) || if (joyconStickConfig != null)
(inputId == StickInputId.Right && _configuration.RightJoyconStick.InvertStickY))
{ {
resultY = -resultY; if (joyconStickConfig.InvertStickX)
} resultX = -resultX;
if ((inputId == StickInputId.Left && _configuration.LeftJoyconStick.Rotate90CW) || if (joyconStickConfig.InvertStickY)
(inputId == StickInputId.Right && _configuration.RightJoyconStick.Rotate90CW)) resultY = -resultY;
{
float temp = resultX; if (joyconStickConfig.Rotate90CW)
resultX = resultY; {
resultY = -temp; float temp = resultX;
resultX = resultY;
resultY = -temp;
}
} }
} }

View File

@ -986,6 +986,10 @@ namespace Ryujinx.UI.App.Common
var shouldSelect = !currentlySelected.HasValue || var shouldSelect = !currentlySelected.HasValue ||
currentlySelected.Value.TitleUpdate.Version < update.Version; currentlySelected.Value.TitleUpdate.Version < update.Version;
_titleUpdates.AddOrUpdate((update, shouldSelect)); _titleUpdates.AddOrUpdate((update, shouldSelect));
if (currentlySelected.HasValue && shouldSelect)
_titleUpdates.AddOrUpdate((currentlySelected.Value.TitleUpdate, false));
SaveTitleUpdatesForGame(update.TitleIdBase); SaveTitleUpdatesForGame(update.TitleIdBase);
numUpdatesLoaded++; numUpdatesLoaded++;

View File

@ -3,6 +3,7 @@ using Ryujinx.Common.Configuration.Hid;
using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Common.Utilities; using Ryujinx.Common.Utilities;
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.Collections.Generic; using System.Collections.Generic;
@ -15,7 +16,7 @@ namespace Ryujinx.UI.Common.Configuration
/// <summary> /// <summary>
/// The current version of the file format /// The current version of the file format
/// </summary> /// </summary>
public const int CurrentVersion = 53; public const int CurrentVersion = 54;
/// <summary> /// <summary>
/// Version of the configuration file format /// Version of the configuration file format
@ -245,7 +246,7 @@ namespace Ryujinx.UI.Common.Configuration
/// <summary> /// <summary>
/// Expands the RAM amount on the emulated system from 4GiB to 8GiB /// Expands the RAM amount on the emulated system from 4GiB to 8GiB
/// </summary> /// </summary>
public bool ExpandRam { get; set; } public MemoryConfiguration DramSize { get; set; }
/// <summary> /// <summary>
/// Enable or disable ignoring missing services /// Enable or disable ignoring missing services

View File

@ -7,6 +7,7 @@ using Ryujinx.Common.Configuration.Hid.Keyboard;
using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan;
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 Ryujinx.UI.Common.Helper; using Ryujinx.UI.Common.Helper;
@ -366,7 +367,7 @@ namespace Ryujinx.UI.Common.Configuration
/// <summary> /// <summary>
/// Defines the amount of RAM available on the emulated system, and how it is distributed /// Defines the amount of RAM available on the emulated system, and how it is distributed
/// </summary> /// </summary>
public ReactiveObject<bool> ExpandRam { get; private set; } public ReactiveObject<MemoryConfiguration> DramSize { get; private set; }
/// <summary> /// <summary>
/// Enable or disable ignoring missing services /// Enable or disable ignoring missing services
@ -400,8 +401,8 @@ namespace Ryujinx.UI.Common.Configuration
AudioBackend.Event += static (sender, e) => LogValueChange(e, nameof(AudioBackend)); AudioBackend.Event += static (sender, e) => LogValueChange(e, nameof(AudioBackend));
MemoryManagerMode = new ReactiveObject<MemoryManagerMode>(); MemoryManagerMode = new ReactiveObject<MemoryManagerMode>();
MemoryManagerMode.Event += static (sender, e) => LogValueChange(e, nameof(MemoryManagerMode)); MemoryManagerMode.Event += static (sender, e) => LogValueChange(e, nameof(MemoryManagerMode));
ExpandRam = new ReactiveObject<bool>(); DramSize = new ReactiveObject<MemoryConfiguration>();
ExpandRam.Event += static (sender, e) => LogValueChange(e, nameof(ExpandRam)); DramSize.Event += static (sender, e) => LogValueChange(e, nameof(DramSize));
IgnoreMissingServices = new ReactiveObject<bool>(); IgnoreMissingServices = new ReactiveObject<bool>();
IgnoreMissingServices.Event += static (sender, e) => LogValueChange(e, nameof(IgnoreMissingServices)); IgnoreMissingServices.Event += static (sender, e) => LogValueChange(e, nameof(IgnoreMissingServices));
AudioVolume = new ReactiveObject<float>(); AudioVolume = new ReactiveObject<float>();
@ -721,7 +722,7 @@ namespace Ryujinx.UI.Common.Configuration
AudioBackend = System.AudioBackend, AudioBackend = System.AudioBackend,
AudioVolume = System.AudioVolume, AudioVolume = System.AudioVolume,
MemoryManagerMode = System.MemoryManagerMode, MemoryManagerMode = System.MemoryManagerMode,
ExpandRam = System.ExpandRam, DramSize = System.DramSize,
IgnoreMissingServices = System.IgnoreMissingServices, IgnoreMissingServices = System.IgnoreMissingServices,
UseHypervisor = System.UseHypervisor, UseHypervisor = System.UseHypervisor,
GuiColumns = new GuiColumns GuiColumns = new GuiColumns
@ -834,7 +835,7 @@ namespace Ryujinx.UI.Common.Configuration
System.AudioBackend.Value = AudioBackend.SDL2; System.AudioBackend.Value = AudioBackend.SDL2;
System.AudioVolume.Value = 1; System.AudioVolume.Value = 1;
System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe; System.MemoryManagerMode.Value = MemoryManagerMode.HostMappedUnsafe;
System.ExpandRam.Value = false; System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB;
System.IgnoreMissingServices.Value = false; System.IgnoreMissingServices.Value = false;
System.UseHypervisor.Value = true; System.UseHypervisor.Value = true;
Multiplayer.LanInterfaceId.Value = "0"; Multiplayer.LanInterfaceId.Value = "0";
@ -897,7 +898,7 @@ namespace Ryujinx.UI.Common.Configuration
Backend = InputBackendType.WindowKeyboard, Backend = InputBackendType.WindowKeyboard,
Id = "0", Id = "0",
PlayerIndex = PlayerIndex.Player1, PlayerIndex = PlayerIndex.Player1,
ControllerType = ControllerType.JoyconPair, ControllerType = ControllerType.ProController,
LeftJoycon = new LeftJoyconCommonConfig<Key> LeftJoycon = new LeftJoyconCommonConfig<Key>
{ {
DpadUp = Key.Up, DpadUp = Key.Up,
@ -1127,7 +1128,7 @@ namespace Ryujinx.UI.Common.Configuration
Backend = InputBackendType.WindowKeyboard, Backend = InputBackendType.WindowKeyboard,
Id = "0", Id = "0",
PlayerIndex = PlayerIndex.Player1, PlayerIndex = PlayerIndex.Player1,
ControllerType = ControllerType.JoyconPair, ControllerType = ControllerType.ProController,
LeftJoycon = new LeftJoyconCommonConfig<Key> LeftJoycon = new LeftJoyconCommonConfig<Key>
{ {
DpadUp = Key.Up, DpadUp = Key.Up,
@ -1513,6 +1514,15 @@ namespace Ryujinx.UI.Common.Configuration
configurationFileUpdated = true; configurationFileUpdated = true;
} }
if (configurationFileFormat.Version < 54)
{
Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 54.");
configurationFileFormat.DramSize = MemoryConfiguration.MemoryConfiguration4GiB;
configurationFileUpdated = true;
}
Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog;
Graphics.ResScale.Value = configurationFileFormat.ResScale; Graphics.ResScale.Value = configurationFileFormat.ResScale;
Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom; Graphics.ResScaleCustom.Value = configurationFileFormat.ResScaleCustom;
@ -1559,7 +1569,7 @@ namespace Ryujinx.UI.Common.Configuration
System.AudioBackend.Value = configurationFileFormat.AudioBackend; System.AudioBackend.Value = configurationFileFormat.AudioBackend;
System.AudioVolume.Value = configurationFileFormat.AudioVolume; System.AudioVolume.Value = configurationFileFormat.AudioVolume;
System.MemoryManagerMode.Value = configurationFileFormat.MemoryManagerMode; System.MemoryManagerMode.Value = configurationFileFormat.MemoryManagerMode;
System.ExpandRam.Value = configurationFileFormat.ExpandRam; System.DramSize.Value = configurationFileFormat.DramSize;
System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices; System.IgnoreMissingServices.Value = configurationFileFormat.IgnoreMissingServices;
System.UseHypervisor.Value = configurationFileFormat.UseHypervisor; System.UseHypervisor.Value = configurationFileFormat.UseHypervisor;
UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn; UI.GuiColumns.FavColumn.Value = configurationFileFormat.GuiColumns.FavColumn;

View File

@ -14,8 +14,8 @@ namespace Ryujinx.UI.Common
public static class DiscordIntegrationModule public static class DiscordIntegrationModule
{ {
public static Timestamps StartedAt { get; set; } public static Timestamps StartedAt { get; set; }
private static readonly string _description = ReleaseInformation.IsValid private static readonly string _description = ReleaseInformation.IsValid
? $"v{ReleaseInformation.Version} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}@{ReleaseInformation.BuildGitHash}" ? $"v{ReleaseInformation.Version} {ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}@{ReleaseInformation.BuildGitHash}"
: "dev build"; : "dev build";
@ -80,7 +80,7 @@ namespace Ryujinx.UI.Common
}, },
Details = TruncateToByteLength($"Playing {appMeta.Title}"), Details = TruncateToByteLength($"Playing {appMeta.Title}"),
State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5 State = appMeta.LastPlayed.HasValue && appMeta.TimePlayed.TotalSeconds > 5
? $"Total play time: {appMeta.TimePlayed.Humanize(2, false)}" ? $"Total play time: {appMeta.TimePlayed.Humanize(2, false)}"
: "Never played", : "Never played",
Timestamps = Timestamps.Now Timestamps = Timestamps.Now
}); });
@ -120,7 +120,7 @@ namespace Ryujinx.UI.Common
_discordClient?.Dispose(); _discordClient?.Dispose();
} }
private static readonly string[] _discordGameAssetKeys = private static readonly string[] _discordGameAssetKeys =
[ [
"01002da013484000", // The Legend of Zelda: Skyward Sword HD "01002da013484000", // The Legend of Zelda: Skyward Sword HD
"01007ef00011e000", // The Legend of Zelda: Breath of the Wild "01007ef00011e000", // The Legend of Zelda: Breath of the Wild

View File

@ -98,7 +98,6 @@ namespace Ryujinx.UI.Common.Helper
if (baseApplicationExtension is not (".nro" or ".nso")) if (baseApplicationExtension is not (".nro" or ".nso"))
return IsFirmwareValid(contentManager, out error); return IsFirmwareValid(contentManager, out error);
error = UserError.Success;
} }
error = UserError.ApplicationNotFound; error = UserError.ApplicationNotFound;

View File

@ -9,7 +9,7 @@ namespace Ryujinx.UI.Common.Helper
{ {
if (activeProcess == null) if (activeProcess == null)
return string.Empty; return string.Empty;
string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}"; string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}";
string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $" v{activeProcess.DisplayVersion}"; string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $" v{activeProcess.DisplayVersion}";
string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})"; string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})";

View File

@ -87,7 +87,8 @@ namespace Ryujinx.UI.Common.Helper
foreach (string path in titleUpdateMetadata.Paths) foreach (string path in titleUpdateMetadata.Paths)
{ {
if (!File.Exists(path)) continue; if (!File.Exists(path))
continue;
try try
{ {
@ -104,7 +105,7 @@ namespace Ryujinx.UI.Common.Helper
if (controlNca is null || patchNca is null) if (controlNca is null || patchNca is null)
continue; continue;
ApplicationControlProperty controlData = new(); ApplicationControlProperty controlData = new();
using UniqueRef<IFile> nacpFile = new(); using UniqueRef<IFile> nacpFile = new();
@ -144,7 +145,7 @@ namespace Ryujinx.UI.Common.Helper
return result; return result;
} }
private static string PathToGameUpdatesJson(ulong applicationIdBase) private static string PathToGameUpdatesJson(ulong applicationIdBase)
=> Path.Combine(AppDataManager.GamesDirPath, applicationIdBase.ToString("x16"), "updates.json"); => Path.Combine(AppDataManager.GamesDirPath, applicationIdBase.ToString("x16"), "updates.json");
} }
} }

View File

@ -34,10 +34,10 @@ namespace Ryujinx.UI.Common.SystemInfo
{ {
if (OperatingSystem.IsWindows()) if (OperatingSystem.IsWindows())
return new WindowsSystemInfo(); return new WindowsSystemInfo();
if (OperatingSystem.IsLinux()) if (OperatingSystem.IsLinux())
return new LinuxSystemInfo(); return new LinuxSystemInfo();
if (OperatingSystem.IsMacOS()) if (OperatingSystem.IsMacOS())
return new MacOSSystemInfo(); return new MacOSSystemInfo();

View File

@ -22,8 +22,8 @@ namespace Ryujinx.Ava
public class App : Application public class App : Application
{ {
internal static string FormatTitle(LocaleKeys? windowTitleKey = null) internal static string FormatTitle(LocaleKeys? windowTitleKey = null)
=> windowTitleKey is null => windowTitleKey is null
? $"Ryujinx {Program.Version}" ? $"Ryujinx {Program.Version}"
: $"Ryujinx {Program.Version} - {LocaleManager.Instance[windowTitleKey.Value]}"; : $"Ryujinx {Program.Version} - {LocaleManager.Instance[windowTitleKey.Value]}";
public static MainWindow MainWindow => Current! public static MainWindow MainWindow => Current!

View File

@ -541,7 +541,7 @@ namespace Ryujinx.Ava
{ {
if (Device.Processes != null) if (Device.Processes != null)
MainWindowViewModel.UpdateGameMetadata(Device.Processes.ActiveApplication.ProgramIdText); MainWindowViewModel.UpdateGameMetadata(Device.Processes.ActiveApplication.ProgramIdText);
ConfigurationState.Instance.System.IgnoreMissingServices.Event -= UpdateIgnoreMissingServicesState; ConfigurationState.Instance.System.IgnoreMissingServices.Event -= UpdateIgnoreMissingServicesState;
ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState; ConfigurationState.Instance.Graphics.AspectRatio.Event -= UpdateAspectRatioState;
@ -786,7 +786,7 @@ namespace Ryujinx.Ava
return false; return false;
} }
ApplicationMetadata appMeta = ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText, ApplicationMetadata appMeta = ApplicationLibrary.LoadAndSaveMetaData(Device.Processes.ActiveApplication.ProgramIdText,
appMetadata => appMetadata.UpdatePreGame() appMetadata => appMetadata.UpdatePreGame()
); );
@ -845,9 +845,7 @@ namespace Ryujinx.Ava
Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}"); Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}");
// Initialize Configuration. // Initialize Configuration.
var memoryConfiguration = ConfigurationState.Instance.System.ExpandRam var memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value;
? MemoryConfiguration.MemoryConfiguration8GiB
: MemoryConfiguration.MemoryConfiguration4GiB;
Device = new Switch(new HLEConfiguration( Device = new Switch(new HLEConfiguration(
VirtualFileSystem, VirtualFileSystem,
@ -867,7 +865,7 @@ namespace Ryujinx.Ava
ConfigurationState.Instance.System.EnableInternetAccess, ConfigurationState.Instance.System.EnableInternetAccess,
ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None,
ConfigurationState.Instance.System.FsGlobalAccessLogMode, ConfigurationState.Instance.System.FsGlobalAccessLogMode,
ConfigurationState.Instance.System.SystemTimeOffset, ConfigurationState.Instance.System.SystemTimeOffset,
ConfigurationState.Instance.System.TimeZone, ConfigurationState.Instance.System.TimeZone,
ConfigurationState.Instance.System.MemoryManagerMode, ConfigurationState.Instance.System.MemoryManagerMode,
ConfigurationState.Instance.System.IgnoreMissingServices, ConfigurationState.Instance.System.IgnoreMissingServices,

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "هاكات", "SettingsTabSystemHacks": "هاكات",
"SettingsTabSystemHacksNote": "قد يتسبب في عدم الاستقرار", "SettingsTabSystemHacksNote": "قد يتسبب في عدم الاستقرار",
"SettingsTabSystemExpandDramSize": "استخدام تخطيط الذاكرة البديل (المطورين)", "SettingsTabSystemDramSize": "استخدام تخطيط الذاكرة البديل (المطورين)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "تجاهل الخدمات المفقودة", "SettingsTabSystemIgnoreMissingServices": "تجاهل الخدمات المفقودة",
"SettingsTabGraphics": "الرسومات", "SettingsTabGraphics": "الرسومات",
"SettingsTabGraphicsAPI": "API الرسومات ", "SettingsTabGraphicsAPI": "API الرسومات ",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": " (Kann Fehler verursachen)", "SettingsTabSystemHacksNote": " (Kann Fehler verursachen)",
"SettingsTabSystemExpandDramSize": "Erweitere DRAM Größe auf 6GiB", "SettingsTabSystemDramSize": "DRAM Größe:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignoriere fehlende Dienste", "SettingsTabSystemIgnoreMissingServices": "Ignoriere fehlende Dienste",
"SettingsTabGraphics": "Grafik", "SettingsTabGraphics": "Grafik",
"SettingsTabGraphicsAPI": "Grafik-API", "SettingsTabGraphicsAPI": "Grafik-API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Μικροδιορθώσεις", "SettingsTabSystemHacks": "Μικροδιορθώσεις",
"SettingsTabSystemHacksNote": " (Μπορεί να προκαλέσουν αστάθεια)", "SettingsTabSystemHacksNote": " (Μπορεί να προκαλέσουν αστάθεια)",
"SettingsTabSystemExpandDramSize": "Επέκταση μεγέθους DRAM στα 6GiB", "SettingsTabSystemDramSize": "Μέγεθος DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Αγνόηση υπηρεσιών που λείπουν", "SettingsTabSystemIgnoreMissingServices": "Αγνόηση υπηρεσιών που λείπουν",
"SettingsTabGraphics": "Γραφικά", "SettingsTabGraphics": "Γραφικά",
"SettingsTabGraphicsAPI": "API Γραφικά", "SettingsTabGraphicsAPI": "API Γραφικά",

View File

@ -149,7 +149,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": "May cause instability", "SettingsTabSystemHacksNote": "May cause instability",
"SettingsTabSystemExpandDramSize": "Expand DRAM to 8GiB", "SettingsTabSystemDramSize": "DRAM size:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignore Missing Services", "SettingsTabSystemIgnoreMissingServices": "Ignore Missing Services",
"SettingsTabGraphics": "Graphics", "SettingsTabGraphics": "Graphics",
"SettingsTabGraphicsAPI": "Graphics API", "SettingsTabGraphicsAPI": "Graphics API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": " (Pueden causar inestabilidad)", "SettingsTabSystemHacksNote": " (Pueden causar inestabilidad)",
"SettingsTabSystemExpandDramSize": "Usar diseño alternativo de memoria (Desarrolladores)", "SettingsTabSystemDramSize": "Tamaño DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignorar servicios no implementados", "SettingsTabSystemIgnoreMissingServices": "Ignorar servicios no implementados",
"SettingsTabGraphics": "Gráficos", "SettingsTabGraphics": "Gráficos",
"SettingsTabGraphicsAPI": "API de gráficos", "SettingsTabGraphicsAPI": "API de gráficos",

View File

@ -1,7 +1,7 @@
{ {
"Language": "Français", "Language": "Français",
"MenuBarFileOpenApplet": "Ouvrir un applet", "MenuBarFileOpenApplet": "Ouvrir un programme",
"MenuBarFileOpenAppletOpenMiiAppletToolTip": "Ouvrir l'Applet Mii Editor en mode Standalone", "MenuBarFileOpenAppletOpenMiiAppletToolTip": "Ouvrir l'éditeur Mii en mode Standalone",
"SettingsTabInputDirectMouseAccess": "Accès direct à la souris", "SettingsTabInputDirectMouseAccess": "Accès direct à la souris",
"SettingsTabSystemMemoryManagerMode": "Mode de gestion de la mémoire :", "SettingsTabSystemMemoryManagerMode": "Mode de gestion de la mémoire :",
"SettingsTabSystemMemoryManagerModeSoftware": "Logiciel", "SettingsTabSystemMemoryManagerModeSoftware": "Logiciel",
@ -10,7 +10,10 @@
"SettingsTabSystemUseHypervisor": "Utiliser l'Hyperviseur", "SettingsTabSystemUseHypervisor": "Utiliser l'Hyperviseur",
"MenuBarFile": "_Fichier", "MenuBarFile": "_Fichier",
"MenuBarFileOpenFromFile": "_Charger un jeu depuis un fichier", "MenuBarFileOpenFromFile": "_Charger un jeu depuis un fichier",
"MenuBarFileOpenFromFileError": "Aucun jeu trouvé dans le fichier sélectionné",
"MenuBarFileOpenUnpacked": "Charger un jeu extrait", "MenuBarFileOpenUnpacked": "Charger un jeu extrait",
"MenuBarFileLoadDlcFromFolder": "Charger les DLC depuis le dossier des DLC",
"MenuBarFileLoadTitleUpdatesFromFolder": "Charger les mises à jour depuis le dossier des mises à jour",
"MenuBarFileOpenEmuFolder": "Ouvrir le dossier Ryujinx", "MenuBarFileOpenEmuFolder": "Ouvrir le dossier Ryujinx",
"MenuBarFileOpenLogsFolder": "Ouvrir le dossier des journaux", "MenuBarFileOpenLogsFolder": "Ouvrir le dossier des journaux",
"MenuBarFileExit": "_Quitter", "MenuBarFileExit": "_Quitter",
@ -54,19 +57,19 @@
"GameListContextMenuOpenDeviceSaveDirectoryToolTip": "Ouvre le dossier contenant la sauvegarde console du jeu", "GameListContextMenuOpenDeviceSaveDirectoryToolTip": "Ouvre le dossier contenant la sauvegarde console du jeu",
"GameListContextMenuOpenBcatSaveDirectory": "Ouvrir le dossier de sauvegarde BCAT", "GameListContextMenuOpenBcatSaveDirectory": "Ouvrir le dossier de sauvegarde BCAT",
"GameListContextMenuOpenBcatSaveDirectoryToolTip": "Ouvre le dossier contenant la sauvegarde BCAT du jeu", "GameListContextMenuOpenBcatSaveDirectoryToolTip": "Ouvre le dossier contenant la sauvegarde BCAT du jeu",
"GameListContextMenuManageTitleUpdates": "Gérer la mise à jour des titres", "GameListContextMenuManageTitleUpdates": "Gérer les mises à jour",
"GameListContextMenuManageTitleUpdatesToolTip": "Ouvre la fenêtre de gestion des mises à jour du jeu", "GameListContextMenuManageTitleUpdatesToolTip": "Ouvre la fenêtre de gestion des mises à jour du jeu",
"GameListContextMenuManageDlc": "Gérer les DLC", "GameListContextMenuManageDlc": "Gérer les DLC",
"GameListContextMenuManageDlcToolTip": "Ouvre la fenêtre de gestion des DLC", "GameListContextMenuManageDlcToolTip": "Ouvre la fenêtre de gestion des DLC",
"GameListContextMenuCacheManagement": "Gestion des caches", "GameListContextMenuCacheManagement": "Gestion des caches",
"GameListContextMenuCacheManagementPurgePptc": "Reconstruction du PPTC", "GameListContextMenuCacheManagementPurgePptc": "Reconstruction du PPTC",
"GameListContextMenuCacheManagementPurgePptcToolTip": "Effectuer une reconstruction du PPTC au prochain démarrage du jeu", "GameListContextMenuCacheManagementPurgePptcToolTip": "Effectuer une reconstruction du PPTC au prochain démarrage du jeu",
"GameListContextMenuCacheManagementPurgeShaderCache": "Purger le cache des shaders", "GameListContextMenuCacheManagementPurgeShaderCache": "Purger les shaders",
"GameListContextMenuCacheManagementPurgeShaderCacheToolTip": "Supprime le cache des shaders du jeu", "GameListContextMenuCacheManagementPurgeShaderCacheToolTip": "Supprime les shaders du jeu",
"GameListContextMenuCacheManagementOpenPptcDirectory": "Ouvrir le dossier du PPTC", "GameListContextMenuCacheManagementOpenPptcDirectory": "Ouvrir le dossier du PPTC",
"GameListContextMenuCacheManagementOpenPptcDirectoryToolTip": "Ouvre le dossier contenant le PPTC du jeu", "GameListContextMenuCacheManagementOpenPptcDirectoryToolTip": "Ouvre le dossier contenant le PPTC du jeu",
"GameListContextMenuCacheManagementOpenShaderCacheDirectory": "Ouvrir le dossier du cache des shaders", "GameListContextMenuCacheManagementOpenShaderCacheDirectory": "Ouvrir le dossier des shaders",
"GameListContextMenuCacheManagementOpenShaderCacheDirectoryToolTip": "Ouvre le dossier contenant le cache des shaders du jeu", "GameListContextMenuCacheManagementOpenShaderCacheDirectoryToolTip": "Ouvre le dossier contenant les shaders du jeu",
"GameListContextMenuExtractData": "Extraire les données", "GameListContextMenuExtractData": "Extraire les données",
"GameListContextMenuExtractDataExeFS": "ExeFS", "GameListContextMenuExtractDataExeFS": "ExeFS",
"GameListContextMenuExtractDataExeFSToolTip": "Extrait la section ExeFS du jeu (mise à jour incluse)", "GameListContextMenuExtractDataExeFSToolTip": "Extrait la section ExeFS du jeu (mise à jour incluse)",
@ -74,13 +77,13 @@
"GameListContextMenuExtractDataRomFSToolTip": "Extrait la section RomFS du jeu (mise à jour incluse)", "GameListContextMenuExtractDataRomFSToolTip": "Extrait la section RomFS du jeu (mise à jour incluse)",
"GameListContextMenuExtractDataLogo": "Logo", "GameListContextMenuExtractDataLogo": "Logo",
"GameListContextMenuExtractDataLogoToolTip": "Extrait la section Logo du jeu (mise à jour incluse)", "GameListContextMenuExtractDataLogoToolTip": "Extrait la section Logo du jeu (mise à jour incluse)",
"GameListContextMenuCreateShortcut": "Créer un raccourci d'application", "GameListContextMenuCreateShortcut": "Créer un raccourci",
"GameListContextMenuCreateShortcutToolTip": "Créer un raccourci sur le bureau qui lance l'application sélectionnée", "GameListContextMenuCreateShortcutToolTip": "Créer un raccourci sur le bureau qui lance le jeu sélectionné",
"GameListContextMenuCreateShortcutToolTipMacOS": "Créer un raccourci dans le dossier Applications de macOS qui lance l'application sélectionnée", "GameListContextMenuCreateShortcutToolTipMacOS": "Créer un raccourci dans le dossier Applications de macOS qui lance le jeu sélectionné",
"GameListContextMenuOpenModsDirectory": "Ouvrir le dossier des mods", "GameListContextMenuOpenModsDirectory": "Ouvrir le dossier des mods",
"GameListContextMenuOpenModsDirectoryToolTip": "Ouvre le dossier contenant les mods de l'application", "GameListContextMenuOpenModsDirectoryToolTip": "Ouvre le dossier contenant les mods du jeu",
"GameListContextMenuOpenSdModsDirectory": "Ouvrir le dossier des mods Atmosphère", "GameListContextMenuOpenSdModsDirectory": "Ouvrir le dossier des mods Atmosphère",
"GameListContextMenuOpenSdModsDirectoryToolTip": "Ouvre le dossier alternatif de la carte SD Atmosphère qui contient les mods de l'application. Utile pour les mods conçus pour du matériel réel.", "GameListContextMenuOpenSdModsDirectoryToolTip": "Ouvre le dossier alternatif de la carte SD Atmosphère qui contient les mods de l'application. Utile pour les mods conçus pour console.",
"StatusBarGamesLoaded": "{0}/{1} Jeux chargés", "StatusBarGamesLoaded": "{0}/{1} Jeux chargés",
"StatusBarSystemVersion": "Version du Firmware: {0}", "StatusBarSystemVersion": "Version du Firmware: {0}",
"LinuxVmMaxMapCountDialogTitle": "Limite basse pour les mappings mémoire détectée", "LinuxVmMaxMapCountDialogTitle": "Limite basse pour les mappings mémoire détectée",
@ -102,6 +105,7 @@
"SettingsTabGeneralHideCursorOnIdle": "Masquer le curseur si inactif", "SettingsTabGeneralHideCursorOnIdle": "Masquer le curseur si inactif",
"SettingsTabGeneralHideCursorAlways": "Toujours", "SettingsTabGeneralHideCursorAlways": "Toujours",
"SettingsTabGeneralGameDirectories": "Dossiers des jeux", "SettingsTabGeneralGameDirectories": "Dossiers des jeux",
"SettingsTabGeneralAutoloadDirectories": "Dossiers des mises à jour/DLC",
"SettingsTabGeneralAdd": "Ajouter", "SettingsTabGeneralAdd": "Ajouter",
"SettingsTabGeneralRemove": "Retirer", "SettingsTabGeneralRemove": "Retirer",
"SettingsTabSystem": "Système", "SettingsTabSystem": "Système",
@ -127,9 +131,9 @@
"SettingsTabSystemSystemLanguagePortuguese": "Portugais", "SettingsTabSystemSystemLanguagePortuguese": "Portugais",
"SettingsTabSystemSystemLanguageRussian": "Russe", "SettingsTabSystemSystemLanguageRussian": "Russe",
"SettingsTabSystemSystemLanguageTaiwanese": "Taïwanais", "SettingsTabSystemSystemLanguageTaiwanese": "Taïwanais",
"SettingsTabSystemSystemLanguageBritishEnglish": "Anglais britannique ", "SettingsTabSystemSystemLanguageBritishEnglish": "Anglais Britannique ",
"SettingsTabSystemSystemLanguageCanadianFrench": "Français Canadien", "SettingsTabSystemSystemLanguageCanadianFrench": "Français Canadien",
"SettingsTabSystemSystemLanguageLatinAmericanSpanish": "Espagnol latino-américain", "SettingsTabSystemSystemLanguageLatinAmericanSpanish": "Espagnol Latino-Américain",
"SettingsTabSystemSystemLanguageSimplifiedChinese": "Chinois simplifié", "SettingsTabSystemSystemLanguageSimplifiedChinese": "Chinois simplifié",
"SettingsTabSystemSystemLanguageTraditionalChinese": "Chinois traditionnel", "SettingsTabSystemSystemLanguageTraditionalChinese": "Chinois traditionnel",
"SettingsTabSystemSystemTimeZone": "Fuseau horaire du système :", "SettingsTabSystemSystemTimeZone": "Fuseau horaire du système :",
@ -139,13 +143,17 @@
"SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC", "SettingsTabSystemEnableLowPowerPptc": "Low-power PPTC",
"SettingsTabSystemEnableFsIntegrityChecks": "Activer la vérification de l'intégrité du système de fichiers", "SettingsTabSystemEnableFsIntegrityChecks": "Activer la vérification de l'intégrité du système de fichiers",
"SettingsTabSystemAudioBackend": "Bibliothèque Audio :", "SettingsTabSystemAudioBackend": "Bibliothèque Audio :",
"SettingsTabSystemAudioBackendDummy": "Factice", "SettingsTabSystemAudioBackendDummy": "Désactivée",
"SettingsTabSystemAudioBackendOpenAL": "OpenAL", "SettingsTabSystemAudioBackendOpenAL": "OpenAL",
"SettingsTabSystemAudioBackendSoundIO": "SoundIO", "SettingsTabSystemAudioBackendSoundIO": "SoundIO",
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": "Cela peut causer des instabilités", "SettingsTabSystemHacksNote": "Cela peut causer des instabilités",
"SettingsTabSystemExpandDramSize": "Utiliser disposition alternative de la mémoire (développeur)", "SettingsTabSystemDramSize": "Taille de la DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiO",
"SettingsTabSystemDramSize6GiB": "6GiO",
"SettingsTabSystemDramSize8GiB": "8GiO",
"SettingsTabSystemDramSize12GiB": "12GiO",
"SettingsTabSystemIgnoreMissingServices": "Ignorer les services manquants", "SettingsTabSystemIgnoreMissingServices": "Ignorer les services manquants",
"SettingsTabGraphics": "Graphismes", "SettingsTabGraphics": "Graphismes",
"SettingsTabGraphicsAPI": "API Graphique", "SettingsTabGraphicsAPI": "API Graphique",
@ -168,7 +176,7 @@
"SettingsTabGraphicsAspectRatio16x10": "16:10", "SettingsTabGraphicsAspectRatio16x10": "16:10",
"SettingsTabGraphicsAspectRatio21x9": "21:9", "SettingsTabGraphicsAspectRatio21x9": "21:9",
"SettingsTabGraphicsAspectRatio32x9": "32:9", "SettingsTabGraphicsAspectRatio32x9": "32:9",
"SettingsTabGraphicsAspectRatioStretch": cran étiré", "SettingsTabGraphicsAspectRatioStretch": tirer pour remplir la fenêtre",
"SettingsTabGraphicsDeveloperOptions": "Options développeur", "SettingsTabGraphicsDeveloperOptions": "Options développeur",
"SettingsTabGraphicsShaderDumpPath": "Chemin du dossier de copie des shaders:", "SettingsTabGraphicsShaderDumpPath": "Chemin du dossier de copie des shaders:",
"SettingsTabLogging": "Journaux", "SettingsTabLogging": "Journaux",
@ -211,7 +219,7 @@
"ControllerSettingsInputDevice": "Périphériques", "ControllerSettingsInputDevice": "Périphériques",
"ControllerSettingsRefresh": "Actualiser", "ControllerSettingsRefresh": "Actualiser",
"ControllerSettingsDeviceDisabled": "Désactivé", "ControllerSettingsDeviceDisabled": "Désactivé",
"ControllerSettingsControllerType": "Type de contrôleur", "ControllerSettingsControllerType": "Type de manette",
"ControllerSettingsControllerTypeHandheld": "Portable", "ControllerSettingsControllerTypeHandheld": "Portable",
"ControllerSettingsControllerTypeProController": "Pro Controller", "ControllerSettingsControllerTypeProController": "Pro Controller",
"ControllerSettingsControllerTypeJoyConPair": "JoyCon Joints", "ControllerSettingsControllerTypeJoyConPair": "JoyCon Joints",
@ -272,59 +280,59 @@
"ControllerSettingsMotionGyroDeadzone": "Zone morte du gyroscope:", "ControllerSettingsMotionGyroDeadzone": "Zone morte du gyroscope:",
"ControllerSettingsSave": "Enregistrer", "ControllerSettingsSave": "Enregistrer",
"ControllerSettingsClose": "Fermer", "ControllerSettingsClose": "Fermer",
"KeyUnknown": "Unknown", "KeyUnknown": "Touche inconnue",
"KeyShiftLeft": "Shift Left", "KeyShiftLeft": "Maj Gauche",
"KeyShiftRight": "Shift Right", "KeyShiftRight": "Maj Droite",
"KeyControlLeft": "Ctrl Left", "KeyControlLeft": "Ctrl Gauche",
"KeyMacControlLeft": "⌃ Left", "KeyMacControlLeft": "⌃ Gauche",
"KeyControlRight": "Ctrl Right", "KeyControlRight": "Ctrl Droite",
"KeyMacControlRight": "⌃ Right", "KeyMacControlRight": "⌃ Droite",
"KeyAltLeft": "Alt Left", "KeyAltLeft": "Alt Gauche",
"KeyMacAltLeft": "⌥ Left", "KeyMacAltLeft": "⌥ Gauche",
"KeyAltRight": "Alt Right", "KeyAltRight": "Alt Droite",
"KeyMacAltRight": "⌥ Right", "KeyMacAltRight": "⌥ Droite",
"KeyWinLeft": "⊞ Left", "KeyWinLeft": "⊞ Gauche",
"KeyMacWinLeft": "⌘ Left", "KeyMacWinLeft": "⌘ Gauche",
"KeyWinRight": "⊞ Right", "KeyWinRight": "⊞ Droite",
"KeyMacWinRight": "⌘ Right", "KeyMacWinRight": "⌘ Droite",
"KeyMenu": "Menu", "KeyMenu": "Menu",
"KeyUp": "Up", "KeyUp": "Haut",
"KeyDown": "Down", "KeyDown": "Bas",
"KeyLeft": "Left", "KeyLeft": "Gauche",
"KeyRight": "Right", "KeyRight": "Droite",
"KeyEnter": "Enter", "KeyEnter": "Ente",
"KeyEscape": "Escape", "KeyEscape": "Esc",
"KeySpace": "Space", "KeySpace": "Espace",
"KeyTab": "Tab", "KeyTab": "Tab",
"KeyBackSpace": "Backspace", "KeyBackSpace": "Supprimer",
"KeyInsert": "Insert", "KeyInsert": "Ins",
"KeyDelete": "Delete", "KeyDelete": "Sup",
"KeyPageUp": "Page Up", "KeyPageUp": "Page Up",
"KeyPageDown": "Page Down", "KeyPageDown": "Page Down",
"KeyHome": "Home", "KeyHome": "Home",
"KeyEnd": "End", "KeyEnd": "Fin",
"KeyCapsLock": "Caps Lock", "KeyCapsLock": "Verr. Maj",
"KeyScrollLock": "Scroll Lock", "KeyScrollLock": "Arr. Déf.",
"KeyPrintScreen": "Print Screen", "KeyPrintScreen": "Imp. Écran",
"KeyPause": "Pause", "KeyPause": "Pause",
"KeyNumLock": "Num Lock", "KeyNumLock": "Verr. Num",
"KeyClear": "Clear", "KeyClear": "Clear",
"KeyKeypad0": "Keypad 0", "KeyKeypad0": "Num. 0",
"KeyKeypad1": "Keypad 1", "KeyKeypad1": "Num. 1",
"KeyKeypad2": "Keypad 2", "KeyKeypad2": "Num. 2",
"KeyKeypad3": "Keypad 3", "KeyKeypad3": "Num. 3",
"KeyKeypad4": "Keypad 4", "KeyKeypad4": "Num. 4",
"KeyKeypad5": "Keypad 5", "KeyKeypad5": "Num. 5",
"KeyKeypad6": "Keypad 6", "KeyKeypad6": "Num. 6",
"KeyKeypad7": "Keypad 7", "KeyKeypad7": "Num. 7",
"KeyKeypad8": "Keypad 8", "KeyKeypad8": "Num. 8",
"KeyKeypad9": "Keypad 9", "KeyKeypad9": "Num. 9",
"KeyKeypadDivide": "Keypad Divide", "KeyKeypadDivide": "Num. Diviser",
"KeyKeypadMultiply": "Keypad Multiply", "KeyKeypadMultiply": "Num. Multiplier",
"KeyKeypadSubtract": "Keypad Subtract", "KeyKeypadSubtract": "Num. Soustraire",
"KeyKeypadAdd": "Keypad Add", "KeyKeypadAdd": "Num. Ajouter",
"KeyKeypadDecimal": "Keypad Decimal", "KeyKeypadDecimal": "Num. Point",
"KeyKeypadEnter": "Keypad Enter", "KeyKeypadEnter": "Num. Ent",
"KeyNumber0": "0", "KeyNumber0": "0",
"KeyNumber1": "1", "KeyNumber1": "1",
"KeyNumber2": "2", "KeyNumber2": "2",
@ -347,32 +355,32 @@
"KeyPeriod": ".", "KeyPeriod": ".",
"KeySlash": "/", "KeySlash": "/",
"KeyBackSlash": "\\", "KeyBackSlash": "\\",
"KeyUnbound": "Unbound", "KeyUnbound": "Pas Attribuée",
"GamepadLeftStick": "L Stick Button", "GamepadLeftStick": "Bouton Joystick G.",
"GamepadRightStick": "R Stick Button", "GamepadRightStick": "Bouton Joystick D.",
"GamepadLeftShoulder": "Left Shoulder", "GamepadLeftShoulder": "Bouton Gachette G.",
"GamepadRightShoulder": "Right Shoulder", "GamepadRightShoulder": "Bouton Gachette D.",
"GamepadLeftTrigger": "Left Trigger", "GamepadLeftTrigger": "Gachette Gauche",
"GamepadRightTrigger": "Right Trigger", "GamepadRightTrigger": "Gachette Droite",
"GamepadDpadUp": "Up", "GamepadDpadUp": "Haut",
"GamepadDpadDown": "Down", "GamepadDpadDown": "Bas",
"GamepadDpadLeft": "Left", "GamepadDpadLeft": "Gauche",
"GamepadDpadRight": "Right", "GamepadDpadRight": "Droite",
"GamepadMinus": "-", "GamepadMinus": "-",
"GamepadPlus": "+", "GamepadPlus": "+",
"GamepadGuide": "Guide", "GamepadGuide": "Guide",
"GamepadMisc1": "Misc", "GamepadMisc1": "Autre",
"GamepadPaddle1": "Paddle 1", "GamepadPaddle1": "Palette 1",
"GamepadPaddle2": "Paddle 2", "GamepadPaddle2": "Palette 2",
"GamepadPaddle3": "Paddle 3", "GamepadPaddle3": "Palette 3",
"GamepadPaddle4": "Paddle 4", "GamepadPaddle4": "Palette 4",
"GamepadTouchpad": "Touchpad", "GamepadTouchpad": "Touchpad",
"GamepadSingleLeftTrigger0": "Left Trigger 0", "GamepadSingleLeftTrigger0": "Gachette Gauche 0",
"GamepadSingleRightTrigger0": "Right Trigger 0", "GamepadSingleRightTrigger0": "Gachette Droite 0",
"GamepadSingleLeftTrigger1": "Left Trigger 1", "GamepadSingleLeftTrigger1": "Gachette Gauche 1",
"GamepadSingleRightTrigger1": "Right Trigger 1", "GamepadSingleRightTrigger1": "Gachette Droite 1",
"StickLeft": "Left Stick", "StickLeft": "Joystick Gauche",
"StickRight": "Right Stick", "StickRight": "Joystick Droite",
"UserProfilesSelectedUserProfile": "Profil utilisateur sélectionné :", "UserProfilesSelectedUserProfile": "Profil utilisateur sélectionné :",
"UserProfilesSaveProfileName": "Enregistrer le nom du profil", "UserProfilesSaveProfileName": "Enregistrer le nom du profil",
"UserProfilesChangeProfileImage": "Changer l'image du profil", "UserProfilesChangeProfileImage": "Changer l'image du profil",
@ -403,8 +411,9 @@
"MenuBarFileToolsHideUi": "Masquer l'interface utilisateur", "MenuBarFileToolsHideUi": "Masquer l'interface utilisateur",
"GameListContextMenuRunApplication": "Démarrer l'application", "GameListContextMenuRunApplication": "Démarrer l'application",
"GameListContextMenuToggleFavorite": "Ajouter/Retirer des favoris", "GameListContextMenuToggleFavorite": "Ajouter/Retirer des favoris",
"GameListContextMenuToggleFavoriteToolTip": "Activer/désactiver le statut favori du jeu", "GameListContextMenuToggleFavoriteToolTip": "Définis un jeu comme faisant parti des favoris ou non",
"SettingsTabGeneralTheme": "Thème :", "SettingsTabGeneralTheme": "Thème :",
"SettingsTabGeneralThemeAuto": "Auto",
"SettingsTabGeneralThemeDark": "Sombre", "SettingsTabGeneralThemeDark": "Sombre",
"SettingsTabGeneralThemeLight": "Clair", "SettingsTabGeneralThemeLight": "Clair",
"ControllerSettingsConfigureGeneral": "Configurer", "ControllerSettingsConfigureGeneral": "Configurer",
@ -443,7 +452,7 @@
"DialogUpdaterNoInternetMessage": "Vous n'êtes pas connecté à Internet !", "DialogUpdaterNoInternetMessage": "Vous n'êtes pas connecté à Internet !",
"DialogUpdaterNoInternetSubMessage": "Veuillez vérifier que vous disposez d'une connexion Internet fonctionnelle !", "DialogUpdaterNoInternetSubMessage": "Veuillez vérifier que vous disposez d'une connexion Internet fonctionnelle !",
"DialogUpdaterDirtyBuildMessage": "Vous ne pouvez pas mettre à jour une version Dirty de Ryujinx !", "DialogUpdaterDirtyBuildMessage": "Vous ne pouvez pas mettre à jour une version Dirty de Ryujinx !",
"DialogUpdaterDirtyBuildSubMessage": "Veuillez télécharger Ryujinx sur https://https://github.com/GreemDev/Ryujinx/releases/ si vous recherchez une version prise en charge.", "DialogUpdaterDirtyBuildSubMessage": "Veuillez télécharger Ryujinx sur https://github.com/GreemDev/Ryujinx/releases/ si vous recherchez une version prise en charge.",
"DialogRestartRequiredMessage": "Redémarrage requis", "DialogRestartRequiredMessage": "Redémarrage requis",
"DialogThemeRestartMessage": "Le thème a été enregistré. Un redémarrage est requis pour appliquer le thème.", "DialogThemeRestartMessage": "Le thème a été enregistré. Un redémarrage est requis pour appliquer le thème.",
"DialogThemeRestartSubMessage": "Voulez-vous redémarrer", "DialogThemeRestartSubMessage": "Voulez-vous redémarrer",
@ -456,14 +465,14 @@
"DialogUninstallFileTypesSuccessMessage": "Types de fichiers désinstallés avec succès!", "DialogUninstallFileTypesSuccessMessage": "Types de fichiers désinstallés avec succès!",
"DialogUninstallFileTypesErrorMessage": "Échec de la désinstallation des types de fichiers.", "DialogUninstallFileTypesErrorMessage": "Échec de la désinstallation des types de fichiers.",
"DialogOpenSettingsWindowLabel": "Ouvrir la fenêtre de configuration", "DialogOpenSettingsWindowLabel": "Ouvrir la fenêtre de configuration",
"DialogControllerAppletTitle": "Controller Applet", "DialogControllerAppletTitle": "Programme Manette",
"DialogMessageDialogErrorExceptionMessage": "Erreur lors de l'affichage de la boîte de dialogue : {0}", "DialogMessageDialogErrorExceptionMessage": "Erreur lors de l'affichage de la boîte de dialogue : {0}",
"DialogSoftwareKeyboardErrorExceptionMessage": "Erreur lors de l'affichage du clavier logiciel: {0}", "DialogSoftwareKeyboardErrorExceptionMessage": "Erreur lors de l'affichage du clavier logiciel: {0}",
"DialogErrorAppletErrorExceptionMessage": "Erreur lors de l'affichage de la boîte de dialogue ErrorApplet: {0}", "DialogErrorAppletErrorExceptionMessage": "Erreur lors de l'affichage de la boîte de dialogue ErrorApplet: {0}",
"DialogUserErrorDialogMessage": "{0}: {1}", "DialogUserErrorDialogMessage": "{0}: {1}",
"DialogUserErrorDialogInfoMessage": "\nPour plus d'informations sur la manière de corriger cette erreur, suivez notre Guide d'Installation.", "DialogUserErrorDialogInfoMessage": "\nPour plus d'informations sur la manière de corriger cette erreur, suivez notre Guide d'Installation.",
"DialogUserErrorDialogTitle": "Erreur Ryujinx ({0})", "DialogUserErrorDialogTitle": "Erreur Ryujinx ({0})",
"DialogAmiiboApiTitle": "Amiibo API", "DialogAmiiboApiTitle": "API Amiibo",
"DialogAmiiboApiFailFetchMessage": "Une erreur est survenue lors de la récupération des informations de l'API.", "DialogAmiiboApiFailFetchMessage": "Une erreur est survenue lors de la récupération des informations de l'API.",
"DialogAmiiboApiConnectErrorMessage": "Impossible de se connecter au serveur API Amiibo. Le service est peut-être hors service ou vous devriez peut-être vérifier que votre connexion internet est connectée.", "DialogAmiiboApiConnectErrorMessage": "Impossible de se connecter au serveur API Amiibo. Le service est peut-être hors service ou vous devriez peut-être vérifier que votre connexion internet est connectée.",
"DialogProfileInvalidProfileErrorMessage": "Le profil {0} est incompatible avec le système de configuration de manette actuel.", "DialogProfileInvalidProfileErrorMessage": "Le profil {0} est incompatible avec le système de configuration de manette actuel.",
@ -489,7 +498,7 @@
"DialogUserProfileUnsavedChangesTitle": "Avertissement - Modifications non enregistrées", "DialogUserProfileUnsavedChangesTitle": "Avertissement - Modifications non enregistrées",
"DialogUserProfileUnsavedChangesMessage": "Vous avez effectué des modifications sur ce profil d'utilisateur qui n'ont pas été enregistrées.", "DialogUserProfileUnsavedChangesMessage": "Vous avez effectué des modifications sur ce profil d'utilisateur qui n'ont pas été enregistrées.",
"DialogUserProfileUnsavedChangesSubMessage": "Voulez-vous annuler les modifications ?", "DialogUserProfileUnsavedChangesSubMessage": "Voulez-vous annuler les modifications ?",
"DialogControllerSettingsModifiedConfirmMessage": "Les paramètres actuels du contrôleur ont été mis à jour.", "DialogControllerSettingsModifiedConfirmMessage": "Les paramètres actuels de la manette ont été mis à jour.",
"DialogControllerSettingsModifiedConfirmSubMessage": "Voulez-vous sauvegarder ?", "DialogControllerSettingsModifiedConfirmSubMessage": "Voulez-vous sauvegarder ?",
"DialogLoadFileErrorMessage": "{0}. Fichier erroné : {1}", "DialogLoadFileErrorMessage": "{0}. Fichier erroné : {1}",
"DialogModAlreadyExistsMessage": "Le mod existe déjà", "DialogModAlreadyExistsMessage": "Le mod existe déjà",
@ -555,6 +564,9 @@
"AddGameDirBoxTooltip": "Entrez un répertoire de jeux à ajouter à la liste", "AddGameDirBoxTooltip": "Entrez un répertoire de jeux à ajouter à la liste",
"AddGameDirTooltip": "Ajouter un répertoire de jeux à la liste", "AddGameDirTooltip": "Ajouter un répertoire de jeux à la liste",
"RemoveGameDirTooltip": "Supprimer le répertoire de jeu sélectionné", "RemoveGameDirTooltip": "Supprimer le répertoire de jeu sélectionné",
"AddAutoloadDirBoxTooltip": "Entrez un répertoire de mises à jour/DLC à ajouter à la liste",
"AddAutoloadDirTooltip": "Ajouter un répertoire de mises à jour/DLC à la liste",
"RemoveAutoloadDirTooltip": "Supprimer le répertoire de mises à jour/DLC sélectionné",
"CustomThemeCheckTooltip": "Utilisez un thème personnalisé Avalonia pour modifier l'apparence des menus de l'émulateur", "CustomThemeCheckTooltip": "Utilisez un thème personnalisé Avalonia pour modifier l'apparence des menus de l'émulateur",
"CustomThemePathTooltip": "Chemin vers le thème personnalisé de l'interface utilisateur", "CustomThemePathTooltip": "Chemin vers le thème personnalisé de l'interface utilisateur",
"CustomThemeBrowseTooltip": "Parcourir vers un thème personnalisé pour l'interface utilisateur", "CustomThemeBrowseTooltip": "Parcourir vers un thème personnalisé pour l'interface utilisateur",
@ -567,25 +579,25 @@
"TimeTooltip": "Changer l'heure du système", "TimeTooltip": "Changer l'heure du système",
"VSyncToggleTooltip": "La synchronisation verticale de la console émulée. Essentiellement un limiteur de trame pour la majorité des jeux ; le désactiver peut entraîner un fonctionnement plus rapide des jeux ou prolonger ou bloquer les écrans de chargement.\n\nPeut être activé ou désactivé en jeu avec un raccourci clavier de votre choix (F1 par défaut). Nous recommandons de le faire si vous envisagez de le désactiver.\n\nLaissez activé si vous n'êtes pas sûr.", "VSyncToggleTooltip": "La synchronisation verticale de la console émulée. Essentiellement un limiteur de trame pour la majorité des jeux ; le désactiver peut entraîner un fonctionnement plus rapide des jeux ou prolonger ou bloquer les écrans de chargement.\n\nPeut être activé ou désactivé en jeu avec un raccourci clavier de votre choix (F1 par défaut). Nous recommandons de le faire si vous envisagez de le désactiver.\n\nLaissez activé si vous n'êtes pas sûr.",
"PptcToggleTooltip": "Sauvegarde les fonctions JIT afin qu'elles n'aient pas besoin d'être à chaque fois recompiler lorsque le jeu se charge.\n\nRéduit les lags et accélère considérablement le temps de chargement après le premier lancement d'un jeu.\n\nLaissez par défaut si vous n'êtes pas sûr.", "PptcToggleTooltip": "Sauvegarde les fonctions JIT afin qu'elles n'aient pas besoin d'être à chaque fois recompiler lorsque le jeu se charge.\n\nRéduit les lags et accélère considérablement le temps de chargement après le premier lancement d'un jeu.\n\nLaissez par défaut si vous n'êtes pas sûr.",
"LowPowerPptcToggleTooltip": "Load the PPTC using a third of the amount of cores.", "LowPowerPptcToggleTooltip": "Charger le PPTC en utilisant un tiers des coeurs.",
"FsIntegrityToggleTooltip": "Vérifie si des fichiers sont corrompus lors du lancement d'un jeu, et si des fichiers corrompus sont détectés, affiche une erreur de hachage dans la console.\n\nN'a aucun impact sur les performances et est destiné à aider le dépannage.\n\nLaissez activer en cas d'incertitude.", "FsIntegrityToggleTooltip": "Vérifie si des fichiers sont corrompus lors du lancement d'un jeu, et si des fichiers corrompus sont détectés, affiche une erreur de hachage dans la console.\n\nN'a aucun impact sur les performances et est destiné à aider le dépannage.\n\nLaissez activé en cas d'incertitude.",
"AudioBackendTooltip": "Modifie le backend utilisé pour donnée un rendu audio.\n\nSDL2 est préféré, tandis que OpenAL et SoundIO sont utilisés comme backend secondaire. Le backend Dummy (Factice) ne rends aucun son.\n\nLaissez sur SDL2 si vous n'êtes pas sûr.", "AudioBackendTooltip": "Modifie le backend utilisé pour donnée un rendu audio.\n\nSDL2 est recommandé, tandis que OpenAL et SoundIO sont utilisés comme backend secondaire. Le backend Dummy (Désactivé) ne rend aucun son.\n\nLaissez sur SDL2 si vous n'êtes pas sûr.",
"MemoryManagerTooltip": "Change la façon dont la mémoire émulée est mappée et utiliser. Cela affecte grandement les performances du processeur.\n\nRéglez sur Host Uncheked en cas d'incertitude.", "MemoryManagerTooltip": "Change la façon dont la mémoire émulée est mappée et utilisée. Cela affecte grandement les performances du processeur.\n\nRéglez sur Host Uncheked en cas d'incertitude.",
"MemoryManagerSoftwareTooltip": "Utilisez une table logicielle pour la traduction d'adresses. La plus grande précision est fournie, mais les performances en seront impacter.", "MemoryManagerSoftwareTooltip": "Utilisez une table logicielle pour la traduction d'adresses. La plus grande précision est fournie, mais les performances en seront impactées.",
"MemoryManagerHostTooltip": "Mappez directement la mémoire dans l'espace d'adresses de l'hôte. Compilation et exécution JIT beaucoup plus rapides.", "MemoryManagerHostTooltip": "Mappez directement la mémoire dans l'espace d'adresses de l'hôte. Compilation et exécution JIT beaucoup plus rapides.",
"MemoryManagerUnsafeTooltip": "Mapper directement la mémoire dans la carte, mais ne pas masquer l'adresse dans l'espace d'adressage du client avant l'accès. Plus rapide, mais la sécurité sera négliger. L'application peut accéder à la mémoire depuis n'importe où dans Ryujinx, donc exécutez uniquement les programmes en qui vous avez confiance avec ce mode.", "MemoryManagerUnsafeTooltip": "Mapper directement la mémoire dans la carte, mais ne pas masquer l'adresse dans l'espace d'adressage du client avant l'accès. Plus rapide, mais la sécurité sera négligée. L'application peut accéder à la mémoire depuis n'importe où dans Ryujinx, donc exécutez uniquement les programmes en qui vous avez confiance avec ce mode.",
"UseHypervisorTooltip": "Utiliser l'Hyperviseur au lieu du JIT. Améliore considérablement les performances lorsqu'il est disponible, mais peut être instable dans son état actuel.", "UseHypervisorTooltip": "Utiliser l'Hyperviseur au lieu du JIT. Améliore considérablement les performances lorsqu'il est disponible, mais peut être instable dans son état actuel.",
"DRamTooltip": "Utilise une disposition alternative de la mémoire pour imiter le kit de développeur de la Switch.\n\nActiver cette option uniquement pour les packs de textures 4k ou les mods à résolution 4k.\nN'améliore pas les performances, cause des crashs dans certains jeux si activer.\n\nLaissez Désactiver en cas d'incertitude.", "DRamTooltip": "Utilise une disposition alternative de la mémoire avec 8GiO de DRAM pour imiter le kit de développeur de la Switch.\n\nActivez cette option pour les packs de textures 4k ou les mods à résolution 4k.\nN'améliore pas les performances.\n\nLaissez désactivé en cas d'incertitude.",
"IgnoreMissingServicesTooltip": "Ignore les services Horizon OS non-intégré. Cela peut aider à contourner les plantages lors du démarrage de certains jeux.\n\nActivez-le en cas d'incertitude.", "IgnoreMissingServicesTooltip": "Ignore les services Horizon OS non-intégré. Cela peut aider à contourner les plantages lors du démarrage de certains jeux.\n\nActivez-le en cas d'incertitude.",
"GraphicsBackendThreadingTooltip": "Exécute des commandes du backend graphiques sur un second thread.\n\nAccélère la compilation des shaders, réduit les crashs et les lags, améliore les performances sur les pilotes GPU sans support de multithreading. Légère augementation des performances sur les pilotes avec multithreading intégrer.\n\nRéglez sur Auto en cas d'incertitude.", "GraphicsBackendThreadingTooltip": "Exécute des commandes du backend graphiques sur un second thread.\n\nAccélère la compilation des shaders, réduit les crashs et les lags, améliore les performances sur les pilotes GPU sans support de multithreading. Légère augementation des performances sur les pilotes avec multithreading intégrer.\n\nRéglez sur Auto en cas d'incertitude.",
"GalThreadingTooltip": "Exécute des commandes du backend graphiques sur un second thread.\n\nAccélère la compilation des shaders, réduit les crashs et les lags, améliore les performances sur les pilotes GPU sans support de multithreading. Légère augementation des performances sur les pilotes avec multithreading intégrer.\n\nRéglez sur Auto en cas d'incertitude.", "GalThreadingTooltip": "Exécute des commandes du backend graphiques sur un second thread.\n\nAccélère la compilation des shaders, réduit les crashs et les lags, améliore les performances sur les pilotes GPU sans support de multithreading. Légère augementation des performances sur les pilotes avec multithreading intégrer.\n\nRéglez sur Auto en cas d'incertitude.",
"ShaderCacheToggleTooltip": "Enregistre un cache de shaders sur le disque dur, réduit le lag lors de multiples exécutions.\n\nLaissez Activer si vous n'êtes pas sûr.", "ShaderCacheToggleTooltip": "Enregistre un cache de shaders sur le disque dur, réduit le lag lors de multiples exécutions.\n\nLaissez activé si vous n'êtes pas sûr.",
"ResolutionScaleTooltip": "Multiplie la résolution de rendu du jeu.\n\nQuelques jeux peuvent ne pas fonctionner avec cette fonctionnalité et sembler pixelisés même lorsque la résolution est augmentée ; pour ces jeux, vous devrez peut-être trouver des mods qui suppriment l'anti-aliasing ou qui augmentent leur résolution de rendu interne. Pour utiliser cette dernière option, vous voudrez probablement sélectionner \"Native\".\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres de côté et expérimenter jusqu'à ce que vous trouviez l'apparence souhaitée pour un jeu.\n\nGardez à l'esprit que 4x est excessif pour pratiquement n'importe quelle configuration.", "ResolutionScaleTooltip": "Multiplie la résolution de rendu du jeu.\n\nQuelques jeux peuvent ne pas fonctionner avec cette fonctionnalité et sembler pixelisés même lorsque la résolution est augmentée ; pour ces jeux, vous devrez peut-être trouver des mods qui suppriment l'anti-aliasing ou qui augmentent leur résolution de rendu interne. Pour utiliser cette dernière option, vous voudrez probablement sélectionner \"Natif\".\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres sur le côté et expérimenter jusqu'à ce que vous trouviez l'apparence souhaitée pour un jeu.\n\nGardez à l'esprit que 4x est excessif pour pratiquement n'importe quelle configuration.",
"ResolutionScaleEntryTooltip": "Échelle de résolution à virgule flottante, telle que : 1.5. Les échelles non intégrales sont plus susceptibles de causer des problèmes ou des crashs.", "ResolutionScaleEntryTooltip": "Échelle de résolution à virgule, telle que : 1.5. Les échelles non intégrales sont plus susceptibles de causer des problèmes ou des crashs.",
"AnisotropyTooltip": "Niveau de filtrage anisotrope. Réglez sur Auto pour utiliser la valeur demandée par le jeu.", "AnisotropyTooltip": "Niveau de filtrage anisotrope. Réglez sur Auto pour utiliser la valeur demandée par le jeu.",
"AspectRatioTooltip": "Rapport d'aspect appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod de rapport d'aspect pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", "AspectRatioTooltip": "Format d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.",
"ShaderDumpPathTooltip": "Chemin de copie des Shaders Graphiques", "ShaderDumpPathTooltip": "Chemin de copie des Shaders",
"FileLogTooltip": "Sauver le journal de la console dans un fichier journal sur le disque. Cela n'affecte pas les performances.", "FileLogTooltip": "Sauvegarde le journal de la console dans un fichier journal sur le disque. Cela n'affecte pas les performances.",
"StubLogTooltip": "Affiche les messages de log dans la console. N'affecte pas les performances.", "StubLogTooltip": "Affiche les messages de log dans la console. N'affecte pas les performances.",
"InfoLogTooltip": "Affiche les messages de log d'informations dans la console. N'affecte pas les performances.", "InfoLogTooltip": "Affiche les messages de log d'informations dans la console. N'affecte pas les performances.",
"WarnLogTooltip": "Affiche les messages d'avertissement dans la console. N'affecte pas les performances.", "WarnLogTooltip": "Affiche les messages d'avertissement dans la console. N'affecte pas les performances.",
@ -594,11 +606,13 @@
"GuestLogTooltip": "Affiche les messages de log des invités dans la console. N'affecte pas les performances.", "GuestLogTooltip": "Affiche les messages de log des invités dans la console. N'affecte pas les performances.",
"FileAccessLogTooltip": "Affiche les messages de log d'accès aux fichiers dans la console.", "FileAccessLogTooltip": "Affiche les messages de log d'accès aux fichiers dans la console.",
"FSAccessLogModeTooltip": "Active la sortie du journal d'accès FS de la console. Les modes possibles sont 0-3", "FSAccessLogModeTooltip": "Active la sortie du journal d'accès FS de la console. Les modes possibles sont 0-3",
"DeveloperOptionTooltip": "Utiliser avec précaution", "DeveloperOptionTooltip": "À utiliser avec précaution",
"OpenGlLogLevel": "Nécessite l'activation des niveaux de journalisation appropriés", "OpenGlLogLevel": "Nécessite l'activation des niveaux de journalisation appropriés",
"DebugLogTooltip": "Affiche les messages de débogage dans la console.\n\nN'utilisez ceci que si un membre du personnel le demande, car cela rendra les logs difficiles à lire et réduit les performances de l'émulateur.", "DebugLogTooltip": "Affiche les messages de débogage dans la console.\n\nN'utilisez ceci que si un développeur le demande, car cela rendra les logs difficiles à lire et réduit les performances de l'émulateur.",
"LoadApplicationFileTooltip": "Ouvrir un explorateur de fichiers pour choisir un fichier compatible Switch à charger", "LoadApplicationFileTooltip": "Ouvre l'explorateur de fichiers pour choisir un fichier compatible Switch à charger",
"LoadApplicationFolderTooltip": "Ouvrir un explorateur de fichiers pour choisir une application Switch compatible et décompressée à charger", "LoadApplicationFolderTooltip": "Ouvre l'explorateur de fichiers pour choisir une application Switch compatible et décompressée à charger",
"LoadDlcFromFolderTooltip": "Ouvre l'explorateur de fichier pour choisir un ou plusieurs dossiers duquel charger les DLC",
"LoadTitleUpdatesFromFolderTooltip": "Ouvre l'explorateur de fichier pour choisir un ou plusieurs dossiers duquel charger les mises à jour",
"OpenRyujinxFolderTooltip": "Ouvrir le dossier du système de fichiers Ryujinx", "OpenRyujinxFolderTooltip": "Ouvrir le dossier du système de fichiers Ryujinx",
"OpenRyujinxLogsTooltip": "Ouvre le dossier dans lequel les journaux sont écrits", "OpenRyujinxLogsTooltip": "Ouvre le dossier dans lequel les journaux sont écrits",
"ExitTooltip": "Quitter Ryujinx", "ExitTooltip": "Quitter Ryujinx",
@ -609,14 +623,14 @@
"OpenAboutTooltip": "Ouvrir la fenêtre À Propos", "OpenAboutTooltip": "Ouvrir la fenêtre À Propos",
"GridSize": "Taille de la grille", "GridSize": "Taille de la grille",
"GridSizeTooltip": "Modifier la taille des éléments de la grille", "GridSizeTooltip": "Modifier la taille des éléments de la grille",
"SettingsTabSystemSystemLanguageBrazilianPortuguese": "Portugais brésilien", "SettingsTabSystemSystemLanguageBrazilianPortuguese": "Portugais Brésilien",
"AboutRyujinxContributorsButtonHeader": "Voir tous les contributeurs", "AboutRyujinxContributorsButtonHeader": "Voir tous les contributeurs",
"SettingsTabSystemAudioVolume": "Volume :", "SettingsTabSystemAudioVolume": "Volume :",
"AudioVolumeTooltip": "Modifier le volume audio", "AudioVolumeTooltip": "Modifier le volume audio",
"SettingsTabSystemEnableInternetAccess": "Accès Internet Invité/Mode LAN", "SettingsTabSystemEnableInternetAccess": "Accès Internet Invité/Mode LAN",
"EnableInternetAccessTooltip": "Permet à l'application émulée de se connecter à Internet.\n\nLes jeux avec un mode LAN peuvent se connecter les uns aux autres lorsque cette option est cochée et que les systèmes sont connectés au même point d'accès. Cela inclut également les vrais consoles.\n\nCette option n'autorise PAS la connexion aux serveurs Nintendo. Elle peut faire planter certains jeux qui essaient de se connecter à l'Internet.\n\nLaissez DÉSACTIVÉ si vous n'êtes pas sûr.", "EnableInternetAccessTooltip": "Permet à l'application émulée de se connecter à Internet.\n\nLes jeux avec un mode LAN peuvent se connecter les uns aux autres lorsque cette option est cochée et que les systèmes sont connectés au même point d'accès. Cela inclut également les vrais consoles.\n\nCette option n'autorise PAS la connexion aux serveurs Nintendo. Elle peut faire planter certains jeux qui essaient de se connecter à l'Internet.\n\nLaissez DÉSACTIVÉ si vous n'êtes pas sûr.",
"GameListContextMenuManageCheatToolTip": "Gérer la triche", "GameListContextMenuManageCheatToolTip": "Gérer les cheats",
"GameListContextMenuManageCheat": "Gérer la triche", "GameListContextMenuManageCheat": "Gérer les cheats",
"GameListContextMenuManageModToolTip": "Gérer les mods", "GameListContextMenuManageModToolTip": "Gérer les mods",
"GameListContextMenuManageMod": "Gérer les mods", "GameListContextMenuManageMod": "Gérer les mods",
"ControllerSettingsStickRange": "Intervalle :", "ControllerSettingsStickRange": "Intervalle :",
@ -629,12 +643,12 @@
"SettingsTabCpuCache": "Cache CPU", "SettingsTabCpuCache": "Cache CPU",
"SettingsTabCpuMemory": "Mémoire CPU", "SettingsTabCpuMemory": "Mémoire CPU",
"DialogUpdaterFlatpakNotSupportedMessage": "Merci de mettre à jour Ryujinx via FlatHub.", "DialogUpdaterFlatpakNotSupportedMessage": "Merci de mettre à jour Ryujinx via FlatHub.",
"UpdaterDisabledWarningTitle": "Mise à jour désactivée !", "UpdaterDisabledWarningTitle": "Mises à jour désactivées !",
"ControllerSettingsRotate90": "Faire pivoter de 90° à droite", "ControllerSettingsRotate90": "Faire pivoter de 90° à droite",
"IconSize": "Taille d'icône", "IconSize": "Taille d'icône",
"IconSizeTooltip": "Changer la taille des icônes de jeu", "IconSizeTooltip": "Changer la taille des icônes de jeu",
"MenuBarOptionsShowConsole": "Afficher la console", "MenuBarOptionsShowConsole": "Afficher la console",
"ShaderCachePurgeError": "Erreur lors de la purge du cache du Shader à {0}: {1}", "ShaderCachePurgeError": "Erreur lors de la purge des Shaders à {0}: {1}",
"UserErrorNoKeys": "Clés introuvables", "UserErrorNoKeys": "Clés introuvables",
"UserErrorNoFirmware": "Firmware introuvable", "UserErrorNoFirmware": "Firmware introuvable",
"UserErrorFirmwareParsingFailed": "Erreur d'analyse du firmware", "UserErrorFirmwareParsingFailed": "Erreur d'analyse du firmware",
@ -642,7 +656,7 @@
"UserErrorUnknown": "Erreur inconnue", "UserErrorUnknown": "Erreur inconnue",
"UserErrorUndefined": "Erreur non définie", "UserErrorUndefined": "Erreur non définie",
"UserErrorNoKeysDescription": "Ryujinx n'a pas pu trouver votre fichier 'prod.keys'", "UserErrorNoKeysDescription": "Ryujinx n'a pas pu trouver votre fichier 'prod.keys'",
"UserErrorNoFirmwareDescription": "Ryujinx n'a pas trouvé de firmwares installés", "UserErrorNoFirmwareDescription": "Ryujinx n'a pas trouvé de firmware installé",
"UserErrorFirmwareParsingFailedDescription": "Ryujinx n'a pas pu analyser le firmware fourni. Cela est généralement dû à des clés obsolètes.", "UserErrorFirmwareParsingFailedDescription": "Ryujinx n'a pas pu analyser le firmware fourni. Cela est généralement dû à des clés obsolètes.",
"UserErrorApplicationNotFoundDescription": "Ryujinx n'a pas pu trouver une application valide dans le chemin indiqué.", "UserErrorApplicationNotFoundDescription": "Ryujinx n'a pas pu trouver une application valide dans le chemin indiqué.",
"UserErrorUnknownDescription": "Une erreur inconnue est survenue !", "UserErrorUnknownDescription": "Une erreur inconnue est survenue !",
@ -650,6 +664,8 @@
"OpenSetupGuideMessage": "Ouvrir le guide d'installation", "OpenSetupGuideMessage": "Ouvrir le guide d'installation",
"NoUpdate": "Aucune mise à jour", "NoUpdate": "Aucune mise à jour",
"TitleUpdateVersionLabel": "Version {0}", "TitleUpdateVersionLabel": "Version {0}",
"TitleBundledUpdateVersionLabel": "Inclus avec le jeu: Version {0}",
"TitleBundledDlcLabel": "Inclus avec le jeu:",
"RyujinxInfo": "Ryujinx - Info", "RyujinxInfo": "Ryujinx - Info",
"RyujinxConfirm": "Ryujinx - Confirmation", "RyujinxConfirm": "Ryujinx - Confirmation",
"FileDialogAllTypes": "Tous les types", "FileDialogAllTypes": "Tous les types",
@ -689,8 +705,8 @@
"SettingsTabHotkeysScreenshotHotkey": "Capture d'écran :", "SettingsTabHotkeysScreenshotHotkey": "Capture d'écran :",
"SettingsTabHotkeysShowUiHotkey": "Afficher UI :", "SettingsTabHotkeysShowUiHotkey": "Afficher UI :",
"SettingsTabHotkeysPauseHotkey": "Suspendre :", "SettingsTabHotkeysPauseHotkey": "Suspendre :",
"SettingsTabHotkeysToggleMuteHotkey": "Muet : ", "SettingsTabHotkeysToggleMuteHotkey": "Couper le son :",
"ControllerMotionTitle": "Réglages du contrôle par mouvement", "ControllerMotionTitle": "Réglages des contrôles par mouvement",
"ControllerRumbleTitle": "Paramètres de vibration", "ControllerRumbleTitle": "Paramètres de vibration",
"SettingsSelectThemeFileDialogTitle": "Sélectionner un fichier de thème", "SettingsSelectThemeFileDialogTitle": "Sélectionner un fichier de thème",
"SettingsXamlThemeFile": "Fichier thème Xaml", "SettingsXamlThemeFile": "Fichier thème Xaml",
@ -703,13 +719,20 @@
"SelectUpdateDialogTitle": "Sélectionner les fichiers de mise à jour", "SelectUpdateDialogTitle": "Sélectionner les fichiers de mise à jour",
"SelectModDialogTitle": "Sélectionner le répertoire du mod", "SelectModDialogTitle": "Sélectionner le répertoire du mod",
"UserProfileWindowTitle": "Gestionnaire de profils utilisateur", "UserProfileWindowTitle": "Gestionnaire de profils utilisateur",
"CheatWindowTitle": "Gestionnaire de triches", "CheatWindowTitle": "Gestionnaire de cheats",
"DlcWindowTitle": "Gérer le contenu téléchargeable pour {0} ({1})", "DlcWindowTitle": "Gérer le contenu téléchargeable pour {0} ({1})",
"ModWindowTitle": "Gérer les mods pour {0} ({1})", "ModWindowTitle": "Gérer les mods pour {0} ({1})",
"UpdateWindowTitle": "Gestionnaire de mises à jour", "UpdateWindowTitle": "Gestionnaire de mises à jour",
"UpdateWindowUpdateAddedMessage": "{0} nouvelle(s) mise(s) à jour ajoutée(s)",
"UpdateWindowBundledContentNotice": "Les mises à jour incluses avec le jeu ne peuvent pas être supprimées mais peuvent être désactivées.",
"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.",
"DlcWindowHeading": "{0} Contenu(s) téléchargeable(s)", "DlcWindowHeading": "{0} Contenu(s) téléchargeable(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)",
"AutoloadUpdateAddedMessage": "{0} nouvelle(s) mise(s) à jour ajoutée(s)",
"AutoloadDlcAndUpdateAddedMessage": "{0} nouveau(x) contenu(s) téléchargeable(s) et {1} nouvelle(s) mise(s) à jour ajouté(s)",
"ModWindowHeading": "{0} Mod(s)", "ModWindowHeading": "{0} Mod(s)",
"UserProfilesEditProfile": "Éditer la sélection", "UserProfilesEditProfile": "Éditer la sélection",
"Cancel": "Annuler", "Cancel": "Annuler",
@ -737,7 +760,7 @@
"SettingsTabHotkeysVolumeUpHotkey": "Augmenter le volume :", "SettingsTabHotkeysVolumeUpHotkey": "Augmenter le volume :",
"SettingsTabHotkeysVolumeDownHotkey": "Diminuer le volume :", "SettingsTabHotkeysVolumeDownHotkey": "Diminuer le volume :",
"SettingsEnableMacroHLE": "Activer les macros HLE", "SettingsEnableMacroHLE": "Activer les macros HLE",
"SettingsEnableMacroHLETooltip": "Émulation de haut niveau du code de Macro GPU.\n\nAméliore les performances, mais peut causer des artefacts graphiques dans certains jeux.\n\nLaissez ACTIVER si vous n'êtes pas sûr.", "SettingsEnableMacroHLETooltip": "Émulation de haut niveau du code de Macro GPU.\n\nAméliore les performances, mais peut causer des artefacts graphiques dans certains jeux.\n\nLaissez ACTIVÉ si vous n'êtes pas sûr.",
"SettingsEnableColorSpacePassthrough": "Traversée de l'espace colorimétrique", "SettingsEnableColorSpacePassthrough": "Traversée de l'espace colorimétrique",
"SettingsEnableColorSpacePassthroughTooltip": "Dirige l'interface graphique Vulkan pour qu'il transmette les informations de couleur sans spécifier d'espace colorimétrique. Pour les utilisateurs possédant des écrans Wide Color Gamut, cela peut entraîner des couleurs plus vives, au détriment de l'exactitude des couleurs.", "SettingsEnableColorSpacePassthroughTooltip": "Dirige l'interface graphique Vulkan pour qu'il transmette les informations de couleur sans spécifier d'espace colorimétrique. Pour les utilisateurs possédant des écrans Wide Color Gamut, cela peut entraîner des couleurs plus vives, au détriment de l'exactitude des couleurs.",
"VolumeShort": "Vol", "VolumeShort": "Vol",
@ -749,17 +772,18 @@
"Name": "Nom ", "Name": "Nom ",
"Size": "Taille", "Size": "Taille",
"Search": "Rechercher", "Search": "Rechercher",
"UserProfilesRecoverLostAccounts": "Récupérer les comptes perdus", "UserProfilesRecoverLostAccounts": "Récupérer les profils perdus",
"Recover": "Récupérer", "Recover": "Récupérer",
"UserProfilesRecoverHeading": "Des sauvegardes ont été trouvées pour les comptes suivants", "UserProfilesRecoverHeading": "Des sauvegardes ont été trouvées pour les profils suivants",
"UserProfilesRecoverEmptyList": "Aucun profil à restaurer", "UserProfilesRecoverEmptyList": "Aucun profil à restaurer",
"GraphicsAATooltip": "FXAA floute la plupart de l'image, tandis que SMAA tente de détecter les contours dentelés et de les lisser.\n\nIl n'est pas recommandé de l'utiliser en conjonction avec le filtre de mise à l'échelle FSR.\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres de côté et expérimenter jusqu'à ce que vous trouviez l'apparence souhaitée pour un jeu.\n\nLaissez sur NONE si vous n'êtes pas sûr.", "GraphicsAATooltip": "FXAA floute la plupart de l'image, tandis que SMAA tente de détecter les contours dentelés et de les lisser.\n\nIl n'est pas recommandé de l'utiliser en conjonction avec le filtre de mise à l'échelle FSR.\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres sur le côté et expérimenter jusqu'à ce que vous trouviez l'apparence souhaitée pour un jeu.\n\nLaissez sur AUCUN si vous n'êtes pas sûr.",
"GraphicsAALabel": "Anticrénelage :", "GraphicsAALabel": "Anticrénelage :",
"GraphicsScalingFilterLabel": "Filtre de mise à l'échelle :", "GraphicsScalingFilterLabel": "Filtre de mise à l'échelle :",
"GraphicsScalingFilterTooltip": "Choisissez le filtre de mise à l'échelle qui sera appliqué lors de l'utilisation de la mise à l'échelle de la résolution.\n\nLe filtre bilinéaire fonctionne bien pour les jeux en 3D et constitue une option par défaut sûre.\n\nLe filtre le plus proche est recommandé pour les jeux de pixel art.\n\nFSR 1.0 est simplement un filtre de netteté, non recommandé pour une utilisation avec FXAA ou SMAA.\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres de côté et expérimenter jusqu'à ce que vous trouviez l'aspect souhaité pour un jeu.\n\nLaissez sur BILINEAR si vous n'êtes pas sûr.", "GraphicsScalingFilterTooltip": "Choisissez le filtre de mise à l'échelle qui sera appliqué lors de l'utilisation de la mise à l'échelle de la résolution.\n\nLe filtre bilinéaire fonctionne bien pour les jeux en 3D et constitue une option par défaut sûre.\n\nLe filtre le plus proche est recommandé pour les jeux de pixel art.\n\nFSR 1.0 est simplement un filtre de netteté, non recommandé pour une utilisation avec FXAA ou SMAA.\n\nCette option peut être modifiée pendant qu'un jeu est en cours d'exécution en cliquant sur \"Appliquer\" ci-dessous ; vous pouvez simplement déplacer la fenêtre des paramètres de côté et expérimenter jusqu'à ce que vous trouviez l'aspect souhaité pour un jeu.\n\nLaissez sur BILINÉAIRE si vous n'êtes pas sûr.",
"GraphicsScalingFilterBilinear": "Bilinéaire", "GraphicsScalingFilterBilinear": "Bilinéaire",
"GraphicsScalingFilterNearest": "Le plus proche", "GraphicsScalingFilterNearest": "Le plus proche",
"GraphicsScalingFilterFsr": "FSR", "GraphicsScalingFilterFsr": "FSR",
"GraphicsScalingFilterArea": "Zone",
"GraphicsScalingFilterLevelLabel": "Niveau ", "GraphicsScalingFilterLevelLabel": "Niveau ",
"GraphicsScalingFilterLevelTooltip": "Définissez le niveau de netteté FSR 1.0. Plus élevé signifie plus net.", "GraphicsScalingFilterLevelTooltip": "Définissez le niveau de netteté FSR 1.0. Plus élevé signifie plus net.",
"SmaaLow": "SMAA Faible", "SmaaLow": "SMAA Faible",
@ -769,7 +793,7 @@
"UserEditorTitle": "Modifier Utilisateur", "UserEditorTitle": "Modifier Utilisateur",
"UserEditorTitleCreate": "Créer Utilisateur", "UserEditorTitleCreate": "Créer Utilisateur",
"SettingsTabNetworkInterface": "Interface Réseau :", "SettingsTabNetworkInterface": "Interface Réseau :",
"NetworkInterfaceTooltip": "L'interface réseau utilisée pour les fonctionnalités LAN/LDN.\n\nEn conjonction avec un VPN ou XLink Kai et un jeu prenant en charge le LAN, peut être utilisée pour simuler une connexion sur le même réseau via Internet.\n\nLaissez sur DEFAULT si vous n'êtes pas sûr.", "NetworkInterfaceTooltip": "L'interface réseau utilisée pour les fonctionnalités LAN/LDN.\n\nEn conjonction avec un VPN ou XLink Kai et un jeu prenant en charge le LAN, peut être utilisée pour simuler une connexion sur le même réseau via Internet.\n\nLaissez sur PAR DÉFAU T si vous n'êtes pas sûr.",
"NetworkInterfaceDefault": "Par défaut", "NetworkInterfaceDefault": "Par défaut",
"PackagingShaders": "Empaquetage des Shaders", "PackagingShaders": "Empaquetage des Shaders",
"AboutChangelogButton": "Voir le Changelog sur GitHub", "AboutChangelogButton": "Voir le Changelog sur GitHub",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "האצות", "SettingsTabSystemHacks": "האצות",
"SettingsTabSystemHacksNote": "עלול לגרום לאי יציבות", "SettingsTabSystemHacksNote": "עלול לגרום לאי יציבות",
"SettingsTabSystemExpandDramSize": "השתמש בפריסת זיכרון חלופית (נועד למפתחים)", "SettingsTabSystemDramSize": "השתמש בפריסת זיכרון חלופית (נועד למפתחים)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "התעלם משירותים חסרים", "SettingsTabSystemIgnoreMissingServices": "התעלם משירותים חסרים",
"SettingsTabGraphics": "גרפיקה", "SettingsTabGraphics": "גרפיקה",
"SettingsTabGraphicsAPI": "ממשק גראפי", "SettingsTabGraphicsAPI": "ממשק גראפי",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Espedienti", "SettingsTabSystemHacks": "Espedienti",
"SettingsTabSystemHacksNote": "Possono causare instabilità", "SettingsTabSystemHacksNote": "Possono causare instabilità",
"SettingsTabSystemExpandDramSize": "Usa layout di memoria alternativo (per sviluppatori)", "SettingsTabSystemDramSize": "Usa layout di memoria alternativo (per sviluppatori)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignora servizi mancanti", "SettingsTabSystemIgnoreMissingServices": "Ignora servizi mancanti",
"SettingsTabGraphics": "Grafica", "SettingsTabGraphics": "Grafica",
"SettingsTabGraphicsAPI": "API grafica", "SettingsTabGraphicsAPI": "API grafica",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "ハック", "SettingsTabSystemHacks": "ハック",
"SettingsTabSystemHacksNote": " (挙動が不安定になる可能性があります)", "SettingsTabSystemHacksNote": " (挙動が不安定になる可能性があります)",
"SettingsTabSystemExpandDramSize": "DRAMサイズを6GiBに拡大する", "SettingsTabSystemDramSize": "DRAMサイズ:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "未実装サービスを無視する", "SettingsTabSystemIgnoreMissingServices": "未実装サービスを無視する",
"SettingsTabGraphics": "グラフィックス", "SettingsTabGraphics": "グラフィックス",
"SettingsTabGraphicsAPI": "グラフィックスAPI", "SettingsTabGraphicsAPI": "グラフィックスAPI",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "해킹", "SettingsTabSystemHacks": "해킹",
"SettingsTabSystemHacksNote": "불안정성을 유발할 수 있음", "SettingsTabSystemHacksNote": "불안정성을 유발할 수 있음",
"SettingsTabSystemExpandDramSize": "대체 메모리 레이아웃 사용(개발자)", "SettingsTabSystemDramSize": "대체 메모리 레이아웃 사용(개발자)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "누락된 서비스 무시", "SettingsTabSystemIgnoreMissingServices": "누락된 서비스 무시",
"SettingsTabGraphics": "그래픽", "SettingsTabGraphics": "그래픽",
"SettingsTabGraphicsAPI": "그래픽 API", "SettingsTabGraphicsAPI": "그래픽 API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacki", "SettingsTabSystemHacks": "Hacki",
"SettingsTabSystemHacksNote": " (mogą powodować niestabilność)", "SettingsTabSystemHacksNote": " (mogą powodować niestabilność)",
"SettingsTabSystemExpandDramSize": "Użyj alternatywnego układu pamięci (Deweloperzy)", "SettingsTabSystemDramSize": "Użyj alternatywnego układu pamięci (Deweloperzy)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignoruj Brakujące Usługi", "SettingsTabSystemIgnoreMissingServices": "Ignoruj Brakujące Usługi",
"SettingsTabGraphics": "Grafika", "SettingsTabGraphics": "Grafika",
"SettingsTabGraphicsAPI": "Graficzne API", "SettingsTabGraphicsAPI": "Graficzne API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hacks", "SettingsTabSystemHacks": "Hacks",
"SettingsTabSystemHacksNote": " (Pode causar instabilidade)", "SettingsTabSystemHacksNote": " (Pode causar instabilidade)",
"SettingsTabSystemExpandDramSize": "Expandir memória para 6GiB", "SettingsTabSystemDramSize": "Tamanho da DRAM:",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ignorar serviços não implementados", "SettingsTabSystemIgnoreMissingServices": "Ignorar serviços não implementados",
"SettingsTabGraphics": "Gráficos", "SettingsTabGraphics": "Gráficos",
"SettingsTabGraphicsAPI": "API gráfica", "SettingsTabGraphicsAPI": "API gráfica",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Хаки", "SettingsTabSystemHacks": "Хаки",
"SettingsTabSystemHacksNote": "Возможна нестабильная работа", "SettingsTabSystemHacksNote": "Возможна нестабильная работа",
"SettingsTabSystemExpandDramSize": "Использовать альтернативный макет памяти (для разработчиков)", "SettingsTabSystemDramSize": "Использовать альтернативный макет памяти (для разработчиков)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Игнорировать отсутствующие службы", "SettingsTabSystemIgnoreMissingServices": "Игнорировать отсутствующие службы",
"SettingsTabGraphics": "Графика", "SettingsTabGraphics": "Графика",
"SettingsTabGraphicsAPI": "Графические API", "SettingsTabGraphicsAPI": "Графические API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "แฮ็ก", "SettingsTabSystemHacks": "แฮ็ก",
"SettingsTabSystemHacksNote": "อาจทำให้เกิดข้อผิดพลาดได้", "SettingsTabSystemHacksNote": "อาจทำให้เกิดข้อผิดพลาดได้",
"SettingsTabSystemExpandDramSize": "ใช้รูปแบบหน่วยความจำสำรอง (โหมดนักพัฒนา)", "SettingsTabSystemDramSize": "ใช้รูปแบบหน่วยความจำสำรอง (โหมดนักพัฒนา)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "ไม่สนใจบริการที่ขาดหายไป", "SettingsTabSystemIgnoreMissingServices": "ไม่สนใจบริการที่ขาดหายไป",
"SettingsTabGraphics": "กราฟิก", "SettingsTabGraphics": "กราฟิก",
"SettingsTabGraphicsAPI": "กราฟฟิก API", "SettingsTabGraphicsAPI": "กราฟฟิก API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Hack'ler", "SettingsTabSystemHacks": "Hack'ler",
"SettingsTabSystemHacksNote": " (dengesizlik oluşturabilir)", "SettingsTabSystemHacksNote": " (dengesizlik oluşturabilir)",
"SettingsTabSystemExpandDramSize": "Alternatif bellek düzeni kullan (Geliştirici)", "SettingsTabSystemDramSize": "Alternatif bellek düzeni kullan (Geliştirici)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Eksik Servisleri Görmezden Gel", "SettingsTabSystemIgnoreMissingServices": "Eksik Servisleri Görmezden Gel",
"SettingsTabGraphics": "Grafikler", "SettingsTabGraphics": "Grafikler",
"SettingsTabGraphicsAPI": "Grafikler API", "SettingsTabGraphicsAPI": "Grafikler API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "Хитрощі", "SettingsTabSystemHacks": "Хитрощі",
"SettingsTabSystemHacksNote": " (може викликати нестабільність)", "SettingsTabSystemHacksNote": " (може викликати нестабільність)",
"SettingsTabSystemExpandDramSize": "Використовувати альтернативне розташування пам'яті (розробники)", "SettingsTabSystemDramSize": "Використовувати альтернативне розташування пам'яті (розробники)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "Ігнорувати відсутні служби", "SettingsTabSystemIgnoreMissingServices": "Ігнорувати відсутні служби",
"SettingsTabGraphics": "Графіка", "SettingsTabGraphics": "Графіка",
"SettingsTabGraphicsAPI": "Графічний API", "SettingsTabGraphicsAPI": "Графічний API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "修改", "SettingsTabSystemHacks": "修改",
"SettingsTabSystemHacksNote": "会导致模拟器不稳定", "SettingsTabSystemHacksNote": "会导致模拟器不稳定",
"SettingsTabSystemExpandDramSize": "使用开发机的内存布局(开发人员使用)", "SettingsTabSystemDramSize": "使用开发机的内存布局(开发人员使用)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "忽略缺失的服务", "SettingsTabSystemIgnoreMissingServices": "忽略缺失的服务",
"SettingsTabGraphics": "图形", "SettingsTabGraphics": "图形",
"SettingsTabGraphicsAPI": "图形 API", "SettingsTabGraphicsAPI": "图形 API",

View File

@ -145,7 +145,11 @@
"SettingsTabSystemAudioBackendSDL2": "SDL2", "SettingsTabSystemAudioBackendSDL2": "SDL2",
"SettingsTabSystemHacks": "補釘修正", "SettingsTabSystemHacks": "補釘修正",
"SettingsTabSystemHacksNote": "可能導致模擬器不穩定", "SettingsTabSystemHacksNote": "可能導致模擬器不穩定",
"SettingsTabSystemExpandDramSize": "使用替代的記憶體配置 (開發者專用)", "SettingsTabSystemDramSize": "使用替代的記憶體配置 (開發者專用)",
"SettingsTabSystemDramSize4GiB": "4GiB",
"SettingsTabSystemDramSize6GiB": "6GiB",
"SettingsTabSystemDramSize8GiB": "8GiB",
"SettingsTabSystemDramSize12GiB": "12GiB",
"SettingsTabSystemIgnoreMissingServices": "忽略缺少的模擬器功能", "SettingsTabSystemIgnoreMissingServices": "忽略缺少的模擬器功能",
"SettingsTabGraphics": "圖形", "SettingsTabGraphics": "圖形",
"SettingsTabGraphicsAPI": "圖形 API", "SettingsTabGraphicsAPI": "圖形 API",

View File

@ -21,7 +21,8 @@ namespace Ryujinx.Ava.Common.Locale
new CompiledBindingPathBuilder() new CompiledBindingPathBuilder()
.Property(PropertyInfo, PropertyInfoAccessorFactory.CreateInpcPropertyAccessor) .Property(PropertyInfo, PropertyInfoAccessorFactory.CreateInpcPropertyAccessor)
.Build() .Build()
) { Source = LocaleManager.Instance } )
{ Source = LocaleManager.Instance }
.ProvideValue(serviceProvider); .ProvideValue(serviceProvider);
} }
} }

View File

@ -80,8 +80,8 @@ namespace Ryujinx.Ava.Common.Locale
} }
// If the locale doesn't contain the key return the default one. // If the locale doesn't contain the key return the default one.
return _localeDefaultStrings.TryGetValue(key, out string defaultValue) return _localeDefaultStrings.TryGetValue(key, out string defaultValue)
? defaultValue ? defaultValue
: key.ToString(); // If the locale text doesn't exist return the key. : key.ToString(); // If the locale text doesn't exist return the key.
} }
set set

View File

@ -72,23 +72,23 @@ namespace Ryujinx.Ava
EnableMultiTouch = true, EnableMultiTouch = true,
EnableIme = true, EnableIme = true,
EnableInputFocusProxy = Environment.GetEnvironmentVariable("XDG_CURRENT_DESKTOP") == "gamescope", EnableInputFocusProxy = Environment.GetEnvironmentVariable("XDG_CURRENT_DESKTOP") == "gamescope",
RenderingMode = UseHardwareAcceleration RenderingMode = UseHardwareAcceleration
? [ X11RenderingMode.Glx, X11RenderingMode.Software ] ? [X11RenderingMode.Glx, X11RenderingMode.Software]
: [ X11RenderingMode.Software ], : [X11RenderingMode.Software],
}) })
.With(new Win32PlatformOptions .With(new Win32PlatformOptions
{ {
WinUICompositionBackdropCornerRadius = 8.0f, WinUICompositionBackdropCornerRadius = 8.0f,
RenderingMode = UseHardwareAcceleration RenderingMode = UseHardwareAcceleration
? [ Win32RenderingMode.AngleEgl, Win32RenderingMode.Software ] ? [Win32RenderingMode.AngleEgl, Win32RenderingMode.Software]
: [ Win32RenderingMode.Software ], : [Win32RenderingMode.Software],
}); });
private static void Initialize(string[] args) private static void Initialize(string[] args)
{ {
// Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched // Ensure Discord presence timestamp begins at the absolute start of when Ryujinx is launched
DiscordIntegrationModule.StartedAt = Timestamps.Now; DiscordIntegrationModule.StartedAt = Timestamps.Now;
// Parse arguments // Parse arguments
CommandLineState.ParseArguments(args); CommandLineState.ParseArguments(args);
@ -203,7 +203,7 @@ namespace Ryujinx.Ava
// Check if docked mode was overriden. // Check if docked mode was overriden.
if (CommandLineState.OverrideDockedMode.HasValue) if (CommandLineState.OverrideDockedMode.HasValue)
ConfigurationState.Instance.System.EnableDockedMode.Value = CommandLineState.OverrideDockedMode.Value; ConfigurationState.Instance.System.EnableDockedMode.Value = CommandLineState.OverrideDockedMode.Value;
// Check if HideCursor was overridden. // Check if HideCursor was overridden.
if (CommandLineState.OverrideHideCursor is not null) if (CommandLineState.OverrideHideCursor is not null)
@ -214,7 +214,7 @@ namespace Ryujinx.Ava
"always" => HideCursorMode.Always, "always" => HideCursorMode.Always,
_ => ConfigurationState.Instance.HideCursor, _ => ConfigurationState.Instance.HideCursor,
}; };
// Check if hardware-acceleration was overridden. // Check if hardware-acceleration was overridden.
if (CommandLineState.OverrideHardwareAcceleration != null) if (CommandLineState.OverrideHardwareAcceleration != null)

View File

@ -136,7 +136,7 @@ namespace Ryujinx.Ava.UI.Applet
_hiddenTextBox.CaretIndex = cursorBegin; _hiddenTextBox.CaretIndex = cursorBegin;
}); });
public void SetText(string text, int cursorBegin, int cursorEnd) => public void SetText(string text, int cursorBegin, int cursorEnd) =>
Dispatcher.UIThread.Post(() => Dispatcher.UIThread.Post(() =>
{ {
_hiddenTextBox.Text = text; _hiddenTextBox.Text = text;

View File

@ -224,7 +224,7 @@ namespace Ryujinx.Ava.UI.Controls
{ {
if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel })
return; return;
string ptcDir = Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "cpu"); string ptcDir = Path.Combine(AppDataManager.GamesDirPath, viewModel.SelectedApplication.IdString, "cache", "cpu");
string mainDir = Path.Combine(ptcDir, "0"); string mainDir = Path.Combine(ptcDir, "0");
string backupDir = Path.Combine(ptcDir, "1"); string backupDir = Path.Combine(ptcDir, "1");

View File

@ -199,7 +199,7 @@ namespace Ryujinx.Ava.UI.Helpers
string secondaryText, string secondaryText,
string acceptButton, string acceptButton,
string closeButton, string closeButton,
string title) string title)
=> ShowTextDialog( => ShowTextDialog(
title, title,
primary, primary,
@ -215,7 +215,7 @@ namespace Ryujinx.Ava.UI.Helpers
string acceptButtonText, string acceptButtonText,
string cancelButtonText, string cancelButtonText,
string title, string title,
UserResult primaryButtonResult = UserResult.Yes) UserResult primaryButtonResult = UserResult.Yes)
=> await ShowTextDialog( => await ShowTextDialog(
string.IsNullOrWhiteSpace(title) ? LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle] : title, string.IsNullOrWhiteSpace(title) ? LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle] : title,
primaryText, primaryText,
@ -226,7 +226,7 @@ namespace Ryujinx.Ava.UI.Helpers
(int)Symbol.Help, (int)Symbol.Help,
primaryButtonResult); primaryButtonResult);
internal static async Task<UserResult> CreateLocalizedConfirmationDialog(string primaryText, string secondaryText) internal static async Task<UserResult> CreateLocalizedConfirmationDialog(string primaryText, string secondaryText)
=> await CreateConfirmationDialog( => await CreateConfirmationDialog(
primaryText, primaryText,
secondaryText, secondaryText,
@ -234,7 +234,7 @@ namespace Ryujinx.Ava.UI.Helpers
LocaleManager.Instance[LocaleKeys.InputDialogNo], LocaleManager.Instance[LocaleKeys.InputDialogNo],
LocaleManager.Instance[LocaleKeys.RyujinxConfirm]); LocaleManager.Instance[LocaleKeys.RyujinxConfirm]);
internal static async Task CreateUpdaterInfoDialog(string primary, string secondaryText) internal static async Task CreateUpdaterInfoDialog(string primary, string secondaryText)
=> await ShowTextDialog( => await ShowTextDialog(
LocaleManager.Instance[LocaleKeys.DialogUpdaterTitle], LocaleManager.Instance[LocaleKeys.DialogUpdaterTitle],
primary, primary,
@ -244,7 +244,7 @@ namespace Ryujinx.Ava.UI.Helpers
LocaleManager.Instance[LocaleKeys.InputDialogOk], LocaleManager.Instance[LocaleKeys.InputDialogOk],
(int)Symbol.Important); (int)Symbol.Important);
internal static async Task CreateWarningDialog(string primary, string secondaryText) internal static async Task CreateWarningDialog(string primary, string secondaryText)
=> await ShowTextDialog( => await ShowTextDialog(
LocaleManager.Instance[LocaleKeys.DialogWarningTitle], LocaleManager.Instance[LocaleKeys.DialogWarningTitle],
primary, primary,

View File

@ -39,8 +39,8 @@ namespace Ryujinx.Ava.UI.Helpers
await ContentDialogHelper.CreateInfoDialog( await ContentDialogHelper.CreateInfoDialog(
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogMessage, errorCode, GetErrorTitle(error)), LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogMessage, errorCode, GetErrorTitle(error)),
GetErrorDescription(error), GetErrorDescription(error),
"", "",
LocaleManager.Instance[LocaleKeys.InputDialogOk], LocaleManager.Instance[LocaleKeys.InputDialogOk],
LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogTitle, errorCode)); LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.DialogUserErrorDialogTitle, errorCode));
} }

View File

@ -45,7 +45,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
private PlayerIndex _playerId; private PlayerIndex _playerId;
private int _controller; private int _controller;
private int _controllerNumber; private readonly int _controllerNumber;
private string _controllerImage; private string _controllerImage;
private int _device; private int _device;
private object _configViewModel; private object _configViewModel;
@ -433,12 +433,28 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
public void LoadDevices() public void LoadDevices()
{ {
string GetGamepadName(IGamepad gamepad, int controllerNumber)
{
return $"{GetShortGamepadName(gamepad.Name)} ({controllerNumber})";
}
string GetUniqueGamepadName(IGamepad gamepad, ref int controllerNumber)
{
string name = GetGamepadName(gamepad, controllerNumber);
if (Devices.Any(controller => controller.Name == name))
{
controllerNumber++;
name = GetGamepadName(gamepad, controllerNumber);
}
return name;
}
lock (Devices) lock (Devices)
{ {
Devices.Clear(); Devices.Clear();
DeviceList.Clear(); DeviceList.Clear();
Devices.Add((DeviceType.None, Disabled, LocaleManager.Instance[LocaleKeys.ControllerSettingsDeviceDisabled])); Devices.Add((DeviceType.None, Disabled, LocaleManager.Instance[LocaleKeys.ControllerSettingsDeviceDisabled]));
int controllerNumber = 0;
foreach (string id in _mainWindow.InputManager.KeyboardDriver.GamepadsIds) foreach (string id in _mainWindow.InputManager.KeyboardDriver.GamepadsIds)
{ {
using IGamepad gamepad = _mainWindow.InputManager.KeyboardDriver.GetGamepad(id); using IGamepad gamepad = _mainWindow.InputManager.KeyboardDriver.GetGamepad(id);
@ -455,17 +471,11 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
if (gamepad != null) if (gamepad != null)
{ {
if (Devices.Any(controller => GetShortGamepadId(controller.Id) == GetShortGamepadId(gamepad.Id))) string name = GetUniqueGamepadName(gamepad, ref controllerNumber);
{ Devices.Add((DeviceType.Controller, id, name));
_controllerNumber++;
}
Devices.Add((DeviceType.Controller, id, $"{GetShortGamepadName(gamepad.Name)} ({_controllerNumber})"));
} }
} }
_controllerNumber = 0;
DeviceList.AddRange(Devices.Select(x => x.Name)); DeviceList.AddRange(Devices.Select(x => x.Name));
Device = Math.Min(Device, DeviceList.Count); Device = Math.Min(Device, DeviceList.Count);
} }
@ -679,7 +689,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
if (!File.Exists(path)) if (!File.Exists(path))
{ {
var index = ProfilesList.IndexOf(ProfileName); int index = ProfilesList.IndexOf(ProfileName);
if (index != -1) if (index != -1)
{ {
ProfilesList.RemoveAt(index); ProfilesList.RemoveAt(index);

View File

@ -913,7 +913,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public KeyGesture PauseKey public KeyGesture PauseKey
{ {
get => KeyGesture.Parse(_pauseKey); get => KeyGesture.Parse(_pauseKey);
set set
{ {
_pauseKey = value.ToString(); _pauseKey = value.ToString();

View File

@ -14,6 +14,7 @@ using Ryujinx.Common.Configuration.Multiplayer;
using Ryujinx.Common.GraphicsDriver; using Ryujinx.Common.GraphicsDriver;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan;
using Ryujinx.HLE;
using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS.Services.Time.TimeZone; using Ryujinx.HLE.HOS.Services.Time.TimeZone;
using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Configuration;
@ -154,7 +155,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public bool EnableInternetAccess { get; set; } public bool EnableInternetAccess { get; set; }
public bool EnableFsIntegrityChecks { get; set; } public bool EnableFsIntegrityChecks { get; set; }
public bool IgnoreMissingServices { get; set; } public bool IgnoreMissingServices { get; set; }
public bool ExpandDramSize { get; set; } public MemoryConfiguration DramSize { get; set; }
public bool EnableShaderCache { get; set; } public bool EnableShaderCache { get; set; }
public bool EnableTextureRecompression { get; set; } public bool EnableTextureRecompression { get; set; }
public bool EnableMacroHLE { get; set; } public bool EnableMacroHLE { get; set; }
@ -444,7 +445,7 @@ namespace Ryujinx.Ava.UI.ViewModels
EnableVsync = config.Graphics.EnableVsync; EnableVsync = config.Graphics.EnableVsync;
EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks; EnableFsIntegrityChecks = config.System.EnableFsIntegrityChecks;
ExpandDramSize = config.System.ExpandRam; DramSize = config.System.DramSize;
IgnoreMissingServices = config.System.IgnoreMissingServices; IgnoreMissingServices = config.System.IgnoreMissingServices;
// CPU // CPU
@ -545,7 +546,7 @@ namespace Ryujinx.Ava.UI.ViewModels
config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds()); config.System.SystemTimeOffset.Value = Convert.ToInt64((CurrentDate.ToUnixTimeSeconds() + CurrentTime.TotalSeconds) - DateTimeOffset.Now.ToUnixTimeSeconds());
config.Graphics.EnableVsync.Value = EnableVsync; config.Graphics.EnableVsync.Value = EnableVsync;
config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks; config.System.EnableFsIntegrityChecks.Value = EnableFsIntegrityChecks;
config.System.ExpandRam.Value = ExpandDramSize; config.System.DramSize.Value = DramSize;
config.System.IgnoreMissingServices.Value = IgnoreMissingServices; config.System.IgnoreMissingServices.Value = IgnoreMissingServices;
// CPU // CPU

View File

@ -143,14 +143,14 @@ namespace Ryujinx.Ava.UI.Views.Main
} }
} }
public async void OpenAmiiboWindow(object sender, RoutedEventArgs e) public async void OpenAmiiboWindow(object sender, RoutedEventArgs e)
=> await ViewModel.OpenAmiiboWindow(); => await ViewModel.OpenAmiiboWindow();
public async void OpenCheatManagerForCurrentApp(object sender, RoutedEventArgs e) public async void OpenCheatManagerForCurrentApp(object sender, RoutedEventArgs e)
{ {
if (!ViewModel.IsGameRunning) if (!ViewModel.IsGameRunning)
return; return;
string name = ViewModel.AppHost.Device.Processes.ActiveApplication.ApplicationControlProperties.Title[(int)ViewModel.AppHost.Device.System.State.DesiredTitleLanguage].NameString.ToString(); string name = ViewModel.AppHost.Device.Processes.ActiveApplication.ApplicationControlProperties.Title[(int)ViewModel.AppHost.Device.System.State.DesiredTitleLanguage].NameString.ToString();
await new CheatWindow( await new CheatWindow(
@ -186,7 +186,8 @@ namespace Ryujinx.Ava.UI.Views.Main
private async void ChangeWindowSize_Click(object sender, RoutedEventArgs e) private async void ChangeWindowSize_Click(object sender, RoutedEventArgs e)
{ {
if (sender is not MenuItem { Tag: string resolution }) return; if (sender is not MenuItem { Tag: string resolution })
return;
(int height, int width) = resolution.Split(' ') (int height, int width) = resolution.Split(' ')
.Into(parts => (int.Parse(parts[0]), int.Parse(parts[1]))); .Into(parts => (int.Parse(parts[0]), int.Parse(parts[1])));

View File

@ -1,4 +1,4 @@
<UserControl <UserControl
x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsSystemView" x:Class="Ryujinx.Ava.UI.Views.Settings.SettingsSystemView"
xmlns="https://github.com/avaloniaui" xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
@ -203,15 +203,36 @@
Foreground="{DynamicResource SecondaryTextColor}" Foreground="{DynamicResource SecondaryTextColor}"
Text="{locale:Locale SettingsTabSystemHacksNote}" /> Text="{locale:Locale SettingsTabSystemHacksNote}" />
</StackPanel> </StackPanel>
<StackPanel
Margin="10,0,0,0"
Orientation="Horizontal">
<TextBlock
VerticalAlignment="Center"
Text="{locale:Locale SettingsTabSystemDramSize}"
Width="250" />
<ComboBox
SelectedIndex="{Binding DramSize}"
ToolTip.Tip="{locale:Locale DRamTooltip}"
HorizontalContentAlignment="Left"
Width="350">
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize4GiB}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize6GiB}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize8GiB}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{locale:Locale SettingsTabSystemDramSize12GiB}" />
</ComboBoxItem>
</ComboBox>
</StackPanel>
<StackPanel <StackPanel
Margin="10,0,0,0" Margin="10,0,0,0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
Orientation="Vertical"> Orientation="Vertical">
<CheckBox
IsChecked="{Binding ExpandDramSize}"
ToolTip.Tip="{locale:Locale DRamTooltip}">
<TextBlock Text="{locale:Locale SettingsTabSystemExpandDramSize}" />
</CheckBox>
<CheckBox <CheckBox
IsChecked="{Binding IgnoreMissingServices}" IsChecked="{Binding IgnoreMissingServices}"
ToolTip.Tip="{locale:Locale IgnoreMissingServicesTooltip}"> ToolTip.Tip="{locale:Locale IgnoreMissingServicesTooltip}">
@ -221,4 +242,4 @@
</StackPanel> </StackPanel>
</Border> </Border>
</ScrollViewer> </ScrollViewer>
</UserControl> </UserControl>

View File

@ -83,7 +83,7 @@ namespace Ryujinx.Ava.UI.Windows
TitleBar.ExtendsContentIntoTitleBar = true; TitleBar.ExtendsContentIntoTitleBar = true;
TitleBar.TitleBarHitTestType = TitleBarHitTestType.Complex; TitleBar.TitleBarHitTestType = TitleBarHitTestType.Complex;
// NOTE: Height of MenuBar and StatusBar is not usable here, since it would still be 0 at this point. // NOTE: Height of MenuBar and StatusBar is not usable here, since it would still be 0 at this point.
StatusBarHeight = StatusBarView.StatusBar.MinHeight; StatusBarHeight = StatusBarView.StatusBar.MinHeight;
@ -665,8 +665,9 @@ namespace Ryujinx.Ava.UI.Windows
? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateAddedMessage], numUpdatesAdded) ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateAddedMessage], numUpdatesAdded)
: null; : null;
if (msg is null) return; if (msg is null)
return;
Dispatcher.UIThread.InvokeAsync(async () => Dispatcher.UIThread.InvokeAsync(async () =>
{ {