Compare commits

...

46 Commits

Author SHA1 Message Date
Evan Husted
af44726cec Merge branch 'master' into validation-v2 2024-12-28 05:51:19 -06:00
LotP1
8efefeaaca slight refactor
isGitRunner is now a variable passed to all tasks.
Validation project can now accept more arguments, only the first argument is used at the moment.
Execute is no longer static, and you can now pass extra data to the task constructor if needed.
2024-12-28 02:16:17 +01:00
LotP1
4e56b1493f validate that line endings are LF on build
if running on git it will now fail if the file contains CRLF line endings and tell the user to run a local build to fix it.
2024-12-28 02:01:23 +01:00
LotP1
43f6e4a873 remove dupelicates 2024-12-28 01:58:35 +01:00
LotP1
55f6b95d8d Merge remote-tracking branch 'upstream/master' into validation-v2 2024-12-28 01:50:18 +01:00
LotP1
4b84c5d240 fix duplicates 2024-12-28 01:39:03 +01:00
LotP1
9f22fc49c8 Merge branch 'master' into validation-v2 2024-12-28 01:38:32 +01:00
LotP1
4f206d0e73 Merge remote-tracking branch 'upstream/master' into validation-v2 2024-12-28 01:35:52 +01:00
LotP1
e2e8502278 force line endings to use LF 2024-12-27 12:10:50 +01:00
Evan Husted
aa806b1032 Rename program.cs to Program.cs 2024-12-26 21:07:29 -06:00
LotP1
aabb786016 fix spelling and names 2024-12-26 23:42:53 +01:00
LotP1
2a38f1bbbf only log runtime if a runtime is set 2024-12-26 23:34:43 +01:00
LotP1
fdece62f88 fix matching windows runner 2024-12-26 23:32:14 +01:00
LotP1
6fb58a611e revert .gitignore 2024-12-26 23:28:34 +01:00
LotP1
02ff76f89a revert packages.props 2024-12-26 23:26:50 +01:00
LotP1
d39b3a5864 fix locales.json to comply with validation 2024-12-26 23:20:29 +01:00
LotP1
f976c3c362 simplify 2024-12-26 23:20:06 +01:00
LotP1
d9f2b813a0 Merge remote-tracking branch 'upstream/master' into validation-v2 2024-12-26 23:12:30 +01:00
LotP1
8cb6767c7c slash instead of backslash 2024-12-26 23:10:36 +01:00
LotP1
80377c1553 run with dotnet dll runner 2024-12-26 23:04:05 +01:00
LotP1
1dbcaf1fd7 missing quote, will still fail 2024-12-26 22:57:07 +01:00
LotP1
bad1f72918 v4 first test, will fail due to new validation step 2024-12-26 22:54:22 +01:00
LotP1
a317184594 check target dir 2024-12-26 21:34:07 +01:00
LotP1
0cde245875 forgot to remove true 2024-12-26 21:31:24 +01:00
LotP1
e3638d13b1 correct form of --runtime 2024-12-26 21:29:10 +01:00
LotP1
2fe19044cf use RuntimeIdentifier instead 2024-12-26 21:25:45 +01:00
LotP1
9320decc45 test RuntimeIdentifiers 2024-12-26 21:06:08 +01:00
LotP1
35b23bcafb try simplified csproj and force runtime identifier 2024-12-26 20:45:37 +01:00
LotP1
4add4829c7 force restore 2024-12-26 20:38:46 +01:00
LotP1
eb46909808 manually run dotnet restore 2024-12-26 20:29:56 +01:00
LotP1
c91d9d8049 build target fix 2024-12-26 20:18:29 +01:00
LotP1
21f23f0a2e lets see what's actually going on 2024-12-26 20:13:18 +01:00
LotP1
9ca0926439 confirm that it actually builds 2024-12-26 20:07:45 +01:00
LotP1
7b8c8776a2 Revert "use outdir"
This reverts commit b00d80c17a.
2024-12-26 20:06:07 +01:00
LotP1
b00d80c17a use outdir 2024-12-26 20:00:04 +01:00
LotP1
8c0a82bb6e v4 2024-12-26 19:54:02 +01:00
LotP1
1bac6ab19e please 2024-12-26 00:00:05 +01:00
LotP1
dac137fd43 test stuff 2024-12-25 23:47:20 +01:00
LotP1
d83d80de73 here we go 2024-12-25 23:22:38 +01:00
LotP1
097836bfac NO-BREAK SPACE is now escaped 2024-12-25 22:14:20 +01:00
LotP1
695f9e277d v3 2024-12-25 22:13:54 +01:00
LotP1
b19ee23c6b this won't work 2024-12-25 20:48:28 +01:00
LotP1
748e93ba65 lets give this another shot
moved from netstandard to netframework
2024-12-25 17:09:57 +01:00
LotP1
732a1af863 copying is not necessary anymore 2024-12-25 04:02:22 +01:00
LotP1
f538cee2e8 please don't fail 2024-12-25 03:56:59 +01:00
LotP1
4275a778aa update gitignore 2024-12-24 23:28:44 +01:00
8 changed files with 337 additions and 240 deletions

