From abe9c2ff0df0c3ba8d39154526ca00d04cc55000 Mon Sep 17 00:00:00 2001 From: pineappleEA Date: Tue, 13 Jun 2023 06:23:21 +0200 Subject: [PATCH] early-access version 3667 --- README.md | 2 +- src/android/app/build.gradle.kts | 16 +- .../java/org/yuzu/yuzu_emu/NativeLibrary.kt | 13 + .../fragments/HomeSettingsFragment.kt | 12 +- .../main/java/org/yuzu/yuzu_emu/model/Game.kt | 19 +- .../org/yuzu/yuzu_emu/ui/main/MainActivity.kt | 58 +++ src/android/app/src/main/jni/native.cpp | 86 ++++- .../res/drawable/ic_system_update_alt.xml | 9 + .../app/src/main/res/values-de/strings.xml | 335 +++++++++++++++++ .../app/src/main/res/values-es/strings.xml | 345 ++++++++++++++++++ .../app/src/main/res/values-fr/strings.xml | 345 ++++++++++++++++++ .../app/src/main/res/values-it/strings.xml | 344 +++++++++++++++++ .../app/src/main/res/values-ja/strings.xml | 343 +++++++++++++++++ .../app/src/main/res/values-ko/strings.xml | 345 ++++++++++++++++++ .../app/src/main/res/values-nb/strings.xml | 345 ++++++++++++++++++ .../app/src/main/res/values-pl/strings.xml | 344 +++++++++++++++++ .../src/main/res/values-pt-rBR/strings.xml | 345 ++++++++++++++++++ .../src/main/res/values-pt-rPT/strings.xml | 345 ++++++++++++++++++ .../app/src/main/res/values-ru/strings.xml | 345 ++++++++++++++++++ .../app/src/main/res/values-uk/strings.xml | 345 ++++++++++++++++++ .../src/main/res/values-zh-rCN/strings.xml | 345 ++++++++++++++++++ .../src/main/res/values-zh-rTW/strings.xml | 345 ++++++++++++++++++ .../app/src/main/res/values/strings.xml | 9 + src/core/file_sys/submission_package.h | 1 + src/core/file_sys/vfs_real.cpp | 198 +++++----- src/core/file_sys/vfs_real.h | 28 +- .../hle/service/nfc/common/amiibo_crypto.cpp | 44 +-- .../hle/service/nfc/common/amiibo_crypto.h | 9 +- src/core/hle/service/nfc/common/device.cpp | 164 ++++++--- src/core/hle/service/nfc/common/device.h | 11 +- .../hle/service/nfc/common/device_manager.cpp | 4 +- src/core/hle/service/nfc/mifare_result.h | 2 +- src/core/hle/service/nfc/nfc_interface.cpp | 5 +- src/core/hle/service/nfc/nfc_result.h | 3 +- src/core/hle/service/nfc/nfc_types.h | 34 +- src/core/hle/service/nfp/nfp_types.h | 28 +- src/video_core/texture_cache/image_info.cpp | 20 +- 37 files changed, 5340 insertions(+), 251 deletions(-) create mode 100755 src/android/app/src/main/res/drawable/ic_system_update_alt.xml create mode 100755 src/android/app/src/main/res/values-de/strings.xml create mode 100755 src/android/app/src/main/res/values-es/strings.xml create mode 100755 src/android/app/src/main/res/values-fr/strings.xml create mode 100755 src/android/app/src/main/res/values-it/strings.xml create mode 100755 src/android/app/src/main/res/values-ja/strings.xml create mode 100755 src/android/app/src/main/res/values-ko/strings.xml create mode 100755 src/android/app/src/main/res/values-nb/strings.xml create mode 100755 src/android/app/src/main/res/values-pl/strings.xml create mode 100755 src/android/app/src/main/res/values-pt-rBR/strings.xml create mode 100755 src/android/app/src/main/res/values-pt-rPT/strings.xml create mode 100755 src/android/app/src/main/res/values-ru/strings.xml create mode 100755 src/android/app/src/main/res/values-uk/strings.xml create mode 100755 src/android/app/src/main/res/values-zh-rCN/strings.xml create mode 100755 src/android/app/src/main/res/values-zh-rTW/strings.xml diff --git a/README.md b/README.md index 898321b3d..bd923fa38 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ yuzu emulator early access ============= -This is the source code for early-access 3663. +This is the source code for early-access 3667. ## Legal Notice diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index d4698ae1c..fe613d339 100755 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later import android.annotation.SuppressLint +import org.jetbrains.kotlin.konan.properties.Properties plugins { id("com.android.application") @@ -57,9 +58,22 @@ android { applicationId = "org.yuzu.yuzu_emu" minSdk = 30 targetSdk = 33 - versionCode = 1 versionName = getGitVersion() + // If you want to use autoVersion for the versionCode, create a property in local.properties + // named "autoVersioned" and set it to "true" + val properties = Properties() + val versionProperty = try { + properties.load(project.rootProject.file("local.properties").inputStream()) + properties.getProperty("autoVersioned") ?: "" + } catch (e: Exception) { "" } + + versionCode = if (versionProperty == "true") { + autoVersion + } else { + 1 + } + ndk { @SuppressLint("ChromeOsAbiSupport") abiFilters += listOf("arm64-v8a") diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt index 22af9e435..4be9ade14 100755 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt @@ -227,6 +227,8 @@ object NativeLibrary { external fun setAppDirectory(directory: String) + external fun installFileToNand(filename: String): Int + external fun initializeGpuDriver( hookLibDir: String?, customDriverDir: String?, @@ -507,4 +509,15 @@ object NativeLibrary { const val RELEASED = 0 const val PRESSED = 1 } + + /** + * Result from installFileToNand + */ + object InstallFileToNandResult { + const val Success = 0 + const val SuccessFileOverwritten = 1 + const val Error = 2 + const val ErrorBaseGame = 3 + const val ErrorFilenameExtension = 4 + } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt index bdc337501..536163eb6 100755 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt @@ -94,6 +94,11 @@ class HomeSettingsFragment : Fragment() { R.string.install_amiibo_keys_description, R.drawable.ic_nfc ) { mainActivity.getAmiiboKey.launch(arrayOf("*/*")) }, + HomeSetting( + R.string.install_game_content, + R.string.install_game_content_description, + R.drawable.ic_system_update_alt + ) { mainActivity.installGameUpdate.launch(arrayOf("*/*")) }, HomeSetting( R.string.select_games_folder, R.string.select_games_folder_description, @@ -103,7 +108,12 @@ class HomeSettingsFragment : Fragment() { R.string.manage_save_data, R.string.import_export_saves_description, R.drawable.ic_save - ) { ImportExportSavesFragment().show(parentFragmentManager, ImportExportSavesFragment.TAG) }, + ) { + ImportExportSavesFragment().show( + parentFragmentManager, + ImportExportSavesFragment.TAG + ) + }, HomeSetting( R.string.install_prod_keys, R.string.install_prod_keys_description, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt index 3d6782c49..35d8000c5 100755 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt @@ -26,13 +26,18 @@ class Game( if (other !is Game) return false - return title == other.title - && description == other.description - && regions == other.regions - && path == other.path - && gameId == other.gameId - && company == other.company - && isHomebrew == other.isHomebrew + return hashCode() == other.hashCode() + } + + override fun hashCode(): Int { + var result = title.hashCode() + result = 31 * result + description.hashCode() + result = 31 * result + regions.hashCode() + result = 31 * result + path.hashCode() + result = 31 * result + gameId.hashCode() + result = 31 * result + company.hashCode() + result = 31 * result + isHomebrew.hashCode() + return result } companion object { diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt index 3fca0a7e6..041d16f3a 100755 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt @@ -467,4 +467,62 @@ class MainActivity : AppCompatActivity(), ThemeProvider { } } } + + val installGameUpdate = + registerForActivityResult(ActivityResultContracts.OpenDocument()) { + if (it == null) + return@registerForActivityResult + + IndeterminateProgressDialogFragment.newInstance( + this@MainActivity, + R.string.install_game_content + ) { + val result = NativeLibrary.installFileToNand(it.toString()) + lifecycleScope.launch { + withContext(Dispatchers.Main) { + when (result) { + NativeLibrary.InstallFileToNandResult.Success -> { + Toast.makeText( + applicationContext, + R.string.install_game_content_success, + Toast.LENGTH_SHORT + ).show() + } + + NativeLibrary.InstallFileToNandResult.SuccessFileOverwritten -> { + Toast.makeText( + applicationContext, + R.string.install_game_content_success_overwrite, + Toast.LENGTH_SHORT + ).show() + } + + NativeLibrary.InstallFileToNandResult.ErrorBaseGame -> { + MessageDialogFragment.newInstance( + R.string.install_game_content_failure, + R.string.install_game_content_failure_base + ).show(supportFragmentManager, MessageDialogFragment.TAG) + } + + NativeLibrary.InstallFileToNandResult.ErrorFilenameExtension -> { + MessageDialogFragment.newInstance( + R.string.install_game_content_failure, + R.string.install_game_content_failure_file_extension, + R.string.install_game_content_help_link + ).show(supportFragmentManager, MessageDialogFragment.TAG) + } + + else -> { + MessageDialogFragment.newInstance( + R.string.install_game_content_failure, + R.string.install_game_content_failure_description, + R.string.install_game_content_help_link + ).show(supportFragmentManager, MessageDialogFragment.TAG) + } + } + } + } + return@newInstance result + }.show(supportFragmentManager, IndeterminateProgressDialogFragment.TAG) + } } diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 7ebed5e6a..4091c23d1 100755 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -28,7 +28,10 @@ #include "core/core.h" #include "core/cpu_manager.h" #include "core/crypto/key_manager.h" +#include "core/file_sys/card_image.h" #include "core/file_sys/registered_cache.h" +#include "core/file_sys/submission_package.h" +#include "core/file_sys/vfs.h" #include "core/file_sys/vfs_real.h" #include "core/frontend/applets/cabinet.h" #include "core/frontend/applets/controller.h" @@ -94,6 +97,74 @@ public: m_native_window = native_window; } + int InstallFileToNand(std::string filename) { + const auto copy_func = [](const FileSys::VirtualFile& src, const FileSys::VirtualFile& dest, + std::size_t block_size) { + if (src == nullptr || dest == nullptr) { + return false; + } + if (!dest->Resize(src->GetSize())) { + return false; + } + + using namespace Common::Literals; + std::vector buffer(1_MiB); + + for (std::size_t i = 0; i < src->GetSize(); i += buffer.size()) { + const auto read = src->Read(buffer.data(), buffer.size(), i); + dest->Write(buffer.data(), read, i); + } + return true; + }; + + enum InstallResult { + Success = 0, + SuccessFileOverwritten = 1, + InstallError = 2, + ErrorBaseGame = 3, + ErrorFilenameExtension = 4, + }; + + m_system.SetContentProvider(std::make_unique()); + m_system.GetFileSystemController().CreateFactories(*m_vfs); + + std::shared_ptr nsp; + if (filename.ends_with("nsp")) { + nsp = std::make_shared(m_vfs->OpenFile(filename, FileSys::Mode::Read)); + if (nsp->IsExtractedType()) { + return InstallError; + } + } else if (filename.ends_with("xci")) { + const auto xci = + std::make_shared(m_vfs->OpenFile(filename, FileSys::Mode::Read)); + nsp = xci->GetSecurePartitionNSP(); + } else { + return ErrorFilenameExtension; + } + + if (!nsp) { + return InstallError; + } + + if (nsp->GetStatus() != Loader::ResultStatus::Success) { + return InstallError; + } + + const auto res = m_system.GetFileSystemController().GetUserNANDContents()->InstallEntry( + *nsp, true, copy_func); + + switch (res) { + case FileSys::InstallResult::Success: + return Success; + case FileSys::InstallResult::OverwriteExisting: + return SuccessFileOverwritten; + case FileSys::InstallResult::ErrorBaseInstall: + return ErrorBaseGame; + default: + return InstallError; + } + } + void InitializeGpuDriver(const std::string& hook_lib_dir, const std::string& custom_driver_dir, const std::string& custom_driver_name, const std::string& file_redirect_dir) { @@ -154,14 +225,14 @@ public: m_window = std::make_unique(&m_input_subsystem, m_native_window, m_vulkan_library); + m_system.SetFilesystem(m_vfs); + // Initialize system. auto android_keyboard = std::make_unique(); m_software_keyboard = android_keyboard.get(); m_system.SetShuttingDown(false); m_system.ApplySettings(); m_system.HIDCore().ReloadInputDevices(); - m_system.SetContentProvider(std::make_unique()); - m_system.SetFilesystem(std::make_shared()); m_system.SetAppletFrontendSet({ nullptr, // Amiibo Settings nullptr, // Controller Selector @@ -173,7 +244,8 @@ public: std::move(android_keyboard), // Software Keyboard nullptr, // Web Browser }); - m_system.GetFileSystemController().CreateFactories(*m_system.GetFilesystem()); + m_system.SetContentProvider(std::make_unique()); + m_system.GetFileSystemController().CreateFactories(*m_vfs); // Initialize account manager m_profile_manager = std::make_unique(); @@ -398,7 +470,7 @@ private: InputCommon::InputSubsystem m_input_subsystem; Common::DetachedTasks m_detached_tasks; Core::PerfStatsResults m_perf_stats{}; - std::shared_ptr m_vfs; + std::shared_ptr m_vfs; Core::SystemResultStatus m_load_result{Core::SystemResultStatus::ErrorNotInitialized}; bool m_is_running{}; SoftwareKeyboard::AndroidKeyboard* m_software_keyboard{}; @@ -466,6 +538,12 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_setAppDirectory(JNIEnv* env, Common::FS::SetAppDirectory(GetJString(env, j_directory)); } +int Java_org_yuzu_yuzu_1emu_NativeLibrary_installFileToNand(JNIEnv* env, + [[maybe_unused]] jclass clazz, + jstring j_file) { + return EmulationSession::GetInstance().InstallFileToNand(GetJString(env, j_file)); +} + void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeGpuDriver( JNIEnv* env, [[maybe_unused]] jclass clazz, jstring hook_lib_dir, jstring custom_driver_dir, jstring custom_driver_name, jstring file_redirect_dir) { diff --git a/src/android/app/src/main/res/drawable/ic_system_update_alt.xml b/src/android/app/src/main/res/drawable/ic_system_update_alt.xml new file mode 100755 index 000000000..0f6adfdb8 --- /dev/null +++ b/src/android/app/src/main/res/drawable/ic_system_update_alt.xml @@ -0,0 +1,9 @@ + + + diff --git a/src/android/app/src/main/res/values-de/strings.xml b/src/android/app/src/main/res/values-de/strings.xml new file mode 100755 index 000000000..795320e3e --- /dev/null +++ b/src/android/app/src/main/res/values-de/strings.xml @@ -0,0 +1,335 @@ + + + + Diese Software kann Spiele für die Nintendo Switch abspielen. Keine Spiele oder Spielekeys sind enthalten.<br /><br />Bevor du beginnst, bitte halte deine prod.keys ]]> auf deinem Gerät bereit. .<br /><br />Mehr Infos]]> + Emulation ist aktiv + Zeigt eine dauerhafte Benachrichtigung an, wenn die Emulation läuft. + yuzu läuft + Hinweise und Fehler + Zeigt Benachrichtigungen an, wenn etwas schief läuft. + Berechtigung für Benachrichtigungen nicht erlaubt! + + + Willkommen! + Erfahre wie man <b>yuzu</b> einrichtet und beginne mit der Emulation. + Erste Schritte + Schlüssel + Wähle deine <b>prod.keys</b> Datei mit dem Button unten aus. + Schlüssel auswählen + Spiele + Wähle mit dem Knopf unten den <b>Spiele</b>-Ordner aus. + Fertig + Wir können loslegen.\nViel Spaß! + Fortsetzen + Weiter + Zurück + Spiele hinzufügen + Spieleverzeichnis auswählen + + + Spiele + Suche + Einstellungen + Es wurden keine Dateien gefunden oder es wurde noch kein Spielverzeichnis ausgewählt. + Spiele suchen und filtern + Spieleverzeichnis auswählen + Erlaubt yuzu die Spieleliste zu füllen + Auswahl des Spieleverzeichnisses überspringen? + Spiele werden in der Spieleliste nicht angezeigt, wenn kein Ordner ausgewählt ist. + https://yuzu-emu.org/help/quickstart/#dumping-games + Spiele suchen + Spieleverzeichnis ausgewählt + prod.keys installieren + Zum Entschlüsseln von Spielen benötigt + Hinzufügen der Schlüssel überspringen? + Für die Emulation von Spielen sind gültige Schlüssel erforderlich. Wenn du fortfährst, funktionieren nur Homebrew-Anwendungen. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Benachrichtigungen + Erteile mit dem Knopf unten die Berechtigung, Benachrichtigungen zu senden. + Berechtigung erteilen + yuzu wird dich nicht über wichtige Informationen benachrichtigen können. + Zugriff verweigert + Du hast diese Berechtigung zu oft verweigert und musst sie nun manuell in den Systemeinstellungen erteilen. + Über + Build-Version, Credits und mehr + Hilfe + Überspringen + Abbrechen + Amiibo-Schlüssel installieren + Benötigt um Amiibos im Spiel zu verwenden + Ungültige Schlüsseldatei ausgewählt + Schlüssel erfolgreich installiert + Fehler beim Lesen der Schlüssel + Ungültige Schlüssel + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + GPU-Treiber installieren + Alternative Treiber für eventuell bessere Leistung oder Genauigkeit installieren + Erweiterte Einstellungen + Emulatoreinstellungen konfigurieren + Kürzlich gespielt + Kürzlich hinzugefügt + Spiele + Homebrew + yuzu-Ordner öffnen + yuzu\'s interne Dateien verwalten + Das Aussehen der App ändern + Kein Dateimanager gefunden + yuzu-Verzeichnis konnte nicht geöffnet werden + Bitte suche den Benutzerordner manuell über die Seitenleiste des Dateimanagers. + Speicherdaten verwalten + Speicherdaten gefunden. Bitte wähle unten eine Option aus. + Speicherdaten importieren oder exportieren + Keine Speicherdaten gefunden. Bitte starte ein Spiel und versuche es erneut. + Erfolgreich importiert + Ungültige Speicherverzeichnisstruktur + Der erste Unterordnername muss die Titel-ID des Spiels sein. + Importieren + Exportieren + + + Gaia ist nicht real + In die Zwischenablage kopiert + Ein quelloffener Switch-Emulator + Beitragende + Gemacht mit \u2764 vom yuzu Team + https://github.com/yuzu-emu/yuzu/graphs/contributors + Build + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Early Access + Early Access bekommen + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Neueste Features, frühzeitiger Zugriff auf Updates und mehr + Early Access Vorteile + Neueste Features + Früherer Zugriff auf Updates + Keine manuelle Installation + Priorisierte Unterstützung + Unsere ewige Dankbarkeit + Bist du interessiert? + + + Geschwindigkeitsbegrenzung aktivieren + Wenn aktiviert, wird die Emulationsgeschwindigkeit auf einen Prozentsatz der normalen Geschwindigkeit begrenzt. + Geschwindkeitsbegrenzung in Prozent + Legt den Prozentsatz der Bergrenzung der Emulationsgeschwindigkeit fest. Mit dem Standardwert von 100% wird die Emulation auf die normale Geschwindigkeit begrenzt. Höhere oder niedrigere Werte erhöhen oder verringern die Geschwindigkeitsbegrenzung. + CPU-Genauigkeit + + + Dock-Modus + Emuliert im Dock-Modus, was die Auflösung verbessert, aber die Leistung senkt. + Emulierte Region + Emulierte Sprache + RTC-Datum auswählen + RTC-Zeit auswählen + Benutzerdefinierte RTC aktivieren + Mit dieser Einstellung kann eine benutzerdefinierte Echtzeituhr unabhängig von der aktuellen Systemzeit verwendet werden. + Benutzerdefinierte RTC einstellen + + + API + Genauigkeitsstufe + Auflösung + VSync-Modus + Seitenverhältnis + Fensteranpassungsfilter + Kantenglättungs-Methode + Maximale Taktfrequenz erzwingen (nur Adreno) + Erzwingt den Betrieb der GPU mit der maximal möglichen Taktfrequenz (Temperaturbeschränkungen werden weiterhin angewendet). + Asynchrone Shader nutzen + Kompiliert Shader asynchron, was Ruckler reduziert, aber zu Glitches führen kann. + Grafik-Debugging aktivieren + Wenn aktiviert, schaltet die Grafik-API in einen langsameren Debugging-Modus. + Nutze Festplatten-Shader-Cache + Ruckeln wird durch das Speichern und Laden von generierten Shadern auf der Festplatte reduziert. + + + Lautstärke + Legt die Lautstärke der Audioausgabe fest. + + + Standard + Einstellungen gespeichert + Einstellungen für %1$s gespeichert + Fehler beim Speichern von %1$s.ini: %2$s + Lädt... + Möchtest du diese Einstellung auf den Standardwert zurücksetzen? + Auf Standard zurücksetzen + Alle Einstellungen zurücksetzen? + Alle erweiterten Einstellungen werden auf ihren Standardwert zurückgesetzt. Dies kann nicht rückgängig gemacht werden. + Einstellungen zurückgesetzt + Schließen + Mehr erfahren + + + GPU-Treiber auswählen + Möchtest du deinen aktuellen GPU-Treiber ersetzen? + Installieren + Standard + %s wurde installiert + Standard GPU-Treiber wird verwendet + Ungültiger Treiber ausgewählt, Standard-Treiber wird verwendet! + System GPU-Treiber + Treiber wird installiert... + + + Erweiterte Einstellungen + Einstellungen + Allgemein + System + Grafik + Audio + Theme und Farbe + + + Das ROM ist verschlüsselt + prod.keys Datei installiert ist, damit Spiele entschlüsselt werden können.]]> + Bei der Initialisierung des Videokerns ist ein Fehler aufgetreten + Dies wird normalerweise durch einen inkompatiblen GPU-Treiber verursacht. Die Installation eines passenden GPU-Treibers kann dieses Problem beheben. + ROM konnte nicht geladen werden + ROM-Datei existiert nicht + + + Emulation beenden + Fertig + FPS Zähler + Steuerung umschalten + Relative Stick-Mitte + DPad Slide + Haptik + Overlay anzeigen + Alle umschalten + Overlay anpassen + Größe + Transparenz + Overlay zurücksetzen + Overlay bearbeiten + Emulation pausieren + Emulation fortsetzen + Overlay-Optionen + Spiel lädt… + + Lädt Einstellungen... + + + Software-Tastatur + + + Abbrechen + Fortsetzen + Systemarchiv nicht gefunden + Ein System-Archiv + Speicher-/Ladefehler + Schwerwiegender Fehler + Ein schwerwiegender Fehler ist aufgetreten. Einzelheiten wurden im Log protokolliert.\nDas Fortsetzen der Emulation kann zu Abstürzen und Bugs führen. + Das Deaktivieren dieser Einstellung führt zu erheblichen Leistungsverlusten! Für ein optimales Erlebnis wird empfohlen, sie aktiviert zu lassen. + + + Automatisch auswählen + Japan + USA + Europa + Australien + China + Korea + Taiwan + + + Japanisch (日本語) + Englisch + Französisch (Français) + Deutsch (German) + Italienisch (Italiano) + Spanisch (Español) + Chinesisch (简体中文) + Koreanisch (한국어) + Niederländisch (Nederlands) + Portugiesisch (Português) + Russisch (Русский) + Taiwanesisch (台湾) + Britisches Englisch + Kanadisches Französisch (Français canadien) + Lateinamerikanisches Spanisch (Español latinoamericano) + Vereinfachtes Chinesisch (简体中文) + Traditionelles Chinesisch (正體中文) + Brasilianisches Portugiesisch (Português do Brasil) + + + Vulkan + Keiner + + + Normal + Hoch + Extrem (Langsam) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Langsam) + 3X (2160p/3240p) (Langsam) + 4X (2880p/4320p) (Langsam) + + + Direkt (Aus) + Mailbox + FIFO (An) + FIFO Relaxed + + + Nächste-Nachbarn + Bilinear + Bikubisch + Gaussian + ScaleForce + AMD FidelityFX™ Super Resolution + + + Keiner + FXAA + SMAA + + + Standard (16:9) + 4:3 erzwingen + 21:9 erzwingen + Erzwinge 16:10 + Auf Fenster anpassen + + + Auto + Akkurat + Unsicher + Paranoid (Langsam) + + + Steuerkreuz + Linker Analogstick + Rechter Analogstick + Home + Screenshot + + + Shader werden vorbereitet + Shader werden erstellt + + + App-Theme ändern + Standard + Material You + + + Theme-Modus ändern + System folgen + Hell + Dunkel + + + Schwarze Hintergünde verwenden + Bei Verwendung des dunklen Themes, schwarze Hintergründe verwenden. + + diff --git a/src/android/app/src/main/res/values-es/strings.xml b/src/android/app/src/main/res/values-es/strings.xml new file mode 100755 index 000000000..a7b4ebef4 --- /dev/null +++ b/src/android/app/src/main/res/values-es/strings.xml @@ -0,0 +1,345 @@ + + + + Este software ejecuta juegos para la videoconsola Nintendo Switch. Los videojuegos o keys no vienen incluidos.<br /><br />Antes de empezar, por favor, localice el archivo prod.keys ]]>en el almacenamiento de su dispositivo..<br /><br />Saber más]]> + Emulación activa + Muestra una notificación persistente cuando la emulación está activa. + yuzu esta ejecutándose + Avisos y errores + Mostrar notificaciones cuándo algo vaya mal. + ¡Permisos de notificación no concedidos! + + + ¡Bienvenido! + Aprende cómo configurar <b>yuzu</b> y avanza a la emulación. + Empezar + Claves + Selecciona el archivo <b>prod.keys</b> utilizando el botón de abajo. + Seleccionar las claves + Juegos + Selecciona la carpeta <b>Games</b> utilizando el botón de abajo + Hecho + Todo listo.\n¡Disfrute de sus juegos! + Continuar + Siguiente + Atrás + Añadir Juegos + Selecciona la carpeta de juegos + + + Juegos + Buscar + Ajustes + No se ha encontrado ningún archivo o aún no se ha seleccionado ningún directorio de juegos. + Busca y filtra juegos + Seleccionar carpeta de juegos + Permite que yuzu llene la lista de juegos + ¿Omitir la selección de la carpeta de juegos? + No se mostrará ningún juego si no se ha seleccionado una carpeta de juegos. + https://yuzu-emu.org/help/quickstart/#dumping-games + Buscar Juegos + Directorio de juegos seleccionado + Instalar prod.keys + Requerido para descifrar juegos + ¿Omitir agregar claves? + Se requieren claves válidas para emular juegos. Solo las aplicaciones homebrew funcionarán si continúas. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Notificaciones + Otorgue el permiso de notificación con el botón de abajo. + Conceder permiso + ¿Omitir conceder el permiso de notificación? + yuzu no podrá notificarte información importante. + Permiso denegado + Negó este permiso demasiadas veces y ahora debe otorgarlo manualmente en la configuración del sistema. + Acerca de + Versión, créditos y más + Ayuda + Siguiente + Cancelar + Instalar clave de Amiiboo + Necesario para usar Amiibo en el juego + Archivo de claves inválido seleccionado + Claves instaladas correctamente + Error al leer las claves de cifrado + + 1. Verifique que sus claves acaben con la extensión .keys.\n\n + 2. Las claves no deben de estar almacenadas en la carpeta Descargas.\n\n + Resuelva el/los problema(s) y vuelva a intentarlo. + + Claves de cifrado no válidas + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + El archivo seleccionado es incorrecto o está corrupto. Vuelva a redumpear sus claves. + Instalar driver de GPU + Instale drivers alternativos para obtener un rendimiento o una precisión potencialmente mejores + Opciones avanzadas + Configurar las opciones del emulador + Jugado recientemente + Añadido recientemente + Juegos + Homebrew + Abrir la carpeta de yuzu + Administrar los archivos internos de yuzu + Modificar la apariencia de la aplicación + Explorador de archivos no encontrado + No se pudo abrir la carpeta yuzu + Por favor, busque la carpeta user con el panel lateral del explorador de archivos de forma manual. + Administrar datos de guardado + Guardar los datos encontrados. Por favor, seleccione una opción de abajo. + Importar o exportar archivos de guardado + No se han encontrado datos de guardado. Por favor, ejecute un juego y vuelva a intentarlo. + Importado correctamente + Estructura del directorio de guardado no válido + El nombre de la primera subcarpeta debe ser el Title ID del juego. + Importar + Exportar + + + Gaia no es real + Copiado al portapapeles + Un emulador de Switch de código abierto + Contribuidores + Hecho con \u2764 del equipo yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Versión + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Early Access + Conseguir Early Access + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Funciones de vanguardia, acceso anticipado a actualizaciones y más + Beneficios Early Access + Características de vanguardia + Acceso anticipado a las actualizaciones + Sin instalación manual + Soporte prioritario + Ayudarás a la preservación de juegos + Nuestra eterna gratitud + ¿Estás interesado? + + + Activar limite de velocidad + Cuando está habilitado, la velocidad de emulación se limitará a un porcentaje específico de la velocidad normal. + Limitar porcentaje de velocidad + Especifica el porcentaje para limitar la velocidad de emulación. Con el valor predeterminado del 100 %, la emulación se limitará a la velocidad normal. Valores más altos o más bajos aumentarán o disminuirán el límite de velocidad. + Precisión de CPU + + + Modo sobremesa + Emula en modo sobremesa, lo que aumenta la resolución perjudicando el rendimiento. + Región emulada + Idioma emulado + Seleccionar Fecha RTC + Seleccionar Tiempo RTC + Habilitar RTC Personalizado + Esta configuración le permite configurar un reloj de tiempo real personalizado diferente a la hora actual de su sistema + Establecer RTC Personalizado + + + API + Nivel de precisión + Resolución + Modo VSync + Relación de aspecto + Filtro de adaptación de ventana + Metodo Anti Aliasing + Forzar velocidad al máximo (solo Adreno) + Fuerza a la GPU a ejecutarse a la velocidad máxima de reloj posible (se seguirán aplicando restricciones térmicas). + Usar shaders asíncronos + Compila shaders de forma asincrónica, lo que reducirá los parones pero puede introducir fallos. + Habilitar la depuración de gráficos + Cuando esté marcado, la API de gráficos entra en un modo de depuración más lento. + Usar caché de shaders en disco + Reduzca los parones almacenando y cargando shaders generados en el disco. + + + Volumen + Especifica el volumen de la salida de audio. + + + Predeterminado + Configuración guardada + Configuración guardada para %1$s + Error guardando %1$s.ini: %2$s + Cargando... + ¿Desea restablecer esta configuración a su valor predeterminado? + Restablecer a predeterminado + ¿Restablecer todas las configuraciones? + Todas las configuraciones avanzadas se restablecerán a su configuración predeterminada. Esto no se puede deshacer. + Reiniciar la configuracion + Cerrar + Más información + + + Seleccionar driver GPU + ¿Quiere reemplazar el driver de GPU actual? + Instalar + Predeterminado + Instalado %s + Usando el driver de GPU por defecto + ¡Driver no válido, utilizando el predeterminado del sistema! + Driver GPU del sistema + Instalando driver... + + + Configuración avanzada + Ajustes + General + Sistema + Gráficos + Audio + Tema y color + + + Su ROM está encriptada + cartuchos de juegos o titulos instalados.]]> + prod.keys está instalado, para que los juegos sean descifrados.]]> + Ocurrió un error al inicializar el núcleo de video, posiblemente debido a una incompatibilidad con el driver seleccionado + Esto suele deberse a un driver de GPU incompatible. La instalación de un controlador de GPU personalizado puede resolver este problema. + No se pudo cargar la ROM + Archivo ROM no existe + + + Salir de la emulación + Hecho + Contador de FPS + Alternar Controles + Centro Relativo del Stick + Deslizamiento de la Cruceta + Hápticos + Mostrar pantalla + Alternar Todo + Ajustar pantalla + Escala + Opacidad + Reiniciar pantalla + Editar pantalla + Pausar Emulación + Reanudar Emulación + Opciones de pantalla + Cargando juego... + + Cargando configuración... + + + Software del teclado + + + Abortar + Continuar + Archivo del sistema no encontrado + %s no se ha encontrado. Vacíe los archivos de su sistema.\nContinuar con la emulación puede provocar bloqueos y errores. + Un archivo del sistema + Error de Guardado/Carga + Error fatal + Ocurrió un error fatal. Consulte el registro para obtener más detalles.\nContinuar con la emulación puede provocar bloqueos y errores. + ¡Desactivar esta configuración reducirá significativamente el rendimiento de la emulación! Para obtener la mejor experiencia, se recomienda dejar esta configuración habilitada. + + + Auto seleccionar + Japón + EEUU + Europa + Australia + China + Corea + Taiwán + + + Japonés (日本語) + Inglés (English) + Francés (Français) + Alemán (deutsch) + Italiano (Italiano) + Español (Español) + Chino (简体中文) + Coreano (한국어) + Holandés (nederlands) + Portugués (Português) + Ruso (Русский) + Taiwanés (台湾) + Inglés británico + Francés Canadiense (Français canadien) + Español Latinoamericano (Español latinoamericano) + Chino Simplificado (简体中文) + Chino tradicional (正體中文) + Portugués Brasileño (Português do Brasil) + + + Vulkan + Ninguno + + + Normal + Alto + Extremo (Lento) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + x1 (720p/1080p) + 2X (1440p/2160p) (Lento) + 3X (2160p/3240p) (Lento) + 4X (2880p/4320p) (Lento) + + + Inmediata (Desactivado) + Mailbox + FIFO (Activado) + FIFO Relajado + + + Vecino más próximo + Bilineal + Bicúbico + Gaussiano + ScaleForce + AMD FidelityFX™ Super Resolución + + + Ninguno + FXAA + SMAA + + + Predeterminado (16:9) + Forzar 4:3 + Forzar 21:9 + Forzar 16:10 + Ajustar a la ventana + + + Auto + Preciso + Impreciso + Paranoico (Lento) + + + Cruceta + Palanca izquierda + Palanca derecha + Home + Captura de pantalla + + + Preparando shaders + Construyendo shaders + + + Cambiar Tema + Predeterminado + Material You + + + Cambiar modo del tema + Igual al sistema + Claro + Oscuro + + + Usar Fondos Negros + Cuando utilice el modo oscuro, aplique fondos negros. + + diff --git a/src/android/app/src/main/res/values-fr/strings.xml b/src/android/app/src/main/res/values-fr/strings.xml new file mode 100755 index 000000000..905ab5c03 --- /dev/null +++ b/src/android/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,345 @@ + + + + Ce logiciel exécutera des jeux pour la console de jeu Nintendo Switch. Aucun jeux ou clés n\'est inclus.<br /><br />Avant de commencer, veuillez localiser votre fichier prod.keys ]]> sur le stockage de votre appareil.<br /><br />En savoir plus]]> + L\'émulation est active + Affiche une notification persistante lorsque l\'émulation est en cours d\'exécution. + yuzu est en cours d\'exécution + Avis et erreurs + Affiche des notifications en cas de problème. + Permission de notification non accordée ! + + + Bienvenue ! + Apprenez à configurer <b>yuzu</b> et passez à l\'émulation. + Commencer + Clés + Sélectionnez votre fichier <b>prod.keys</b> avec le bouton ci-dessous. + Sélectionner les clés + Jeux + Sélectionnez votre dossier <b>de Jeux</b> avec le bouton ci-dessous. + Terminé + Vous êtes prêt.\nProfitez de vos jeux ! + Continuer + Suivant + Retour + Ajouter des jeux + Sélectionner votre dossier de jeux + + + Jeux + Rechercher + Paramètres + Aucun fichier n\'a été trouvé ou aucun répertoire de jeu n\'a encore été sélectionné. + Rechercher et filtrer les jeux + Sélectionner le dossier de jeux + Permet à yuzu de remplir la liste des jeux + Ne pas sélectionner le dossier des jeux ? + Les jeux ne seront pas affichés dans la liste des jeux si aucun dossier n\'est sélectionné. + https://yuzu-emu.org/help/quickstart/#dumping-games + Rechercher des jeux + Répertoire de jeux sélectionné + Installer prod.keys + Nécessaire pour décrypter les jeux commerciaux. + Sauter l\'ajout des clés ? + Des clés valides sont nécessaires pour émuler des jeux commerciaux. Seules les applications homebrew fonctionneront si vous continuez. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Notifications + Accordez l\'autorisation de notification avec le bouton ci-dessous. + Donner la permission + Ne pas accorder la permission de notification ? + yuzu ne pourra pas vous communiquer d\'informations importantes. + Permission refusée + Vous avez refusé cette permission trop de fois et vous devez maintenant l\'accorder manuellement dans les paramètres système. + À propos + Numéro de build, crédits et plus encore + Aide + Sauter + Annuler + Installer les clés Amiibo + Nécessaire pour utiliser les Amiibo en jeu + Fichier de clés sélectionné invalide + Clés installées avec succès + Erreur lors de la lecture des clés de chiffrement + + 1. Vérifiez que vos clés ont l\'extension .keys.\n\n + 2. Les clés ne doivent pas être stockées dans le dossier Téléchargements.\n\n + Résolvez le(s) problème(s) et réessayez. + + Clés de chiffrement invalides + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + Le fichier sélectionné est incorrect ou corrompu. Veuillez dumper à nouveau vos clés. + Installer le pilote du GPU + Installez des pilotes alternatifs pour des performances ou une précision potentiellement meilleures + Paramètres avancés + Configurer les paramètres de l\'émulateur + Joué récemment + Ajouté récemment + Commercial + Homebrew + Ouvrir le dossier de yuzu + Gérer les fichiers internes de yuzu + Modifier l\'apparence de l\'application + Aucun gestionnaire de fichiers trouvé + Impossible d\'ouvrir le répertoire de yuzu + Veuillez localiser manuellement le dossier utilisateur avec le panneau latéral du gestionnaire de fichiers. + Gérer les données de sauvegarde + Données de sauvegarde trouvées. Veuillez sélectionner une option ci-dessous. + Importer ou exporter des fichiers de sauvegarde + Aucune données de sauvegarde trouvées. Veuillez lancer un jeu et réessayer. + Importé avec succès + Structure de répertoire de sauvegarde non valide + Le nom du premier sous-dossier doit être l\'identifiant du titre du jeu. + Importer + Exporter + + + Gaia n\'est pas réel + Copié dans le presse-papier + Un émulateur Switch open source + Contributeurs + Fait avec \u2764 de l\'équipe yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Build + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Early Access + Obtenir l\'Early Access + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Fonctionnalités de pointe, accès anticipé aux mises à jour, et plus encore + Avantages de l\'Early Access + Fonctionnalités de pointe + Accès anticipé aux mises à jour + Pas d\'installation manuelle + Assistance prioritaire + Contribuer à la préservation des jeux + Notre gratitude éternelle + Es tu intéressé ? + + + Activer la vitesse limite + Lorsqu\'elle est activée, la vitesse d\'émulation sera limitée à un pourcentage spécifié de la vitesse normale. + Limite en pourcentage de vitesse + Spécifie le pourcentage pour limiter la vitesse d\'émulation. Avec la valeur par défaut de 100%, l\'émulation sera limitée à la vitesse normale. Des valeurs supérieures ou inférieures augmenteront ou diminueront la limite de vitesse. + Précision du CPU + + + Mode TV + Émuler en mode TV augmente la résolution au détriment des performances. + Région émulée + Langue émulée + Sélectionner la date RTC + Sélectionner l\'heure RTC + Activer l\'horloge RTC personnalisée + Ce paramètre vous permet de définir une horloge en temps réel personnalisée distincte de l\'heure actuelle de votre système. + Définir l\'horloge RTC personnalisée + + + API + Niveau de précision + Résolution + Mode VSync + Format + Filtre de fenêtre adaptatif + Méthode d\'anticrénelage : + Forcer la fréquence d\'horloge maximale (Adreno uniquement) + Force le GPU à fonctionner au maximum d\'horloges possibles (les contraintes thermiques seront toujours appliquées). + Utiliser les shaders asynchrones + Compile les shaders de manière asynchrone, ce qui réduira les saccades mais peut entraîner des problèmes visuels. + Activer le débogage des graphismes + Lorsque cette case est cochée, l\'API graphique entre dans un mode de débogage plus lent. + Utiliser les shader cache de disque + Réduire les saccades en stockant et en chargeant les shaders générés sur le disque. + + + Volume + Spécifie le volume de la sortie audio. + + + Défaut + Paramètres enregistrés + Paramètres enregistrés pour %1$s + Erreur lors de l\'enregistrement de %1$s.ini: %2$s + Chargement... + Voulez-vous réinitialiser ce paramètre à sa valeur par défaut ? + Réinitialiser par défaut + Réinitialiser tous les réglages ? + Tous les paramètres avancés seront réinitialisés à leur configuration par défaut. Ça ne peut pas être annulé. + Paramètres réinitialisés + Fermer + Plus d\'informations + + + Sélectionner le pilote du GPU + Souhaitez vous remplacer votre pilote actuel ? + Installer + Défaut + %s Installé + Utilisation du pilote de GPU par défaut + Pilote non valide sélectionné, utilisation du paramètre par défaut du système ! + Pilote du GPU du système + Installation du pilote... + + + Paramètres avancés + Paramètres + Général + Système + Vidéo + Audio + Thème et couleur + + + Votre ROM est cryptée + cartouches de jeu ou titres installés.]]> + prod.keys est installé pour que les jeux puissent être déchiffrés.]]> + Une erreur s\'est produite lors de l\'initialisation du noyau vidéo + Cela est généralement dû à un pilote du GPU incompatible. L\'installation d\'un pilote du GPU personnalisé peut résoudre ce problème. + Impossible de charger la ROM + Le fichier ROM n\'existe pas + + + Quitter l\'émulation + Terminé + Compteur FPS + Activer/Désactiver les contrôles + Centre du stick relatif + Glissement du DPad + Haptique + Afficher l\'overlay + Tout basculer + Ajuster l\'overlay + Échelle + Opacité + Réinitialiser l\'overlay + Modifier l\'overlay + Mettre en pause l\'émulation + Reprendre l\'émulation + Options de l\'overlay + Chargement du jeu... + + Chargement des paramètres… + + + Clavier virtuel + + + Abandonner + Continuer + Archive système introuvable + %s est manquant. Veuillez dumper vos archives système.\nContinuer peut entraîner des plantages et des bogues. + Une archive système + Erreur de sauvegarde/chargement + Erreur fatale + Une erreur fatale s\'est produite. Consultez les logs pour plus de détails.\nContinuer l\'émulation peut entraîner des plantages et des bogues. + La désactivation de ce paramètre réduira considérablement les performances d\'émulation ! Pour une expérience optimale, il est recommandé de laisser ce paramètre activé. + + + Sélection automatique + Japon + É.-U.A. + Europe + Australie + Chine + Corée + Taïwan + + + Japonais (日本語) + Anglais + Français (Français) + Allemand (Deutsch) + Italien (Italiano) + Espagnol (Español) + Chinois (简体中文) + Coréen (한국어) + Néerlandais (Nederlands) + Portugais (Português) + Russe (Русский) + Taïwanais (台湾) + Anglais Britannique + Français canadien (Français canadien) + Espagnol latino-américain (Español latinoamericano) + Chinois simplifié (简体中文) + Chinois Traditionnel (正體中文) + Portugais brésilien (Português do Brasil) + + + Vulkan + Aucune + + + Normal + Haut + Extrême (Lent) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Lent) + 3X (2160p/3240p) (Lent) + 4X (2880p/4320p) (Lent) + + + Immédiat (Désactivé) + Mailbox + FIFO (Activé) + FIFO souple + + + Plus proche voisin + Bilinéaire + Bicubique + Gaussien + ScaleForce + AMD FidelityFX™ Super Resolution + + + Aucune + FXAA + SMAA + + + Par défaut (16:9) + Forcer le 4:3 + Forcer le 21:9 + Forcer le 16:10 + Étirer à la fenêtre + + + Auto + Précis + Risqué + Paranoïaque (Lent) + + + Pavé directionnel + Stick Gauche + Stick Droit + Home + Capture d\'écran + + + Préparation des shaders + Compilation des shaders + + + Changer le thème de l\'application + Défaut + Material You + + + Changer le mode de thème + Automatique + Lumineux + Sombre + + + Utiliser des arrière-plans noirs + Lorsque vous utilisez le thème sombre, appliquer des arrière-plans noirs. + + diff --git a/src/android/app/src/main/res/values-it/strings.xml b/src/android/app/src/main/res/values-it/strings.xml new file mode 100755 index 000000000..fede49650 --- /dev/null +++ b/src/android/app/src/main/res/values-it/strings.xml @@ -0,0 +1,344 @@ + + + + Questo software permette di giocare ai giochi della console Nintendo Switch. Nessun gioco o chiave è inclusa.<br /><br />Prima di iniziare, perfavore individua il file prod.keys ]]> nella memoria del tuo dispositivo.<br /><br />Scopri di più]]> + L\'emulatore è attivo + Mostra una notifica persistente quando l\'emulatore è in esecuzione. + yuzu è in esecuzione + Avvisi ed errori + Mostra le notifiche quando qualcosa va storto. + Autorizzazione di notifica non concessa! + + + Benvenuto! + Scopri come configurare <b>yuzu</b> e passare all\'emulazione. + Iniziare + Pulsanti + Seleziona il tuo file <b>prod.keys</b> con il pulsante in basso. + Selezione Pulsanti + Giochi + Seleziona la cartella <b>Games</b> con il pulsante in basso. + Fatto + È tutto pronto.\nDivertiti a giocare! + Continua + Successivo + Indietro + Aggiungi giochi + Seleziona la cartella dei giochi + + + Giochi + Cerca + Impostazioni + Non sono stati trovati file o non è stata ancora selezionata alcuna directory di gioco. + Cerca e filtra i giochi + Seleziona la cartella di gioco + Consente a yuzu di popolare l\'elenco dei giochi + Saltare la selezione della cartella dei giochi? + I giochi non saranno mostrati nella lista dei giochi se una cartella non è selezionata. + https://yuzu-emu.org/help/quickstart/#dumping-games + Cerca giochi + Cartella dei giochi selezionata + Installa prod.keys + Necessario per decrittografare i giochi + Saltare l\'aggiunta delle chiavi? + Sono necessarie delle chiavi valide per emulare i giochi. Se continui, funzioneranno solo le app homebrew. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Notifiche + Concedi l\'autorizzazione alle notifiche con il pulsante in basso. + Concedere l\'autorizzazione + Saltare la concessione dell\'autorizzazione alle notifiche? + yuzu non sarà in grado di notificarti informazioni importanti. + Permesso negato + Hai negato l\'autorizzazione troppe volte ed ora devi concederla manualmente nelle impostazioni di sistema. + Informazioni + Versione build, crediti ed altro + Aiuto + Salta + Annulla + Installa le chiavi degli Amiibo + Necessario per usare gli Amiibo in gioco + Selezionate chiavi non valide + Chiavi installate correttamente + Errore durante la lettura delle chiavi di crittografia + +1. Verifica che le tue chiavi abbiano l\'estensione .keys.\n\n +2. Le chiavi non devono essere archiviate nella cartella Download.\n\n +Risolvi i problemi e riprova. + Chiavi di crittografia non valide + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + Il file selezionato è incorretto o corrotto. Per favore riesegui il dump delle tue chiavi. + Installa i driver GPU + Installa driver alternativi per potenziali prestazioni migliori o accuratezza. + Impostazioni avanzate + Configura le impostazioni dell\'emulatore + Giocato recentemente + Aggiunto recentemente + Rivenditore + Homebrew + Apri la cartella di yuzu + Gestisci i file interni di yuzu + Modifica l\'aspetto dell\'app + Nessun file manager trovato + Impossibile aprire la cartella di yuzu + Per favore individua la cartella dell\'utente manualmente con il pannello laterale del file manager. + Gestisci i salvataggi + Salvataggio non trovato. Seleziona un\'opzione di seguito. + Importa o esporta i salvataggi + Nessun salvataggio trovato. Avvia un gioco e riprova. + Importato con successo + La struttura della cartella dei salvataggi è invalida + La prima sotto cartella deve chiamarsi come l\'ID del titolo del gioco. + Importa + Esporta + + + Gaia non è reale + Copiato negli appunti + Un emulatore della Switch open-source. + Collaboratori + Realizzato con \u2764 dal team yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Compilazione + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Accesso Anticipato + Ottieni l\'accesso anticipato + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Funzionalità all\'avanguardia, aggiornamenti in anticipo e altro + Vantaggi dell\'accesso anticipato + Funzionalità all\'avanguardia + Accesso anticipato agli aggiornamenti + Non installare manualmente. + Supporto prioritario + Aiuta a preservare il gioco + La nostra gratitudine eterna + Sei interessato? + + + Abilita il limite di velocità + Quando abilitato, la velocità di emulazione verrà limitata a una specifica percentuale della velocità normale. + Limite velocità percentuale + Specifica la percentuale del limite della velocità di emulazione. Con quella preimpostata al 100% l\'emulazione verrà limitata alla velocità normale. Valori più alti o bassi aumenteranno o diminuiranno il limite di velocità. + Accuratezza della CPU + + + Modalità docked + Emula in modalità docked, questo aumenta la risoluzione a spese delle performance. + Regione emulata + Lingua emulata + Seleziona la data dall\'orologio in tempo reale + Seleziona il tempo dall\'orologio in tempo reale + Abilità l\'orologio in tempo reale personalizzato + Questa impostazione ti permette di impostare un orologio in tempo reale personalizzato separato da quello del tuo sistema corrente. + Imposta l\'orologio in tempo reale personalizzato + + + API + Livello di accuratezza + Risoluzione + Modalità VSync + Rapporto d\'aspetto + Filtro di adattamento alla finestra + Metodo di anti-aliasing + Forza clock massimi (solo Adreno) + Forza la GPU a girare col massimo clock possibile (i vincoli alla temperatura saranno comunque applicati) + Usa shaders asincrone + Compila le shaders asincronamente, questo riduce lo shutter ma potrebbe introdurre dei glitch. + Abilità il debug grafico + Quando l\'opzione è selezionata, l\'API grafica entra in una modalità di debug più lenta + Usa cache shader su disco + Riduce lo stuttering salvando e caricando le shader generate sul disco. + + + Volume + Specifica il volume dell\'audio in uscita. + + + Predefinito + Impostazioni salvate + Impostazioni salvate per %1$s + Errore nel salvare %1$s.ini %2$s + Caricamento… + Vuoi ripristinare queste impostazioni al loro valore originale? + Riportare alle impostazioni originali + Resettare tutte le impostazioni? + Tutte le Impostazioni Avanzate saranno ripristinate a quelle originali. Questa operazione non è reversibile + Reimposta le impostazioni + Chiudi + Per saperne di più + + + Seleziona il driver della GPU + Vuoi sostituire il driver della tua GPU attuale? + Installa + Predefinito + Installato%s + Utilizza il driver predefinito della GPU. + Il driver selezionato è invalido, è in utilizzo quello predefinito di sistema! + Driver GPU del sistema + Installando i driver... + + + Impostazioni Avanzate + Impostazioni + Generali + Sistema + Grafica + Audio + Tema e colori + + + La tua ROM è criptata + cartuccia di gioco o i titoli installati.]]> + prod.keys sia installato in modo che i giochi possano essere decrittati.]]> + È stato riscontrato un errore nell\'inizializzazione del core video + Questo è causato solitamente dal driver incompatibile di una GPU. L\'installazione di driver GPU personalizzati potrebbe risolvere questo problema. + Impossibile caricare la ROM + Il file della ROM non esiste + + + Uscire dall\'emulazione + Fatto + Contatore degli FPS + Controlli a interruttore + Centro relativo degli Stick + Slittamento del Pad Direzionale + Aptico + Mostra Overlay + Attiva/disattiva tutto + Aggiusta Overlay + Scala + Opacità + Reimposta Overlay + Modifica Overlay + Metti in pausa l\'emulazione + Riprendi Emulazione + Impostazioni Overlay + Caricamento del gioco... + + Caricamento delle impostazioni... + + + Tastiera software + + + Interrompi + Continua + Archivio di sistema non trovato + %s è mancante. Per favore esegui il dump degli archivi del tuo sistema.\nContinuare ad emulare potrebbe portare bug o causare crash. + Un archivio di sistema + Errore di salvataggio/caricamento + Errore Fatale + Un errore fatale è accaduto. Controlla i log per i dettagli.\nContinuare ad emulare potrebbe portare bug o causare crash. + Disattivare questa impostazione può ridurre significativamente le performance di emulazione! Per una migliore esperienza, è consigliato lasciare questa impostazione attivata. + + + Selezione automatica + Giappone + USA + Europa + Australia + Cina + Corea + Taiwan + + + Giapponese (日本語) + Inglese (English) + Francese (Français) + Tedesco (Deutsch) + Italiano (Italiano) + Spagnolo (Español) + Cinese (简体中文) + Coreano (한국어) + Olandese (Nederlands) + Portoghese (Português) + Russo (Русский) + Taiwanese (台湾) + Inglese britannico + Francese Canadese (Français canadien) + Spagnolo Latino Americano (Español latinoamericano) + Cinese Semplificato (简体中文) + Cinese tradizionale (正體中文) + Portoghese (Português) + + + Vulkan + Nessuna + + + Normale + Alta + Estrema (Lenta) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Slow) + 3X (2160p/3240p) (Slow) + 4X (2880p/4320p) (Slow) + + + Immediato (Off) + Cassella postale + FIFO (On) + FIFO Rilassato + + + Nearest neighbor + Bilineare + Bicubico + Gaussiano + ScaleForce + AMD FidelityFX™️ Super Resolution + + + Nessuna + FXAA + SMAA + + + Predefinito (16:9) + Forza 4:3 + Forza 21:9 + Forza 16:10 + Allunga a finestra + + + Automatico + Accurata + Non sicura + Paranoico (Lento) + + + D-Pad + Levetta sinistra + Levetta destra + Home + Screenshot + + + Preparazione degli shaders + Costruendo gli shaders + + + Cambia il tema dell\'app + Predefinito + Material You + + + Cambia la modalità del tema + Segue il Sistema + Chiaro + Scuro + + + Usa sfondi neri + Quando utilizzi il tema scuro, applica sfondi neri. + + diff --git a/src/android/app/src/main/res/values-ja/strings.xml b/src/android/app/src/main/res/values-ja/strings.xml new file mode 100755 index 000000000..4a649778e --- /dev/null +++ b/src/android/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,343 @@ + + + + このソフトウェアは、Nintendo Switch用のゲームを実行します。 ゲームソフトやキーは含まれません。<br /><br />事前に、 prod.keys ]]> ファイルをデバイスのストレージに配置しておいてください。<br /><br />詳細]]> + エミュレーションが有効です + エミュレーションの実行中に常設通知を表示します。 + yuzu は実行中です + 問題が発生したときに通知を表示します。 + 通知が許可されていません! + + + ようこそ! + <b>yuzu</b> のセットアップ方法を学び、エミュレーションに飛び込みましょう。 + はじめる + キー + 下のボタンから <b>prod.keys</b> ファイルを選択してください。 + キーを選択 + ゲーム + 下のボタンから<b>ゲーム</b>があるフォルダを選択してください。 + 完了 + 準備が完了しました。\nゲームをお楽しみください! + 続行 + 次へ + 戻る + ゲームを追加 + ゲームフォルダを選択 + + + ゲーム + 検索 + 設定 + ファイルが見つからないか、ゲームディレクトリがまだ選択されていません。 + ゲームの検索と絞り込み + ゲームフォルダを選択 + yuzu がゲームリストに追加できるようにします + ゲームフォルダの選択をスキップしますか? + フォルダを選択しない場合、ゲームはゲームリストに表示されません。 + https://yuzu-emu.org/help/quickstart/#dumping-games + ゲームを検索 + ゲームディレクトリが選択されました + prod.keys をインストール + ゲームの復号化に必要 + キーの追加をスキップしますか? + 製品版ゲームのエミュレーションには、有効なキーが必要です。続行すると自作アプリしか機能しません。 + https://yuzu-emu.org/help/quickstart/#guide-introduction + 通知 + 下のボタンで通知の権限を許可してください。 + 許可 + 通知の許可をスキップしますか? + yuzuは重要なお知らせを通知できません。 + 権限が拒否されました + この権限を複数回拒否したため、システム設定で手動で許可する必要があります。 + 情報 + ビルドバージョン、クレジットなど + ヘルプ + スキップ + キャンセル + Amiibo キーをインストール + ゲーム内での Amiibo の使用に必要 + 無効なキーファイルが選択されました + 正常にインストールされました + 暗号化キーの読み取りエラー + + 1. キーの拡張子が .keys であることを確認します。\n\n + 2. キーはダウンロードフォルダに保存しないでください。\n\n + 問題を解決して、再度お試しください。 + + 暗号化キーが無効です + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + 選択されたファイルが不正または破損しています。キーを再ダンプしてください。 + GPUドライバーをインストール + 代替ドライバーをインストールしてパフォーマンスや精度を向上させます + 高度な設定 + エミュレーターの設定を構成します + 最近プレイした + 最近追加された + 製品版 + 自作 + yuzu フォルダを開く + yuzu内部のファイルを管理します + アプリの見た目を変更 + ファイルマネージャーが見つかりませんでした + yuzuのディレクトリを開けません + ファイルマネージャのサイドパネルでユーザーフォルダを手動で探してください。 + セーブデータを管理 + セーブデータが見つかりました。以下のオプションから選択してください。 + セーブファイルをインポート/エクスポート + セーブデータがありません。ゲームを起動してから再度お試しください。 + インポートが完了しました + セーブデータのディレクトリ構造が無効です + 最初のサブフォルダ名は、ゲームのタイトルIDである必要があります。 + インポート + エクスポート + + + ガイアは実在しない + クリップボードにコピーしました + オープンソースのSwitchエミュレータ + 貢献者 + yuzuチームの\u2764で作られた + https://github.com/yuzu-emu/yuzu/graphs/contributors + ビルド + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + 早期アクセス + 早期アクセスを手に入れる + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + 最先端の機能、アップデートの早期アクセスなど + 早期アクセスのメリット + 最先端の機能 + アップデートの早期アクセス + 手動インストールが不要 + 優先的なサポート + ゲームの保存に貢献 + 私たちの永遠の感謝 + 興味がありますか? + + + 速度制限を有効化 + 有効にすると、エミュレーション速度が任意の割合に制限されます。 + エミュレーション速度の制限 + エミュレーション速度を制限する割合を指定します。デフォルトの100%では、エミュレーションは通常の速度に制限されます。値が高いまたは低いほど、速度制限が増加または減少します。 + CPU精度 + + + TVモード + TVモードでエミュレートします。パフォーマンスが犠牲になりますが、解像度が向上します。 + 地域 + 言語 + RTCの日付を選択 + RTCの時刻を選択 + カスタムRTC + 現在のシステム時間とは別にカスタムのリアルタイムクロックを設定できます。 + カスタムRTCを設定 + + + API + 精度 + 解像度 + 垂直同期モード + アスペクト比 + ウィンドウ適応フィルター + アンチエイリアス方式 + 最大クロックを強制 (Adrenoのみ) + GPUを可能な限り最大クロックで動作させます (過熱制限は引き続き適用されます)。 + 非同期シェーダー + シェーダーを非同期でコンパイルします。コマ落ちが軽減されますが、不具合が発生する可能性があります。 + グラフィックデバッグ + オンにすると、グラフィックAPI は低速のデバッグモードに入ります。 + シェーダーキャッシュを使用 + 生成したシェーダーをディスクに保存して読み込むことで、コマ落ちを軽減します。 + + + 音量 + オーディオ出力の音量を指定します + + + デフォルト + 設定を保存しました + %1$sの設定を保存しました + %1$s.ini の保存エラー: %2$s + 読み込み中… + この設定を初期値にリセットしますか? + 初期設定に戻す + すべての設定をリセットしますか? + すべての詳細設定が初期設定に戻されます。この操作は元に戻せません。 + 設定をリセットしました + 閉じる + 詳細情報 + + + GPUドライバを選択 + 現在のGPUドライバーを置き換えますか? + インストール + デフォルト + %s をインストールしました + デフォルトのGPUドライバーを使用します + 選択されたドライバが無効なため、システムのデフォルトを使用します! + システムのGPUドライバ + インストール中… + + + 詳細設定 + 設定 + 全般 + システム + グラフィック + サウンド + テーマと色 + + + ROMが暗号化されています + ゲームカートリッジやインストール済みのタイトルを再度ダンプするためのガイドに従ってください。]]> + prod.keys ファイルがインストールされていることを確認してください。]]> + ビデオコアの初期化中にエラーが発生しました + これは通常、互換性のないGPUドライバーが原因で発生します。 カスタムGPUドライバーをインストールすると、問題が解決する可能性があります。 + ROMの読み込みに失敗しました + ROMファイルが存在しません + + + エミュレーションを終了 + 完了 + FPSカウンター + コントロールを切り替え + 十字キーのスライド操作 + 振動 + オーバーレイを表示 + すべて選択 + オーバーレイを調整 + 大きさ + 不透明度 + リセット + オーバーレイを編集 + エミュレーションを一時停止 + エミュレーションを再開 + オーバーレイオプション + ロード中… + + 設定をロード中… + + + ソフトウェアキーボード + + + 中断 + 続行 + システムアーカイブが見つかりません + %s が見つかりません。システムアーカイブをダンプしてください。\nエミュレーションを続行すると、クラッシュやバグが発生する可能性があります。 + システムアーカイブ + セーブ/ロード エラー + 致命的なエラー + 致命的なエラーが発生しました。詳細はログを確認してください。\nエミュレーションを続行するとクラッシュやバグが発生する可能性があります。 + この設定をオフにすると、エミュレーションのパフォーマンスが著しく低下します!最高の体験を得るためには、この設定を有効にしておくことをお勧めします。 + + + 自動選択 + 日本 + アメリカ + ヨーロッパ + オーストラリア + 中国 + 韓国 + 台湾 + + + 日本語 + 英語 + フランス語 (Français) + ドイツ語 (Deutsch) + イタリア語 (Italiano) + スペイン語 (Español) + 中国語 (简体中文) + 韓国語 (한국어) + オランダ語 (Nederlands) + ポルトガル語 (Português) + ロシア語 (Русский) + 台湾語 (台湾) + イギリス英語 + フランス語(カナダ) (Français canadien) + スペイン語(ラテンアメリカ) (Español latinoamericano) + 中国語 (简体中文) + 繁体字中国語 (正體中文) + ポルトガル語(ブラジル) (Português do Brasil) + + + Vulkan + なし + + + 標準 + 高い + 最高 (低速) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (低速) + 3X (2160p/3240p) (低速) + 4X (2880p/4320p) (低速) + + + Immediate (オフ) + Mailbox + FIFO (オン) + FIFO Relaxed + + + Nearest Neighbor + Bilinear + Bicubic + Gaussian + ScaleForce + AMD FidelityFX™ Super Resolution + + + なし + FXAA + SMAA + + + デフォルト (16:9) + 強制 4:3 + 強制 21:9 + 強制 16:10 + ウィンドウに合わせる + + + 自動 + 正確 + 不安定 + パラノイド (低速) + + + 方向ボタン + Lスティック + Rスティック + HOMEボタン + スクリーンショット + + + シェーダーを準備しています + シェーダーを構築しています + + + アプリのテーマ + デフォルト + Material You + + + テーマモード + システムに従う + ライト + ダーク + + + 黒色の背景を使用 + ダークテーマの使用時は、黒色の背景を有効にしてください。 + + diff --git a/src/android/app/src/main/res/values-ko/strings.xml b/src/android/app/src/main/res/values-ko/strings.xml new file mode 100755 index 000000000..43b00ebc4 --- /dev/null +++ b/src/android/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,345 @@ + + + + 이 소프트웨어는 닌텐도 스위치 게임 콘솔용 게임을 실행합니다. 게임 타이틀이나 keys는 포함되어 있지 않습니다.<br /><br />시작하기 전에 장치 저장소에서 prod.keys ]]> 파일을 찾아주세요.<br /><br />자세히 알아보기]]> + 에뮬레이션이 활성화됨 + 에뮬레이션이 실행 중일 때 영구 알림을 표시합니다. + yuzu가 실행 중입니다. + 알림 및 오류 + 문제가 발생하면 알림을 표시합니다. + 알림 권한이 부여되지 않았습니다! + + + 환영합니다! + <b>yuzu</b> 를 설정하고 에뮬레이션으로 이동하는 방법을 알아보세요. + 시작하기 + Keys + 아래 버튼을 사용하여 <b>prod.keys</b> 파일을 선택합니다. + keys 선택 + 게임 + 아래 버튼으로 <b>게임</b> 폴더를 선택합니다. + 완료 + 모든 준비가 완료되었습니다.\n게임을 즐기세요! + 계속 + 다음 + 뒤로 + 게임 추가 + 게임 폴더 선택 + + + 게임 + 검색 + 설정 + 파일을 찾을 수 없거나 아직 게임 디렉토리를 선택하지 않았습니다. + 게임 검색 및 필터링 + 게임 폴더 선택 + yuzu가 게임 목록을 채울 수 있도록 허용 + 게임 폴더 선택을 건너뛰겠습니까? + 폴더를 선택하지 않으면 게임 목록에 게임이 표시되지 않습니다. + https://yuzu-emu.org/help/quickstart/#dumping-games + 게임 검색 + 게임 디렉터리 선택 + prod.keys 설치 + 판매용 게임 암호 해독에 요구 + keys 추가를 건너뛰겠습니까? + 정품 게임을 에뮬레이트하려면 유효한 keys가 필요합니다. 계속하면 자체 제작 앱만 작동합니다. + https://yuzu-emu.org/help/quickstart/#guide-introduction + 알림 + 아래 버튼으로 알림 권한을 부여합니다. + 권한 부여 + 알림 권한 부여를 건너뛰겠습니까? + yuzu는 중요한 정보를 알려드리지 않습니다. + 권한 거부됨 + 이 권한을 너무 많이 거부했으므로 이제 시스템 설정에서 수동으로 권한을 부여해야 합니다. + 정보 + 빌드 버전, 크레딧 등 + 도움말 + 건너뛰기 + 취소 + Amiibo keys 설치 + 게임에서 아미보 사용 시 필요 + 잘못된 keys 파일 선택 + keys가 성공적으로 설치됨 + 암호화 keys 읽기 오류 + +1. keys의 확장자가 .keys인지 확인하세요.\n\n +2. keys는 다운로드 폴더에 저장하면 안 됩니다.\n\n +문제를 해결하고 다시 시도하세요. + + 잘못된 암호화 keys + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + 선택한 파일이 잘못되었거나 손상되었습니다. keys를 다시 덤프하세요. + GPU 드라이버 설치 + 잠재적으로 더 나은 성능 또는 정확성을 위해 대체 드라이버를 설치하세요. + 고급 설정 + 에뮬레이터 설정 구성 + 최근 플레이한 게임 + 최근 추가한 게임 + 판매용 + 홈브류 + yuzu 폴더 열기 + yuzu의 내부 파일 관리 + 앱 모양 수정 + 파일 관리자를 찾을 수 없음 + yuzu 디렉토리를 열 수 없음 + 파일 관리자의 사이드 패널에서 사용자 폴더를 수동으로 찾아주세요. + 저장 데이터 관리 + 데이터를 저장했습니다. 아래에서 옵션을 선택하세요. + 저장 파일 가져오기 또는 내보내기 + 저장 데이터를 찾을 수 없습니다. 게임을 실행한 후 다시 시도하세요. + 가져오기 성공 + 저장 디렉터리 구조가 잘못됨 + 첫 번째 하위 폴더 이름은 게임의 타이틀 ID여야 합니다. + 가져오기 + 내보내기 + + + 가이아는 진짜가 아님 + 클립보드에 복사 + 오픈 소스 스위치 에뮬레이터 + 기여자 + yuzu 팀의 \u2764로 제작 + https://github.com/yuzu-emu/yuzu/graphs/contributors + 빌드 + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + 미리 체험하기 + 미리 체험하기 신청 + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + 최첨단 기능, 미리 체험하기 업데이트 등 + 미리 체험하기 혜택 + 최첨단 기능 + 미리 체험하기 업데이트 + 수동 설치 불필요 + 우선 지원 + 게임 보존 도움주기 + 영원한 감사의 마음을 전합니다 + 관심 있으세요? + + + 제한 속도 활성화 + 활성화하면 에뮬레이션 속도가 정상 속도의 지정된 비율로 제한됩니다. + 속도 제한 비율 + 에뮬레이션 속도를 제한할 비율을 지정합니다. 기본값인 100%로 설정하면 에뮬레이션이 정상 속도로 제한됩니다. 값이 높거나 낮으면 속도 제한이 증가하거나 감소합니다. + CPU 정확도 + + + 도킹 모드 + 도킹 모드에서 에뮬레이션하면 성능이 저하되는 대신 해상도가 향상됩니다. + 에뮬레이트된 지역 + 에뮬레이트된 언어 + RTC 날짜 선택 + RTC 시간 선택 + 커스텀 RTC 활성화 + 이 설정을 사용하면 현재 시스템 시간과 별도로 사용자 지정 실시간 시계를 설정할 수 있음 + 커스텀 RTC 설정 + + + API + 정확도 수준 + 해상도 + 수직동기화 모드 + 화면비 + 창 적응 필터 + 안티-에일리어싱 방법 + 최대 클럭 강제 설정 (아드레노만 해당) + GPU가 가능한 최대 클럭으로 실행되도록 강제합니다 (열 제약 조건은 여전히 적용됩니다). + 비동기 셰이더 사용 + 셰이더를 비동기식으로 컴파일하므로 끊김 현상이 줄어들지만 글리치가 발생할 수 있습니다. + 그래픽 디버깅 활성화 + 이 옵션을 선택하면 그래픽 API가 느린 디버깅 모드로 전환됩니다. + 디스크 셰이더 캐시 사용 + 생성된 셰이더를 디스크에 저장하고 불러오기하여 끊김 현상을 줄입니다. + + + 볼륨 + 오디오 출력의 볼륨을 지정합니다. + + + 기본값 + 저장된 설정 + %1$s를 위해 저장된 설정 + %1$s.ini 저장 중 오류: %2$s + 불러오기 중... + 이 설정을 기본값으로 되돌리겠습니까? + 기본값으로 재설정 + 모든 설정을 초기화하겠습니까? + 모든 고급 설정이 기본 구성으로 재설정됩니다. 이 설정은 되돌릴 수 없습니다. + 설정 초기화 + 닫기 + 자세히 알아보기 + + + GPU 드라이버 선택 + 현재 사용 중인 GPU 드라이버를 교체하겠습니까? + 설치 + 기본값 + 설치된 %s + 기본 GPU 드라이버 사용 + 시스템 기본값을 사용하여 잘못된 드라이버를 선택했습니다! + 시스템 GPU 드라이버 + 드라이버 설치 중... + + + 고급 설정 + 설정 + 일반 + 시스템 + 그래픽 + 오디오 + 테마 및 색상 + + + 롬이 암호화되었음 + 게임 카트리지 또는 설치된 타이틀를 다시 덤프하세요.]]> + prod.keys 파일이 설치되어 있는지 확인하세요.]]> + 비디오 코어를 초기화하는 동안 오류 발생 + 이 문제는 일반적으로 호환되지 않는 GPU 드라이버로 인해 발생합니다. 사용자 지정 GPU 드라이버를 설치하면 이 문제가 해결될 수 있습니다. + 롬을 불러올 수 없음 + 롬 파일이 존재하지 않음 + + + 에뮬레이션 종료 + 완료 + FPS 카운터 + 토글 제어 + 상대 스틱 센터 + 십자패드 슬라이드 + 햅틱 + 오버레이 표시 + 모두 토글 + 오버레이 조정 + 스케일 + 불투명도 + 오버레이 재설정 + 오버레이 편집 + 에뮬레이션 일시 중지 + 에뮬레이션 일시 중지 해제 + 오버레이 옵션 + 게임 불러오기 중... + + 설정 불러오기 중... + + + 가상 키보드 + + + 정보 + 계속 + 시스템 아카이브를 찾을 수 없음 + %s가 누락되었습니다. 시스템 아카이브를 덤프하세요.\n에뮬레이션을 계속하면 충돌 및 버그가 발생할 수 있습니다. + 시스템 아카이브 + 저장하기/불러오기 오류 + 치명적인 오류 + 치명적인 오류가 발생했습니다. 자세한 내용은 로그를 확인하십시오.\n에뮬레이션을 계속하면 충돌 및 버그가 발생할 수 있습니다. + 이 설정을 끄면 에뮬레이션 성능이 크게 저하됩니다! 최상의 환경을 위해 이 설정을 활성화된 상태로 두는 것이 좋습니다. + + + 자동 선택 + 일본 + 미국 + 유럽 + 호주 + 중국 + 대한민국 + 타이완 + + + 일본어 (日本語) + 영어 (English) + 프랑스어 (Français) + 독일어(Deutsch) + 이탈리아어 (Italiano) + 스페인어 (Español) + 중국어 (简体中文) + 한국어 (Korean) + 네덜란드어 (Nederlands) + 포르투갈어 (Português) + 러시아어 (Русский) + 대만어 (台湾) + 영어 (British English) + 캐나다 프랑스어 (Français canadien) + 라틴 아메리카 스페인어 (Español latinoamericano) + 중국어 간체 (简体中文) + 중국어 번체 (正體中文) + 브라질 포르투갈어 (Português do Brasil) + + + 불칸 + 없음 + + + 보통 + 높음 + 극한 (느림) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (느림) + 3X (2160p/3240p) (느림) + 4X (2880p/4320p) (느림) + + + 즉시 (끔) + 메일박스 + FIFO (켬) + FIFO 릴랙스 + + + 가장 가까운 이웃 + 이중선형 + 고등차수보간 + 가우시안 + 스케일포스 + AMD FidelityFX™ 초고해상도 + + + 없음 + FXAA + SMAA + + + 기본 (16:9) + 강제 4:3 + 강제 21:9 + 강제 16:10 + 창에 맞게 늘림 + + + 자동 + 정확함 + 안전하지 않음 + 편집증 (느림) + + + 십자패드 + L 스틱 + R 스틱 + + 스크린샷 + + + 셰이더 준비하기 + 셰이더 빌드 중 + + + 앱 테마 변경 + 기본값 + Material You + + + 테마 모드 변경 + 팔로우 시스템 + 밝음 + 어두움 + + + 검은색 배경 사용 + 어두운 테마를 사용할 때는 검은색 배경을 적용합니다. + + diff --git a/src/android/app/src/main/res/values-nb/strings.xml b/src/android/app/src/main/res/values-nb/strings.xml new file mode 100755 index 000000000..80213aed4 --- /dev/null +++ b/src/android/app/src/main/res/values-nb/strings.xml @@ -0,0 +1,345 @@ + + + + Denne programvaren vil kjøre spill for Nintendo Switch-spillkonsollen. Ingen spilltitler eller nøkler er inkludert.<br /><br />Før du begynner, må du finne prod.keys ]]> filen din på enhetslagringen.<br /><br />Lær mer]]> + Emulering er aktiv + Viser et vedvarende varsel når emuleringen kjører. + Yuzu kjører + Merknader og feil + Viser varsler når noe går galt. + Varslingstillatelse ikke gitt! + + + Velkommen! + Lær å sette opp <b>yuzu</b> og hopp inn i emulering. + Kom i gang + Nøkler + Velg din <b>prod.keys</b> fil ved å bruke knappen under. + Velg nøkler + Spill + Velg din <b>Spill</b> mappe ved å bruke knappen under. + Ferdig + Nå er du klar.\nGled deg til å spille! + Fortsett + Neste + Tilbake + Legg til spill + Velg din spillmappe + + + Spill + Søk + Innstillinger + Ingen filer ble funnet eller ingen spillkatalog er valgt ennå. + Søk og filtrer spill + Velg spillmappe + Gjør det mulig for yuzu å fylle ut spillelisten. + Hoppe over valg av spillmappe? + Spill vises ikke i Spill-listen hvis en mappe ikke er valgt. + https://yuzu-emu.org/help/quickstart/#dumping-games + Søk i spill + Spillkatalogen er valgt + Installer prod.keys + Nødvendig for å dekryptere spill + Hoppe over å legge til nøkler? + Gyldige nøkler er påkrevd for å emulere spill. Bare hjemmebryggede apper vil fungere hvis du fortsetter. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Varsler + Gi varslingstillatelse med knappen nedenfor. + Gi tillatelse + Hoppe over å gi tillatelse til varsling? + yuzu vil ikke kunne varsle deg om viktig informasjon. + Tillatelse avslått + Du har nektet denne tillatelsen for mange ganger, og nå må du gi den manuelt i systeminnstillingene. + Om + Byggeversjon, kildehenvisninger og mer + Hjelp + Hopp over + Avbryt + Installer Amiibo-nøkler + Kreves for å bruke Amiibo i spillet + Ugyldig nøkkelfil valgt + Nøkler vellykket installert + Feil ved lesing av krypteringsnøkler + + 1. Kontroller at nøklene har filtypen .keys.\n\n + 2. Nøkler må ikke lagres i nedlastingsmappen.\n\n + Løs problemet/problemene og prøv igjen. + + Ugyldige krypteringsnøkler + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + Den valgte filen er feil eller ødelagt. Vennligst dump nøklene på nytt. + Installer GPU-driver + Installer alternative drivere for potensielt bedre ytelse eller nøyaktighet. + Avanserte innstillinger + Konfigurere emulatorinnstillinger + Nylig spilt + Nylig lagt til + Butikkhandel + Homebrew + Åpne yuzu-mappen + Administrere yuzus interne filer + Endre appens utseende + Ingen filbehandler funnet + Kunne ikke åpne yuzu-katalogen + Finn brukermappen manuelt med filbehandlingens sidepanel. + Administrere lagringsdata + Lagringsdata funnet. Velg et alternativ nedenfor. + Importer eller eksporter lagringsfiler + Ingen lagringsdata funnet. Start et nytt spill og prøv på nytt. + Vellykket import + Ugyldig struktur for lagringskatalog + Det første undermappenavnet må være spillets tittel-ID. + Importer + Eksporter + + + Gaia er ikke ekte + Kopiert til utklippstavlen + En Switch-emulator med åpen kildekode + Bidragsytere + Laget med \u2764 fra yuzu-teamet + https://github.com/yuzu-emu/yuzu/graphs/contributors + Bygg + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Tidlig tilgang + Få tidlig tilgang + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Banebrytende funksjoner, tidlig tilgang til oppdateringer og mye mer. + Fordeler ved tidlig tilgang + Avanserte funksjoner + Tidlig tilgang til oppdateringer + Ingen manuell installasjon + Prioritert støtte + Bidra til bevaring av spill + Vår evige takknemlighet + Er du interessert? + + + Aktiver hastighetsbegrensning + Når aktivert, begrenses emuleringshastigheten til en angitt prosentandel av normal hastighet. + Hastighetsbegrensning i prosent + Angir prosentandelen som skal begrense emuleringshastigheten. Med standardverdien 100 % vil emuleringen være begrenset til normal hastighet. Høyere eller lavere verdier vil øke eller redusere hastighetsbegrensningen. + CPU-nøyaktighet + + + Dokket modus + Emulerer i dokket modus, noe som øker oppløsningen på bekostning av ytelsen. + Emulert region + Emulert språk + Velg RTC-dato + Velg RTC-tid + Aktiver egendefinert RTC + Med denne innstillingen kan du stille inn en egendefinert sanntidsklokke som er atskilt fra gjeldende systemtid. + Angi egendefinert RTC + + + API + Nøyaktighetsnivå + Oppløsning + VSync-modus + Størrelsesforhold + Filter for vindustilpasning + Anti-Aliasing-metode + Tving fram maksimal klokkefrekvens (kun Adreno) + Tvinger GPU-en til å kjøre med maksimal klokkefrekvens (termiske begrensninger vil fortsatt gjelde). + Bruk asynkrone shaders + Kompilerer shaders asynkront, noe som reduserer hakkingen, men kan føre til feil. + Aktiver feilsøking av grafikk + Når dette er merket av, går grafikk-API-et inn i en langsommere feilsøkingsmodus. + Bruk disk shader-cache + Reduser hakking ved å lagre og laste inn genererte shaders på disken. + + + Volum + Angir volumet på lydutgangen. + + + Standard + Lagrede innstillinger + Lagrede innstillinger for %1$s + Feil ved lagring av %1$s.ini: %2$s + Lastes inn... + Vil du tilbakestille denne innstillingen til standardverdien? + Tilbakestill til standardinnstillingene + Tilbakestille alle innstillinger? + Alle avanserte innstillinger tilbakestilles til standardkonfigurasjonen. Dette kan ikke angres. + Tilbakestilling av innstillinger + Lukk + Lær Mer + + + Velg GPU-driver + Ønsker du å bytte ut din nåværende GPU-driver? + Installer + Standard + Installert %s + Bruk av standard GPU-driver + Ugyldig driver valgt, bruker systemstandard! + Systemets GPU-driver + Installerer driver... + + + Avanserte innstillinger + Innstillinger + Generelt + System + Grafikk + Lyd + Tema og farge + + + ROM-en din er kryptert + spillkassetter eller installerte titler.]]> + prod.keys filen er installert slik at spillene kan dekrypteres.]]> + Det oppstod en feil ved initialisering av videokjernen + Dette skyldes vanligvis en inkompatibel GPU-driver. Installering av en tilpasset GPU-driver kan løse problemet. + Kunne ikke laste inn ROM + ROM-filen finnes ikke + + + Avslutt emulering + Ferdig + FPS-teller + Veksle kontroller + Relativt senter for stikken + DPad-skyveplate + Haptikk + Vis overlegg + Slå av alt + Juster overlegg + Skaler + Gjennomsiktighet + Tilbakestill overlegg + Rediger overlegg + Pause Emulering + Opphev pausing av emulering + Alternativer for overlegg + Spillet lastes inn... + + Laster inn innstillinger... + + + Programvare Tastatur + + + Avbryt + Fortsett + System Arkiv Ikke Funnet + %s mangler. Dump systemarkivene dine.\nFortsatt emulering kan føre til krasj og feil. + Et systemarkiv + Feil ved lagring/innlasting + Fatal Feil + Det oppstod en fatal feil. Sjekk loggen for mer informasjon.\nFortsatt emulering kan føre til krasj og feil. + Hvis du slår av denne innstillingen, reduseres emuleringsytelsen betydelig! Vi anbefaler at du lar denne innstillingen være aktivert for å få den beste opplevelsen. + + + Automatisk valg + Japan + USA + Europa + Australia + Kina + Korea + Taiwan + + + Japansk (日本語) + Engelsk + Fransk (Français) + Tysk (Deutsch) + Italiensk (Italiano) + Spansk (Español) + Kinesisk (简体中文) + Koreansk (한국어) + Nederlandsk (Nederlands) + Portugisisk (Português) + Russisk (Русский) + Taiwansk (台湾) + Britisk Engelsk + Kanadisk fransk (Français canadien) + Latinamerikansk spansk (Español latinoamericano) + Forenklet kinesisk (简体中文) + Tradisjonell Kinesisk (正體中文) + Brasiliansk portugisisk (Português do Brasil) + + + Vulkan + Ingen + + + Normal + Høy + Ekstrem (Treg) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Slow) + 3X (2160p/3240p) (Slow) + 4X (2880p/4320p) (Slow) + + + Umiddelbar (av) + Postkasse + FIFO (På) + FIFO avslappet + + + Nærmeste nabo + Bilineær + Bikubisk + Gaussisk + ScaleForce + AMD FidelityFX™ Super Resolution + + + Ingen + FXAA + SMAA + + + Standard (16:9) + Tving 4:3 + Tving 21:9 + Tving 16:10 + Strekk til Vindu + + + Auto + Nøyaktig + Utrygt + Paranoid (Langsom) + + + D-Pad + Venstre Pinne + Høyre Pinne + Hjem + Skjermbilde + + + Forberedelse av shaders + Bygging av shaders + + + Endre appens tema + Standard + Material You + + + Endre temamodus + Følg systemet + Lys + Mørk + + + Bruk svart bakgrunn + Bruk svart bakgrunn når du bruker det mørke temaet. + + diff --git a/src/android/app/src/main/res/values-pl/strings.xml b/src/android/app/src/main/res/values-pl/strings.xml new file mode 100755 index 000000000..fc9f49e0e --- /dev/null +++ b/src/android/app/src/main/res/values-pl/strings.xml @@ -0,0 +1,344 @@ + + + + To oprogramowanie umożliwia uruchomienie gier z konsoli Nintendo Switch. Nie zawiera gier ani wymaganych kluczy.<br /><br />Zanim zaczniesz, wybierz plik kluczy prod.keys ]]> z katalogu w pamięci masowej.<br /><br />Dowiedz się więcej]]> + Emulacja jest uruchomiona + Pokaż trwałe powiadomienie gdy emulacja jest uruchomiona. + yuzu jest uruchomiony + Powiadomienia błędy + Pokaż powiadomienie gdy coś pójdzie źle + Nie zezwolono na powiadomienia! + + + Witaj! + Zobacz jak skonfigurować <b>yuzu</b> i wskocz w świat emulacji. + Zaczynamy + Klucze + Wybierz swoje klucze <b>prod.keys</b> za pomocą przycisku poniżej. + Wybierz klucze + Gry + Wybierz katalog z grami <b>Games</b> za pomocą przycisku poniżej. + Gotowe + Wszystko skonfigurowane.\n Miłego grania! + Kontynuuj + Dalej + Wstecz + Dodaj gry + Wybierz folder zawierający Twoje gry + + + Gry + Szukaj + Ustawienia + Nie znaleziono plików, lub nie wybrano jeszcze katalogu zawierającego gry. + Szukaj i filtruj gry + Wybierz folder z grami + Pozwala yuzu wygenerować listę gier + Pominąć wybór folderu z grami? + Aby pokazać listę gier wybierz katalog zawierający gry. + https://yuzu-emu.org/help/quickstart/#dumping-games + Szukaj gier + Wybrano katalog gier + Instaluj klucze prod.keys + Wymagane aby poprawnie odczytać sklepowe gry + Pominąć dodawanie kluczy? + Poprawne klucze są wymagane aby emulować sklepowe gry. Jeśli przejdziesz dalej, jedynie homebrew będą działać. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Powiadomienia + Nadaj uprawnienia dostępu do powiadomień. + Nadaj uprawnienia + Pominąć nadanie uprawnień powiadomień? + yuzu nie będzie mógł powiadamiać Cię o ważnych informacjach. + Odmowa dostępu + Odmówiłeś dostępu do powiadomień zbyt wiele razy, teraz musisz przyznać je w ustawieniach systemowych Androida. + O aplikacji + Wersja, podziękowania i więcej + Pomoc + Pomiń + Anuluj + Zainstaluj klucze Amiibo + Wymagane aby korzystać z Amiibo w grze + Wybrano niepoprawne klucze + Klucze zainstalowane pomyślnie + Błąd podczas odczytu kluczy + +1. Upewnij się że klucze mają rozszerzenie .keys. \n\n +2. Klucze nie mogą znajdować się w folderze Pobrane. \n\n +Rozwiąż te problemy (oba) i spróbuj ponownie. + Niepoprawne klucze + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + Wybrany plik jest niepoprawny lub uszkodzony. Zrzuć ponownie swoje klucze. + Zainstaluj sterownik GPU + Użyj alternatywnych sterowników aby potencjalnie zwiększyć wydajność i naprawić błędy + Ustawienia zaawansowane + Skonfiguruj ustawienia emulatora + Ostatnio grane + Ostatnio dodane + Sklepowe + Homebrew + Otwórz folder yuzu + Zarządzaj plikami emulatora + Personalizuj wygląd aplikacji + Nie znaleziono menedżera plików + Nie można otworzyć folderu emulatora + Proszę wybrać ręcznie folder z pomocą panelu bocznego menedżera plików. + Zarządzaj plikami zapisów gier + Znaleziono pliki zapisów gier. Wybierz opcję poniżej. + Importuj lub wyeksportuj pliki zapisów + Nie znaleziono plików zapisów. Uruchom grę i spróbuj ponownie. + Zaimportowano pomyślnie + Niepoprawna struktura folderów + Pierwszy podkatalog musi zawierać w nazwie numer ID tytułu gry. + Importuj + Eksportuj + + + Gaia isn\'t real + Skopiowano do schowka + Otwarto-źródłowy emulator konsoli Switch + Współtwórcy + Stworzone z \u2764 przez zespół yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Wersja + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Wczesny dostęp + Uzyskaj wczesny dostęp + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Nowe funkcje, szybszy dostęp do aktualizacji i nie tylko + Korzyści z wcześniejszego dostępu + Nowatorskie funkcje + Częste aktualizacje + Automatyczne aktualizacje + Priorytetowe wsparcie + Pomoc w problemach z grami + Nasza wdzięczność + Jesteś zainteresowany? + + + Włącz limit szybkości emulacji + Włącz, aby ustawić procentowy limit szybkości emulacji + Procentowy limit szybkości emulacji + Określa limit szybkości emulacji gier. Domyślna wartość 100% oznacza normalną szybkość z jaką działa gra. Wartości niższe lub wyższe zmniejszą lub zwiększą limit szybkości. + Dokładność procesora CPU + + + Tryb zadokowany + Emulacja w trybie stacji dokującej, zwiększa rozdzielczość kosztem wydajności. + Region emulacji + Język emulacji + Ustaw datę RTC + Ustaw czas RTC + Włącz niestandardowy zegar RTC + Ta opcja pozwala na wybranie własnych ustawień czasu używanych w czasie emulacji, innych niż czas systemu Android. + Ustaw niestandardowy czas RTC + + + Interfejs graficzny + Poziom precyzji emulacji + Rozdzielczość + Synchronizacja pionowa VSync + Proporcje ekranu + Filtr adaptacji rozdzielczości + Metoda wygładzania krawędzi + Maksymalne taktowanie GPU (układy Adreno) + Wymusza uruchomienie maksymalnego taktowania układu graficznego (zabezpieczenia termiczne będą dalej aktywne). + Wyłącz synchronizację shaderów + Kompiluj oświetlenie bez synchronizacji, poprawi wydajność ale może powodować błędy. + Włącz debugowanie grafiki + Kiedy włączone, interfejs graficzny korzysta z wolnego trybu debugowania błędów. + Użyj pamięci podręcznej shaderów na dysku + Zmniejsza przycięcia przez przechowywanie gotowych wygenerowanych plików oświetlenia w pamięci urządzenia. + + + Głośność + Ustala poziom głośności wyjścia dźwięku. + + + Domyślne + Ustawienia zapisane + Ustawienia zapisane w %1$s + Błąd zapisu %1$s.ini: %2$s + Wczytywanie... + Przywrócić wartość tego ustawienia do wartości domyślnej? + Przywróć ustawienia domyślne + Przywrócić WSZYSTKIE ustawienia? + Wszystkie zaawansowane opcje zostaną przywrócone do wartości domyślnych. Czynności nie będzie można cofnąć. + Reset ustawień + Zamknij + Dowiedz się więcej + + + Wybierz sterownik GPU + Chcesz zastąpić obecny sterownik układu graficznego? + Zainstaluj + Domyślne + Zainstalowano %s + Aktywny domyślny sterownik GPU + Wybrano błędny sterownik, powrót do domyślnego. + Systemowy sterownik GPU + Instalowanie sterownika... + + + Zaawansowane + Ustawienia + Ogólne + System + Grafika + Dźwięk + Motyw i kolor + + + Twój ROM jest zakodowany + kardridży lub zainstalowanych gier.]]> + prod.keys jest zainstalowany aby gry mogły zostać odczytane.]]> + Błąd inicjacji podsystemu graficznego + Zazwyczaj spowodowane niekompatybilnym sterownikiem GPU, instalacja niestandardowego sterownika może rozwiązać ten problem. + Nie można wczytać pliku ROM + Plik ROM nie istnieje + + + Zakończ emulację + Gotowe + Licznik FPS + Wybierz przyciski + Wycentruj gałki + Ruchomy DPad + Wibracje haptyczne + Pokaż przyciski + Zaznacz wszystkie + Dostosuj nakładkę + Skala + Przeźroczystość + Resetuj + Edytuj nakładkę + Wstrzymaj emulację + Wznów emulację + Opcje nakładki + Wczytywanie gry... + + Wczytywanie ustawień... + + + Klawiatura systemowa + + + Przerwij + Kontynuuj + Archiwum systemu nie znalezione. + %s nieznaleziony. Proszę wykonać zrzut archiwum systemu.\nKontynuowanie może powodować błędy lub przerwanie emulacji. + Archiwum systemu + Błąd odczytu/zapisu + Błąd krytyczny + Wystąpił błąd krytyczny. Szczegóły znajdziesz w pliku log.\nKontynuowanie może spowodować błędy lub przerwanie emulacji. + Wyłączenie tej opcji znacząco ograniczy wydajność! Dla najlepszego doświadczenia, zaleca się zostawienie tej opcji włączonej. + + + Auto-wybór + Japonia + USA + Europa + Australia + Chiny + Korea + Tajwan + + + Japoński (日本語) + Angielski + Francuski (Francja) + Niemiecki (Niemcy) + Włoski (Włochy) + Hiszpański (Hiszpania) + Chiński (简体中文) + Koreański (한국어) + Duński (Holandia) + Portugalski (Portugalia) + Rosyjski (Русский) + Tajwański (台湾) + Angielski Brytyjski + Francuski (Kanada) + Hiszpański (Ameryka Latynoska) + Chiński uproszczony (简体中文) + Chiński tradycyjny (正體中文) + Portugalski (Brazylia) + + + Vulkan + Żadny + + + Normalny + Wysoki + Ekstremalny (Wolny) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Wolno) + 3X (2160p/3240p) (Wolno) + 4X (2880p/4320p) (Wolno) + + + Natychmiastowa (Wyłączona) + Skrzynka pocztowa + FIFO (Włączona) + FIFO Relaks + + + Najbliższy sąsiadujący + Bilinearny + Bikubiczny + Kulisty + ScaleForce + AMD FidelityFX™ Super Resolution + + + Żadna (wyłączony) + FXAA + SMAA + + + Domyślne (16:9) + Wymuś 4:3 + Wymuś 21:9 + Wymuś 16:10 + Rozciągnij do Okna + + + Automatyczny + Dokładny + Niebezpieczny + Paranoid (Wolny) + + + D-Pad + Lewa gałka + Prawa gałka + Home + Zrzut ekranu + + + Przygotowanie shaderów + Budowanie shaderów + + + Zmień motyw aplikacji + Domyślny + Material You + + + Zmiana trybu motywu + Podążaj za systemowym + Jasny + Ciemny + + + Używaj czarnego tła + Kiedy używany ciemny motyw, tła zostają zastąpione czernią. + + diff --git a/src/android/app/src/main/res/values-pt-rBR/strings.xml b/src/android/app/src/main/res/values-pt-rBR/strings.xml new file mode 100755 index 000000000..83185c385 --- /dev/null +++ b/src/android/app/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,345 @@ + + + + Este software corre jogos para a consola Nintendo Switch. Não estão incluídas nem jogos ou chaves. <br /><br />Antes de começares, por favor localiza o ficheiro no armazenamento do teu dispositivo.<br /><br /> + Emulação está Ativa + Mostra uma notificação permanente enquanto a emulação está a correr. + Yuzu está em execução + Notificações e erros + Mostra notificações quendo algo corre mal. + Permissões de notificação não permitidas + + + Bemvindo! + Aprende como configurar <b>yuzu</b> e arranca a emulação. + Começa + Chaves + Seleciona o teu ficheiro <b>prod.keys</b> com o botão abaixo. + Seleciona as Chaves + Jogos + Seleciona a tua pasta <b>Games</b> com o botão abaixo. + Feito + Tudo pronto.\nDisfruta dos teus jogos! + Continuar + Próximo + Voltar + Adiciona Jogos + Seleciona a tua pasta de Jogos + + + Jogos + Pesquisar + Configurações + Não foram encontrados jogos ou a pasta de Jogos ainda não foi definida. + Procura e filtra jogos. + Seleciona a pasta de jogos. + Permite que o Yuzu preencha a lista de jogos + Ignorar a seleção da pasta de jogos? + Os jogos não serão exibidos na lista de jogos se uma pasta não estiver selecionada. + https://yuzu-emu.org/help/quickstart/#dumping-games + Procurar Jogos + Pasta de Jogos selecionada + Instala prod.keys + Necessário para desencriptar jogos comerciais + Ignorar a adição de chaves? + São necessárias chaves válidas para emular jogos comerciais. Somente aplicativos homebrew funcionarão se você continuar. + https://yuzu-emu.org/help/quickstart/#Guia de introdução + Notificações + Conceda a permissão de notificação com o botão abaixo. + Conceda permissão + Saltar a concessão da permissão de notificação? + Yuzu não conseguirá te notificar de informações importantes. + Permissão negada + Você negou essa permissão muitas vezes e agora precisa concedê-la manualmente nas configurações do sistema. + Sobre + Versão de compilação, créditos e mais + Ajuda + Saltar + Cancelar + Instala chaves Amiibo + Necessário para usares Amiibo no jogo + Ficheiro de chaves inválido + Chaves instaladas com sucesso + Erro ao ler chaves de encriptação + + 1. Verifica se as tuas chaves têm a extensão .keys.\n\n + 2. As Chaves não podem estar gravadas na pasta Transferências.\n\n + Resolve esta(s) questões e tenta novamente. + + Chaves de encriptação inválidas + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves. + Instala driver para GPU + Instala drivers alternativos para desempenho ou precisão potencialmente melhores + Definições avançadas + Configura definições do emulador + Jogos recentes + Adicionados recentemente + Jogos comerciais + Homebrew + Abre a pasta Yuzu + Gere os ficheiro internos do Yuzu + Modifica a aparência da App + Nenhum gestor de ficheiros encontrado + Impossível abrir pasta Yuzu + Localiza a pasta de utilizador manualmente com o painel lateral do gestor de ficheiros. + Gerir dados guardados + Dados não encontrados. Por favor seleciona uma opção abaixo. + Importa ou exporta dados guardados + Dados não encontrados. Por favor lança o jogo e tenta novamente. + Importado com sucesso + Estrutura de diretório de dados invalida + O nome da primeira sub pasta tem de ser a ID do jogo. + Importar + Exportar + + + Gaia não é real + Copiado para a área de transferência + Um emulador Switch de código aberto + Contribuidores + Feito com \u2764 da equipa do Yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Versão + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Acesso antecipado + Obtém Acesso Antecipado + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Recursos de ponta, acesso antecipado a atualizações e muito mais + Benefícios do Acesso Antecipado + Recursos de ponta + Acesso antecipado a atualizações + Sem instalação manual + Suporte prioritário + Ajuda na preservação dos jogos + A nossa eterna gratidão + Estás interessado? + + + Ativar limite de velocidade + Quando ativada, a velocidade da emulação será limitada à percentagem definida da velocidade normal. + Percentagem do limite de velocidade + Especifica o limite da percentagem da velocidade da emulação. Com a velocidade por defeito a 100% a emulação será limitada à velocidade normal. Valores maiores ou menores aumentarão ou diminuirão o limite de velocidade. + Precisão do CPU + + + Modo ancorado + Emula em modo ancorado, que aumenta a resolução ás custas da performance. + Região da emulação + Idioma da emulação + Seleciona a data RTC + Seleciona a hora RTC + Ativa RTC personalizado + Esta configuração permite definir um RTC personalizado diferente da hora atual do sistema + Define RTC personalizado + + + API + Nível de precisão + Resolução + Modo VSync + Proporção do ecrã + Filtro de Adaptação da Janela + Método de Anti-Aliasing + Força velocidade máxima (Adreno only) + Força o GPU a correr à velocidade máxima (restrições térmicas serão aplicadas) + Usa shaders assíncronos + Compila shaders assincronamente, que aumentará a fluidez, mas poderá causar falhas. + Ativar depuração de gráficos + Quando selecionado, a API gráfica entra num modo de depuração mais lento. + Usar cache de shaders em disco + Aumenta a fluidez ao guardar e carregar shaders gerados para o armazenamento. + + + Volume + Especifica o volume de saída. + + + Padrão + Definições guardadas + Definições guardadas para %1$s + Erro ao guardar %1$s.ini: %2$s + A carregar... + Queres reverter esta definição para os valores padrão? + Reverter para padrão + Redefinir todas as definições? + Todas as definições avançadas serão redefinidas para as definições padrão. Isto não pode ser revertido. + Redefinir definições + Fechar + Saiba mais + + + Seleciona a driver para o GPU + Queres substituir o driver do GPU atual? + Instalar + Padrão + Instalado%s + Usar o driver padrão do GPU + Driver selecionado inválido, a usar o padrão do sistema! + Driver do GPU padrão + A instalar o Driver... + + + Configurações avançadas + Configurações + Geral + Sistema + Gráficos + Áudio + Cor e tema. + + + A tua ROM está encriptada + Cartidges de Jogo or Jogos Instalados.]]> + prod.keys está instalado para que os jogos possam ser desencriptados.]]> + Ocorreu um erro ao iniciar o núcleo de vídeo. + Isto é normalmente causado por um driver de GPU incompatível. Instalar um driver GPU pode resolver este problema. + Impossível carregar a tua ROM + O ficheiro da ROM não existe + + + Sair da emulação + Feito + Contador de FPS + Alterar Controlos + Centro do Analógico Relativo + Deslizar do DPad + Hápticos + Mostrar sobreposição + Alterar todos + Ajustar a sobreposição + Escala + Opacidade + Redefinir Sobreposição + Editar sobreposição + Pausa emulação + Retomar emulação + Opções de sobreposição + Jogo a carregar... + + Configurações a carregar... + + + Teclado de software + + + Abortar + Continuar + Arquivo do sistema não encontrado + %s está em falta. Por favor apaga os teus ficheiros de sistema.\nContinuar a emulação pode causar erros. + Um arquivo do sistema + Erro Guardar/Carregar + Erro fatal + Ocorreu um erro fatal. Verifica o teu registro para detalhes. \nContinuar a emulação pode causar erros. + Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada. + + + Auto seleção + Japão + EUA + Europa + Austrália + China + Coréia + Taiwan + + + Japônes (日本語) + Português do Brasil + Francês (Français) + Alemão (Deutsch) + Italiano (Italiano) + Espanhol (Español) + Mandarim (简体中文) + Coreano (한국어) + Holandês (Nederlands) + Português (Português) + Russo (Русский) + Taiwanês (台湾) + Inglês britânico (British English) + Fracês Canadiano (Français canadien) + Espanhol da América Latina (Español latino-americano) + Chinês Simplificado (简体中文) + Chinês tradicional (正體中文) + Português do Brasil (Português do Brasil) + + + Vulcano + Nenhum + + + Normal + Alto + Estremo (Lento) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Slow) + 3X (2160p/3240p) (Lento) + 4X (2880p/4320p) (Lento) + + + Imediato (Desligado) + Caixa de entrada + FIFO (Ligado) + FIFO Relaxado + + + Vizinho mais próximo + Bilinear + Bicúbico + Gaussiano + ScaleForce + AMD FidelityFX™ Super Resolution + + + Nenhum + FXAA + SMAA + + + Padrão (16:9) + Forçar 4:3 + Forçar 21:9 + Forçar 16:10 + Esticar para a janela + + + Automático + Preciso + Não seguro + Paranoid (Lento) + + + D-pad + Analógico esquerdo + Analógico direito + Botão Home + Captura de ecrã + + + A preparar shaders + A criar shaders + + + Muda o Tema da App + Padrão + Material You + + + Altera o Modo do Tema + Igual ao Sistema + Claro + Escuro + + + Usa Fundos Negros + Quando usar tema escuro, aplicar fundos escuros + + diff --git a/src/android/app/src/main/res/values-pt-rPT/strings.xml b/src/android/app/src/main/res/values-pt-rPT/strings.xml new file mode 100755 index 000000000..3d0851e6f --- /dev/null +++ b/src/android/app/src/main/res/values-pt-rPT/strings.xml @@ -0,0 +1,345 @@ + + + + Este software corre jogos para a consola Nintendo Switch. Não estão incluídas nem jogos ou chaves. <br /><br />Antes de começares, por favor localiza o ficheiro no armazenamento do teu dispositivo.<br /><br /> + Emulação está Ativa + Mostra uma notificação permanente enquanto a emulação está a correr. + Yuzu está em execução + Notificações e erros + Mostra notificações quendo algo corre mal. + Permissões de notificação não permitidas + + + Benvindo! + Aprende como configurar <b>yuzu</b> e arranca a emulação. + Começa + Chaves + Seleciona o teu ficheiro <b>prod.keys</b> com o botão abaixo. + Seleciona as Chaves + Jogos + Seleciona a tua pasta <b>Games</b> com o botão abaixo. + Feito + Tudo pronto.\nDisfruta dos teus jogos! + Continuar + Próximo + Voltar + Adiciona Jogos + Seleciona a tua pasta de Jogos + + + Jogos + Pesquisar + Configurações + Não foram encontrados jogos ou a pasta de Jogos ainda não foi definida. + Procura e filtra jogos. + Seleciona a pasta de jogos. + Permite que o Yuzu preencha a lista de jogos + Ignorar a seleção da pasta de jogos? + Os jogos não serão exibidos na lista de jogos se uma pasta não estiver selecionada. + https://yuzu-emu.org/help/quickstart/#dumping-games + Procurar Jogos + Pasta de Jogos selecionada + Instala prod.keys + Necessário para desencriptar jogos comerciais + Ignorar a adição de chaves? + São necessárias chaves válidas para emular jogos comerciais. Somente aplicativos homebrew funcionarão se você continuar. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Notificações + Conceda a permissão de notificação com o botão abaixo. + Conceda permissão + Saltar a concessão da permissão de notificação? + Yuzu não conseguirá te notificar de informações importantes. + Permissão negada + Você negou essa permissão muitas vezes e agora precisa concedê-la manualmente nas configurações do sistema. + Sobre + Versão de compilação, créditos e mais + Ajuda + Saltar + Cancelar + Instala chaves Amiibo + Necessário para usares Amiibo no jogo + Ficheiro de chaves inválido + Chaves instaladas com sucesso + Erro ao ler chaves de encriptação + + 1. Verifica se as tuas chaves têm a extensão .keys.\n\n + 2. As Chaves não podem estar gravadas na pasta Transferências.\n\n + Resolve esta(s) questões e tenta novamente. + + Chaves de encriptação inválidas + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves. + Instala driver para GPU + Instala drivers alternativos para desempenho ou precisão potencialmente melhores + Configurações avançadas + Configura configurações do emulador + Jogos recentes + Adicionados recentemente + Jogos comerciais + Homebrew + Abre a pasta Yuzu + Gere os ficheiro internos do Yuzu + Modifica a aparência da App + Nenhum gestor de ficheiros encontrado + Impossível abrir pasta Yuzu + Localiza a pasta de utilizador manualmente com o painel lateral do gestor de ficheiros. + Gerir dados guardados + Dados não encontrados. Por favor seleciona uma opção abaixo. + Importa ou exporta dados guardados + Dados não encontrados. Por favor lança o jogo e tenta novamente. + Importado com sucesso + Estrutura de diretório de dados invalida + O nome da primeira sub pasta tem de ser a ID do jogo. + Importar + Exportar + + + Gaia não é real + Copiado para a área de transferência + Um emulador Switch de código aberto + Contribuidores + Feito com \u2764 da equipa do Yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Versão + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Acesso antecipado + Obtém Acesso Antecipado + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Recursos de ponta, acesso antecipado a atualizações e muito mais + Benefícios do Acesso Antecipado + Recursos de ponta + Acesso antecipado a atualizações + Sem instalação manual + Suporte prioritário + Ajuda na preservação dos jogos + A nossa eterna gratidão + Estás interessado? + + + Ativar limite de velocidade + Quando ativada, a velocidade da emulação será limitada à percentagem definida da velocidade normal. + Percentagem do limite de velocidade + Especifica o limite da percentagem da velocidade da emulação. Com a velocidade por defeito a 100% a emulação será limitada à velocidade normal. Valores maiores ou menores aumentarão ou diminuirão o limite de velocidade. + Precisão do CPU + + + Modo ancorado + Emula em modo ancorado, que aumenta a resolução ás custas da performance. + Região da emulação + Idioma da emulação + Seleciona a data RTC + Seleciona a hora RTC + Ativa RTC personalizado + Esta configuração permite definir um RTC personalizado diferente da hora atual do sistema + Define RTC personalizado + + + API + Nível de precisão + Resolução + Modo VSync + Proporção do ecrã + Filtro de Adaptação da Janela + Método de Anti-Aliasing + Força velocidade máxima (Adreno only) + Força o GPU a correr à velocidade máxima (restrições térmicas serão aplicadas) + Usa shaders assíncronos + Compila shaders assincronamente, que aumentará a fluidez, mas poderá causar falhas. + Ativar depuração de gráficos + Quando selecionado, a API gráfica entra num modo de depuração mais lento. + Usar cache do disk shader + Aumenta a fluidez ao guardar e carregar shaders gerados para o armazenamento. + + + Volume + Especifica o volume de saída. + + + Padrão + Configurações guardadas + Configurações guardadas para %1$s + Erro ao guardar %1$s.ini: %2$s + A carregar... + Queres reverter esta definição para os valores padrão? + Reverter para padrão + Redefinir todas as configurações? + Todas as configurações avançadas serão redefinidas para as definições padrão. Isto não pode ser revertido. + Redefinir configurações + Fechar + Saber Mais + + + Seleciona a driver para o GPU + Queres substituir o driver do GPU atual? + Instalar + Padrão + Instalado%s + Usar o driver padrão do GPU + Driver selecionado inválido, a usar o padrão do sistema! + Driver do GPU padrão + A instalar o Driver... + + + Configurações avançadas + Configurações + Geral + Sistema + Gráficos + Audio + Cor e tema. + + + A tua ROM está encriptada + Cartidges de Jogo or Jogos Instalados.]]> + prod.keys está instalado para que os jogos possam ser desencriptados.]]> + Ocorreu um erro ao iniciar o núcleo de vídeo. + Isto é normalmente causado por um driver de GPU incompatível. Instalar um driver GPU pode resolver este problema. + Impossível carregar a tua ROM + O ficheiro da ROM não existe + + + Sair da emulação + Feito + Contador de FPS + Alterar Controlos + Centro do Analógico Relativo + Deslizar do DPad + Hápticos + Mostrar sobreposição + Alterar todos + Ajustar a sobreposição + Escala + Opacidade + Redefinir Sobreposição + Editar sobreposição + Pausa emulação + Retomar emulação + Opções de sobreposição + Jogo a carregar... + + Configurações a carregar... + + + Teclado de Software + + + Abortar + Continuar + Arquivo do Sistema Não Encontrado + %s está em falta. Por favor apaga os teus ficheiros de sistema.\nContinuar a emulação pode causar erros. + Um arquivo do sistema + Erro Guardar/Carregar + Erro fatal + Ocorreu um erro fatal. Verifica o teu registro para detalhes. \nContinuar a emulação pode causar erros. + Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada. + + + Autosseleção + Japão + EUA + Europa + Austrália + China + Coreia + Taiwan + + + Japonês (日本語) + Inglês + Francês (Français) + Alemão (Deutsch) + Italiano (Italiano) + Espanhol (Español) + Chinês simplificado (简体中文) + Coreano (한국어) + Holandês (Nederlands) + Português (Português) + Russo (Русский) + Taiwanês (台湾) + Inglês Britânico + Fracês Canadiano (Français canadien) + Espanhol da América Latina (Español latino-americano) + Chinês Simplificado (简体中文) + Chinês Tradicional (正 體 中文) + Português do Brasil (Português do Brasil) + + + Vulcano + Nenhum + + + Normal + Alto + Estremo (Lento) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Lento) + 3X (2160p/3240p) (Lento) + 4X (2880p/4320p) (Lento) + + + Imediato (Desligado) + Caixa de entrada + FIFO (Ligado) + FIFO Relaxado + + + Vizinho mais próximo + Bilinear + Bicúbico + Gaussiano + ScaleForce + AMD FidelityFX™ Super Resolution + + + Nenhum + FXAA + SMAA + + + Padrão (16:9) + Forçar 4:3 + Forçar 21:9 + Forçar 16:10 + Esticar à Janela + + + Automático + Preciso + Inseguro + Paranoid (Lento) + + + D-Pad + Analógico Esquerdo + Analógico Direito + Home + Captura de ecrã + + + A preparar shaders + A criar shaders + + + Muda o Tema da App + Padrão + Material You + + + Altera o Modo do Tema + Igual ao Sistema + Claro + Escuro + + + Usa Fundos Escuros + Quando usar tema escuro, aplicar fundos escuros + + diff --git a/src/android/app/src/main/res/values-ru/strings.xml b/src/android/app/src/main/res/values-ru/strings.xml new file mode 100755 index 000000000..1401cf6a0 --- /dev/null +++ b/src/android/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,345 @@ + + + + Это программное обеспечение позволяет запускать игры для игровой консоли Nintendo Switch. Мы не предоставляем сами игры или ключи.<br /><br />Перед началом работы найдите файл prod.keys ]]> в хранилище устройства..<br /><br />Узнать больше]]> + Эмуляция активна + Показывает постоянное уведомление, когда запущена эмуляция. + yuzu запущен + Уведомления и ошибки + Показывать уведомления, когда что-то пошло не так + Вы не предоставили разрешение уведомлений! + + + Добро пожаловать! + Узнайте, как настроить <b>yuzu</b> и перейти прямиком к эмуляции. + Начать + Ключи + Выберите ваш файл <b>prod.keys</b> с помощью кнопки ниже. + Выбрать ключи + Игры + Выберите вашу папку с <b>играми</b> с помощью кнопки ниже. + Готово + Все готово.\nМожно играть! + Продолжить + Далее + Назад + Добавить игры + Выберите папку с играми + + + Игры + Поиск + Настройки + Не найдены файлы или еще не выбрана папка с играми. + Поиск и фильтрация игр + Выберите папку с играми + Позволяет yuzu заполнить список игр + Пропустить выбор папки с играми? + Игры не будут отображаться в списке Игры, если папка не выбрана. + https://yuzu-emu.org/help/quickstart/#dumping-games + Найти игры + Выбрана папка с играми + Установить prod.keys + Требуется для расшифровки розничных игр + Пропустить добавление ключей? + Для эмуляции розничных игр требуются действительные ключи. Если вы продолжите, будут работать только homebrew приложения. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Уведомления + Предоставьте разрешение уведомлений с помощью кнопки ниже. + Предоставить разрешение + Пропустить предоставление разрешения уведомлений? + yuzu не сможет уведомлять вас о важной информации. + Разрешение отказано + Вы слишком часто отклоняли это разрешение, и теперь вам нужно будет вручную предоставить его в настройках системы. + О нас + Версия сборки, титры и другое + Помощь + Пропустить + Отмена + Установить ключи Amiibo + Необходимо для использования Amiibo в играх + Выбран неверный файл ключей + Ключи успешно установлены + Ошибка при чтении ключей шифрования + + 1. Убедитесь, что ваши ключи имеют расширение .keys\n\n + 2. Ключи не должны находиться в папке Downloads.\n\n + Исправьте проблему(-ы) и повторите попытку. + + Неверные ключи шифрования + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + Выбранный файл неверен или поврежден. Пожалуйста, пере-дампите ваши ключи. + Установить драйвер ГП + Установите альтернативные драйверы для потенциально лучшей производительности и/или точности + Расширенные настройки + Настройка параметров эмулятора + Недавно сыграно + Недавно добавлено + Розничные + Homebrew + Открыть папку yuzu + Управление внутренними файлами yuzu + Изменение внешнего вида приложения + Не найден файловый менеджер + Не удалось открыть папку yuzu + Пожалуйста, найдите папку пользователя с помощью боковой панели файлового менеджера вручную. + Управление данными сохранений + Найдено данные сохранений. Пожалуйста, выберите вариант ниже. + Импорт или экспорт файлов сохранения + Данные сохранений не найдены. Пожалуйста, запустите игру и повторите попытку. + Успешно импортировано + Недопустимая структура папки сохранения + Название первой вложенной папки должно быть идентификатором игры. + Импорт + Экспорт + + + Gaia не существует + Скопировано в буфер обмена + Эмулятор Switch с открытым исходным кодом + Контрибьюторы + Сделано с \u2764 от команды yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Сборка + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Ранний доступ + Получить ранний доступ + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Новейшие возможности, ранний доступ к обновлениям и другое + Преимущества раннего доступа + Новейшие возможности + Ранний доступ к обновлениям + Без ручной установки + Приоритетная поддержка + Помощь в презервации игр + Наша бесконечная благодарность + Вы заинтересованы? + + + Включить ограничение скорости + Если эта функция включена, скорость эмуляции будет ограничена указанным процентом от нормальной скорости. + Ограничение процента cкорости + Указывает процент для ограничения скорости эмуляции. При значении по умолчанию 100% эмуляция будет ограничена нормальной скоростью. Значения выше или ниже будут увеличивать или уменьшать ограничение скорости. + Точность ЦП + + + Режим док-станции + Эмуляция режима док-станции, что увеличивает разрешение за счет снижения производительности. + Эмулируемый регион + Эмулируемый язык + Выберите дату RTC + Выберите время RTC + Включить пользовательский RTC + Этот параметр позволяет установить пользовательские часы реального времени отдельно от текущего системного времени + Установить пользовательский RTC + + + API + Уровень точности + Разрешение + Режим верт. синхронизации + Соотношение сторон + Фильтр адаптации окна + Метод сглаживания + Принудительно заставить максимальную тактовую частоту (только для Adreno) + Заставляет ГП работать на максимально возможных тактовых частотах (тепловые ограничения все равно будут применяться). + Использовать асинхронные шейдеры + Компилирует шейдеры асинхронно, что уменьшает зависания, но может взамен предоставить визуальные баги. + Включить отладку графики + Если включено, графический API переходит в более медленный режим отладки + Использовать кэш шейдеров на диске + Уменьшение зависаний за счет хранения и загрузки сгенерированных шейдеров на хранилище. + + + Громкость + Задает громкость аудиовыхода. + + + По умолчанию + Сохраненные настройки + Настройки сохранены для %1$s + Ошибка сохранения %1$s.ini: %2$s + Загрузка... + Хотите ли вы вернуть этот параметр к значению по умолчанию? + Сброс к настройкам по умолчанию + Сбросить все настройки? + Все дополнительные настройки будут сброшены к настройке по умолчанию. Это невозможно отменить. + Настройки сброшены + Закрыть + Узнать больше + + + Выбрать драйвер ГП + Хотите заменить текущий драйвер ГП? + Установить + По умолчанию + Установлено %s + Используется стандартный драйвер ГП + Выбран неверный драйвер, используется стандартный системный! + Системный драйвер ГП + Установка драйвера... + + + Расширенные настройки + Настройки + Общие + Система + Графика + Аудио + Тема и цвет + + + Ваш ROM зашифрованный + игровые картриджи или установленные игры.]]> + prod.keys установлен, чтобы игры можно было расшифровать.]]> + Произошла ошибка при инициализации видеоядра. + Обычно это вызвано несовместимым драйвером ГП. Установка пользовательского драйвера ГП может решить эту проблему. + Не удалось запустить ROM + Файл ROM не существует + + + Выход из эмуляции + Готово + Счётчик FPS + Переключение управления + Относительный центр стика + Слайд крестовиной + Тактильная обратная связь + Показать оверлей + Переключить всё + Настроить оверлей + Масштаб + Непрозрачность + Сбросить оверлей + Изменить оверлей + Пауза эмуляции + Возобновление эмуляции + Настройки оверлея + Загрузка игры... + + Загрузка настроек... + + + Виртуальная клавиатура + + + Прервать + Продолжить + Системный архив не найден + %s отсутствует. Пожалуйста, сдампите ваши системные архивы.\nПродолжение эмуляции может привести к сбоям и ошибкам. + Системный архив + Ошибка сохранения/загрузки + Фатальная ошибка + Произошла фатальная ошибка. Проверьте журнал для получения подробной информации.\nПродолжение эмуляции может привести к сбоям и ошибкам. + Отключение этой настройки значительно снизит производительность эмуляции! Для достижения наилучших результатов рекомендуется оставить эту настройку включенной. + + + Авто-выбор + Япония + США + Европа + Австралия + Китай + Корея + Тайвань + + + Японский (日本語) + Английский (English) + Французский (Français) + Немецкий (Deutsch) + Итальянский (Italiano) + Испанский (Español) + Китайский (简体中文) + Корейский (한국어) + Голландский (Nederlands) + Португальский (Português) + Русский + Тайваньский (台湾) + Британский английский + Канадский французский (Français canadien) + Латиноамериканский испанский (Español latinoamericano) + Упрощенный китайский (简体中文) + Традиционный китайский (正體中文) + Бразильский португальский (Português do Brasil) + + + Vulkan + Никакой + + + Нормальная + Высокая + Экстрим (медленный) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Медленно) + 3X (2160p/3240p) (Медленно) + 4X (2880p/4320p) (Медленно) + + + Моментальная (выключена) + Mailbox + FIFO (Включена) + FIFO Relaxed + + + Ближайший сосед + Билинейный + Бикубический + Гаусс + ScaleForce + AMD FidelityFX™️ Super Resolution + + + Выкл. + FXAA + SMAA + + + Стандартное (16:9) + Заставить 4:3 + Заставить 21:9 + Заставить 16:10 + Растянуть до окна + + + Авто + Точно + Небезопасно + Параноик (медленно) + + + Крестовина + Левый мини-джойстик + Правый мини-джойстик + Home + Скриншот + + + Подготовка шейдеров + Постройка шейдеров + + + Изменить тему приложения + По умолчанию + Material You + + + Изменить режим темы + Системная + Светлая + Темная + + + Использовать черный фон + При использовании темной темы применяйте черный фон. + + diff --git a/src/android/app/src/main/res/values-uk/strings.xml b/src/android/app/src/main/res/values-uk/strings.xml new file mode 100755 index 000000000..86d9c84f0 --- /dev/null +++ b/src/android/app/src/main/res/values-uk/strings.xml @@ -0,0 +1,345 @@ + + + + Це програмне забезпечення дозволяє запускати ігри для ігрової консолі Nintendo Switch. Ми не надаємо самі ігри або ключі.<br /><br />Перед початком роботи знайдіть ваш файл prod.keys ]]> у сховищі пристрою.<br /><br />Дізнатися більше]]> + Емуляція активна + Показує постійне сповіщення, коли запущено емуляцію. + yuzu запущено + Сповіщення та помилки + Показувати сповіщення, коли щось пішло не так + Ви не надали дозвіл сповіщень! + + + Вітаємо! + Дізнайтеся, як налаштувати <b>yuzu</b> та перейти до емуляції. + Розпочати + Ключі + Виберіть ваш файл <b>prod.keys</b> за допомогою кнопки нижче. + Вибрати ключі + Ігри + Виберіть вашу папку з <b>іграми</b> за допомогою кнопки нижче. + Готово + Все готово.\nМожна грати! + Продовжити + Далі + Назад + Додати ігри + Виберіть папку з іграми + + + Ігри + Пошук + Налаштування + Не знайдено файлів або ще не вибрано папку з іграми. + Пошук та фільтрація ігор + Виберіть папку з іграми + Дозволяє yuzu заповнити список ігор + Пропустити вибір папки з іграми? + Ігри не відображатимуться у списку Ігри, якщо папку не вибрано. + https://yuzu-emu.org/help/quickstart/#dumping-games + Знайти ігри + Вибрано папку з іграми + Встановити prod.keys + Потрібно для розшифровки роздрібних ігор + Пропустити додавання ключів? + Для емуляції роздрібних ігор потрібні дійсні ключі. Якщо ви продовжите, працюватимуть тільки homebrew додатки. + https://yuzu-emu.org/help/quickstart/#guide-introduction + Сповіщення + Надайте дозвіл сповіщень за допомогою кнопки нижче. + Надати дозвіл + Пропустити надання дозволу сповіщень? + yuzu не зможе повідомляти вас про важливу інформацію. + У дозволі відмовлено + Ви занадто часто відхиляли цей дозвіл, тож тепер вам потрібно буде вручну надати його в системних налаштуваннях. + Про нас + Версія збірки, титри та інше + Допомога + Пропустити + Відміна + Встановити ключі Amiibo + Необхідно для використання Amiibo в іграх + Вибрано неправильний файл ключів + Ключі успішно встановлено + Помилка під час зчитування ключів шифрування + + 1. Переконайтеся, що ваші ключі мають розширення .keys\n\n + 2. Ключі не повинні знаходитися в папці Downloads.\n\n + Виправте проблему(-и) та спробуйте ще раз. + + Невірні ключі шифрування + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + Обраний файл невірний або пошкоджений. Будь ласка, пере-дампіть ваші ключі. + Встановити драйвер ГП + Встановіть альтернативні драйвери для потенційно кращої продуктивності та/або точності + Розширені налаштування + Налаштування параметрів емулятора + Нещодавно зіграно + Нещодавно додано + Роздрібні + Homebrew + Відкрити папку yuzu + Керування внутрішніми файлами yuzu + Змінити зовнішній вигляд застосунку + Не знайдено файлового менеджера + Не вдалося відкрити папку yuzu + Будь ласка, знайдіть папку користувача за допомогою бічної панелі файлового менеджера вручну. + Керування даними збережень + Знайдено дані збережень. Будь ласка, виберіть варіант нижче. + Імпорт або експорт файлів збереження + Дані збережень не знайдено. Будь ласка, запустіть гру та повторіть спробу. + Успішно імпортовано + Неприпустима структура папки збереження + Назва першої вкладеної папки має бути ідентифікатором гри. + Імпорт + Експорт + + + Gaia не існує + Скопійовано в буфер обміну + Емулятор Switch із відкритим першокодом + Вкладники + Зроблено з \u2764 від команди yuzu + https://github.com/yuzu-emu/yuzu/graphs/contributors + Збірка + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + Ранній доступ + Отримати ранній доступ + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + Новітні можливості, ранній доступ до оновлень та інше + Переваги раннього доступу + Новітні можливості + Ранній доступ до оновлень + Без ручного встановлення + Пріоритетна підтримка + Допомога в презервації ігор + Наша нескінченна вдячність + Ви зацікавлені? + + + Увімкнути обмеження швидкості + Якщо цю функцію ввімкнено, швидкість емуляції буде обмежена зазначеним відсотком від нормальної швидкості. + Обмеження відсотка швидкості + Вказує відсоток для обмеження швидкості емуляції. При значенні за замовчуванням 100% емуляція буде обмежена нормальною швидкістю. Значення вище або нижче збільшуватимуть або зменшуватимуть обмеження швидкості. + Точність ЦП + + + Режим док-станції + Емуляція режиму док-станції, що збільшує роздільну здатність за рахунок зниження продуктивності. + Емульований регіон + Емульована мова + Оберіть дату RTC + Оберіть час RTC + Увімкнути користувацький RTC + Цей параметр дає змогу встановити користувацький годинник реального часу окремо від поточного системного часу + Встановити користувацький RTC + + + API + Рівень точності + Роздільна здатність + Режим верт. синхронізації + Співвідношення сторін + Фільтр адаптації вікна + Метод згладжування + Примусово змусити максимальну тактову частоту (тільки для Adreno) + Змушує ГП працювати на максимально можливих тактових частотах (теплові обмеження все одно будуть застосовуватися). + Використовувати асинхронні шейдери + Компілює шейдери асинхронно, що зменшує зависання, але може натомість надати візуальні баги. + Увімкнути налагодження графіки + Якщо увімкнено, графічний API переходить у повільніший режим налагодження + Використовувати кеш шейдерів на диску + Зменшення зависань завдяки зберіганню та завантаженню згенерованих шейдерів на сховище. + + + Гучність + Вказує гучність аудіовиходу. + + + За замовчуванням + Збережені налаштування + Налаштування збережені для %1$s + Помилка збереження %1$s.ini: %2$s + Завантаження... + Чи хочете ви повернути цей параметр до значення за замовчуванням? + Скидання до налаштувань за замовчуванням + Скинути всі налаштування + Усі додаткові налаштування буде скинуто до налаштування за замовчуванням. Це неможливо скасувати. + Налаштування скинуто + Закрити + Дізнатися більше + + + Вибрати драйвер ГП + Хочете замінити поточний драйвер ГП? + Встановити + За замовчуванням + Встановлено %s + Використовується стандартний драйвер ГП + Обрано неправильний драйвер, використовується стандартний системний! + Системний драйвер ГП + Встановлення драйвера... + + + Розширені налаштування + Налаштування + Загальні + Система + Графіка + Аудіо + Тема і колір + + + Ваш ROM зашифрований + ігрові картриджі або встановлені ігри.]]> + prod.keys встановлено, щоб ігри можна було розшифрувати.]]> + Сталася помилка під час ініціалізації відеоядра. + Зазвичай це спричинено несумісним драйвером ГП. Встановлення користувацького драйвера ГП може вирішити цю проблему. + Не вдалося запустити ROM + Файл ROM не існує + + + Вихід з емуляції + Готово + Лічильник FPS + Перемикання керування + Відносний центр стіка + Слайд хрестовиною + Тактильний зворотний зв\'язок + Показати оверлей + Перемкнути все + Налаштувати оверлей + Масштаб + Непрозорість + Скинути оверлей + Змінити оверлей + Пауза емуляції + Відновлення емуляції + Налаштування оверлея + Завантаження гри... + + Завантаження налаштувань... + + + Віртуальна клавіатура + + + Перервати + Продовжити + Системний архів не знайдено + %s відсутній. Будь ласка, здампіть ваші системні архіви.\nПродовження емуляції може призвести до збоїв і помилок. + Системний архів + Помилка збереження/завантаження + Фатальна помилка + Сталася фатальна помилка. Перевірте журнал для отримання докладної інформації.\nПродовження емуляції може призвести до збоїв і помилок. + Вимкнення цього налаштування значно знизить продуктивність емуляції! Для досягнення найкращих результатів рекомендується залишити це налаштування увімкненим. + + + Авто-вибір + Японія + США + Європа + Австралія + Китай + Корея + Тайвань + + + Японська (日本語) + Англійська (English) + Французька (Français) + Німецька (Deutsch) + Італійська (Italiano) + Іспанська (Español) + Китайскька (简体中文) + Корейська (한국어) + Голландська (Nederlands) + Португальська (Português) + Російська (Русский) + Тайванська (台湾) + Британська англійська + Канадська французька (Français canadien) + Латиноамериканська іспанська (Español latinoamericano) + Спрощена китайська (简体中文) + Традиційна китайська (正體中文) + Бразильська португальська (Português do Brasil) + + + Vulkan + Вимкнено + + + Нормальна + Висока + Екстрим (повільно) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (Повільно) + 3X (2160p/3240p) (Повільно) + 4X (2880p/4320p) (Повільно) + + + Моментальна (вимкнена) + Mailbox + FIFO (ввімкнута) + FIFO Relaxed + + + Найближчий сусід + Білінійне + Бікубічне + Гауса + ScaleForce + AMD FidelityFX™ Super Resolution + + + Вимкнено + FXAA + SMAA + + + За замовчуванням (16:9) + Змусити 4:3 + Змусити 21:9 + Змусити 16:10 + Розтягнути до вікна + + + Авто + Точно + Небезпечно + Параноїк (повільно) + + + Кнопки напрямків + Лівий міні-джойстик + Правий міні-джойстик + Home + Знімок екрану + + + Підготовка шейдерів + Побудова шейдерів + + + Змінити тему застосунку + За замовчуванням + Material You + + + Змінити режим теми + Системна + Світла + Темна + + + Використовувати чорне тло + У разі використання темної теми застосовуйте чорне тло. + + diff --git a/src/android/app/src/main/res/values-zh-rCN/strings.xml b/src/android/app/src/main/res/values-zh-rCN/strings.xml new file mode 100755 index 000000000..034421c92 --- /dev/null +++ b/src/android/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,345 @@ + + + + 此软件可以运行 Nintendo Switch 游戏,但不包含任何游戏和密钥文件。<br /><br />在开始前,请找到放置于设备存储中的 prod.keys ]]> 文件。<br /><br />了解更多]]> + 正在进行模拟 + 在模拟运行时显示持久通知。 + yuzu 正在运行 + 通知及错误提醒 + 当发生错误时显示通知。 + 未授予通知权限! + + + 欢迎! + 了解如何设置 <b>yuzu</b> 并进行模拟。 + 开始 + 密钥文件 + 使用下方的按钮来选择你的 <b>prod.keys</b> 文件。 + 选择密钥文件 + 游戏 + 使用下方的按钮选择你的 <b>游戏</b> 文件夹。 + 完成 + 你完成了全部设置。\n玩的开心! + 继续 + 下一步 + 上一步 + 添加游戏 + 选择你的游戏文件夹 + + + 游戏 + 搜索 + 设置 + 找不到游戏,或者尚未选择游戏文件夹。 + 搜索游戏 + 选择游戏文件夹 + 允许 yuzu 填充游戏列表 + 跳过选择游戏文件夹? + 如果未选择游戏文件夹,游戏将不会显示在游戏列表中。 + https://yuzu-emu.org/help/quickstart/#dumping-games + 搜索游戏 + 已选择游戏文件夹 + 安装 prod.keys 文件 + 需要密钥文件来解密游戏 + 跳过添加密钥文件? + 对于商业游戏,需要有效的密钥文件才能运行。如果没有密钥文件,将只能运行自制软件。 + https://yuzu-emu.org/help/quickstart/#guide-introduction + 通知 + 使用下方的按钮授予通知权限。 + 授予权限 + 跳过授予通知权限? + yuzu 将无法通知您重要信息。 + 授权遭拒 + 您曾多次拒绝权限请求,现在您需要在系统设置中手动授予权限。 + 关于 + 开发版本、贡献者、以及更多 + 帮助 + 跳过 + 取消 + 安装 Amiibo 密钥文件 + 在遊戏中使用 Amiibo 时必需 + 选择的密钥文件无效 + 密钥文件已成功安装 + 读取加密密钥时出错 + + 1. 验证您的密钥文件是否具有 .keys 扩展名。\n\n + 2. 密钥文件不能放置于 Downloads 文件夹。\n\n + 解决问题并再试一次。 + + 无效的加密密钥 + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + 选择的密钥文件不正确或已损坏。请重新转储密钥文件。 + 安装 GPU 驱动 + 安装替代的驱动程序以获得更好的性能和精度 + 高级选项 + 更改模拟器设置 + 最近游玩 + 最近添加 + 商业游戏 + 自制游戏 + 打开 yuzu 文件夹 + 管理 yuzu 内部文件 + 更改外观 + 找不到可用的文件管理器 + 无法打开 yuzu 文件夹 + 请使用文件管理器的侧部面板手动定位用户文件夹。 + 管理存档数据 + 已找到存档数据,请选择下方的选项。 + 导入或导出存档 + 找不到存档数据,请启动游戏并重试。 + 已成功导入存档 + 无效的存档目录 + 第一个子文件夹名称必须为当前游戏的 ID。 + 导入 + 导出 + + + Gaia 不真实 + 已复制到剪贴板 + 一款开放源代码的 Switch 模拟器 + 贡献者 + 使用来自 yuzu 团队的 \u2764 制作 + https://github.com/yuzu-emu/yuzu/graphs/contributors + 构建版本 + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + 抢先体验 + 取得抢先体验 + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + 最新的功能、抢先更新、以及更多 + 抢先体验的权益 + 最新功能 + 抢先更新 + 无需手动安装 + 优先支持 + 帮助保留游戏 + 我们真诚的感激 + 您对此感兴趣吗? + + + 启用运行速度限制 + 启用后,模拟速度将限制在正常运行速度的指定百分比。 + 限制速度百分比 + 指定限制模拟速度的百分比。预设为 100%,此时模拟速度将被限制为标准速度。更高或更低的值将增加或降低速度限制上限。 + CPU 精度 + + + 主机模式 + 以主机模式进行模拟,牺牲性能并提高画面分辨率。 + 模拟区域 + 模拟语言 + 选择日期 + 选择时间 + 启用自定义系统时钟 + 此选项允许您设置与目前系统时间相独立的自定义系统时钟 + 设置自定义系统时钟 + + + API + 精度等级 + 分辨率 + 垂直同步模式 + 屏幕纵横比 + 窗口滤镜 + 抗锯齿方式 + 强制最大时钟 (仅限 Adreno) + 强制 GPU 以最大时钟运行 (仍被温控限制)。 + 使用异步着色器 + 异步编译着色器,减少卡顿,但可能引入故障。 + 启用图形调试 + 启用时,图形 API 将进入较慢的调试模式。 + 使用磁盘着色器缓存 + 将生成的着色器缓存于磁盘中并进行读取以减少卡顿。 + + + 音量 + 指定输出的音量。 + + + 系统默认 + 已保存设置 + 已保存 %1$s 的设置 + 保存 %1$s.ini 时出错: %2$s + 加载中… + 您要将此设定重设为默认值吗? + 恢复默认 + 重置所有设置项? + 所有高级选项都将被重设,此动作无法还原。 + 重设设置项 + 关闭 + 了解更多 + + + 选择 GPU 驱动程序 + 要取代您当前的 GPU 驱动程序吗? + 安装 + 系统默认 + 已安装 %s + 使用默认 GPU 驱动程序 + 选择的驱动程序无效,将使用系统默认的驱动程序! + 系统 GPU 驱动程序 + 正在安装驱动程序… + + + 高级选项 + 设置 + 通用 + 系统 + 图形 + 声音 + 主题和色彩 + + + 您的 ROM 已加密 + 游戏卡带或已安装的游戏。]]> + prod.keys 文件已安装,使得游戏可以被解密。]]> + 初始化视频核心时发生错误 + 这通常由不兼容的 GPU 驱动程序造成,安装自定义 GPU 驱动程序可能解决此问题。 + 无法载入 ROM + ROM 文件不存在 + + + 退出模拟 + 完成 + FPS 计数器 + 按键切换 + 相对摇杆中心 + 十字方向键滑动 + 触觉反馈 + 显示虚拟按键 + 全部切换 + 调整虚拟按键 + 缩放 + 不透明度 + 重设虚拟按键 + 编辑虚拟按键 + 暂停模拟 + 继续模拟 + 虚拟按键选项 + 载入游戏中… + + 正在载入设定… + + + 软件键盘 + + + 中止 + 继续 + 未找到系统档案 + %s 丢失,请转储您的系统档案。\n继续模拟可能造成崩溃和错误。 + 系统档案 + 保存/载入发生错误 + 致命错误 + 发生致命错误,请查阅日志获取详细信息。\n继续模拟可能会造成崩溃和错误。 + 关闭此项会显著降低模拟性能!建议您将此项保持为启用状态。 + + + 自动选择 + 日本 + 美国 + 欧洲 + 澳大利亚 + 中国 + 韩国 + 中国台湾 + + + 日语 (日本語) + 英语 (English) + 法语 (Français) + 德语 (Deutsch) + 意大利语 (Italiano) + 西班牙语 (Español) + 中文 (简体中文) + 韩语 (한국어) + 荷兰语 (Nederlands) + 葡萄牙语 (Português) + 俄语 (Русский) + 台湾中文 (台灣) + 英式英语 + 加拿大法语 (Français canadien) + 拉丁美洲西班牙语 (Español latinoamericano) + 简体中文 (简体中文) + 繁体中文 (正體中文) + 巴西葡萄牙语 (Português do Brasil) + + + Vulkan + + + + 正常 + + 极高 (慢速) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (慢速) + 3X (2160p/3240p) (慢速) + 4X (2880p/4320p) (慢速) + + + 即时 (关闭) + Mailbox + FIFO (开启) + FIFO Relaxed + + + 近邻取样 + 双线性过滤 + 双三线过滤 + 高斯模糊 + 强制缩放 + AMD FidelityFX™️ 超级分辨率锐画技术 + + + + 快速近似抗锯齿 + 子像素形态学抗锯齿 + + + 默认 (16:9) + 强制 4:3 + 强制 21:9 + 强制 16:10 + 拉伸窗口 + + + 自动 + 高精度 + 低精度 + 偏执模式 (慢速) + + + 十字方向键 + 左摇杆 + 右摇杆 + Home + 截图 + + + 正在准备着色器 + 正在编译着色器 + + + 切换主题 + 系统默认 + Material You + + + 主题模式 + 跟随系统 + 浅色 + 深色 + + + 使用黑色背景 + 使用深色主题时,套用黑色背景。 + + diff --git a/src/android/app/src/main/res/values-zh-rTW/strings.xml b/src/android/app/src/main/res/values-zh-rTW/strings.xml new file mode 100755 index 000000000..85798cc6a --- /dev/null +++ b/src/android/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,345 @@ + + + + 此軟體可以執行 Nintendo Switch 主機遊戲,但不包含任何遊戲和金鑰。<br /><br />在您開始前,請找到放置於您的裝置儲存空間的 prod.keys ]]> 檔案。<br /><br />深入瞭解]]> + 模擬進行中 + 在模擬執行時顯示持續通知。 + yuzu 正在執行 + 通知和錯誤 + 發生錯誤時顯示通知。 + 未授予通知權限! + + + 歡迎! + 瞭解如何設定 <b>yuzu</b> 並進入模擬。 + 開始使用 + 金鑰 + 使用下方的按鈕選取您的 <b>prod.keys</b> 檔案。 + 選取金鑰 + 遊戲 + 使用下方的按鈕選取您的<b>遊戲</b>資料夾。 + 完成 + 您已準備就緒。\n盡情遊玩您的遊戲! + 繼續 + 下一步 + 上一步 + 新增遊戲 + 選取您的遊戲資料夾 + + + 遊戲 + 搜尋 + 設定 + 找不到檔案,或者尚未選取遊戲目錄。 + 搜尋並篩選遊戲 + 選取遊戲資料夾 + 一律允許 yuzu 填入遊戲清單 + 跳過選取遊戲資料夾? + 如果資料夾未選取,遊戲將不會顯示在遊戲清單。 + https://yuzu-emu.org/help/quickstart/#dumping-games + 搜尋遊戲 + 遊戲目錄已選取 + 安裝 prod.keys + 需要解密零售遊戲 + 跳過新增金鑰? + 模擬零售遊戲需要有效的金鑰,若要繼續,將僅有自製遊戲應用程式可以運作。 + https://yuzu-emu.org/help/quickstart/#guide-introduction + 通知 + 使用下方的按鈕授予通知權限。 + 授予權限 + 跳過授予通知權限? + yuzu 將無法通知您重要資訊。 + 權限遭拒 + 您曾多次拒絕了權限要求,現在您需要在系統設定中手動授予權限。 + 關於 + 組建版本、製作群、以及更多 + 說明 + 跳過 + 取消 + 安裝 Amiibo 金鑰 + 需要在遊戲中使用 Amiibo + 無效的金鑰檔案已選取 + 金鑰已成功安裝 + 讀取加密金鑰時出現錯誤 + + 1. 驗證您的金鑰是否具有 .keys 副檔名。\n\n + 2. 金鑰不能儲存於 Downloads 資料夾。\n\n + 解決問題並再試一次。 + + 無效的加密金鑰 + https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys + 選取的檔案不正確或已損毀,請重新傾印您的金鑰。 + 安裝 GPU 驅動程式 + 安裝替代驅動程式以取得潛在的更佳效能或準確度 + 進階設定 + 進行模擬器設定 + 最近遊玩 + 最近新增 + 零售 + 自製遊戲 + 開啟 yuzu 資料夾 + 管理 yuzu 的內部檔案 + 修改應用程式外觀 + 找不到檔案管理員 + 無法開啟 yuzu 目錄 + 請使用檔案管理員的側邊面板手動定位到使用者資料夾。 + 管理儲存資料 + 已找到儲存資料,請選取下方的選項。 + 匯入或匯出儲存檔案 + 找不到儲存資料,請啟動遊戲並重試。 + 已成功匯入 + 無效的儲存目錄結構 + 首個子資料夾名稱必須為遊戲標題 ID。 + 匯入 + 匯出 + + + Gaia 不真實 + 已複製到剪貼簿 + 一個開放原始碼的 Switch 模擬器 + 參與者 + 使用來自 yuzu 團隊的 \u2764 製作 + https://github.com/yuzu-emu/yuzu/graphs/contributors + 組建 + https://discord.gg/u77vRWY + https://yuzu-emu.org/ + https://github.com/yuzu-emu + + + 搶先體驗 + 搶先體驗新功能 + https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea + 最新的功能、搶先版更新、以及更多 + 搶先體驗權益 + 最新功能 + 搶先版更新 + 無需手動安裝 + 優先支援 + 協助遊戲保留 + 我們永遠的感激 + 您仍感興趣嗎? + + + 啟用限制速度 + 若啟用,模擬速度將會限制在標準速度的指定百分比。 + 限制速度百分比 + 指定限制模擬速度的百分比。預設為 100%,模擬速度將被限制為標準速度。更高或更低的值將會增加或減少速度限制。 + CPU 準確度 + + + 底座模式 + 以底座模式模擬,以犧牲效能的代價提高解析度。 + 模擬區域 + 模擬語言 + 選取 RTC 日期 + 選取 RTC 時間 + 啟用自訂 RTC + 此設定允許您設定與您的目前系統時間相互獨立的自訂即時時鐘 + 設定自訂 RTC + + + API + 準確度層級 + 解析度 + VSync 模式 + 長寬比 + 視窗適應過濾器 + 消除鋸齒方法 + 強制最大時脈 (僅 Adreno) + 強制 GPU 以最大可能時脈執行 (熱溫限制仍被套用)。 + 使用非同步著色器 + 非同步編譯著色器,將會減少間斷,但可能會引入故障。 + 啟用圖形偵錯 + 核取時,圖形 API 將會進入慢速偵錯模式。 + 使用磁碟著色器快取 + 透過將產生的著色器儲存並載入至磁碟,減少中斷。 + + + 音量 + 指定音訊輸出音量。 + + + 預設 + 已儲存設定 + 已儲存 %1$s 設定 + 儲存 %1$s 時發生錯誤 ini: %2$s + 正在載入… + 要將此設定重設回預設值嗎? + 重設為預設值 + 重設所有設定? + 所有進階設定將被重設為預設組態,此動作無法復原。 + 設定已重設 + 關閉 + 深入瞭解 + + + 選取 GPU 驅動程式 + 要取代您目前的 GPU 驅動程式嗎? + 安裝 + 預設 + 已安裝 %s + 使用預設 GPU 驅動程式 + 選取的驅動程式無效,將使用系統預設驅動程式! + 系統 GPU 驅動程式 + 正在安裝驅動程式… + + + 進階設定 + 設定 + 一般 + 系統 + 圖形 + 音訊 + 主題和色彩 + + + 您的 ROM 已加密 + 遊戲卡匣或安裝標題。]]> + prod.keys 檔案已安裝,讓遊戲可以解密。]]> + 初始化視訊核心時發生錯誤 + 這經常由不相容的 GPU 驅動程式造成,安裝自訂 GPU 驅動程式可能會解決此問題。 + 無法載入 ROM + ROM 檔案不存在 + + + 結束模擬 + 完成 + FPS 計數器 + 切換控制 + 相對搖桿中心 + 方向鍵滑動 + 觸覺回饋技術 + 顯示覆疊 + 全部切換 + 調整覆疊 + 縮放 + 不透明度 + 重設覆疊 + 編輯覆疊 + 暫停模擬 + 取消暫停模擬 + 覆疊選項 + 遊戲正在載入… + + 正在載入設定… + + + 軟體鍵盤 + + + 中止 + 繼續 + 找不到系統檔案 + %s 遺失,請傾印您的系統封存。\n繼續模擬可能會造成當機和錯誤。 + 系統封存 + 儲存/載入發生錯誤 + 嚴重錯誤 + 發生嚴重錯誤,檢查記錄以取得詳細資訊。\n繼續模擬可能會造成當機和錯誤。 + 關閉此設定會顯著降低模擬效能!如需最佳體驗,建議您將此設定保持為啟用狀態。 + + + 自動選取 + 日本 + 美國 + 歐洲 + 澳洲 + 中國 + 南韓 + 台灣 + + + 日文 (日本語) + 英文 + 法文 (Français) + 德文 (Deutsch) + 義大利文 (Italiano) + 西班牙文 (Español) + 中文 (简体中文) + 韓文 (한국어) + 荷蘭文 (Nederlands) + 葡萄牙文 (Português) + 俄文 (Русский) + 台文 (台灣) + 英式英文 + 加拿大法文 (Français canadien) + 拉丁美洲西班牙文 (Español latinoamericano) + 簡體中文 (简体中文) + 正體中文 (正體中文) + 巴西葡萄牙文 (Português do Brasil) + + + Vulkan + + + + 標準 + + 極高 (慢) + + + 0.5X (360p/540p) + 0.75X (540p/810p) + 1X (720p/1080p) + 2X (1440p/2160p) (慢) + 3X (2160p/3240p) (慢) + 4X (2880p/4320p) (慢) + + + 即時 (關閉) + 信箱 + FIFO (開啟) + FIFO 寬鬆 + + + 最近鄰 + 雙線性 + 雙立方 + 高斯 + 強制縮放 + AMD Radeon™ 超級解析度 + + + + FXAA + SMAA + + + 預設 (16:9) + 強制 4:3 + 強制 21:9 + 強制 16:10 + 延伸視窗 + + + 自動 + 高精度 + 低精度 + 不合理 (慢) + + + 方向鍵 + 左搖桿 + 右搖桿 + HOME + 螢幕截圖 + + + 正在準備著色器 + 正在建置著色器 + + + 變更應用程式主題 + 預設 + Material You + + + 變更主題模式 + 跟隨系統 + 淺色 + 深色 + + + 使用黑色背景 + 使用深色主題時,套用黑色背景。 + + diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 6e9d47557..7dae63dcb 100755 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -102,6 +102,15 @@ Share debug logs Share yuzu\'s log file to debug issues No log file found + Install game content + Install game updates or DLC + Error installing file to NAND + Game content installation failed. Please ensure content is valid and that the prod.keys file is installed. + Installation of base games isn\'t permitted in order to avoid possible conflicts. Please select an update or DLC instead. + The selected file type is not supported. Only NSP and XCI content is supported for this action. Please verify the game content is valid. + Game content installed successfully + Game content was overwritten successfully + https://yuzu-emu.org/help/quickstart/#dumping-installed-updates Gaia isn\'t real diff --git a/src/core/file_sys/submission_package.h b/src/core/file_sys/submission_package.h index 19e2a968a..4190edda2 100755 --- a/src/core/file_sys/submission_package.h +++ b/src/core/file_sys/submission_package.h @@ -8,6 +8,7 @@ #include #include #include "common/common_types.h" +#include "core/file_sys/nca_metadata.h" #include "core/file_sys/vfs.h" namespace Core::Crypto { diff --git a/src/core/file_sys/vfs_real.cpp b/src/core/file_sys/vfs_real.cpp index 140c1199a..2bc656ed0 100755 --- a/src/core/file_sys/vfs_real.cpp +++ b/src/core/file_sys/vfs_real.cpp @@ -25,6 +25,8 @@ namespace FS = Common::FS; namespace { +constexpr size_t MaxOpenFiles = 512; + constexpr FS::FileAccessMode ModeFlagsToFileAccessMode(Mode mode) { switch (mode) { case Mode::Read: @@ -73,24 +75,10 @@ VfsEntryType RealVfsFilesystem::GetEntryType(std::string_view path_) const { VirtualFile RealVfsFilesystem::OpenFile(std::string_view path_, Mode perms) { const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); - if (const auto weak_iter = cache.find(path); weak_iter != cache.cend()) { - const auto& weak = weak_iter->second; + auto reference = std::make_unique(); + this->InsertReferenceIntoList(*reference); - if (!weak.expired()) { - return std::shared_ptr(new RealVfsFile(*this, weak.lock(), path, perms)); - } - } - - auto backing = FS::FileOpen(path, ModeFlagsToFileAccessMode(perms), FS::FileType::BinaryFile); - - if (!backing) { - return nullptr; - } - - cache.insert_or_assign(path, std::move(backing)); - - // Cannot use make_shared as RealVfsFile constructor is private - return std::shared_ptr(new RealVfsFile(*this, backing, path, perms)); + return std::shared_ptr(new RealVfsFile(*this, std::move(reference), path, perms)); } VirtualFile RealVfsFilesystem::CreateFile(std::string_view path_, Mode perms) { @@ -123,51 +111,19 @@ VirtualFile RealVfsFilesystem::CopyFile(std::string_view old_path_, std::string_ VirtualFile RealVfsFilesystem::MoveFile(std::string_view old_path_, std::string_view new_path_) { const auto old_path = FS::SanitizePath(old_path_, FS::DirectorySeparator::PlatformDefault); const auto new_path = FS::SanitizePath(new_path_, FS::DirectorySeparator::PlatformDefault); - const auto cached_file_iter = cache.find(old_path); - - if (cached_file_iter != cache.cend()) { - auto file = cached_file_iter->second.lock(); - - if (!cached_file_iter->second.expired()) { - file->Close(); - } - - if (!FS::RenameFile(old_path, new_path)) { - return nullptr; - } - - cache.erase(old_path); - file->Open(new_path, FS::FileAccessMode::Read, FS::FileType::BinaryFile); - if (file->IsOpen()) { - cache.insert_or_assign(new_path, std::move(file)); - } else { - LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", new_path); - } - } else { - ASSERT(false); + if (!FS::RenameFile(old_path, new_path)) { return nullptr; } - return OpenFile(new_path, Mode::ReadWrite); } bool RealVfsFilesystem::DeleteFile(std::string_view path_) { const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); - const auto cached_iter = cache.find(path); - - if (cached_iter != cache.cend()) { - if (!cached_iter->second.expired()) { - cached_iter->second.lock()->Close(); - } - cache.erase(path); - } - return FS::RemoveFile(path); } VirtualDir RealVfsFilesystem::OpenDirectory(std::string_view path_, Mode perms) { const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); - // Cannot use make_shared as RealVfsDirectory constructor is private return std::shared_ptr(new RealVfsDirectory(*this, path, perms)); } @@ -176,7 +132,6 @@ VirtualDir RealVfsFilesystem::CreateDirectory(std::string_view path_, Mode perms if (!FS::CreateDirs(path)) { return nullptr; } - // Cannot use make_shared as RealVfsDirectory constructor is private return std::shared_ptr(new RealVfsDirectory(*this, path, perms)); } @@ -194,73 +149,102 @@ VirtualDir RealVfsFilesystem::MoveDirectory(std::string_view old_path_, if (!FS::RenameDir(old_path, new_path)) { return nullptr; } - - for (auto& kv : cache) { - // If the path in the cache doesn't start with old_path, then bail on this file. - if (kv.first.rfind(old_path, 0) != 0) { - continue; - } - - const auto file_old_path = - FS::SanitizePath(kv.first, FS::DirectorySeparator::PlatformDefault); - auto file_new_path = FS::SanitizePath(new_path + '/' + kv.first.substr(old_path.size()), - FS::DirectorySeparator::PlatformDefault); - const auto& cached = cache[file_old_path]; - - if (cached.expired()) { - continue; - } - - auto file = cached.lock(); - cache.erase(file_old_path); - file->Open(file_new_path, FS::FileAccessMode::Read, FS::FileType::BinaryFile); - if (file->IsOpen()) { - cache.insert_or_assign(std::move(file_new_path), std::move(file)); - } else { - LOG_ERROR(Service_FS, "Failed to open path {} in order to re-cache it", file_new_path); - } - } - return OpenDirectory(new_path, Mode::ReadWrite); } bool RealVfsFilesystem::DeleteDirectory(std::string_view path_) { const auto path = FS::SanitizePath(path_, FS::DirectorySeparator::PlatformDefault); - - for (auto& kv : cache) { - // If the path in the cache doesn't start with path, then bail on this file. - if (kv.first.rfind(path, 0) != 0) { - continue; - } - - const auto& entry = cache[kv.first]; - if (!entry.expired()) { - entry.lock()->Close(); - } - - cache.erase(kv.first); - } - return FS::RemoveDirRecursively(path); } -RealVfsFile::RealVfsFile(RealVfsFilesystem& base_, std::shared_ptr backing_, - const std::string& path_, Mode perms_) - : base(base_), backing(std::move(backing_)), path(path_), parent_path(FS::GetParentPath(path_)), - path_components(FS::SplitPathComponents(path_)), perms(perms_) {} +void RealVfsFilesystem::RefreshReference(const std::string& path, Mode perms, + FileReference& reference) { + // Temporarily remove from list. + this->RemoveReferenceFromList(reference); -RealVfsFile::~RealVfsFile() = default; + // Restore file if needed. + if (!reference.file) { + this->EvictSingleReference(); + + reference.file = + FS::FileOpen(path, ModeFlagsToFileAccessMode(perms), FS::FileType::BinaryFile); + if (reference.file) { + num_open_files++; + } + } + + // Reinsert into list. + this->InsertReferenceIntoList(reference); +} + +void RealVfsFilesystem::DropReference(std::unique_ptr&& reference) { + // Remove from list. + this->RemoveReferenceFromList(*reference); + + // Close the file. + if (reference->file) { + reference->file.reset(); + num_open_files--; + } +} + +void RealVfsFilesystem::EvictSingleReference() { + if (num_open_files < MaxOpenFiles || open_references.empty()) { + return; + } + + // Get and remove from list. + auto& reference = open_references.back(); + this->RemoveReferenceFromList(reference); + + // Close the file. + if (reference.file) { + reference.file.reset(); + num_open_files--; + } + + // Reinsert into closed list. + this->InsertReferenceIntoList(reference); +} + +void RealVfsFilesystem::InsertReferenceIntoList(FileReference& reference) { + if (reference.file) { + open_references.push_front(reference); + } else { + closed_references.push_front(reference); + } +} + +void RealVfsFilesystem::RemoveReferenceFromList(FileReference& reference) { + if (reference.file) { + open_references.erase(open_references.iterator_to(reference)); + } else { + closed_references.erase(closed_references.iterator_to(reference)); + } +} + +RealVfsFile::RealVfsFile(RealVfsFilesystem& base_, std::unique_ptr reference_, + const std::string& path_, Mode perms_) + : base(base_), reference(std::move(reference_)), path(path_), + parent_path(FS::GetParentPath(path_)), path_components(FS::SplitPathComponents(path_)), + perms(perms_) {} + +RealVfsFile::~RealVfsFile() { + base.DropReference(std::move(reference)); +} std::string RealVfsFile::GetName() const { return path_components.back(); } std::size_t RealVfsFile::GetSize() const { - return backing->GetSize(); + base.RefreshReference(path, perms, *reference); + return reference->file ? reference->file->GetSize() : 0; } bool RealVfsFile::Resize(std::size_t new_size) { - return backing->SetSize(new_size); + base.RefreshReference(path, perms, *reference); + return reference->file ? reference->file->SetSize(new_size) : false; } VirtualDir RealVfsFile::GetContainingDirectory() const { @@ -276,27 +260,25 @@ bool RealVfsFile::IsReadable() const { } std::size_t RealVfsFile::Read(u8* data, std::size_t length, std::size_t offset) const { - if (!backing->Seek(static_cast(offset))) { + base.RefreshReference(path, perms, *reference); + if (!reference->file || !reference->file->Seek(static_cast(offset))) { return 0; } - return backing->ReadSpan(std::span{data, length}); + return reference->file->ReadSpan(std::span{data, length}); } std::size_t RealVfsFile::Write(const u8* data, std::size_t length, std::size_t offset) { - if (!backing->Seek(static_cast(offset))) { + base.RefreshReference(path, perms, *reference); + if (!reference->file || !reference->file->Seek(static_cast(offset))) { return 0; } - return backing->WriteSpan(std::span{data, length}); + return reference->file->WriteSpan(std::span{data, length}); } bool RealVfsFile::Rename(std::string_view name) { return base.MoveFile(path, parent_path + '/' + std::string(name)) != nullptr; } -void RealVfsFile::Close() { - backing->Close(); -} - // TODO(DarkLordZach): MSVC would not let me combine the following two functions using 'if // constexpr' because there is a compile error in the branch not used. diff --git a/src/core/file_sys/vfs_real.h b/src/core/file_sys/vfs_real.h index ba29857df..4c2879fec 100755 --- a/src/core/file_sys/vfs_real.h +++ b/src/core/file_sys/vfs_real.h @@ -4,7 +4,7 @@ #pragma once #include -#include +#include "common/intrusive_list.h" #include "core/file_sys/mode.h" #include "core/file_sys/vfs.h" @@ -14,6 +14,11 @@ class IOFile; namespace FileSys { +struct FileReference : public Common::IntrusiveListBaseNode { + std::shared_ptr file{}; +}; + +class RealVfsFile; class RealVfsFilesystem : public VfsFilesystem { public: RealVfsFilesystem(); @@ -35,7 +40,20 @@ public: bool DeleteDirectory(std::string_view path) override; private: - boost::container::flat_map> cache; + using ReferenceListType = Common::IntrusiveListBaseTraits::ListType; + ReferenceListType open_references; + ReferenceListType closed_references; + size_t num_open_files{}; + +private: + friend class RealVfsFile; + void RefreshReference(const std::string& path, Mode perms, FileReference& reference); + void DropReference(std::unique_ptr&& reference); + void EvictSingleReference(); + +private: + void InsertReferenceIntoList(FileReference& reference); + void RemoveReferenceFromList(FileReference& reference); }; // An implementation of VfsFile that represents a file on the user's computer. @@ -57,13 +75,11 @@ public: bool Rename(std::string_view name) override; private: - RealVfsFile(RealVfsFilesystem& base, std::shared_ptr backing, + RealVfsFile(RealVfsFilesystem& base, std::unique_ptr reference, const std::string& path, Mode perms = Mode::Read); - void Close(); - RealVfsFilesystem& base; - std::shared_ptr backing; + std::unique_ptr reference; std::string path; std::string parent_path; std::vector path_components; diff --git a/src/core/hle/service/nfc/common/amiibo_crypto.cpp b/src/core/hle/service/nfc/common/amiibo_crypto.cpp index b2bcb68c3..bc232c334 100755 --- a/src/core/hle/service/nfc/common/amiibo_crypto.cpp +++ b/src/core/hle/service/nfc/common/amiibo_crypto.cpp @@ -36,12 +36,12 @@ bool IsAmiiboValid(const EncryptedNTAG215File& ntag_file) { // Validate UUID constexpr u8 CT = 0x88; // As defined in `ISO / IEC 14443 - 3` - if ((CT ^ ntag_file.uuid.uid[0] ^ ntag_file.uuid.uid[1] ^ ntag_file.uuid.uid[2]) != - ntag_file.uuid.uid[3]) { + if ((CT ^ ntag_file.uuid.part1[0] ^ ntag_file.uuid.part1[1] ^ ntag_file.uuid.part1[2]) != + ntag_file.uuid.crc_check1) { return false; } - if ((ntag_file.uuid.uid[4] ^ ntag_file.uuid.uid[5] ^ ntag_file.uuid.uid[6] ^ - ntag_file.uuid.nintendo_id) != ntag_file.uuid.lock_bytes[0]) { + if ((ntag_file.uuid.part2[0] ^ ntag_file.uuid.part2[1] ^ ntag_file.uuid.part2[2] ^ + ntag_file.uuid.nintendo_id) != ntag_file.uuid_crc_check2) { return false; } @@ -74,8 +74,9 @@ bool IsAmiiboValid(const NTAG215File& ntag_file) { NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data) { NTAG215File encoded_data{}; - encoded_data.uid = nfc_data.uuid.uid; - encoded_data.nintendo_id = nfc_data.uuid.nintendo_id; + encoded_data.uid = nfc_data.uuid; + encoded_data.uid_crc_check2 = nfc_data.uuid_crc_check2; + encoded_data.internal_number = nfc_data.internal_number; encoded_data.static_lock = nfc_data.static_lock; encoded_data.compability_container = nfc_data.compability_container; encoded_data.hmac_data = nfc_data.user_memory.hmac_data; @@ -94,7 +95,6 @@ NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data) { encoded_data.register_info_crc = nfc_data.user_memory.register_info_crc; encoded_data.application_area = nfc_data.user_memory.application_area; encoded_data.hmac_tag = nfc_data.user_memory.hmac_tag; - encoded_data.lock_bytes = nfc_data.uuid.lock_bytes; encoded_data.model_info = nfc_data.user_memory.model_info; encoded_data.keygen_salt = nfc_data.user_memory.keygen_salt; encoded_data.dynamic_lock = nfc_data.dynamic_lock; @@ -108,9 +108,9 @@ NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data) { EncryptedNTAG215File EncodedDataToNfcData(const NTAG215File& encoded_data) { EncryptedNTAG215File nfc_data{}; - nfc_data.uuid.uid = encoded_data.uid; - nfc_data.uuid.nintendo_id = encoded_data.nintendo_id; - nfc_data.uuid.lock_bytes = encoded_data.lock_bytes; + nfc_data.uuid = encoded_data.uid; + nfc_data.uuid_crc_check2 = encoded_data.uid_crc_check2; + nfc_data.internal_number = encoded_data.internal_number; nfc_data.static_lock = encoded_data.static_lock; nfc_data.compability_container = encoded_data.compability_container; nfc_data.user_memory.hmac_data = encoded_data.hmac_data; @@ -139,23 +139,12 @@ EncryptedNTAG215File EncodedDataToNfcData(const NTAG215File& encoded_data) { return nfc_data; } -u32 GetTagPassword(const TagUuid& uuid) { - // Verify that the generated password is correct - u32 password = 0xAA ^ (uuid.uid[1] ^ uuid.uid[3]); - password &= (0x55 ^ (uuid.uid[2] ^ uuid.uid[4])) << 8; - password &= (0xAA ^ (uuid.uid[3] ^ uuid.uid[5])) << 16; - password &= (0x55 ^ (uuid.uid[4] ^ uuid.uid[6])) << 24; - return password; -} - HashSeed GetSeed(const NTAG215File& data) { HashSeed seed{ .magic = data.write_counter, .padding = {}, .uid_1 = data.uid, - .nintendo_id_1 = data.nintendo_id, .uid_2 = data.uid, - .nintendo_id_2 = data.nintendo_id, .keygen_salt = data.keygen_salt, }; @@ -177,10 +166,11 @@ std::vector GenerateInternalKey(const InternalKey& key, const HashSeed& seed output.insert(output.end(), key.magic_bytes.begin(), key.magic_bytes.begin() + key.magic_length); - output.insert(output.end(), seed.uid_1.begin(), seed.uid_1.end()); - output.emplace_back(seed.nintendo_id_1); - output.insert(output.end(), seed.uid_2.begin(), seed.uid_2.end()); - output.emplace_back(seed.nintendo_id_2); + std::array seed_uuid{}; + memcpy(seed_uuid.data(), &seed.uid_1, sizeof(NFP::TagUuid)); + output.insert(output.end(), seed_uuid.begin(), seed_uuid.end()); + memcpy(seed_uuid.data(), &seed.uid_2, sizeof(NFP::TagUuid)); + output.insert(output.end(), seed_uuid.begin(), seed_uuid.end()); for (std::size_t i = 0; i < sizeof(seed.keygen_salt); i++) { output.emplace_back(static_cast(seed.keygen_salt[i] ^ key.xor_pad[i])); @@ -264,8 +254,8 @@ void Cipher(const DerivedKeys& keys, const NTAG215File& in_data, NTAG215File& ou // Copy the rest of the data directly out_data.uid = in_data.uid; - out_data.nintendo_id = in_data.nintendo_id; - out_data.lock_bytes = in_data.lock_bytes; + out_data.uid_crc_check2 = in_data.uid_crc_check2; + out_data.internal_number = in_data.internal_number; out_data.static_lock = in_data.static_lock; out_data.compability_container = in_data.compability_container; diff --git a/src/core/hle/service/nfc/common/amiibo_crypto.h b/src/core/hle/service/nfc/common/amiibo_crypto.h index bf3044ed9..6a3e0841e 100755 --- a/src/core/hle/service/nfc/common/amiibo_crypto.h +++ b/src/core/hle/service/nfc/common/amiibo_crypto.h @@ -24,10 +24,8 @@ using DrgbOutput = std::array; struct HashSeed { u16_be magic; std::array padding; - NFC::UniqueSerialNumber uid_1; - u8 nintendo_id_1; - NFC::UniqueSerialNumber uid_2; - u8 nintendo_id_2; + TagUuid uid_1; + TagUuid uid_2; std::array keygen_salt; }; static_assert(sizeof(HashSeed) == 0x40, "HashSeed is an invalid size"); @@ -69,9 +67,6 @@ NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data); /// Converts from encoded file format to encrypted file format EncryptedNTAG215File EncodedDataToNfcData(const NTAG215File& encoded_data); -/// Returns password needed to allow write access to protected memory -u32 GetTagPassword(const TagUuid& uuid); - // Generates Seed needed for key derivation HashSeed GetSeed(const NTAG215File& data); diff --git a/src/core/hle/service/nfc/common/device.cpp b/src/core/hle/service/nfc/common/device.cpp index b14f682b5..f4b180b06 100755 --- a/src/core/hle/service/nfc/common/device.cpp +++ b/src/core/hle/service/nfc/common/device.cpp @@ -242,34 +242,39 @@ Result NfcDevice::GetTagInfo(NFP::TagInfo& tag_info, bool is_mifare) const { return ResultWrongDeviceState; } - UniqueSerialNumber uuid = encrypted_tag_data.uuid.uid; - - // Generate random UUID to bypass amiibo load limits - if (Settings::values.random_amiibo_id) { - Common::TinyMT rng{}; - rng.Initialize(static_cast(GetCurrentPosixTime())); - rng.GenerateRandomBytes(uuid.data(), sizeof(UniqueSerialNumber)); - uuid[3] = 0x88 ^ uuid[0] ^ uuid[1] ^ uuid[2]; - } + UniqueSerialNumber uuid{}; + u8 uuid_length{}; + NfcProtocol protocol{NfcProtocol::TypeA}; + TagType tag_type{TagType::Type2}; if (is_mifare) { - tag_info = { - .uuid = uuid, - .uuid_extension = {}, - .uuid_length = static_cast(uuid.size()), - .protocol = NfcProtocol::TypeA, - .tag_type = TagType::Type4, + tag_type = TagType::Mifare; + uuid_length = sizeof(NFP::NtagTagUuid); + memcpy(uuid.data(), mifare_data.data(), uuid_length); + } else { + tag_type = TagType::Type2; + uuid_length = sizeof(NFP::NtagTagUuid); + NFP::NtagTagUuid nUuid{ + .part1 = encrypted_tag_data.uuid.part1, + .part2 = encrypted_tag_data.uuid.part2, + .nintendo_id = encrypted_tag_data.uuid.nintendo_id, }; - return ResultSuccess; + memcpy(uuid.data(), &nUuid, uuid_length); + + // Generate random UUID to bypass amiibo load limits + if (Settings::values.random_amiibo_id) { + Common::TinyMT rng{}; + rng.Initialize(static_cast(GetCurrentPosixTime())); + rng.GenerateRandomBytes(uuid.data(), uuid_length); + } } // Protocol and tag type may change here tag_info = { .uuid = uuid, - .uuid_extension = {}, - .uuid_length = static_cast(uuid.size()), - .protocol = NfcProtocol::TypeA, - .tag_type = TagType::Type2, + .uuid_length = uuid_length, + .protocol = protocol, + .tag_type = tag_type, }; return ResultSuccess; @@ -277,8 +282,38 @@ Result NfcDevice::GetTagInfo(NFP::TagInfo& tag_info, bool is_mifare) const { Result NfcDevice::ReadMifare(std::span parameters, std::span read_block_data) const { + if (device_state != DeviceState::TagFound && device_state != DeviceState::TagMounted) { + LOG_ERROR(Service_NFC, "Wrong device state {}", device_state); + if (device_state == DeviceState::TagRemoved) { + return ResultTagRemoved; + } + return ResultWrongDeviceState; + } + Result result = ResultSuccess; + TagInfo tag_info{}; + result = GetTagInfo(tag_info, true); + + if (result.IsError()) { + return result; + } + + if (tag_info.protocol != NfcProtocol::TypeA || tag_info.tag_type != TagType::Mifare) { + return ResultInvalidTagType; + } + + if (parameters.size() == 0) { + return ResultInvalidArgument; + } + + const auto unknown = parameters[0].sector_key.unknown; + for (std::size_t i = 0; i < parameters.size(); i++) { + if (unknown != parameters[i].sector_key.unknown) { + return ResultInvalidArgument; + } + } + for (std::size_t i = 0; i < parameters.size(); i++) { result = ReadMifare(parameters[i], read_block_data[i]); if (result.IsError()) { @@ -293,17 +328,8 @@ Result NfcDevice::ReadMifare(const MifareReadBlockParameter& parameter, MifareReadBlockData& read_block_data) const { const std::size_t sector_index = parameter.sector_number * sizeof(DataBlock); read_block_data.sector_number = parameter.sector_number; - - if (device_state != DeviceState::TagFound && device_state != DeviceState::TagMounted) { - LOG_ERROR(Service_NFC, "Wrong device state {}", device_state); - if (device_state == DeviceState::TagRemoved) { - return ResultTagRemoved; - } - return ResultWrongDeviceState; - } - if (mifare_data.size() < sector_index + sizeof(DataBlock)) { - return Mifare::ResultReadError; + return ResultMifareError288; } // TODO: Use parameter.sector_key to read encrypted data @@ -315,6 +341,28 @@ Result NfcDevice::ReadMifare(const MifareReadBlockParameter& parameter, Result NfcDevice::WriteMifare(std::span parameters) { Result result = ResultSuccess; + TagInfo tag_info{}; + result = GetTagInfo(tag_info, true); + + if (result.IsError()) { + return result; + } + + if (tag_info.protocol != NfcProtocol::TypeA || tag_info.tag_type != TagType::Mifare) { + return ResultInvalidTagType; + } + + if (parameters.size() == 0) { + return ResultInvalidArgument; + } + + const auto unknown = parameters[0].sector_key.unknown; + for (std::size_t i = 0; i < parameters.size(); i++) { + if (unknown != parameters[i].sector_key.unknown) { + return ResultInvalidArgument; + } + } + for (std::size_t i = 0; i < parameters.size(); i++) { result = WriteMifare(parameters[i]); if (result.IsError()) { @@ -324,7 +372,7 @@ Result NfcDevice::WriteMifare(std::span paramet if (!npad_device->WriteNfc(mifare_data)) { LOG_ERROR(Service_NFP, "Error writing to file"); - return Mifare::ResultReadError; + return ResultMifareError288; } return result; @@ -342,7 +390,7 @@ Result NfcDevice::WriteMifare(const MifareWriteBlockParameter& parameter) { } if (mifare_data.size() < sector_index + sizeof(DataBlock)) { - return Mifare::ResultReadError; + return ResultMifareError288; } // TODO: Use parameter.sector_key to encrypt the data @@ -366,7 +414,7 @@ Result NfcDevice::Mount(NFP::ModelType model_type, NFP::MountTarget mount_target if (!NFP::AmiiboCrypto::IsAmiiboValid(encrypted_tag_data)) { LOG_ERROR(Service_NFP, "Not an amiibo"); - return ResultNotAnAmiibo; + return ResultInvalidTagType; } // The loaded amiibo is not encrypted @@ -381,14 +429,14 @@ Result NfcDevice::Mount(NFP::ModelType model_type, NFP::MountTarget mount_target } if (!NFP::AmiiboCrypto::DecodeAmiibo(encrypted_tag_data, tag_data)) { - bool has_backup = HasBackup(encrypted_tag_data.uuid.uid).IsSuccess(); + bool has_backup = HasBackup(encrypted_tag_data.uuid).IsSuccess(); LOG_ERROR(Service_NFP, "Can't decode amiibo, has_backup= {}", has_backup); return has_backup ? ResultCorruptedDataWithBackup : ResultCorruptedData; } std::vector data(sizeof(NFP::EncryptedNTAG215File)); memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data)); - WriteBackupData(encrypted_tag_data.uuid.uid, data); + WriteBackupData(encrypted_tag_data.uuid, data); device_state = DeviceState::TagMounted; mount_target = mount_target_; @@ -492,7 +540,7 @@ Result NfcDevice::FlushWithBreak(NFP::BreakType break_type) { } memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data)); - WriteBackupData(encrypted_tag_data.uuid.uid, data); + WriteBackupData(encrypted_tag_data.uuid, data); } if (!npad_device->WriteNfc(data)) { @@ -520,7 +568,7 @@ Result NfcDevice::Restore() { return result; } - result = ReadBackupData(tag_info.uuid, data); + result = ReadBackupData(tag_info.uuid, tag_info.uuid_length, data); if (result.IsError()) { return result; @@ -548,7 +596,7 @@ Result NfcDevice::Restore() { } if (!NFP::AmiiboCrypto::IsAmiiboValid(temporary_encrypted_tag_data)) { - return ResultNotAnAmiibo; + return ResultInvalidTagType; } if (!is_plain_amiibo) { @@ -1194,10 +1242,12 @@ Result NfcDevice::BreakTag(NFP::BreakType break_type) { return FlushWithBreak(break_type); } -Result NfcDevice::HasBackup(const NFC::UniqueSerialNumber& uid) const { +Result NfcDevice::HasBackup(const UniqueSerialNumber& uid, std::size_t uuid_size) const { + ASSERT_MSG(uuid_size < sizeof(UniqueSerialNumber), "Invalid UUID size"); constexpr auto backup_dir = "backup"; const auto yuzu_amiibo_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::AmiiboDir); - const auto file_name = fmt::format("{0:02x}.bin", fmt::join(uid, "")); + const auto file_name = + fmt::format("{0:02x}.bin", fmt::join(uid.begin(), uid.begin() + uuid_size, "")); if (!Common::FS::Exists(yuzu_amiibo_dir / backup_dir / file_name)) { return ResultUnableToAccessBackupFile; @@ -1206,10 +1256,19 @@ Result NfcDevice::HasBackup(const NFC::UniqueSerialNumber& uid) const { return ResultSuccess; } -Result NfcDevice::ReadBackupData(const NFC::UniqueSerialNumber& uid, std::span data) const { +Result NfcDevice::HasBackup(const NFP::TagUuid& tag_uid) const { + UniqueSerialNumber uuid{}; + memcpy(uuid.data(), &tag_uid, sizeof(NFP::TagUuid)); + return HasBackup(uuid, sizeof(NFP::TagUuid)); +} + +Result NfcDevice::ReadBackupData(const UniqueSerialNumber& uid, std::size_t uuid_size, + std::span data) const { + ASSERT_MSG(uuid_size < sizeof(UniqueSerialNumber), "Invalid UUID size"); constexpr auto backup_dir = "backup"; const auto yuzu_amiibo_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::AmiiboDir); - const auto file_name = fmt::format("{0:02x}.bin", fmt::join(uid, "")); + const auto file_name = + fmt::format("{0:02x}.bin", fmt::join(uid.begin(), uid.begin() + uuid_size, "")); const Common::FS::IOFile keys_file{yuzu_amiibo_dir / backup_dir / file_name, Common::FS::FileAccessMode::Read, @@ -1228,12 +1287,21 @@ Result NfcDevice::ReadBackupData(const NFC::UniqueSerialNumber& uid, std::span data) { +Result NfcDevice::ReadBackupData(const NFP::TagUuid& tag_uid, std::span data) const { + UniqueSerialNumber uuid{}; + memcpy(uuid.data(), &tag_uid, sizeof(NFP::TagUuid)); + return ReadBackupData(uuid, sizeof(NFP::TagUuid), data); +} + +Result NfcDevice::WriteBackupData(const UniqueSerialNumber& uid, std::size_t uuid_size, + std::span data) { + ASSERT_MSG(uuid_size < sizeof(UniqueSerialNumber), "Invalid UUID size"); constexpr auto backup_dir = "backup"; const auto yuzu_amiibo_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::AmiiboDir); - const auto file_name = fmt::format("{0:02x}.bin", fmt::join(uid, "")); + const auto file_name = + fmt::format("{0:02x}.bin", fmt::join(uid.begin(), uid.begin() + uuid_size, "")); - if (HasBackup(uid).IsError()) { + if (HasBackup(uid, uuid_size).IsError()) { if (!Common::FS::CreateDir(yuzu_amiibo_dir / backup_dir)) { return ResultBackupPathAlreadyExist; } @@ -1260,6 +1328,12 @@ Result NfcDevice::WriteBackupData(const NFC::UniqueSerialNumber& uid, std::span< return ResultSuccess; } +Result NfcDevice::WriteBackupData(const NFP::TagUuid& tag_uid, std::span data) { + UniqueSerialNumber uuid{}; + memcpy(uuid.data(), &tag_uid, sizeof(NFP::TagUuid)); + return WriteBackupData(uuid, sizeof(NFP::TagUuid), data); +} + Result NfcDevice::WriteNtf(std::span data) { if (device_state != DeviceState::TagMounted) { LOG_ERROR(Service_NFC, "Wrong device state {}", device_state); diff --git a/src/core/hle/service/nfc/common/device.h b/src/core/hle/service/nfc/common/device.h index 6f049b687..7560210d6 100755 --- a/src/core/hle/service/nfc/common/device.h +++ b/src/core/hle/service/nfc/common/device.h @@ -86,9 +86,14 @@ public: Result GetAll(NFP::NfpData& data) const; Result SetAll(const NFP::NfpData& data); Result BreakTag(NFP::BreakType break_type); - Result HasBackup(const NFC::UniqueSerialNumber& uid) const; - Result ReadBackupData(const NFC::UniqueSerialNumber& uid, std::span data) const; - Result WriteBackupData(const NFC::UniqueSerialNumber& uid, std::span data); + Result HasBackup(const UniqueSerialNumber& uid, std::size_t uuid_size) const; + Result HasBackup(const NFP::TagUuid& tag_uid) const; + Result ReadBackupData(const UniqueSerialNumber& uid, std::size_t uuid_size, + std::span data) const; + Result ReadBackupData(const NFP::TagUuid& tag_uid, std::span data) const; + Result WriteBackupData(const UniqueSerialNumber& uid, std::size_t uuid_size, + std::span data); + Result WriteBackupData(const NFP::TagUuid& tag_uid, std::span data); Result WriteNtf(std::span data); u64 GetHandle() const; diff --git a/src/core/hle/service/nfc/common/device_manager.cpp b/src/core/hle/service/nfc/common/device_manager.cpp index cffd602df..b0456508e 100755 --- a/src/core/hle/service/nfc/common/device_manager.cpp +++ b/src/core/hle/service/nfc/common/device_manager.cpp @@ -550,7 +550,7 @@ Result DeviceManager::ReadBackupData(u64 device_handle, std::span data) cons } if (result.IsSuccess()) { - result = device->ReadBackupData(tag_info.uuid, data); + result = device->ReadBackupData(tag_info.uuid, tag_info.uuid_length, data); result = VerifyDeviceResult(device, result); } @@ -569,7 +569,7 @@ Result DeviceManager::WriteBackupData(u64 device_handle, std::span dat } if (result.IsSuccess()) { - result = device->WriteBackupData(tag_info.uuid, data); + result = device->WriteBackupData(tag_info.uuid, tag_info.uuid_length, data); result = VerifyDeviceResult(device, result); } diff --git a/src/core/hle/service/nfc/mifare_result.h b/src/core/hle/service/nfc/mifare_result.h index 4b60048a5..16a9171e6 100755 --- a/src/core/hle/service/nfc/mifare_result.h +++ b/src/core/hle/service/nfc/mifare_result.h @@ -12,6 +12,6 @@ constexpr Result ResultInvalidArgument(ErrorModule::NFCMifare, 65); constexpr Result ResultWrongDeviceState(ErrorModule::NFCMifare, 73); constexpr Result ResultNfcDisabled(ErrorModule::NFCMifare, 80); constexpr Result ResultTagRemoved(ErrorModule::NFCMifare, 97); -constexpr Result ResultReadError(ErrorModule::NFCMifare, 288); +constexpr Result ResultNotAMifare(ErrorModule::NFCMifare, 288); } // namespace Service::NFC::Mifare diff --git a/src/core/hle/service/nfc/nfc_interface.cpp b/src/core/hle/service/nfc/nfc_interface.cpp index 198d0f2b9..48405f6f2 100755 --- a/src/core/hle/service/nfc/nfc_interface.cpp +++ b/src/core/hle/service/nfc/nfc_interface.cpp @@ -355,7 +355,7 @@ Result NfcInterface::TranslateResultToNfp(Result result) const { if (result == ResultApplicationAreaExist) { return NFP::ResultApplicationAreaExist; } - if (result == ResultNotAnAmiibo) { + if (result == ResultInvalidTagType) { return NFP::ResultNotAnAmiibo; } if (result == ResultUnableToAccessBackupFile) { @@ -381,6 +381,9 @@ Result NfcInterface::TranslateResultToMifare(Result result) const { if (result == ResultTagRemoved) { return Mifare::ResultTagRemoved; } + if (result == ResultInvalidTagType) { + return Mifare::ResultNotAMifare; + } LOG_WARNING(Service_NFC, "Result conversion not handled"); return result; } diff --git a/src/core/hle/service/nfc/nfc_result.h b/src/core/hle/service/nfc/nfc_result.h index 59a808740..715c0e80c 100755 --- a/src/core/hle/service/nfc/nfc_result.h +++ b/src/core/hle/service/nfc/nfc_result.h @@ -24,7 +24,8 @@ constexpr Result ResultCorruptedDataWithBackup(ErrorModule::NFC, 136); constexpr Result ResultCorruptedData(ErrorModule::NFC, 144); constexpr Result ResultWrongApplicationAreaId(ErrorModule::NFC, 152); constexpr Result ResultApplicationAreaExist(ErrorModule::NFC, 168); -constexpr Result ResultNotAnAmiibo(ErrorModule::NFC, 178); +constexpr Result ResultInvalidTagType(ErrorModule::NFC, 178); constexpr Result ResultBackupPathAlreadyExist(ErrorModule::NFC, 216); +constexpr Result ResultMifareError288(ErrorModule::NFC, 288); } // namespace Service::NFC diff --git a/src/core/hle/service/nfc/nfc_types.h b/src/core/hle/service/nfc/nfc_types.h index c7ebd1fdb..1a0866e78 100755 --- a/src/core/hle/service/nfc/nfc_types.h +++ b/src/core/hle/service/nfc/nfc_types.h @@ -35,21 +35,27 @@ enum class State : u32 { // This is nn::nfc::TagType enum class TagType : u32 { - None, - Type1, // ISO14443A RW 96-2k bytes 106kbit/s - Type2, // ISO14443A RW/RO 540 bytes 106kbit/s - Type3, // Sony FeliCa RW/RO 2k bytes 212kbit/s - Type4, // ISO14443A RW/RO 4k-32k bytes 424kbit/s - Type5, // ISO15693 RW/RO 540 bytes 106kbit/s + None = 0, + Type1 = 1U << 0, // ISO14443A RW. Topaz + Type2 = 1U << 1, // ISO14443A RW. Ultralight, NTAGX, ST25TN + Type3 = 1U << 2, // ISO14443A RW/RO. Sony FeliCa + Type4A = 1U << 3, // ISO14443A RW/RO. DESFire + Type4B = 1U << 4, // ISO14443B RW/RO. DESFire + Type5 = 1U << 5, // ISO15693 RW/RO. SLI, SLIX, ST25TV + Mifare = 1U << 6, // Mifare classic. Skylanders + All = 0xFFFFFFFF, }; enum class PackedTagType : u8 { - None, - Type1, // ISO14443A RW 96-2k bytes 106kbit/s - Type2, // ISO14443A RW/RO 540 bytes 106kbit/s - Type3, // Sony FeliCa RW/RO 2k bytes 212kbit/s - Type4, // ISO14443A RW/RO 4k-32k bytes 424kbit/s - Type5, // ISO15693 RW/RO 540 bytes 106kbit/s + None = 0, + Type1 = 1U << 0, // ISO14443A RW. Topaz + Type2 = 1U << 1, // ISO14443A RW. Ultralight, NTAGX, ST25TN + Type3 = 1U << 2, // ISO14443A RW/RO. Sony FeliCa + Type4A = 1U << 3, // ISO14443A RW/RO. DESFire + Type4B = 1U << 4, // ISO14443B RW/RO. DESFire + Type5 = 1U << 5, // ISO15693 RW/RO. SLI, SLIX, ST25TV + Mifare = 1U << 6, // Mifare classic. Skylanders + All = 0xFF, }; // This is nn::nfc::NfcProtocol @@ -69,8 +75,7 @@ enum class TestWaveType : u32 { Unknown, }; -using UniqueSerialNumber = std::array; -using UniqueSerialNumberExtension = std::array; +using UniqueSerialNumber = std::array; // This is nn::nfc::DeviceHandle using DeviceHandle = u64; @@ -78,7 +83,6 @@ using DeviceHandle = u64; // This is nn::nfc::TagInfo struct TagInfo { UniqueSerialNumber uuid; - UniqueSerialNumberExtension uuid_extension; u8 uuid_length; INSERT_PADDING_BYTES(0x15); NfcProtocol protocol; diff --git a/src/core/hle/service/nfp/nfp_types.h b/src/core/hle/service/nfp/nfp_types.h index 00edec41d..a32e51d8c 100755 --- a/src/core/hle/service/nfp/nfp_types.h +++ b/src/core/hle/service/nfp/nfp_types.h @@ -85,7 +85,7 @@ enum class CabinetMode : u8 { StartFormatter, }; -using LockBytes = std::array; +using UuidPart = std::array; using HashData = std::array; using ApplicationArea = std::array; using AmiiboName = std::array; @@ -93,12 +93,20 @@ using AmiiboName = std::array; // This is nn::nfp::TagInfo using TagInfo = NFC::TagInfo; -struct TagUuid { - NFC::UniqueSerialNumber uid; +struct NtagTagUuid { + UuidPart part1; + UuidPart part2; u8 nintendo_id; - LockBytes lock_bytes; }; -static_assert(sizeof(TagUuid) == 10, "TagUuid is an invalid size"); +static_assert(sizeof(NtagTagUuid) == 7, "NtagTagUuid is an invalid size"); + +struct TagUuid { + UuidPart part1; + u8 crc_check1; + UuidPart part2; + u8 nintendo_id; +}; +static_assert(sizeof(TagUuid) == 8, "TagUuid is an invalid size"); struct WriteDate { u16 year; @@ -231,7 +239,8 @@ struct EncryptedAmiiboFile { static_assert(sizeof(EncryptedAmiiboFile) == 0x1F8, "AmiiboFile is an invalid size"); struct NTAG215File { - LockBytes lock_bytes; // Tag UUID + u8 uid_crc_check2; + u8 internal_number; u16 static_lock; // Set defined pages as read only u32 compability_container; // Defines available memory HashData hmac_data; // Hash @@ -250,8 +259,7 @@ struct NTAG215File { u32_be register_info_crc; ApplicationArea application_area; // Encrypted Game data HashData hmac_tag; // Hash - NFC::UniqueSerialNumber uid; // Unique serial number - u8 nintendo_id; // Tag UUID + TagUuid uid; AmiiboModelInfo model_info; HashData keygen_salt; // Salt u32 dynamic_lock; // Dynamic lock @@ -264,7 +272,9 @@ static_assert(std::is_trivially_copyable_v, "NTAG215File must be tr #pragma pack() struct EncryptedNTAG215File { - TagUuid uuid; // Unique serial number + TagUuid uuid; + u8 uuid_crc_check2; + u8 internal_number; u16 static_lock; // Set defined pages as read only u32 compability_container; // Defines available memory EncryptedAmiiboFile user_memory; // Writable data diff --git a/src/video_core/texture_cache/image_info.cpp b/src/video_core/texture_cache/image_info.cpp index 22eb7bd00..dbe6018d8 100755 --- a/src/video_core/texture_cache/image_info.cpp +++ b/src/video_core/texture_cache/image_info.cpp @@ -22,9 +22,6 @@ using Tegra::Texture::TICEntry; using VideoCore::Surface::PixelFormat; using VideoCore::Surface::SurfaceType; -constexpr u32 RescaleHeightThreshold = 288; -constexpr u32 DownscaleHeightThreshold = 512; - ImageInfo::ImageInfo(const TICEntry& config) noexcept { forced_flushed = config.IsPitchLinear() && !Settings::values.use_reactive_flushing.GetValue(); dma_downloaded = forced_flushed; @@ -116,9 +113,8 @@ ImageInfo::ImageInfo(const TICEntry& config) noexcept { layer_stride = CalculateLayerStride(*this); maybe_unaligned_layer_stride = CalculateLayerSize(*this); rescaleable &= (block.depth == 0) && resources.levels == 1; - rescaleable &= size.height > RescaleHeightThreshold || - GetFormatType(format) != SurfaceType::ColorTexture; - downscaleable = size.height > DownscaleHeightThreshold; + rescaleable &= size.height > 256 || GetFormatType(format) != SurfaceType::ColorTexture; + downscaleable = size.height > 512; } } @@ -156,8 +152,8 @@ ImageInfo::ImageInfo(const Maxwell3D::Regs::RenderTargetConfig& ct, size.depth = ct.depth; } else { rescaleable = block.depth == 0; - rescaleable &= size.height > RescaleHeightThreshold; - downscaleable = size.height > DownscaleHeightThreshold; + rescaleable &= size.height > 256; + downscaleable = size.height > 512; type = ImageType::e2D; resources.layers = ct.depth; } @@ -236,8 +232,8 @@ ImageInfo::ImageInfo(const Fermi2D::Surface& config) noexcept { .height = config.height, .depth = 1, }; - rescaleable = block.depth == 0 && size.height > RescaleHeightThreshold; - downscaleable = size.height > DownscaleHeightThreshold; + rescaleable = block.depth == 0 && size.height > 256; + downscaleable = size.height > 512; } } @@ -279,8 +275,8 @@ ImageInfo::ImageInfo(const Tegra::DMA::ImageOperand& config) noexcept { resources.layers = 1; layer_stride = CalculateLayerStride(*this); maybe_unaligned_layer_stride = CalculateLayerSize(*this); - rescaleable = block.depth == 0 && size.height > RescaleHeightThreshold; - downscaleable = size.height > DownscaleHeightThreshold; + rescaleable = block.depth == 0 && size.height > 256; + downscaleable = size.height > 512; } } // namespace VideoCommon