mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-06-15 08:49:15 +00:00
Compare commits
14 Commits
Canary-1.3
...
Canary-1.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e777e3f93b | ||
|
|
7b19e041cb | ||
|
|
e7a3c94b9c | ||
|
|
223f20868a | ||
|
|
8fe1a9c672 | ||
|
|
aad1a71f68 | ||
|
|
25120667f1 | ||
|
|
9061c3a2b3 | ||
|
|
963f024838 | ||
|
|
c263c211bd | ||
|
|
77c9a50f59 | ||
|
|
a9ce288632 | ||
|
|
9b88fee78f | ||
|
|
04574103cf |
@@ -3,12 +3,12 @@
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageVersion Include="Avalonia" Version="11.3.15" />
|
||||
<PackageVersion Include="Avalonia" Version="11.3.17" />
|
||||
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="11.3.13" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="11.3.15" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="11.3.15" />
|
||||
<PackageVersion Include="Avalonia.Markup.Xaml.Loader" Version="11.3.15" />
|
||||
<PackageVersion Include="SharpCompress" Version="0.48.1" />
|
||||
<PackageVersion Include="Avalonia.Desktop" Version="11.3.17" />
|
||||
<PackageVersion Include="Avalonia.Diagnostics" Version="11.3.17" />
|
||||
<PackageVersion Include="Avalonia.Markup.Xaml.Loader" Version="11.3.17" />
|
||||
<PackageVersion Include="SharpCompress" Version="0.49.1" />
|
||||
<PackageVersion Include="Svg.Controls.Avalonia" Version="11.3.9.5" />
|
||||
<PackageVersion Include="Svg.Controls.Skia.Avalonia" Version="11.3.9.5" />
|
||||
<PackageVersion Include="Microsoft.Build.Framework" Version="17.11.4" />
|
||||
@@ -27,7 +27,7 @@
|
||||
<PackageVersion Include="Humanizer" Version="2.14.1" />
|
||||
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
|
||||
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
||||
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.18.0" />
|
||||
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="8.19.1" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
|
||||
<PackageVersion Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
|
||||
<PackageVersion Include="MsgPack.Cli" Version="1.0.1" />
|
||||
@@ -43,7 +43,7 @@
|
||||
<PackageVersion Include="Open.NAT.Core" Version="2.1.0.5" />
|
||||
<!-- Ryujinx.Audio.OpenAL.Dependencies is from the original project, last updated 12/30/20 -->
|
||||
<!--<PackageVersion Include="Ryujinx.Audio.OpenAL.Dependencies" Version="1.21.0.1" />-->
|
||||
<PackageVersion Include="Ryujinx.Audio.OpenAL" Version="1.25.1" />
|
||||
<PackageVersion Include="Ryujinx.Audio.OpenAL" Version="1.25.2" />
|
||||
<PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies.AllArch" Version="6.1.4-build6" />
|
||||
<PackageVersion Include="Ryujinx.Graphics.Vulkan.MoltenVK" Version="1.4.2-ryujinx.3" />
|
||||
<PackageVersion Include="Ryujinx.LibHac" Version="0.21.0-alpha.133" />
|
||||
@@ -51,9 +51,9 @@
|
||||
<PackageVersion Include="Ryujinx.Systems.Update.Common" Version="2.0.6" />
|
||||
<PackageVersion Include="Gommon" Version="2.8.1.2" />
|
||||
<PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
|
||||
<PackageVersion Include="Sep" Version="0.14.1" />
|
||||
<PackageVersion Include="shaderc.net" Version="0.1.0" />
|
||||
<PackageVersion Include="Sep" Version="0.15.0" />
|
||||
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageVersion Include="Silk.NET.Shaderc" Version="2.23.0" />
|
||||
<PackageVersion Include="Silk.NET.Vulkan" Version="2.23.0" />
|
||||
<PackageVersion Include="Silk.NET.Vulkan.Extensions.EXT" Version="2.23.0" />
|
||||
<PackageVersion Include="Silk.NET.Vulkan.Extensions.KHR" Version="2.23.0" />
|
||||
@@ -63,6 +63,6 @@
|
||||
<PackageVersion Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.9" />
|
||||
<PackageVersion Include="SPB" Version="0.0.4-build32" />
|
||||
<PackageVersion Include="System.IO.Hashing" Version="9.0.15" />
|
||||
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.1.3" />
|
||||
<PackageVersion Include="UnicornEngine.Unicorn" Version="2.1.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
10
README.md
10
README.md
@@ -40,8 +40,14 @@
|
||||
|
||||
## Usage
|
||||
|
||||
To run this emulator, your PC must be equipped with at least 8GiB of RAM;
|
||||
failing to meet this requirement may result in a poor gameplay experience or unexpected crashes.
|
||||
To run this emulator, your PC must be equipped with at least:
|
||||
- 8GiB of RAM
|
||||
- 6 cores
|
||||
- A GPU released within the last 10 years.
|
||||
- OpenGL 4.6 | Vulkan 1.4
|
||||
- Windows 10 version 20H1 | macOS Big Sur (Apple Silicon)
|
||||
|
||||
Failing to meet these requirements may result in a poor gameplay experience or unexpected crashes.
|
||||
|
||||
## Latest build
|
||||
|
||||
|
||||
104
assets/Locales/Dialog_ContentLoading.json
Normal file
104
assets/Locales/Dialog_ContentLoading.json
Normal file
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "UpdatesAddedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Updates Added: {0}",
|
||||
"es_ES": "Actualizaciones Añadidas: {0}",
|
||||
"fr_FR": "Mises à Jour Ajoutées : {0}",
|
||||
"he_IL": "",
|
||||
"it_IT": "Aggiornamenti aggiunti: {0}",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "추가된 업데이트: {0}",
|
||||
"no_NO": "Oppdateringer lagt til: {0}",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Atualizações adicionadas: {0}",
|
||||
"ru_RU": "Добавлено обновлений: {0}",
|
||||
"sv_SE": "Tillagda uppdateringar: {0}",
|
||||
"th_TH": "การอัปเดตที่เพิ่มเข้ามา: {0}",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Додані оновлення: {0}",
|
||||
"zh_CN": "已添加更新:{0}",
|
||||
"zh_TW": "已新增更新:{0}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "UpdatesRemovedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Updates Removed: {0}",
|
||||
"es_ES": "Actualizaciones Eliminadas: {0}",
|
||||
"fr_FR": "Mises à Jour Supprimées : {0}",
|
||||
"he_IL": "",
|
||||
"it_IT": "Aggiornamenti rimossi: {0}",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "제거된 업데이트: {0}",
|
||||
"no_NO": "Fjernede oppdateringer: {0}",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Atualizações removidas: {0}",
|
||||
"ru_RU": "Удалено обновлений: {0}",
|
||||
"sv_SE": "Borttagna uppdateringar: {0}",
|
||||
"th_TH": "การอัปเดตที่ถูกลบ: {0}",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Видалені оновлення: {0}",
|
||||
"zh_CN": "已移除更新:{0}",
|
||||
"zh_TW": "已移除更新:{0}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DLCAddedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "DLC Added: {0}",
|
||||
"es_ES": "DLC Añadidos: {0}",
|
||||
"fr_FR": "DLC Ajoutés : {0}",
|
||||
"he_IL": "",
|
||||
"it_IT": "DLC aggiunti: {0}",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "추가된 DLC: {0}",
|
||||
"no_NO": "DLC lagt til: {0}",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "DLC adicionados: {0}",
|
||||
"ru_RU": "Добавлено DLC: {0}",
|
||||
"sv_SE": "Tillagda DLC: {0}",
|
||||
"th_TH": "DLC ที่เพิ่มเข้ามา: {0}",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Додані DLC: {0}",
|
||||
"zh_CN": "已添加 DLC:{0}",
|
||||
"zh_TW": "已新增 DLC:{0}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DLCRemovedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "DLC Removed: {0}",
|
||||
"es_ES": "DLC Eliminados: {0}",
|
||||
"fr_FR": "DLC Supprimés : {0}",
|
||||
"he_IL": "",
|
||||
"it_IT": "DLC rimossi: {0}",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "제거된 DLC: {0}",
|
||||
"no_NO": "DLC fjernet: {0}",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "DLC removidos: {0}",
|
||||
"ru_RU": "Удалено DLC: {0}",
|
||||
"sv_SE": "DLC borttaget: {0}",
|
||||
"th_TH": "ลบ DLC: {0}",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Видалено DLC: {0}",
|
||||
"zh_CN": "已移除 DLC:{0}",
|
||||
"zh_TW": "已移除 DLC:{0}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
79
assets/Locales/Dialog_FileMenu.json
Normal file
79
assets/Locales/Dialog_FileMenu.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "LoadApplicationFromFileFilePickerTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Select a Switch application file to load",
|
||||
"es_ES": "Selecciona un archivo de aplicación de Switch para cargar",
|
||||
"fr_FR": "Sélectionnez un fichier d’application Switch à charger",
|
||||
"he_IL": "",
|
||||
"it_IT": "Seleziona un file applicazione Switch da caricare",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "로드할 Switch 애플리케이션 파일을 선택하세요",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Selecione um arquivo de aplicativo Switch para carregar",
|
||||
"ru_RU": "Выберите файл приложения Switch для загрузки",
|
||||
"sv_SE": "Välj en Switch-applikationsfil att läsa in",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Виберіть файл застосунку Switch для завантаження",
|
||||
"zh_CN": "请选择要加载的 Switch 应用程序文件",
|
||||
"zh_TW": "請選擇要載入的 Switch 應用程式檔案"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LoadUnpackedApplicationFromFolderFilePickerTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Select a folder containing an unpacked Switch application to load",
|
||||
"es_ES": "Selecciona una carpeta que contenga una aplicación de Switch descomprimida para cargar",
|
||||
"fr_FR": "Sélectionnez un dossier contenant une application Switch décompressée à charger",
|
||||
"he_IL": "",
|
||||
"it_IT": "Seleziona una cartella contenente un’applicazione Switch non compressa da caricare",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "압축 해제된 Switch 애플리케이션이 포함된 폴더를 선택하여 로드하세요",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Selecione uma pasta que contenha um aplicativo Switch descompactado para carregar",
|
||||
"ru_RU": "Выберите папку, содержащую распакованное приложение Switch, для загрузки",
|
||||
"sv_SE": "Välj en mapp som innehåller en uppackad Switch-applikation att läsa in",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Виберіть папку, що містить розпакований застосунок Switch, для завантаження",
|
||||
"zh_CN": "请选择包含未打包 Switch 应用程序的文件夹以加载",
|
||||
"zh_TW": "請選擇包含未解壓縮 Switch 應用程式的資料夾以載入"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LoadUpdatesAndDLCFromFolderFilePickerTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Select one or more folders to bulk load updates and DLC from",
|
||||
"es_ES": "Selecciona una o más carpetas para cargar de forma masiva actualizaciones y DLC",
|
||||
"fr_FR": "Sélectionnez un ou plusieurs dossiers pour charger en masse des mises à jour et des DLC",
|
||||
"he_IL": "",
|
||||
"it_IT": "Seleziona una o più cartelle da cui caricare in blocco aggiornamenti e DLC",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "업데이트 및 DLC를 대량으로 로드할 폴더를 하나 이상 선택하세요",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Selecione uma ou mais pastas para carregar em massa atualizações e DLC",
|
||||
"ru_RU": "Выберите одну или несколько папок для массовой загрузки обновлений и DLC",
|
||||
"sv_SE": "Välj en eller flera mappar för att massinläsa uppdateringar och DLC",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Виберіть одну або кілька папок для масового завантаження оновлень і DLC",
|
||||
"zh_CN": "请选择一个或多个文件夹以批量加载更新和 DLC",
|
||||
"zh_TW": "請選擇一個或多個資料夾以批次載入更新與 DLC"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
104
assets/Locales/Dialog_FileTypeAssociations.json
Normal file
104
assets/Locales/Dialog_FileTypeAssociations.json
Normal file
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "AssociationSuccessMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "تم ربط أنواع الملفات بنجاح.",
|
||||
"de_DE": "Dateitypen erfolgreich zugeordnet.",
|
||||
"el_GR": "Οι τύποι αρχείων συσχετίστηκαν με επιτυχία.",
|
||||
"en_US": "Successfully associated file types.",
|
||||
"es_ES": "¡Tipos de archivo asociados con éxito.",
|
||||
"fr_FR": "Types de fichiers associés avec succès.",
|
||||
"he_IL": "שיוך סוגי הקבצים בוצע בהצלחה.",
|
||||
"it_IT": "Tipi di file associati con successo.",
|
||||
"ja_JP": "ファイルの種類の関連付けに成功しました。",
|
||||
"ko_KR": "파일 형식 연결에 성공했습니다.",
|
||||
"no_NO": "Filtyper ble tilknyttet.",
|
||||
"pl_PL": "Pomyślnie powiązano typy plików.",
|
||||
"pt_BR": "Tipos de arquivo associados com sucesso.",
|
||||
"ru_RU": "Типы файлов успешно связаны.",
|
||||
"sv_SE": "Filtyper har kopplats.",
|
||||
"th_TH": "เชื่อมโยงประเภทไฟล์สำเร็จแล้ว",
|
||||
"tr_TR": "Dosya türleri başarıyla ilişkilendirildi.",
|
||||
"uk_UA": "Типи файлів успішно пов’язані.",
|
||||
"zh_CN": "文件类型关联成功。",
|
||||
"zh_TW": "檔案類型關聯成功。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "RemoveAssociationSuccessMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "تمت إزالة ارتباطات أنواع الملفات بنجاح.",
|
||||
"de_DE": "Dateitypzuordnungen erfolgreich entfernt.",
|
||||
"el_GR": "Οι συσχετίσεις τύπων αρχείων αφαιρέθηκαν με επιτυχία.",
|
||||
"en_US": "Successfully removed file type associations.",
|
||||
"es_ES": "Asociaciones de tipos de archivo eliminadas con éxito.",
|
||||
"fr_FR": "Associations de types de fichiers supprimées avec succès.",
|
||||
"he_IL": "שיוכי סוגי הקבצים הוסרו בהצלחה.",
|
||||
"it_IT": "Associazioni dei tipi di file rimosse con successo.",
|
||||
"ja_JP": "ファイルの種類の関連付けの削除に成功しました。",
|
||||
"ko_KR": "파일 형식 연결이 성공적으로 제거되었습니다.",
|
||||
"no_NO": "Filtype-tilknytninger ble fjernet.",
|
||||
"pl_PL": "Pomyślnie usunięto skojarzenia typów plików.",
|
||||
"pt_BR": "Associações de tipos de arquivo removidas com sucesso.",
|
||||
"ru_RU": "Связи типов файлов успешно удалены.",
|
||||
"sv_SE": "Filtypsassociationer har tagits bort.",
|
||||
"th_TH": "ลบการเชื่อมโยงประเภทไฟล์สำเร็จแล้ว",
|
||||
"tr_TR": "Dosya türü ilişkilendirmeleri başarıyla kaldırıldı.",
|
||||
"uk_UA": "Прив’язки типів файлів успішно видалено.",
|
||||
"zh_CN": "文件类型关联已成功移除。",
|
||||
"zh_TW": "檔案類型關聯已成功移除。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AssociationFailedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "فشل ربط أنواع الملفات.",
|
||||
"de_DE": "Fehler beim Zuordnen der Dateitypen.",
|
||||
"el_GR": "Απέτυχε η συσχέτιση των τύπων αρχείων.",
|
||||
"en_US": "Failed to associate file types.",
|
||||
"es_ES": "No se pudieron asociar los tipos de archivo.",
|
||||
"fr_FR": "Échec de l’association des types de fichiers.",
|
||||
"he_IL": "שיוך סוגי הקבצים נכשל.",
|
||||
"it_IT": "Associazione dei tipi di file non riuscita.",
|
||||
"ja_JP": "ファイルの種類の関連付けに失敗しました。",
|
||||
"ko_KR": "파일 형식 연결에 실패했습니다.",
|
||||
"no_NO": "Klarte ikke å tilknytte filtyper.",
|
||||
"pl_PL": "Nie udało się powiązać typów plików.",
|
||||
"pt_BR": "Falha ao associar tipos de arquivo.",
|
||||
"ru_RU": "Не удалось связать типы файлов.",
|
||||
"sv_SE": "Det gick inte att koppla filtyper.",
|
||||
"th_TH": "เชื่อมโยงประเภทไฟล์ไม่สำเร็จ",
|
||||
"tr_TR": "Dosya türleri ilişkilendirilemedi.",
|
||||
"uk_UA": "Не вдалося пов’язати типи файлів.",
|
||||
"zh_CN": "文件类型关联失败。",
|
||||
"zh_TW": "檔案類型關聯失敗。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "RemoveAssociationFailedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "فشلت إزالة ارتباطات أنواع الملفات.",
|
||||
"de_DE": "Das Entfernen der Dateitypzuordnungen ist fehlgeschlagen.",
|
||||
"el_GR": "Η αφαίρεση των συσχετίσεων τύπων αρχείων απέτυχε.",
|
||||
"en_US": "Failed to remove file type associations.",
|
||||
"es_ES": "No se pudieron eliminar las asociaciones de tipos de archivo.",
|
||||
"fr_FR": "Échec de la suppression des associations de types de fichiers.",
|
||||
"he_IL": "הסרת שיוכי סוגי הקבצים נכשלה.",
|
||||
"it_IT": "Rimozione delle associazioni dei tipi di file non riuscita.",
|
||||
"ja_JP": "ファイルの種類の関連付けの削除に失敗しました。",
|
||||
"ko_KR": "파일 형식 연결 제거에 실패했습니다.",
|
||||
"no_NO": "Fjerning av filtype-tilknytninger mislyktes.",
|
||||
"pl_PL": "Nie udało się usunąć skojarzeń typów plików.",
|
||||
"pt_BR": "Falha ao remover associações de tipos de arquivo.",
|
||||
"ru_RU": "Не удалось удалить связи типов файлов.",
|
||||
"sv_SE": "Det gick inte att ta bort filtypsassociationer.",
|
||||
"th_TH": "ไม่สามารถลบการเชื่อมโยงประเภทไฟล์ได้",
|
||||
"tr_TR": "Dosya türü ilişkilendirmeleri kaldırılamadı.",
|
||||
"uk_UA": "Не вдалося видалити прив’язки типів файлів.",
|
||||
"zh_CN": "文件类型关联移除失败。",
|
||||
"zh_TW": "無法移除檔案類型關聯。"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,55 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "NoApplicationFoundInFile",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "Keine Anwendungen in ausgewählter Datei gefunden.",
|
||||
"el_GR": "",
|
||||
"en_US": "No applications found in selected file.",
|
||||
"es_ES": "No se encontraron aplicaciones en el archivo seleccionado.",
|
||||
"fr_FR": "Aucune application trouvée dans le fichier sélectionné.",
|
||||
"he_IL": "",
|
||||
"it_IT": "Nessuna applicazione trovata nel file selezionato.",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "선택한 파일에서 앱을 찾을 수 없습니다.",
|
||||
"no_NO": "Ingen apper ble funnet i valgt fil.",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Nenhum aplicativo encontrado no arquivo selecionado.",
|
||||
"ru_RU": "Приложений в выбранном файле не найдены",
|
||||
"sv_SE": "Inga applikationer hittades i vald fil.",
|
||||
"th_TH": "ไม่พบแอปพลิเคชั่นจากไฟล์ที่เลือก",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "У вибраному файлі не знайдено жодних додатків.",
|
||||
"zh_CN": "未发现应用",
|
||||
"zh_TW": "未能從已選擇的檔案中找到應用程式。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "NoUnpackedApplicationFoundInFolder",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Please select an unpacked application folder with a valid ExeFS or NSO/NRO.",
|
||||
"es_ES": "",
|
||||
"fr_FR": "Veuillez sélectionner un répertoire d’application décompressée contenant un ExeFS valide ou NSO/NRO.",
|
||||
"he_IL": "",
|
||||
"it_IT": "",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "",
|
||||
"ru_RU": "Пожалуйста, выберите папку распакованного приложения с корректным ExeFS или NSO/NRO",
|
||||
"sv_SE": "",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "NoKeysFound",
|
||||
"Translations": {
|
||||
|
||||
@@ -1,78 +1,278 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "ManageFileTypes",
|
||||
"ID": "FileLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "إدارة أنواع الملفات",
|
||||
"de_DE": "Dateitypen verwalten",
|
||||
"el_GR": "Διαχείριση τύπων αρχείων",
|
||||
"en_US": "Manage File Types",
|
||||
"es_ES": "Administrar Tipos de Archivo",
|
||||
"fr_FR": "Gérer les Types de Fichiers",
|
||||
"he_IL": "ניהול סוגי קבצים",
|
||||
"it_IT": "Gestisci i tipi di file",
|
||||
"ja_JP": "ファイル形式を管理",
|
||||
"ko_KR": "파일 형식 관리",
|
||||
"no_NO": "Behandle filtyper",
|
||||
"pl_PL": "Zarządzaj rodzajami plików",
|
||||
"pt_BR": "Gerenciar Tipos de Arquivos",
|
||||
"ru_RU": "Управление типами файлов",
|
||||
"sv_SE": "Hantera filtyper",
|
||||
"th_TH": "จัดการประเภทไฟล์",
|
||||
"tr_TR": "Dosya uzantılarını yönet",
|
||||
"uk_UA": "Керувати типами файлів",
|
||||
"zh_CN": "管理文件扩展名",
|
||||
"zh_TW": "管理檔案類型"
|
||||
"ar_SA": "_ملف",
|
||||
"de_DE": "_Datei",
|
||||
"el_GR": "_Αρχείο",
|
||||
"en_US": "_File",
|
||||
"es_ES": "_Archivo",
|
||||
"fr_FR": "_Fichier",
|
||||
"he_IL": "_קובץ",
|
||||
"it_IT": "_Archivio",
|
||||
"ja_JP": "ファイル(_F)",
|
||||
"ko_KR": "파일(_F)",
|
||||
"no_NO": "_Fil",
|
||||
"pl_PL": "_Plik",
|
||||
"pt_BR": "_Arquivo",
|
||||
"ru_RU": "_Файл",
|
||||
"sv_SE": "_Arkiv",
|
||||
"th_TH": "ไฟล์",
|
||||
"tr_TR": "_Dosya",
|
||||
"uk_UA": "_Файл",
|
||||
"zh_CN": "文件(_F)",
|
||||
"zh_TW": "檔案(_F)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "InstallFileTypes",
|
||||
"ID": "LoadApplicationFromFileButton",
|
||||
"Translations": {
|
||||
"ar_SA": "تثبيت أنواع الملفات",
|
||||
"de_DE": "Dateitypen installieren",
|
||||
"el_GR": "Εγκαταστήσετε τύπους αρχείων.",
|
||||
"en_US": "Install File Types",
|
||||
"es_ES": "Instalar Tipos de Archivo",
|
||||
"fr_FR": "Installer des Types de Fichiers",
|
||||
"he_IL": "סוגי קבצי התקנה",
|
||||
"it_IT": "Installa i tipi di file",
|
||||
"ja_JP": "ファイル形式をインストール",
|
||||
"ko_KR": "파일 형식 설치",
|
||||
"no_NO": "Installer filtyper",
|
||||
"pl_PL": "Typy plików instalacyjnych",
|
||||
"pt_BR": "Instalar tipos de arquivos",
|
||||
"ru_RU": "Установить типы файлов",
|
||||
"sv_SE": "Installera filtyper",
|
||||
"th_TH": "ติดตั้งประเภทไฟล์",
|
||||
"tr_TR": "Dosya uzantılarını yükle",
|
||||
"uk_UA": "Встановити типи файлів",
|
||||
"zh_CN": "关联文件扩展名",
|
||||
"zh_TW": "安裝檔案類型"
|
||||
"ar_SA": "_تحميل التطبيق...",
|
||||
"de_DE": "_Anwendung laden...",
|
||||
"el_GR": "_Φόρτωση εφαρμογής...",
|
||||
"en_US": "_Load Application...",
|
||||
"es_ES": "_Cargar Aplicación...",
|
||||
"fr_FR": "_Charger l’Application...",
|
||||
"he_IL": "_טען יישום...",
|
||||
"it_IT": "_Carica applicazione...",
|
||||
"ja_JP": "アプリケーションをロード(_L)...",
|
||||
"ko_KR": "앱 불러오기(_L)...",
|
||||
"no_NO": "_Last inn program...",
|
||||
"pl_PL": "_Załaduj aplikację...",
|
||||
"pt_BR": "_Carregar aplicativo...",
|
||||
"ru_RU": "_Загрузить приложение...",
|
||||
"sv_SE": "_Läs in applikation...",
|
||||
"th_TH": "_โหลดแอปพลิเคชัน...",
|
||||
"tr_TR": "_Uygulamayı yükle...",
|
||||
"uk_UA": "_Завантажити застосунок...",
|
||||
"zh_CN": "加载应用程序(_L)...",
|
||||
"zh_TW": "載入應用程式(_L)..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "UninstallFileTypes",
|
||||
"ID": "LoadUnpackedGameFromFolderButton",
|
||||
"Translations": {
|
||||
"ar_SA": "إزالة أنواع الملفات",
|
||||
"de_DE": "Dateitypen deinstallieren",
|
||||
"el_GR": "Απεγκαταστήσετε τύπους αρχείων",
|
||||
"en_US": "Uninstall File Types",
|
||||
"es_ES": "Desinstalar Tipos de Archivo",
|
||||
"fr_FR": "Désinstaller des Types de Fichiers",
|
||||
"he_IL": "סוגי קבצי הסרה",
|
||||
"it_IT": "Disinstalla i tipi di file",
|
||||
"ja_JP": "ファイル形式をアンインストール",
|
||||
"ko_KR": "파일 형식 제거",
|
||||
"no_NO": "Avinstaller filtyper",
|
||||
"pl_PL": "Typy plików dezinstalacyjnych",
|
||||
"pt_BR": "Desinstalar tipos de arquivos",
|
||||
"ru_RU": "Удалить типы файлов",
|
||||
"sv_SE": "Avinstallera filtyper",
|
||||
"th_TH": "ถอนการติดตั้งประเภทไฟล์",
|
||||
"tr_TR": "Dosya uzantılarını kaldır",
|
||||
"uk_UA": "Видалити типи файлів",
|
||||
"zh_CN": "取消关联扩展名",
|
||||
"zh_TW": "移除檔案類型"
|
||||
"ar_SA": "تحميل لُعْبَة غير محزومة...",
|
||||
"de_DE": "_Entpacktes Spiel laden...",
|
||||
"el_GR": "_Φόρτωση Απακετάριστου Παιχνιδιού...",
|
||||
"en_US": "Load _Unpacked Game...",
|
||||
"es_ES": "Cargar Juego _Desempaquetado...",
|
||||
"fr_FR": "Charger un Jeu Décompressé...",
|
||||
"he_IL": "טען משחק _שאינו ארוז...",
|
||||
"it_IT": "Carica gioco _estratto...",
|
||||
"ja_JP": "_展開されたゲームをロード...",
|
||||
"ko_KR": "압축 푼 게임 불러오기(_U)...",
|
||||
"no_NO": "Last inn _upakket spill...",
|
||||
"pl_PL": "Załaduj _rozpakowaną grę...",
|
||||
"pt_BR": "Abrir Jogo _Extraído...",
|
||||
"ru_RU": "Загрузить _распакованную игру...",
|
||||
"sv_SE": "Läs in _uppackat spel...",
|
||||
"th_TH": "โหลดเกมที่แตกไฟล์แล้ว...",
|
||||
"tr_TR": "_Sıkıştırılmamış Oyun Yükle...",
|
||||
"uk_UA": "Завантажити _розпаковану гру...",
|
||||
"zh_CN": "加载解包后的游戏(_U)...",
|
||||
"zh_TW": "載入未封裝的遊戲(_U)..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LoadTitleUpdatesAndDLCFromFolderButton",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "Updates/DLC laden...",
|
||||
"el_GR": "",
|
||||
"en_US": "Load Updates/DLC...",
|
||||
"es_ES": "Cargar Actualizaciones/DLC...",
|
||||
"fr_FR": "Charger les Mises à Jour/DLC...",
|
||||
"he_IL": "",
|
||||
"it_IT": "Carica aggiornamenti/DLC...",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "업데이트/DLC 불러오기...",
|
||||
"no_NO": "Last inn oppdateringer/DLC...",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Carregar atualizações/DLC...",
|
||||
"ru_RU": "Загрузить обновления/DLC...",
|
||||
"sv_SE": "Läs in uppdateringar/DLC...",
|
||||
"th_TH": "โหลดอัปเดต/DLC...",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Завантажити оновлення/DLC...",
|
||||
"zh_CN": "加载更新/DLC...",
|
||||
"zh_TW": "載入更新/DLC..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "OpenRyuijnxFolderButton",
|
||||
"Translations": {
|
||||
"ar_SA": "فتح مجلد Ryujinx",
|
||||
"de_DE": "Ryujinx-Ordner öffnen",
|
||||
"el_GR": "Άνοιγμα Φακέλου Ryujinx",
|
||||
"en_US": "Open Ryujinx Folder",
|
||||
"es_ES": "Abrir Carpeta de Ryujinx",
|
||||
"fr_FR": "Ouvrir le Dossier Ryujinx",
|
||||
"he_IL": "פתח את תיקיית ריוג'ינקס",
|
||||
"it_IT": "Apri la cartella di Ryujinx",
|
||||
"ja_JP": "Ryujinx フォルダを開く",
|
||||
"ko_KR": "Ryujinx 폴더 열기",
|
||||
"no_NO": "Åpne Ryujinx mappe",
|
||||
"pl_PL": "Otwórz folder Ryujinx",
|
||||
"pt_BR": "Abrir Pasta do Ryujinx",
|
||||
"ru_RU": "Открыть папку Ryujinx",
|
||||
"sv_SE": "Öppna Ryujinx-mapp",
|
||||
"th_TH": "เปิดโฟลเดอร์ Ryujinx",
|
||||
"tr_TR": "Ryujinx Klasörünü aç",
|
||||
"uk_UA": "Відкрити теку Ryujinx",
|
||||
"zh_CN": "打开 Ryujinx 系统目录",
|
||||
"zh_TW": "開啟 Ryujinx 資料夾"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "OpenLogsFolderButton",
|
||||
"Translations": {
|
||||
"ar_SA": "فتح مجلد السجلات",
|
||||
"de_DE": "Logs-Ordner öffnen",
|
||||
"el_GR": "Άνοιγμα Φακέλου Καταγραφής",
|
||||
"en_US": "Open Logs Folder",
|
||||
"es_ES": "Abrir Carpeta de Registros",
|
||||
"fr_FR": "Ouvrir le Dossier des Journaux",
|
||||
"he_IL": "פתח את תיקיית קבצי הלוג",
|
||||
"it_IT": "Apri la cartella dei log",
|
||||
"ja_JP": "ログフォルダを開く",
|
||||
"ko_KR": "로그 폴더 열기",
|
||||
"no_NO": "Åpne Logg mappen",
|
||||
"pl_PL": "Otwórz folder plików dziennika zdarzeń",
|
||||
"pt_BR": "Abrir Pasta de _Logs",
|
||||
"ru_RU": "Открыть папку журналов",
|
||||
"sv_SE": "Öppna loggmapp",
|
||||
"th_TH": "เปิดโฟลเดอร์ Logs",
|
||||
"tr_TR": "Logs Klasörünü aç",
|
||||
"uk_UA": "Відкрити теку журналів змін",
|
||||
"zh_CN": "打开日志目录",
|
||||
"zh_TW": "開啟日誌資料夾"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "OpenScreenshotsFolderButton",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "Screenshots-Ordner öffnen",
|
||||
"el_GR": "",
|
||||
"en_US": "Open Screenshots Folder",
|
||||
"es_ES": "Abrir Carpeta de Capturas de Pantalla",
|
||||
"fr_FR": "Ouvrir le Dossier des Captures d’Écran",
|
||||
"he_IL": "",
|
||||
"it_IT": "Apri la cartella degli screenshots",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "스크린샷 폴더 열기",
|
||||
"no_NO": "Åpne Skjermbilde Mappen",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Abrir Pasta de Capturas de Tela",
|
||||
"ru_RU": "Открыть папку снимков экрана",
|
||||
"sv_SE": "Öppna skärmbildsmappen",
|
||||
"th_TH": "เปิดโฟลเดอร์ที่เก็บภาพหน้าจอ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Відкрити теку скріншотів",
|
||||
"zh_CN": "打开截图文件夹",
|
||||
"zh_TW": "開啟螢幕擷取畫面資料夾"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AssociateFileTypesButton",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Associate File Types",
|
||||
"es_ES": "",
|
||||
"fr_FR": "Associer Les Types de Fichiers",
|
||||
"he_IL": "",
|
||||
"it_IT": "",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "",
|
||||
"ru_RU": "Связать файлы с приложением",
|
||||
"sv_SE": "",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "RemoveFileTypeAssociationsButton",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Remove File Type Associations",
|
||||
"es_ES": "",
|
||||
"fr_FR": "Dissocier Les Types de Fichiers",
|
||||
"he_IL": "",
|
||||
"it_IT": "",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "",
|
||||
"ru_RU": "Удалить ассоциации файлов",
|
||||
"sv_SE": "",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "FileTypeAssociationsToolTip",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Associates supported file types (NSP, XCI, NCA, NRO, NSO) with Ryujinx so they open automatically when double-clicked in your file manager. Removing file type associations stops this behavior.",
|
||||
"es_ES": "",
|
||||
"fr_FR": "Associe les types de fichiers pris en charge (NSP, XCI, NCA, NRO, NSO) à Ryujinx afin qu’ils s’ouvrent automatiquement par double-clic dans votre gestionnaire de fichiers. Les dissocier désactive ce comportement",
|
||||
"he_IL": "",
|
||||
"it_IT": "",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "",
|
||||
"ru_RU": "Связывает поддерживаемые типы файлов (NSP, XCI, NCA, NRO, NSO) с Ryujinx, чтобы они автоматически открывались при двойном щелчке в файловом менеджере. Удаление ассоциаций файлов отключает это поведение.",
|
||||
"sv_SE": "",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "ExitButton",
|
||||
"Translations": {
|
||||
"ar_SA": "_خروج",
|
||||
"de_DE": "_Beenden",
|
||||
"el_GR": "_Έξοδος",
|
||||
"en_US": "_Exit",
|
||||
"es_ES": "_Salir",
|
||||
"fr_FR": "_Quitter",
|
||||
"he_IL": "_יציאה",
|
||||
"it_IT": "_Esci",
|
||||
"ja_JP": "終了(_E)",
|
||||
"ko_KR": "종료(_E)",
|
||||
"no_NO": "_Avslutt",
|
||||
"pl_PL": "_Wyjdź",
|
||||
"pt_BR": "_Sair",
|
||||
"ru_RU": "_Выйти",
|
||||
"sv_SE": "_Avsluta",
|
||||
"th_TH": "_ออก",
|
||||
"tr_TR": "_Çıkış",
|
||||
"uk_UA": "_Вихід",
|
||||
"zh_CN": "退出(_E)",
|
||||
"zh_TW": "結束(_E)"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
104
assets/Locales/MenuBar_Options.json
Normal file
104
assets/Locales/MenuBar_Options.json
Normal file
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "OptionsLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "_خيارات",
|
||||
"de_DE": "_Optionen",
|
||||
"el_GR": "_Επιλογές",
|
||||
"en_US": "_Options",
|
||||
"es_ES": "_Opciones",
|
||||
"fr_FR": null,
|
||||
"he_IL": "_אפשרויות",
|
||||
"it_IT": "_Opzioni",
|
||||
"ja_JP": "オプション(_O)",
|
||||
"ko_KR": "옵션(_O)",
|
||||
"no_NO": "_Alternativer",
|
||||
"pl_PL": "_Opcje",
|
||||
"pt_BR": "_Opções",
|
||||
"ru_RU": "_Настройки",
|
||||
"sv_SE": "_Inställningar",
|
||||
"th_TH": "_ตัวเลือก",
|
||||
"tr_TR": "_Seçenekler",
|
||||
"uk_UA": "_Параметри",
|
||||
"zh_CN": "选项(_O)",
|
||||
"zh_TW": "選項(_O)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LanguageButton",
|
||||
"Translations": {
|
||||
"ar_SA": "اللغة",
|
||||
"de_DE": "Sprache",
|
||||
"el_GR": "Γλώσσα",
|
||||
"en_US": "Language",
|
||||
"es_ES": "Idioma",
|
||||
"fr_FR": "Langue",
|
||||
"he_IL": "שפה",
|
||||
"it_IT": "Lingua",
|
||||
"ja_JP": "言語",
|
||||
"ko_KR": "언어",
|
||||
"no_NO": "Språk",
|
||||
"pl_PL": "Język",
|
||||
"pt_BR": "Idioma",
|
||||
"ru_RU": "Язык",
|
||||
"sv_SE": "Språk",
|
||||
"th_TH": "ภาษา",
|
||||
"tr_TR": "Dil",
|
||||
"uk_UA": "Мова",
|
||||
"zh_CN": "语言",
|
||||
"zh_TW": "語言"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "UserProfilesButton",
|
||||
"Translations": {
|
||||
"ar_SA": "_ملفات المستخدمين",
|
||||
"de_DE": "_Benutzerprofile",
|
||||
"el_GR": "_Προφίλ Χρηστών",
|
||||
"en_US": "_User Profiles",
|
||||
"es_ES": "_Perfiles de Usuario",
|
||||
"fr_FR": "_Profils d'Utilisateurs",
|
||||
"he_IL": "_פרופילי משתמש",
|
||||
"it_IT": "_Profili utente",
|
||||
"ja_JP": "ユーザプロファイル(_M)",
|
||||
"ko_KR": "사용자 프로필(_M)",
|
||||
"no_NO": "_Brukerprofiler",
|
||||
"pl_PL": "_Profile użytkowników",
|
||||
"pt_BR": "_Perfis de usuário",
|
||||
"ru_RU": "_Профили пользователей",
|
||||
"sv_SE": "_Användarprofiler",
|
||||
"th_TH": "_โปรไฟล์ผู้ใช้งาน",
|
||||
"tr_TR": "_Kullanıcı Profilleri",
|
||||
"uk_UA": "_Профілі користувачів",
|
||||
"zh_CN": "用户配置文件(_M)",
|
||||
"zh_TW": "使用者設定檔(_M)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "SettingsButton",
|
||||
"Translations": {
|
||||
"ar_SA": "_الإعدادات",
|
||||
"de_DE": "_Einstellungen",
|
||||
"el_GR": "_Ρυθμίσεις",
|
||||
"en_US": "_Settings",
|
||||
"es_ES": "_Configuración",
|
||||
"fr_FR": "_Paramètres",
|
||||
"he_IL": "_הגדרות",
|
||||
"it_IT": "_Impostazioni",
|
||||
"ja_JP": "設定(_S)",
|
||||
"ko_KR": "설정(_S)",
|
||||
"no_NO": "_Innstillinger",
|
||||
"pl_PL": "_Ustawienia",
|
||||
"pt_BR": "_Configurações",
|
||||
"ru_RU": "_Параметры",
|
||||
"sv_SE": "_Inställningar",
|
||||
"th_TH": "_ตั้งค่า",
|
||||
"tr_TR": "_Seçenekler",
|
||||
"uk_UA": "_Налаштування",
|
||||
"zh_CN": "设置(_S)",
|
||||
"zh_TW": "設定(_S)"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
54
assets/Locales/MenuBar_View.json
Normal file
54
assets/Locales/MenuBar_View.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "ToggleFullscreenButton",
|
||||
"Translations": {
|
||||
"ar_SA": "التبديل إلى وضع ملء الشاشة",
|
||||
"de_DE": "Vollbild",
|
||||
"el_GR": "Λειτουργία Πλήρους Οθόνης",
|
||||
"en_US": "Toggle Fullscreen",
|
||||
"es_ES": "Cambiar a Pantalla Completa.",
|
||||
"fr_FR": "Basculer en Plein Écran",
|
||||
"he_IL": "שנה מצב- מסך מלא",
|
||||
"it_IT": "Schermo intero",
|
||||
"ja_JP": "全画面切り替え",
|
||||
"ko_KR": "전체 화면 전환",
|
||||
"no_NO": "Fullskjermsvisning av/på",
|
||||
"pl_PL": "Przełącz na tryb pełnoekranowy",
|
||||
"pt_BR": "Mudar para Tela Cheia",
|
||||
"ru_RU": "Переключить полноэкранный режим",
|
||||
"sv_SE": "Växla helskärm",
|
||||
"th_TH": "สลับเป็นโหมดเต็มหน้าจอ",
|
||||
"tr_TR": "Tam Ekran Modunu Aç",
|
||||
"uk_UA": "На весь екран",
|
||||
"zh_CN": "切换全屏",
|
||||
"zh_TW": "切換全螢幕模式"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "ShowConsoleButton",
|
||||
"Translations": {
|
||||
"ar_SA": "عرض وحدة التحكم",
|
||||
"de_DE": "Zeige Konsole",
|
||||
"el_GR": "Εμφάνιση Κονσόλας",
|
||||
"en_US": "Show Console",
|
||||
"es_ES": "Mostrar Consola",
|
||||
"fr_FR": "Afficher la Console",
|
||||
"he_IL": "הצג שורת פקודות",
|
||||
"it_IT": "Mostra console",
|
||||
"ja_JP": "コンソールを表示",
|
||||
"ko_KR": "콘솔 표시",
|
||||
"no_NO": "Vis konsoll",
|
||||
"pl_PL": "Pokaż Konsolę",
|
||||
"pt_BR": "Exibir Console",
|
||||
"ru_RU": "Показать консоль",
|
||||
"sv_SE": "Visa konsoll",
|
||||
"th_TH": "แสดง คอนโซล",
|
||||
"tr_TR": "Konsol'u Göster",
|
||||
"uk_UA": "Показати консоль",
|
||||
"zh_CN": "显示控制台",
|
||||
"zh_TW": "顯示控制台"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "SettingsTabInputDirectMouseAccess",
|
||||
@@ -171,260 +171,10 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "使用低延迟垃圾回收器",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFile",
|
||||
"Translations": {
|
||||
"ar_SA": "_ملف",
|
||||
"de_DE": "_Datei",
|
||||
"el_GR": "_Αρχείο",
|
||||
"en_US": "_File",
|
||||
"es_ES": "_Archivo",
|
||||
"fr_FR": "_Fichier",
|
||||
"he_IL": "_קובץ",
|
||||
"it_IT": "_Archivio",
|
||||
"ja_JP": "ファイル(_F)",
|
||||
"ko_KR": "파일(_F)",
|
||||
"no_NO": "_Fil",
|
||||
"pl_PL": "_Plik",
|
||||
"pt_BR": "_Arquivo",
|
||||
"ru_RU": "_Файл",
|
||||
"sv_SE": "_Arkiv",
|
||||
"th_TH": "ไฟล์",
|
||||
"tr_TR": "_Dosya",
|
||||
"uk_UA": "_Файл",
|
||||
"zh_CN": "文件(_F)",
|
||||
"zh_TW": "檔案(_F)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileOpenFromFile",
|
||||
"Translations": {
|
||||
"ar_SA": "_تحميل التطبيق...",
|
||||
"de_DE": "_Anwendung laden...",
|
||||
"el_GR": "_Φόρτωση εφαρμογής...",
|
||||
"en_US": "_Load Application...",
|
||||
"es_ES": "_Cargar Aplicación...",
|
||||
"fr_FR": "_Charger l’Application...",
|
||||
"he_IL": "_טען יישום...",
|
||||
"it_IT": "_Carica applicazione...",
|
||||
"ja_JP": "アプリケーションをロード(_L)...",
|
||||
"ko_KR": "앱 불러오기(_L)...",
|
||||
"no_NO": "_Last inn program...",
|
||||
"pl_PL": "_Załaduj aplikację...",
|
||||
"pt_BR": "_Carregar aplicativo...",
|
||||
"ru_RU": "_Загрузить приложение...",
|
||||
"sv_SE": "_Läs in applikation...",
|
||||
"th_TH": "_โหลดแอปพลิเคชัน...",
|
||||
"tr_TR": "_Uygulamayı yükle...",
|
||||
"uk_UA": "_Завантажити застосунок...",
|
||||
"zh_CN": "加载应用程序(_L)...",
|
||||
"zh_TW": "載入應用程式(_L)..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileOpenFromFileError",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "Keine Anwendungen in ausgewählter Datei gefunden.",
|
||||
"el_GR": "",
|
||||
"en_US": "No applications found in selected file.",
|
||||
"es_ES": "No se encontraron aplicaciones en el archivo seleccionado.",
|
||||
"fr_FR": "Aucune application trouvée dans le fichier sélectionné.",
|
||||
"he_IL": "",
|
||||
"it_IT": "Nessuna applicazione trovata nel file selezionato.",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "선택한 파일에서 앱을 찾을 수 없습니다.",
|
||||
"no_NO": "Ingen apper ble funnet i valgt fil.",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Nenhum aplicativo encontrado no arquivo selecionado.",
|
||||
"ru_RU": "Приложений в выбранном файле не найдены",
|
||||
"sv_SE": "Inga applikationer hittades i vald fil.",
|
||||
"th_TH": "ไม่พบแอปพลิเคชั่นจากไฟล์ที่เลือก",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "У вибраному файлі не знайдено жодних додатків.",
|
||||
"zh_CN": "未发现应用",
|
||||
"zh_TW": "未能從已選擇的檔案中找到應用程式。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileOpenUnpacked",
|
||||
"Translations": {
|
||||
"ar_SA": "تحميل لُعْبَة غير محزومة...",
|
||||
"de_DE": "_Entpacktes Spiel laden...",
|
||||
"el_GR": "_Φόρτωση Απακετάριστου Παιχνιδιού...",
|
||||
"en_US": "Load _Unpacked Game...",
|
||||
"es_ES": "Cargar Juego _Desempaquetado...",
|
||||
"fr_FR": "Charger un Jeu Décompressé...",
|
||||
"he_IL": "טען משחק _שאינו ארוז...",
|
||||
"it_IT": "Carica gioco _estratto...",
|
||||
"ja_JP": "_展開されたゲームをロード...",
|
||||
"ko_KR": "압축 푼 게임 불러오기(_U)...",
|
||||
"no_NO": "Last inn _upakket spill...",
|
||||
"pl_PL": "Załaduj _rozpakowaną grę...",
|
||||
"pt_BR": "Abrir Jogo _Extraído...",
|
||||
"ru_RU": "Загрузить _распакованную игру...",
|
||||
"sv_SE": "Läs in _uppackat spel...",
|
||||
"th_TH": "โหลดเกมที่แตกไฟล์แล้ว...",
|
||||
"tr_TR": "_Sıkıştırılmamış Oyun Yükle...",
|
||||
"uk_UA": "Завантажити _розпаковану гру...",
|
||||
"zh_CN": "加载解包后的游戏(_U)...",
|
||||
"zh_TW": "載入未封裝的遊戲(_U)..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileLoadDlcFromFolder",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "DLC aus Ordner laden...",
|
||||
"el_GR": "",
|
||||
"en_US": "Load DLC...",
|
||||
"es_ES": "Cargar DLC...",
|
||||
"fr_FR": "Charger des DLC...",
|
||||
"he_IL": "",
|
||||
"it_IT": "Carica DLC...",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "DLC 폴더에서 불러오기...",
|
||||
"no_NO": "Last inn DLC...",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Carregar DLC...",
|
||||
"ru_RU": "Загрузить DLC...",
|
||||
"sv_SE": "Läs in DLC...",
|
||||
"th_TH": "โหลด DLC...",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Завантажити DLC...",
|
||||
"zh_CN": "加载 DLC...",
|
||||
"zh_TW": "載入 DLC..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileLoadTitleUpdatesFromFolder",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "Titel-Updates aus Ordner laden...",
|
||||
"el_GR": "",
|
||||
"en_US": "Load Title Updates...",
|
||||
"es_ES": "Cargar Actualizaciones de Títulos...",
|
||||
"fr_FR": "Charger des Mises à Jour de Titres...",
|
||||
"he_IL": "",
|
||||
"it_IT": "Carica aggiornamenti...",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "타이틀 업데이트 불러오기...",
|
||||
"no_NO": "Last inn titteloppdateringer...",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Carregar Atualizações de Jogo...",
|
||||
"ru_RU": "Загрузить обновления...",
|
||||
"sv_SE": "Läs in titeluppdateringar...",
|
||||
"th_TH": "โหลดไฟล์อัพเดต...",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Завантажити оновлення...",
|
||||
"zh_CN": "加载游戏更新...",
|
||||
"zh_TW": "載入遊戲更新..."
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileOpenEmuFolder",
|
||||
"Translations": {
|
||||
"ar_SA": "فتح مجلد Ryujinx",
|
||||
"de_DE": "Ryujinx-Ordner öffnen",
|
||||
"el_GR": "Άνοιγμα Φακέλου Ryujinx",
|
||||
"en_US": "Open Ryujinx Folder",
|
||||
"es_ES": "Abrir Carpeta de Ryujinx",
|
||||
"fr_FR": "Ouvrir le Dossier Ryujinx",
|
||||
"he_IL": "פתח את תיקיית ריוג'ינקס",
|
||||
"it_IT": "Apri la cartella di Ryujinx",
|
||||
"ja_JP": "Ryujinx フォルダを開く",
|
||||
"ko_KR": "Ryujinx 폴더 열기",
|
||||
"no_NO": "Åpne Ryujinx mappe",
|
||||
"pl_PL": "Otwórz folder Ryujinx",
|
||||
"pt_BR": "Abrir Pasta do Ryujinx",
|
||||
"ru_RU": "Открыть папку Ryujinx",
|
||||
"sv_SE": "Öppna Ryujinx-mapp",
|
||||
"th_TH": "เปิดโฟลเดอร์ Ryujinx",
|
||||
"tr_TR": "Ryujinx Klasörünü aç",
|
||||
"uk_UA": "Відкрити теку Ryujinx",
|
||||
"zh_CN": "打开 Ryujinx 系统目录",
|
||||
"zh_TW": "開啟 Ryujinx 資料夾"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileOpenScreenshotsFolder",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "Screenshots-Ordner öffnen",
|
||||
"el_GR": "",
|
||||
"en_US": "Open Screenshots Folder",
|
||||
"es_ES": "Abrir Carpeta de Capturas de Pantalla",
|
||||
"fr_FR": "Ouvrir le Dossier des Captures d’Écran",
|
||||
"he_IL": "",
|
||||
"it_IT": "Apri la cartella degli screenshots",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "스크린샷 폴더 열기",
|
||||
"no_NO": "Åpne Skjermbilde Mappen",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Abrir Pasta de Capturas de Tela",
|
||||
"ru_RU": "Открыть папку снимков экрана",
|
||||
"sv_SE": "Öppna skärmbildsmappen",
|
||||
"th_TH": "เปิดโฟลเดอร์ที่เก็บภาพหน้าจอ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Відкрити теку скріншотів",
|
||||
"zh_CN": "打开截图文件夹",
|
||||
"zh_TW": "開啟螢幕擷取畫面資料夾"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileOpenLogsFolder",
|
||||
"Translations": {
|
||||
"ar_SA": "فتح مجلد السجلات",
|
||||
"de_DE": "Logs-Ordner öffnen",
|
||||
"el_GR": "Άνοιγμα Φακέλου Καταγραφής",
|
||||
"en_US": "Open Logs Folder",
|
||||
"es_ES": "Abrir Carpeta de Registros",
|
||||
"fr_FR": "Ouvrir le Dossier des Journaux",
|
||||
"he_IL": "פתח את תיקיית קבצי הלוג",
|
||||
"it_IT": "Apri la cartella dei log",
|
||||
"ja_JP": "ログフォルダを開く",
|
||||
"ko_KR": "로그 폴더 열기",
|
||||
"no_NO": "Åpne Logg mappen",
|
||||
"pl_PL": "Otwórz folder plików dziennika zdarzeń",
|
||||
"pt_BR": "Abrir Pasta de _Logs",
|
||||
"ru_RU": "Открыть папку журналов",
|
||||
"sv_SE": "Öppna loggmapp",
|
||||
"th_TH": "เปิดโฟลเดอร์ Logs",
|
||||
"tr_TR": "Logs Klasörünü aç",
|
||||
"uk_UA": "Відкрити теку журналів змін",
|
||||
"zh_CN": "打开日志目录",
|
||||
"zh_TW": "開啟日誌資料夾"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarFileExit",
|
||||
"Translations": {
|
||||
"ar_SA": "_خروج",
|
||||
"de_DE": "_Beenden",
|
||||
"el_GR": "_Έξοδος",
|
||||
"en_US": "_Exit",
|
||||
"es_ES": "_Salir",
|
||||
"fr_FR": "_Quitter",
|
||||
"he_IL": "_יציאה",
|
||||
"it_IT": "_Esci",
|
||||
"ja_JP": "終了(_E)",
|
||||
"ko_KR": "종료(_E)",
|
||||
"no_NO": "_Avslutt",
|
||||
"pl_PL": "_Wyjdź",
|
||||
"pt_BR": "_Sair",
|
||||
"ru_RU": "_Выйти",
|
||||
"sv_SE": "_Avsluta",
|
||||
"th_TH": "_ออก",
|
||||
"tr_TR": "_Çıkış",
|
||||
"uk_UA": "_Вихід",
|
||||
"zh_CN": "退出(_E)",
|
||||
"zh_TW": "結束(_E)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarOptions",
|
||||
"Translations": {
|
||||
@@ -1653,26 +1403,26 @@
|
||||
{
|
||||
"ID": "GameListContextMenuManageTitleUpdates",
|
||||
"Translations": {
|
||||
"ar_SA": "إدارة تحديثات اللُعبة",
|
||||
"de_DE": "Verwalte Spiel-Updates",
|
||||
"el_GR": "Διαχείριση Ενημερώσεων Παιχνιδιού",
|
||||
"en_US": "Manage Title Updates",
|
||||
"es_ES": "Gestionar Actualizaciones del Juego",
|
||||
"fr_FR": "Gérer les Mises à Jour du Titre",
|
||||
"he_IL": "מנהל עדכוני משחקים",
|
||||
"it_IT": "Gestisci aggiornamenti del gioco",
|
||||
"ar_SA": "إدارة التحديثات",
|
||||
"de_DE": "Updates verwalten",
|
||||
"el_GR": "Διαχείριση ενημερώσεων",
|
||||
"en_US": "Manage Updates",
|
||||
"es_ES": "Gestionar Actualizaciones",
|
||||
"fr_FR": "Gérer les Mises à Jour",
|
||||
"he_IL": "ניהול עדכונים",
|
||||
"it_IT": "Gestisci aggiornamenti",
|
||||
"ja_JP": "アップデートを管理",
|
||||
"ko_KR": "타이틀 업데이트 관리",
|
||||
"no_NO": "Administrer titteloppdateringer",
|
||||
"ko_KR": "업데이트 관리",
|
||||
"no_NO": "Administrer oppdateringer",
|
||||
"pl_PL": "Zarządzaj aktualizacjami",
|
||||
"pt_BR": "Gerenciar Atualizações do Jogo",
|
||||
"pt_BR": "Gerenciar atualizações",
|
||||
"ru_RU": "Управление обновлениями",
|
||||
"sv_SE": "Hantera speluppdateringar",
|
||||
"th_TH": "จัดการเวอร์ชั่นอัปเดต",
|
||||
"tr_TR": "Oyun Güncellemelerini Yönet",
|
||||
"sv_SE": "Hantera uppdateringar",
|
||||
"th_TH": "จัดการการอัปเดต",
|
||||
"tr_TR": "Güncellemeleri Yönet",
|
||||
"uk_UA": "Керування оновленнями",
|
||||
"zh_CN": "管理游戏更新",
|
||||
"zh_TW": "管理遊戲更新"
|
||||
"zh_CN": "管理更新",
|
||||
"zh_TW": "管理更新"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -6446,7 +6196,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "将按键绑定重置为默认",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -9846,7 +9596,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "开启 HD 震动",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -9871,7 +9621,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "向控制器发送更多数据以获得更好的震动效果。\n\n目前仅支持任天堂官方的 Switch 控制器。\n\n如果你在使用 JoyCon 或 Pro 手柄,请保持开启状态。",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -10800,106 +10550,6 @@
|
||||
"zh_TW": "您要重新啟動嗎"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogInstallFileTypesSuccessMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "تم تثبيت أنواع الملفات بنجاح!",
|
||||
"de_DE": "Dateitypen erfolgreich installiert!",
|
||||
"el_GR": "Επιτυχής εγκατάσταση τύπων αρχείων!",
|
||||
"en_US": "Successfully installed file types!",
|
||||
"es_ES": "¡Tipos de archivos instalados con éxito!",
|
||||
"fr_FR": "Types de fichiers installés avec succès !",
|
||||
"he_IL": "סוגי קבצים הותקנו בהצלחה!",
|
||||
"it_IT": "Tipi di file installati con successo!",
|
||||
"ja_JP": "ファイル形式のインストールに成功しました!",
|
||||
"ko_KR": "파일 형식을 성공적으로 설치했습니다!",
|
||||
"no_NO": "Filtyper ble installert!",
|
||||
"pl_PL": "Pomyślnie zainstalowano typy plików!",
|
||||
"pt_BR": "Tipos de arquivo instalados com sucesso!",
|
||||
"ru_RU": "Типы файлов успешно установлены!",
|
||||
"sv_SE": "Filtyper har installerats!",
|
||||
"th_TH": "ติดตั้งตามประเภทของไฟล์สำเร็จแล้ว!",
|
||||
"tr_TR": "Dosya uzantıları başarıyla yüklendi!",
|
||||
"uk_UA": "Успішно встановлено типи файлів!",
|
||||
"zh_CN": "关联文件类型成功!",
|
||||
"zh_TW": "成功安裝檔案類型!"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogInstallFileTypesErrorMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "فشل تثبيت أنواع الملفات.",
|
||||
"de_DE": "Dateitypen konnten nicht installiert werden.",
|
||||
"el_GR": "Απέτυχε η εγκατάσταση τύπων αρχείων.",
|
||||
"en_US": "Failed to install file types.",
|
||||
"es_ES": "No se pudo desinstalar los tipos de archivo.",
|
||||
"fr_FR": "Échec de l'installation des types de fichiers.",
|
||||
"he_IL": "נכשל בהתקנת סוגי קבצים.",
|
||||
"it_IT": "Impossibile installare i tipi di file.",
|
||||
"ja_JP": "ファイル形式のインストールに失敗しました.",
|
||||
"ko_KR": "파일 형식을 설치하지 못했습니다.",
|
||||
"no_NO": "Kunne ikke installere filtyper.",
|
||||
"pl_PL": "Nie udało się zainstalować typów plików.",
|
||||
"pt_BR": "Falha ao instalar tipos de arquivo.",
|
||||
"ru_RU": "Не удалось установить типы файлов.",
|
||||
"sv_SE": "Misslyckades med att installera filtyper.",
|
||||
"th_TH": "ติดตั้งตามประเภทของไฟล์ไม่สำเร็จ",
|
||||
"tr_TR": "Dosya uzantıları yükleme işlemi başarısız oldu.",
|
||||
"uk_UA": "Не вдалося встановити типи файлів.",
|
||||
"zh_CN": "关联文件类型失败!",
|
||||
"zh_TW": "無法安裝檔案類型。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogUninstallFileTypesSuccessMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "تم إلغاء تثبيت أنواع الملفات بنجاح!",
|
||||
"de_DE": "Dateitypen erfolgreich deinstalliert!",
|
||||
"el_GR": "Επιτυχής απεγκατάσταση τύπων αρχείων!",
|
||||
"en_US": "Successfully uninstalled file types!",
|
||||
"es_ES": "¡Tipos de archivos desinstalados con éxito!",
|
||||
"fr_FR": "Types de fichiers désinstallés avec succès !",
|
||||
"he_IL": "סוגי קבצים הוסרו בהצלחה!",
|
||||
"it_IT": "Tipi di file disinstallati con successo!",
|
||||
"ja_JP": "ファイル形式のアンインストールに成功しました!",
|
||||
"ko_KR": "파일 형식이 성공적으로 제거되었습니다!",
|
||||
"no_NO": "Filtyper ble avinstallert!",
|
||||
"pl_PL": "Pomyślnie odinstalowano typy plików!",
|
||||
"pt_BR": "Tipos de arquivo desinstalados com sucesso!",
|
||||
"ru_RU": "Типы файлов успешно удалены!",
|
||||
"sv_SE": "Filtyper avinstallerades!",
|
||||
"th_TH": "ถอนการติดตั้งตามประเภทของไฟล์สำเร็จแล้ว!",
|
||||
"tr_TR": "Dosya uzantıları başarıyla kaldırıldı!",
|
||||
"uk_UA": "Успішно видалено типи файлів!",
|
||||
"zh_CN": "成功解除文件类型关联!",
|
||||
"zh_TW": "成功移除檔案類型!"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogUninstallFileTypesErrorMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "فشل إلغاء تثبيت أنواع الملفات.",
|
||||
"de_DE": "Deinstallation der Dateitypen fehlgeschlagen.",
|
||||
"el_GR": "Αποτυχία απεγκατάστασης τύπων αρχείων.",
|
||||
"en_US": "Failed to uninstall file types.",
|
||||
"es_ES": "No se pudo desinstalar los tipos de archivo.",
|
||||
"fr_FR": "Échec de la désinstallation des types de fichiers.",
|
||||
"he_IL": "נכשל בהסרת סוגי קבצים.",
|
||||
"it_IT": "Disinstallazione dei tipi di file non riuscita.",
|
||||
"ja_JP": "ファイル形式のアンインストールに失敗しました.",
|
||||
"ko_KR": "파일 형식을 제거하지 못했습니다.",
|
||||
"no_NO": "Kunne ikke avinstallere filtyper.",
|
||||
"pl_PL": "Nie udało się odinstalować typów plików.",
|
||||
"pt_BR": "Falha ao desinstalar tipos de arquivo.",
|
||||
"ru_RU": "Не удалось удалить типы файлов.",
|
||||
"sv_SE": "Misslyckades med att avinstallera filtyper.",
|
||||
"th_TH": "ไม่สามารถถอนการติดตั้งตามประเภทของไฟล์ได้",
|
||||
"tr_TR": "Dosya uzantıları kaldırma işlemi başarısız oldu.",
|
||||
"uk_UA": "Не вдалося видалити типи файлів.",
|
||||
"zh_CN": "解除文件类型关联失败!",
|
||||
"zh_TW": "無法移除檔案類型。"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DialogOpenSettingsWindowLabel",
|
||||
"Translations": {
|
||||
@@ -11696,7 +11346,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "要将选定设备的按键绑定重置为默认值吗?",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -11721,7 +11371,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "这是一个破坏性的操作,会覆盖此设备当前的绑定。",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -13050,31 +12700,6 @@
|
||||
"zh_TW": "全部刪除"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarOptionsChangeLanguage",
|
||||
"Translations": {
|
||||
"ar_SA": "تغيير اللغة",
|
||||
"de_DE": "Sprache ändern",
|
||||
"el_GR": "Αλλαξε γλώσσα",
|
||||
"en_US": "Change Language",
|
||||
"es_ES": "Cambiar Idioma",
|
||||
"fr_FR": "Changer la Langue",
|
||||
"he_IL": "החלף שפה",
|
||||
"it_IT": "Cambia lingua",
|
||||
"ja_JP": "言語を変更",
|
||||
"ko_KR": "언어 변경",
|
||||
"no_NO": "Endre språk",
|
||||
"pl_PL": "Zmień język",
|
||||
"pt_BR": "Mudar Idioma",
|
||||
"ru_RU": "Сменить язык",
|
||||
"sv_SE": "Byt språk",
|
||||
"th_TH": "เปลี่ยนภาษา",
|
||||
"tr_TR": "Dili Değiştir",
|
||||
"uk_UA": "Змінити мову",
|
||||
"zh_CN": "更改界面语言",
|
||||
"zh_TW": "變更語言"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarShowFileTypes",
|
||||
"Translations": {
|
||||
@@ -13696,7 +13321,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "将 CLR 的垃圾回收器设置为低延迟模式。\n\n这可能会减少卡顿,但会以性能为代价。\n\n不确定的话就保持关闭。",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -14975,31 +14600,6 @@
|
||||
"zh_TW": "順時針旋轉 90°"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "MenuBarOptionsShowConsole",
|
||||
"Translations": {
|
||||
"ar_SA": "عرض وحدة التحكم",
|
||||
"de_DE": "Zeige Konsole",
|
||||
"el_GR": "Εμφάνιση Κονσόλας",
|
||||
"en_US": "Show Console",
|
||||
"es_ES": "Mostrar Consola",
|
||||
"fr_FR": "Afficher la Console",
|
||||
"he_IL": "הצג שורת פקודות",
|
||||
"it_IT": "Mostra console",
|
||||
"ja_JP": "コンソールを表示",
|
||||
"ko_KR": "콘솔 표시",
|
||||
"no_NO": "Vis konsoll",
|
||||
"pl_PL": "Pokaż Konsolę",
|
||||
"pt_BR": "Exibir Console",
|
||||
"ru_RU": "Показать консоль",
|
||||
"sv_SE": "Visa konsoll",
|
||||
"th_TH": "แสดง คอนโซล",
|
||||
"tr_TR": "Konsol'u Göster",
|
||||
"uk_UA": "Показати консоль",
|
||||
"zh_CN": "显示控制台",
|
||||
"zh_TW": "顯示控制台"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "ShaderCachePurgeError",
|
||||
"Translations": {
|
||||
@@ -16225,106 +15825,6 @@
|
||||
"zh_TW": "選取支援的檔案格式"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LoadApplicationFromFileDialogTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Choose a Switch compatible FILE to load",
|
||||
"es_ES": "Elige un ARCHIVO compatible con Switch para cargar",
|
||||
"fr_FR": "Choisissez un FICHIER compatible Switch à charger",
|
||||
"he_IL": "",
|
||||
"it_IT": "Scegli un FILE compatibile con Switch da caricare",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "불러올 Switch 호환 파일을 선택",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Escolha um ARQUIVO compatível com Switch para carregar",
|
||||
"ru_RU": "Выберите ФАЙЛ, совместимый с Switch, для загрузки",
|
||||
"sv_SE": "Välj en Switch-kompatibel FIL att läsa in",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Виберіть ФАЙЛ, сумісний із Switch, для завантаження",
|
||||
"zh_CN": "请选择要加载的 Switch 兼容文件",
|
||||
"zh_TW": "請選擇要載入的 Switch 相容檔案"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LoadUnpackedGameFromFolderDialogTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Choose an UNPACKED Switch compatible application to load",
|
||||
"es_ES": "Elige una aplicación DESEMPAQUETADA compatible con Switch para cargar",
|
||||
"fr_FR": "Choisissez une application DÉCOMPRESSEÉE compatible avec Switch à charger",
|
||||
"he_IL": "",
|
||||
"it_IT": "Scegli un’applicazione DECOMPRESSA compatibile con Switch da caricare",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "불러올 언팩된 Switch 호환 앱을 선택",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Escolha um aplicativo DESCOMPACTADO compatível com Switch para carregar",
|
||||
"ru_RU": "Выберите РАСПАКОВАННОЕ, совместимое с Switch, приложение для загрузки",
|
||||
"sv_SE": "Välj en UPPACKAD Switch-kompatibel applikation att läsa in",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Виберіть РОЗПАКОВАНИЙ сумісний із Switch додаток для завантаження",
|
||||
"zh_CN": "请选择要加载的已解包的 Switch 兼容应用程序",
|
||||
"zh_TW": "請選擇要載入的已解壓縮 Switch 相容應用程式"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LoadTitleUpdatesFromFolderDialogTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Choose one or more FOLDERS to bulk load title updates from",
|
||||
"es_ES": "Elige una o más CARPETAS para cargar actualizaciones de título de forma masiva",
|
||||
"fr_FR": "Choisissez un ou plusieurs DOSSIERS pour charger en masse des mises à jour de titres",
|
||||
"he_IL": "",
|
||||
"it_IT": "Scegli una o più CARTELLE da cui caricare in blocco gli aggiornamenti del titolo",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "타이틀 업데이트를 대량으로 불러올 폴더를 하나 이상 선택",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Escolha uma ou mais PASTAS para carregar atualizações de título em massa",
|
||||
"ru_RU": "Выберите одну или несколько ПАПОК для массовой загрузки обновлений заголовков",
|
||||
"sv_SE": "Välj en eller flera MAPPAR för att läsa in alla titeluppdateringar från",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Виберіть одну або кілька ПАПОК для масового завантаження оновлень титулів",
|
||||
"zh_CN": "请选择一个或多个文件夹来批量加载游戏更新",
|
||||
"zh_TW": "請選擇一個或多個資料夾以批次載入遊戲更新"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "LoadDLCFromFolderDialogTitle",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Choose one or more FOLDERS to bulk load DLC from",
|
||||
"es_ES": "Elige una o más CARPETAS para cargar DLC de forma masiva",
|
||||
"fr_FR": "Choisissez un ou plusieurs DOSSIERS pour charger en masse des DLC",
|
||||
"he_IL": "",
|
||||
"it_IT": "Scegli una o più CARTELLE da cui caricare DLC in blocco",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "DLC를 대량으로 불러올 폴더를 하나 이상 선택",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Escolha uma ou mais PASTAS para carregar DLC em massa",
|
||||
"ru_RU": "Выберите одну или несколько ПАПОК для массовой загрузки DLC",
|
||||
"sv_SE": "Välj en eller flera MAPPAR för att läsa in alla DLC från",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Виберіть одну або кілька ПАПОК для масового завантаження DLC",
|
||||
"zh_CN": "请选择一个或多个文件夹来批量加载 DLC",
|
||||
"zh_TW": "請選擇一個或多個資料夾以批次載入 DLC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AllSupportedFormats",
|
||||
"Translations": {
|
||||
@@ -17675,31 +17175,6 @@
|
||||
"zh_TW": "反修剪"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "UpdateWindowUpdateAddedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "{0} new update(s) added",
|
||||
"es_ES": "{0} nueva(s) actualización(es) agregada(s)",
|
||||
"fr_FR": "{0} nouvelle(s) mise(s) à jour ajoutée(s)",
|
||||
"he_IL": "",
|
||||
"it_IT": "{0} nuovo/i aggiornamento/i aggiunto/i",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "{0}개의 신규 업데이트가 추가됨",
|
||||
"no_NO": "{0} ny(e) oppdatering(er) lagt til",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "{0} nova(s) atualização(ões) adicionada(s)",
|
||||
"ru_RU": "Добавлено {0} новых обновлений",
|
||||
"sv_SE": "{0} nya uppdatering(ar) lades till",
|
||||
"th_TH": "มีอัปเดตใหม่เข้ามา {0} รายการ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "{0} нових оновлень додано",
|
||||
"zh_CN": "{0} 个更新被添加",
|
||||
"zh_TW": "已加入 {0} 個遊戲更新"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "UpdateWindowBundledContentNotice",
|
||||
"Translations": {
|
||||
@@ -17825,131 +17300,6 @@
|
||||
"zh_TW": "{0} 個可下載內容"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "DlcWindowDlcAddedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "{0} New Downloadable Content(s) Added",
|
||||
"es_ES": "Se agregó/aron {0} nuevo(s) contenido(s) descargable(s)",
|
||||
"fr_FR": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)",
|
||||
"he_IL": "",
|
||||
"it_IT": "{0} nuovo/i DLC aggiunto/i",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "{0}개의 새로운 내려받기 가능한 콘텐츠가 추가됨",
|
||||
"no_NO": "{0} nytt nedlastbart innhold lagt til",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)",
|
||||
"ru_RU": "Добавлено {0} новое/ых DLC",
|
||||
"sv_SE": "{0} nya hämtningsbara innehåll lades till",
|
||||
"th_TH": "มีเนื้อหาเสริมใหม่ {0} รายการ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "{0} нового завантажувального вмісту додано",
|
||||
"zh_CN": "{0} 个 DLC 被添加",
|
||||
"zh_TW": "已加入 {0} 個 DLC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AutoloadDlcAddedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "{0} New Downloadable Content(s) Added",
|
||||
"es_ES": "Se agregó/aron {0} nuevo(s) contenido(s) descargable(s)",
|
||||
"fr_FR": "{0} nouveau(x) contenu(s) téléchargeable(s) ajouté(s)",
|
||||
"he_IL": "",
|
||||
"it_IT": "{0} nuovo/i DLC aggiunto/i",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "{0}개의 새로운 DLC가 추가됨",
|
||||
"no_NO": "{0} nytt nedlastbart innhold lagt til",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "{0} novo(s) conteúdo(s) para download adicionado(s)",
|
||||
"ru_RU": "Добавлено {0} новое/ых DLC",
|
||||
"sv_SE": "{0} nya hämtningsbara innehåll lades till",
|
||||
"th_TH": "เพิ่มเนื้อหาเสริมดาวน์โหลดใหม่ {0} รายการ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "{0} нового завантажувального вмісту додано",
|
||||
"zh_CN": "{0} 个 DLC 被添加",
|
||||
"zh_TW": "已加入 {0} 個 DLC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AutoloadDlcRemovedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "{0} Missing Downloadable Content(s) Removed",
|
||||
"es_ES": "Se eliminó/aron {0} contenido(s) descargable(s) faltante(s)",
|
||||
"fr_FR": "{0} contenu(s) téléchargeable(s) manquant(s) supprimé(s)",
|
||||
"he_IL": "",
|
||||
"it_IT": "{0} DLC mancante/i rimosso/i",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "{0}개의 내려받기 가능한 콘텐츠가 제거됨",
|
||||
"no_NO": "{0} manglende nedlastbart innhold fjernet",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "{0} conteúdo(s) para download ausente(s) removido(s)",
|
||||
"ru_RU": "Убрано {0} отсутствующие/х DLC",
|
||||
"sv_SE": "{0} saknade hämtningsbara innehåll togs bort",
|
||||
"th_TH": "ลบเนื้อหาเสริมที่หายไปจำนวน {0} รายการ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "{0} відсутнього завантажувального вмісту видалено",
|
||||
"zh_CN": "{0} 个失效的 DLC 已移除",
|
||||
"zh_TW": "已刪除 {0} 個遺失的 DLC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AutoloadUpdateAddedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "{0} New Update(s) Added",
|
||||
"es_ES": "Se agregó/aron {0} nueva(s) actualización(es)",
|
||||
"fr_FR": "{0} nouvelle(s) mise(s) à jour ajoutée(s)",
|
||||
"he_IL": "",
|
||||
"it_IT": "{0} nuovo/i aggiornamento/i aggiunto/i",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "{0}개의 신규 업데이트가 추가됨",
|
||||
"no_NO": "{0} ny(e) oppdatering(er) lagt til",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "{0} nova(s) atualização(ões) adicionada(s)",
|
||||
"ru_RU": "Добавлено {0} новое/ых обновление/й",
|
||||
"sv_SE": "{0} nya uppdatering(ar) lades till",
|
||||
"th_TH": "เพิ่มการอัปเดตใหม่ {0} รายการ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "{0} нових оновлень додано",
|
||||
"zh_CN": "{0} 个游戏更新被添加",
|
||||
"zh_TW": "已加入 {0} 個遊戲更新"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "AutoloadUpdateRemovedMessage",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "{0} Missing Update(s) Removed",
|
||||
"es_ES": "Se eliminó/aron {0} actualización(es) faltante(s)",
|
||||
"fr_FR": "{0} mise(s) à jour manquante(s) supprimée(s)",
|
||||
"he_IL": "",
|
||||
"it_IT": "{0} aggiornamento/i mancante/i rimosso/i",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "누락된 업데이트 {0}개 삭제",
|
||||
"no_NO": "{0} manglende oppdatering(er) fjernet",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "{0} atualização(ões) ausente(s) removida(s)",
|
||||
"ru_RU": "Убрано {0} отсутствующие/х обновление/й",
|
||||
"sv_SE": "{0} saknade uppdatering(ar) togs bort",
|
||||
"th_TH": "ลบการอัปเดตที่หายไปจำนวน {0} รายการ",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "{0} відсутніх оновлень видалено",
|
||||
"zh_CN": "{0} 个失效的游戏更新已移除",
|
||||
"zh_TW": "已刪除 {0} 個遺失的遊戲更新"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "ModWindowHeading",
|
||||
"Translations": {
|
||||
|
||||
79
assets/Locales/Settings_Interface.json
Normal file
79
assets/Locales/Settings_Interface.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"Locales": [
|
||||
{
|
||||
"ID": "StartGamesInFullscreenCheckboxLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "ابدأ الألعاب بملء الشاشة",
|
||||
"de_DE": "Spiele im Vollbild starten",
|
||||
"el_GR": "Εκκίνηση Παιχνιδιών σε Πλήρη Οθόνη",
|
||||
"en_US": "Start Games in Fullscreen",
|
||||
"es_ES": "Iniciar Juegos en Pantalla Completa",
|
||||
"fr_FR": "Démarrer les Jeux en Plein Écran",
|
||||
"he_IL": "התחל משחקים במסך מלא",
|
||||
"it_IT": "Avvia i giochi a schermo intero",
|
||||
"ja_JP": "全画面でゲームを開始",
|
||||
"ko_KR": "전체 화면으로 게임 시작",
|
||||
"no_NO": "Start spill i fullskjerm",
|
||||
"pl_PL": "Uruchamiaj gry na pełnym ekranie",
|
||||
"pt_BR": "Iniciar Jogos em Tela Cheia",
|
||||
"ru_RU": "Запускать игры в полноэкранном режиме",
|
||||
"sv_SE": "Starta spel i helskärm",
|
||||
"th_TH": "เริ่มเกมแบบเต็มหน้าจอ",
|
||||
"tr_TR": "Oyunları Tam Ekranda Başlat",
|
||||
"uk_UA": "Запускати ігри в повноекранному режимі",
|
||||
"zh_CN": "全屏启动游戏",
|
||||
"zh_TW": "以全螢幕啟動遊戲"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "StartGamesWithoutUICheckboxLabel",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "Benutzeroberfläche beim Spielstart ausblenden",
|
||||
"el_GR": "",
|
||||
"en_US": "Hide UI on Game Start",
|
||||
"es_ES": "Ocultar la Interfaz al Iniciar el Juego",
|
||||
"fr_FR": "Masquer l’Interface au Lancement du Jeu",
|
||||
"he_IL": "",
|
||||
"it_IT": "Nascondi l’interfaccia all’avvio del gioco",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "게임 시작 시 UI 숨기기",
|
||||
"no_NO": "Skjul brukergrensesnitt ved spillstart",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "Ocultar a interface ao iniciar o jogo",
|
||||
"ru_RU": "Скрывать интерфейс при запуске игры",
|
||||
"sv_SE": "Dölj användargränssnitt vid spelstart",
|
||||
"th_TH": "ซ่อน UI เมื่อเริ่มเกม",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "Приховувати інтерфейс під час запуску гри",
|
||||
"zh_CN": "启动游戏时隐藏界面",
|
||||
"zh_TW": "啟動遊戲時隱藏介面"
|
||||
}
|
||||
},
|
||||
{
|
||||
"ID": "StartGamesWithoutUICheckboxLabelToolTip",
|
||||
"Translations": {
|
||||
"ar_SA": "",
|
||||
"de_DE": "",
|
||||
"el_GR": "",
|
||||
"en_US": "Automatically hides Ryujinx's UI whenever a game launches. While in-game, press F4 to show the UI.",
|
||||
"es_ES": "",
|
||||
"fr_FR": "Masque automatiquement l'interface de Ryujinx au lancement d'un jeu. En jeu, appuyez sur F4 pour afficher l'interface.",
|
||||
"he_IL": "",
|
||||
"it_IT": "",
|
||||
"ja_JP": "",
|
||||
"ko_KR": "",
|
||||
"no_NO": "",
|
||||
"pl_PL": "",
|
||||
"pt_BR": "",
|
||||
"ru_RU": "Автоматически скрывает интерфейс Ryujinx при запуске игры. Во время игры нажмите F4, чтобы показать интерфейс.",
|
||||
"sv_SE": "",
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_TW": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -24,6 +24,9 @@ namespace Ryujinx.Common.Helper
|
||||
|
||||
public static bool IsTypeAssociationSupported => (OperatingSystem.IsLinux() || OperatingSystem.IsWindows());
|
||||
|
||||
// NOTE: On macOS, users have a more robust file association system (via Right-Click > Get Info > "Open with:" > Ryujinx > "Change All...)
|
||||
// Custom file association isn't strictly necessary and will not provide any additional benefit to macOS users.
|
||||
|
||||
public static bool AreMimeTypesRegistered
|
||||
{
|
||||
get
|
||||
@@ -38,8 +41,6 @@ namespace Ryujinx.Common.Helper
|
||||
return AreMimeTypesRegisteredWindows();
|
||||
}
|
||||
|
||||
// TODO: Add macOS support.
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -173,8 +174,6 @@ namespace Ryujinx.Common.Helper
|
||||
return InstallWindowsMimeTypes();
|
||||
}
|
||||
|
||||
// TODO: Add macOS support.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -190,8 +189,6 @@ namespace Ryujinx.Common.Helper
|
||||
return InstallWindowsMimeTypes(true);
|
||||
}
|
||||
|
||||
// TODO: Add macOS support.
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,6 +147,7 @@ namespace Ryujinx.Common
|
||||
"0100c1f0051b6000", // Donkey Kong Country: Tropical Freeze
|
||||
"0100ed000d390000", // Dr. Kawashima's Brain Training
|
||||
"010067b017588000", // Endless Ocean Luminous
|
||||
"01003da010e8a000", // Miitopia
|
||||
"01006b5012b32000", // Part Time UFO
|
||||
"0100704000B3A000", // Snipperclips
|
||||
"01006a800016e000", // Super Smash Bros. Ultimate
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace Ryujinx.Cpu.Signal
|
||||
public SignalHandlerRangeArray Ranges;
|
||||
}
|
||||
|
||||
static class NativeSignalHandler
|
||||
public static class NativeSignalHandler
|
||||
{
|
||||
private static readonly nint _handlerConfig;
|
||||
private static nint _signalHandlerPtr;
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="OpenTK.Windowing.GraphicsLibraryFramework" />
|
||||
<PackageReference Include="shaderc.net" />
|
||||
<PackageReference Include="Silk.NET.Shaderc" ExcludeAssets="native" />
|
||||
<PackageReference Include="Silk.NET.Vulkan" />
|
||||
<PackageReference Include="Silk.NET.Vulkan.Extensions.EXT" />
|
||||
<PackageReference Include="Silk.NET.Vulkan.Extensions.KHR" />
|
||||
|
||||
@@ -1,22 +1,17 @@
|
||||
using Ryujinx.Common.Logging;
|
||||
using Ryujinx.Graphics.GAL;
|
||||
using Ryujinx.Graphics.Shader;
|
||||
using shaderc;
|
||||
using Silk.NET.Shaderc;
|
||||
using Silk.NET.Vulkan;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Result = shaderc.Result;
|
||||
|
||||
namespace Ryujinx.Graphics.Vulkan
|
||||
{
|
||||
class Shader : IDisposable
|
||||
{
|
||||
// The shaderc.net dependency's Options constructor and dispose are not thread safe.
|
||||
// Take this lock when using them.
|
||||
private static readonly Lock _shaderOptionsLock = new();
|
||||
|
||||
private static readonly nint _ptrMainEntryPointName = Marshal.StringToHGlobalAnsi("main");
|
||||
|
||||
private readonly Vk _api;
|
||||
@@ -75,38 +70,33 @@ namespace Ryujinx.Graphics.Vulkan
|
||||
|
||||
private unsafe static byte[] GlslToSpirv(string glsl, ShaderStage stage)
|
||||
{
|
||||
Options options;
|
||||
Shaderc api = Shaderc.GetApi();
|
||||
Compiler* compiler = api.CompilerInitialize();
|
||||
CompileOptions* options = api.CompileOptionsInitialize();
|
||||
|
||||
lock (_shaderOptionsLock)
|
||||
api.CompileOptionsSetSourceLanguage(options, SourceLanguage.Glsl);
|
||||
api.CompileOptionsSetTargetSpirv(options, SpirvVersion.Shaderc15);
|
||||
api.CompileOptionsSetTargetEnv(options, TargetEnv.Vulkan, Vk.Version12);
|
||||
|
||||
CompilationResult* scr = api.CompileIntoSpv(compiler, glsl, (nuint)glsl.Length, GetShaderCShaderStage(stage), "Ryu", "main", options);
|
||||
|
||||
CompilationStatus status = api.ResultGetCompilationStatus(scr);
|
||||
|
||||
if (status != CompilationStatus.Success)
|
||||
{
|
||||
options = new Options(false)
|
||||
{
|
||||
SourceLanguage = SourceLanguage.Glsl,
|
||||
TargetSpirVVersion = new SpirVVersion(1, 5),
|
||||
};
|
||||
}
|
||||
|
||||
options.SetTargetEnvironment(TargetEnvironment.Vulkan, EnvironmentVersion.Vulkan_1_2);
|
||||
Compiler compiler = new(options);
|
||||
Result scr = compiler.Compile(glsl, "Ryu", GetShaderCShaderStage(stage));
|
||||
|
||||
lock (_shaderOptionsLock)
|
||||
{
|
||||
options.Dispose();
|
||||
}
|
||||
|
||||
if (scr.Status != Status.Success)
|
||||
{
|
||||
Logger.Error?.Print(LogClass.Gpu, $"Shader compilation error: {scr.Status} {scr.ErrorMessage}");
|
||||
Logger.Error?.Print(LogClass.Gpu, $"Shader compilation error: {status} {api.ResultGetErrorMessageS(scr)}");
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
Span<byte> spirvBytes = new((void*)scr.CodePointer, (int)scr.CodeLength);
|
||||
Span<byte> spirvBytes = new(api.ResultGetBytes(scr), (int)api.ResultGetLength(scr));
|
||||
|
||||
byte[] code = new byte[(scr.CodeLength + 3) & ~3];
|
||||
byte[] code = new byte[(spirvBytes.Length + 3) & ~3];
|
||||
|
||||
spirvBytes.CopyTo(code.AsSpan()[..(int)scr.CodeLength]);
|
||||
spirvBytes.CopyTo(code.AsSpan()[..spirvBytes.Length]);
|
||||
|
||||
api.CompilerRelease(compiler);
|
||||
api.CompileOptionsRelease(options);
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,23 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using UnicornEngine.Const;
|
||||
|
||||
namespace Ryujinx.Tests.Unicorn
|
||||
{
|
||||
public class UnicornAArch32 : IDisposable
|
||||
{
|
||||
struct UcArmCpReg
|
||||
{
|
||||
public uint Cp;
|
||||
public uint Is64;
|
||||
public uint Sec;
|
||||
public uint CRn;
|
||||
public uint CRm;
|
||||
public uint Opc1;
|
||||
public uint Opc2;
|
||||
public uint Val;
|
||||
}
|
||||
|
||||
internal readonly UnicornEngine.Unicorn Uc;
|
||||
private bool _isDisposed;
|
||||
|
||||
@@ -38,7 +51,7 @@ namespace Ryujinx.Tests.Unicorn
|
||||
|
||||
public int Fpscr
|
||||
{
|
||||
get => (int)GetRegister(Arm.UC_ARM_REG_FPSCR) | ((int)GetRegister(Arm.UC_ARM_REG_FPSCR_NZCV));
|
||||
get => (int)GetRegister(Arm.UC_ARM_REG_FPSCR);
|
||||
set => SetRegister(Arm.UC_ARM_REG_FPSCR, (uint)value);
|
||||
}
|
||||
|
||||
@@ -85,8 +98,22 @@ namespace Ryujinx.Tests.Unicorn
|
||||
public UnicornAArch32()
|
||||
{
|
||||
Uc = new UnicornEngine.Unicorn(Common.UC_ARCH_ARM, Common.UC_MODE_LITTLE_ENDIAN);
|
||||
|
||||
SetRegister(Arm.UC_ARM_REG_C1_C0_2, GetRegister(Arm.UC_ARM_REG_C1_C0_2) | 0xf00000);
|
||||
|
||||
UcArmCpReg reg = new()
|
||||
{
|
||||
Cp = 15,
|
||||
Is64 = 0,
|
||||
Sec = 0,
|
||||
CRn = 13,
|
||||
Opc1 = 0,
|
||||
CRm = 0,
|
||||
Opc2 = 2
|
||||
};
|
||||
|
||||
GetRegister(Arm.UC_ARM_REG_CP_REG, ref reg);
|
||||
reg.Val |= 0xf00000;
|
||||
SetRegister(Arm.UC_ARM_REG_CP_REG, reg);
|
||||
|
||||
SetRegister(Arm.UC_ARM_REG_FPEXC, 0x40000000);
|
||||
}
|
||||
|
||||
@@ -204,6 +231,17 @@ namespace Ryujinx.Tests.Unicorn
|
||||
SetVector(Arm.UC_ARM_REG_D0 + index * 2, value);
|
||||
}
|
||||
|
||||
public void GetRegister<T>(int register, ref T obj) where T : unmanaged
|
||||
{
|
||||
Span<T> span = new(ref obj);
|
||||
Span<byte> dataSpan = MemoryMarshal.Cast<T, byte>(span);
|
||||
byte[] data = dataSpan.ToArray();
|
||||
|
||||
Uc.RegRead(register, data);
|
||||
|
||||
data.AsSpan().CopyTo(dataSpan);
|
||||
}
|
||||
|
||||
public uint GetRegister(int register)
|
||||
{
|
||||
byte[] data = new byte[4];
|
||||
@@ -213,6 +251,13 @@ namespace Ryujinx.Tests.Unicorn
|
||||
return BitConverter.ToUInt32(data, 0);
|
||||
}
|
||||
|
||||
public void SetRegister<T>(int register, T obj) where T : unmanaged
|
||||
{
|
||||
byte[] data = MemoryMarshal.Cast<T, byte>(new Span<T>(ref obj)).ToArray();
|
||||
|
||||
Uc.RegWrite(register, data);
|
||||
}
|
||||
|
||||
public void SetRegister(int register, uint value)
|
||||
{
|
||||
byte[] data = BitConverter.GetBytes(value);
|
||||
|
||||
@@ -7,6 +7,7 @@ using Ryujinx.Common.Memory;
|
||||
using Ryujinx.Common.Memory.PartialUnmaps;
|
||||
using Ryujinx.Cpu;
|
||||
using Ryujinx.Cpu.Jit;
|
||||
using Ryujinx.Cpu.Signal;
|
||||
using Ryujinx.Memory;
|
||||
using Ryujinx.Memory.Tracking;
|
||||
using System;
|
||||
@@ -60,6 +61,8 @@ namespace Ryujinx.Tests.Memory
|
||||
new JitMemoryAllocator(),
|
||||
new MockMemoryManager(),
|
||||
AddressTable<ulong>.CreateForArm(true, MemoryManagerType.SoftwarePageTable));
|
||||
|
||||
NativeSignalHandler.InitializeSignalHandler();
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -818,8 +818,7 @@ namespace Ryujinx.Ava.Systems
|
||||
|
||||
if (!Device.LoadCart(ApplicationPath, romFsFiles[0]))
|
||||
{
|
||||
await ContentDialogHelper.CreateErrorDialog(
|
||||
"Please specify an unpacked game directory with a valid exefs or NSO/NRO.");
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Error_NoUnpackedApplicationFoundInFolder));
|
||||
Device.Dispose();
|
||||
|
||||
cts.Cancel();
|
||||
@@ -831,8 +830,7 @@ namespace Ryujinx.Ava.Systems
|
||||
Logger.Info?.Print(LogClass.Application, "Loading as cart WITHOUT RomFS.");
|
||||
if (!Device.LoadCart(ApplicationPath))
|
||||
{
|
||||
await ContentDialogHelper.CreateErrorDialog(
|
||||
"Please specify an unpacked game directory with a valid exefs or NSO/NRO.");
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.Error_NoUnpackedApplicationFoundInFolder));
|
||||
Device.Dispose();
|
||||
cts.Cancel();
|
||||
throw new OperationCanceledException(cts.Token);
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace Ryujinx.Ava.Systems
|
||||
LargeImageText = TruncateToByteLength(_description)
|
||||
},
|
||||
Details = "Main Menu",
|
||||
State = "Idling",
|
||||
State = "Waiting",
|
||||
Timestamps = EmulatorStartedAt
|
||||
};
|
||||
|
||||
|
||||
@@ -1069,7 +1069,6 @@ namespace Ryujinx.Ava.Systems.PlayReport
|
||||
|
||||
_ => FormattedValue.ForceReset
|
||||
};
|
||||
|
||||
private static FormattedValue TomodachiLifeLTD_Status(SingleValue value)
|
||||
{
|
||||
MessagePackObject messagePackObject = value.Matched.PackedValue;
|
||||
@@ -1077,8 +1076,9 @@ namespace Ryujinx.Ava.Systems.PlayReport
|
||||
|
||||
int miiCount = messagePackObjectDictionary["MiiNum"].AsInt32();
|
||||
int fountainLevel = messagePackObjectDictionary["FountainLevel"].AsInt32();
|
||||
|
||||
return $"Looking after {"Mii".ToQuantity(miiCount)}, with an island level of {fountainLevel}";
|
||||
|
||||
// Fountain Level should be kept consistent throughout code, so I basically made sure of it
|
||||
return $"Looking after {"Mii".ToQuantity(miiCount)}, with a fountain level of {fountainLevel}";
|
||||
}
|
||||
|
||||
private static FormattedValue AnimalCrossingNewHorizons_AppCommon(SingleValue value)
|
||||
@@ -1088,5 +1088,33 @@ namespace Ryujinx.Ava.Systems.PlayReport
|
||||
|
||||
return $"Living on {messagePackObjectDictionary["LandName"].AsString()} Island";
|
||||
}
|
||||
|
||||
private static FormattedValue MiitopiaRPC(SparseMultiValue values)
|
||||
{
|
||||
if (values.Matched.TryGetValue("gold", out Value gold) && values.Matched.TryGetValue("stage", out Value location))
|
||||
{
|
||||
return $"{LocFinal(location.ToString())} with {gold} gold";
|
||||
}
|
||||
|
||||
if (values.Matched.TryGetValue("secret", out Value secret)) // Yes "secret" is unused, but it only appears in the MII selector.
|
||||
{
|
||||
return $"In the MII selector";
|
||||
}
|
||||
|
||||
return $"At the main menu";
|
||||
|
||||
static string LocFinal(string? location) => location switch
|
||||
{
|
||||
"0" => "Somewhere in Miitopia",
|
||||
"1" => "Wandering around Greenhorne",
|
||||
"2" => "Trodding through Neksdor",
|
||||
"3" => "Exploring The Realm of the Fey",
|
||||
"4" => "Burning their feet at Karkaton",
|
||||
"5" => "Soaring in the skies of Miitopia",
|
||||
"6" => "Fighting up The Sky Scraper",
|
||||
"7" => "Traveling Miitopia",
|
||||
_ => "Wandering"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,6 +132,12 @@ namespace Ryujinx.Ava.Systems.PlayReport
|
||||
.WithDescription("based on your island name.")
|
||||
.AddValueFormatter("AppCmn", AnimalCrossingNewHorizons_AppCommon)
|
||||
)
|
||||
.AddSpec(
|
||||
"01003da010e8a000", // Miitopia 01003da010e8a000
|
||||
spec => spec
|
||||
.WithDescription("based on gold count, report info only in the mii selector, and gamestage (progression)")
|
||||
.AddSparseMultiValueFormatter(["gold", "secret", "stage"], MiitopiaRPC)
|
||||
)
|
||||
);
|
||||
|
||||
private static string Playing(string game) => $"Playing {game}";
|
||||
|
||||
@@ -13,6 +13,7 @@ using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using static Ryujinx.Ava.Utilities.StorageProviderExtensions;
|
||||
|
||||
namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
@@ -128,7 +129,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
public async void Add()
|
||||
{
|
||||
IReadOnlyList<IStorageFile> result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||
IReadOnlyList<IStorageFile> result = await CoreDumpable(() => _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.SelectDlcDialogTitle],
|
||||
AllowMultiple = true,
|
||||
@@ -141,7 +142,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
MimeTypes = ["application/x-nx-nsp"],
|
||||
},
|
||||
},
|
||||
});
|
||||
}));
|
||||
|
||||
int totalDlcAdded = 0;
|
||||
foreach (IStorageFile file in result)
|
||||
@@ -250,7 +251,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
private Task ShowNewDlcAddedDialog(int numAdded)
|
||||
{
|
||||
string msg = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowDlcAddedMessage], numAdded);
|
||||
string msg = string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_DLCAddedMessage], numAdded);
|
||||
return Dispatcher.UIThread.InvokeAsync(async () =>
|
||||
{
|
||||
await ContentDialogHelper.ShowTextDialog(
|
||||
|
||||
@@ -136,9 +136,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
[ObservableProperty] public partial float VolumeBeforeMute { get; set; }
|
||||
|
||||
[ObservableProperty]
|
||||
public partial bool AreMimeTypesRegistered { get; set; } = FileAssociationHelper.AreMimeTypesRegistered;
|
||||
|
||||
[ObservableProperty] public partial Cursor Cursor { get; set; }
|
||||
|
||||
[ObservableProperty] public partial string Title { get; set; }
|
||||
@@ -219,6 +216,11 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
_rendererWaitEvent = new AutoResetEvent(false);
|
||||
|
||||
LocaleManager.Instance.PropertyChanged += (sender, args) =>
|
||||
{
|
||||
RefreshFileTypeAssociationToggle();
|
||||
};
|
||||
|
||||
if (Program.PreviewerDetached)
|
||||
{
|
||||
LoadConfigurableHotKeys();
|
||||
@@ -679,11 +681,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
get => ConsoleHelper.SetConsoleWindowStateSupported;
|
||||
}
|
||||
|
||||
public bool ManageFileTypesVisible
|
||||
{
|
||||
get => FileAssociationHelper.IsTypeAssociationSupported;
|
||||
}
|
||||
|
||||
public Glyph Glyph
|
||||
{
|
||||
get => (Glyph)ConfigurationState.Instance.UI.GameListViewMode.Value;
|
||||
@@ -941,6 +938,71 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool FileTypeAssociationsVisible
|
||||
{
|
||||
get => FileAssociationHelper.IsTypeAssociationSupported;
|
||||
}
|
||||
|
||||
private void RefreshFileTypeAssociationToggle()
|
||||
{
|
||||
OnPropertyChanged(nameof(FileTypeAssociationsMenuHeader));
|
||||
OnPropertyChanged(nameof(FileTypeAssociationsIcon));
|
||||
}
|
||||
|
||||
private bool _areMimeTypesRegistered = FileAssociationHelper.AreMimeTypesRegistered;
|
||||
|
||||
public bool AreMimeTypesRegistered
|
||||
{
|
||||
get => _areMimeTypesRegistered;
|
||||
set
|
||||
{
|
||||
if (_areMimeTypesRegistered != value)
|
||||
{
|
||||
_areMimeTypesRegistered = value;
|
||||
RefreshFileTypeAssociationToggle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string FileTypeAssociationsMenuHeader =>
|
||||
AreMimeTypesRegistered
|
||||
? LocaleManager.Instance[LocaleKeys.MenuBar_File_RemoveFileTypeAssociationsButton]
|
||||
: LocaleManager.Instance[LocaleKeys.MenuBar_File_AssociateFileTypesButton];
|
||||
|
||||
public string FileTypeAssociationsIcon =>
|
||||
AreMimeTypesRegistered
|
||||
? "fa-solid fa-link-slash"
|
||||
: "fa-solid fa-link";
|
||||
|
||||
[RelayCommand]
|
||||
private async Task ToggleFileTypeAssociations()
|
||||
{
|
||||
if (AreMimeTypesRegistered)
|
||||
await RemoveFileTypeAssociations();
|
||||
else
|
||||
await AssociateFileTypes();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private async Task AssociateFileTypes()
|
||||
{
|
||||
AreMimeTypesRegistered = FileAssociationHelper.Install();
|
||||
if (AreMimeTypesRegistered)
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.Dialog_FileTypeAssociations_AssociationSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty);
|
||||
else
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.Dialog_FileTypeAssociations_AssociationFailedMessage]);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private async Task RemoveFileTypeAssociations()
|
||||
{
|
||||
AreMimeTypesRegistered = !FileAssociationHelper.Uninstall();
|
||||
if (!AreMimeTypesRegistered)
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.Dialog_FileTypeAssociations_RemoveAssociationSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty);
|
||||
else
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.Dialog_FileTypeAssociations_RemoveAssociationFailedMessage]);
|
||||
}
|
||||
|
||||
public async Task HandleFirmwareInstallation(string filename)
|
||||
{
|
||||
try
|
||||
@@ -1407,10 +1469,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
public void HideUi() => ShowMenuAndStatusBar = false;
|
||||
|
||||
public void ToggleStartGamesInFullscreen() => StartGamesInFullscreen = !StartGamesInFullscreen;
|
||||
|
||||
public void ToggleStartGamesWithoutUi() => StartGamesWithoutUi = !StartGamesWithoutUi;
|
||||
|
||||
public void ToggleShowConsole() => ShowConsole = !ShowConsole;
|
||||
|
||||
public void SetListMode() => Glyph = Glyph.List;
|
||||
@@ -1601,11 +1659,14 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
AppHost.Device.System.SimulateWakeUpMessage();
|
||||
}
|
||||
|
||||
public async Task OpenFile()
|
||||
public KeyGesture LoadApplicationFromFileGesture => KeyGesture.Parse(OperatingSystem.IsMacOS() ? "Cmd+O" : "Ctrl+O");
|
||||
public KeyGesture LoadUnpackedGameFromFolderFileGesture => KeyGesture.Parse(OperatingSystem.IsMacOS() ? "Cmd+Shift+O" : "Ctrl+Shift+O");
|
||||
|
||||
public async Task LoadApplicationFromFile()
|
||||
{
|
||||
Optional<IStorageFile> result = await StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.LoadApplicationFromFileDialogTitle],
|
||||
Title = LocaleManager.Instance[LocaleKeys.Dialog_FileMenu_LoadApplicationFromFileFilePickerTitle],
|
||||
FileTypeFilter = new List<FilePickerFileType>
|
||||
{
|
||||
new(LocaleManager.Instance[LocaleKeys.AllSupportedFormats])
|
||||
@@ -1671,35 +1732,17 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
else
|
||||
{
|
||||
await ContentDialogHelper.CreateErrorDialog(
|
||||
LocaleManager.Instance[LocaleKeys.MenuBarFileOpenFromFileError]);
|
||||
LocaleManager.Instance[LocaleKeys.Error_NoApplicationFoundInFile]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task LoadDlcFromFolder()
|
||||
{
|
||||
await LoadContentFromFolder(
|
||||
LocaleKeys.AutoloadDlcAddedMessage,
|
||||
LocaleKeys.AutoloadDlcRemovedMessage,
|
||||
ApplicationLibrary.AutoLoadDownloadableContents,
|
||||
LocaleKeys.LoadDLCFromFolderDialogTitle);
|
||||
}
|
||||
|
||||
public async Task LoadTitleUpdatesFromFolder()
|
||||
{
|
||||
await LoadContentFromFolder(
|
||||
LocaleKeys.AutoloadUpdateAddedMessage,
|
||||
LocaleKeys.AutoloadUpdateRemovedMessage,
|
||||
ApplicationLibrary.AutoLoadTitleUpdates,
|
||||
LocaleKeys.LoadTitleUpdatesFromFolderDialogTitle);
|
||||
}
|
||||
|
||||
public async Task OpenFolder()
|
||||
public async Task LoadUnpackedGameFromFolder()
|
||||
{
|
||||
Optional<IStorageFolder> result = await StorageProvider.OpenSingleFolderPickerAsync(
|
||||
new FolderPickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.LoadUnpackedGameFromFolderDialogTitle]
|
||||
Title = LocaleManager.Instance[LocaleKeys.Dialog_FileMenu_LoadUnpackedApplicationFromFolderFilePickerTitle]
|
||||
});
|
||||
|
||||
if (result.TryGet(out IStorageFolder value))
|
||||
@@ -1713,6 +1756,36 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<IReadOnlyList<string>?> PickFolders(LocaleKeys titleKey)
|
||||
{
|
||||
return (await StorageProvider.OpenMultiFolderPickerAsync(new FolderPickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[titleKey]
|
||||
})).TryGet(out IReadOnlyList<IStorageFolder> folders)
|
||||
? folders.Select(f => f.Path.LocalPath).ToList()
|
||||
: null;
|
||||
}
|
||||
|
||||
public async Task LoadTitleUpdatesAndDLCFromFolder()
|
||||
{
|
||||
if (await PickFolders(LocaleKeys.Dialog_FileMenu_LoadUpdatesAndDLCFromFolderFilePickerTitle) is not { } dirs)
|
||||
return;
|
||||
|
||||
int updAdded = ApplicationLibrary.AutoLoadTitleUpdates(dirs.ToList(), out _);
|
||||
int dlcAdded = ApplicationLibrary.AutoLoadDownloadableContents(dirs.ToList(), out _);
|
||||
|
||||
await Dispatcher.UIThread.InvokeAsync(async () =>
|
||||
{
|
||||
await ContentDialogHelper.ShowTextDialog(
|
||||
LocaleManager.Instance[LocaleKeys.RyujinxConfirm],
|
||||
string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_UpdatesAddedMessage], updAdded) + "\n\n" +
|
||||
string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_DLCAddedMessage], dlcAdded),
|
||||
string.Empty, string.Empty, string.Empty,
|
||||
LocaleManager.Instance[LocaleKeys.InputDialogOk],
|
||||
(int)Symbol.Checkmark);
|
||||
});
|
||||
}
|
||||
|
||||
public static bool InitializeUserConfig(ApplicationData application)
|
||||
{
|
||||
// Code where conditions will be met before loading the user configuration (Global Config)
|
||||
|
||||
@@ -17,6 +17,7 @@ using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using static Ryujinx.Ava.Utilities.StorageProviderExtensions;
|
||||
|
||||
namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
@@ -288,11 +289,11 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
public async void Add()
|
||||
{
|
||||
IReadOnlyList<IStorageFolder> result = await _storageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions
|
||||
IReadOnlyList<IStorageFolder> result = await CoreDumpable(() => _storageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions
|
||||
{
|
||||
Title = LocaleManager.Instance[LocaleKeys.SelectModDialogTitle],
|
||||
AllowMultiple = true,
|
||||
});
|
||||
}));
|
||||
|
||||
foreach (IStorageFolder folder in result)
|
||||
{
|
||||
|
||||
@@ -109,6 +109,31 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
public bool StartGamesInFullscreen
|
||||
{
|
||||
get => ConfigurationState.Instance.UI.StartFullscreen;
|
||||
set
|
||||
{
|
||||
if (ConfigurationState.Instance.UI.StartFullscreen.Value != value)
|
||||
{
|
||||
ConfigurationState.Instance.UI.StartFullscreen.Value = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
public bool StartGamesWithoutUi
|
||||
{
|
||||
get => ConfigurationState.Instance.UI.StartNoUI;
|
||||
set
|
||||
{
|
||||
if (ConfigurationState.Instance.UI.StartNoUI.Value != value)
|
||||
{
|
||||
ConfigurationState.Instance.UI.StartNoUI.Value = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int GraphicsBackendMultithreadingIndex
|
||||
{
|
||||
get;
|
||||
@@ -638,6 +663,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
HideCursor = (int)config.HideCursor.Value;
|
||||
UpdateCheckerType = (int)config.UpdateCheckerType.Value;
|
||||
FocusLostActionType = (int)config.FocusLostActionType.Value;
|
||||
StartGamesInFullscreen = config.UI.StartFullscreen;
|
||||
StartGamesWithoutUi = config.UI.StartNoUI;
|
||||
|
||||
GameDirectories.Clear();
|
||||
GameDirectories.AddRange(config.UI.GameDirs.Value);
|
||||
@@ -758,6 +785,8 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
config.FocusLostActionType.Value = (FocusLostType)FocusLostActionType;
|
||||
config.UI.GameDirs.Value = [.. GameDirectories];
|
||||
config.UI.AutoloadDirs.Value = [.. AutoloadDirectories];
|
||||
config.UI.StartFullscreen.Value = StartGamesInFullscreen;
|
||||
config.UI.StartNoUI.Value = StartGamesWithoutUi;
|
||||
|
||||
config.UI.BaseStyle.Value = BaseStyleIndex switch
|
||||
{
|
||||
|
||||
@@ -11,6 +11,7 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using static Ryujinx.Ava.Utilities.StorageProviderExtensions;
|
||||
|
||||
namespace Ryujinx.Ava.UI.ViewModels
|
||||
{
|
||||
@@ -148,7 +149,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
public async Task Add()
|
||||
{
|
||||
IReadOnlyList<IStorageFile> result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||
IReadOnlyList<IStorageFile> result = await CoreDumpable(() => _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||
{
|
||||
AllowMultiple = true,
|
||||
FileTypeFilter = new List<FilePickerFileType>
|
||||
@@ -160,7 +161,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
MimeTypes = ["application/x-nx-nsp"],
|
||||
},
|
||||
},
|
||||
});
|
||||
}));
|
||||
|
||||
int totalUpdatesAdded = 0;
|
||||
foreach (IStorageFile file in result)
|
||||
@@ -187,7 +188,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||
|
||||
private Task<UserResult> ShowNewUpdatesAddedDialog(int numAdded)
|
||||
{
|
||||
string msg = string.Format(LocaleManager.Instance[LocaleKeys.UpdateWindowUpdateAddedMessage], numAdded);
|
||||
string msg = string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_UpdatesAddedMessage], numAdded);
|
||||
return Dispatcher.UIThread.InvokeAsync(async () =>
|
||||
await ContentDialogHelper.ShowTextDialog(
|
||||
LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle],
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
mc:Ignorable="d"
|
||||
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
|
||||
xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls"
|
||||
xmlns:i="clr-namespace:Projektanker.Icons.Avalonia;assembly=Projektanker.Icons.Avalonia"
|
||||
xmlns:common="clr-namespace:Ryujinx.Common;assembly=Ryujinx.Common"
|
||||
xmlns:renderDocApi="clr-namespace:Ryujinx.Graphics.RenderDocApi;assembly=Ryujinx.Graphics.RenderDocApi"
|
||||
x:DataType="viewModels:MainWindowViewModel"
|
||||
@@ -29,122 +30,71 @@
|
||||
<DockPanel Margin="0" HorizontalAlignment="Stretch" />
|
||||
</ItemsPanelTemplate>
|
||||
</Menu.ItemsPanel>
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarFile}">
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBar_File_FileLabel}">
|
||||
<MenuItem
|
||||
Command="{Binding OpenFile}"
|
||||
Header="{ext:Locale MenuBarFileOpenFromFile}"
|
||||
Command="{Binding LoadApplicationFromFile}"
|
||||
Header="{ext:Locale MenuBar_File_LoadApplicationFromFileButton}"
|
||||
Icon="{ext:Icon fa-solid fa-file}"
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||
InputGesture="{Binding LoadApplicationFromFileGesture}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenFolder}"
|
||||
Header="{ext:Locale MenuBarFileOpenUnpacked}"
|
||||
Command="{Binding LoadUnpackedGameFromFolder}"
|
||||
Header="{ext:Locale MenuBar_File_LoadUnpackedGameFromFolderButton}"
|
||||
Icon="{ext:Icon fa-solid fa-folder-open}"
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||
InputGesture="{Binding LoadUnpackedGameFromFolderFileGesture}" />
|
||||
<MenuItem
|
||||
Command="{Binding LoadTitleUpdatesFromFolder}"
|
||||
Header="{ext:Locale MenuBarFileLoadTitleUpdatesFromFolder}"
|
||||
Icon="{ext:Icon fa-solid fa-diagram-predecessor}"
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
||||
<MenuItem
|
||||
Command="{Binding LoadDlcFromFolder}"
|
||||
Header="{ext:Locale MenuBarFileLoadDlcFromFolder}"
|
||||
Icon="{ext:Icon fa-solid fa-puzzle-piece}"
|
||||
Command="{Binding LoadTitleUpdatesAndDLCFromFolder}"
|
||||
Header="{ext:Locale MenuBar_File_LoadTitleUpdatesAndDLCFromFolderButton}"
|
||||
Icon="{ext:Icon fa-solid fa-inbox}"
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}" />
|
||||
<Separator />
|
||||
<MenuItem
|
||||
Command="{Binding OpenRyujinxFolder}"
|
||||
Header="{ext:Locale MenuBarFileOpenEmuFolder}"
|
||||
Header="{ext:Locale MenuBar_File_OpenRyuijnxFolderButton}"
|
||||
Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenLogsFolder}"
|
||||
Header="{ext:Locale MenuBarFileOpenLogsFolder}"
|
||||
Icon="{ext:Icon fa-solid fa-terminal}" />
|
||||
Header="{ext:Locale MenuBar_File_OpenLogsFolderButton}"
|
||||
Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
<MenuItem
|
||||
Command="{Binding OpenScreenshotsFolder}"
|
||||
Header="{ext:Locale MenuBarFileOpenScreenshotsFolder}"
|
||||
Icon="{ext:Icon fa-solid fa-image}" />
|
||||
<Separator IsVisible="{Binding ManageFileTypesVisible}" />
|
||||
<MenuItem Header="{ext:Locale MenuBar_File_ManageFileTypes}" IsVisible="{Binding ManageFileTypesVisible}" Icon="{ext:Icon fa-solid fa-clipboard}">
|
||||
<MenuItem Name="InstallFileTypesMenuItem" Header="{ext:Locale MenuBar_File_InstallFileTypes}" IsEnabled="{Binding AreMimeTypesRegistered, Converter={x:Static BoolConverters.Not}}" Icon="{ext:Icon fa-solid fa-square-plus}" />
|
||||
<MenuItem Name="UninstallFileTypesMenuItem" Header="{ext:Locale MenuBar_File_UninstallFileTypes}" IsEnabled="{Binding AreMimeTypesRegistered}" Icon="{ext:Icon fa-solid fa-square-minus}" />
|
||||
Header="{ext:Locale MenuBar_File_OpenScreenshotsFolderButton}"
|
||||
Icon="{ext:Icon fa-solid fa-folder-closed}" />
|
||||
<Separator IsVisible="{Binding FileTypeAssociationsVisible}" />
|
||||
<MenuItem
|
||||
Command="{Binding ToggleFileTypeAssociationsCommand}"
|
||||
Header="{Binding FileTypeAssociationsMenuHeader}"
|
||||
IsVisible="{Binding FileTypeAssociationsVisible}"
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||
ToolTip.Tip="{ext:Locale MenuBar_File_FileTypeAssociationsToolTip}">
|
||||
<MenuItem.Icon>
|
||||
<i:Icon Value="{Binding FileTypeAssociationsIcon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem
|
||||
Name="CloseRyujinxMenuItem"
|
||||
Header="{ext:Locale MenuBarFileExit}"
|
||||
Icon="{ext:Icon fa-solid fa-power-off}" />
|
||||
Header="{ext:Locale MenuBar_File_ExitButton}"
|
||||
Icon="{ext:Icon fa-solid fa-arrow-right-from-bracket}" />
|
||||
</MenuItem>
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarOptions}">
|
||||
<MenuItem
|
||||
Command="{Binding ToggleFullscreen}"
|
||||
Header="{ext:Locale MenuBarOptionsToggleFullscreen}"
|
||||
Classes="withCheckbox"
|
||||
Padding="0"
|
||||
Icon="{ext:Icon fa-solid fa-expand}"
|
||||
InputGesture="F11">
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
Padding="0"
|
||||
Command="{Binding ToggleStartGamesInFullscreen}"
|
||||
Header="{ext:Locale MenuBarOptionsStartGamesInFullscreen}"
|
||||
Classes="withCheckbox">
|
||||
<MenuItem.Icon>
|
||||
<CheckBox
|
||||
MinWidth="{DynamicResource CheckBoxSize}"
|
||||
MinHeight="{DynamicResource CheckBoxSize}"
|
||||
IsChecked="{Binding StartGamesInFullscreen, Mode=TwoWay}"
|
||||
Padding="0" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
Padding="0"
|
||||
Command="{Binding ToggleStartGamesWithoutUi}"
|
||||
Header="{ext:Locale MenuBarOptionsStartGamesWithoutUI}"
|
||||
Classes="withCheckbox">
|
||||
<MenuItem.Icon>
|
||||
<CheckBox
|
||||
MinWidth="{DynamicResource CheckBoxSize}"
|
||||
MinHeight="{DynamicResource CheckBoxSize}"
|
||||
IsChecked="{Binding StartGamesWithoutUi, Mode=TwoWay}"
|
||||
Padding="0" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
Padding="0"
|
||||
IsVisible="{Binding ShowConsoleVisible}"
|
||||
Command="{Binding ToggleShowConsole}"
|
||||
Header="{ext:Locale MenuBarOptionsShowConsole}"
|
||||
Classes="withCheckbox">
|
||||
<MenuItem.Icon>
|
||||
<CheckBox
|
||||
MinWidth="{DynamicResource CheckBoxSize}"
|
||||
MinHeight="{DynamicResource CheckBoxSize}"
|
||||
IsChecked="{Binding ShowConsole, Mode=TwoWay}"
|
||||
Padding="0" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator/>
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBar_Options_OptionsLabel}">
|
||||
<MenuItem
|
||||
Name="ChangeLanguageMenuItem"
|
||||
Padding="0"
|
||||
Header="{ext:Locale MenuBarOptionsChangeLanguage}"
|
||||
Icon="{ext:Icon fa-solid fa-globe}"
|
||||
Classes="withCheckbox">
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
Name="OpenSettingsMenuItem"
|
||||
Padding="0"
|
||||
Header="{ext:Locale MenuBarOptionsSettings}"
|
||||
Icon="{ext:Icon fa-solid fa-gear}"
|
||||
Classes="withCheckbox">
|
||||
Header="{ext:Locale MenuBar_Options_LanguageButton}"
|
||||
Icon="{ext:Icon fa-solid fa-globe}">
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
Command="{Binding ManageProfiles}"
|
||||
Padding="0"
|
||||
Header="{ext:Locale MenuBarOptionsManageUserProfiles}"
|
||||
Header="{ext:Locale MenuBar_Options_UserProfilesButton}"
|
||||
Icon="{ext:Icon fa-solid fa-user}"
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}"
|
||||
Classes="withCheckbox">
|
||||
IsEnabled="{Binding EnableNonGameRunningControls}">
|
||||
</MenuItem>
|
||||
<Separator/>
|
||||
<MenuItem
|
||||
Name="OpenSettingsMenuItem"
|
||||
Header="{ext:Locale MenuBar_Options_SettingsButton}"
|
||||
Icon="{ext:Icon fa-solid fa-gear}">
|
||||
</MenuItem>
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
@@ -270,13 +220,36 @@
|
||||
</MenuItem>
|
||||
</MenuItem>
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarView}">
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarViewWindow}" Icon="{ext:Icon fa-solid fa-window-restore}">
|
||||
<MenuItem Name="WindowSize720PMenuItem" Header="{ext:Locale MenuBarViewWindow720}" CommandParameter="1280 720" />
|
||||
<MenuItem Name="WindowSize1080PMenuItem" Header="{ext:Locale MenuBarViewWindow1080}" CommandParameter="1920 1080" />
|
||||
<MenuItem Name="WindowSize1440PMenuItem" Header="{ext:Locale MenuBarViewWindow1440}" CommandParameter="2560 1440" />
|
||||
<MenuItem Name="WindowSize2160PMenuItem" Header="{ext:Locale MenuBarViewWindow2160}" CommandParameter="3840 2160" />
|
||||
<MenuItem
|
||||
Command="{Binding ToggleShowConsole}"
|
||||
IsVisible="{Binding ShowConsoleVisible}"
|
||||
Header="{ext:Locale MenuBar_View_ShowConsoleButton}"
|
||||
Classes="withCheckbox"
|
||||
Padding="0">
|
||||
<MenuItem.Icon>
|
||||
<CheckBox
|
||||
MinWidth="{DynamicResource CheckBoxSize}"
|
||||
MinHeight="{DynamicResource CheckBoxSize}"
|
||||
IsChecked="{Binding ShowConsole, Mode=TwoWay}"
|
||||
Padding="0" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem Name="ToggleFileTypesMenuItem" Header="{ext:Locale MenuBarShowFileTypes}" Icon="{ext:Icon fa-solid fa-tags}" />
|
||||
<MenuItem
|
||||
Command="{Binding ToggleFullscreen}"
|
||||
Padding="0"
|
||||
Header="{ext:Locale MenuBar_View_ToggleFullscreenButton}"
|
||||
Icon="{ext:Icon fa-solid fa-expand}"
|
||||
InputGesture="F11"
|
||||
Classes="withCheckbox">
|
||||
</MenuItem>
|
||||
<MenuItem VerticalAlignment="Center" Padding="0" Header="{ext:Locale MenuBarViewWindow}" Icon="{ext:Icon fa-solid fa-window-restore}" Classes="withCheckbox">
|
||||
<MenuItem Name="WindowSize720PMenuItem" Padding = "15,0,0,0" Header="{ext:Locale MenuBarViewWindow720}" CommandParameter="1280 720" />
|
||||
<MenuItem Name="WindowSize1080PMenuItem" Padding = "15,0,0,0" Header="{ext:Locale MenuBarViewWindow1080}" CommandParameter="1920 1080" />
|
||||
<MenuItem Name="WindowSize1440PMenuItem" Padding = "15,0,0,0" Header="{ext:Locale MenuBarViewWindow1440}" CommandParameter="2560 1440" />
|
||||
<MenuItem Name="WindowSize2160PMenuItem" Padding = "15,0,0,0" Header="{ext:Locale MenuBarViewWindow2160}" CommandParameter="3840 2160" />
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem Name="ToggleFileTypesMenuItem" Padding="0" Header="{ext:Locale MenuBarShowFileTypes}" Icon="{ext:Icon fa-solid fa-tags}" Classes="withCheckbox" />
|
||||
</MenuItem>
|
||||
<MenuItem VerticalAlignment="Center" Header="{ext:Locale MenuBarHelp}">
|
||||
<MenuItem
|
||||
|
||||
@@ -36,7 +36,6 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
|
||||
ToggleFileTypesMenuItem.ItemsSource = GenerateToggleFileTypeItems();
|
||||
ChangeLanguageMenuItem.ItemsSource = GenerateLanguageMenuItems();
|
||||
|
||||
MiiAppletMenuItem.Command = Commands.Create(OpenMiiApplet);
|
||||
CloseRyujinxMenuItem.Command = Commands.Create(() => Window?.Close());
|
||||
OpenSettingsMenuItem.Command = Commands.Create(OpenSettings);
|
||||
@@ -44,8 +43,6 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
ResumeEmulationMenuItem.Command = Commands.Create(() => ViewModel.AppHost?.Resume());
|
||||
StopEmulationMenuItem.Command = Commands.Create(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted());
|
||||
RestartEmulationMenuItem.Command = Commands.Create(() => ViewModel.RestartEmulation());
|
||||
InstallFileTypesMenuItem.Command = Commands.Create(InstallFileTypes);
|
||||
UninstallFileTypesMenuItem.Command = Commands.Create(UninstallFileTypes);
|
||||
XciTrimmerMenuItem.Command = Commands.Create(XciTrimmerView.Show);
|
||||
AboutWindowMenuItem.Command = Commands.Create(AboutView.Show);
|
||||
CompatibilityListMenuItem.Command = Commands.Create(() => CompatibilityListWindow.Show());
|
||||
@@ -77,6 +74,7 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
.Select(it =>
|
||||
new CheckBox
|
||||
{
|
||||
Margin = new Thickness(10, 0, 0, 0),
|
||||
Content = $".{it.FileName}",
|
||||
IsChecked = it.FileType.GetConfigValue(ConfigurationState.Instance.UI.ShownFileTypes),
|
||||
Command = Commands.Create(() => Window.ToggleFileType(it.FileName))
|
||||
@@ -98,8 +96,7 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
|
||||
MenuItem menuItem = new()
|
||||
{
|
||||
Padding = new Thickness(15, 0, 0, 0),
|
||||
Margin = new Thickness(3, 0, 3, 0),
|
||||
Padding = new Thickness(10, 0, 0, 0),
|
||||
HorizontalAlignment = HorizontalAlignment.Stretch,
|
||||
Header = code == currentLanguageCode ? $"{languageName} ✔" : languageName,
|
||||
Command = Commands.Create(() => MainWindowViewModel.ChangeLanguage(code))
|
||||
@@ -189,24 +186,6 @@ namespace Ryujinx.Ava.UI.Views.Main
|
||||
ViewModel.ShowSkylanderActions = string.Equals(ViewModel.AppHost.Device.Processes.ActiveApplication.ProgramIdText.ToUpper(), "0100CCC0002E6000");
|
||||
}
|
||||
|
||||
private async Task InstallFileTypes()
|
||||
{
|
||||
ViewModel.AreMimeTypesRegistered = FileAssociationHelper.Install();
|
||||
if (ViewModel.AreMimeTypesRegistered)
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty);
|
||||
else
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogInstallFileTypesErrorMessage]);
|
||||
}
|
||||
|
||||
private async Task UninstallFileTypes()
|
||||
{
|
||||
ViewModel.AreMimeTypesRegistered = !FileAssociationHelper.Uninstall();
|
||||
if (!ViewModel.AreMimeTypesRegistered)
|
||||
await ContentDialogHelper.CreateInfoDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesSuccessMessage], string.Empty, LocaleManager.Instance[LocaleKeys.InputDialogOk], string.Empty, string.Empty);
|
||||
else
|
||||
await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance[LocaleKeys.DialogUninstallFileTypesErrorMessage]);
|
||||
}
|
||||
|
||||
private void ChangeWindowSize(string resolution)
|
||||
{
|
||||
(int resolutionWidth, int resolutionHeight) = resolution.Split(' ', 2)
|
||||
|
||||
@@ -36,6 +36,25 @@
|
||||
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}" />
|
||||
</StackPanel>
|
||||
</CheckBox>
|
||||
<CheckBox
|
||||
IsEnabled="{Binding !IsGameTitleNotNull}"
|
||||
Opacity="{Binding PanelOpacity}"
|
||||
IsChecked="{Binding StartGamesInFullscreen, Mode=TwoWay}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{ext:Locale Settings_Interface_StartGamesInFullscreenCheckboxLabel}" />
|
||||
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}" />
|
||||
</StackPanel>
|
||||
</CheckBox>
|
||||
<CheckBox
|
||||
IsEnabled="{Binding !IsGameTitleNotNull}"
|
||||
Opacity="{Binding PanelOpacity}"
|
||||
IsChecked="{Binding StartGamesWithoutUi, Mode=TwoWay}"
|
||||
ToolTip.Tip="{ext:Locale Settings_Interface_StartGamesWithoutUICheckboxLabelToolTip}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{ext:Locale Settings_Interface_StartGamesWithoutUICheckboxLabel}" />
|
||||
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}" />
|
||||
</StackPanel>
|
||||
</CheckBox>
|
||||
<CheckBox
|
||||
IsEnabled="{Binding !IsGameTitleNotNull}"
|
||||
Opacity="{Binding PanelOpacity}"
|
||||
|
||||
@@ -4,10 +4,12 @@ using Avalonia.Platform.Storage;
|
||||
using Avalonia.VisualTree;
|
||||
using FluentAvalonia.UI.Controls;
|
||||
using FluentAvalonia.UI.Navigation;
|
||||
using Gommon;
|
||||
using Ryujinx.Ava.Common.Locale;
|
||||
using Ryujinx.Ava.UI.Controls;
|
||||
using Ryujinx.Ava.UI.Models;
|
||||
using Ryujinx.Ava.UI.ViewModels;
|
||||
using Ryujinx.Ava.Utilities;
|
||||
using Ryujinx.HLE.FileSystem;
|
||||
using SkiaSharp;
|
||||
using System.Collections.Generic;
|
||||
@@ -62,7 +64,7 @@ namespace Ryujinx.Ava.UI.Views.User
|
||||
|
||||
private async void Import_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
IReadOnlyList<IStorageFile> result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||
Optional<IStorageFile> result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions
|
||||
{
|
||||
AllowMultiple = false,
|
||||
FileTypeFilter = new List<FilePickerFileType>
|
||||
@@ -76,9 +78,9 @@ namespace Ryujinx.Ava.UI.Views.User
|
||||
},
|
||||
});
|
||||
|
||||
if (result.Count > 0)
|
||||
if (result.HasValue)
|
||||
{
|
||||
_profile.Image = ProcessProfileImage(File.ReadAllBytes(result[0].Path.LocalPath));
|
||||
_profile.Image = ProcessProfileImage(File.ReadAllBytes(result.Value.Path.LocalPath));
|
||||
_parent.GoBack();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,10 @@
|
||||
<KeyBinding Gesture="Ctrl+Shift+R" Command="{Binding ReloadRenderDocApi}" />
|
||||
<KeyBinding Gesture="Ctrl+Shift+C" Command="{Binding ToggleCapture}" />
|
||||
<KeyBinding Gesture="Ctrl+M" Command="{Binding SimulateWakeUpMessage}" />
|
||||
<KeyBinding Gesture="Cmd+O" Command="{Binding LoadApplicationFromFile}" />
|
||||
<KeyBinding Gesture="Ctrl+O" Command="{Binding LoadApplicationFromFile}" />
|
||||
<KeyBinding Gesture="Cmd+Shift+O" Command="{Binding LoadUnpackedGameFromFolder}" />
|
||||
<KeyBinding Gesture="Ctrl+Shift+O" Command="{Binding LoadUnpackedGameFromFolder}" />
|
||||
</Window.KeyBindings>
|
||||
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RowDefinitions="*">
|
||||
<helpers:OffscreenTextBox IsEnabled="False" Opacity="0" Name="HiddenTextBox" IsHitTestVisible="False" IsTabStop="False" />
|
||||
|
||||
@@ -741,10 +741,10 @@ namespace Ryujinx.Ava.UI.Windows
|
||||
{
|
||||
string[] messages =
|
||||
[
|
||||
numDlcRemoved > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadDlcRemovedMessage], numDlcRemoved): null,
|
||||
numDlcAdded > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadDlcAddedMessage], numDlcAdded): null,
|
||||
numUpdatesRemoved > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateRemovedMessage], numUpdatesRemoved): null,
|
||||
numUpdatesAdded > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.AutoloadUpdateAddedMessage], numUpdatesAdded) : null
|
||||
numDlcRemoved > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_DLCRemovedMessage], numDlcRemoved): null,
|
||||
numDlcAdded > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_DLCAddedMessage], numDlcAdded): null,
|
||||
numUpdatesRemoved > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_UpdatesRemovedMessage], numUpdatesRemoved): null,
|
||||
numUpdatesAdded > 0 ? string.Format(LocaleManager.Instance[LocaleKeys.Dialog_ContentLoading_UpdatesAddedMessage], numUpdatesAdded) : null
|
||||
];
|
||||
|
||||
string msg = String.Join("\r\n", messages);
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace Ryujinx.Ava.Utilities
|
||||
.Then(files => files.Count > 0 ? Optional.Of(files) : default);
|
||||
}
|
||||
|
||||
private static async Task<T> CoreDumpable<T>(Func<Task<T>> picker)
|
||||
public static async Task<T> CoreDumpable<T>(Func<Task<T>> picker)
|
||||
{
|
||||
OsUtils.SetCoreDumpable(true);
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user