View File

@@ -255,13 +255,12 @@ Global
{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {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.ActiveCfg = Release|Any CPU
{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = 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.ActiveCfg = Debug|Any CPU
{C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = 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.ActiveCfg = Release|Any CPU
{C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = 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.ActiveCfg = Debug|Any CPU
{81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = 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 {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU

View File

@@ -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<LocalesJson>(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<string> Languages { get; set; }
public List<LocalesEntry> Locales { get; set; }
}
struct LocalesEntry
{
public string ID { get; set; }
public Dictionary<string, string> Translations { get; set; }
}
}
}

View File

@@ -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<LocalesJson>(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<string> Languages { get; set; }
public List<LocalesEntry> Locales { get; set; }
}
struct LocalesEntry
{
public string ID { get; set; }
public Dictionary<string, string> Translations { get; set; }
}
}
}

View File

@@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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);
}
}
}

View File

@@ -1,19 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <OutputType>Exe</OutputType>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <Target Name="PostBuildTarget" AfterTargets="AfterBuild">
<PackageReference Include="Microsoft.Build.Utilities.Core" /> <Message Text="Running Validation Project" Importance="high" />
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
<UsingTask TaskName="Ryujinx.BuildValidationTasks.LocaleValidationTask" TaskFactory="TaskHostFactory" AssemblyFile="$(OutDir)Ryujinx.BuildValidationTasks.dll" /> <Exec WorkingDirectory="$(ProjectDir)bin\Debug\$(TargetFramework)\"
Command="dotnet Ryujinx.BuildValidationTasks.dll &quot;$(ProjectDir)..\..\\&quot;"
<Target Name="LocalesJsonValidation" AfterTargets="AfterRebuild"> ConsoleToMsBuild="true"
<LocaleValidationTask /> />
</Target> </Target>
</Project> </Project>

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ryujinx.BuildValidationTasks
{
public interface ValidationTask
{
public bool Execute(string projectPath, bool isGitRunner);
}
}

View File

