Compare commits

...

4 Commits

Author SHA1 Message Date
Lamparter
4860ca342c Merge branch 'WebApplet' into 'master'
Draft: Implement WebApplet

See merge request [ryubing/ryujinx!126](https://git.ryujinx.app/ryubing/ryujinx/-/merge_requests/126)
2025-09-03 22:18:02 +01:00
shinyoyo
1e340ce2f3 Update Simplified Chinese translation. (ryubing/ryujinx!139)
See merge request ryubing/ryujinx!139
2025-09-03 15:49:14 -05:00
Lamparter
af6d357d8a Move system language to language key helper 2025-08-29 10:29:41 +01:00
Lamparter
2fe0bcff12 Add WebView package 2025-08-29 10:29:41 +01:00
5 changed files with 49 additions and 40 deletions

View File

@ -58,5 +58,6 @@
<PackageVersion Include="System.IO.Hashing" Version="9.0.2" /> <PackageVersion Include="System.IO.Hashing" Version="9.0.2" />
<PackageVersion Include="System.Management" Version="9.0.2" /> <PackageVersion Include="System.Management" Version="9.0.2" />
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" /> <PackageVersion Include="UnicornEngine.Unicorn" Version="2.0.2-rc1-fb78016" />
<PackageVersion Include="WebViewControl-Avalonia" Version="3.120.10" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -88,7 +88,7 @@
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "Редактор Mii", "uk_UA": "Редактор Mii",
"zh_CN": "", "zh_CN": "Mii 编辑器",
"zh_TW": "" "zh_TW": ""
} }
}, },
@ -1063,7 +1063,7 @@
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "", "uk_UA": "",
"zh_CN": "", "zh_CN": "工具",
"zh_TW": "" "zh_TW": ""
} }
}, },
@ -1288,7 +1288,7 @@
"th_TH": "คำถามที่พบบ่อย & คู่มือ", "th_TH": "คำถามที่พบบ่อย & คู่มือ",
"tr_TR": "SSS & Rehberler", "tr_TR": "SSS & Rehberler",
"uk_UA": "FAQ & посібники", "uk_UA": "FAQ & посібники",
"zh_CN": "问答 & 指南", "zh_CN": "常见问题与指南",
"zh_TW": "常見問題 (FAQ) & 指南" "zh_TW": "常見問題 (FAQ) & 指南"
} }
}, },
@ -1313,7 +1313,7 @@
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "FAQ & Усунення несправностей", "uk_UA": "FAQ & Усунення несправностей",
"zh_CN": "", "zh_CN": "常见问题与疑难解答",
"zh_TW": "" "zh_TW": ""
} }
}, },
@ -2988,7 +2988,7 @@
"th_TH": "ตรวจสอบ & ลดขนาดไฟล์ XCI", "th_TH": "ตรวจสอบ & ลดขนาดไฟล์ XCI",
"tr_TR": "", "tr_TR": "",
"uk_UA": "Перевірка & нарізка XCI Файлу", "uk_UA": "Перевірка & нарізка XCI Файлу",
"zh_CN": "检查 & 瘦身 XCI 文件", "zh_CN": "检查并精简 XCI 文件",
"zh_TW": "檢查 & 修剪 XCI 檔案" "zh_TW": "檢查 & 修剪 XCI 檔案"
} }
}, },
@ -12088,7 +12088,7 @@
"th_TH": "เริ่ม", "th_TH": "เริ่ม",
"tr_TR": "Başlat", "tr_TR": "Başlat",
"uk_UA": "Запустити", "uk_UA": "Запустити",
"zh_CN": "开始", "zh_CN": "启动",
"zh_TW": "開始" "zh_TW": "開始"
} }
}, },
@ -19263,7 +19263,7 @@
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "Виберіть ФАЙЛ, сумісний із Switch, для завантаження", "uk_UA": "Виберіть ФАЙЛ, сумісний із Switch, для завантаження",
"zh_CN": "", "zh_CN": "请选择要加载的 Switch 兼容文件",
"zh_TW": "" "zh_TW": ""
} }
}, },
@ -19288,7 +19288,7 @@
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "Виберіть РОЗПАКОВАНИЙ сумісний із Switch додаток для завантаження", "uk_UA": "Виберіть РОЗПАКОВАНИЙ сумісний із Switch додаток для завантаження",
"zh_CN": "", "zh_CN": "请选择要加载的已解包的 Switch 兼容应用程序",
"zh_TW": "" "zh_TW": ""
} }
}, },
@ -19313,7 +19313,7 @@
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "Виберіть одну або кілька ПАПОК для масового завантаження оновлень титулів", "uk_UA": "Виберіть одну або кілька ПАПОК для масового завантаження оновлень титулів",
"zh_CN": "", "zh_CN": "请选择一个或多个文件夹来批量加载游戏更新",
"zh_TW": "" "zh_TW": ""
} }
}, },
@ -19338,7 +19338,7 @@
"th_TH": "", "th_TH": "",
"tr_TR": "", "tr_TR": "",
"uk_UA": "Виберіть одну або кілька ПАПОК для масового завантаження DLC", "uk_UA": "Виберіть одну або кілька ПАПОК для масового завантаження DLC",
"zh_CN": "", "zh_CN": "请选择一个或多个文件夹来批量加载 DLC",
"zh_TW": "" "zh_TW": ""
} }
}, },

