diff --git a/Ryujinx.sln b/Ryujinx.sln index 373572178..9e197e85f 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -249,13 +249,12 @@ Global {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs deleted file mode 100644 index 6dc3d8aa8..000000000 --- a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using Microsoft.Build.Utilities; -using System.Collections.Generic; -using System.Linq; -using System.IO; -using Newtonsoft.Json; -using Microsoft.Build.Framework; - -namespace Ryujinx.BuildValidationTasks -{ - public class LocaleValidationTask : Task - { - public override bool Execute() - { - string path = System.Reflection.Assembly.GetExecutingAssembly().Location; - - if (path.Split(["src"], StringSplitOptions.None).Length == 1) - { - //i assume that we are in a build directory in the solution dir - path = new FileInfo(path).Directory!.Parent!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - else - { - path = path.Split(["src"], StringSplitOptions.None)[0]; - path = new FileInfo(path).Directory!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - - string data; - - using (StreamReader sr = new(path)) - { - data = sr.ReadToEnd(); - } - - LocalesJson json = JsonConvert.DeserializeObject(data); - - for (int i = 0; i < json.Locales.Count; i++) - { - LocalesEntry locale = json.Locales[i]; - - foreach (string langCode in json.Languages.Where(it => !locale.Translations.ContainsKey(it))) - { - locale.Translations.Add(langCode, string.Empty); - Log.LogMessage(MessageImportance.High, $"Added '{langCode}' to Locale '{locale.ID}'"); - } - - locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); - json.Locales[i] = locale; - } - - string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); - - using (StreamWriter sw = new(path)) - { - sw.Write(jsonString); - } - - return true; - } - - struct LocalesJson - { - public List Languages { get; set; } - public List Locales { get; set; } - } - - struct LocalesEntry - { - public string ID { get; set; } - public Dictionary Translations { get; set; } - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs new file mode 100644 index 000000000..05eaee539 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using System.Text.Json; +using System.Text.Encodings.Web; + +namespace Ryujinx.BuildValidationTasks +{ + public class LocalesValidationTask : ValidationTask + { + public LocalesValidationTask() { } + + public bool Execute(string projectPath, bool isGitRunner) + { + Console.WriteLine("Running Locale Validation Task..."); + + string path = projectPath + "src/Ryujinx/Assets/locales.json"; + string data; + + using (StreamReader sr = new(path)) + { + data = sr.ReadToEnd(); + } + + LocalesJson json; + + if (isGitRunner && data.Contains("\r\n")) + throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix..."); + + try + { + json = JsonSerializer.Deserialize(data); + + } + catch (JsonException e) + { + throw new JsonException(e.Message); //shorter and easier stacktrace + } + + + + bool encounteredIssue = false; + + for (int i = 0; i < json.Locales.Count; i++) + { + LocalesEntry locale = json.Locales[i]; + + foreach (string langCode in json.Languages.Where(lang => !locale.Translations.ContainsKey(lang))) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations.Add(langCode, string.Empty); + Console.WriteLine($"Added '{langCode}' to Locale '{locale.ID}'"); + } + else + { + Console.WriteLine($"Missing '{langCode}' in Locale '{locale.ID}'!"); + } + } + + foreach (string langCode in json.Languages.Where(lang => locale.Translations.ContainsKey(lang) && lang != "en_US" && locale.Translations[lang] == locale.Translations["en_US"])) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations[langCode] = string.Empty; + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'! Resetting it..."); + } + else + { + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'!"); + } + } + + locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); + json.Locales[i] = locale; + } + + if (isGitRunner && encounteredIssue) + throw new JsonException("1 or more locales are invalid!"); + + JsonSerializerOptions jsonOptions = new JsonSerializerOptions() + { + WriteIndented = true, + NewLine = "\n", + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping + }; + + string jsonString = JsonSerializer.Serialize(json, jsonOptions); + + using (StreamWriter sw = new(path)) + { + sw.Write(jsonString); + } + + Console.WriteLine("Finished Locale Validation Task!"); + + return true; + } + + struct LocalesJson + { + public List Languages { get; set; } + public List Locales { get; set; } + } + + struct LocalesEntry + { + public string ID { get; set; } + public Dictionary Translations { get; set; } + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Program.cs b/src/Ryujinx.BuildValidationTasks/Program.cs new file mode 100644 index 000000000..ed1cee490 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/Program.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Linq; + +namespace Ryujinx.BuildValidationTasks +{ + public class Program + { + static void Main(string[] args) + { + // Display the number of command line arguments. + if (args.Length == 0) + throw new ArgumentException("Error: too few arguments!"); + + string path = args[0]; + + if (string.IsNullOrEmpty(path)) + throw new ArgumentException("Error: path is null or empty!"); + + if (!Path.Exists(path)) + throw new FileLoadException($"path {{{path}}} does not exist!"); + + path = Path.GetFullPath(path); + + if (!Directory.GetDirectories(path).Contains($"{path}src")) + throw new FileLoadException($"path {{{path}}} is not a valid ryujinx project!"); + + bool isGitRunner = path.Contains("runner") || path.Contains("D:\\a\\Ryujinx\\Ryujinx"); + if (isGitRunner) + Console.WriteLine("Is Git Runner!"); + + // Run tasks + // Pass extra info needed in the task constructors + new LocalesValidationTask().Execute(path, isGitRunner); + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj index dbd9492df..c9fea9313 100644 --- a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj +++ b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj @@ -1,19 +1,17 @@ - netstandard2.0 - true + Exe - - - - + + - - - - + - + \ No newline at end of file diff --git a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs new file mode 100644 index 000000000..f11c87f3b --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs @@ -0,0 +1,7 @@ +namespace Ryujinx.BuildValidationTasks +{ + public interface ValidationTask + { + public bool Execute(string projectPath, bool isGitRunner); + } +} diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6bede7999..31cba38dd 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1564,7 +1564,7 @@ "pl_PL": "Wersja", "pt_BR": "Versão", "ru_RU": "Версия", - "sv_SE": "Version", + "sv_SE": "", "th_TH": "เวอร์ชั่น", "tr_TR": "Sürüm", "uk_UA": "Версія", @@ -2213,8 +2213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ExeFS", - "sv_SE": "ExeFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2263,8 +2263,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RomFS", - "sv_SE": "RomFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2310,7 +2310,7 @@ "it_IT": "", "ja_JP": "ロゴ", "ko_KR": "로고", - "no_NO": "Logo", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Лого", @@ -3260,11 +3260,11 @@ "it_IT": "Sistema", "ja_JP": "システム", "ko_KR": "시스템", - "no_NO": "System", + "no_NO": "", "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", - "sv_SE": "System", + "sv_SE": "", "th_TH": "ระบบ", "tr_TR": "Sistem", "uk_UA": "Система", @@ -3335,11 +3335,11 @@ "it_IT": "Giappone", "ja_JP": "日本", "ko_KR": "일본", - "no_NO": "Japan", + "no_NO": "", "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", - "sv_SE": "Japan", + "sv_SE": "", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonya", "uk_UA": "Японія", @@ -3360,11 +3360,11 @@ "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", "ko_KR": "미국", - "no_NO": "USA", + "no_NO": "", "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", - "sv_SE": "USA", + "sv_SE": "", "th_TH": "สหรัฐอเมริกา", "tr_TR": "ABD", "uk_UA": "США", @@ -3410,7 +3410,7 @@ "it_IT": "", "ja_JP": "オーストラリア", "ko_KR": "호주", - "no_NO": "Australia", + "no_NO": "", "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", @@ -3460,11 +3460,11 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "Korea", + "no_NO": "", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", - "sv_SE": "Korea", + "sv_SE": "", "th_TH": "เกาหลี", "tr_TR": "Kore", "uk_UA": "Корея", @@ -3485,11 +3485,11 @@ "it_IT": "", "ja_JP": "台湾", "ko_KR": "대만", - "no_NO": "Taiwan", + "no_NO": "", "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", - "sv_SE": "Taiwan", + "sv_SE": "", "th_TH": "ไต้หวัน", "tr_TR": "Tayvan", "uk_UA": "Тайвань", @@ -3955,7 +3955,7 @@ "el_GR": "Ζώνη Ώρας Συστήματος:", "en_US": "System Time Zone:", "es_ES": "Zona horaria del sistema:", - "fr_FR": "Fuseau horaire du système :", + "fr_FR": "Fuseau horaire du système\u00A0:", "he_IL": "אזור זמן מערכת:", "it_IT": "Fuso orario del sistema:", "ja_JP": "タイムゾーン:", @@ -4135,11 +4135,11 @@ "it_IT": "", "ja_JP": "ダミー", "ko_KR": "더미", - "no_NO": "Dummy", + "no_NO": "", "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", - "sv_SE": "Dummy", + "sv_SE": "", "th_TH": "", "tr_TR": "Yapay", "uk_UA": "", @@ -4163,8 +4163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "OpenAL", - "sv_SE": "OpenAL", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4188,8 +4188,8 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "SoundIO", - "sv_SE": "SoundIO", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4213,8 +4213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "SDL2", - "sv_SE": "SDL2", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4230,12 +4230,12 @@ "el_GR": "Μικροδιορθώσεις", "en_US": "Hacks", "es_ES": "", - "fr_FR": "Hacks", + "fr_FR": "", "he_IL": "האצות", "it_IT": "Espedienti", "ja_JP": "ハック", "ko_KR": "핵", - "no_NO": "Hacks", + "no_NO": "", "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", @@ -4314,7 +4314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "4ГиБ", - "sv_SE": "4GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "4Гб", @@ -4339,7 +4339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "6ГиБ", - "sv_SE": "6GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "6Гб", @@ -4364,7 +4364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "8ГиБ", - "sv_SE": "8GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "8Гб", @@ -4389,7 +4389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "12ГиБ", - "sv_SE": "12GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "12Гб", @@ -4585,11 +4585,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배", - "no_NO": "2x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x", - "sv_SE": "2x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4610,11 +4610,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4배", - "no_NO": "4x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4x", - "sv_SE": "4x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4635,11 +4635,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8배", - "no_NO": "8x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8x", - "sv_SE": "8x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4660,11 +4660,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "16배", - "no_NO": "16x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16x", - "sv_SE": "16x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4760,11 +4760,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배(1440p/2160p)", - "no_NO": "2x (1440p/2160p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x (1440p/2160p)", - "sv_SE": "2x (1440p/2160p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4785,11 +4785,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "3배(2160p/3240p)", - "no_NO": "3x (2160p/3240p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3x (2160p/3240p)", - "sv_SE": "3x (2160p/3240p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4863,8 +4863,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4:3", - "sv_SE": "4:3", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4888,8 +4888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:9", - "sv_SE": "16:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4913,8 +4913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:10", - "sv_SE": "16:10", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4938,8 +4938,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "21:9", - "sv_SE": "21:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4960,11 +4960,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "32:9", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "32:9", - "sv_SE": "32:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -5060,7 +5060,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -5085,7 +5085,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -6113,8 +6113,8 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "Pro Controller", - "sv_SE": "Pro Controller", + "ru_RU": "", + "sv_SE": "", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", "uk_UA": "Контролер Pro", @@ -8088,8 +8088,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Enter", - "sv_SE": "Enter", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8114,7 +8114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Esc", - "sv_SE": "Escape", + "sv_SE": "", "th_TH": "", "tr_TR": "Esc", "uk_UA": "", @@ -8163,8 +8163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Tab", - "sv_SE": "Tab", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8188,8 +8188,8 @@ "no_NO": "Tilbaketast", "pl_PL": "", "pt_BR": "", - "ru_RU": "Backspace", - "sv_SE": "Backspace", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "Geri tuşu", "uk_UA": "", @@ -8213,8 +8213,8 @@ "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", - "ru_RU": "Insert", - "sv_SE": "Insert", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8238,8 +8238,8 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "Delete", - "sv_SE": "Delete", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8263,8 +8263,8 @@ "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Up", - "sv_SE": "Page Up", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8288,8 +8288,8 @@ "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Down", - "sv_SE": "Page Down", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8313,8 +8313,8 @@ "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", - "ru_RU": "Home", - "sv_SE": "Home", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8338,8 +8338,8 @@ "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", - "ru_RU": "End", - "sv_SE": "End", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8363,8 +8363,8 @@ "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Caps Lock", - "sv_SE": "Caps Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8388,8 +8388,8 @@ "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Scroll Lock", - "sv_SE": "Scroll Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8413,8 +8413,8 @@ "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", - "ru_RU": "Print Screen", - "sv_SE": "Print Screen", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8438,8 +8438,8 @@ "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", - "ru_RU": "Pause", - "sv_SE": "Pause", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8463,8 +8463,8 @@ "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Num Lock", - "sv_SE": "Num Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8514,7 +8514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 0", - "sv_SE": "Keypad 0", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8539,7 +8539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 1", - "sv_SE": "Keypad 1", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8564,7 +8564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 2", - "sv_SE": "Keypad 2", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8589,7 +8589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 3", - "sv_SE": "Keypad 3", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8614,7 +8614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 4", - "sv_SE": "Keypad 4", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8639,7 +8639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 5", - "sv_SE": "Keypad 5", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8664,7 +8664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 6", - "sv_SE": "Keypad 6", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8689,7 +8689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 7", - "sv_SE": "Keypad 7", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8714,7 +8714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 8", - "sv_SE": "Keypad 8", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8739,7 +8739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 9", - "sv_SE": "Keypad 9", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8889,7 +8889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Enter (блок цифр)", - "sv_SE": "Keypad Enter", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8913,7 +8913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "0", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8938,7 +8938,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "1", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8963,7 +8963,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8988,7 +8988,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9013,7 +9013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9038,7 +9038,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "5", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9063,7 +9063,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "6", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9088,7 +9088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "7", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9113,7 +9113,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9138,7 +9138,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "9", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9163,7 +9163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "~", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9188,7 +9188,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "`", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9213,7 +9213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9238,7 +9238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9263,7 +9263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "[", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9288,7 +9288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "]", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9313,7 +9313,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ";", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9363,7 +9363,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ",", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9388,7 +9388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ".", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9413,7 +9413,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "/", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9738,7 +9738,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9763,7 +9763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "4", @@ -9789,7 +9789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка меню", - "sv_SE": "Guide", + "sv_SE": "", "th_TH": "", "tr_TR": "Rehber", "uk_UA": "", @@ -12438,7 +12438,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "{0}: {1}", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -14289,7 +14289,7 @@ "pl_PL": "Seria Amiibo", "pt_BR": "Franquia Amiibo", "ru_RU": "Серия Amiibo", - "sv_SE": "Amiibo Series", + "sv_SE": "", "th_TH": "", "tr_TR": "Amiibo Serisi", "uk_UA": "Серія Amiibo", @@ -15755,7 +15755,7 @@ "el_GR": "", "en_US": "Aspect Ratio applied to the renderer window.\n\nOnly change this if you're using an aspect ratio mod for your game, otherwise the graphics will be stretched.\n\nLeave on 16:9 if unsure.", "es_ES": "Relación de aspecto aplicada a la ventana del renderizador.\n\nSolamente modificar esto si estás utilizando un mod de relación de aspecto para su juego, en cualquier otro caso los gráficos se estirarán.\n\nDejar en 16:9 si no sabe que hacer.", - "fr_FR": "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.", + "fr_FR": "Format\u00A0d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format\u00A0d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Proporzioni dello schermo applicate alla finestra di renderizzazione.\n\nCambialo solo se stai usando una mod di proporzioni per il tuo gioco, altrimenti la grafica verrà allungata.\n\nLasciare il 16:9 se incerto.", "ja_JP": "レンダリングウインドウに適用するアスペクト比です.\n\nゲームにアスペクト比を変更する mod を使用している場合のみ変更してください.\n\nわからない場合は16:9のままにしておいてください.\n", @@ -17439,7 +17439,7 @@ "pl_PL": "Wersja {0}", "pt_BR": "Versão {0}", "ru_RU": "Версия {0}", - "sv_SE": "Version {0}", + "sv_SE": "", "th_TH": "เวอร์ชั่น {0}", "tr_TR": "Sürüm {0}", "uk_UA": "Версія {0}", @@ -17664,7 +17664,7 @@ "pl_PL": "", "pt_BR": "Ryujinx - Informação", "ru_RU": "Ryujinx - Информация", - "sv_SE": "Ryujinx - Info", + "sv_SE": "", "th_TH": "Ryujinx – ข้อมูล", "tr_TR": "Ryujinx - Bilgi", "uk_UA": "Ryujin x - Інформація", @@ -18813,8 +18813,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Amiibo", - "sv_SE": "Amiibo", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19435,7 +19435,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "XCI File Trimmer", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Уменьшение размера XCI файлов", @@ -19639,7 +19639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "{0:n0} Мб", - "sv_SE": "{0:n0} Mb", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "{0:n0} Мб", @@ -20914,7 +20914,7 @@ "pl_PL": "Głoś", "pt_BR": "", "ru_RU": "Громкость", - "sv_SE": "Vol", + "sv_SE": "", "th_TH": "ระดับเสียง", "tr_TR": "Ses", "uk_UA": "Гуч.", @@ -21055,7 +21055,7 @@ "el_GR": "Όνομα", "en_US": "Name", "es_ES": "Nombre", - "fr_FR": "Nom ", + "fr_FR": "Nom\u00A0", "he_IL": "שם", "it_IT": "Nome", "ja_JP": "名称", @@ -21388,8 +21388,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "FSR", - "sv_SE": "FSR", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21888,8 +21888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ldn_mitm", - "sv_SE": "ldn_mitm", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21913,8 +21913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RyuLDN", - "sv_SE": "RyuLDN", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22214,7 +22214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вертикальная синхронизация:", - "sv_SE": "VSync:", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", @@ -22255,7 +22255,7 @@ "el_GR": "", "en_US": "Switch", "es_ES": "", - "fr_FR": "Switch", + "fr_FR": "", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -22264,7 +22264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Консоль", - "sv_SE": "Switch", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22598,4 +22598,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 9d23b0909..461e556ea 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -13,9 +13,10 @@ $(DefaultItemExcludes);._* - - - + + + +