@@ -1564,7 +1564,7 @@
"pl_PL": "Wersja", "pl_PL": "Wersja",
"pt_BR": "Versão", "pt_BR": "Versão",
"ru_RU": "Версия", "ru_RU": "Версия",
"sv_SE": "Version", "sv_SE": "",
"th_TH": "เวอร์ชั่น", "th_TH": "เวอร์ชั่น",
"tr_TR": "Sürüm", "tr_TR": "Sürüm",
"uk_UA": "Версія", "uk_UA": "Версія",
@@ -2213,8 +2213,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "ExeFS", "ru_RU": "",
"sv_SE": "ExeFS", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -2263,8 +2263,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "RomFS", "ru_RU": "",
"sv_SE": "RomFS", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -2310,7 +2310,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "ロゴ", "ja_JP": "ロゴ",
"ko_KR": "로고", "ko_KR": "로고",
"no_NO": "Logo", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Лого", "ru_RU": "Лого",
@@ -3260,11 +3260,11 @@
"it_IT": "Sistema", "it_IT": "Sistema",
"ja_JP": "システム", "ja_JP": "システム",
"ko_KR": "시스템", "ko_KR": "시스템",
"no_NO": "System", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "Sistema", "pt_BR": "Sistema",
"ru_RU": "Система", "ru_RU": "Система",
"sv_SE": "System", "sv_SE": "",
"th_TH": "ระบบ", "th_TH": "ระบบ",
"tr_TR": "Sistem", "tr_TR": "Sistem",
"uk_UA": "Система", "uk_UA": "Система",
@@ -3335,11 +3335,11 @@
"it_IT": "Giappone", "it_IT": "Giappone",
"ja_JP": "日本", "ja_JP": "日本",
"ko_KR": "일본", "ko_KR": "일본",
"no_NO": "Japan", "no_NO": "",
"pl_PL": "Japonia", "pl_PL": "Japonia",
"pt_BR": "Japão", "pt_BR": "Japão",
"ru_RU": "Япония", "ru_RU": "Япония",
"sv_SE": "Japan", "sv_SE": "",
"th_TH": "ญี่ปุ่น", "th_TH": "ญี่ปุ่น",
"tr_TR": "Japonya", "tr_TR": "Japonya",
"uk_UA": "Японія", "uk_UA": "Японія",
@@ -3360,11 +3360,11 @@
"it_IT": "Stati Uniti d'America", "it_IT": "Stati Uniti d'America",
"ja_JP": "アメリカ", "ja_JP": "アメリカ",
"ko_KR": "미국", "ko_KR": "미국",
"no_NO": "USA", "no_NO": "",
"pl_PL": "Stany Zjednoczone", "pl_PL": "Stany Zjednoczone",
"pt_BR": "EUA", "pt_BR": "EUA",
"ru_RU": "США", "ru_RU": "США",
"sv_SE": "USA", "sv_SE": "",
"th_TH": "สหรัฐอเมริกา", "th_TH": "สหรัฐอเมริกา",
"tr_TR": "ABD", "tr_TR": "ABD",
"uk_UA": "США", "uk_UA": "США",
@@ -3410,7 +3410,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "オーストラリア", "ja_JP": "オーストラリア",
"ko_KR": "호주", "ko_KR": "호주",
"no_NO": "Australia", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "Austrália", "pt_BR": "Austrália",
"ru_RU": "Австралия", "ru_RU": "Австралия",
@@ -3460,11 +3460,11 @@
"it_IT": "Corea", "it_IT": "Corea",
"ja_JP": "韓国", "ja_JP": "韓国",
"ko_KR": "한국", "ko_KR": "한국",
"no_NO": "Korea", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "Coreia", "pt_BR": "Coreia",
"ru_RU": "Корея", "ru_RU": "Корея",
"sv_SE": "Korea", "sv_SE": "",
"th_TH": "เกาหลี", "th_TH": "เกาหลี",
"tr_TR": "Kore", "tr_TR": "Kore",
"uk_UA": "Корея", "uk_UA": "Корея",
@@ -3485,11 +3485,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "台湾", "ja_JP": "台湾",
"ko_KR": "대만", "ko_KR": "대만",
"no_NO": "Taiwan", "no_NO": "",
"pl_PL": "Tajwan", "pl_PL": "Tajwan",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Тайвань", "ru_RU": "Тайвань",
"sv_SE": "Taiwan", "sv_SE": "",
"th_TH": "ไต้หวัน", "th_TH": "ไต้หวัน",
"tr_TR": "Tayvan", "tr_TR": "Tayvan",
"uk_UA": "Тайвань", "uk_UA": "Тайвань",
@@ -3955,7 +3955,7 @@
"el_GR": "Ζώνη Ώρας Συστήματος:", "el_GR": "Ζώνη Ώρας Συστήματος:",
"en_US": "System Time Zone:", "en_US": "System Time Zone:",
"es_ES": "Zona horaria del sistema:", "es_ES": "Zona horaria del sistema:",
"fr_FR": "Fuseau horaire du système :", "fr_FR": "Fuseau horaire du système\u00A0:",
"he_IL": "אזור זמן מערכת:", "he_IL": "אזור זמן מערכת:",
"it_IT": "Fuso orario del sistema:", "it_IT": "Fuso orario del sistema:",
"ja_JP": "タイムゾーン:", "ja_JP": "タイムゾーン:",
@@ -4135,11 +4135,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "ダミー", "ja_JP": "ダミー",
"ko_KR": "더미", "ko_KR": "더미",
"no_NO": "Dummy", "no_NO": "",
"pl_PL": "Atrapa", "pl_PL": "Atrapa",
"pt_BR": "Nenhuma", "pt_BR": "Nenhuma",
"ru_RU": "Без звука", "ru_RU": "Без звука",
"sv_SE": "Dummy", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "Yapay", "tr_TR": "Yapay",
"uk_UA": "", "uk_UA": "",
@@ -4163,8 +4163,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "OpenAL", "ru_RU": "",
"sv_SE": "OpenAL", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4188,8 +4188,8 @@
"no_NO": "Lyd Inn/Ut", "no_NO": "Lyd Inn/Ut",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "SoundIO", "ru_RU": "",
"sv_SE": "SoundIO", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4213,8 +4213,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "SDL2", "ru_RU": "",
"sv_SE": "SDL2", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4230,12 +4230,12 @@
"el_GR": "Μικροδιορθώσεις", "el_GR": "Μικροδιορθώσεις",
"en_US": "Hacks", "en_US": "Hacks",
"es_ES": "", "es_ES": "",
"fr_FR": "Hacks", "fr_FR": "",
"he_IL": "האצות", "he_IL": "האצות",
"it_IT": "Espedienti", "it_IT": "Espedienti",
"ja_JP": "ハック", "ja_JP": "ハック",
"ko_KR": "핵", "ko_KR": "핵",
"no_NO": "Hacks", "no_NO": "",
"pl_PL": "Hacki", "pl_PL": "Hacki",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Хаки", "ru_RU": "Хаки",
@@ -4314,7 +4314,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "4ГиБ", "ru_RU": "4ГиБ",
"sv_SE": "4GiB", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "4Гб", "uk_UA": "4Гб",
@@ -4339,7 +4339,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "6ГиБ", "ru_RU": "6ГиБ",
"sv_SE": "6GiB", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "6Гб", "uk_UA": "6Гб",
@@ -4364,7 +4364,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "8ГиБ", "ru_RU": "8ГиБ",
"sv_SE": "8GiB", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "8Гб", "uk_UA": "8Гб",
@@ -4389,7 +4389,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "12ГиБ", "ru_RU": "12ГиБ",
"sv_SE": "12GiB", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "12Гб", "uk_UA": "12Гб",
@@ -4585,11 +4585,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "2배", "ko_KR": "2배",
"no_NO": "2x", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "2x", "ru_RU": "",
"sv_SE": "2x", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4610,11 +4610,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "4배", "ko_KR": "4배",
"no_NO": "4x", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "4x", "ru_RU": "",
"sv_SE": "4x", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4635,11 +4635,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "8배", "ko_KR": "8배",
"no_NO": "8x", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "8x", "ru_RU": "",
"sv_SE": "8x", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4660,11 +4660,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "16배", "ko_KR": "16배",
"no_NO": "16x", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "16x", "ru_RU": "",
"sv_SE": "16x", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4760,11 +4760,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "2배(1440p/2160p)", "ko_KR": "2배(1440p/2160p)",
"no_NO": "2x (1440p/2160p)", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "2x (1440p/2160p)", "ru_RU": "",
"sv_SE": "2x (1440p/2160p)", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4785,11 +4785,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "3배(2160p/3240p)", "ko_KR": "3배(2160p/3240p)",
"no_NO": "3x (2160p/3240p)", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "3x (2160p/3240p)", "ru_RU": "",
"sv_SE": "3x (2160p/3240p)", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4863,8 +4863,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "4:3", "ru_RU": "",
"sv_SE": "4:3", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4888,8 +4888,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "16:9", "ru_RU": "",
"sv_SE": "16:9", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4913,8 +4913,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "16:10", "ru_RU": "",
"sv_SE": "16:10", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4938,8 +4938,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "21:9", "ru_RU": "",
"sv_SE": "21:9", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -4960,11 +4960,11 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "", "ko_KR": "",
"no_NO": "32:9", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "32:9", "ru_RU": "",
"sv_SE": "32:9", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -5060,7 +5060,7 @@
"it_IT": "Log", "it_IT": "Log",
"ja_JP": "ロギング", "ja_JP": "ロギング",
"ko_KR": "로그 기록", "ko_KR": "로그 기록",
"no_NO": "Logging", "no_NO": "",
"pl_PL": "Dziennik zdarzeń", "pl_PL": "Dziennik zdarzeń",
"pt_BR": "Log", "pt_BR": "Log",
"ru_RU": "Журналирование", "ru_RU": "Журналирование",
@@ -5085,7 +5085,7 @@
"it_IT": "Log", "it_IT": "Log",
"ja_JP": "ロギング", "ja_JP": "ロギング",
"ko_KR": "로그 기록", "ko_KR": "로그 기록",
"no_NO": "Logging", "no_NO": "",
"pl_PL": "Dziennik zdarzeń", "pl_PL": "Dziennik zdarzeń",
"pt_BR": "Log", "pt_BR": "Log",
"ru_RU": "Журналирование", "ru_RU": "Журналирование",
@@ -6113,8 +6113,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "Pro Kontroler", "pl_PL": "Pro Kontroler",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Pro Controller", "ru_RU": "",
"sv_SE": "Pro Controller", "sv_SE": "",
"th_TH": "โปรคอนโทรลเลอร์", "th_TH": "โปรคอนโทรลเลอร์",
"tr_TR": "Profesyonel Kumanda", "tr_TR": "Profesyonel Kumanda",
"uk_UA": "Контролер Pro", "uk_UA": "Контролер Pro",
@@ -8088,8 +8088,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Enter", "ru_RU": "",
"sv_SE": "Enter", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8114,7 +8114,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Esc", "ru_RU": "Esc",
"sv_SE": "Escape", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "Esc", "tr_TR": "Esc",
"uk_UA": "", "uk_UA": "",
@@ -8163,8 +8163,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Tab", "ru_RU": "",
"sv_SE": "Tab", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8188,8 +8188,8 @@
"no_NO": "Tilbaketast", "no_NO": "Tilbaketast",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Backspace", "ru_RU": "",
"sv_SE": "Backspace", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "Geri tuşu", "tr_TR": "Geri tuşu",
"uk_UA": "", "uk_UA": "",
@@ -8213,8 +8213,8 @@
"no_NO": "Sett inn", "no_NO": "Sett inn",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Insert", "ru_RU": "",
"sv_SE": "Insert", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8238,8 +8238,8 @@
"no_NO": "Slett", "no_NO": "Slett",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Delete", "ru_RU": "",
"sv_SE": "Delete", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8263,8 +8263,8 @@
"no_NO": "Side opp", "no_NO": "Side opp",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Page Up", "ru_RU": "",
"sv_SE": "Page Up", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8288,8 +8288,8 @@
"no_NO": "Side ned", "no_NO": "Side ned",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Page Down", "ru_RU": "",
"sv_SE": "Page Down", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8313,8 +8313,8 @@
"no_NO": "Hjem", "no_NO": "Hjem",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Home", "ru_RU": "",
"sv_SE": "Home", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8338,8 +8338,8 @@
"no_NO": "Avslutt", "no_NO": "Avslutt",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "End", "ru_RU": "",
"sv_SE": "End", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8363,8 +8363,8 @@
"no_NO": "Skiftelås", "no_NO": "Skiftelås",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Caps Lock", "ru_RU": "",
"sv_SE": "Caps Lock", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8388,8 +8388,8 @@
"no_NO": "Rullelås", "no_NO": "Rullelås",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Scroll Lock", "ru_RU": "",
"sv_SE": "Scroll Lock", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8413,8 +8413,8 @@
"no_NO": "Skjermbilde", "no_NO": "Skjermbilde",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Print Screen", "ru_RU": "",
"sv_SE": "Print Screen", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8438,8 +8438,8 @@
"no_NO": "Stans midlertidig", "no_NO": "Stans midlertidig",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Pause", "ru_RU": "",
"sv_SE": "Pause", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8463,8 +8463,8 @@
"no_NO": "Numerisk Lås", "no_NO": "Numerisk Lås",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Num Lock", "ru_RU": "",
"sv_SE": "Num Lock", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8514,7 +8514,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 0", "ru_RU": "Блок цифр 0",
"sv_SE": "Keypad 0", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8539,7 +8539,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 1", "ru_RU": "Блок цифр 1",
"sv_SE": "Keypad 1", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8564,7 +8564,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 2", "ru_RU": "Блок цифр 2",
"sv_SE": "Keypad 2", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8589,7 +8589,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 3", "ru_RU": "Блок цифр 3",
"sv_SE": "Keypad 3", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8614,7 +8614,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 4", "ru_RU": "Блок цифр 4",
"sv_SE": "Keypad 4", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8639,7 +8639,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 5", "ru_RU": "Блок цифр 5",
"sv_SE": "Keypad 5", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8664,7 +8664,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 6", "ru_RU": "Блок цифр 6",
"sv_SE": "Keypad 6", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8689,7 +8689,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 7", "ru_RU": "Блок цифр 7",
"sv_SE": "Keypad 7", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8714,7 +8714,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 8", "ru_RU": "Блок цифр 8",
"sv_SE": "Keypad 8", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8739,7 +8739,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Блок цифр 9", "ru_RU": "Блок цифр 9",
"sv_SE": "Keypad 9", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8889,7 +8889,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Enter (блок цифр)", "ru_RU": "Enter (блок цифр)",
"sv_SE": "Keypad Enter", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -8913,7 +8913,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "0", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -8938,7 +8938,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "1", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -8963,7 +8963,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "2", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -8988,7 +8988,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "3", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9013,7 +9013,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "4", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9038,7 +9038,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "5", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9063,7 +9063,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "6", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9088,7 +9088,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "7", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9113,7 +9113,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "8", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9138,7 +9138,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "9", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9163,7 +9163,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "~", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9188,7 +9188,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "`", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9213,7 +9213,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "-", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9238,7 +9238,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "+", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9263,7 +9263,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "[", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9288,7 +9288,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "]", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9313,7 +9313,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": ";", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9363,7 +9363,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": ",", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9388,7 +9388,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": ".", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9413,7 +9413,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "/", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9738,7 +9738,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "-", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -9763,7 +9763,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "+", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "4", "tr_TR": "4",
@@ -9789,7 +9789,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Кнопка меню", "ru_RU": "Кнопка меню",
"sv_SE": "Guide", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "Rehber", "tr_TR": "Rehber",
"uk_UA": "", "uk_UA": "",
@@ -12438,7 +12438,7 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "{0}: {1}", "ru_RU": "",
"sv_SE": "", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
@@ -14289,7 +14289,7 @@
"pl_PL": "Seria Amiibo", "pl_PL": "Seria Amiibo",
"pt_BR": "Franquia Amiibo", "pt_BR": "Franquia Amiibo",
"ru_RU": "Серия Amiibo", "ru_RU": "Серия Amiibo",
"sv_SE": "Amiibo Series", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "Amiibo Serisi", "tr_TR": "Amiibo Serisi",
"uk_UA": "Серія Amiibo", "uk_UA": "Серія Amiibo",
@@ -15755,7 +15755,7 @@
"el_GR": "", "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.", "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.", "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": "", "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.", "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", "ja_JP": "レンダリングウインドウに適用するアスペクト比です.\n\nゲームにアスペクト比を変更する mod を使用している場合のみ変更してください.\n\nわからない場合は16:9のままにしておいてください.\n",
@@ -17426,8 +17426,8 @@
"ID": "TitleUpdateVersionLabel", "ID": "TitleUpdateVersionLabel",
"Translations": { "Translations": {
"ar_SA": "الإصدار: {0}", "ar_SA": "الإصدار: {0}",
"de_DE": "Version {0} - {1}", "de_DE": "",
"el_GR": "Version {0} - {1}", "el_GR": "",
"en_US": "Version {0} - {1}", "en_US": "Version {0} - {1}",
"es_ES": "Versión {0} - {1}", "es_ES": "Versión {0} - {1}",
"fr_FR": "", "fr_FR": "",
@@ -17439,7 +17439,7 @@
"pl_PL": "Wersja {0} - {1}", "pl_PL": "Wersja {0} - {1}",
"pt_BR": "Versão {0} - {1}", "pt_BR": "Versão {0} - {1}",
"ru_RU": "Версия {0} - {1}", "ru_RU": "Версия {0} - {1}",
"sv_SE": "Version {0} - {1}", "sv_SE": "",
"th_TH": "เวอร์ชั่น {0} - {1}", "th_TH": "เวอร์ชั่น {0} - {1}",
"tr_TR": "Sürüm {0} - {1}", "tr_TR": "Sürüm {0} - {1}",
"uk_UA": "Версія {0} - {1}", "uk_UA": "Версія {0} - {1}",
@@ -17664,7 +17664,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "Ryujinx - Informação", "pt_BR": "Ryujinx - Informação",
"ru_RU": "Ryujinx - Информация", "ru_RU": "Ryujinx - Информация",
"sv_SE": "Ryujinx - Info", "sv_SE": "",
"th_TH": "Ryujinx ข้อมูล", "th_TH": "Ryujinx ข้อมูล",
"tr_TR": "Ryujinx - Bilgi", "tr_TR": "Ryujinx - Bilgi",
"uk_UA": "Ryujin x - Інформація", "uk_UA": "Ryujin x - Інформація",
@@ -18813,8 +18813,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Amiibo", "ru_RU": "",
"sv_SE": "Amiibo", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -19435,7 +19435,7 @@
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
"ko_KR": "XCI 파일 트리머", "ko_KR": "XCI 파일 트리머",
"no_NO": "XCI File Trimmer", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Уменьшение размера XCI файлов", "ru_RU": "Уменьшение размера XCI файлов",
@@ -19639,7 +19639,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "{0:n0} Мб", "ru_RU": "{0:n0} Мб",
"sv_SE": "{0:n0} Mb", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "{0:n0} Мб", "uk_UA": "{0:n0} Мб",
@@ -20914,7 +20914,7 @@
"pl_PL": "Głoś", "pl_PL": "Głoś",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Громкость", "ru_RU": "Громкость",
"sv_SE": "Vol", "sv_SE": "",
"th_TH": "ระดับเสียง", "th_TH": "ระดับเสียง",
"tr_TR": "Ses", "tr_TR": "Ses",
"uk_UA": "Гуч.", "uk_UA": "Гуч.",
@@ -21055,7 +21055,7 @@
"el_GR": "Όνομα", "el_GR": "Όνομα",
"en_US": "Name", "en_US": "Name",
"es_ES": "Nombre", "es_ES": "Nombre",
"fr_FR": "Nom ", "fr_FR": "Nom\u00A0",
"he_IL": "שם", "he_IL": "שם",
"it_IT": "Nome", "it_IT": "Nome",
"ja_JP": "名称", "ja_JP": "名称",
@@ -21388,8 +21388,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "FSR", "ru_RU": "",
"sv_SE": "FSR", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -21888,8 +21888,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "ldn_mitm", "ru_RU": "",
"sv_SE": "ldn_mitm", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -21913,8 +21913,8 @@
"no_NO": "", "no_NO": "",
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "RyuLDN", "ru_RU": "",
"sv_SE": "RyuLDN", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
@@ -22214,7 +22214,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Вертикальная синхронизация:", "ru_RU": "Вертикальная синхронизация:",
"sv_SE": "VSync:", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "Вертикальна синхронізація (VSync):", "uk_UA": "Вертикальна синхронізація (VSync):",
@@ -22255,7 +22255,7 @@
"el_GR": "", "el_GR": "",
"en_US": "Switch", "en_US": "Switch",
"es_ES": "", "es_ES": "",
"fr_FR": "Switch", "fr_FR": "",
"he_IL": "", "he_IL": "",
"it_IT": "", "it_IT": "",
"ja_JP": "", "ja_JP": "",
@@ -22264,7 +22264,7 @@
"pl_PL": "", "pl_PL": "",
"pt_BR": "", "pt_BR": "",
"ru_RU": "Консоль", "ru_RU": "Консоль",
"sv_SE": "Switch", "sv_SE": "",
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",

View File

@@ -13,9 +13,13 @@
<DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes> <DefaultItemExcludes>$(DefaultItemExcludes);._*</DefaultItemExcludes>
</PropertyGroup> </PropertyGroup>
<Target Name="BuildValidationProj" BeforeTargets="BeforeRebuild"> <Target Name="BuildValidationProj" BeforeTargets="BeforeBuild">
<MSBuild Projects="..\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj" Targets="Rebuild"> <Message Text="Building Validation Project for $(TargetFramework)" Importance="high" Condition="'$(RuntimeIdentifier)' == ''" />
</MSBuild> <Message Text="Building Validation Project for $(TargetFramework) with runtime $(RuntimeIdentifier)" Importance="high" Condition="'$(RuntimeIdentifier)' != ''" />
<Exec WorkingDirectory="..\Ryujinx.BuildValidationTasks\" Command="dotnet restore Ryujinx.BuildValidationTasks.csproj --force --ucr true" Condition="'$(RuntimeIdentifier)' == ''" />
<Exec WorkingDirectory="..\Ryujinx.BuildValidationTasks\" Command="dotnet restore Ryujinx.BuildValidationTasks.csproj --force --runtime $(RuntimeIdentifier)" Condition="'$(RuntimeIdentifier)' != ''" />
<MSBuild Projects="..\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj" Properties="Configuration=Debug" />
</Target> </Target>
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$([MSBuild]::IsOSPlatform('OSX'))"> <Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$([MSBuild]::IsOSPlatform('OSX'))">