SystemStateMgr.cs
1 using System; 2 3 namespace Ryujinx.HLE.HOS.SystemState 4 { 5 public class SystemStateMgr 6 { 7 internal static string[] LanguageCodes = { 8 "ja", 9 "en-US", 10 "fr", 11 "de", 12 "it", 13 "es", 14 "zh-CN", 15 "ko", 16 "nl", 17 "pt", 18 "ru", 19 "zh-TW", 20 "en-GB", 21 "fr-CA", 22 "es-419", 23 "zh-Hans", 24 "zh-Hant", 25 "pt-BR", 26 }; 27 28 internal long DesiredKeyboardLayout { get; private set; } 29 30 internal SystemLanguage DesiredSystemLanguage { get; private set; } 31 32 internal long DesiredLanguageCode { get; private set; } 33 34 internal uint DesiredRegionCode { get; private set; } 35 36 public TitleLanguage DesiredTitleLanguage { get; private set; } 37 38 public bool DockedMode { get; set; } 39 40 public ColorSet ThemeColor { get; set; } 41 42 public string DeviceNickName { get; set; } 43 44 public SystemStateMgr() 45 { 46 // TODO: Let user specify fields. 47 DesiredKeyboardLayout = (long)KeyboardLayout.Default; 48 DeviceNickName = "Ryujinx's Switch"; 49 } 50 51 public void SetLanguage(SystemLanguage language) 52 { 53 DesiredSystemLanguage = language; 54 DesiredLanguageCode = GetLanguageCode((int)DesiredSystemLanguage); 55 56 DesiredTitleLanguage = language switch 57 { 58 SystemLanguage.Taiwanese or 59 SystemLanguage.TraditionalChinese => TitleLanguage.TraditionalChinese, 60 SystemLanguage.Chinese or 61 SystemLanguage.SimplifiedChinese => TitleLanguage.SimplifiedChinese, 62 _ => Enum.Parse<TitleLanguage>(Enum.GetName<SystemLanguage>(language)), 63 }; 64 } 65 66 public void SetRegion(RegionCode region) 67 { 68 DesiredRegionCode = (uint)region; 69 } 70 71 internal static long GetLanguageCode(int index) 72 { 73 if ((uint)index >= LanguageCodes.Length) 74 { 75 throw new ArgumentOutOfRangeException(nameof(index)); 76 } 77 78 long code = 0; 79 int shift = 0; 80 81 foreach (char chr in LanguageCodes[index]) 82 { 83 code |= (long)(byte)chr << shift++ * 8; 84 } 85 86 return code; 87 } 88 } 89 }