aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs')
-rw-r--r--src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs b/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs
new file mode 100644
index 00000000..dc971269
--- /dev/null
+++ b/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs
@@ -0,0 +1,63 @@
+using Ryujinx.Common.Memory;
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Ryujinx.Horizon.Sdk.Settings
+{
+ [StructLayout(LayoutKind.Sequential, Size = 0x8, Pack = 0x1)]
+ struct LanguageCode
+ {
+ private static readonly string[] _languageCodes = new string[]
+ {
+ "ja",
+ "en-US",
+ "fr",
+ "de",
+ "it",
+ "es",
+ "zh-CN",
+ "ko",
+ "nl",
+ "pt",
+ "ru",
+ "zh-TW",
+ "en-GB",
+ "fr-CA",
+ "es-419",
+ "zh-Hans",
+ "zh-Hant",
+ "pt-BR"
+ };
+
+ public Array8<byte> Value;
+
+ public bool IsValid()
+ {
+ int length = Value.AsSpan().IndexOf((byte)0);
+ if (length < 0)
+ {
+ return false;
+ }
+
+ string str = Encoding.ASCII.GetString(Value.AsSpan()[..length]);
+
+ return _languageCodes.AsSpan().Contains(str);
+ }
+
+ public LanguageCode(Language language)
+ {
+ if ((uint)language >= _languageCodes.Length)
+ {
+ throw new ArgumentOutOfRangeException(nameof(language));
+ }
+
+ Value = new LanguageCode(_languageCodes[(int)language]).Value;
+ }
+
+ public LanguageCode(string strCode)
+ {
+ Encoding.ASCII.GetBytes(strCode, Value.AsSpan());
+ }
+ }
+}