View File

@ -8,7 +8,7 @@ using LibHac.Tools.FsSystem.NcaUtils;
using Ryujinx.Common.Helper; using Ryujinx.Common.Helper;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.HLE.HOS.Services.Am.AppletAE; using Ryujinx.HLE.HOS.Services.Am.AppletAE;
using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -74,34 +74,6 @@ namespace Ryujinx.HLE.HOS.Applets.Error
return ((resultCode & 0x1FF) + 2000, (resultCode >> 9) & 0x3FFF); return ((resultCode & 0x1FF) + 2000, (resultCode >> 9) & 0x3FFF);
} }
private static string SystemLanguageToLanguageKey(SystemLanguage systemLanguage)
{
return systemLanguage switch
{
#pragma warning disable IDE0055 // Disable formatting
SystemLanguage.Japanese => "ja",
SystemLanguage.AmericanEnglish => "en-US",
SystemLanguage.French => "fr",
SystemLanguage.German => "de",
SystemLanguage.Italian => "it",
SystemLanguage.Spanish => "es",
SystemLanguage.Chinese => "zh-Hans",
SystemLanguage.Korean => "ko",
SystemLanguage.Dutch => "nl",
SystemLanguage.Portuguese => "pt",
SystemLanguage.Russian => "ru",
SystemLanguage.Taiwanese => "zh-HansT",
SystemLanguage.BritishEnglish => "en-GB",
SystemLanguage.CanadianFrench => "fr-CA",
SystemLanguage.LatinAmericanSpanish => "es-419",
SystemLanguage.SimplifiedChinese => "zh-Hans",
SystemLanguage.TraditionalChinese => "zh-Hant",
SystemLanguage.BrazilianPortuguese => "pt-BR",
_ => "en-US",
#pragma warning restore IDE0055
};
}
private static string CleanText(string value) private static string CleanText(string value)
{ {
return Patterns.CleanText.Replace(value, string.Empty).Replace("\0", string.Empty); return Patterns.CleanText.Replace(value, string.Empty).Replace("\0", string.Empty);
@ -114,7 +86,7 @@ namespace Ryujinx.HLE.HOS.Applets.Error
using LibHac.Fs.IStorage ncaFileStream = new LocalStorage(FileSystem.VirtualFileSystem.SwitchPathToSystemPath(binaryTitleContentPath), FileAccess.Read, FileMode.Open); using LibHac.Fs.IStorage ncaFileStream = new LocalStorage(FileSystem.VirtualFileSystem.SwitchPathToSystemPath(binaryTitleContentPath), FileAccess.Read, FileMode.Open);
Nca nca = new(_horizon.Device.FileSystem.KeySet, ncaFileStream); Nca nca = new(_horizon.Device.FileSystem.KeySet, ncaFileStream);
IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _horizon.FsIntegrityCheckLevel); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _horizon.FsIntegrityCheckLevel);
string languageCode = SystemLanguageToLanguageKey(_horizon.State.DesiredSystemLanguage); string languageCode = GlobalizationUtils.SystemLanguageToLanguageKey(_horizon.State.DesiredSystemLanguage);
string filePath = $"/{module}/{description:0000}/{languageCode}_{key}"; string filePath = $"/{module}/{description:0000}/{languageCode}_{key}";
if (romfs.FileExists(filePath)) if (romfs.FileExists(filePath))

View File

@ -0,0 +1,35 @@
using Ryujinx.HLE.HOS.SystemState;
namespace Ryujinx.HLE.Utilities
{
static class GlobalizationUtils
{
public static string SystemLanguageToLanguageKey(SystemLanguage systemLanguage)
{
return systemLanguage switch
{
#pragma warning disable IDE0055 // Disable formatting
SystemLanguage.Japanese => "ja",
SystemLanguage.AmericanEnglish => "en-US",
SystemLanguage.French => "fr",
SystemLanguage.German => "de",
SystemLanguage.Italian => "it",
SystemLanguage.Spanish => "es",
SystemLanguage.Chinese => "zh-Hans",
SystemLanguage.Korean => "ko",
SystemLanguage.Dutch => "nl",
SystemLanguage.Portuguese => "pt",
SystemLanguage.Russian => "ru",
SystemLanguage.Taiwanese => "zh-HansT",
SystemLanguage.BritishEnglish => "en-GB",
SystemLanguage.CanadianFrench => "fr-CA",
SystemLanguage.LatinAmericanSpanish => "es-419",
SystemLanguage.SimplifiedChinese => "zh-Hans",
SystemLanguage.TraditionalChinese => "zh-Hant",
SystemLanguage.BrazilianPortuguese => "pt-BR",
_ => "en-US",
#pragma warning restore IDE0055
};
}
}
}

View File

@ -74,6 +74,7 @@
<PackageReference Include="Silk.NET.Vulkan.Extensions.KHR" /> <PackageReference Include="Silk.NET.Vulkan.Extensions.KHR" />
<PackageReference Include="SPB" /> <PackageReference Include="SPB" />
<PackageReference Include="SharpZipLib" /> <PackageReference Include="SharpZipLib" />
<PackageReference Include="WebViewControl-Avalonia" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>