summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.codespellrc4
-rw-r--r--src/android/app/build.gradle.kts41
-rw-r--r--src/android/app/src/main/AndroidManifest.xml2
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/NativeLibrary.kt15
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt27
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt12
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt8
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/model/Game.kt21
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GamesViewModel.kt11
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt26
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt66
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.kt24
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt4
-rw-r--r--src/android/app/src/main/jni/native.cpp120
-rw-r--r--src/android/app/src/main/res/drawable/ic_system_update_alt.xml9
-rw-r--r--src/android/app/src/main/res/values-de/strings.xml335
-rw-r--r--src/android/app/src/main/res/values-es/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-fr/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-it/strings.xml344
-rw-r--r--src/android/app/src/main/res/values-ja/strings.xml343
-rw-r--r--src/android/app/src/main/res/values-ko/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-nb/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-pl/strings.xml344
-rw-r--r--src/android/app/src/main/res/values-pt-rBR/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-pt-rPT/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-ru/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-uk/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-zh-rCN/strings.xml345
-rw-r--r--src/android/app/src/main/res/values-zh-rTW/strings.xml345
-rw-r--r--src/android/app/src/main/res/values/strings.xml16
-rw-r--r--src/audio_core/audio_core.cpp8
-rw-r--r--src/audio_core/audio_core.h14
-rw-r--r--src/common/fs/fs_paths.h1
-rw-r--r--src/common/fs/path_util.cpp1
-rw-r--r--src/common/fs/path_util.h1
-rw-r--r--src/common/settings.cpp1
-rw-r--r--src/common/settings.h1
-rw-r--r--src/common/uuid.cpp2
-rw-r--r--src/core/core.cpp18
-rw-r--r--src/core/core.h3
-rw-r--r--src/core/file_sys/submission_package.h1
-rw-r--r--src/core/hle/service/nfc/common/device.cpp160
-rw-r--r--src/core/hle/service/nfc/common/device.h10
-rw-r--r--src/core/hle/service/nfc/common/device_manager.cpp14
-rw-r--r--src/core/hle/service/nfc/nfc_interface.cpp8
-rw-r--r--src/core/hle/service/nfc/nfc_result.h20
-rw-r--r--src/core/hle/service/nfp/nfp_interface.cpp6
-rw-r--r--src/core/hle/service/nfp/nfp_result.h2
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp4
-rw-r--r--src/core/hle/service/nvnflinger/nvnflinger.cpp4
-rw-r--r--src/core/loader/nro.cpp13
-rw-r--r--src/core/loader/nro.h2
-rw-r--r--src/shader_recompiler/CMakeLists.txt2
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate_program.cpp6
-rw-r--r--src/shader_recompiler/host_translate_info.h3
-rw-r--r--src/shader_recompiler/ir_opt/conditional_barrier_pass.cpp44
-rw-r--r--src/shader_recompiler/ir_opt/lower_fp64_to_fp32.cpp185
-rw-r--r--src/shader_recompiler/ir_opt/passes.h2
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h82
-rw-r--r--src/video_core/buffer_cache/buffer_cache_base.h11
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp18
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h4
-rw-r--r--src/video_core/renderer_opengl/gl_device.cpp1
-rw-r--r--src/video_core/renderer_opengl/gl_device.h5
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.cpp2
-rw-r--r--src/video_core/renderer_vulkan/vk_blit_screen.cpp55
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.cpp54
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.h3
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp1
-rw-r--r--src/video_core/renderer_vulkan/vk_swapchain.cpp5
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp2
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h10
-rw-r--r--src/yuzu/configuration/config.cpp8
-rw-r--r--src/yuzu/configuration/config.h1
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp8
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.h1
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.ui10
-rw-r--r--src/yuzu/main.cpp10
78 files changed, 5798 insertions, 251 deletions
diff --git a/.codespellrc b/.codespellrc
index 786a991eb..01ddd2362 100644
--- a/.codespellrc
+++ b/.codespellrc
@@ -2,5 +2,5 @@
2; SPDX-License-Identifier: GPL-2.0-or-later 2; SPDX-License-Identifier: GPL-2.0-or-later
3 3
4[codespell] 4[codespell]
5skip = ./.git,./build,./dist,./Doxyfile,./externals,./LICENSES 5skip = ./.git,./build,./dist,./Doxyfile,./externals,./LICENSES,./src/android/app/src/main/res
6ignore-words-list = aci,allright,ba,deques,froms,hda,inout,lod,masia,nam,nax,nd,pullrequests,pullrequest,te,transfered,unstall,uscaled,zink 6ignore-words-list = aci,allright,ba,deques,froms,hda,inout,lod,masia,nam,nax,nd,optin,pullrequests,pullrequest,te,transfered,unstall,uscaled,zink
diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts
index 13bb227ff..fe613d339 100644
--- a/src/android/app/build.gradle.kts
+++ b/src/android/app/build.gradle.kts
@@ -2,6 +2,7 @@
2// SPDX-License-Identifier: GPL-3.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4import android.annotation.SuppressLint 4import android.annotation.SuppressLint
5import org.jetbrains.kotlin.konan.properties.Properties
5 6
6plugins { 7plugins {
7 id("com.android.application") 8 id("com.android.application")
@@ -57,9 +58,22 @@ android {
57 applicationId = "org.yuzu.yuzu_emu" 58 applicationId = "org.yuzu.yuzu_emu"
58 minSdk = 30 59 minSdk = 30
59 targetSdk = 33 60 targetSdk = 33
60 versionCode = 1
61 versionName = getGitVersion() 61 versionName = getGitVersion()
62 62
63 // If you want to use autoVersion for the versionCode, create a property in local.properties
64 // named "autoVersioned" and set it to "true"
65 val properties = Properties()
66 val versionProperty = try {
67 properties.load(project.rootProject.file("local.properties").inputStream())
68 properties.getProperty("autoVersioned") ?: ""
69 } catch (e: Exception) { "" }
70
71 versionCode = if (versionProperty == "true") {
72 autoVersion
73 } else {
74 1
75 }
76
63 ndk { 77 ndk {
64 @SuppressLint("ChromeOsAbiSupport") 78 @SuppressLint("ChromeOsAbiSupport")
65 abiFilters += listOf("arm64-v8a") 79 abiFilters += listOf("arm64-v8a")
@@ -74,16 +88,7 @@ android {
74 88
75 // Signed by release key, allowing for upload to Play Store. 89 // Signed by release key, allowing for upload to Play Store.
76 release { 90 release {
77 signingConfig = signingConfigs.getByName("debug") 91 resValue("string", "app_name_suffixed", "yuzu")
78 isMinifyEnabled = true
79 isDebuggable = false
80 proguardFiles(
81 getDefaultProguardFile("proguard-android.txt"),
82 "proguard-rules.pro"
83 )
84 }
85
86 register("relWithVersionCode") {
87 signingConfig = signingConfigs.getByName("debug") 92 signingConfig = signingConfigs.getByName("debug")
88 isMinifyEnabled = true 93 isMinifyEnabled = true
89 isDebuggable = false 94 isDebuggable = false
@@ -96,6 +101,7 @@ android {
96 // builds a release build that doesn't need signing 101 // builds a release build that doesn't need signing
97 // Attaches 'debug' suffix to version and package name, allowing installation alongside the release build. 102 // Attaches 'debug' suffix to version and package name, allowing installation alongside the release build.
98 register("relWithDebInfo") { 103 register("relWithDebInfo") {
104 resValue("string", "app_name_suffixed", "yuzu Debug Release")
99 signingConfig = signingConfigs.getByName("debug") 105 signingConfig = signingConfigs.getByName("debug")
100 isMinifyEnabled = true 106 isMinifyEnabled = true
101 isDebuggable = true 107 isDebuggable = true
@@ -103,16 +109,19 @@ android {
103 getDefaultProguardFile("proguard-android.txt"), 109 getDefaultProguardFile("proguard-android.txt"),
104 "proguard-rules.pro" 110 "proguard-rules.pro"
105 ) 111 )
106 versionNameSuffix = "-debug" 112 versionNameSuffix = "-relWithDebInfo"
113 applicationIdSuffix = ".relWithDebInfo"
107 isJniDebuggable = true 114 isJniDebuggable = true
108 } 115 }
109 116
110 // Signed by debug key disallowing distribution on Play Store. 117 // Signed by debug key disallowing distribution on Play Store.
111 // Attaches 'debug' suffix to version and package name, allowing installation alongside the release build. 118 // Attaches 'debug' suffix to version and package name, allowing installation alongside the release build.
112 debug { 119 debug {
120 resValue("string", "app_name_suffixed", "yuzu Debug")
113 isDebuggable = true 121 isDebuggable = true
114 isJniDebuggable = true 122 isJniDebuggable = true
115 versionNameSuffix = "-debug" 123 versionNameSuffix = "-debug"
124 applicationIdSuffix = ".debug"
116 } 125 }
117 } 126 }
118 127
@@ -162,19 +171,19 @@ dependencies {
162 implementation("androidx.appcompat:appcompat:1.6.1") 171 implementation("androidx.appcompat:appcompat:1.6.1")
163 implementation("androidx.recyclerview:recyclerview:1.3.0") 172 implementation("androidx.recyclerview:recyclerview:1.3.0")
164 implementation("androidx.constraintlayout:constraintlayout:2.1.4") 173 implementation("androidx.constraintlayout:constraintlayout:2.1.4")
165 implementation("androidx.fragment:fragment-ktx:1.5.7") 174 implementation("androidx.fragment:fragment-ktx:1.6.0")
166 implementation("androidx.documentfile:documentfile:1.0.1") 175 implementation("androidx.documentfile:documentfile:1.0.1")
167 implementation("com.google.android.material:material:1.9.0") 176 implementation("com.google.android.material:material:1.9.0")
168 implementation("androidx.preference:preference:1.2.0") 177 implementation("androidx.preference:preference:1.2.0")
169 implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1") 178 implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
170 implementation("io.coil-kt:coil:2.2.2") 179 implementation("io.coil-kt:coil:2.2.2")
171 implementation("androidx.core:core-splashscreen:1.0.1") 180 implementation("androidx.core:core-splashscreen:1.0.1")
172 implementation("androidx.window:window:1.0.0") 181 implementation("androidx.window:window:1.1.0")
173 implementation("org.ini4j:ini4j:0.5.4") 182 implementation("org.ini4j:ini4j:0.5.4")
174 implementation("androidx.constraintlayout:constraintlayout:2.1.4") 183 implementation("androidx.constraintlayout:constraintlayout:2.1.4")
175 implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") 184 implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
176 implementation("androidx.navigation:navigation-fragment-ktx:2.5.3") 185 implementation("androidx.navigation:navigation-fragment-ktx:2.6.0")
177 implementation("androidx.navigation:navigation-ui-ktx:2.5.3") 186 implementation("androidx.navigation:navigation-ui-ktx:2.6.0")
178 implementation("info.debatty:java-string-similarity:2.0.0") 187 implementation("info.debatty:java-string-similarity:2.0.0")
179 implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0") 188 implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0")
180} 189}
diff --git a/src/android/app/src/main/AndroidManifest.xml b/src/android/app/src/main/AndroidManifest.xml
index eef566042..1e92098ec 100644
--- a/src/android/app/src/main/AndroidManifest.xml
+++ b/src/android/app/src/main/AndroidManifest.xml
@@ -18,7 +18,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
18 18
19 <application 19 <application
20 android:name="org.yuzu.yuzu_emu.YuzuApplication" 20 android:name="org.yuzu.yuzu_emu.YuzuApplication"
21 android:label="@string/app_name" 21 android:label="@string/app_name_suffixed"
22 android:icon="@drawable/ic_launcher" 22 android:icon="@drawable/ic_launcher"
23 android:allowBackup="true" 23 android:allowBackup="true"
24 android:hasFragileUserData="true" 24 android:hasFragileUserData="true"
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 c11b6bc16..4be9ade14 100644
--- 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
@@ -223,8 +223,12 @@ object NativeLibrary {
223 223
224 external fun getCompany(filename: String): String 224 external fun getCompany(filename: String): String
225 225
226 external fun isHomebrew(filename: String): Boolean
227
226 external fun setAppDirectory(directory: String) 228 external fun setAppDirectory(directory: String)
227 229
230 external fun installFileToNand(filename: String): Int
231
228 external fun initializeGpuDriver( 232 external fun initializeGpuDriver(
229 hookLibDir: String?, 233 hookLibDir: String?,
230 customDriverDir: String?, 234 customDriverDir: String?,
@@ -505,4 +509,15 @@ object NativeLibrary {
505 const val RELEASED = 0 509 const val RELEASED = 0
506 const val PRESSED = 1 510 const val PRESSED = 1
507 } 511 }
512
513 /**
514 * Result from installFileToNand
515 */
516 object InstallFileToNandResult {
517 const val Success = 0
518 const val SuccessFileOverwritten = 1
519 const val Error = 2
520 const val ErrorBaseGame = 3
521 const val ErrorFilenameExtension = 4
522 }
508} 523}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
index 94d5156cf..20a0394f5 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
@@ -6,15 +6,12 @@ package org.yuzu.yuzu_emu.activities
6import android.app.Activity 6import android.app.Activity
7import android.content.Context 7import android.content.Context
8import android.content.Intent 8import android.content.Intent
9import android.content.res.Configuration
10import android.graphics.Rect 9import android.graphics.Rect
11import android.hardware.Sensor 10import android.hardware.Sensor
12import android.hardware.SensorEvent 11import android.hardware.SensorEvent
13import android.hardware.SensorEventListener 12import android.hardware.SensorEventListener
14import android.hardware.SensorManager 13import android.hardware.SensorManager
15import android.hardware.display.DisplayManager
16import android.os.Bundle 14import android.os.Bundle
17import android.view.Display
18import android.view.InputDevice 15import android.view.InputDevice
19import android.view.KeyEvent 16import android.view.KeyEvent
20import android.view.MotionEvent 17import android.view.MotionEvent
@@ -23,7 +20,6 @@ import android.view.View
23import android.view.inputmethod.InputMethodManager 20import android.view.inputmethod.InputMethodManager
24import androidx.activity.viewModels 21import androidx.activity.viewModels
25import androidx.appcompat.app.AppCompatActivity 22import androidx.appcompat.app.AppCompatActivity
26import androidx.core.content.getSystemService
27import androidx.core.view.WindowCompat 23import androidx.core.view.WindowCompat
28import androidx.core.view.WindowInsetsCompat 24import androidx.core.view.WindowInsetsCompat
29import androidx.core.view.WindowInsetsControllerCompat 25import androidx.core.view.WindowInsetsControllerCompat
@@ -39,7 +35,6 @@ import org.yuzu.yuzu_emu.features.settings.model.SettingsViewModel
39import org.yuzu.yuzu_emu.fragments.EmulationFragment 35import org.yuzu.yuzu_emu.fragments.EmulationFragment
40import org.yuzu.yuzu_emu.model.Game 36import org.yuzu.yuzu_emu.model.Game
41import org.yuzu.yuzu_emu.utils.ControllerMappingHelper 37import org.yuzu.yuzu_emu.utils.ControllerMappingHelper
42import org.yuzu.yuzu_emu.utils.EmulationMenuSettings
43import org.yuzu.yuzu_emu.utils.ForegroundService 38import org.yuzu.yuzu_emu.utils.ForegroundService
44import org.yuzu.yuzu_emu.utils.InputHandler 39import org.yuzu.yuzu_emu.utils.InputHandler
45import org.yuzu.yuzu_emu.utils.NfcReader 40import org.yuzu.yuzu_emu.utils.NfcReader
@@ -148,11 +143,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
148 super.onResume() 143 super.onResume()
149 nfcReader.startScanning() 144 nfcReader.startScanning()
150 startMotionSensorListener() 145 startMotionSensorListener()
151
152 NativeLibrary.notifyOrientationChange(
153 EmulationMenuSettings.landscapeScreenLayout,
154 getAdjustedRotation()
155 )
156 } 146 }
157 147
158 override fun onPause() { 148 override fun onPause() {
@@ -258,23 +248,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
258 248
259 override fun onAccuracyChanged(sensor: Sensor, i: Int) {} 249 override fun onAccuracyChanged(sensor: Sensor, i: Int) {}
260 250
261 private fun getAdjustedRotation():Int {
262 val rotation = getSystemService<DisplayManager>()!!.getDisplay(Display.DEFAULT_DISPLAY).rotation
263 val config: Configuration = resources.configuration
264
265 if ((config.screenLayout and Configuration.SCREENLAYOUT_LONG_YES) != 0 ||
266 (config.screenLayout and Configuration.SCREENLAYOUT_LONG_NO) == 0) {
267 return rotation
268 }
269 when (rotation) {
270 Surface.ROTATION_0 -> return Surface.ROTATION_90
271 Surface.ROTATION_90 -> return Surface.ROTATION_0
272 Surface.ROTATION_180 -> return Surface.ROTATION_270
273 Surface.ROTATION_270 -> return Surface.ROTATION_180
274 }
275 return rotation
276 }
277
278 private fun restoreState(savedInstanceState: Bundle) { 251 private fun restoreState(savedInstanceState: Bundle) {
279 game = savedInstanceState.parcelable(EXTRA_SELECTED_GAME)!! 252 game = savedInstanceState.parcelable(EXTRA_SELECTED_GAME)!!
280 } 253 }
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 100644
--- 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
@@ -95,6 +95,11 @@ class HomeSettingsFragment : Fragment() {
95 R.drawable.ic_nfc 95 R.drawable.ic_nfc
96 ) { mainActivity.getAmiiboKey.launch(arrayOf("*/*")) }, 96 ) { mainActivity.getAmiiboKey.launch(arrayOf("*/*")) },
97 HomeSetting( 97 HomeSetting(
98 R.string.install_game_content,
99 R.string.install_game_content_description,
100 R.drawable.ic_system_update_alt
101 ) { mainActivity.installGameUpdate.launch(arrayOf("*/*")) },
102 HomeSetting(
98 R.string.select_games_folder, 103 R.string.select_games_folder,
99 R.string.select_games_folder_description, 104 R.string.select_games_folder_description,
100 R.drawable.ic_add 105 R.drawable.ic_add
@@ -103,7 +108,12 @@ class HomeSettingsFragment : Fragment() {
103 R.string.manage_save_data, 108 R.string.manage_save_data,
104 R.string.import_export_saves_description, 109 R.string.import_export_saves_description,
105 R.drawable.ic_save 110 R.drawable.ic_save
106 ) { ImportExportSavesFragment().show(parentFragmentManager, ImportExportSavesFragment.TAG) }, 111 ) {
112 ImportExportSavesFragment().show(
113 parentFragmentManager,
114 ImportExportSavesFragment.TAG
115 )
116 },
107 HomeSetting( 117 HomeSetting(
108 R.string.install_prod_keys, 118 R.string.install_prod_keys,
109 R.string.install_prod_keys_description, 119 R.string.install_prod_keys_description,
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt
index ebc0f164a..adbe3696b 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt
@@ -127,13 +127,7 @@ class SearchFragment : Fragment() {
127 } 127 }
128 } 128 }
129 129
130 R.id.chip_homebrew -> { 130 R.id.chip_homebrew -> baseList.filter { it.isHomebrew }
131 baseList.filter {
132 Log.error("Guh - ${it.path}")
133 FileUtil.hasExtension(it.path, "nro")
134 || FileUtil.hasExtension(it.path, "nso")
135 }
136 }
137 131
138 R.id.chip_retail -> baseList.filter { 132 R.id.chip_retail -> baseList.filter {
139 FileUtil.hasExtension(it.path, "xci") 133 FileUtil.hasExtension(it.path, "xci")
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 2a17653b2..35d8000c5 100644
--- 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
@@ -16,7 +16,8 @@ class Game(
16 val regions: String, 16 val regions: String,
17 val path: String, 17 val path: String,
18 val gameId: String, 18 val gameId: String,
19 val company: String 19 val company: String,
20 val isHomebrew: Boolean
20) : Parcelable { 21) : Parcelable {
21 val keyAddedToLibraryTime get() = "${gameId}_AddedToLibraryTime" 22 val keyAddedToLibraryTime get() = "${gameId}_AddedToLibraryTime"
22 val keyLastPlayedTime get() = "${gameId}_LastPlayed" 23 val keyLastPlayedTime get() = "${gameId}_LastPlayed"
@@ -25,12 +26,18 @@ class Game(
25 if (other !is Game) 26 if (other !is Game)
26 return false 27 return false
27 28
28 return title == other.title 29 return hashCode() == other.hashCode()
29 && description == other.description 30 }
30 && regions == other.regions 31
31 && path == other.path 32 override fun hashCode(): Int {
32 && gameId == other.gameId 33 var result = title.hashCode()
33 && company == other.company 34 result = 31 * result + description.hashCode()
35 result = 31 * result + regions.hashCode()
36 result = 31 * result + path.hashCode()
37 result = 31 * result + gameId.hashCode()
38 result = 31 * result + company.hashCode()
39 result = 31 * result + isHomebrew.hashCode()
40 return result
34 } 41 }
35 42
36 companion object { 43 companion object {
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GamesViewModel.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GamesViewModel.kt
index 7059856f1..d9b301210 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GamesViewModel.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GamesViewModel.kt
@@ -13,6 +13,8 @@ import androidx.preference.PreferenceManager
13import kotlinx.coroutines.Dispatchers 13import kotlinx.coroutines.Dispatchers
14import kotlinx.coroutines.launch 14import kotlinx.coroutines.launch
15import kotlinx.coroutines.withContext 15import kotlinx.coroutines.withContext
16import kotlinx.serialization.ExperimentalSerializationApi
17import kotlinx.serialization.MissingFieldException
16import kotlinx.serialization.decodeFromString 18import kotlinx.serialization.decodeFromString
17import kotlinx.serialization.json.Json 19import kotlinx.serialization.json.Json
18import org.yuzu.yuzu_emu.NativeLibrary 20import org.yuzu.yuzu_emu.NativeLibrary
@@ -20,6 +22,7 @@ import org.yuzu.yuzu_emu.YuzuApplication
20import org.yuzu.yuzu_emu.utils.GameHelper 22import org.yuzu.yuzu_emu.utils.GameHelper
21import java.util.Locale 23import java.util.Locale
22 24
25@OptIn(ExperimentalSerializationApi::class)
23class GamesViewModel : ViewModel() { 26class GamesViewModel : ViewModel() {
24 private val _games = MutableLiveData<List<Game>>(emptyList()) 27 private val _games = MutableLiveData<List<Game>>(emptyList())
25 val games: LiveData<List<Game>> get() = _games 28 val games: LiveData<List<Game>> get() = _games
@@ -49,7 +52,13 @@ class GamesViewModel : ViewModel() {
49 if (storedGames!!.isNotEmpty()) { 52 if (storedGames!!.isNotEmpty()) {
50 val deserializedGames = mutableSetOf<Game>() 53 val deserializedGames = mutableSetOf<Game>()
51 storedGames.forEach { 54 storedGames.forEach {
52 val game: Game = Json.decodeFromString(it) 55 val game: Game
56 try {
57 game = Json.decodeFromString(it)
58 } catch (e: MissingFieldException) {
59 return@forEach
60 }
61
53 val gameExists = 62 val gameExists =
54 DocumentFile.fromSingleUri(YuzuApplication.appContext, Uri.parse(game.path)) 63 DocumentFile.fromSingleUri(YuzuApplication.appContext, Uri.parse(game.path))
55 ?.exists() 64 ?.exists()
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt
index c9f5797ac..aa424c768 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/overlay/InputOverlay.kt
@@ -765,18 +765,20 @@ class InputOverlay(context: Context, attrs: AttributeSet?) : SurfaceView(context
765 // If we have API access, calculate the safe area to draw the overlay 765 // If we have API access, calculate the safe area to draw the overlay
766 var cutoutLeft = 0 766 var cutoutLeft = 0
767 var cutoutBottom = 0 767 var cutoutBottom = 0
768 val insets = context.windowManager.currentWindowMetrics.windowInsets.displayCutout 768 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
769 if (insets != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { 769 val insets = context.windowManager.currentWindowMetrics.windowInsets.displayCutout
770 if (insets.boundingRectTop.bottom != 0 && insets.boundingRectTop.bottom > maxY / 2) 770 if (insets != null) {
771 insets.boundingRectTop.bottom.toFloat() else maxY 771 if (insets.boundingRectTop.bottom != 0 && insets.boundingRectTop.bottom > maxY / 2)
772 if (insets.boundingRectRight.left != 0 && insets.boundingRectRight.left > maxX / 2) 772 insets.boundingRectTop.bottom.toFloat() else maxY
773 insets.boundingRectRight.left.toFloat() else maxX 773 if (insets.boundingRectRight.left != 0 && insets.boundingRectRight.left > maxX / 2)
774 774 insets.boundingRectRight.left.toFloat() else maxX
775 minX = insets.boundingRectLeft.right - insets.boundingRectLeft.left 775
776 minY = insets.boundingRectBottom.top - insets.boundingRectBottom.bottom 776 minX = insets.boundingRectLeft.right - insets.boundingRectLeft.left
777 777 minY = insets.boundingRectBottom.top - insets.boundingRectBottom.bottom
778 cutoutLeft = insets.boundingRectRight.right - insets.boundingRectRight.left 778
779 cutoutBottom = insets.boundingRectTop.top - insets.boundingRectTop.bottom 779 cutoutLeft = insets.boundingRectRight.right - insets.boundingRectRight.left
780 cutoutBottom = insets.boundingRectTop.top - insets.boundingRectTop.bottom
781 }
780 } 782 }
781 783
782 // This makes sure that if we have an inset on one side of the screen, we mirror it on 784 // This makes sure that if we have an inset on one side of the screen, we mirror it on
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 124f62f08..041d16f3a 100644
--- 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
@@ -284,10 +284,10 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
284 if (result == null) 284 if (result == null)
285 return@registerForActivityResult 285 return@registerForActivityResult
286 286
287 if (!FileUtil.hasExtension(result.toString(), "keys")) { 287 if (!FileUtil.hasExtension(result, "keys")) {
288 MessageDialogFragment.newInstance( 288 MessageDialogFragment.newInstance(
289 R.string.reading_keys_failure, 289 R.string.reading_keys_failure,
290 R.string.install_keys_failure_extension_description 290 R.string.install_prod_keys_failure_extension_description
291 ).show(supportFragmentManager, MessageDialogFragment.TAG) 291 ).show(supportFragmentManager, MessageDialogFragment.TAG)
292 return@registerForActivityResult 292 return@registerForActivityResult
293 } 293 }
@@ -379,10 +379,10 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
379 if (result == null) 379 if (result == null)
380 return@registerForActivityResult 380 return@registerForActivityResult
381 381
382 if (!FileUtil.hasExtension(result.toString(), "bin")) { 382 if (!FileUtil.hasExtension(result, "bin")) {
383 MessageDialogFragment.newInstance( 383 MessageDialogFragment.newInstance(
384 R.string.reading_keys_failure, 384 R.string.reading_keys_failure,
385 R.string.install_keys_failure_extension_description 385 R.string.install_amiibo_keys_failure_extension_description
386 ).show(supportFragmentManager, MessageDialogFragment.TAG) 386 ).show(supportFragmentManager, MessageDialogFragment.TAG)
387 return@registerForActivityResult 387 return@registerForActivityResult
388 } 388 }
@@ -467,4 +467,62 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
467 } 467 }
468 } 468 }
469 } 469 }
470
471 val installGameUpdate =
472 registerForActivityResult(ActivityResultContracts.OpenDocument()) {
473 if (it == null)
474 return@registerForActivityResult
475
476 IndeterminateProgressDialogFragment.newInstance(
477 this@MainActivity,
478 R.string.install_game_content
479 ) {
480 val result = NativeLibrary.installFileToNand(it.toString())
481 lifecycleScope.launch {
482 withContext(Dispatchers.Main) {
483 when (result) {
484 NativeLibrary.InstallFileToNandResult.Success -> {
485 Toast.makeText(
486 applicationContext,
487 R.string.install_game_content_success,
488 Toast.LENGTH_SHORT
489 ).show()
490 }
491
492 NativeLibrary.InstallFileToNandResult.SuccessFileOverwritten -> {
493 Toast.makeText(
494 applicationContext,
495 R.string.install_game_content_success_overwrite,
496 Toast.LENGTH_SHORT
497 ).show()
498 }
499
500 NativeLibrary.InstallFileToNandResult.ErrorBaseGame -> {
501 MessageDialogFragment.newInstance(
502 R.string.install_game_content_failure,
503 R.string.install_game_content_failure_base
504 ).show(supportFragmentManager, MessageDialogFragment.TAG)
505 }
506
507 NativeLibrary.InstallFileToNandResult.ErrorFilenameExtension -> {
508 MessageDialogFragment.newInstance(
509 R.string.install_game_content_failure,
510 R.string.install_game_content_failure_file_extension,
511 R.string.install_game_content_help_link
512 ).show(supportFragmentManager, MessageDialogFragment.TAG)
513 }
514
515 else -> {
516 MessageDialogFragment.newInstance(
517 R.string.install_game_content_failure,
518 R.string.install_game_content_failure_description,
519 R.string.install_game_content_help_link
520 ).show(supportFragmentManager, MessageDialogFragment.TAG)
521 }
522 }
523 }
524 }
525 return@newInstance result
526 }.show(supportFragmentManager, IndeterminateProgressDialogFragment.TAG)
527 }
470} 528}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.kt
index 593dad8d3..492b1ad91 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/FileUtil.kt
@@ -7,7 +7,9 @@ import android.content.Context
7import android.database.Cursor 7import android.database.Cursor
8import android.net.Uri 8import android.net.Uri
9import android.provider.DocumentsContract 9import android.provider.DocumentsContract
10import android.provider.OpenableColumns
10import androidx.documentfile.provider.DocumentFile 11import androidx.documentfile.provider.DocumentFile
12import org.yuzu.yuzu_emu.YuzuApplication
11import org.yuzu.yuzu_emu.model.MinimalDocumentFile 13import org.yuzu.yuzu_emu.model.MinimalDocumentFile
12import java.io.BufferedInputStream 14import java.io.BufferedInputStream
13import java.io.File 15import java.io.File
@@ -324,7 +326,25 @@ object FileUtil {
324 } 326 }
325 } 327 }
326 328
327 fun hasExtension(path: String, extension: String): Boolean { 329 fun hasExtension(path: String, extension: String): Boolean =
328 return path.substring(path.lastIndexOf(".") + 1).contains(extension) 330 path.substring(path.lastIndexOf(".") + 1).contains(extension)
331
332 fun hasExtension(uri: Uri, extension: String): Boolean {
333 val fileName: String?
334 val cursor = YuzuApplication.appContext.contentResolver.query(uri, null, null, null, null)
335 val nameIndex = cursor?.getColumnIndex(OpenableColumns.DISPLAY_NAME)
336 cursor?.moveToFirst()
337
338 if (nameIndex == null) {
339 return false
340 }
341
342 fileName = cursor.getString(nameIndex)
343 cursor.close()
344
345 if (fileName == null) {
346 return false
347 }
348 return fileName.substring(fileName.lastIndexOf(".") + 1).contains(extension)
329 } 349 }
330} 350}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt
index ba6b5783e..42b207618 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/utils/GameHelper.kt
@@ -6,7 +6,6 @@ package org.yuzu.yuzu_emu.utils
6import android.content.SharedPreferences 6import android.content.SharedPreferences
7import android.net.Uri 7import android.net.Uri
8import androidx.preference.PreferenceManager 8import androidx.preference.PreferenceManager
9import kotlinx.serialization.decodeFromString
10import kotlinx.serialization.encodeToString 9import kotlinx.serialization.encodeToString
11import kotlinx.serialization.json.Json 10import kotlinx.serialization.json.Json
12import org.yuzu.yuzu_emu.NativeLibrary 11import org.yuzu.yuzu_emu.NativeLibrary
@@ -83,7 +82,8 @@ object GameHelper {
83 NativeLibrary.getRegions(filePath), 82 NativeLibrary.getRegions(filePath),
84 filePath, 83 filePath,
85 gameId, 84 gameId,
86 NativeLibrary.getCompany(filePath) 85 NativeLibrary.getCompany(filePath),
86 NativeLibrary.isHomebrew(filePath)
87 ) 87 )
88 88
89 val addedTime = preferences.getLong(newGame.keyAddedToLibraryTime, 0L) 89 val addedTime = preferences.getLong(newGame.keyAddedToLibraryTime, 0L)
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index b87e04b3d..4091c23d1 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -13,6 +13,7 @@
13 13
14#include <android/api-level.h> 14#include <android/api-level.h>
15#include <android/native_window_jni.h> 15#include <android/native_window_jni.h>
16#include <core/loader/nro.h>
16 17
17#include "common/detached_tasks.h" 18#include "common/detached_tasks.h"
18#include "common/dynamic_library.h" 19#include "common/dynamic_library.h"
@@ -27,7 +28,10 @@
27#include "core/core.h" 28#include "core/core.h"
28#include "core/cpu_manager.h" 29#include "core/cpu_manager.h"
29#include "core/crypto/key_manager.h" 30#include "core/crypto/key_manager.h"
31#include "core/file_sys/card_image.h"
30#include "core/file_sys/registered_cache.h" 32#include "core/file_sys/registered_cache.h"
33#include "core/file_sys/submission_package.h"
34#include "core/file_sys/vfs.h"
31#include "core/file_sys/vfs_real.h" 35#include "core/file_sys/vfs_real.h"
32#include "core/frontend/applets/cabinet.h" 36#include "core/frontend/applets/cabinet.h"
33#include "core/frontend/applets/controller.h" 37#include "core/frontend/applets/controller.h"
@@ -93,12 +97,72 @@ public:
93 m_native_window = native_window; 97 m_native_window = native_window;
94 } 98 }
95 99
96 u32 ScreenRotation() const { 100 int InstallFileToNand(std::string filename) {
97 return m_screen_rotation; 101 const auto copy_func = [](const FileSys::VirtualFile& src, const FileSys::VirtualFile& dest,
98 } 102 std::size_t block_size) {
103 if (src == nullptr || dest == nullptr) {
104 return false;
105 }
106 if (!dest->Resize(src->GetSize())) {
107 return false;
108 }
109
110 using namespace Common::Literals;
111 std::vector<u8> buffer(1_MiB);
112
113 for (std::size_t i = 0; i < src->GetSize(); i += buffer.size()) {
114 const auto read = src->Read(buffer.data(), buffer.size(), i);
115 dest->Write(buffer.data(), read, i);
116 }
117 return true;
118 };
119
120 enum InstallResult {
121 Success = 0,
122 SuccessFileOverwritten = 1,
123 InstallError = 2,
124 ErrorBaseGame = 3,
125 ErrorFilenameExtension = 4,
126 };
127
128 m_system.SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
129 m_system.GetFileSystemController().CreateFactories(*m_vfs);
99 130
100 void SetScreenRotation(u32 screen_rotation) { 131 std::shared_ptr<FileSys::NSP> nsp;
101 m_screen_rotation = screen_rotation; 132 if (filename.ends_with("nsp")) {
133 nsp = std::make_shared<FileSys::NSP>(m_vfs->OpenFile(filename, FileSys::Mode::Read));
134 if (nsp->IsExtractedType()) {
135 return InstallError;
136 }
137 } else if (filename.ends_with("xci")) {
138 const auto xci =
139 std::make_shared<FileSys::XCI>(m_vfs->OpenFile(filename, FileSys::Mode::Read));
140 nsp = xci->GetSecurePartitionNSP();
141 } else {
142 return ErrorFilenameExtension;
143 }
144
145 if (!nsp) {
146 return InstallError;
147 }
148
149 if (nsp->GetStatus() != Loader::ResultStatus::Success) {
150 return InstallError;
151 }
152
153 const auto res = m_system.GetFileSystemController().GetUserNANDContents()->InstallEntry(
154 *nsp, true, copy_func);
155
156 switch (res) {
157 case FileSys::InstallResult::Success:
158 return Success;
159 case FileSys::InstallResult::OverwriteExisting:
160 return SuccessFileOverwritten;
161 case FileSys::InstallResult::ErrorBaseInstall:
162 return ErrorBaseGame;
163 default:
164 return InstallError;
165 }
102 } 166 }
103 167
104 void InitializeGpuDriver(const std::string& hook_lib_dir, const std::string& custom_driver_dir, 168 void InitializeGpuDriver(const std::string& hook_lib_dir, const std::string& custom_driver_dir,
@@ -161,14 +225,14 @@ public:
161 m_window = std::make_unique<EmuWindow_Android>(&m_input_subsystem, m_native_window, 225 m_window = std::make_unique<EmuWindow_Android>(&m_input_subsystem, m_native_window,
162 m_vulkan_library); 226 m_vulkan_library);
163 227
228 m_system.SetFilesystem(m_vfs);
229
164 // Initialize system. 230 // Initialize system.
165 auto android_keyboard = std::make_unique<SoftwareKeyboard::AndroidKeyboard>(); 231 auto android_keyboard = std::make_unique<SoftwareKeyboard::AndroidKeyboard>();
166 m_software_keyboard = android_keyboard.get(); 232 m_software_keyboard = android_keyboard.get();
167 m_system.SetShuttingDown(false); 233 m_system.SetShuttingDown(false);
168 m_system.ApplySettings(); 234 m_system.ApplySettings();
169 m_system.HIDCore().ReloadInputDevices(); 235 m_system.HIDCore().ReloadInputDevices();
170 m_system.SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
171 m_system.SetFilesystem(std::make_shared<FileSys::RealVfsFilesystem>());
172 m_system.SetAppletFrontendSet({ 236 m_system.SetAppletFrontendSet({
173 nullptr, // Amiibo Settings 237 nullptr, // Amiibo Settings
174 nullptr, // Controller Selector 238 nullptr, // Controller Selector
@@ -180,7 +244,8 @@ public:
180 std::move(android_keyboard), // Software Keyboard 244 std::move(android_keyboard), // Software Keyboard
181 nullptr, // Web Browser 245 nullptr, // Web Browser
182 }); 246 });
183 m_system.GetFileSystemController().CreateFactories(*m_system.GetFilesystem()); 247 m_system.SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
248 m_system.GetFileSystemController().CreateFactories(*m_vfs);
184 249
185 // Initialize account manager 250 // Initialize account manager
186 m_profile_manager = std::make_unique<Service::Account::ProfileManager>(); 251 m_profile_manager = std::make_unique<Service::Account::ProfileManager>();
@@ -281,6 +346,10 @@ public:
281 return GetRomMetadata(path).icon; 346 return GetRomMetadata(path).icon;
282 } 347 }
283 348
349 bool GetIsHomebrew(const std::string& path) {
350 return GetRomMetadata(path).isHomebrew;
351 }
352
284 void ResetRomMetadata() { 353 void ResetRomMetadata() {
285 m_rom_metadata_cache.clear(); 354 m_rom_metadata_cache.clear();
286 } 355 }
@@ -348,6 +417,7 @@ private:
348 struct RomMetadata { 417 struct RomMetadata {
349 std::string title; 418 std::string title;
350 std::vector<u8> icon; 419 std::vector<u8> icon;
420 bool isHomebrew;
351 }; 421 };
352 422
353 RomMetadata GetRomMetadata(const std::string& path) { 423 RomMetadata GetRomMetadata(const std::string& path) {
@@ -360,11 +430,17 @@ private:
360 430
361 RomMetadata CacheRomMetadata(const std::string& path) { 431 RomMetadata CacheRomMetadata(const std::string& path) {
362 const auto file = Core::GetGameFileFromPath(m_vfs, path); 432 const auto file = Core::GetGameFileFromPath(m_vfs, path);
363 const auto loader = Loader::GetLoader(EmulationSession::GetInstance().System(), file, 0, 0); 433 auto loader = Loader::GetLoader(EmulationSession::GetInstance().System(), file, 0, 0);
364 434
365 RomMetadata entry; 435 RomMetadata entry;
366 loader->ReadTitle(entry.title); 436 loader->ReadTitle(entry.title);
367 loader->ReadIcon(entry.icon); 437 loader->ReadIcon(entry.icon);
438 if (loader->GetFileType() == Loader::FileType::NRO) {
439 auto loader_nro = dynamic_cast<Loader::AppLoader_NRO*>(loader.get());
440 entry.isHomebrew = loader_nro->IsHomebrew();
441 } else {
442 entry.isHomebrew = false;
443 }
368 444
369 m_rom_metadata_cache[path] = entry; 445 m_rom_metadata_cache[path] = entry;
370 446
@@ -388,14 +464,13 @@ private:
388 // Window management 464 // Window management
389 std::unique_ptr<EmuWindow_Android> m_window; 465 std::unique_ptr<EmuWindow_Android> m_window;
390 ANativeWindow* m_native_window{}; 466 ANativeWindow* m_native_window{};
391 u32 m_screen_rotation{};
392 467
393 // Core emulation 468 // Core emulation
394 Core::System m_system; 469 Core::System m_system;
395 InputCommon::InputSubsystem m_input_subsystem; 470 InputCommon::InputSubsystem m_input_subsystem;
396 Common::DetachedTasks m_detached_tasks; 471 Common::DetachedTasks m_detached_tasks;
397 Core::PerfStatsResults m_perf_stats{}; 472 Core::PerfStatsResults m_perf_stats{};
398 std::shared_ptr<FileSys::RealVfsFilesystem> m_vfs; 473 std::shared_ptr<FileSys::VfsFilesystem> m_vfs;
399 Core::SystemResultStatus m_load_result{Core::SystemResultStatus::ErrorNotInitialized}; 474 Core::SystemResultStatus m_load_result{Core::SystemResultStatus::ErrorNotInitialized};
400 bool m_is_running{}; 475 bool m_is_running{};
401 SoftwareKeyboard::AndroidKeyboard* m_software_keyboard{}; 476 SoftwareKeyboard::AndroidKeyboard* m_software_keyboard{};
@@ -414,10 +489,6 @@ private:
414 489
415} // Anonymous namespace 490} // Anonymous namespace
416 491
417u32 GetAndroidScreenRotation() {
418 return EmulationSession::GetInstance().ScreenRotation();
419}
420
421static Core::SystemResultStatus RunEmulation(const std::string& filepath) { 492static Core::SystemResultStatus RunEmulation(const std::string& filepath) {
422 Common::Log::Initialize(); 493 Common::Log::Initialize();
423 Common::Log::SetColorConsoleBackendEnabled(true); 494 Common::Log::SetColorConsoleBackendEnabled(true);
@@ -461,19 +532,18 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_surfaceDestroyed(JNIEnv* env,
461 EmulationSession::GetInstance().SurfaceChanged(); 532 EmulationSession::GetInstance().SurfaceChanged();
462} 533}
463 534
464void Java_org_yuzu_yuzu_1emu_NativeLibrary_notifyOrientationChange(JNIEnv* env,
465 [[maybe_unused]] jclass clazz,
466 jint layout_option,
467 jint rotation) {
468 return EmulationSession::GetInstance().SetScreenRotation(static_cast<u32>(rotation));
469}
470
471void Java_org_yuzu_yuzu_1emu_NativeLibrary_setAppDirectory(JNIEnv* env, 535void Java_org_yuzu_yuzu_1emu_NativeLibrary_setAppDirectory(JNIEnv* env,
472 [[maybe_unused]] jclass clazz, 536 [[maybe_unused]] jclass clazz,
473 jstring j_directory) { 537 jstring j_directory) {
474 Common::FS::SetAppDirectory(GetJString(env, j_directory)); 538 Common::FS::SetAppDirectory(GetJString(env, j_directory));
475} 539}
476 540
541int Java_org_yuzu_yuzu_1emu_NativeLibrary_installFileToNand(JNIEnv* env,
542 [[maybe_unused]] jclass clazz,
543 jstring j_file) {
544 return EmulationSession::GetInstance().InstallFileToNand(GetJString(env, j_file));
545}
546
477void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeGpuDriver( 547void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeGpuDriver(
478 JNIEnv* env, [[maybe_unused]] jclass clazz, jstring hook_lib_dir, jstring custom_driver_dir, 548 JNIEnv* env, [[maybe_unused]] jclass clazz, jstring hook_lib_dir, jstring custom_driver_dir,
479 jstring custom_driver_name, jstring file_redirect_dir) { 549 jstring custom_driver_name, jstring file_redirect_dir) {
@@ -662,6 +732,12 @@ jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getCompany([[maybe_unused]] JNIEnv
662 return env->NewStringUTF(""); 732 return env->NewStringUTF("");
663} 733}
664 734
735jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_isHomebrew([[maybe_unused]] JNIEnv* env,
736 [[maybe_unused]] jclass clazz,
737 [[maybe_unused]] jstring j_filename) {
738 return EmulationSession::GetInstance().GetIsHomebrew(GetJString(env, j_filename));
739}
740
665void Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeEmulation 741void Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeEmulation
666 [[maybe_unused]] (JNIEnv* env, [[maybe_unused]] jclass clazz) { 742 [[maybe_unused]] (JNIEnv* env, [[maybe_unused]] jclass clazz) {
667 // Create the default config.ini. 743 // Create the default config.ini.
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 100644
index 000000000..0f6adfdb8
--- /dev/null
+++ b/src/android/app/src/main/res/drawable/ic_system_update_alt.xml
@@ -0,0 +1,9 @@
1<vector xmlns:android="http://schemas.android.com/apk/res/android"
2 android:width="48dp"
3 android:height="48dp"
4 android:viewportWidth="960"
5 android:viewportHeight="960">
6 <path
7 android:fillColor="#FF000000"
8 android:pathData="M140,800q-24,0 -42,-18t-18,-42v-520q0,-24 18,-42t42,-18h250v60L140,220v520h680v-520L570,220v-60h250q24,0 42,18t18,42v520q0,24 -18,42t-42,18L140,800ZM480,615L280,415l43,-43 127,127v-339h60v339l127,-127 43,43 -200,200Z"/>
9</vector>
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 100644
index 000000000..795320e3e
--- /dev/null
+++ b/src/android/app/src/main/res/values-de/strings.xml
@@ -0,0 +1,335 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Diese Software kann Spiele für die Nintendo Switch abspielen. Keine Spiele oder Spielekeys sind enthalten.&lt;br /&gt;&lt;br /&gt;Bevor du beginnst, bitte halte deine <![CDATA[<b> prod.keys </b>]]> auf deinem Gerät bereit. .&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">Mehr Infos</a>]]></string>
5 <string name="emulation_notification_channel_name">Emulation ist aktiv</string>
6 <string name="emulation_notification_channel_description">Zeigt eine dauerhafte Benachrichtigung an, wenn die Emulation läuft.</string>
7 <string name="emulation_notification_running">yuzu läuft</string>
8 <string name="notice_notification_channel_name">Hinweise und Fehler</string>
9 <string name="notice_notification_channel_description">Zeigt Benachrichtigungen an, wenn etwas schief läuft.</string>
10 <string name="notification_permission_not_granted">Berechtigung für Benachrichtigungen nicht erlaubt!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Willkommen!</string>
14 <string name="welcome_description">Erfahre wie man &lt;b>yuzu&lt;/b> einrichtet und beginne mit der Emulation.</string>
15 <string name="get_started">Erste Schritte</string>
16 <string name="keys">Schlüssel</string>
17 <string name="keys_description">Wähle deine &lt;b>prod.keys&lt;/b> Datei mit dem Button unten aus.</string>
18 <string name="select_keys">Schlüssel auswählen</string>
19 <string name="games">Spiele</string>
20 <string name="games_description">Wähle mit dem Knopf unten den &lt;b>Spiele&lt;/b>-Ordner aus.</string>
21 <string name="done">Fertig</string>
22 <string name="done_description">Wir können loslegen.\nViel Spaß!</string>
23 <string name="text_continue">Fortsetzen</string>
24 <string name="next">Weiter</string>
25 <string name="back">Zurück</string>
26 <string name="add_games">Spiele hinzufügen</string>
27 <string name="add_games_description">Spieleverzeichnis auswählen</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Spiele</string>
31 <string name="home_search">Suche</string>
32 <string name="home_settings">Einstellungen</string>
33 <string name="empty_gamelist">Es wurden keine Dateien gefunden oder es wurde noch kein Spielverzeichnis ausgewählt.</string>
34 <string name="search_and_filter_games">Spiele suchen und filtern</string>
35 <string name="select_games_folder">Spieleverzeichnis auswählen</string>
36 <string name="select_games_folder_description">Erlaubt yuzu die Spieleliste zu füllen</string>
37 <string name="add_games_warning">Auswahl des Spieleverzeichnisses überspringen?</string>
38 <string name="add_games_warning_description">Spiele werden in der Spieleliste nicht angezeigt, wenn kein Ordner ausgewählt ist.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Spiele suchen</string>
41 <string name="games_dir_selected">Spieleverzeichnis ausgewählt</string>
42 <string name="install_prod_keys">prod.keys installieren</string>
43 <string name="install_prod_keys_description">Zum Entschlüsseln von Spielen benötigt</string>
44 <string name="install_prod_keys_warning">Hinzufügen der Schlüssel überspringen?</string>
45 <string name="install_prod_keys_warning_description">Für die Emulation von Spielen sind gültige Schlüssel erforderlich. Wenn du fortfährst, funktionieren nur Homebrew-Anwendungen.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Benachrichtigungen</string>
48 <string name="notifications_description">Erteile mit dem Knopf unten die Berechtigung, Benachrichtigungen zu senden.</string>
49 <string name="give_permission">Berechtigung erteilen</string>
50 <string name="notification_warning_description">yuzu wird dich nicht über wichtige Informationen benachrichtigen können.</string>
51 <string name="permission_denied">Zugriff verweigert</string>
52 <string name="permission_denied_description">Du hast diese Berechtigung zu oft verweigert und musst sie nun manuell in den Systemeinstellungen erteilen.</string>
53 <string name="about">Über</string>
54 <string name="about_description">Build-Version, Credits und mehr</string>
55 <string name="warning_help">Hilfe</string>
56 <string name="warning_skip">Überspringen</string>
57 <string name="warning_cancel">Abbrechen</string>
58 <string name="install_amiibo_keys">Amiibo-Schlüssel installieren</string>
59 <string name="install_amiibo_keys_description">Benötigt um Amiibos im Spiel zu verwenden</string>
60 <string name="invalid_keys_file">Ungültige Schlüsseldatei ausgewählt</string>
61 <string name="install_keys_success">Schlüssel erfolgreich installiert</string>
62 <string name="reading_keys_failure">Fehler beim Lesen der Schlüssel</string>
63 <string name="invalid_keys_error">Ungültige Schlüssel</string>
64 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
65 <string name="install_gpu_driver">GPU-Treiber installieren</string>
66 <string name="install_gpu_driver_description">Alternative Treiber für eventuell bessere Leistung oder Genauigkeit installieren</string>
67 <string name="advanced_settings">Erweiterte Einstellungen</string>
68 <string name="settings_description">Emulatoreinstellungen konfigurieren</string>
69 <string name="search_recently_played">Kürzlich gespielt</string>
70 <string name="search_recently_added">Kürzlich hinzugefügt</string>
71 <string name="search_retail">Spiele</string>
72 <string name="search_homebrew">Homebrew</string>
73 <string name="open_user_folder">yuzu-Ordner öffnen</string>
74 <string name="open_user_folder_description">yuzu\'s interne Dateien verwalten</string>
75 <string name="theme_and_color_description">Das Aussehen der App ändern</string>
76 <string name="no_file_manager">Kein Dateimanager gefunden</string>
77 <string name="notification_no_directory_link">yuzu-Verzeichnis konnte nicht geöffnet werden</string>
78 <string name="notification_no_directory_link_description">Bitte suche den Benutzerordner manuell über die Seitenleiste des Dateimanagers.</string>
79 <string name="manage_save_data">Speicherdaten verwalten</string>
80 <string name="manage_save_data_description">Speicherdaten gefunden. Bitte wähle unten eine Option aus.</string>
81 <string name="import_export_saves_description">Speicherdaten importieren oder exportieren</string>
82 <string name="import_export_saves_no_profile">Keine Speicherdaten gefunden. Bitte starte ein Spiel und versuche es erneut.</string>
83 <string name="save_file_imported_success">Erfolgreich importiert</string>
84 <string name="save_file_invalid_zip_structure">Ungültige Speicherverzeichnisstruktur</string>
85 <string name="save_file_invalid_zip_structure_description">Der erste Unterordnername muss die Titel-ID des Spiels sein.</string>
86 <string name="import_saves">Importieren</string>
87 <string name="export_saves">Exportieren</string>
88
89 <!-- About screen strings -->
90 <string name="gaia_is_not_real">Gaia ist nicht real</string>
91 <string name="copied_to_clipboard">In die Zwischenablage kopiert</string>
92 <string name="about_app_description">Ein quelloffener Switch-Emulator</string>
93 <string name="contributors">Beitragende</string>
94 <string name="contributors_description">Gemacht mit \u2764 vom yuzu Team</string>
95 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
96 <string name="build">Build</string>
97 <string name="support_link">https://discord.gg/u77vRWY</string>
98 <string name="website_link">https://yuzu-emu.org/</string>
99 <string name="github_link">https://github.com/yuzu-emu</string>
100
101 <!-- Early access upgrade strings -->
102 <string name="early_access">Early Access</string>
103 <string name="get_early_access">Early Access bekommen</string>
104 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
105 <string name="get_early_access_description">Neueste Features, frühzeitiger Zugriff auf Updates und mehr</string>
106 <string name="early_access_benefits">Early Access Vorteile</string>
107 <string name="cutting_edge_features">Neueste Features</string>
108 <string name="early_access_updates">Früherer Zugriff auf Updates</string>
109 <string name="no_manual_installation">Keine manuelle Installation</string>
110 <string name="prioritized_support">Priorisierte Unterstützung</string>
111 <string name="our_eternal_gratitude">Unsere ewige Dankbarkeit</string>
112 <string name="are_you_interested">Bist du interessiert?</string>
113
114 <!-- General settings strings -->
115 <string name="frame_limit_enable">Geschwindigkeitsbegrenzung aktivieren</string>
116 <string name="frame_limit_enable_description">Wenn aktiviert, wird die Emulationsgeschwindigkeit auf einen Prozentsatz der normalen Geschwindigkeit begrenzt.</string>
117 <string name="frame_limit_slider">Geschwindkeitsbegrenzung in Prozent</string>
118 <string name="frame_limit_slider_description">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.</string>
119 <string name="cpu_accuracy">CPU-Genauigkeit</string>
120
121 <!-- System settings strings -->
122 <string name="use_docked_mode">Dock-Modus</string>
123 <string name="use_docked_mode_description">Emuliert im Dock-Modus, was die Auflösung verbessert, aber die Leistung senkt.</string>
124 <string name="emulated_region">Emulierte Region</string>
125 <string name="emulated_language">Emulierte Sprache</string>
126 <string name="select_rtc_date">RTC-Datum auswählen</string>
127 <string name="select_rtc_time">RTC-Zeit auswählen</string>
128 <string name="use_custom_rtc">Benutzerdefinierte RTC aktivieren</string>
129 <string name="use_custom_rtc_description">Mit dieser Einstellung kann eine benutzerdefinierte Echtzeituhr unabhängig von der aktuellen Systemzeit verwendet werden.</string>
130 <string name="set_custom_rtc">Benutzerdefinierte RTC einstellen</string>
131
132 <!-- Graphics settings strings -->
133 <string name="renderer_api">API</string>
134 <string name="renderer_accuracy">Genauigkeitsstufe</string>
135 <string name="renderer_resolution">Auflösung</string>
136 <string name="renderer_vsync">VSync-Modus</string>
137 <string name="renderer_aspect_ratio">Seitenverhältnis</string>
138 <string name="renderer_scaling_filter">Fensteranpassungsfilter</string>
139 <string name="renderer_anti_aliasing">Kantenglättungs-Methode</string>
140 <string name="renderer_force_max_clock">Maximale Taktfrequenz erzwingen (nur Adreno)</string>
141 <string name="renderer_force_max_clock_description">Erzwingt den Betrieb der GPU mit der maximal möglichen Taktfrequenz (Temperaturbeschränkungen werden weiterhin angewendet).</string>
142 <string name="renderer_asynchronous_shaders">Asynchrone Shader nutzen</string>
143 <string name="renderer_asynchronous_shaders_description">Kompiliert Shader asynchron, was Ruckler reduziert, aber zu Glitches führen kann.</string>
144 <string name="renderer_debug">Grafik-Debugging aktivieren</string>
145 <string name="renderer_debug_description">Wenn aktiviert, schaltet die Grafik-API in einen langsameren Debugging-Modus.</string>
146 <string name="use_disk_shader_cache">Nutze Festplatten-Shader-Cache</string>
147 <string name="use_disk_shader_cache_description">Ruckeln wird durch das Speichern und Laden von generierten Shadern auf der Festplatte reduziert.</string>
148
149 <!-- Audio settings strings -->
150 <string name="audio_volume">Lautstärke</string>
151 <string name="audio_volume_description">Legt die Lautstärke der Audioausgabe fest.</string>
152
153 <!-- Miscellaneous -->
154 <string name="slider_default">Standard</string>
155 <string name="ini_saved">Einstellungen gespeichert</string>
156 <string name="gameid_saved">Einstellungen für %1$s gespeichert</string>
157 <string name="error_saving">Fehler beim Speichern von %1$s.ini: %2$s</string>
158 <string name="loading">Lädt...</string>
159 <string name="reset_setting_confirmation">Möchtest du diese Einstellung auf den Standardwert zurücksetzen?</string>
160 <string name="reset_to_default">Auf Standard zurücksetzen</string>
161 <string name="reset_all_settings">Alle Einstellungen zurücksetzen?</string>
162 <string name="reset_all_settings_description">Alle erweiterten Einstellungen werden auf ihren Standardwert zurückgesetzt. Dies kann nicht rückgängig gemacht werden.</string>
163 <string name="settings_reset">Einstellungen zurückgesetzt</string>
164 <string name="close">Schließen</string>
165 <string name="learn_more">Mehr erfahren</string>
166
167 <!-- GPU driver installation -->
168 <string name="select_gpu_driver">GPU-Treiber auswählen</string>
169 <string name="select_gpu_driver_title">Möchtest du deinen aktuellen GPU-Treiber ersetzen?</string>
170 <string name="select_gpu_driver_install">Installieren</string>
171 <string name="select_gpu_driver_default">Standard</string>
172 <string name="select_gpu_driver_install_success">%s wurde installiert</string>
173 <string name="select_gpu_driver_use_default">Standard GPU-Treiber wird verwendet</string>
174 <string name="select_gpu_driver_error">Ungültiger Treiber ausgewählt, Standard-Treiber wird verwendet!</string>
175 <string name="system_gpu_driver">System GPU-Treiber</string>
176 <string name="installing_driver">Treiber wird installiert...</string>
177
178 <!-- Preferences Screen -->
179 <string name="preferences_advanced_settings">Erweiterte Einstellungen</string>
180 <string name="preferences_settings">Einstellungen</string>
181 <string name="preferences_general">Allgemein</string>
182 <string name="preferences_system">System</string>
183 <string name="preferences_graphics">Grafik</string>
184 <string name="preferences_audio">Audio</string>
185 <string name="preferences_theme">Theme und Farbe</string>
186
187 <!-- ROM loading errors -->
188 <string name="loader_error_encrypted">Das ROM ist verschlüsselt</string>
189 <string name="loader_error_encrypted_keys_description"><![CDATA[Bitte stelle sicher dass die <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> Datei installiert ist, damit Spiele entschlüsselt werden können.]]></string>
190 <string name="loader_error_video_core">Bei der Initialisierung des Videokerns ist ein Fehler aufgetreten</string>
191 <string name="loader_error_video_core_description">Dies wird normalerweise durch einen inkompatiblen GPU-Treiber verursacht. Die Installation eines passenden GPU-Treibers kann dieses Problem beheben.</string>
192 <string name="loader_error_invalid_format">ROM konnte nicht geladen werden</string>
193 <string name="loader_error_file_not_found">ROM-Datei existiert nicht</string>
194
195 <!-- Emulation Menu -->
196 <string name="emulation_exit">Emulation beenden</string>
197 <string name="emulation_done">Fertig</string>
198 <string name="emulation_fps_counter">FPS Zähler</string>
199 <string name="emulation_toggle_controls">Steuerung umschalten</string>
200 <string name="emulation_rel_stick_center">Relative Stick-Mitte</string>
201 <string name="emulation_dpad_slide">DPad Slide</string>
202 <string name="emulation_haptics">Haptik</string>
203 <string name="emulation_show_overlay">Overlay anzeigen</string>
204 <string name="emulation_toggle_all">Alle umschalten</string>
205 <string name="emulation_control_adjust">Overlay anpassen</string>
206 <string name="emulation_control_scale">Größe</string>
207 <string name="emulation_control_opacity">Transparenz</string>
208 <string name="emulation_touch_overlay_reset">Overlay zurücksetzen</string>
209 <string name="emulation_touch_overlay_edit">Overlay bearbeiten</string>
210 <string name="emulation_pause">Emulation pausieren</string>
211 <string name="emulation_unpause">Emulation fortsetzen</string>
212 <string name="emulation_input_overlay">Overlay-Optionen</string>
213 <string name="emulation_game_loading">Spiel lädt…</string>
214
215 <string name="load_settings">Lädt Einstellungen...</string>
216
217 <!-- Software keyboard -->
218 <string name="software_keyboard">Software-Tastatur</string>
219
220 <!-- Errors and warnings -->
221 <string name="abort_button">Abbrechen</string>
222 <string name="continue_button">Fortsetzen</string>
223 <string name="system_archive_not_found">Systemarchiv nicht gefunden</string>
224 <string name="system_archive_general">Ein System-Archiv</string>
225 <string name="save_load_error">Speicher-/Ladefehler</string>
226 <string name="fatal_error">Schwerwiegender Fehler</string>
227 <string name="fatal_error_message">Ein schwerwiegender Fehler ist aufgetreten. Einzelheiten wurden im Log protokolliert.\nDas Fortsetzen der Emulation kann zu Abstürzen und Bugs führen.</string>
228 <string name="performance_warning">Das Deaktivieren dieser Einstellung führt zu erheblichen Leistungsverlusten! Für ein optimales Erlebnis wird empfohlen, sie aktiviert zu lassen.</string>
229
230 <!-- Region Names -->
231 <string name="region_auto">Automatisch auswählen</string>
232 <string name="region_japan">Japan</string>
233 <string name="region_usa">USA</string>
234 <string name="region_europe">Europa</string>
235 <string name="region_australia">Australien</string>
236 <string name="region_china">China</string>
237 <string name="region_korea">Korea</string>
238 <string name="region_taiwan">Taiwan</string>
239
240 <!-- Language Names -->
241 <string name="language_japanese">Japanisch (日本語)</string>
242 <string name="language_english">Englisch</string>
243 <string name="language_french">Französisch (Français)</string>
244 <string name="langauge_german">Deutsch (German)</string>
245 <string name="language_italian">Italienisch (Italiano)</string>
246 <string name="language_spanish">Spanisch (Español)</string>
247 <string name="language_chinese">Chinesisch (简体中文)</string>
248 <string name="language_korean">Koreanisch (한국어)</string>
249 <string name="language_dutch">Niederländisch (Nederlands)</string>
250 <string name="language_portuguese">Portugiesisch (Português)</string>
251 <string name="language_russian">Russisch (Русский)</string>
252 <string name="language_taiwanese">Taiwanesisch (台湾)</string>
253 <string name="language_british_english">Britisches Englisch</string>
254 <string name="language_canadian_french">Kanadisches Französisch (Français canadien)</string>
255 <string name="language_latin_american_spanish">Lateinamerikanisches Spanisch (Español latinoamericano)</string>
256 <string name="language_simplified_chinese">Vereinfachtes Chinesisch (简体中文)</string>
257 <string name="language_traditional_chinese">Traditionelles Chinesisch (正體中文)</string>
258 <string name="language_brazilian_portuguese">Brasilianisches Portugiesisch (Português do Brasil)</string>
259
260 <!-- Renderer APIs -->
261 <string name="renderer_vulkan">Vulkan</string>
262 <string name="renderer_none">Keiner</string>
263
264 <!-- Renderer Accuracy -->
265 <string name="renderer_accuracy_normal">Normal</string>
266 <string name="renderer_accuracy_high">Hoch</string>
267 <string name="renderer_accuracy_extreme">Extrem (Langsam)</string>
268
269 <!-- Resolutions -->
270 <string name="resolution_half">0.5X (360p/540p)</string>
271 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
272 <string name="resolution_one">1X (720p/1080p)</string>
273 <string name="resolution_two">2X (1440p/2160p) (Langsam)</string>
274 <string name="resolution_three">3X (2160p/3240p) (Langsam)</string>
275 <string name="resolution_four">4X (2880p/4320p) (Langsam)</string>
276
277 <!-- Renderer VSync -->
278 <string name="renderer_vsync_immediate">Direkt (Aus)</string>
279 <string name="renderer_vsync_mailbox">Mailbox</string>
280 <string name="renderer_vsync_fifo">FIFO (An)</string>
281 <string name="renderer_vsync_fifo_relaxed">FIFO Relaxed</string>
282
283 <!-- Scaling Filters -->
284 <string name="scaling_filter_nearest_neighbor">Nächste-Nachbarn</string>
285 <string name="scaling_filter_bilinear">Bilinear</string>
286 <string name="scaling_filter_bicubic">Bikubisch</string>
287 <string name="scaling_filter_gaussian">Gaussian</string>
288 <string name="scaling_filter_scale_force">ScaleForce</string>
289 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
290
291 <!-- Anti-Aliasing -->
292 <string name="anti_aliasing_none">Keiner</string>
293 <string name="anti_aliasing_fxaa">FXAA</string>
294 <string name="anti_aliasing_smaa">SMAA</string>
295
296 <!-- Aspect Ratios -->
297 <string name="ratio_default">Standard (16:9)</string>
298 <string name="ratio_force_four_three">4:3 erzwingen</string>
299 <string name="ratio_force_twenty_one_nine">21:9 erzwingen</string>
300 <string name="ratio_force_sixteen_ten">Erzwinge 16:10</string>
301 <string name="ratio_stretch">Auf Fenster anpassen</string>
302
303 <!-- CPU Accuracy -->
304 <string name="cpu_accuracy_auto">Auto</string>
305 <string name="cpu_accuracy_accurate">Akkurat</string>
306 <string name="cpu_accuracy_unsafe">Unsicher</string>
307 <string name="cpu_accuracy_paranoid">Paranoid (Langsam)</string>
308
309 <!-- Gamepad Buttons -->
310 <string name="gamepad_d_pad">Steuerkreuz</string>
311 <string name="gamepad_left_stick">Linker Analogstick</string>
312 <string name="gamepad_right_stick">Rechter Analogstick</string>
313 <string name="gamepad_home">Home</string>
314 <string name="gamepad_screenshot">Screenshot</string>
315
316 <!-- Disk shader cache -->
317 <string name="preparing_shaders">Shader werden vorbereitet</string>
318 <string name="building_shaders">Shader werden erstellt</string>
319
320 <!-- Theme options -->
321 <string name="change_app_theme">App-Theme ändern</string>
322 <string name="theme_default">Standard</string>
323 <string name="theme_material_you">Material You</string>
324
325 <!-- Theme Modes -->
326 <string name="change_theme_mode">Theme-Modus ändern</string>
327 <string name="theme_mode_follow_system">System folgen</string>
328 <string name="theme_mode_light">Hell</string>
329 <string name="theme_mode_dark">Dunkel</string>
330
331 <!-- Black backgrounds theme -->
332 <string name="use_black_backgrounds">Schwarze Hintergünde verwenden</string>
333 <string name="use_black_backgrounds_description">Bei Verwendung des dunklen Themes, schwarze Hintergründe verwenden.</string>
334
335</resources>
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 100644
index 000000000..a7b4ebef4
--- /dev/null
+++ b/src/android/app/src/main/res/values-es/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Este software ejecuta juegos para la videoconsola Nintendo Switch. Los videojuegos o keys no vienen incluidos.&lt;br /&gt;&lt;br /&gt;Antes de empezar, por favor, localice el archivo <![CDATA[<b> prod.keys </b>]]>en el almacenamiento de su dispositivo..&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">Saber más</a>]]></string>
5 <string name="emulation_notification_channel_name">Emulación activa</string>
6 <string name="emulation_notification_channel_description">Muestra una notificación persistente cuando la emulación está activa.</string>
7 <string name="emulation_notification_running">yuzu esta ejecutándose</string>
8 <string name="notice_notification_channel_name">Avisos y errores</string>
9 <string name="notice_notification_channel_description">Mostrar notificaciones cuándo algo vaya mal.</string>
10 <string name="notification_permission_not_granted">¡Permisos de notificación no concedidos!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">¡Bienvenido!</string>
14 <string name="welcome_description">Aprende cómo configurar &lt;b>yuzu&lt;/b> y avanza a la emulación.</string>
15 <string name="get_started">Empezar</string>
16 <string name="keys">Claves</string>
17 <string name="keys_description">Selecciona el archivo &lt;b>prod.keys&lt;/b> utilizando el botón de abajo.</string>
18 <string name="select_keys">Seleccionar las claves</string>
19 <string name="games">Juegos</string>
20 <string name="games_description">Selecciona la carpeta &lt;b>Games&lt;/b> utilizando el botón de abajo</string>
21 <string name="done">Hecho</string>
22 <string name="done_description">Todo listo.\n¡Disfrute de sus juegos!</string>
23 <string name="text_continue">Continuar</string>
24 <string name="next">Siguiente</string>
25 <string name="back">Atrás</string>
26 <string name="add_games">Añadir Juegos</string>
27 <string name="add_games_description">Selecciona la carpeta de juegos</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Juegos</string>
31 <string name="home_search">Buscar</string>
32 <string name="home_settings">Ajustes</string>
33 <string name="empty_gamelist">No se ha encontrado ningún archivo o aún no se ha seleccionado ningún directorio de juegos.</string>
34 <string name="search_and_filter_games">Busca y filtra juegos</string>
35 <string name="select_games_folder">Seleccionar carpeta de juegos</string>
36 <string name="select_games_folder_description">Permite que yuzu llene la lista de juegos</string>
37 <string name="add_games_warning">¿Omitir la selección de la carpeta de juegos?</string>
38 <string name="add_games_warning_description">No se mostrará ningún juego si no se ha seleccionado una carpeta de juegos.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Buscar Juegos</string>
41 <string name="games_dir_selected">Directorio de juegos seleccionado</string>
42 <string name="install_prod_keys">Instalar prod.keys</string>
43 <string name="install_prod_keys_description">Requerido para descifrar juegos</string>
44 <string name="install_prod_keys_warning">¿Omitir agregar claves?</string>
45 <string name="install_prod_keys_warning_description">Se requieren claves válidas para emular juegos. Solo las aplicaciones homebrew funcionarán si continúas.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Notificaciones</string>
48 <string name="notifications_description">Otorgue el permiso de notificación con el botón de abajo.</string>
49 <string name="give_permission">Conceder permiso</string>
50 <string name="notification_warning">¿Omitir conceder el permiso de notificación?</string>
51 <string name="notification_warning_description">yuzu no podrá notificarte información importante.</string>
52 <string name="permission_denied">Permiso denegado</string>
53 <string name="permission_denied_description">Negó este permiso demasiadas veces y ahora debe otorgarlo manualmente en la configuración del sistema.</string>
54 <string name="about">Acerca de</string>
55 <string name="about_description">Versión, créditos y más</string>
56 <string name="warning_help">Ayuda</string>
57 <string name="warning_skip">Siguiente</string>
58 <string name="warning_cancel">Cancelar</string>
59 <string name="install_amiibo_keys">Instalar clave de Amiiboo</string>
60 <string name="install_amiibo_keys_description">Necesario para usar Amiibo en el juego</string>
61 <string name="invalid_keys_file">Archivo de claves inválido seleccionado</string>
62 <string name="install_keys_success">Claves instaladas correctamente</string>
63 <string name="reading_keys_failure">Error al leer las claves de cifrado</string>
64 <string name="install_keys_failure_extension_description">
65 1. Verifique que sus claves acaben con la extensión .keys.\n\n
66 2. Las claves no deben de estar almacenadas en la carpeta Descargas.\n\n
67 Resuelva el/los problema(s) y vuelva a intentarlo.
68 </string>
69 <string name="invalid_keys_error">Claves de cifrado no válidas</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">El archivo seleccionado es incorrecto o está corrupto. Vuelva a redumpear sus claves.</string>
72 <string name="install_gpu_driver">Instalar driver de GPU</string>
73 <string name="install_gpu_driver_description">Instale drivers alternativos para obtener un rendimiento o una precisión potencialmente mejores</string>
74 <string name="advanced_settings">Opciones avanzadas</string>
75 <string name="settings_description">Configurar las opciones del emulador</string>
76 <string name="search_recently_played">Jugado recientemente</string>
77 <string name="search_recently_added">Añadido recientemente</string>
78 <string name="search_retail">Juegos</string>
79 <string name="search_homebrew">Homebrew</string>
80 <string name="open_user_folder">Abrir la carpeta de yuzu</string>
81 <string name="open_user_folder_description">Administrar los archivos internos de yuzu</string>
82 <string name="theme_and_color_description">Modificar la apariencia de la aplicación</string>
83 <string name="no_file_manager">Explorador de archivos no encontrado</string>
84 <string name="notification_no_directory_link">No se pudo abrir la carpeta yuzu</string>
85 <string name="notification_no_directory_link_description">Por favor, busque la carpeta user con el panel lateral del explorador de archivos de forma manual.</string>
86 <string name="manage_save_data">Administrar datos de guardado</string>
87 <string name="manage_save_data_description">Guardar los datos encontrados. Por favor, seleccione una opción de abajo.</string>
88 <string name="import_export_saves_description">Importar o exportar archivos de guardado</string>
89 <string name="import_export_saves_no_profile">No se han encontrado datos de guardado. Por favor, ejecute un juego y vuelva a intentarlo.</string>
90 <string name="save_file_imported_success">Importado correctamente</string>
91 <string name="save_file_invalid_zip_structure">Estructura del directorio de guardado no válido</string>
92 <string name="save_file_invalid_zip_structure_description">El nombre de la primera subcarpeta debe ser el Title ID del juego.</string>
93 <string name="import_saves">Importar</string>
94 <string name="export_saves">Exportar</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia no es real</string>
98 <string name="copied_to_clipboard">Copiado al portapapeles</string>
99 <string name="about_app_description">Un emulador de Switch de código abierto</string>
100 <string name="contributors">Contribuidores</string>
101 <string name="contributors_description">Hecho con \u2764 del equipo yuzu</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">Versión</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">Early Access</string>
110 <string name="get_early_access">Conseguir Early Access</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">Funciones de vanguardia, acceso anticipado a actualizaciones y más</string>
113 <string name="early_access_benefits">Beneficios Early Access</string>
114 <string name="cutting_edge_features">Características de vanguardia</string>
115 <string name="early_access_updates">Acceso anticipado a las actualizaciones</string>
116 <string name="no_manual_installation">Sin instalación manual</string>
117 <string name="prioritized_support">Soporte prioritario</string>
118 <string name="helping_game_preservation">Ayudarás a la preservación de juegos</string>
119 <string name="our_eternal_gratitude">Nuestra eterna gratitud</string>
120 <string name="are_you_interested">¿Estás interesado?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">Activar limite de velocidad</string>
124 <string name="frame_limit_enable_description">Cuando está habilitado, la velocidad de emulación se limitará a un porcentaje específico de la velocidad normal.</string>
125 <string name="frame_limit_slider">Limitar porcentaje de velocidad</string>
126 <string name="frame_limit_slider_description">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.</string>
127 <string name="cpu_accuracy">Precisión de CPU</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">Modo sobremesa</string>
131 <string name="use_docked_mode_description">Emula en modo sobremesa, lo que aumenta la resolución perjudicando el rendimiento.</string>
132 <string name="emulated_region">Región emulada</string>
133 <string name="emulated_language">Idioma emulado</string>
134 <string name="select_rtc_date">Seleccionar Fecha RTC</string>
135 <string name="select_rtc_time">Seleccionar Tiempo RTC</string>
136 <string name="use_custom_rtc">Habilitar RTC Personalizado</string>
137 <string name="use_custom_rtc_description">Esta configuración le permite configurar un reloj de tiempo real personalizado diferente a la hora actual de su sistema</string>
138 <string name="set_custom_rtc">Establecer RTC Personalizado</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">Nivel de precisión</string>
143 <string name="renderer_resolution">Resolución</string>
144 <string name="renderer_vsync">Modo VSync</string>
145 <string name="renderer_aspect_ratio">Relación de aspecto</string>
146 <string name="renderer_scaling_filter">Filtro de adaptación de ventana</string>
147 <string name="renderer_anti_aliasing">Metodo Anti Aliasing</string>
148 <string name="renderer_force_max_clock">Forzar velocidad al máximo (solo Adreno)</string>
149 <string name="renderer_force_max_clock_description">Fuerza a la GPU a ejecutarse a la velocidad máxima de reloj posible (se seguirán aplicando restricciones térmicas).</string>
150 <string name="renderer_asynchronous_shaders">Usar shaders asíncronos</string>
151 <string name="renderer_asynchronous_shaders_description">Compila shaders de forma asincrónica, lo que reducirá los parones pero puede introducir fallos.</string>
152 <string name="renderer_debug">Habilitar la depuración de gráficos</string>
153 <string name="renderer_debug_description">Cuando esté marcado, la API de gráficos entra en un modo de depuración más lento.</string>
154 <string name="use_disk_shader_cache">Usar caché de shaders en disco</string>
155 <string name="use_disk_shader_cache_description">Reduzca los parones almacenando y cargando shaders generados en el disco.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">Volumen</string>
159 <string name="audio_volume_description">Especifica el volumen de la salida de audio.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">Predeterminado</string>
163 <string name="ini_saved">Configuración guardada</string>
164 <string name="gameid_saved">Configuración guardada para %1$s</string>
165 <string name="error_saving">Error guardando %1$s.ini: %2$s</string>
166 <string name="loading">Cargando...</string>
167 <string name="reset_setting_confirmation">¿Desea restablecer esta configuración a su valor predeterminado?</string>
168 <string name="reset_to_default">Restablecer a predeterminado</string>
169 <string name="reset_all_settings">¿Restablecer todas las configuraciones?</string>
170 <string name="reset_all_settings_description">Todas las configuraciones avanzadas se restablecerán a su configuración predeterminada. Esto no se puede deshacer.</string>
171 <string name="settings_reset">Reiniciar la configuracion</string>
172 <string name="close">Cerrar</string>
173 <string name="learn_more">Más información</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">Seleccionar driver GPU</string>
177 <string name="select_gpu_driver_title">¿Quiere reemplazar el driver de GPU actual?</string>
178 <string name="select_gpu_driver_install">Instalar</string>
179 <string name="select_gpu_driver_default">Predeterminado</string>
180 <string name="select_gpu_driver_install_success">Instalado %s</string>
181 <string name="select_gpu_driver_use_default">Usando el driver de GPU por defecto </string>
182 <string name="select_gpu_driver_error">¡Driver no válido, utilizando el predeterminado del sistema!</string>
183 <string name="system_gpu_driver">Driver GPU del sistema</string>
184 <string name="installing_driver">Instalando driver...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Configuración avanzada</string>
188 <string name="preferences_settings">Ajustes</string>
189 <string name="preferences_general">General</string>
190 <string name="preferences_system">Sistema</string>
191 <string name="preferences_graphics">Gráficos</string>
192 <string name="preferences_audio">Audio</string>
193 <string name="preferences_theme">Tema y color</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">Su ROM está encriptada</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[Por favor, siga las guías para redumpear <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">cartuchos de juegos</a> o <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">titulos instalados</a>.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[Por favor, compruebe que su archivo <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> está instalado, para que los juegos sean descifrados.]]></string>
199 <string name="loader_error_video_core">Ocurrió un error al inicializar el núcleo de video, posiblemente debido a una incompatibilidad con el driver seleccionado</string>
200 <string name="loader_error_video_core_description">Esto suele deberse a un driver de GPU incompatible. La instalación de un controlador de GPU personalizado puede resolver este problema.</string>
201 <string name="loader_error_invalid_format">No se pudo cargar la ROM</string>
202 <string name="loader_error_file_not_found">Archivo ROM no existe</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">Salir de la emulación</string>
206 <string name="emulation_done">Hecho</string>
207 <string name="emulation_fps_counter">Contador de FPS</string>
208 <string name="emulation_toggle_controls">Alternar Controles</string>
209 <string name="emulation_rel_stick_center">Centro Relativo del Stick</string>
210 <string name="emulation_dpad_slide">Deslizamiento de la Cruceta</string>
211 <string name="emulation_haptics">Hápticos</string>
212 <string name="emulation_show_overlay">Mostrar pantalla</string>
213 <string name="emulation_toggle_all">Alternar Todo</string>
214 <string name="emulation_control_adjust">Ajustar pantalla</string>
215 <string name="emulation_control_scale">Escala</string>
216 <string name="emulation_control_opacity">Opacidad</string>
217 <string name="emulation_touch_overlay_reset">Reiniciar pantalla</string>
218 <string name="emulation_touch_overlay_edit">Editar pantalla</string>
219 <string name="emulation_pause">Pausar Emulación</string>
220 <string name="emulation_unpause">Reanudar Emulación</string>
221 <string name="emulation_input_overlay">Opciones de pantalla </string>
222 <string name="emulation_game_loading">Cargando juego...</string>
223
224 <string name="load_settings">Cargando configuración...</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">Software del teclado</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">Abortar</string>
231 <string name="continue_button">Continuar</string>
232 <string name="system_archive_not_found">Archivo del sistema no encontrado</string>
233 <string name="system_archive_not_found_message">%s no se ha encontrado. Vacíe los archivos de su sistema.\nContinuar con la emulación puede provocar bloqueos y errores.</string>
234 <string name="system_archive_general">Un archivo del sistema</string>
235 <string name="save_load_error">Error de Guardado/Carga</string>
236 <string name="fatal_error">Error fatal</string>
237 <string name="fatal_error_message">Ocurrió un error fatal. Consulte el registro para obtener más detalles.\nContinuar con la emulación puede provocar bloqueos y errores.</string>
238 <string name="performance_warning">¡Desactivar esta configuración reducirá significativamente el rendimiento de la emulación! Para obtener la mejor experiencia, se recomienda dejar esta configuración habilitada.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">Auto seleccionar</string>
242 <string name="region_japan">Japón</string>
243 <string name="region_usa">EEUU</string>
244 <string name="region_europe">Europa</string>
245 <string name="region_australia">Australia</string>
246 <string name="region_china">China</string>
247 <string name="region_korea">Corea</string>
248 <string name="region_taiwan">Taiwán</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">Japonés (日本語)</string>
252 <string name="language_english">Inglés (English)</string>
253 <string name="language_french">Francés (Français)</string>
254 <string name="langauge_german">Alemán (deutsch)</string>
255 <string name="language_italian">Italiano (Italiano)</string>
256 <string name="language_spanish">Español (Español)</string>
257 <string name="language_chinese">Chino (简体中文)</string>
258 <string name="language_korean">Coreano (한국어)</string>
259 <string name="language_dutch">Holandés (nederlands)</string>
260 <string name="language_portuguese">Portugués (Português)</string>
261 <string name="language_russian">Ruso (Русский)</string>
262 <string name="language_taiwanese">Taiwanés (台湾)</string>
263 <string name="language_british_english">Inglés británico</string>
264 <string name="language_canadian_french">Francés Canadiense (Français canadien)</string>
265 <string name="language_latin_american_spanish">Español Latinoamericano (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">Chino Simplificado (简体中文)</string>
267 <string name="language_traditional_chinese">Chino tradicional (正體中文)</string>
268 <string name="language_brazilian_portuguese">Portugués Brasileño (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulkan</string>
272 <string name="renderer_none">Ninguno</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">Normal</string>
276 <string name="renderer_accuracy_high">Alto</string>
277 <string name="renderer_accuracy_extreme">Extremo (Lento)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">x1 (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (Lento)</string>
284 <string name="resolution_three">3X (2160p/3240p) (Lento)</string>
285 <string name="resolution_four">4X (2880p/4320p) (Lento)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">Inmediata (Desactivado)</string>
289 <string name="renderer_vsync_mailbox">Mailbox</string>
290 <string name="renderer_vsync_fifo">FIFO (Activado)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO Relajado</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">Vecino más próximo</string>
295 <string name="scaling_filter_bilinear">Bilineal</string>
296 <string name="scaling_filter_bicubic">Bicúbico</string>
297 <string name="scaling_filter_gaussian">Gaussiano</string>
298 <string name="scaling_filter_scale_force">ScaleForce</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolución</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">Ninguno</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">Predeterminado (16:9)</string>
308 <string name="ratio_force_four_three">Forzar 4:3</string>
309 <string name="ratio_force_twenty_one_nine">Forzar 21:9</string>
310 <string name="ratio_force_sixteen_ten">Forzar 16:10</string>
311 <string name="ratio_stretch">Ajustar a la ventana</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Auto</string>
315 <string name="cpu_accuracy_accurate">Preciso</string>
316 <string name="cpu_accuracy_unsafe">Impreciso</string>
317 <string name="cpu_accuracy_paranoid">Paranoico (Lento)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">Cruceta</string>
321 <string name="gamepad_left_stick">Palanca izquierda</string>
322 <string name="gamepad_right_stick">Palanca derecha</string>
323 <string name="gamepad_home">Home</string>
324 <string name="gamepad_screenshot">Captura de pantalla</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">Preparando shaders</string>
328 <string name="building_shaders">Construyendo shaders</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">Cambiar Tema</string>
332 <string name="theme_default">Predeterminado</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">Cambiar modo del tema</string>
337 <string name="theme_mode_follow_system">Igual al sistema</string>
338 <string name="theme_mode_light">Claro</string>
339 <string name="theme_mode_dark">Oscuro</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">Usar Fondos Negros</string>
343 <string name="use_black_backgrounds_description">Cuando utilice el modo oscuro, aplique fondos negros.</string>
344
345</resources>
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 100644
index 000000000..905ab5c03
--- /dev/null
+++ b/src/android/app/src/main/res/values-fr/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Ce logiciel exécutera des jeux pour la console de jeu Nintendo Switch. Aucun jeux ou clés n\'est inclus.&lt;br /&gt;&lt;br /&gt;Avant de commencer, veuillez localiser votre fichier <![CDATA[<b> prod.keys </b>]]> sur le stockage de votre appareil.&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">En savoir plus</a>]]></string>
5 <string name="emulation_notification_channel_name">L\'émulation est active</string>
6 <string name="emulation_notification_channel_description">Affiche une notification persistante lorsque l\'émulation est en cours d\'exécution.</string>
7 <string name="emulation_notification_running">yuzu est en cours d\'exécution</string>
8 <string name="notice_notification_channel_name">Avis et erreurs</string>
9 <string name="notice_notification_channel_description">Affiche des notifications en cas de problème.</string>
10 <string name="notification_permission_not_granted">Permission de notification non accordée !</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Bienvenue !</string>
14 <string name="welcome_description">Apprenez à configurer &lt;b>yuzu&lt;/b> et passez à l\'émulation.</string>
15 <string name="get_started">Commencer</string>
16 <string name="keys">Clés</string>
17 <string name="keys_description">Sélectionnez votre fichier &lt;b>prod.keys&lt;/b> avec le bouton ci-dessous.</string>
18 <string name="select_keys">Sélectionner les clés</string>
19 <string name="games">Jeux</string>
20 <string name="games_description">Sélectionnez votre dossier &lt;b>de Jeux&lt;/b> avec le bouton ci-dessous.</string>
21 <string name="done">Terminé</string>
22 <string name="done_description">Vous êtes prêt.\nProfitez de vos jeux !</string>
23 <string name="text_continue">Continuer</string>
24 <string name="next">Suivant</string>
25 <string name="back">Retour</string>
26 <string name="add_games">Ajouter des jeux</string>
27 <string name="add_games_description">Sélectionner votre dossier de jeux</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Jeux</string>
31 <string name="home_search">Rechercher</string>
32 <string name="home_settings">Paramètres</string>
33 <string name="empty_gamelist">Aucun fichier n\'a été trouvé ou aucun répertoire de jeu n\'a encore été sélectionné.</string>
34 <string name="search_and_filter_games">Rechercher et filtrer les jeux</string>
35 <string name="select_games_folder">Sélectionner le dossier de jeux</string>
36 <string name="select_games_folder_description">Permet à yuzu de remplir la liste des jeux</string>
37 <string name="add_games_warning">Ne pas sélectionner le dossier des jeux ?</string>
38 <string name="add_games_warning_description">Les jeux ne seront pas affichés dans la liste des jeux si aucun dossier n\'est sélectionné.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Rechercher des jeux</string>
41 <string name="games_dir_selected">Répertoire de jeux sélectionné</string>
42 <string name="install_prod_keys">Installer prod.keys</string>
43 <string name="install_prod_keys_description">Nécessaire pour décrypter les jeux commerciaux.</string>
44 <string name="install_prod_keys_warning">Sauter l\'ajout des clés ?</string>
45 <string name="install_prod_keys_warning_description">Des clés valides sont nécessaires pour émuler des jeux commerciaux. Seules les applications homebrew fonctionneront si vous continuez.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Notifications</string>
48 <string name="notifications_description">Accordez l\'autorisation de notification avec le bouton ci-dessous.</string>
49 <string name="give_permission">Donner la permission</string>
50 <string name="notification_warning">Ne pas accorder la permission de notification ?</string>
51 <string name="notification_warning_description">yuzu ne pourra pas vous communiquer d\'informations importantes.</string>
52 <string name="permission_denied">Permission refusée</string>
53 <string name="permission_denied_description">Vous avez refusé cette permission trop de fois et vous devez maintenant l\'accorder manuellement dans les paramètres système.</string>
54 <string name="about">À propos</string>
55 <string name="about_description">Numéro de build, crédits et plus encore</string>
56 <string name="warning_help">Aide</string>
57 <string name="warning_skip">Sauter</string>
58 <string name="warning_cancel">Annuler</string>
59 <string name="install_amiibo_keys">Installer les clés Amiibo</string>
60 <string name="install_amiibo_keys_description">Nécessaire pour utiliser les Amiibo en jeu</string>
61 <string name="invalid_keys_file">Fichier de clés sélectionné invalide</string>
62 <string name="install_keys_success">Clés installées avec succès</string>
63 <string name="reading_keys_failure">Erreur lors de la lecture des clés de chiffrement</string>
64 <string name="install_keys_failure_extension_description">
65 1. Vérifiez que vos clés ont l\'extension .keys.\n\n
66 2. Les clés ne doivent pas être stockées dans le dossier Téléchargements.\n\n
67 Résolvez le(s) problème(s) et réessayez.
68 </string>
69 <string name="invalid_keys_error">Clés de chiffrement invalides</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Le fichier sélectionné est incorrect ou corrompu. Veuillez dumper à nouveau vos clés.</string>
72 <string name="install_gpu_driver">Installer le pilote du GPU</string>
73 <string name="install_gpu_driver_description">Installez des pilotes alternatifs pour des performances ou une précision potentiellement meilleures</string>
74 <string name="advanced_settings">Paramètres avancés</string>
75 <string name="settings_description">Configurer les paramètres de l\'émulateur</string>
76 <string name="search_recently_played">Joué récemment</string>
77 <string name="search_recently_added">Ajouté récemment</string>
78 <string name="search_retail">Commercial</string>
79 <string name="search_homebrew">Homebrew</string>
80 <string name="open_user_folder">Ouvrir le dossier de yuzu</string>
81 <string name="open_user_folder_description">Gérer les fichiers internes de yuzu</string>
82 <string name="theme_and_color_description">Modifier l\'apparence de l\'application</string>
83 <string name="no_file_manager">Aucun gestionnaire de fichiers trouvé</string>
84 <string name="notification_no_directory_link">Impossible d\'ouvrir le répertoire de yuzu</string>
85 <string name="notification_no_directory_link_description">Veuillez localiser manuellement le dossier utilisateur avec le panneau latéral du gestionnaire de fichiers.</string>
86 <string name="manage_save_data">Gérer les données de sauvegarde</string>
87 <string name="manage_save_data_description">Données de sauvegarde trouvées. Veuillez sélectionner une option ci-dessous.</string>
88 <string name="import_export_saves_description">Importer ou exporter des fichiers de sauvegarde</string>
89 <string name="import_export_saves_no_profile">Aucune données de sauvegarde trouvées. Veuillez lancer un jeu et réessayer.</string>
90 <string name="save_file_imported_success">Importé avec succès</string>
91 <string name="save_file_invalid_zip_structure">Structure de répertoire de sauvegarde non valide</string>
92 <string name="save_file_invalid_zip_structure_description">Le nom du premier sous-dossier doit être l\'identifiant du titre du jeu.</string>
93 <string name="import_saves">Importer</string>
94 <string name="export_saves">Exporter</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia n\'est pas réel</string>
98 <string name="copied_to_clipboard">Copié dans le presse-papier</string>
99 <string name="about_app_description">Un émulateur Switch open source</string>
100 <string name="contributors">Contributeurs</string>
101 <string name="contributors_description">Fait avec \u2764 de l\'équipe yuzu</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">Build</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">Early Access</string>
110 <string name="get_early_access">Obtenir l\'Early Access</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">Fonctionnalités de pointe, accès anticipé aux mises à jour, et plus encore</string>
113 <string name="early_access_benefits">Avantages de l\'Early Access</string>
114 <string name="cutting_edge_features">Fonctionnalités de pointe</string>
115 <string name="early_access_updates">Accès anticipé aux mises à jour</string>
116 <string name="no_manual_installation">Pas d\'installation manuelle</string>
117 <string name="prioritized_support">Assistance prioritaire</string>
118 <string name="helping_game_preservation">Contribuer à la préservation des jeux</string>
119 <string name="our_eternal_gratitude">Notre gratitude éternelle</string>
120 <string name="are_you_interested">Es tu intéressé ?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">Activer la vitesse limite</string>
124 <string name="frame_limit_enable_description">Lorsqu\'elle est activée, la vitesse d\'émulation sera limitée à un pourcentage spécifié de la vitesse normale.</string>
125 <string name="frame_limit_slider">Limite en pourcentage de vitesse</string>
126 <string name="frame_limit_slider_description">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.</string>
127 <string name="cpu_accuracy">Précision du CPU</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">Mode TV</string>
131 <string name="use_docked_mode_description">Émuler en mode TV augmente la résolution au détriment des performances.</string>
132 <string name="emulated_region">Région émulée</string>
133 <string name="emulated_language">Langue émulée</string>
134 <string name="select_rtc_date">Sélectionner la date RTC</string>
135 <string name="select_rtc_time">Sélectionner l\'heure RTC</string>
136 <string name="use_custom_rtc">Activer l\'horloge RTC personnalisée</string>
137 <string name="use_custom_rtc_description">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.</string>
138 <string name="set_custom_rtc">Définir l\'horloge RTC personnalisée</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">Niveau de précision</string>
143 <string name="renderer_resolution">Résolution</string>
144 <string name="renderer_vsync">Mode VSync</string>
145 <string name="renderer_aspect_ratio">Format</string>
146 <string name="renderer_scaling_filter">Filtre de fenêtre adaptatif</string>
147 <string name="renderer_anti_aliasing">Méthode d\'anticrénelage :</string>
148 <string name="renderer_force_max_clock">Forcer la fréquence d\'horloge maximale (Adreno uniquement)</string>
149 <string name="renderer_force_max_clock_description">Force le GPU à fonctionner au maximum d\'horloges possibles (les contraintes thermiques seront toujours appliquées).</string>
150 <string name="renderer_asynchronous_shaders">Utiliser les shaders asynchrones</string>
151 <string name="renderer_asynchronous_shaders_description">Compile les shaders de manière asynchrone, ce qui réduira les saccades mais peut entraîner des problèmes visuels.</string>
152 <string name="renderer_debug">Activer le débogage des graphismes</string>
153 <string name="renderer_debug_description">Lorsque cette case est cochée, l\'API graphique entre dans un mode de débogage plus lent.</string>
154 <string name="use_disk_shader_cache">Utiliser les shader cache de disque</string>
155 <string name="use_disk_shader_cache_description">Réduire les saccades en stockant et en chargeant les shaders générés sur le disque.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">Volume</string>
159 <string name="audio_volume_description">Spécifie le volume de la sortie audio.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">Défaut</string>
163 <string name="ini_saved">Paramètres enregistrés</string>
164 <string name="gameid_saved">Paramètres enregistrés pour %1$s</string>
165 <string name="error_saving">Erreur lors de l\'enregistrement de %1$s.ini: %2$s</string>
166 <string name="loading">Chargement...</string>
167 <string name="reset_setting_confirmation">Voulez-vous réinitialiser ce paramètre à sa valeur par défaut ?</string>
168 <string name="reset_to_default">Réinitialiser par défaut</string>
169 <string name="reset_all_settings">Réinitialiser tous les réglages ?</string>
170 <string name="reset_all_settings_description">Tous les paramètres avancés seront réinitialisés à leur configuration par défaut. Ça ne peut pas être annulé.</string>
171 <string name="settings_reset">Paramètres réinitialisés</string>
172 <string name="close">Fermer</string>
173 <string name="learn_more">Plus d\'informations</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">Sélectionner le pilote du GPU</string>
177 <string name="select_gpu_driver_title">Souhaitez vous remplacer votre pilote actuel ?</string>
178 <string name="select_gpu_driver_install">Installer</string>
179 <string name="select_gpu_driver_default">Défaut</string>
180 <string name="select_gpu_driver_install_success">%s Installé</string>
181 <string name="select_gpu_driver_use_default">Utilisation du pilote de GPU par défaut</string>
182 <string name="select_gpu_driver_error">Pilote non valide sélectionné, utilisation du paramètre par défaut du système !</string>
183 <string name="system_gpu_driver">Pilote du GPU du système</string>
184 <string name="installing_driver">Installation du pilote...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Paramètres avancés</string>
188 <string name="preferences_settings">Paramètres</string>
189 <string name="preferences_general">Général</string>
190 <string name="preferences_system">Système</string>
191 <string name="preferences_graphics">Vidéo</string>
192 <string name="preferences_audio">Audio</string>
193 <string name="preferences_theme">Thème et couleur</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">Votre ROM est cryptée</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[Veuillez suivre les guides pour redumper vos <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">cartouches de jeu</a> ou <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">titres installés</a>.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[Veuillez vous assurer que votre fichier <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> est installé pour que les jeux puissent être déchiffrés.]]></string>
199 <string name="loader_error_video_core">Une erreur s\'est produite lors de l\'initialisation du noyau vidéo</string>
200 <string name="loader_error_video_core_description">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.</string>
201 <string name="loader_error_invalid_format">Impossible de charger la ROM</string>
202 <string name="loader_error_file_not_found">Le fichier ROM n\'existe pas</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">Quitter l\'émulation</string>
206 <string name="emulation_done">Terminé</string>
207 <string name="emulation_fps_counter">Compteur FPS</string>
208 <string name="emulation_toggle_controls">Activer/Désactiver les contrôles</string>
209 <string name="emulation_rel_stick_center">Centre du stick relatif</string>
210 <string name="emulation_dpad_slide">Glissement du DPad</string>
211 <string name="emulation_haptics">Haptique</string>
212 <string name="emulation_show_overlay">Afficher l\'overlay</string>
213 <string name="emulation_toggle_all">Tout basculer</string>
214 <string name="emulation_control_adjust">Ajuster l\'overlay</string>
215 <string name="emulation_control_scale">Échelle</string>
216 <string name="emulation_control_opacity">Opacité</string>
217 <string name="emulation_touch_overlay_reset">Réinitialiser l\'overlay</string>
218 <string name="emulation_touch_overlay_edit">Modifier l\'overlay</string>
219 <string name="emulation_pause">Mettre en pause l\'émulation</string>
220 <string name="emulation_unpause">Reprendre l\'émulation</string>
221 <string name="emulation_input_overlay">Options de l\'overlay</string>
222 <string name="emulation_game_loading">Chargement du jeu...</string>
223
224 <string name="load_settings">Chargement des paramètres…</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">Clavier virtuel</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">Abandonner</string>
231 <string name="continue_button">Continuer</string>
232 <string name="system_archive_not_found">Archive système introuvable</string>
233 <string name="system_archive_not_found_message">%s est manquant. Veuillez dumper vos archives système.\nContinuer peut entraîner des plantages et des bogues.</string>
234 <string name="system_archive_general">Une archive système</string>
235 <string name="save_load_error">Erreur de sauvegarde/chargement</string>
236 <string name="fatal_error">Erreur fatale</string>
237 <string name="fatal_error_message">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.</string>
238 <string name="performance_warning">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é.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">Sélection automatique</string>
242 <string name="region_japan">Japon</string>
243 <string name="region_usa">É.-U.A.</string>
244 <string name="region_europe">Europe</string>
245 <string name="region_australia">Australie</string>
246 <string name="region_china">Chine</string>
247 <string name="region_korea">Corée</string>
248 <string name="region_taiwan">Taïwan</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">Japonais (日本語)</string>
252 <string name="language_english">Anglais</string>
253 <string name="language_french">Français (Français)</string>
254 <string name="langauge_german">Allemand (Deutsch)</string>
255 <string name="language_italian">Italien (Italiano)</string>
256 <string name="language_spanish">Espagnol (Español)</string>
257 <string name="language_chinese">Chinois (简体中文)</string>
258 <string name="language_korean">Coréen (한국어)</string>
259 <string name="language_dutch">Néerlandais (Nederlands)</string>
260 <string name="language_portuguese">Portugais (Português)</string>
261 <string name="language_russian">Russe (Русский)</string>
262 <string name="language_taiwanese">Taïwanais (台湾)</string>
263 <string name="language_british_english">Anglais Britannique</string>
264 <string name="language_canadian_french">Français canadien (Français canadien)</string>
265 <string name="language_latin_american_spanish">Espagnol latino-américain (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">Chinois simplifié (简体中文)</string>
267 <string name="language_traditional_chinese">Chinois Traditionnel (正體中文)</string>
268 <string name="language_brazilian_portuguese">Portugais brésilien (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulkan</string>
272 <string name="renderer_none">Aucune</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">Normal</string>
276 <string name="renderer_accuracy_high">Haut</string>
277 <string name="renderer_accuracy_extreme">Extrême (Lent)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (Lent)</string>
284 <string name="resolution_three">3X (2160p/3240p) (Lent)</string>
285 <string name="resolution_four">4X (2880p/4320p) (Lent)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">Immédiat (Désactivé)</string>
289 <string name="renderer_vsync_mailbox">Mailbox</string>
290 <string name="renderer_vsync_fifo">FIFO (Activé)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO souple</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">Plus proche voisin</string>
295 <string name="scaling_filter_bilinear">Bilinéaire</string>
296 <string name="scaling_filter_bicubic">Bicubique</string>
297 <string name="scaling_filter_gaussian">Gaussien</string>
298 <string name="scaling_filter_scale_force">ScaleForce</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">Aucune</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">Par défaut (16:9)</string>
308 <string name="ratio_force_four_three">Forcer le 4:3</string>
309 <string name="ratio_force_twenty_one_nine">Forcer le 21:9</string>
310 <string name="ratio_force_sixteen_ten">Forcer le 16:10</string>
311 <string name="ratio_stretch">Étirer à la fenêtre</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Auto</string>
315 <string name="cpu_accuracy_accurate">Précis</string>
316 <string name="cpu_accuracy_unsafe">Risqué</string>
317 <string name="cpu_accuracy_paranoid">Paranoïaque (Lent)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">Pavé directionnel</string>
321 <string name="gamepad_left_stick">Stick Gauche</string>
322 <string name="gamepad_right_stick">Stick Droit</string>
323 <string name="gamepad_home">Home</string>
324 <string name="gamepad_screenshot">Capture d\'écran</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">Préparation des shaders</string>
328 <string name="building_shaders">Compilation des shaders</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">Changer le thème de l\'application</string>
332 <string name="theme_default">Défaut</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">Changer le mode de thème</string>
337 <string name="theme_mode_follow_system">Automatique</string>
338 <string name="theme_mode_light">Lumineux</string>
339 <string name="theme_mode_dark">Sombre</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">Utiliser des arrière-plans noirs</string>
343 <string name="use_black_backgrounds_description">Lorsque vous utilisez le thème sombre, appliquer des arrière-plans noirs.</string>
344
345</resources>
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 100644
index 000000000..fede49650
--- /dev/null
+++ b/src/android/app/src/main/res/values-it/strings.xml
@@ -0,0 +1,344 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Questo software permette di giocare ai giochi della console Nintendo Switch. Nessun gioco o chiave è inclusa.&lt;br /&gt;&lt;br /&gt;Prima di iniziare, perfavore individua il file <![CDATA[<b>prod.keys </b>]]> nella memoria del tuo dispositivo.&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">Scopri di più</a>]]></string>
5 <string name="emulation_notification_channel_name">L\'emulatore è attivo</string>
6 <string name="emulation_notification_channel_description">Mostra una notifica persistente quando l\'emulatore è in esecuzione.</string>
7 <string name="emulation_notification_running">yuzu è in esecuzione</string>
8 <string name="notice_notification_channel_name">Avvisi ed errori</string>
9 <string name="notice_notification_channel_description">Mostra le notifiche quando qualcosa va storto.</string>
10 <string name="notification_permission_not_granted">Autorizzazione di notifica non concessa!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Benvenuto!</string>
14 <string name="welcome_description">Scopri come configurare &lt;b>yuzu&lt;/b> e passare all\'emulazione.</string>
15 <string name="get_started">Iniziare</string>
16 <string name="keys">Pulsanti</string>
17 <string name="keys_description">Seleziona il tuo file &lt;b>prod.keys&lt;/b> con il pulsante in basso.</string>
18 <string name="select_keys">Selezione Pulsanti</string>
19 <string name="games">Giochi</string>
20 <string name="games_description">Seleziona la cartella &lt;b>Games&lt;/b> con il pulsante in basso.</string>
21 <string name="done">Fatto</string>
22 <string name="done_description">È tutto pronto.\nDivertiti a giocare!</string>
23 <string name="text_continue">Continua</string>
24 <string name="next">Successivo</string>
25 <string name="back">Indietro</string>
26 <string name="add_games">Aggiungi giochi</string>
27 <string name="add_games_description">Seleziona la cartella dei giochi</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Giochi</string>
31 <string name="home_search">Cerca</string>
32 <string name="home_settings">Impostazioni</string>
33 <string name="empty_gamelist">Non sono stati trovati file o non è stata ancora selezionata alcuna directory di gioco.</string>
34 <string name="search_and_filter_games">Cerca e filtra i giochi</string>
35 <string name="select_games_folder">Seleziona la cartella di gioco</string>
36 <string name="select_games_folder_description">Consente a yuzu di popolare l\'elenco dei giochi</string>
37 <string name="add_games_warning">Saltare la selezione della cartella dei giochi?</string>
38 <string name="add_games_warning_description">I giochi non saranno mostrati nella lista dei giochi se una cartella non è selezionata.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Cerca giochi</string>
41 <string name="games_dir_selected">Cartella dei giochi selezionata</string>
42 <string name="install_prod_keys">Installa prod.keys</string>
43 <string name="install_prod_keys_description">Necessario per decrittografare i giochi</string>
44 <string name="install_prod_keys_warning">Saltare l\'aggiunta delle chiavi?</string>
45 <string name="install_prod_keys_warning_description">Sono necessarie delle chiavi valide per emulare i giochi. Se continui, funzioneranno solo le app homebrew.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Notifiche</string>
48 <string name="notifications_description">Concedi l\'autorizzazione alle notifiche con il pulsante in basso.</string>
49 <string name="give_permission">Concedere l\'autorizzazione</string>
50 <string name="notification_warning">Saltare la concessione dell\'autorizzazione alle notifiche?</string>
51 <string name="notification_warning_description">yuzu non sarà in grado di notificarti informazioni importanti.</string>
52 <string name="permission_denied">Permesso negato</string>
53 <string name="permission_denied_description">Hai negato l\'autorizzazione troppe volte ed ora devi concederla manualmente nelle impostazioni di sistema.</string>
54 <string name="about">Informazioni</string>
55 <string name="about_description">Versione build, crediti ed altro</string>
56 <string name="warning_help">Aiuto</string>
57 <string name="warning_skip">Salta</string>
58 <string name="warning_cancel">Annulla</string>
59 <string name="install_amiibo_keys">Installa le chiavi degli Amiibo</string>
60 <string name="install_amiibo_keys_description">Necessario per usare gli Amiibo in gioco</string>
61 <string name="invalid_keys_file">Selezionate chiavi non valide</string>
62 <string name="install_keys_success">Chiavi installate correttamente</string>
63 <string name="reading_keys_failure">Errore durante la lettura delle chiavi di crittografia</string>
64 <string name="install_keys_failure_extension_description">
651. Verifica che le tue chiavi abbiano l\'estensione .keys.\n\n
662. Le chiavi non devono essere archiviate nella cartella Download.\n\n
67Risolvi i problemi e riprova.</string>
68 <string name="invalid_keys_error">Chiavi di crittografia non valide</string>
69 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
70 <string name="install_keys_failure_description">Il file selezionato è incorretto o corrotto. Per favore riesegui il dump delle tue chiavi.</string>
71 <string name="install_gpu_driver">Installa i driver GPU</string>
72 <string name="install_gpu_driver_description">Installa driver alternativi per potenziali prestazioni migliori o accuratezza.</string>
73 <string name="advanced_settings">Impostazioni avanzate</string>
74 <string name="settings_description">Configura le impostazioni dell\'emulatore</string>
75 <string name="search_recently_played">Giocato recentemente</string>
76 <string name="search_recently_added">Aggiunto recentemente</string>
77 <string name="search_retail">Rivenditore</string>
78 <string name="search_homebrew">Homebrew</string>
79 <string name="open_user_folder">Apri la cartella di yuzu</string>
80 <string name="open_user_folder_description">Gestisci i file interni di yuzu</string>
81 <string name="theme_and_color_description">Modifica l\'aspetto dell\'app</string>
82 <string name="no_file_manager">Nessun file manager trovato</string>
83 <string name="notification_no_directory_link">Impossibile aprire la cartella di yuzu</string>
84 <string name="notification_no_directory_link_description">Per favore individua la cartella dell\'utente manualmente con il pannello laterale del file manager.</string>
85 <string name="manage_save_data">Gestisci i salvataggi</string>
86 <string name="manage_save_data_description">Salvataggio non trovato. Seleziona un\'opzione di seguito.</string>
87 <string name="import_export_saves_description">Importa o esporta i salvataggi</string>
88 <string name="import_export_saves_no_profile">Nessun salvataggio trovato. Avvia un gioco e riprova.</string>
89 <string name="save_file_imported_success">Importato con successo</string>
90 <string name="save_file_invalid_zip_structure">La struttura della cartella dei salvataggi è invalida</string>
91 <string name="save_file_invalid_zip_structure_description">La prima sotto cartella <b>deve</b> chiamarsi come l\'ID del titolo del gioco.</string>
92 <string name="import_saves">Importa</string>
93 <string name="export_saves">Esporta</string>
94
95 <!-- About screen strings -->
96 <string name="gaia_is_not_real">Gaia non è reale</string>
97 <string name="copied_to_clipboard">Copiato negli appunti</string>
98 <string name="about_app_description">Un emulatore della Switch open-source.</string>
99 <string name="contributors">Collaboratori</string>
100 <string name="contributors_description">Realizzato con \u2764 dal team yuzu</string>
101 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
102 <string name="build">Compilazione</string>
103 <string name="support_link">https://discord.gg/u77vRWY</string>
104 <string name="website_link">https://yuzu-emu.org/</string>
105 <string name="github_link">https://github.com/yuzu-emu</string>
106
107 <!-- Early access upgrade strings -->
108 <string name="early_access">Accesso Anticipato</string>
109 <string name="get_early_access">Ottieni l\'accesso anticipato</string>
110 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
111 <string name="get_early_access_description">Funzionalità all\'avanguardia, aggiornamenti in anticipo e altro</string>
112 <string name="early_access_benefits">Vantaggi dell\'accesso anticipato</string>
113 <string name="cutting_edge_features">Funzionalità all\'avanguardia</string>
114 <string name="early_access_updates">Accesso anticipato agli aggiornamenti</string>
115 <string name="no_manual_installation">Non installare manualmente.</string>
116 <string name="prioritized_support">Supporto prioritario</string>
117 <string name="helping_game_preservation">Aiuta a preservare il gioco</string>
118 <string name="our_eternal_gratitude">La nostra gratitudine eterna</string>
119 <string name="are_you_interested">Sei interessato?</string>
120
121 <!-- General settings strings -->
122 <string name="frame_limit_enable">Abilita il limite di velocità</string>
123 <string name="frame_limit_enable_description">Quando abilitato, la velocità di emulazione verrà limitata a una specifica percentuale della velocità normale.</string>
124 <string name="frame_limit_slider">Limite velocità percentuale</string>
125 <string name="frame_limit_slider_description">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à.</string>
126 <string name="cpu_accuracy">Accuratezza della CPU</string>
127
128 <!-- System settings strings -->
129 <string name="use_docked_mode">Modalità docked</string>
130 <string name="use_docked_mode_description">Emula in modalità docked, questo aumenta la risoluzione a spese delle performance.</string>
131 <string name="emulated_region">Regione emulata</string>
132 <string name="emulated_language">Lingua emulata</string>
133 <string name="select_rtc_date">Seleziona la data dall\'orologio in tempo reale</string>
134 <string name="select_rtc_time">Seleziona il tempo dall\'orologio in tempo reale</string>
135 <string name="use_custom_rtc">Abilità l\'orologio in tempo reale personalizzato</string>
136 <string name="use_custom_rtc_description">Questa impostazione ti permette di impostare un orologio in tempo reale personalizzato separato da quello del tuo sistema corrente.</string>
137 <string name="set_custom_rtc">Imposta l\'orologio in tempo reale personalizzato</string>
138
139 <!-- Graphics settings strings -->
140 <string name="renderer_api">API</string>
141 <string name="renderer_accuracy">Livello di accuratezza</string>
142 <string name="renderer_resolution">Risoluzione</string>
143 <string name="renderer_vsync">Modalità VSync</string>
144 <string name="renderer_aspect_ratio">Rapporto d\'aspetto</string>
145 <string name="renderer_scaling_filter">Filtro di adattamento alla finestra</string>
146 <string name="renderer_anti_aliasing">Metodo di anti-aliasing</string>
147 <string name="renderer_force_max_clock">Forza clock massimi (solo Adreno)</string>
148 <string name="renderer_force_max_clock_description">Forza la GPU a girare col massimo clock possibile (i vincoli alla temperatura saranno comunque applicati)</string>
149 <string name="renderer_asynchronous_shaders">Usa shaders asincrone</string>
150 <string name="renderer_asynchronous_shaders_description">Compila le shaders asincronamente, questo riduce lo shutter ma potrebbe introdurre dei glitch. </string>
151 <string name="renderer_debug">Abilità il debug grafico</string>
152 <string name="renderer_debug_description">Quando l\'opzione è selezionata, l\'API grafica entra in una modalità di debug più lenta</string>
153 <string name="use_disk_shader_cache">Usa cache shader su disco</string>
154 <string name="use_disk_shader_cache_description">Riduce lo stuttering salvando e caricando le shader generate sul disco.</string>
155
156 <!-- Audio settings strings -->
157 <string name="audio_volume">Volume</string>
158 <string name="audio_volume_description">Specifica il volume dell\'audio in uscita.</string>
159
160 <!-- Miscellaneous -->
161 <string name="slider_default">Predefinito</string>
162 <string name="ini_saved">Impostazioni salvate</string>
163 <string name="gameid_saved">Impostazioni salvate per %1$s</string>
164 <string name="error_saving">Errore nel salvare %1$s.ini %2$s</string>
165 <string name="loading">Caricamento…</string>
166 <string name="reset_setting_confirmation">Vuoi ripristinare queste impostazioni al loro valore originale?</string>
167 <string name="reset_to_default">Riportare alle impostazioni originali</string>
168 <string name="reset_all_settings">Resettare tutte le impostazioni?</string>
169 <string name="reset_all_settings_description">Tutte le Impostazioni Avanzate saranno ripristinate a quelle originali. Questa operazione non è reversibile</string>
170 <string name="settings_reset">Reimposta le impostazioni</string>
171 <string name="close">Chiudi</string>
172 <string name="learn_more">Per saperne di più</string>
173
174 <!-- GPU driver installation -->
175 <string name="select_gpu_driver">Seleziona il driver della GPU</string>
176 <string name="select_gpu_driver_title">Vuoi sostituire il driver della tua GPU attuale?</string>
177 <string name="select_gpu_driver_install">Installa</string>
178 <string name="select_gpu_driver_default">Predefinito</string>
179 <string name="select_gpu_driver_install_success">Installato%s</string>
180 <string name="select_gpu_driver_use_default">Utilizza il driver predefinito della GPU.</string>
181 <string name="select_gpu_driver_error">Il driver selezionato è invalido, è in utilizzo quello predefinito di sistema!</string>
182 <string name="system_gpu_driver">Driver GPU del sistema</string>
183 <string name="installing_driver">Installando i driver...</string>
184
185 <!-- Preferences Screen -->
186 <string name="preferences_advanced_settings">Impostazioni Avanzate</string>
187 <string name="preferences_settings">Impostazioni</string>
188 <string name="preferences_general">Generali</string>
189 <string name="preferences_system">Sistema</string>
190 <string name="preferences_graphics">Grafica</string>
191 <string name="preferences_audio">Audio</string>
192 <string name="preferences_theme">Tema e colori</string>
193
194 <!-- ROM loading errors -->
195 <string name="loader_error_encrypted">La tua ROM è criptata</string>
196 <string name="loader_error_encrypted_roms_description"><![CDATA[Per favore segui la guida per eseguire il dump della <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">cartuccia di gioco</a> o i <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">titoli installati</a>.]]></string>
197 <string name="loader_error_encrypted_keys_description"><![CDATA[Per favore assicurati che il file <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> sia installato in modo che i giochi possano essere decrittati.]]></string>
198 <string name="loader_error_video_core">È stato riscontrato un errore nell\'inizializzazione del core video</string>
199 <string name="loader_error_video_core_description">Questo è causato solitamente dal driver incompatibile di una GPU. L\'installazione di driver GPU personalizzati potrebbe risolvere questo problema.</string>
200 <string name="loader_error_invalid_format">Impossibile caricare la ROM</string>
201 <string name="loader_error_file_not_found">Il file della ROM non esiste</string>
202
203 <!-- Emulation Menu -->
204 <string name="emulation_exit">Uscire dall\'emulazione</string>
205 <string name="emulation_done">Fatto</string>
206 <string name="emulation_fps_counter">Contatore degli FPS</string>
207 <string name="emulation_toggle_controls">Controlli a interruttore</string>
208 <string name="emulation_rel_stick_center">Centro relativo degli Stick</string>
209 <string name="emulation_dpad_slide">Slittamento del Pad Direzionale</string>
210 <string name="emulation_haptics">Aptico</string>
211 <string name="emulation_show_overlay">Mostra Overlay</string>
212 <string name="emulation_toggle_all">Attiva/disattiva tutto</string>
213 <string name="emulation_control_adjust">Aggiusta Overlay</string>
214 <string name="emulation_control_scale">Scala</string>
215 <string name="emulation_control_opacity">Opacità</string>
216 <string name="emulation_touch_overlay_reset">Reimposta Overlay</string>
217 <string name="emulation_touch_overlay_edit">Modifica Overlay</string>
218 <string name="emulation_pause">Metti in pausa l\'emulazione</string>
219 <string name="emulation_unpause">Riprendi Emulazione</string>
220 <string name="emulation_input_overlay">Impostazioni Overlay</string>
221 <string name="emulation_game_loading">Caricamento del gioco...</string>
222
223 <string name="load_settings">Caricamento delle impostazioni...</string>
224
225 <!-- Software keyboard -->
226 <string name="software_keyboard">Tastiera software</string>
227
228 <!-- Errors and warnings -->
229 <string name="abort_button">Interrompi</string>
230 <string name="continue_button">Continua</string>
231 <string name="system_archive_not_found">Archivio di sistema non trovato</string>
232 <string name="system_archive_not_found_message">%s è mancante. Per favore esegui il dump degli archivi del tuo sistema.\nContinuare ad emulare potrebbe portare bug o causare crash.</string>
233 <string name="system_archive_general">Un archivio di sistema</string>
234 <string name="save_load_error">Errore di salvataggio/caricamento</string>
235 <string name="fatal_error">Errore Fatale</string>
236 <string name="fatal_error_message">Un errore fatale è accaduto. Controlla i log per i dettagli.\nContinuare ad emulare potrebbe portare bug o causare crash.</string>
237 <string name="performance_warning">Disattivare questa impostazione può ridurre significativamente le performance di emulazione! Per una migliore esperienza, è consigliato lasciare questa impostazione attivata.</string>
238
239 <!-- Region Names -->
240 <string name="region_auto">Selezione automatica</string>
241 <string name="region_japan">Giappone</string>
242 <string name="region_usa">USA</string>
243 <string name="region_europe">Europa</string>
244 <string name="region_australia">Australia</string>
245 <string name="region_china">Cina</string>
246 <string name="region_korea">Corea</string>
247 <string name="region_taiwan">Taiwan</string>
248
249 <!-- Language Names -->
250 <string name="language_japanese">Giapponese (日本語)</string>
251 <string name="language_english">Inglese (English)</string>
252 <string name="language_french">Francese (Français)</string>
253 <string name="langauge_german">Tedesco (Deutsch)</string>
254 <string name="language_italian">Italiano (Italiano)</string>
255 <string name="language_spanish">Spagnolo (Español)</string>
256 <string name="language_chinese">Cinese (简体中文)</string>
257 <string name="language_korean">Coreano (한국어)</string>
258 <string name="language_dutch">Olandese (Nederlands)</string>
259 <string name="language_portuguese">Portoghese (Português)</string>
260 <string name="language_russian">Russo (Русский)</string>
261 <string name="language_taiwanese">Taiwanese (台湾)</string>
262 <string name="language_british_english">Inglese britannico</string>
263 <string name="language_canadian_french">Francese Canadese (Français canadien)</string>
264 <string name="language_latin_american_spanish">Spagnolo Latino Americano (Español latinoamericano)</string>
265 <string name="language_simplified_chinese">Cinese Semplificato (简体中文)</string>
266 <string name="language_traditional_chinese">Cinese tradizionale (正體中文)</string>
267 <string name="language_brazilian_portuguese">Portoghese (Português)</string>
268
269 <!-- Renderer APIs -->
270 <string name="renderer_vulkan">Vulkan</string>
271 <string name="renderer_none">Nessuna</string>
272
273 <!-- Renderer Accuracy -->
274 <string name="renderer_accuracy_normal">Normale</string>
275 <string name="renderer_accuracy_high">Alta</string>
276 <string name="renderer_accuracy_extreme">Estrema (Lenta)</string>
277
278 <!-- Resolutions -->
279 <string name="resolution_half">0.5X (360p/540p)</string>
280 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
281 <string name="resolution_one">1X (720p/1080p)</string>
282 <string name="resolution_two">2X (1440p/2160p) (Slow)</string>
283 <string name="resolution_three">3X (2160p/3240p) (Slow)</string>
284 <string name="resolution_four">4X (2880p/4320p) (Slow)</string>
285
286 <!-- Renderer VSync -->
287 <string name="renderer_vsync_immediate">Immediato (Off)</string>
288 <string name="renderer_vsync_mailbox">Cassella postale</string>
289 <string name="renderer_vsync_fifo">FIFO (On)</string>
290 <string name="renderer_vsync_fifo_relaxed">FIFO Rilassato</string>
291
292 <!-- Scaling Filters -->
293 <string name="scaling_filter_nearest_neighbor">Nearest neighbor</string>
294 <string name="scaling_filter_bilinear">Bilineare</string>
295 <string name="scaling_filter_bicubic">Bicubico</string>
296 <string name="scaling_filter_gaussian">Gaussiano</string>
297 <string name="scaling_filter_scale_force">ScaleForce</string>
298 <string name="scaling_filter_fsr">AMD FidelityFX™️ Super Resolution</string>
299
300 <!-- Anti-Aliasing -->
301 <string name="anti_aliasing_none">Nessuna</string>
302 <string name="anti_aliasing_fxaa">FXAA</string>
303 <string name="anti_aliasing_smaa">SMAA</string>
304
305 <!-- Aspect Ratios -->
306 <string name="ratio_default">Predefinito (16:9)</string>
307 <string name="ratio_force_four_three">Forza 4:3</string>
308 <string name="ratio_force_twenty_one_nine">Forza 21:9</string>
309 <string name="ratio_force_sixteen_ten">Forza 16:10</string>
310 <string name="ratio_stretch">Allunga a finestra</string>
311
312 <!-- CPU Accuracy -->
313 <string name="cpu_accuracy_auto">Automatico</string>
314 <string name="cpu_accuracy_accurate">Accurata</string>
315 <string name="cpu_accuracy_unsafe">Non sicura</string>
316 <string name="cpu_accuracy_paranoid">Paranoico (Lento)</string>
317
318 <!-- Gamepad Buttons -->
319 <string name="gamepad_d_pad">D-Pad</string>
320 <string name="gamepad_left_stick">Levetta sinistra</string>
321 <string name="gamepad_right_stick">Levetta destra</string>
322 <string name="gamepad_home">Home</string>
323 <string name="gamepad_screenshot">Screenshot</string>
324
325 <!-- Disk shader cache -->
326 <string name="preparing_shaders">Preparazione degli shaders</string>
327 <string name="building_shaders">Costruendo gli shaders</string>
328
329 <!-- Theme options -->
330 <string name="change_app_theme">Cambia il tema dell\'app</string>
331 <string name="theme_default">Predefinito</string>
332 <string name="theme_material_you">Material You</string>
333
334 <!-- Theme Modes -->
335 <string name="change_theme_mode">Cambia la modalità del tema</string>
336 <string name="theme_mode_follow_system">Segue il Sistema</string>
337 <string name="theme_mode_light">Chiaro</string>
338 <string name="theme_mode_dark">Scuro</string>
339
340 <!-- Black backgrounds theme -->
341 <string name="use_black_backgrounds">Usa sfondi neri</string>
342 <string name="use_black_backgrounds_description">Quando utilizzi il tema scuro, applica sfondi neri.</string>
343
344</resources>
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 100644
index 000000000..4a649778e
--- /dev/null
+++ b/src/android/app/src/main/res/values-ja/strings.xml
@@ -0,0 +1,343 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">このソフトウェアは、Nintendo Switch用のゲームを実行します。 ゲームソフトやキーは含まれません。&lt;br /&gt;&lt;br /&gt;事前に、 <![CDATA[<b> prod.keys </b>]]> ファイルをデバイスのストレージに配置しておいてください。&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">詳細</a>]]></string>
5 <string name="emulation_notification_channel_name">エミュレーションが有効です</string>
6 <string name="emulation_notification_channel_description">エミュレーションの実行中に常設通知を表示します。</string>
7 <string name="emulation_notification_running">yuzu は実行中です</string>
8 <string name="notice_notification_channel_description">問題が発生したときに通知を表示します。</string>
9 <string name="notification_permission_not_granted">通知が許可されていません!</string>
10
11 <!-- Setup strings -->
12 <string name="welcome">ようこそ!</string>
13 <string name="welcome_description">&lt;b>yuzu&lt;/b> のセットアップ方法を学び、エミュレーションに飛び込みましょう。</string>
14 <string name="get_started">はじめる</string>
15 <string name="keys">キー</string>
16 <string name="keys_description">下のボタンから &lt;b>prod.keys&lt;/b> ファイルを選択してください。</string>
17 <string name="select_keys">キーを選択</string>
18 <string name="games">ゲーム</string>
19 <string name="games_description">下のボタンから&lt;b>ゲーム&lt;/b>があるフォルダを選択してください。</string>
20 <string name="done">完了</string>
21 <string name="done_description">準備が完了しました。\nゲームをお楽しみください!</string>
22 <string name="text_continue">続行</string>
23 <string name="next">次へ</string>
24 <string name="back">戻る</string>
25 <string name="add_games">ゲームを追加</string>
26 <string name="add_games_description">ゲームフォルダを選択</string>
27
28 <!-- Home strings -->
29 <string name="home_games">ゲーム</string>
30 <string name="home_search">検索</string>
31 <string name="home_settings">設定</string>
32 <string name="empty_gamelist">ファイルが見つからないか、ゲームディレクトリがまだ選択されていません。</string>
33 <string name="search_and_filter_games">ゲームの検索と絞り込み</string>
34 <string name="select_games_folder">ゲームフォルダを選択</string>
35 <string name="select_games_folder_description">yuzu がゲームリストに追加できるようにします</string>
36 <string name="add_games_warning">ゲームフォルダの選択をスキップしますか?</string>
37 <string name="add_games_warning_description">フォルダを選択しない場合、ゲームはゲームリストに表示されません。</string>
38 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
39 <string name="home_search_games">ゲームを検索</string>
40 <string name="games_dir_selected">ゲームディレクトリが選択されました</string>
41 <string name="install_prod_keys">prod.keys をインストール</string>
42 <string name="install_prod_keys_description">ゲームの復号化に必要</string>
43 <string name="install_prod_keys_warning">キーの追加をスキップしますか?</string>
44 <string name="install_prod_keys_warning_description">製品版ゲームのエミュレーションには、有効なキーが必要です。続行すると自作アプリしか機能しません。</string>
45 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
46 <string name="notifications">通知</string>
47 <string name="notifications_description">下のボタンで通知の権限を許可してください。</string>
48 <string name="give_permission">許可</string>
49 <string name="notification_warning">通知の許可をスキップしますか?</string>
50 <string name="notification_warning_description">yuzuは重要なお知らせを通知できません。</string>
51 <string name="permission_denied">権限が拒否されました</string>
52 <string name="permission_denied_description">この権限を複数回拒否したため、システム設定で手動で許可する必要があります。</string>
53 <string name="about">情報</string>
54 <string name="about_description">ビルドバージョン、クレジットなど</string>
55 <string name="warning_help">ヘルプ</string>
56 <string name="warning_skip">スキップ</string>
57 <string name="warning_cancel">キャンセル</string>
58 <string name="install_amiibo_keys">Amiibo キーをインストール</string>
59 <string name="install_amiibo_keys_description">ゲーム内での Amiibo の使用に必要</string>
60 <string name="invalid_keys_file">無効なキーファイルが選択されました</string>
61 <string name="install_keys_success">正常にインストールされました</string>
62 <string name="reading_keys_failure">暗号化キーの読み取りエラー</string>
63 <string name="install_keys_failure_extension_description">
64 1. キーの拡張子が .keys であることを確認します。\n\n
65 2. キーはダウンロードフォルダに保存しないでください。\n\n
66 問題を解決して、再度お試しください。
67 </string>
68 <string name="invalid_keys_error">暗号化キーが無効です</string>
69 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
70 <string name="install_keys_failure_description">選択されたファイルが不正または破損しています。キーを再ダンプしてください。</string>
71 <string name="install_gpu_driver">GPUドライバーをインストール</string>
72 <string name="install_gpu_driver_description">代替ドライバーをインストールしてパフォーマンスや精度を向上させます</string>
73 <string name="advanced_settings">高度な設定</string>
74 <string name="settings_description">エミュレーターの設定を構成します</string>
75 <string name="search_recently_played">最近プレイした</string>
76 <string name="search_recently_added">最近追加された</string>
77 <string name="search_retail">製品版</string>
78 <string name="search_homebrew">自作</string>
79 <string name="open_user_folder">yuzu フォルダを開く</string>
80 <string name="open_user_folder_description">yuzu内部のファイルを管理します</string>
81 <string name="theme_and_color_description">アプリの見た目を変更</string>
82 <string name="no_file_manager">ファイルマネージャーが見つかりませんでした</string>
83 <string name="notification_no_directory_link">yuzuのディレクトリを開けません</string>
84 <string name="notification_no_directory_link_description">ファイルマネージャのサイドパネルでユーザーフォルダを手動で探してください。</string>
85 <string name="manage_save_data">セーブデータを管理</string>
86 <string name="manage_save_data_description">セーブデータが見つかりました。以下のオプションから選択してください。</string>
87 <string name="import_export_saves_description">セーブファイルをインポート/エクスポート</string>
88 <string name="import_export_saves_no_profile">セーブデータがありません。ゲームを起動してから再度お試しください。</string>
89 <string name="save_file_imported_success">インポートが完了しました</string>
90 <string name="save_file_invalid_zip_structure">セーブデータのディレクトリ構造が無効です</string>
91 <string name="save_file_invalid_zip_structure_description">最初のサブフォルダ名は、ゲームのタイトルIDである必要があります。</string>
92 <string name="import_saves">インポート</string>
93 <string name="export_saves">エクスポート</string>
94
95 <!-- About screen strings -->
96 <string name="gaia_is_not_real">ガイアは実在しない</string>
97 <string name="copied_to_clipboard">クリップボードにコピーしました</string>
98 <string name="about_app_description">オープンソースのSwitchエミュレータ</string>
99 <string name="contributors">貢献者</string>
100 <string name="contributors_description">yuzuチームの\u2764で作られた</string>
101 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
102 <string name="build">ビルド</string>
103 <string name="support_link">https://discord.gg/u77vRWY</string>
104 <string name="website_link">https://yuzu-emu.org/</string>
105 <string name="github_link">https://github.com/yuzu-emu</string>
106
107 <!-- Early access upgrade strings -->
108 <string name="early_access">早期アクセス</string>
109 <string name="get_early_access">早期アクセスを手に入れる</string>
110 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
111 <string name="get_early_access_description">最先端の機能、アップデートの早期アクセスなど</string>
112 <string name="early_access_benefits">早期アクセスのメリット</string>
113 <string name="cutting_edge_features">最先端の機能</string>
114 <string name="early_access_updates">アップデートの早期アクセス</string>
115 <string name="no_manual_installation">手動インストールが不要</string>
116 <string name="prioritized_support">優先的なサポート</string>
117 <string name="helping_game_preservation">ゲームの保存に貢献</string>
118 <string name="our_eternal_gratitude">私たちの永遠の感謝</string>
119 <string name="are_you_interested">興味がありますか?</string>
120
121 <!-- General settings strings -->
122 <string name="frame_limit_enable">速度制限を有効化</string>
123 <string name="frame_limit_enable_description">有効にすると、エミュレーション速度が任意の割合に制限されます。</string>
124 <string name="frame_limit_slider">エミュレーション速度の制限</string>
125 <string name="frame_limit_slider_description">エミュレーション速度を制限する割合を指定します。デフォルトの100%では、エミュレーションは通常の速度に制限されます。値が高いまたは低いほど、速度制限が増加または減少します。</string>
126 <string name="cpu_accuracy">CPU精度</string>
127
128 <!-- System settings strings -->
129 <string name="use_docked_mode">TVモード</string>
130 <string name="use_docked_mode_description">TVモードでエミュレートします。パフォーマンスが犠牲になりますが、解像度が向上します。</string>
131 <string name="emulated_region">地域</string>
132 <string name="emulated_language">言語</string>
133 <string name="select_rtc_date">RTCの日付を選択</string>
134 <string name="select_rtc_time">RTCの時刻を選択</string>
135 <string name="use_custom_rtc">カスタムRTC</string>
136 <string name="use_custom_rtc_description">現在のシステム時間とは別にカスタムのリアルタイムクロックを設定できます。</string>
137 <string name="set_custom_rtc">カスタムRTCを設定</string>
138
139 <!-- Graphics settings strings -->
140 <string name="renderer_api">API</string>
141 <string name="renderer_accuracy">精度</string>
142 <string name="renderer_resolution">解像度</string>
143 <string name="renderer_vsync">垂直同期モード</string>
144 <string name="renderer_aspect_ratio">アスペクト比</string>
145 <string name="renderer_scaling_filter">ウィンドウ適応フィルター</string>
146 <string name="renderer_anti_aliasing">アンチエイリアス方式</string>
147 <string name="renderer_force_max_clock">最大クロックを強制 (Adrenoのみ)</string>
148 <string name="renderer_force_max_clock_description">GPUを可能な限り最大クロックで動作させます (過熱制限は引き続き適用されます)。</string>
149 <string name="renderer_asynchronous_shaders">非同期シェーダー</string>
150 <string name="renderer_asynchronous_shaders_description">シェーダーを非同期でコンパイルします。コマ落ちが軽減されますが、不具合が発生する可能性があります。</string>
151 <string name="renderer_debug">グラフィックデバッグ</string>
152 <string name="renderer_debug_description">オンにすると、グラフィックAPI は低速のデバッグモードに入ります。</string>
153 <string name="use_disk_shader_cache">シェーダーキャッシュを使用</string>
154 <string name="use_disk_shader_cache_description">生成したシェーダーをディスクに保存して読み込むことで、コマ落ちを軽減します。</string>
155
156 <!-- Audio settings strings -->
157 <string name="audio_volume">音量</string>
158 <string name="audio_volume_description">オーディオ出力の音量を指定します</string>
159
160 <!-- Miscellaneous -->
161 <string name="slider_default">デフォルト</string>
162 <string name="ini_saved">設定を保存しました</string>
163 <string name="gameid_saved">%1$sの設定を保存しました</string>
164 <string name="error_saving">%1$s.ini の保存エラー: %2$s</string>
165 <string name="loading">読み込み中…</string>
166 <string name="reset_setting_confirmation">この設定を初期値にリセットしますか?</string>
167 <string name="reset_to_default">初期設定に戻す</string>
168 <string name="reset_all_settings">すべての設定をリセットしますか?</string>
169 <string name="reset_all_settings_description">すべての詳細設定が初期設定に戻されます。この操作は元に戻せません。</string>
170 <string name="settings_reset">設定をリセットしました</string>
171 <string name="close">閉じる</string>
172 <string name="learn_more">詳細情報</string>
173
174 <!-- GPU driver installation -->
175 <string name="select_gpu_driver">GPUドライバを選択</string>
176 <string name="select_gpu_driver_title">現在のGPUドライバーを置き換えますか?</string>
177 <string name="select_gpu_driver_install">インストール</string>
178 <string name="select_gpu_driver_default">デフォルト</string>
179 <string name="select_gpu_driver_install_success">%s をインストールしました</string>
180 <string name="select_gpu_driver_use_default">デフォルトのGPUドライバーを使用します</string>
181 <string name="select_gpu_driver_error">選択されたドライバが無効なため、システムのデフォルトを使用します!</string>
182 <string name="system_gpu_driver">システムのGPUドライバ</string>
183 <string name="installing_driver">インストール中…</string>
184
185 <!-- Preferences Screen -->
186 <string name="preferences_advanced_settings">詳細設定</string>
187 <string name="preferences_settings">設定</string>
188 <string name="preferences_general">全般</string>
189 <string name="preferences_system">システム</string>
190 <string name="preferences_graphics">グラフィック</string>
191 <string name="preferences_audio">サウンド</string>
192 <string name="preferences_theme">テーマと色</string>
193
194 <!-- ROM loading errors -->
195 <string name="loader_error_encrypted">ROMが暗号化されています</string>
196 <string name="loader_error_encrypted_roms_description"><![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">ゲームカートリッジ</a>や<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">インストール済みのタイトル</a>を再度ダンプするためのガイドに従ってください。]]></string>
197 <string name="loader_error_encrypted_keys_description"><![CDATA[ゲームを復号化するために <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> ファイルがインストールされていることを確認してください。]]></string>
198 <string name="loader_error_video_core">ビデオコアの初期化中にエラーが発生しました</string>
199 <string name="loader_error_video_core_description">これは通常、互換性のないGPUドライバーが原因で発生します。 カスタムGPUドライバーをインストールすると、問題が解決する可能性があります。</string>
200 <string name="loader_error_invalid_format">ROMの読み込みに失敗しました</string>
201 <string name="loader_error_file_not_found">ROMファイルが存在しません</string>
202
203 <!-- Emulation Menu -->
204 <string name="emulation_exit">エミュレーションを終了</string>
205 <string name="emulation_done">完了</string>
206 <string name="emulation_fps_counter">FPSカウンター</string>
207 <string name="emulation_toggle_controls">コントロールを切り替え</string>
208 <string name="emulation_dpad_slide">十字キーのスライド操作</string>
209 <string name="emulation_haptics">振動</string>
210 <string name="emulation_show_overlay">オーバーレイを表示</string>
211 <string name="emulation_toggle_all">すべて選択</string>
212 <string name="emulation_control_adjust">オーバーレイを調整</string>
213 <string name="emulation_control_scale">大きさ</string>
214 <string name="emulation_control_opacity">不透明度</string>
215 <string name="emulation_touch_overlay_reset">リセット</string>
216 <string name="emulation_touch_overlay_edit">オーバーレイを編集</string>
217 <string name="emulation_pause">エミュレーションを一時停止</string>
218 <string name="emulation_unpause">エミュレーションを再開</string>
219 <string name="emulation_input_overlay">オーバーレイオプション</string>
220 <string name="emulation_game_loading">ロード中…</string>
221
222 <string name="load_settings">設定をロード中…</string>
223
224 <!-- Software keyboard -->
225 <string name="software_keyboard">ソフトウェアキーボード</string>
226
227 <!-- Errors and warnings -->
228 <string name="abort_button">中断</string>
229 <string name="continue_button">続行</string>
230 <string name="system_archive_not_found">システムアーカイブが見つかりません</string>
231 <string name="system_archive_not_found_message">%s が見つかりません。システムアーカイブをダンプしてください。\nエミュレーションを続行すると、クラッシュやバグが発生する可能性があります。</string>
232 <string name="system_archive_general">システムアーカイブ</string>
233 <string name="save_load_error">セーブ/ロード エラー</string>
234 <string name="fatal_error">致命的なエラー</string>
235 <string name="fatal_error_message">致命的なエラーが発生しました。詳細はログを確認してください。\nエミュレーションを続行するとクラッシュやバグが発生する可能性があります。</string>
236 <string name="performance_warning">この設定をオフにすると、エミュレーションのパフォーマンスが著しく低下します!最高の体験を得るためには、この設定を有効にしておくことをお勧めします。</string>
237
238 <!-- Region Names -->
239 <string name="region_auto">自動選択</string>
240 <string name="region_japan">日本</string>
241 <string name="region_usa">アメリカ</string>
242 <string name="region_europe">ヨーロッパ</string>
243 <string name="region_australia">オーストラリア</string>
244 <string name="region_china">中国</string>
245 <string name="region_korea">韓国</string>
246 <string name="region_taiwan">台湾</string>
247
248 <!-- Language Names -->
249 <string name="language_japanese">日本語</string>
250 <string name="language_english">英語</string>
251 <string name="language_french">フランス語 (Français)</string>
252 <string name="langauge_german">ドイツ語 (Deutsch)</string>
253 <string name="language_italian">イタリア語 (Italiano)</string>
254 <string name="language_spanish">スペイン語 (Español)</string>
255 <string name="language_chinese">中国語 (简体中文)</string>
256 <string name="language_korean">韓国語 (한국어)</string>
257 <string name="language_dutch">オランダ語 (Nederlands)</string>
258 <string name="language_portuguese">ポルトガル語 (Português)</string>
259 <string name="language_russian">ロシア語 (Русский)</string>
260 <string name="language_taiwanese">台湾語 (台湾)</string>
261 <string name="language_british_english">イギリス英語</string>
262 <string name="language_canadian_french">フランス語(カナダ) (Français canadien)</string>
263 <string name="language_latin_american_spanish">スペイン語(ラテンアメリカ) (Español latinoamericano)</string>
264 <string name="language_simplified_chinese">中国語 (简体中文)</string>
265 <string name="language_traditional_chinese">繁体字中国語 (正體中文)</string>
266 <string name="language_brazilian_portuguese">ポルトガル語(ブラジル) (Português do Brasil)</string>
267
268 <!-- Renderer APIs -->
269 <string name="renderer_vulkan">Vulkan</string>
270 <string name="renderer_none">なし</string>
271
272 <!-- Renderer Accuracy -->
273 <string name="renderer_accuracy_normal">標準</string>
274 <string name="renderer_accuracy_high">高い</string>
275 <string name="renderer_accuracy_extreme">最高 (低速)</string>
276
277 <!-- Resolutions -->
278 <string name="resolution_half">0.5X (360p/540p)</string>
279 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
280 <string name="resolution_one">1X (720p/1080p)</string>
281 <string name="resolution_two">2X (1440p/2160p) (低速)</string>
282 <string name="resolution_three">3X (2160p/3240p) (低速)</string>
283 <string name="resolution_four">4X (2880p/4320p) (低速)</string>
284
285 <!-- Renderer VSync -->
286 <string name="renderer_vsync_immediate">Immediate (オフ)</string>
287 <string name="renderer_vsync_mailbox">Mailbox</string>
288 <string name="renderer_vsync_fifo">FIFO (オン)</string>
289 <string name="renderer_vsync_fifo_relaxed">FIFO Relaxed</string>
290
291 <!-- Scaling Filters -->
292 <string name="scaling_filter_nearest_neighbor">Nearest Neighbor</string>
293 <string name="scaling_filter_bilinear">Bilinear</string>
294 <string name="scaling_filter_bicubic">Bicubic</string>
295 <string name="scaling_filter_gaussian">Gaussian</string>
296 <string name="scaling_filter_scale_force">ScaleForce</string>
297 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
298
299 <!-- Anti-Aliasing -->
300 <string name="anti_aliasing_none">なし</string>
301 <string name="anti_aliasing_fxaa">FXAA</string>
302 <string name="anti_aliasing_smaa">SMAA</string>
303
304 <!-- Aspect Ratios -->
305 <string name="ratio_default">デフォルト (16:9)</string>
306 <string name="ratio_force_four_three">強制 4:3</string>
307 <string name="ratio_force_twenty_one_nine">強制 21:9</string>
308 <string name="ratio_force_sixteen_ten">強制 16:10</string>
309 <string name="ratio_stretch">ウィンドウに合わせる</string>
310
311 <!-- CPU Accuracy -->
312 <string name="cpu_accuracy_auto">自動</string>
313 <string name="cpu_accuracy_accurate">正確</string>
314 <string name="cpu_accuracy_unsafe">不安定</string>
315 <string name="cpu_accuracy_paranoid">パラノイド (低速)</string>
316
317 <!-- Gamepad Buttons -->
318 <string name="gamepad_d_pad">方向ボタン</string>
319 <string name="gamepad_left_stick">Lスティック</string>
320 <string name="gamepad_right_stick">Rスティック</string>
321 <string name="gamepad_home">HOMEボタン</string>
322 <string name="gamepad_screenshot">スクリーンショット</string>
323
324 <!-- Disk shader cache -->
325 <string name="preparing_shaders">シェーダーを準備しています</string>
326 <string name="building_shaders">シェーダーを構築しています</string>
327
328 <!-- Theme options -->
329 <string name="change_app_theme">アプリのテーマ</string>
330 <string name="theme_default">デフォルト</string>
331 <string name="theme_material_you">Material You</string>
332
333 <!-- Theme Modes -->
334 <string name="change_theme_mode">テーマモード</string>
335 <string name="theme_mode_follow_system">システムに従う</string>
336 <string name="theme_mode_light">ライト</string>
337 <string name="theme_mode_dark">ダーク</string>
338
339 <!-- Black backgrounds theme -->
340 <string name="use_black_backgrounds">黒色の背景を使用</string>
341 <string name="use_black_backgrounds_description">ダークテーマの使用時は、黒色の背景を有効にしてください。</string>
342
343</resources>
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 100644
index 000000000..43b00ebc4
--- /dev/null
+++ b/src/android/app/src/main/res/values-ko/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">이 소프트웨어는 닌텐도 스위치 게임 콘솔용 게임을 실행합니다. 게임 타이틀이나 keys는 포함되어 있지 않습니다.&lt;br /&gt;&lt;br /&gt;시작하기 전에 장치 저장소에서 <![CDATA[<b> prod.keys </b>]]> 파일을 찾아주세요.&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">자세히 알아보기</a>]]></string>
5 <string name="emulation_notification_channel_name">에뮬레이션이 활성화됨</string>
6 <string name="emulation_notification_channel_description">에뮬레이션이 실행 중일 때 영구 알림을 표시합니다.</string>
7 <string name="emulation_notification_running">yuzu가 실행 중입니다.</string>
8 <string name="notice_notification_channel_name">알림 및 오류</string>
9 <string name="notice_notification_channel_description">문제가 발생하면 알림을 표시합니다.</string>
10 <string name="notification_permission_not_granted">알림 권한이 부여되지 않았습니다!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">환영합니다!</string>
14 <string name="welcome_description">&lt;b>yuzu&lt;/b> 를 설정하고 에뮬레이션으로 이동하는 방법을 알아보세요.</string>
15 <string name="get_started">시작하기</string>
16 <string name="keys">Keys</string>
17 <string name="keys_description">아래 버튼을 사용하여 &lt;b>prod.keys&lt;/b> 파일을 선택합니다.</string>
18 <string name="select_keys">keys 선택</string>
19 <string name="games">게임</string>
20 <string name="games_description">아래 버튼으로 &lt;b>게임&lt;/b> 폴더를 선택합니다.</string>
21 <string name="done">완료</string>
22 <string name="done_description">모든 준비가 완료되었습니다.\n게임을 즐기세요!</string>
23 <string name="text_continue">계속</string>
24 <string name="next">다음</string>
25 <string name="back">뒤로</string>
26 <string name="add_games">게임 추가</string>
27 <string name="add_games_description">게임 폴더 선택</string>
28
29 <!-- Home strings -->
30 <string name="home_games">게임</string>
31 <string name="home_search">검색</string>
32 <string name="home_settings">설정</string>
33 <string name="empty_gamelist">파일을 찾을 수 없거나 아직 게임 디렉토리를 선택하지 않았습니다.</string>
34 <string name="search_and_filter_games">게임 검색 및 필터링</string>
35 <string name="select_games_folder">게임 폴더 선택</string>
36 <string name="select_games_folder_description">yuzu가 게임 목록을 채울 수 있도록 허용</string>
37 <string name="add_games_warning">게임 폴더 선택을 건너뛰겠습니까?</string>
38 <string name="add_games_warning_description">폴더를 선택하지 않으면 게임 목록에 게임이 표시되지 않습니다.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">게임 검색</string>
41 <string name="games_dir_selected">게임 디렉터리 선택</string>
42 <string name="install_prod_keys">prod.keys 설치</string>
43 <string name="install_prod_keys_description">판매용 게임 암호 해독에 요구</string>
44 <string name="install_prod_keys_warning">keys 추가를 건너뛰겠습니까?</string>
45 <string name="install_prod_keys_warning_description">정품 게임을 에뮬레이트하려면 유효한 keys가 필요합니다. 계속하면 자체 제작 앱만 작동합니다.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">알림</string>
48 <string name="notifications_description">아래 버튼으로 알림 권한을 부여합니다.</string>
49 <string name="give_permission">권한 부여</string>
50 <string name="notification_warning">알림 권한 부여를 건너뛰겠습니까?</string>
51 <string name="notification_warning_description">yuzu는 중요한 정보를 알려드리지 않습니다.</string>
52 <string name="permission_denied">권한 거부됨</string>
53 <string name="permission_denied_description">이 권한을 너무 많이 거부했으므로 이제 시스템 설정에서 수동으로 권한을 부여해야 합니다.</string>
54 <string name="about">정보</string>
55 <string name="about_description">빌드 버전, 크레딧 등</string>
56 <string name="warning_help">도움말</string>
57 <string name="warning_skip">건너뛰기</string>
58 <string name="warning_cancel">취소</string>
59 <string name="install_amiibo_keys">Amiibo keys 설치</string>
60 <string name="install_amiibo_keys_description">게임에서 아미보 사용 시 필요</string>
61 <string name="invalid_keys_file">잘못된 keys 파일 선택</string>
62 <string name="install_keys_success">keys가 성공적으로 설치됨</string>
63 <string name="reading_keys_failure">암호화 keys 읽기 오류</string>
64 <string name="install_keys_failure_extension_description">
651. keys의 확장자가 .keys인지 확인하세요.\n\n
662. keys는 다운로드 폴더에 저장하면 안 됩니다.\n\n
67문제를 해결하고 다시 시도하세요.
68</string>
69 <string name="invalid_keys_error">잘못된 암호화 keys</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">선택한 파일이 잘못되었거나 손상되었습니다. keys를 다시 덤프하세요.</string>
72 <string name="install_gpu_driver">GPU 드라이버 설치</string>
73 <string name="install_gpu_driver_description">잠재적으로 더 나은 성능 또는 정확성을 위해 대체 드라이버를 설치하세요.</string>
74 <string name="advanced_settings">고급 설정</string>
75 <string name="settings_description">에뮬레이터 설정 구성</string>
76 <string name="search_recently_played">최근 플레이한 게임</string>
77 <string name="search_recently_added">최근 추가한 게임</string>
78 <string name="search_retail">판매용</string>
79 <string name="search_homebrew">홈브류</string>
80 <string name="open_user_folder">yuzu 폴더 열기</string>
81 <string name="open_user_folder_description">yuzu의 내부 파일 관리</string>
82 <string name="theme_and_color_description">앱 모양 수정</string>
83 <string name="no_file_manager">파일 관리자를 찾을 수 없음</string>
84 <string name="notification_no_directory_link">yuzu 디렉토리를 열 수 없음</string>
85 <string name="notification_no_directory_link_description">파일 관리자의 사이드 패널에서 사용자 폴더를 수동으로 찾아주세요.</string>
86 <string name="manage_save_data">저장 데이터 관리</string>
87 <string name="manage_save_data_description">데이터를 저장했습니다. 아래에서 옵션을 선택하세요.</string>
88 <string name="import_export_saves_description">저장 파일 가져오기 또는 내보내기</string>
89 <string name="import_export_saves_no_profile">저장 데이터를 찾을 수 없습니다. 게임을 실행한 후 다시 시도하세요.</string>
90 <string name="save_file_imported_success">가져오기 성공</string>
91 <string name="save_file_invalid_zip_structure">저장 디렉터리 구조가 잘못됨</string>
92 <string name="save_file_invalid_zip_structure_description">첫 번째 하위 폴더 이름은 게임의 타이틀 ID여야 합니다.</string>
93 <string name="import_saves">가져오기</string>
94 <string name="export_saves">내보내기</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">가이아는 진짜가 아님</string>
98 <string name="copied_to_clipboard">클립보드에 복사</string>
99 <string name="about_app_description">오픈 소스 스위치 에뮬레이터</string>
100 <string name="contributors">기여자</string>
101 <string name="contributors_description">yuzu 팀의 \u2764로 제작</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">빌드</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">미리 체험하기</string>
110 <string name="get_early_access">미리 체험하기 신청</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">최첨단 기능, 미리 체험하기 업데이트 등</string>
113 <string name="early_access_benefits">미리 체험하기 혜택</string>
114 <string name="cutting_edge_features">최첨단 기능</string>
115 <string name="early_access_updates">미리 체험하기 업데이트</string>
116 <string name="no_manual_installation">수동 설치 불필요</string>
117 <string name="prioritized_support">우선 지원</string>
118 <string name="helping_game_preservation">게임 보존 도움주기</string>
119 <string name="our_eternal_gratitude">영원한 감사의 마음을 전합니다</string>
120 <string name="are_you_interested">관심 있으세요?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">제한 속도 활성화</string>
124 <string name="frame_limit_enable_description">활성화하면 에뮬레이션 속도가 정상 속도의 지정된 비율로 제한됩니다.</string>
125 <string name="frame_limit_slider">속도 제한 비율</string>
126 <string name="frame_limit_slider_description">에뮬레이션 속도를 제한할 비율을 지정합니다. 기본값인 100%로 설정하면 에뮬레이션이 정상 속도로 제한됩니다. 값이 높거나 낮으면 속도 제한이 증가하거나 감소합니다.</string>
127 <string name="cpu_accuracy">CPU 정확도</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">도킹 모드</string>
131 <string name="use_docked_mode_description">도킹 모드에서 에뮬레이션하면 성능이 저하되는 대신 해상도가 향상됩니다.</string>
132 <string name="emulated_region">에뮬레이트된 지역</string>
133 <string name="emulated_language">에뮬레이트된 언어</string>
134 <string name="select_rtc_date">RTC 날짜 선택</string>
135 <string name="select_rtc_time">RTC 시간 선택</string>
136 <string name="use_custom_rtc">커스텀 RTC 활성화</string>
137 <string name="use_custom_rtc_description">이 설정을 사용하면 현재 시스템 시간과 별도로 사용자 지정 실시간 시계를 설정할 수 있음</string>
138 <string name="set_custom_rtc">커스텀 RTC 설정</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">정확도 수준</string>
143 <string name="renderer_resolution">해상도</string>
144 <string name="renderer_vsync">수직동기화 모드</string>
145 <string name="renderer_aspect_ratio">화면비</string>
146 <string name="renderer_scaling_filter">창 적응 필터</string>
147 <string name="renderer_anti_aliasing">안티-에일리어싱 방법</string>
148 <string name="renderer_force_max_clock">최대 클럭 강제 설정 (아드레노만 해당)</string>
149 <string name="renderer_force_max_clock_description">GPU가 가능한 최대 클럭으로 실행되도록 강제합니다 (열 제약 조건은 여전히 적용됩니다).</string>
150 <string name="renderer_asynchronous_shaders">비동기 셰이더 사용</string>
151 <string name="renderer_asynchronous_shaders_description">셰이더를 비동기식으로 컴파일하므로 끊김 현상이 줄어들지만 글리치가 발생할 수 있습니다.</string>
152 <string name="renderer_debug">그래픽 디버깅 활성화</string>
153 <string name="renderer_debug_description">이 옵션을 선택하면 그래픽 API가 느린 디버깅 모드로 전환됩니다.</string>
154 <string name="use_disk_shader_cache">디스크 셰이더 캐시 사용</string>
155 <string name="use_disk_shader_cache_description">생성된 셰이더를 디스크에 저장하고 불러오기하여 끊김 현상을 줄입니다.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">볼륨</string>
159 <string name="audio_volume_description">오디오 출력의 볼륨을 지정합니다.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">기본값</string>
163 <string name="ini_saved">저장된 설정</string>
164 <string name="gameid_saved">%1$s를 위해 저장된 설정</string>
165 <string name="error_saving">%1$s.ini 저장 중 오류: %2$s</string>
166 <string name="loading">불러오기 중...</string>
167 <string name="reset_setting_confirmation">이 설정을 기본값으로 되돌리겠습니까?</string>
168 <string name="reset_to_default">기본값으로 재설정</string>
169 <string name="reset_all_settings">모든 설정을 초기화하겠습니까?</string>
170 <string name="reset_all_settings_description">모든 고급 설정이 기본 구성으로 재설정됩니다. 이 설정은 되돌릴 수 없습니다.</string>
171 <string name="settings_reset">설정 초기화</string>
172 <string name="close">닫기</string>
173 <string name="learn_more">자세히 알아보기</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">GPU 드라이버 선택</string>
177 <string name="select_gpu_driver_title">현재 사용 중인 GPU 드라이버를 교체하겠습니까?</string>
178 <string name="select_gpu_driver_install">설치</string>
179 <string name="select_gpu_driver_default">기본값</string>
180 <string name="select_gpu_driver_install_success">설치된 %s</string>
181 <string name="select_gpu_driver_use_default">기본 GPU 드라이버 사용</string>
182 <string name="select_gpu_driver_error">시스템 기본값을 사용하여 잘못된 드라이버를 선택했습니다!</string>
183 <string name="system_gpu_driver">시스템 GPU 드라이버</string>
184 <string name="installing_driver">드라이버 설치 중...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">고급 설정</string>
188 <string name="preferences_settings">설정</string>
189 <string name="preferences_general">일반</string>
190 <string name="preferences_system">시스템</string>
191 <string name="preferences_graphics">그래픽</string>
192 <string name="preferences_audio">오디오</string>
193 <string name="preferences_theme">테마 및 색상</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">롬이 암호화되었음</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[가이드에 따라 <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">게임 카트리지</a> 또는 <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">설치된 타이틀</a>를 다시 덤프하세요.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[P게임을 해독할 수 있도록 <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> 파일이 설치되어 있는지 확인하세요.]]></string>
199 <string name="loader_error_video_core">비디오 코어를 초기화하는 동안 오류 발생</string>
200 <string name="loader_error_video_core_description">이 문제는 일반적으로 호환되지 않는 GPU 드라이버로 인해 발생합니다. 사용자 지정 GPU 드라이버를 설치하면 이 문제가 해결될 수 있습니다.</string>
201 <string name="loader_error_invalid_format">롬을 불러올 수 없음</string>
202 <string name="loader_error_file_not_found">롬 파일이 존재하지 않음</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">에뮬레이션 종료</string>
206 <string name="emulation_done">완료</string>
207 <string name="emulation_fps_counter">FPS 카운터</string>
208 <string name="emulation_toggle_controls">토글 제어</string>
209 <string name="emulation_rel_stick_center">상대 스틱 센터</string>
210 <string name="emulation_dpad_slide">십자패드 슬라이드</string>
211 <string name="emulation_haptics">햅틱</string>
212 <string name="emulation_show_overlay">오버레이 표시</string>
213 <string name="emulation_toggle_all">모두 토글</string>
214 <string name="emulation_control_adjust">오버레이 조정</string>
215 <string name="emulation_control_scale">스케일</string>
216 <string name="emulation_control_opacity">불투명도</string>
217 <string name="emulation_touch_overlay_reset">오버레이 재설정</string>
218 <string name="emulation_touch_overlay_edit">오버레이 편집</string>
219 <string name="emulation_pause">에뮬레이션 일시 중지</string>
220 <string name="emulation_unpause">에뮬레이션 일시 중지 해제</string>
221 <string name="emulation_input_overlay">오버레이 옵션</string>
222 <string name="emulation_game_loading">게임 불러오기 중...</string>
223
224 <string name="load_settings">설정 불러오기 중...</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">가상 키보드</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">정보</string>
231 <string name="continue_button">계속</string>
232 <string name="system_archive_not_found">시스템 아카이브를 찾을 수 없음</string>
233 <string name="system_archive_not_found_message">%s가 누락되었습니다. 시스템 아카이브를 덤프하세요.\n에뮬레이션을 계속하면 충돌 및 버그가 발생할 수 있습니다.</string>
234 <string name="system_archive_general">시스템 아카이브</string>
235 <string name="save_load_error">저장하기/불러오기 오류</string>
236 <string name="fatal_error">치명적인 오류</string>
237 <string name="fatal_error_message">치명적인 오류가 발생했습니다. 자세한 내용은 로그를 확인하십시오.\n에뮬레이션을 계속하면 충돌 및 버그가 발생할 수 있습니다.</string>
238 <string name="performance_warning">이 설정을 끄면 에뮬레이션 성능이 크게 저하됩니다! 최상의 환경을 위해 이 설정을 활성화된 상태로 두는 것이 좋습니다.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">자동 선택</string>
242 <string name="region_japan">일본</string>
243 <string name="region_usa">미국</string>
244 <string name="region_europe">유럽</string>
245 <string name="region_australia">호주</string>
246 <string name="region_china">중국</string>
247 <string name="region_korea">대한민국</string>
248 <string name="region_taiwan">타이완</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">일본어 (日本語)</string>
252 <string name="language_english">영어 (English)</string>
253 <string name="language_french">프랑스어 (Français)</string>
254 <string name="langauge_german">독일어(Deutsch)</string>
255 <string name="language_italian">이탈리아어 (Italiano)</string>
256 <string name="language_spanish">스페인어 (Español)</string>
257 <string name="language_chinese">중국어 (简体中文)</string>
258 <string name="language_korean">한국어 (Korean)</string>
259 <string name="language_dutch">네덜란드어 (Nederlands)</string>
260 <string name="language_portuguese">포르투갈어 (Português)</string>
261 <string name="language_russian">러시아어 (Русский)</string>
262 <string name="language_taiwanese">대만어 (台湾)</string>
263 <string name="language_british_english">영어 (British English)</string>
264 <string name="language_canadian_french">캐나다 프랑스어 (Français canadien)</string>
265 <string name="language_latin_american_spanish">라틴 아메리카 스페인어 (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">중국어 간체 (简体中文)</string>
267 <string name="language_traditional_chinese">중국어 번체 (正體中文)</string>
268 <string name="language_brazilian_portuguese">브라질 포르투갈어 (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">불칸</string>
272 <string name="renderer_none">없음</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">보통</string>
276 <string name="renderer_accuracy_high">높음</string>
277 <string name="renderer_accuracy_extreme">극한 (느림)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (느림)</string>
284 <string name="resolution_three">3X (2160p/3240p) (느림)</string>
285 <string name="resolution_four">4X (2880p/4320p) (느림)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">즉시 (끔)</string>
289 <string name="renderer_vsync_mailbox">메일박스</string>
290 <string name="renderer_vsync_fifo">FIFO (켬)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO 릴랙스</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">가장 가까운 이웃</string>
295 <string name="scaling_filter_bilinear">이중선형</string>
296 <string name="scaling_filter_bicubic">고등차수보간</string>
297 <string name="scaling_filter_gaussian">가우시안</string>
298 <string name="scaling_filter_scale_force">스케일포스</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™ 초고해상도</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">없음</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">기본 (16:9)</string>
308 <string name="ratio_force_four_three">강제 4:3</string>
309 <string name="ratio_force_twenty_one_nine">강제 21:9</string>
310 <string name="ratio_force_sixteen_ten">강제 16:10</string>
311 <string name="ratio_stretch">창에 맞게 늘림</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">자동</string>
315 <string name="cpu_accuracy_accurate">정확함</string>
316 <string name="cpu_accuracy_unsafe">안전하지 않음</string>
317 <string name="cpu_accuracy_paranoid">편집증 (느림)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">십자패드</string>
321 <string name="gamepad_left_stick">L 스틱</string>
322 <string name="gamepad_right_stick">R 스틱</string>
323 <string name="gamepad_home">홈</string>
324 <string name="gamepad_screenshot">스크린샷</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">셰이더 준비하기</string>
328 <string name="building_shaders">셰이더 빌드 중</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">앱 테마 변경</string>
332 <string name="theme_default">기본값</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">테마 모드 변경</string>
337 <string name="theme_mode_follow_system">팔로우 시스템</string>
338 <string name="theme_mode_light">밝음</string>
339 <string name="theme_mode_dark">어두움</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">검은색 배경 사용</string>
343 <string name="use_black_backgrounds_description">어두운 테마를 사용할 때는 검은색 배경을 적용합니다.</string>
344
345</resources>
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 100644
index 000000000..80213aed4
--- /dev/null
+++ b/src/android/app/src/main/res/values-nb/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Denne programvaren vil kjøre spill for Nintendo Switch-spillkonsollen. Ingen spilltitler eller nøkler er inkludert.&lt;br /&gt;&lt;br /&gt;Før du begynner, må du finne <![CDATA[<b> prod.keys </b>]]> filen din på enhetslagringen.&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">Lær mer</a>]]></string>
5 <string name="emulation_notification_channel_name">Emulering er aktiv</string>
6 <string name="emulation_notification_channel_description">Viser et vedvarende varsel når emuleringen kjører.</string>
7 <string name="emulation_notification_running">Yuzu kjører</string>
8 <string name="notice_notification_channel_name">Merknader og feil</string>
9 <string name="notice_notification_channel_description">Viser varsler når noe går galt.</string>
10 <string name="notification_permission_not_granted">Varslingstillatelse ikke gitt!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Velkommen!</string>
14 <string name="welcome_description">Lær å sette opp &lt;b>yuzu&lt;/b> og hopp inn i emulering.</string>
15 <string name="get_started">Kom i gang</string>
16 <string name="keys">Nøkler</string>
17 <string name="keys_description">Velg din &lt;b>prod.keys&lt;/b> fil ved å bruke knappen under.</string>
18 <string name="select_keys">Velg nøkler</string>
19 <string name="games">Spill</string>
20 <string name="games_description">Velg din &lt;b>Spill&lt;/b> mappe ved å bruke knappen under.</string>
21 <string name="done">Ferdig</string>
22 <string name="done_description">Nå er du klar.\nGled deg til å spille!</string>
23 <string name="text_continue">Fortsett</string>
24 <string name="next">Neste</string>
25 <string name="back">Tilbake</string>
26 <string name="add_games">Legg til spill</string>
27 <string name="add_games_description">Velg din spillmappe</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Spill</string>
31 <string name="home_search">Søk</string>
32 <string name="home_settings">Innstillinger</string>
33 <string name="empty_gamelist">Ingen filer ble funnet eller ingen spillkatalog er valgt ennå.</string>
34 <string name="search_and_filter_games">Søk og filtrer spill</string>
35 <string name="select_games_folder">Velg spillmappe</string>
36 <string name="select_games_folder_description">Gjør det mulig for yuzu å fylle ut spillelisten.</string>
37 <string name="add_games_warning">Hoppe over valg av spillmappe?</string>
38 <string name="add_games_warning_description">Spill vises ikke i Spill-listen hvis en mappe ikke er valgt.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Søk i spill</string>
41 <string name="games_dir_selected">Spillkatalogen er valgt</string>
42 <string name="install_prod_keys">Installer prod.keys</string>
43 <string name="install_prod_keys_description">Nødvendig for å dekryptere spill</string>
44 <string name="install_prod_keys_warning">Hoppe over å legge til nøkler?</string>
45 <string name="install_prod_keys_warning_description">Gyldige nøkler er påkrevd for å emulere spill. Bare hjemmebryggede apper vil fungere hvis du fortsetter.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Varsler</string>
48 <string name="notifications_description">Gi varslingstillatelse med knappen nedenfor.</string>
49 <string name="give_permission">Gi tillatelse</string>
50 <string name="notification_warning">Hoppe over å gi tillatelse til varsling?</string>
51 <string name="notification_warning_description">yuzu vil ikke kunne varsle deg om viktig informasjon.</string>
52 <string name="permission_denied">Tillatelse avslått</string>
53 <string name="permission_denied_description">Du har nektet denne tillatelsen for mange ganger, og nå må du gi den manuelt i systeminnstillingene.</string>
54 <string name="about">Om</string>
55 <string name="about_description">Byggeversjon, kildehenvisninger og mer</string>
56 <string name="warning_help">Hjelp</string>
57 <string name="warning_skip">Hopp over</string>
58 <string name="warning_cancel">Avbryt</string>
59 <string name="install_amiibo_keys">Installer Amiibo-nøkler</string>
60 <string name="install_amiibo_keys_description">Kreves for å bruke Amiibo i spillet</string>
61 <string name="invalid_keys_file">Ugyldig nøkkelfil valgt</string>
62 <string name="install_keys_success">Nøkler vellykket installert</string>
63 <string name="reading_keys_failure">Feil ved lesing av krypteringsnøkler</string>
64 <string name="install_keys_failure_extension_description">
65 1. Kontroller at nøklene har filtypen .keys.\n\n
66 2. Nøkler må ikke lagres i nedlastingsmappen.\n\n
67 Løs problemet/problemene og prøv igjen.
68 </string>
69 <string name="invalid_keys_error">Ugyldige krypteringsnøkler</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Den valgte filen er feil eller ødelagt. Vennligst dump nøklene på nytt.</string>
72 <string name="install_gpu_driver">Installer GPU-driver</string>
73 <string name="install_gpu_driver_description">Installer alternative drivere for potensielt bedre ytelse eller nøyaktighet.</string>
74 <string name="advanced_settings">Avanserte innstillinger</string>
75 <string name="settings_description">Konfigurere emulatorinnstillinger</string>
76 <string name="search_recently_played">Nylig spilt</string>
77 <string name="search_recently_added">Nylig lagt til</string>
78 <string name="search_retail">Butikkhandel</string>
79 <string name="search_homebrew">Homebrew</string>
80 <string name="open_user_folder">Åpne yuzu-mappen</string>
81 <string name="open_user_folder_description">Administrere yuzus interne filer</string>
82 <string name="theme_and_color_description">Endre appens utseende</string>
83 <string name="no_file_manager">Ingen filbehandler funnet</string>
84 <string name="notification_no_directory_link">Kunne ikke åpne yuzu-katalogen</string>
85 <string name="notification_no_directory_link_description">Finn brukermappen manuelt med filbehandlingens sidepanel.</string>
86 <string name="manage_save_data">Administrere lagringsdata</string>
87 <string name="manage_save_data_description">Lagringsdata funnet. Velg et alternativ nedenfor.</string>
88 <string name="import_export_saves_description">Importer eller eksporter lagringsfiler</string>
89 <string name="import_export_saves_no_profile">Ingen lagringsdata funnet. Start et nytt spill og prøv på nytt.</string>
90 <string name="save_file_imported_success">Vellykket import</string>
91 <string name="save_file_invalid_zip_structure">Ugyldig struktur for lagringskatalog</string>
92 <string name="save_file_invalid_zip_structure_description">Det første undermappenavnet må være spillets tittel-ID.</string>
93 <string name="import_saves">Importer</string>
94 <string name="export_saves">Eksporter</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia er ikke ekte</string>
98 <string name="copied_to_clipboard">Kopiert til utklippstavlen</string>
99 <string name="about_app_description">En Switch-emulator med åpen kildekode</string>
100 <string name="contributors">Bidragsytere</string>
101 <string name="contributors_description">Laget med \u2764 fra yuzu-teamet</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">Bygg</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">Tidlig tilgang</string>
110 <string name="get_early_access">Få tidlig tilgang</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">Banebrytende funksjoner, tidlig tilgang til oppdateringer og mye mer.</string>
113 <string name="early_access_benefits">Fordeler ved tidlig tilgang</string>
114 <string name="cutting_edge_features">Avanserte funksjoner</string>
115 <string name="early_access_updates">Tidlig tilgang til oppdateringer</string>
116 <string name="no_manual_installation">Ingen manuell installasjon</string>
117 <string name="prioritized_support">Prioritert støtte</string>
118 <string name="helping_game_preservation">Bidra til bevaring av spill</string>
119 <string name="our_eternal_gratitude">Vår evige takknemlighet</string>
120 <string name="are_you_interested">Er du interessert?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">Aktiver hastighetsbegrensning</string>
124 <string name="frame_limit_enable_description">Når aktivert, begrenses emuleringshastigheten til en angitt prosentandel av normal hastighet.</string>
125 <string name="frame_limit_slider">Hastighetsbegrensning i prosent</string>
126 <string name="frame_limit_slider_description">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.</string>
127 <string name="cpu_accuracy">CPU-nøyaktighet</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">Dokket modus</string>
131 <string name="use_docked_mode_description">Emulerer i dokket modus, noe som øker oppløsningen på bekostning av ytelsen.</string>
132 <string name="emulated_region">Emulert region</string>
133 <string name="emulated_language">Emulert språk</string>
134 <string name="select_rtc_date">Velg RTC-dato</string>
135 <string name="select_rtc_time">Velg RTC-tid</string>
136 <string name="use_custom_rtc">Aktiver egendefinert RTC</string>
137 <string name="use_custom_rtc_description">Med denne innstillingen kan du stille inn en egendefinert sanntidsklokke som er atskilt fra gjeldende systemtid.</string>
138 <string name="set_custom_rtc">Angi egendefinert RTC</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">Nøyaktighetsnivå</string>
143 <string name="renderer_resolution">Oppløsning</string>
144 <string name="renderer_vsync">VSync-modus</string>
145 <string name="renderer_aspect_ratio">Størrelsesforhold</string>
146 <string name="renderer_scaling_filter">Filter for vindustilpasning</string>
147 <string name="renderer_anti_aliasing">Anti-Aliasing-metode</string>
148 <string name="renderer_force_max_clock">Tving fram maksimal klokkefrekvens (kun Adreno)</string>
149 <string name="renderer_force_max_clock_description">Tvinger GPU-en til å kjøre med maksimal klokkefrekvens (termiske begrensninger vil fortsatt gjelde).</string>
150 <string name="renderer_asynchronous_shaders">Bruk asynkrone shaders</string>
151 <string name="renderer_asynchronous_shaders_description">Kompilerer shaders asynkront, noe som reduserer hakkingen, men kan føre til feil.</string>
152 <string name="renderer_debug">Aktiver feilsøking av grafikk</string>
153 <string name="renderer_debug_description">Når dette er merket av, går grafikk-API-et inn i en langsommere feilsøkingsmodus.</string>
154 <string name="use_disk_shader_cache">Bruk disk shader-cache</string>
155 <string name="use_disk_shader_cache_description">Reduser hakking ved å lagre og laste inn genererte shaders på disken.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">Volum</string>
159 <string name="audio_volume_description">Angir volumet på lydutgangen.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">Standard</string>
163 <string name="ini_saved">Lagrede innstillinger</string>
164 <string name="gameid_saved">Lagrede innstillinger for %1$s</string>
165 <string name="error_saving">Feil ved lagring av %1$s.ini: %2$s</string>
166 <string name="loading">Lastes inn...</string>
167 <string name="reset_setting_confirmation">Vil du tilbakestille denne innstillingen til standardverdien?</string>
168 <string name="reset_to_default">Tilbakestill til standardinnstillingene</string>
169 <string name="reset_all_settings">Tilbakestille alle innstillinger?</string>
170 <string name="reset_all_settings_description">Alle avanserte innstillinger tilbakestilles til standardkonfigurasjonen. Dette kan ikke angres.</string>
171 <string name="settings_reset">Tilbakestilling av innstillinger</string>
172 <string name="close">Lukk</string>
173 <string name="learn_more">Lær Mer</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">Velg GPU-driver</string>
177 <string name="select_gpu_driver_title">Ønsker du å bytte ut din nåværende GPU-driver?</string>
178 <string name="select_gpu_driver_install">Installer</string>
179 <string name="select_gpu_driver_default">Standard</string>
180 <string name="select_gpu_driver_install_success">Installert %s</string>
181 <string name="select_gpu_driver_use_default">Bruk av standard GPU-driver</string>
182 <string name="select_gpu_driver_error">Ugyldig driver valgt, bruker systemstandard!</string>
183 <string name="system_gpu_driver">Systemets GPU-driver</string>
184 <string name="installing_driver">Installerer driver...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Avanserte innstillinger</string>
188 <string name="preferences_settings">Innstillinger</string>
189 <string name="preferences_general">Generelt</string>
190 <string name="preferences_system">System</string>
191 <string name="preferences_graphics">Grafikk</string>
192 <string name="preferences_audio">Lyd</string>
193 <string name="preferences_theme">Tema og farge</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">ROM-en din er kryptert</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[Følg veiledningene for å redumpe dine <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">spillkassetter</a> eller <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">installerte titler</a>.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[Vennligst sørg for at <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> filen er installert slik at spillene kan dekrypteres.]]></string>
199 <string name="loader_error_video_core">Det oppstod en feil ved initialisering av videokjernen</string>
200 <string name="loader_error_video_core_description">Dette skyldes vanligvis en inkompatibel GPU-driver. Installering av en tilpasset GPU-driver kan løse problemet.</string>
201 <string name="loader_error_invalid_format">Kunne ikke laste inn ROM</string>
202 <string name="loader_error_file_not_found">ROM-filen finnes ikke</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">Avslutt emulering</string>
206 <string name="emulation_done">Ferdig</string>
207 <string name="emulation_fps_counter">FPS-teller</string>
208 <string name="emulation_toggle_controls">Veksle kontroller</string>
209 <string name="emulation_rel_stick_center">Relativt senter for stikken</string>
210 <string name="emulation_dpad_slide">DPad-skyveplate</string>
211 <string name="emulation_haptics">Haptikk</string>
212 <string name="emulation_show_overlay">Vis overlegg</string>
213 <string name="emulation_toggle_all">Slå av alt</string>
214 <string name="emulation_control_adjust">Juster overlegg</string>
215 <string name="emulation_control_scale">Skaler</string>
216 <string name="emulation_control_opacity">Gjennomsiktighet</string>
217 <string name="emulation_touch_overlay_reset">Tilbakestill overlegg</string>
218 <string name="emulation_touch_overlay_edit">Rediger overlegg</string>
219 <string name="emulation_pause">Pause Emulering</string>
220 <string name="emulation_unpause">Opphev pausing av emulering</string>
221 <string name="emulation_input_overlay">Alternativer for overlegg</string>
222 <string name="emulation_game_loading">Spillet lastes inn...</string>
223
224 <string name="load_settings">Laster inn innstillinger...</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">Programvare Tastatur</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">Avbryt</string>
231 <string name="continue_button">Fortsett</string>
232 <string name="system_archive_not_found">System Arkiv Ikke Funnet</string>
233 <string name="system_archive_not_found_message">%s mangler. Dump systemarkivene dine.\nFortsatt emulering kan føre til krasj og feil.</string>
234 <string name="system_archive_general">Et systemarkiv</string>
235 <string name="save_load_error">Feil ved lagring/innlasting</string>
236 <string name="fatal_error">Fatal Feil</string>
237 <string name="fatal_error_message">Det oppstod en fatal feil. Sjekk loggen for mer informasjon.\nFortsatt emulering kan føre til krasj og feil.</string>
238 <string name="performance_warning">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.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">Automatisk valg</string>
242 <string name="region_japan">Japan</string>
243 <string name="region_usa">USA</string>
244 <string name="region_europe">Europa</string>
245 <string name="region_australia">Australia</string>
246 <string name="region_china">Kina</string>
247 <string name="region_korea">Korea</string>
248 <string name="region_taiwan">Taiwan</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">Japansk (日本語)</string>
252 <string name="language_english">Engelsk</string>
253 <string name="language_french">Fransk (Français)</string>
254 <string name="langauge_german">Tysk (Deutsch)</string>
255 <string name="language_italian">Italiensk (Italiano)</string>
256 <string name="language_spanish">Spansk (Español)</string>
257 <string name="language_chinese">Kinesisk (简体中文)</string>
258 <string name="language_korean">Koreansk (한국어)</string>
259 <string name="language_dutch">Nederlandsk (Nederlands)</string>
260 <string name="language_portuguese">Portugisisk (Português)</string>
261 <string name="language_russian">Russisk (Русский)</string>
262 <string name="language_taiwanese">Taiwansk (台湾)</string>
263 <string name="language_british_english">Britisk Engelsk</string>
264 <string name="language_canadian_french">Kanadisk fransk (Français canadien)</string>
265 <string name="language_latin_american_spanish">Latinamerikansk spansk (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">Forenklet kinesisk (简体中文)</string>
267 <string name="language_traditional_chinese">Tradisjonell Kinesisk (正體中文)</string>
268 <string name="language_brazilian_portuguese">Brasiliansk portugisisk (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulkan</string>
272 <string name="renderer_none">Ingen</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">Normal</string>
276 <string name="renderer_accuracy_high">Høy</string>
277 <string name="renderer_accuracy_extreme">Ekstrem (Treg)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (Slow)</string>
284 <string name="resolution_three">3X (2160p/3240p) (Slow)</string>
285 <string name="resolution_four">4X (2880p/4320p) (Slow)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">Umiddelbar (av)</string>
289 <string name="renderer_vsync_mailbox">Postkasse</string>
290 <string name="renderer_vsync_fifo">FIFO (På)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO avslappet</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">Nærmeste nabo</string>
295 <string name="scaling_filter_bilinear">Bilineær</string>
296 <string name="scaling_filter_bicubic">Bikubisk</string>
297 <string name="scaling_filter_gaussian">Gaussisk</string>
298 <string name="scaling_filter_scale_force">ScaleForce</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">Ingen</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">Standard (16:9)</string>
308 <string name="ratio_force_four_three">Tving 4:3</string>
309 <string name="ratio_force_twenty_one_nine">Tving 21:9</string>
310 <string name="ratio_force_sixteen_ten">Tving 16:10</string>
311 <string name="ratio_stretch">Strekk til Vindu</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Auto</string>
315 <string name="cpu_accuracy_accurate">Nøyaktig</string>
316 <string name="cpu_accuracy_unsafe">Utrygt</string>
317 <string name="cpu_accuracy_paranoid">Paranoid (Langsom)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">D-Pad</string>
321 <string name="gamepad_left_stick">Venstre Pinne</string>
322 <string name="gamepad_right_stick">Høyre Pinne</string>
323 <string name="gamepad_home">Hjem</string>
324 <string name="gamepad_screenshot">Skjermbilde</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">Forberedelse av shaders</string>
328 <string name="building_shaders">Bygging av shaders</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">Endre appens tema</string>
332 <string name="theme_default">Standard</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">Endre temamodus</string>
337 <string name="theme_mode_follow_system">Følg systemet</string>
338 <string name="theme_mode_light">Lys</string>
339 <string name="theme_mode_dark">Mørk</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">Bruk svart bakgrunn</string>
343 <string name="use_black_backgrounds_description">Bruk svart bakgrunn når du bruker det mørke temaet.</string>
344
345</resources>
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 100644
index 000000000..fc9f49e0e
--- /dev/null
+++ b/src/android/app/src/main/res/values-pl/strings.xml
@@ -0,0 +1,344 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">To oprogramowanie umożliwia uruchomienie gier z konsoli Nintendo Switch. Nie zawiera gier ani wymaganych kluczy.&lt;br /&gt;&lt;br /&gt;Zanim zaczniesz, wybierz plik kluczy <![CDATA[<b> prod.keys </b>]]> z katalogu w pamięci masowej.&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">Dowiedz się więcej</a>]]></string>
5 <string name="emulation_notification_channel_name">Emulacja jest uruchomiona</string>
6 <string name="emulation_notification_channel_description">Pokaż trwałe powiadomienie gdy emulacja jest uruchomiona.</string>
7 <string name="emulation_notification_running">yuzu jest uruchomiony</string>
8 <string name="notice_notification_channel_name">Powiadomienia błędy</string>
9 <string name="notice_notification_channel_description">Pokaż powiadomienie gdy coś pójdzie źle</string>
10 <string name="notification_permission_not_granted">Nie zezwolono na powiadomienia!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Witaj!</string>
14 <string name="welcome_description">Zobacz jak skonfigurować &lt;b>yuzu&lt;/b> i wskocz w świat emulacji.</string>
15 <string name="get_started">Zaczynamy</string>
16 <string name="keys">Klucze</string>
17 <string name="keys_description">Wybierz swoje klucze &lt;b>prod.keys&lt;/b> za pomocą przycisku poniżej.</string>
18 <string name="select_keys">Wybierz klucze</string>
19 <string name="games">Gry</string>
20 <string name="games_description">Wybierz katalog z grami &lt;b>Games&lt;/b> za pomocą przycisku poniżej.</string>
21 <string name="done">Gotowe</string>
22 <string name="done_description">Wszystko skonfigurowane.\n Miłego grania!</string>
23 <string name="text_continue">Kontynuuj</string>
24 <string name="next">Dalej</string>
25 <string name="back">Wstecz</string>
26 <string name="add_games">Dodaj gry</string>
27 <string name="add_games_description">Wybierz folder zawierający Twoje gry</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Gry</string>
31 <string name="home_search">Szukaj</string>
32 <string name="home_settings">Ustawienia</string>
33 <string name="empty_gamelist">Nie znaleziono plików, lub nie wybrano jeszcze katalogu zawierającego gry.</string>
34 <string name="search_and_filter_games">Szukaj i filtruj gry</string>
35 <string name="select_games_folder">Wybierz folder z grami</string>
36 <string name="select_games_folder_description">Pozwala yuzu wygenerować listę gier</string>
37 <string name="add_games_warning">Pominąć wybór folderu z grami?</string>
38 <string name="add_games_warning_description">Aby pokazać listę gier wybierz katalog zawierający gry.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Szukaj gier</string>
41 <string name="games_dir_selected">Wybrano katalog gier</string>
42 <string name="install_prod_keys">Instaluj klucze prod.keys</string>
43 <string name="install_prod_keys_description">Wymagane aby poprawnie odczytać sklepowe gry</string>
44 <string name="install_prod_keys_warning">Pominąć dodawanie kluczy?</string>
45 <string name="install_prod_keys_warning_description">Poprawne klucze są wymagane aby emulować sklepowe gry. Jeśli przejdziesz dalej, jedynie homebrew będą działać.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Powiadomienia</string>
48 <string name="notifications_description">Nadaj uprawnienia dostępu do powiadomień. </string>
49 <string name="give_permission">Nadaj uprawnienia</string>
50 <string name="notification_warning">Pominąć nadanie uprawnień powiadomień?</string>
51 <string name="notification_warning_description">yuzu nie będzie mógł powiadamiać Cię o ważnych informacjach.</string>
52 <string name="permission_denied">Odmowa dostępu</string>
53 <string name="permission_denied_description">Odmówiłeś dostępu do powiadomień zbyt wiele razy, teraz musisz przyznać je w ustawieniach systemowych Androida.</string>
54 <string name="about">O aplikacji</string>
55 <string name="about_description">Wersja, podziękowania i więcej</string>
56 <string name="warning_help">Pomoc</string>
57 <string name="warning_skip">Pomiń</string>
58 <string name="warning_cancel">Anuluj</string>
59 <string name="install_amiibo_keys">Zainstaluj klucze Amiibo</string>
60 <string name="install_amiibo_keys_description">Wymagane aby korzystać z Amiibo w grze</string>
61 <string name="invalid_keys_file">Wybrano niepoprawne klucze</string>
62 <string name="install_keys_success">Klucze zainstalowane pomyślnie</string>
63 <string name="reading_keys_failure">Błąd podczas odczytu kluczy</string>
64 <string name="install_keys_failure_extension_description">
651. Upewnij się że klucze mają rozszerzenie .keys. \n\n
662. Klucze nie mogą znajdować się w folderze Pobrane. \n\n
67Rozwiąż te problemy (oba) i spróbuj ponownie.</string>
68 <string name="invalid_keys_error">Niepoprawne klucze</string>
69 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
70 <string name="install_keys_failure_description">Wybrany plik jest niepoprawny lub uszkodzony. Zrzuć ponownie swoje klucze.</string>
71 <string name="install_gpu_driver">Zainstaluj sterownik GPU</string>
72 <string name="install_gpu_driver_description">Użyj alternatywnych sterowników aby potencjalnie zwiększyć wydajność i naprawić błędy</string>
73 <string name="advanced_settings">Ustawienia zaawansowane</string>
74 <string name="settings_description">Skonfiguruj ustawienia emulatora</string>
75 <string name="search_recently_played">Ostatnio grane</string>
76 <string name="search_recently_added">Ostatnio dodane</string>
77 <string name="search_retail">Sklepowe</string>
78 <string name="search_homebrew">Homebrew</string>
79 <string name="open_user_folder">Otwórz folder yuzu</string>
80 <string name="open_user_folder_description">Zarządzaj plikami emulatora</string>
81 <string name="theme_and_color_description">Personalizuj wygląd aplikacji</string>
82 <string name="no_file_manager">Nie znaleziono menedżera plików</string>
83 <string name="notification_no_directory_link">Nie można otworzyć folderu emulatora</string>
84 <string name="notification_no_directory_link_description">Proszę wybrać ręcznie folder z pomocą panelu bocznego menedżera plików.</string>
85 <string name="manage_save_data">Zarządzaj plikami zapisów gier</string>
86 <string name="manage_save_data_description">Znaleziono pliki zapisów gier. Wybierz opcję poniżej.</string>
87 <string name="import_export_saves_description">Importuj lub wyeksportuj pliki zapisów</string>
88 <string name="import_export_saves_no_profile">Nie znaleziono plików zapisów. Uruchom grę i spróbuj ponownie.</string>
89 <string name="save_file_imported_success">Zaimportowano pomyślnie</string>
90 <string name="save_file_invalid_zip_structure">Niepoprawna struktura folderów</string>
91 <string name="save_file_invalid_zip_structure_description">Pierwszy podkatalog musi zawierać w nazwie numer ID tytułu gry.</string>
92 <string name="import_saves">Importuj</string>
93 <string name="export_saves">Eksportuj</string>
94
95 <!-- About screen strings -->
96 <string name="gaia_is_not_real">Gaia isn\'t real</string>
97 <string name="copied_to_clipboard">Skopiowano do schowka</string>
98 <string name="about_app_description">Otwarto-źródłowy emulator konsoli Switch</string>
99 <string name="contributors">Współtwórcy</string>
100 <string name="contributors_description">Stworzone z \u2764 przez zespół yuzu</string>
101 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
102 <string name="build">Wersja</string>
103 <string name="support_link">https://discord.gg/u77vRWY</string>
104 <string name="website_link">https://yuzu-emu.org/</string>
105 <string name="github_link">https://github.com/yuzu-emu</string>
106
107 <!-- Early access upgrade strings -->
108 <string name="early_access">Wczesny dostęp</string>
109 <string name="get_early_access">Uzyskaj wczesny dostęp</string>
110 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
111 <string name="get_early_access_description">Nowe funkcje, szybszy dostęp do aktualizacji i nie tylko</string>
112 <string name="early_access_benefits">Korzyści z wcześniejszego dostępu</string>
113 <string name="cutting_edge_features">Nowatorskie funkcje</string>
114 <string name="early_access_updates">Częste aktualizacje</string>
115 <string name="no_manual_installation">Automatyczne aktualizacje</string>
116 <string name="prioritized_support">Priorytetowe wsparcie</string>
117 <string name="helping_game_preservation">Pomoc w problemach z grami</string>
118 <string name="our_eternal_gratitude">Nasza wdzięczność</string>
119 <string name="are_you_interested">Jesteś zainteresowany?</string>
120
121 <!-- General settings strings -->
122 <string name="frame_limit_enable">Włącz limit szybkości emulacji</string>
123 <string name="frame_limit_enable_description">Włącz, aby ustawić procentowy limit szybkości emulacji</string>
124 <string name="frame_limit_slider">Procentowy limit szybkości emulacji</string>
125 <string name="frame_limit_slider_description">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.</string>
126 <string name="cpu_accuracy">Dokładność procesora CPU</string>
127
128 <!-- System settings strings -->
129 <string name="use_docked_mode">Tryb zadokowany</string>
130 <string name="use_docked_mode_description">Emulacja w trybie stacji dokującej, zwiększa rozdzielczość kosztem wydajności.</string>
131 <string name="emulated_region">Region emulacji</string>
132 <string name="emulated_language">Język emulacji</string>
133 <string name="select_rtc_date">Ustaw datę RTC</string>
134 <string name="select_rtc_time">Ustaw czas RTC</string>
135 <string name="use_custom_rtc">Włącz niestandardowy zegar RTC</string>
136 <string name="use_custom_rtc_description">Ta opcja pozwala na wybranie własnych ustawień czasu używanych w czasie emulacji, innych niż czas systemu Android.</string>
137 <string name="set_custom_rtc">Ustaw niestandardowy czas RTC</string>
138
139 <!-- Graphics settings strings -->
140 <string name="renderer_api">Interfejs graficzny</string>
141 <string name="renderer_accuracy">Poziom precyzji emulacji</string>
142 <string name="renderer_resolution">Rozdzielczość</string>
143 <string name="renderer_vsync">Synchronizacja pionowa VSync</string>
144 <string name="renderer_aspect_ratio">Proporcje ekranu</string>
145 <string name="renderer_scaling_filter">Filtr adaptacji rozdzielczości</string>
146 <string name="renderer_anti_aliasing">Metoda wygładzania krawędzi</string>
147 <string name="renderer_force_max_clock">Maksymalne taktowanie GPU (układy Adreno)</string>
148 <string name="renderer_force_max_clock_description">Wymusza uruchomienie maksymalnego taktowania układu graficznego (zabezpieczenia termiczne będą dalej aktywne).</string>
149 <string name="renderer_asynchronous_shaders">Wyłącz synchronizację shaderów</string>
150 <string name="renderer_asynchronous_shaders_description">Kompiluj oświetlenie bez synchronizacji, poprawi wydajność ale może powodować błędy.</string>
151 <string name="renderer_debug">Włącz debugowanie grafiki</string>
152 <string name="renderer_debug_description">Kiedy włączone, interfejs graficzny korzysta z wolnego trybu debugowania błędów.</string>
153 <string name="use_disk_shader_cache">Użyj pamięci podręcznej shaderów na dysku</string>
154 <string name="use_disk_shader_cache_description">Zmniejsza przycięcia przez przechowywanie gotowych wygenerowanych plików oświetlenia w pamięci urządzenia.</string>
155
156 <!-- Audio settings strings -->
157 <string name="audio_volume">Głośność</string>
158 <string name="audio_volume_description">Ustala poziom głośności wyjścia dźwięku.</string>
159
160 <!-- Miscellaneous -->
161 <string name="slider_default">Domyślne</string>
162 <string name="ini_saved">Ustawienia zapisane</string>
163 <string name="gameid_saved">Ustawienia zapisane w %1$s</string>
164 <string name="error_saving">Błąd zapisu %1$s.ini: %2$s</string>
165 <string name="loading">Wczytywanie...</string>
166 <string name="reset_setting_confirmation">Przywrócić wartość tego ustawienia do wartości domyślnej?</string>
167 <string name="reset_to_default">Przywróć ustawienia domyślne</string>
168 <string name="reset_all_settings">Przywrócić WSZYSTKIE ustawienia?</string>
169 <string name="reset_all_settings_description">Wszystkie zaawansowane opcje zostaną przywrócone do wartości domyślnych. Czynności nie będzie można cofnąć.</string>
170 <string name="settings_reset">Reset ustawień</string>
171 <string name="close">Zamknij</string>
172 <string name="learn_more">Dowiedz się więcej</string>
173
174 <!-- GPU driver installation -->
175 <string name="select_gpu_driver">Wybierz sterownik GPU </string>
176 <string name="select_gpu_driver_title">Chcesz zastąpić obecny sterownik układu graficznego?</string>
177 <string name="select_gpu_driver_install">Zainstaluj</string>
178 <string name="select_gpu_driver_default">Domyślne</string>
179 <string name="select_gpu_driver_install_success">Zainstalowano %s</string>
180 <string name="select_gpu_driver_use_default">Aktywny domyślny sterownik GPU</string>
181 <string name="select_gpu_driver_error">Wybrano błędny sterownik, powrót do domyślnego. </string>
182 <string name="system_gpu_driver">Systemowy sterownik GPU</string>
183 <string name="installing_driver">Instalowanie sterownika...</string>
184
185 <!-- Preferences Screen -->
186 <string name="preferences_advanced_settings">Zaawansowane</string>
187 <string name="preferences_settings">Ustawienia</string>
188 <string name="preferences_general">Ogólne</string>
189 <string name="preferences_system">System</string>
190 <string name="preferences_graphics">Grafika</string>
191 <string name="preferences_audio">Dźwięk</string>
192 <string name="preferences_theme">Motyw i kolor</string>
193
194 <!-- ROM loading errors -->
195 <string name="loader_error_encrypted">Twój ROM jest zakodowany</string>
196 <string name="loader_error_encrypted_roms_description"><![CDATA[Użyj przewodnika aby wykonać zrzuty <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">kardridży</a> lub <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">zainstalowanych gier</a>.]]></string>
197 <string name="loader_error_encrypted_keys_description"><![CDATA[Upewnij się że plik kluczy <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> jest zainstalowany aby gry mogły zostać odczytane.]]></string>
198 <string name="loader_error_video_core">Błąd inicjacji podsystemu graficznego</string>
199 <string name="loader_error_video_core_description">Zazwyczaj spowodowane niekompatybilnym sterownikiem GPU, instalacja niestandardowego sterownika może rozwiązać ten problem.</string>
200 <string name="loader_error_invalid_format">Nie można wczytać pliku ROM</string>
201 <string name="loader_error_file_not_found">Plik ROM nie istnieje</string>
202
203 <!-- Emulation Menu -->
204 <string name="emulation_exit">Zakończ emulację</string>
205 <string name="emulation_done">Gotowe</string>
206 <string name="emulation_fps_counter">Licznik FPS</string>
207 <string name="emulation_toggle_controls">Wybierz przyciski</string>
208 <string name="emulation_rel_stick_center">Wycentruj gałki</string>
209 <string name="emulation_dpad_slide">Ruchomy DPad</string>
210 <string name="emulation_haptics">Wibracje haptyczne</string>
211 <string name="emulation_show_overlay">Pokaż przyciski</string>
212 <string name="emulation_toggle_all">Zaznacz wszystkie</string>
213 <string name="emulation_control_adjust">Dostosuj nakładkę</string>
214 <string name="emulation_control_scale">Skala</string>
215 <string name="emulation_control_opacity">Przeźroczystość</string>
216 <string name="emulation_touch_overlay_reset">Resetuj</string>
217 <string name="emulation_touch_overlay_edit">Edytuj nakładkę</string>
218 <string name="emulation_pause">Wstrzymaj emulację</string>
219 <string name="emulation_unpause">Wznów emulację</string>
220 <string name="emulation_input_overlay">Opcje nakładki</string>
221 <string name="emulation_game_loading">Wczytywanie gry...</string>
222
223 <string name="load_settings">Wczytywanie ustawień...</string>
224
225 <!-- Software keyboard -->
226 <string name="software_keyboard">Klawiatura systemowa</string>
227
228 <!-- Errors and warnings -->
229 <string name="abort_button">Przerwij</string>
230 <string name="continue_button">Kontynuuj</string>
231 <string name="system_archive_not_found">Archiwum systemu nie znalezione.</string>
232 <string name="system_archive_not_found_message">%s nieznaleziony. Proszę wykonać zrzut archiwum systemu.\nKontynuowanie może powodować błędy lub przerwanie emulacji.</string>
233 <string name="system_archive_general">Archiwum systemu</string>
234 <string name="save_load_error">Błąd odczytu/zapisu</string>
235 <string name="fatal_error">Błąd krytyczny</string>
236 <string name="fatal_error_message">Wystąpił błąd krytyczny. Szczegóły znajdziesz w pliku log.\nKontynuowanie może spowodować błędy lub przerwanie emulacji. </string>
237 <string name="performance_warning">Wyłączenie tej opcji znacząco ograniczy wydajność! Dla najlepszego doświadczenia, zaleca się zostawienie tej opcji włączonej.</string>
238
239 <!-- Region Names -->
240 <string name="region_auto">Auto-wybór</string>
241 <string name="region_japan">Japonia</string>
242 <string name="region_usa">USA</string>
243 <string name="region_europe">Europa</string>
244 <string name="region_australia">Australia</string>
245 <string name="region_china">Chiny</string>
246 <string name="region_korea">Korea</string>
247 <string name="region_taiwan">Tajwan</string>
248
249 <!-- Language Names -->
250 <string name="language_japanese">Japoński (日本語)</string>
251 <string name="language_english">Angielski</string>
252 <string name="language_french">Francuski (Francja)</string>
253 <string name="langauge_german">Niemiecki (Niemcy)</string>
254 <string name="language_italian">Włoski (Włochy)</string>
255 <string name="language_spanish">Hiszpański (Hiszpania)</string>
256 <string name="language_chinese">Chiński (简体中文)</string>
257 <string name="language_korean">Koreański (한국어)</string>
258 <string name="language_dutch">Duński (Holandia)</string>
259 <string name="language_portuguese">Portugalski (Portugalia)</string>
260 <string name="language_russian">Rosyjski (Русский)</string>
261 <string name="language_taiwanese">Tajwański (台湾)</string>
262 <string name="language_british_english">Angielski Brytyjski</string>
263 <string name="language_canadian_french">Francuski (Kanada)</string>
264 <string name="language_latin_american_spanish">Hiszpański (Ameryka Latynoska)</string>
265 <string name="language_simplified_chinese">Chiński uproszczony (简体中文)</string>
266 <string name="language_traditional_chinese">Chiński tradycyjny (正體中文)</string>
267 <string name="language_brazilian_portuguese">Portugalski (Brazylia)</string>
268
269 <!-- Renderer APIs -->
270 <string name="renderer_vulkan">Vulkan</string>
271 <string name="renderer_none">Żadny</string>
272
273 <!-- Renderer Accuracy -->
274 <string name="renderer_accuracy_normal">Normalny</string>
275 <string name="renderer_accuracy_high">Wysoki</string>
276 <string name="renderer_accuracy_extreme">Ekstremalny (Wolny)</string>
277
278 <!-- Resolutions -->
279 <string name="resolution_half">0.5X (360p/540p)</string>
280 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
281 <string name="resolution_one">1X (720p/1080p)</string>
282 <string name="resolution_two">2X (1440p/2160p) (Wolno)</string>
283 <string name="resolution_three">3X (2160p/3240p) (Wolno)</string>
284 <string name="resolution_four">4X (2880p/4320p) (Wolno)</string>
285
286 <!-- Renderer VSync -->
287 <string name="renderer_vsync_immediate">Natychmiastowa (Wyłączona)</string>
288 <string name="renderer_vsync_mailbox">Skrzynka pocztowa</string>
289 <string name="renderer_vsync_fifo">FIFO (Włączona)</string>
290 <string name="renderer_vsync_fifo_relaxed">FIFO Relaks</string>
291
292 <!-- Scaling Filters -->
293 <string name="scaling_filter_nearest_neighbor">Najbliższy sąsiadujący</string>
294 <string name="scaling_filter_bilinear">Bilinearny</string>
295 <string name="scaling_filter_bicubic">Bikubiczny</string>
296 <string name="scaling_filter_gaussian">Kulisty</string>
297 <string name="scaling_filter_scale_force">ScaleForce</string>
298 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
299
300 <!-- Anti-Aliasing -->
301 <string name="anti_aliasing_none">Żadna (wyłączony)</string>
302 <string name="anti_aliasing_fxaa">FXAA</string>
303 <string name="anti_aliasing_smaa">SMAA</string>
304
305 <!-- Aspect Ratios -->
306 <string name="ratio_default">Domyślne (16:9)</string>
307 <string name="ratio_force_four_three">Wymuś 4:3</string>
308 <string name="ratio_force_twenty_one_nine">Wymuś 21:9</string>
309 <string name="ratio_force_sixteen_ten">Wymuś 16:10</string>
310 <string name="ratio_stretch">Rozciągnij do Okna</string>
311
312 <!-- CPU Accuracy -->
313 <string name="cpu_accuracy_auto">Automatyczny</string>
314 <string name="cpu_accuracy_accurate">Dokładny</string>
315 <string name="cpu_accuracy_unsafe">Niebezpieczny</string>
316 <string name="cpu_accuracy_paranoid">Paranoid (Wolny)</string>
317
318 <!-- Gamepad Buttons -->
319 <string name="gamepad_d_pad">D-Pad</string>
320 <string name="gamepad_left_stick">Lewa gałka</string>
321 <string name="gamepad_right_stick">Prawa gałka</string>
322 <string name="gamepad_home">Home</string>
323 <string name="gamepad_screenshot">Zrzut ekranu</string>
324
325 <!-- Disk shader cache -->
326 <string name="preparing_shaders">Przygotowanie shaderów</string>
327 <string name="building_shaders">Budowanie shaderów</string>
328
329 <!-- Theme options -->
330 <string name="change_app_theme">Zmień motyw aplikacji</string>
331 <string name="theme_default">Domyślny</string>
332 <string name="theme_material_you">Material You</string>
333
334 <!-- Theme Modes -->
335 <string name="change_theme_mode">Zmiana trybu motywu</string>
336 <string name="theme_mode_follow_system">Podążaj za systemowym</string>
337 <string name="theme_mode_light">Jasny</string>
338 <string name="theme_mode_dark">Ciemny</string>
339
340 <!-- Black backgrounds theme -->
341 <string name="use_black_backgrounds">Używaj czarnego tła</string>
342 <string name="use_black_backgrounds_description">Kiedy używany ciemny motyw, tła zostają zastąpione czernią.</string>
343
344</resources>
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 100644
index 000000000..83185c385
--- /dev/null
+++ b/src/android/app/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Este software corre jogos para a consola Nintendo Switch. Não estão incluídas nem jogos ou chaves. &lt;br /&gt;&lt;br /&gt;Antes de começares, por favor localiza o ficheiro <![CDATA[1 prod.keys 1]]> no armazenamento do teu dispositivo.&lt;br /&gt;&lt;br /&gt;<![CDATA[2Learn more2]]></string>
5 <string name="emulation_notification_channel_name">Emulação está Ativa</string>
6 <string name="emulation_notification_channel_description">Mostra uma notificação permanente enquanto a emulação está a correr.</string>
7 <string name="emulation_notification_running">Yuzu está em execução </string>
8 <string name="notice_notification_channel_name">Notificações e erros</string>
9 <string name="notice_notification_channel_description">Mostra notificações quendo algo corre mal.</string>
10 <string name="notification_permission_not_granted">Permissões de notificação não permitidas </string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Bemvindo! </string>
14 <string name="welcome_description">Aprende como configurar &lt;b>yuzu&lt;/b> e arranca a emulação.</string>
15 <string name="get_started">Começa</string>
16 <string name="keys">Chaves</string>
17 <string name="keys_description">Seleciona o teu ficheiro &lt;b>prod.keys&lt;/b> com o botão abaixo.</string>
18 <string name="select_keys">Seleciona as Chaves</string>
19 <string name="games">Jogos</string>
20 <string name="games_description">Seleciona a tua pasta &lt;b>Games&lt;/b> com o botão abaixo.</string>
21 <string name="done">Feito</string>
22 <string name="done_description">Tudo pronto.\nDisfruta dos teus jogos!</string>
23 <string name="text_continue">Continuar</string>
24 <string name="next">Próximo</string>
25 <string name="back">Voltar</string>
26 <string name="add_games">Adiciona Jogos</string>
27 <string name="add_games_description">Seleciona a tua pasta de Jogos</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Jogos</string>
31 <string name="home_search">Pesquisar</string>
32 <string name="home_settings">Configurações</string>
33 <string name="empty_gamelist">Não foram encontrados jogos ou a pasta de Jogos ainda não foi definida. </string>
34 <string name="search_and_filter_games">Procura e filtra jogos.</string>
35 <string name="select_games_folder">Seleciona a pasta de jogos.</string>
36 <string name="select_games_folder_description">Permite que o Yuzu preencha a lista de jogos</string>
37 <string name="add_games_warning">Ignorar a seleção da pasta de jogos?</string>
38 <string name="add_games_warning_description">Os jogos não serão exibidos na lista de jogos se uma pasta não estiver selecionada.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Procurar Jogos</string>
41 <string name="games_dir_selected">Pasta de Jogos selecionada</string>
42 <string name="install_prod_keys">Instala prod.keys</string>
43 <string name="install_prod_keys_description">Necessário para desencriptar jogos comerciais</string>
44 <string name="install_prod_keys_warning">Ignorar a adição de chaves?</string>
45 <string name="install_prod_keys_warning_description">São necessárias chaves válidas para emular jogos comerciais. Somente aplicativos homebrew funcionarão se você continuar.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#Guia de introdução</string>
47 <string name="notifications">Notificações</string>
48 <string name="notifications_description">Conceda a permissão de notificação com o botão abaixo.</string>
49 <string name="give_permission">Conceda permissão</string>
50 <string name="notification_warning">Saltar a concessão da permissão de notificação?</string>
51 <string name="notification_warning_description">Yuzu não conseguirá te notificar de informações importantes. </string>
52 <string name="permission_denied">Permissão negada</string>
53 <string name="permission_denied_description">Você negou essa permissão muitas vezes e agora precisa concedê-la manualmente nas configurações do sistema.</string>
54 <string name="about">Sobre</string>
55 <string name="about_description">Versão de compilação, créditos e mais</string>
56 <string name="warning_help">Ajuda</string>
57 <string name="warning_skip">Saltar</string>
58 <string name="warning_cancel">Cancelar</string>
59 <string name="install_amiibo_keys">Instala chaves Amiibo</string>
60 <string name="install_amiibo_keys_description">Necessário para usares Amiibo no jogo</string>
61 <string name="invalid_keys_file">Ficheiro de chaves inválido</string>
62 <string name="install_keys_success">Chaves instaladas com sucesso</string>
63 <string name="reading_keys_failure">Erro ao ler chaves de encriptação</string>
64 <string name="install_keys_failure_extension_description">
65 1. Verifica se as tuas chaves têm a extensão .keys.\n\n
66 2. As Chaves não podem estar gravadas na pasta Transferências.\n\n
67 Resolve esta(s) questões e tenta novamente.
68 </string>
69 <string name="invalid_keys_error">Chaves de encriptação inválidas</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves.</string>
72 <string name="install_gpu_driver">Instala driver para GPU</string>
73 <string name="install_gpu_driver_description">Instala drivers alternativos para desempenho ou precisão potencialmente melhores</string>
74 <string name="advanced_settings">Definições avançadas</string>
75 <string name="settings_description">Configura definições do emulador</string>
76 <string name="search_recently_played">Jogos recentes</string>
77 <string name="search_recently_added">Adicionados recentemente</string>
78 <string name="search_retail">Jogos comerciais</string>
79 <string name="search_homebrew">Homebrew</string>
80 <string name="open_user_folder">Abre a pasta Yuzu</string>
81 <string name="open_user_folder_description">Gere os ficheiro internos do Yuzu</string>
82 <string name="theme_and_color_description">Modifica a aparência da App</string>
83 <string name="no_file_manager">Nenhum gestor de ficheiros encontrado</string>
84 <string name="notification_no_directory_link">Impossível abrir pasta Yuzu</string>
85 <string name="notification_no_directory_link_description">Localiza a pasta de utilizador manualmente com o painel lateral do gestor de ficheiros.</string>
86 <string name="manage_save_data">Gerir dados guardados</string>
87 <string name="manage_save_data_description">Dados não encontrados. Por favor seleciona uma opção abaixo.</string>
88 <string name="import_export_saves_description">Importa ou exporta dados guardados</string>
89 <string name="import_export_saves_no_profile">Dados não encontrados. Por favor lança o jogo e tenta novamente.</string>
90 <string name="save_file_imported_success">Importado com sucesso</string>
91 <string name="save_file_invalid_zip_structure">Estrutura de diretório de dados invalida</string>
92 <string name="save_file_invalid_zip_structure_description">O nome da primeira sub pasta tem de ser a ID do jogo.</string>
93 <string name="import_saves">Importar</string>
94 <string name="export_saves">Exportar</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia não é real</string>
98 <string name="copied_to_clipboard">Copiado para a área de transferência</string>
99 <string name="about_app_description">Um emulador Switch de código aberto</string>
100 <string name="contributors">Contribuidores</string>
101 <string name="contributors_description">Feito com \u2764 da equipa do Yuzu</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">Versão</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">Acesso antecipado</string>
110 <string name="get_early_access">Obtém Acesso Antecipado</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">Recursos de ponta, acesso antecipado a atualizações e muito mais</string>
113 <string name="early_access_benefits">Benefícios do Acesso Antecipado</string>
114 <string name="cutting_edge_features">Recursos de ponta</string>
115 <string name="early_access_updates">Acesso antecipado a atualizações</string>
116 <string name="no_manual_installation">Sem instalação manual</string>
117 <string name="prioritized_support">Suporte prioritário</string>
118 <string name="helping_game_preservation">Ajuda na preservação dos jogos</string>
119 <string name="our_eternal_gratitude">A nossa eterna gratidão</string>
120 <string name="are_you_interested">Estás interessado?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">Ativar limite de velocidade</string>
124 <string name="frame_limit_enable_description">Quando ativada, a velocidade da emulação será limitada à percentagem definida da velocidade normal.</string>
125 <string name="frame_limit_slider">Percentagem do limite de velocidade</string>
126 <string name="frame_limit_slider_description">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.</string>
127 <string name="cpu_accuracy">Precisão do CPU</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">Modo ancorado</string>
131 <string name="use_docked_mode_description">Emula em modo ancorado, que aumenta a resolução ás custas da performance.</string>
132 <string name="emulated_region">Região da emulação</string>
133 <string name="emulated_language">Idioma da emulação</string>
134 <string name="select_rtc_date">Seleciona a data RTC</string>
135 <string name="select_rtc_time">Seleciona a hora RTC</string>
136 <string name="use_custom_rtc">Ativa RTC personalizado</string>
137 <string name="use_custom_rtc_description">Esta configuração permite definir um RTC personalizado diferente da hora atual do sistema</string>
138 <string name="set_custom_rtc">Define RTC personalizado</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">Nível de precisão</string>
143 <string name="renderer_resolution">Resolução</string>
144 <string name="renderer_vsync">Modo VSync</string>
145 <string name="renderer_aspect_ratio">Proporção do ecrã</string>
146 <string name="renderer_scaling_filter">Filtro de Adaptação da Janela</string>
147 <string name="renderer_anti_aliasing">Método de Anti-Aliasing </string>
148 <string name="renderer_force_max_clock">Força velocidade máxima (Adreno only)</string>
149 <string name="renderer_force_max_clock_description">Força o GPU a correr à velocidade máxima (restrições térmicas serão aplicadas)</string>
150 <string name="renderer_asynchronous_shaders">Usa shaders assíncronos </string>
151 <string name="renderer_asynchronous_shaders_description">Compila shaders assincronamente, que aumentará a fluidez, mas poderá causar falhas.</string>
152 <string name="renderer_debug">Ativar depuração de gráficos</string>
153 <string name="renderer_debug_description">Quando selecionado, a API gráfica entra num modo de depuração mais lento.</string>
154 <string name="use_disk_shader_cache">Usar cache de shaders em disco</string>
155 <string name="use_disk_shader_cache_description">Aumenta a fluidez ao guardar e carregar shaders gerados para o armazenamento.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">Volume</string>
159 <string name="audio_volume_description">Especifica o volume de saída.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">Padrão</string>
163 <string name="ini_saved">Definições guardadas</string>
164 <string name="gameid_saved">Definições guardadas para %1$s</string>
165 <string name="error_saving">Erro ao guardar %1$s.ini: %2$s</string>
166 <string name="loading">A carregar...</string>
167 <string name="reset_setting_confirmation">Queres reverter esta definição para os valores padrão?</string>
168 <string name="reset_to_default">Reverter para padrão</string>
169 <string name="reset_all_settings">Redefinir todas as definições?</string>
170 <string name="reset_all_settings_description">Todas as definições avançadas serão redefinidas para as definições padrão. Isto não pode ser revertido.</string>
171 <string name="settings_reset">Redefinir definições</string>
172 <string name="close">Fechar</string>
173 <string name="learn_more">Saiba mais</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">Seleciona a driver para o GPU</string>
177 <string name="select_gpu_driver_title">Queres substituir o driver do GPU atual? </string>
178 <string name="select_gpu_driver_install">Instalar</string>
179 <string name="select_gpu_driver_default">Padrão</string>
180 <string name="select_gpu_driver_install_success">Instalado%s</string>
181 <string name="select_gpu_driver_use_default">Usar o driver padrão do GPU</string>
182 <string name="select_gpu_driver_error">Driver selecionado inválido, a usar o padrão do sistema!</string>
183 <string name="system_gpu_driver">Driver do GPU padrão</string>
184 <string name="installing_driver">A instalar o Driver...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Configurações avançadas</string>
188 <string name="preferences_settings">Configurações</string>
189 <string name="preferences_general">Geral</string>
190 <string name="preferences_system">Sistema</string>
191 <string name="preferences_graphics">Gráficos</string>
192 <string name="preferences_audio">Áudio</string>
193 <string name="preferences_theme">Cor e tema.</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">A tua ROM está encriptada</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[Por favor segue os guias para fazer redump das tuas<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">Cartidges de Jogo</a> or <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">Jogos Instalados</a>.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[Por favor confirma que o teu ficheiro <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> está instalado para que os jogos possam ser desencriptados.]]></string>
199 <string name="loader_error_video_core">Ocorreu um erro ao iniciar o núcleo de vídeo.</string>
200 <string name="loader_error_video_core_description">Isto é normalmente causado por um driver de GPU incompatível. Instalar um driver GPU pode resolver este problema.</string>
201 <string name="loader_error_invalid_format">Impossível carregar a tua ROM</string>
202 <string name="loader_error_file_not_found">O ficheiro da ROM não existe</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">Sair da emulação</string>
206 <string name="emulation_done">Feito</string>
207 <string name="emulation_fps_counter">Contador de FPS</string>
208 <string name="emulation_toggle_controls">Alterar Controlos</string>
209 <string name="emulation_rel_stick_center">Centro do Analógico Relativo</string>
210 <string name="emulation_dpad_slide">Deslizar do DPad</string>
211 <string name="emulation_haptics">Hápticos </string>
212 <string name="emulation_show_overlay">Mostrar sobreposição </string>
213 <string name="emulation_toggle_all">Alterar todos</string>
214 <string name="emulation_control_adjust">Ajustar a sobreposição </string>
215 <string name="emulation_control_scale">Escala</string>
216 <string name="emulation_control_opacity">Opacidade</string>
217 <string name="emulation_touch_overlay_reset">Redefinir Sobreposição </string>
218 <string name="emulation_touch_overlay_edit">Editar sobreposição </string>
219 <string name="emulation_pause">Pausa emulação</string>
220 <string name="emulation_unpause">Retomar emulação</string>
221 <string name="emulation_input_overlay">Opções de sobreposição </string>
222 <string name="emulation_game_loading">Jogo a carregar...</string>
223
224 <string name="load_settings">Configurações a carregar...</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">Teclado de software</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">Abortar</string>
231 <string name="continue_button">Continuar</string>
232 <string name="system_archive_not_found">Arquivo do sistema não encontrado</string>
233 <string name="system_archive_not_found_message">%s está em falta. Por favor apaga os teus ficheiros de sistema.\nContinuar a emulação pode causar erros.</string>
234 <string name="system_archive_general">Um arquivo do sistema</string>
235 <string name="save_load_error">Erro Guardar/Carregar</string>
236 <string name="fatal_error">Erro fatal</string>
237 <string name="fatal_error_message">Ocorreu um erro fatal. Verifica o teu registro para detalhes. \nContinuar a emulação pode causar erros.</string>
238 <string name="performance_warning">Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">Auto seleção</string>
242 <string name="region_japan">Japão</string>
243 <string name="region_usa">EUA</string>
244 <string name="region_europe">Europa</string>
245 <string name="region_australia">Austrália</string>
246 <string name="region_china">China</string>
247 <string name="region_korea">Coréia</string>
248 <string name="region_taiwan">Taiwan</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">Japônes (日本語)</string>
252 <string name="language_english">Português do Brasil</string>
253 <string name="language_french">Francês (Français)</string>
254 <string name="langauge_german">Alemão (Deutsch)</string>
255 <string name="language_italian">Italiano (Italiano)</string>
256 <string name="language_spanish">Espanhol (Español)</string>
257 <string name="language_chinese">Mandarim (简体中文)</string>
258 <string name="language_korean">Coreano (한국어)</string>
259 <string name="language_dutch">Holandês (Nederlands)</string>
260 <string name="language_portuguese">Português (Português)</string>
261 <string name="language_russian">Russo (Русский)</string>
262 <string name="language_taiwanese">Taiwanês (台湾)</string>
263 <string name="language_british_english">Inglês britânico (British English)</string>
264 <string name="language_canadian_french">Fracês Canadiano (Français canadien)</string>
265 <string name="language_latin_american_spanish">Espanhol da América Latina (Español latino-americano)</string>
266 <string name="language_simplified_chinese">Chinês Simplificado (简体中文)</string>
267 <string name="language_traditional_chinese">Chinês tradicional (正體中文)</string>
268 <string name="language_brazilian_portuguese">Português do Brasil (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulcano</string>
272 <string name="renderer_none">Nenhum</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">Normal</string>
276 <string name="renderer_accuracy_high">Alto</string>
277 <string name="renderer_accuracy_extreme">Estremo (Lento)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (Slow)</string>
284 <string name="resolution_three">3X (2160p/3240p) (Lento)</string>
285 <string name="resolution_four">4X (2880p/4320p) (Lento)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">Imediato (Desligado)</string>
289 <string name="renderer_vsync_mailbox">Caixa de entrada</string>
290 <string name="renderer_vsync_fifo">FIFO (Ligado)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO Relaxado </string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">Vizinho mais próximo</string>
295 <string name="scaling_filter_bilinear">Bilinear</string>
296 <string name="scaling_filter_bicubic">Bicúbico</string>
297 <string name="scaling_filter_gaussian">Gaussiano</string>
298 <string name="scaling_filter_scale_force">ScaleForce</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">Nenhum</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">Padrão (16:9)</string>
308 <string name="ratio_force_four_three">Forçar 4:3</string>
309 <string name="ratio_force_twenty_one_nine">Forçar 21:9</string>
310 <string name="ratio_force_sixteen_ten">Forçar 16:10</string>
311 <string name="ratio_stretch">Esticar para a janela</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Automático</string>
315 <string name="cpu_accuracy_accurate">Preciso</string>
316 <string name="cpu_accuracy_unsafe">Não seguro</string>
317 <string name="cpu_accuracy_paranoid">Paranoid (Lento)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">D-pad</string>
321 <string name="gamepad_left_stick">Analógico esquerdo</string>
322 <string name="gamepad_right_stick">Analógico direito</string>
323 <string name="gamepad_home">Botão Home</string>
324 <string name="gamepad_screenshot">Captura de ecrã</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">A preparar shaders</string>
328 <string name="building_shaders">A criar shaders</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">Muda o Tema da App</string>
332 <string name="theme_default">Padrão</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">Altera o Modo do Tema</string>
337 <string name="theme_mode_follow_system">Igual ao Sistema</string>
338 <string name="theme_mode_light">Claro</string>
339 <string name="theme_mode_dark">Escuro</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">Usa Fundos Negros</string>
343 <string name="use_black_backgrounds_description">Quando usar tema escuro, aplicar fundos escuros</string>
344
345</resources>
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 100644
index 000000000..3d0851e6f
--- /dev/null
+++ b/src/android/app/src/main/res/values-pt-rPT/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Este software corre jogos para a consola Nintendo Switch. Não estão incluídas nem jogos ou chaves. &lt;br /&gt;&lt;br /&gt;Antes de começares, por favor localiza o ficheiro <![CDATA[1 prod.keys 1]]> no armazenamento do teu dispositivo.&lt;br /&gt;&lt;br /&gt;<![CDATA[2Learn more2]]></string>
5 <string name="emulation_notification_channel_name">Emulação está Ativa</string>
6 <string name="emulation_notification_channel_description">Mostra uma notificação permanente enquanto a emulação está a correr.</string>
7 <string name="emulation_notification_running">Yuzu está em execução </string>
8 <string name="notice_notification_channel_name">Notificações e erros</string>
9 <string name="notice_notification_channel_description">Mostra notificações quendo algo corre mal.</string>
10 <string name="notification_permission_not_granted">Permissões de notificação não permitidas </string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Benvindo! </string>
14 <string name="welcome_description">Aprende como configurar &lt;b>yuzu&lt;/b> e arranca a emulação.</string>
15 <string name="get_started">Começa</string>
16 <string name="keys">Chaves</string>
17 <string name="keys_description">Seleciona o teu ficheiro &lt;b>prod.keys&lt;/b> com o botão abaixo.</string>
18 <string name="select_keys">Seleciona as Chaves</string>
19 <string name="games">Jogos</string>
20 <string name="games_description">Seleciona a tua pasta &lt;b>Games&lt;/b> com o botão abaixo.</string>
21 <string name="done">Feito</string>
22 <string name="done_description">Tudo pronto.\nDisfruta dos teus jogos!</string>
23 <string name="text_continue">Continuar</string>
24 <string name="next">Próximo</string>
25 <string name="back">Voltar</string>
26 <string name="add_games">Adiciona Jogos</string>
27 <string name="add_games_description">Seleciona a tua pasta de Jogos</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Jogos</string>
31 <string name="home_search">Pesquisar</string>
32 <string name="home_settings">Configurações</string>
33 <string name="empty_gamelist">Não foram encontrados jogos ou a pasta de Jogos ainda não foi definida. </string>
34 <string name="search_and_filter_games">Procura e filtra jogos.</string>
35 <string name="select_games_folder">Seleciona a pasta de jogos.</string>
36 <string name="select_games_folder_description">Permite que o Yuzu preencha a lista de jogos</string>
37 <string name="add_games_warning">Ignorar a seleção da pasta de jogos?</string>
38 <string name="add_games_warning_description">Os jogos não serão exibidos na lista de jogos se uma pasta não estiver selecionada.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Procurar Jogos</string>
41 <string name="games_dir_selected">Pasta de Jogos selecionada</string>
42 <string name="install_prod_keys">Instala prod.keys</string>
43 <string name="install_prod_keys_description">Necessário para desencriptar jogos comerciais</string>
44 <string name="install_prod_keys_warning">Ignorar a adição de chaves?</string>
45 <string name="install_prod_keys_warning_description">São necessárias chaves válidas para emular jogos comerciais. Somente aplicativos homebrew funcionarão se você continuar.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Notificações</string>
48 <string name="notifications_description">Conceda a permissão de notificação com o botão abaixo.</string>
49 <string name="give_permission">Conceda permissão</string>
50 <string name="notification_warning">Saltar a concessão da permissão de notificação?</string>
51 <string name="notification_warning_description">Yuzu não conseguirá te notificar de informações importantes. </string>
52 <string name="permission_denied">Permissão negada</string>
53 <string name="permission_denied_description">Você negou essa permissão muitas vezes e agora precisa concedê-la manualmente nas configurações do sistema.</string>
54 <string name="about">Sobre</string>
55 <string name="about_description">Versão de compilação, créditos e mais</string>
56 <string name="warning_help">Ajuda</string>
57 <string name="warning_skip">Saltar</string>
58 <string name="warning_cancel">Cancelar</string>
59 <string name="install_amiibo_keys">Instala chaves Amiibo</string>
60 <string name="install_amiibo_keys_description">Necessário para usares Amiibo no jogo</string>
61 <string name="invalid_keys_file">Ficheiro de chaves inválido</string>
62 <string name="install_keys_success">Chaves instaladas com sucesso</string>
63 <string name="reading_keys_failure">Erro ao ler chaves de encriptação</string>
64 <string name="install_keys_failure_extension_description">
65 1. Verifica se as tuas chaves têm a extensão .keys.\n\n
66 2. As Chaves não podem estar gravadas na pasta Transferências.\n\n
67 Resolve esta(s) questões e tenta novamente.
68 </string>
69 <string name="invalid_keys_error">Chaves de encriptação inválidas</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">O ficheiro selecionado está corrompido. Por favor recarrega as tuas chaves.</string>
72 <string name="install_gpu_driver">Instala driver para GPU</string>
73 <string name="install_gpu_driver_description">Instala drivers alternativos para desempenho ou precisão potencialmente melhores</string>
74 <string name="advanced_settings">Configurações avançadas</string>
75 <string name="settings_description">Configura configurações do emulador</string>
76 <string name="search_recently_played">Jogos recentes</string>
77 <string name="search_recently_added">Adicionados recentemente</string>
78 <string name="search_retail">Jogos comerciais</string>
79 <string name="search_homebrew">Homebrew</string>
80 <string name="open_user_folder">Abre a pasta Yuzu</string>
81 <string name="open_user_folder_description">Gere os ficheiro internos do Yuzu</string>
82 <string name="theme_and_color_description">Modifica a aparência da App</string>
83 <string name="no_file_manager">Nenhum gestor de ficheiros encontrado</string>
84 <string name="notification_no_directory_link">Impossível abrir pasta Yuzu</string>
85 <string name="notification_no_directory_link_description">Localiza a pasta de utilizador manualmente com o painel lateral do gestor de ficheiros.</string>
86 <string name="manage_save_data">Gerir dados guardados</string>
87 <string name="manage_save_data_description">Dados não encontrados. Por favor seleciona uma opção abaixo.</string>
88 <string name="import_export_saves_description">Importa ou exporta dados guardados</string>
89 <string name="import_export_saves_no_profile">Dados não encontrados. Por favor lança o jogo e tenta novamente.</string>
90 <string name="save_file_imported_success">Importado com sucesso</string>
91 <string name="save_file_invalid_zip_structure">Estrutura de diretório de dados invalida</string>
92 <string name="save_file_invalid_zip_structure_description">O nome da primeira sub pasta tem de ser a ID do jogo.</string>
93 <string name="import_saves">Importar</string>
94 <string name="export_saves">Exportar</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia não é real</string>
98 <string name="copied_to_clipboard">Copiado para a área de transferência</string>
99 <string name="about_app_description">Um emulador Switch de código aberto</string>
100 <string name="contributors">Contribuidores</string>
101 <string name="contributors_description">Feito com \u2764 da equipa do Yuzu</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">Versão</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">Acesso antecipado</string>
110 <string name="get_early_access">Obtém Acesso Antecipado</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">Recursos de ponta, acesso antecipado a atualizações e muito mais</string>
113 <string name="early_access_benefits">Benefícios do Acesso Antecipado</string>
114 <string name="cutting_edge_features">Recursos de ponta</string>
115 <string name="early_access_updates">Acesso antecipado a atualizações</string>
116 <string name="no_manual_installation">Sem instalação manual</string>
117 <string name="prioritized_support">Suporte prioritário</string>
118 <string name="helping_game_preservation">Ajuda na preservação dos jogos</string>
119 <string name="our_eternal_gratitude">A nossa eterna gratidão</string>
120 <string name="are_you_interested">Estás interessado?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">Ativar limite de velocidade</string>
124 <string name="frame_limit_enable_description">Quando ativada, a velocidade da emulação será limitada à percentagem definida da velocidade normal.</string>
125 <string name="frame_limit_slider">Percentagem do limite de velocidade</string>
126 <string name="frame_limit_slider_description">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.</string>
127 <string name="cpu_accuracy">Precisão do CPU</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">Modo ancorado</string>
131 <string name="use_docked_mode_description">Emula em modo ancorado, que aumenta a resolução ás custas da performance.</string>
132 <string name="emulated_region">Região da emulação</string>
133 <string name="emulated_language">Idioma da emulação</string>
134 <string name="select_rtc_date">Seleciona a data RTC</string>
135 <string name="select_rtc_time">Seleciona a hora RTC</string>
136 <string name="use_custom_rtc">Ativa RTC personalizado</string>
137 <string name="use_custom_rtc_description">Esta configuração permite definir um RTC personalizado diferente da hora atual do sistema</string>
138 <string name="set_custom_rtc">Define RTC personalizado</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">Nível de precisão</string>
143 <string name="renderer_resolution">Resolução</string>
144 <string name="renderer_vsync">Modo VSync</string>
145 <string name="renderer_aspect_ratio">Proporção do ecrã</string>
146 <string name="renderer_scaling_filter">Filtro de Adaptação da Janela</string>
147 <string name="renderer_anti_aliasing">Método de Anti-Aliasing </string>
148 <string name="renderer_force_max_clock">Força velocidade máxima (Adreno only)</string>
149 <string name="renderer_force_max_clock_description">Força o GPU a correr à velocidade máxima (restrições térmicas serão aplicadas)</string>
150 <string name="renderer_asynchronous_shaders">Usa shaders assíncronos </string>
151 <string name="renderer_asynchronous_shaders_description">Compila shaders assincronamente, que aumentará a fluidez, mas poderá causar falhas.</string>
152 <string name="renderer_debug">Ativar depuração de gráficos</string>
153 <string name="renderer_debug_description">Quando selecionado, a API gráfica entra num modo de depuração mais lento.</string>
154 <string name="use_disk_shader_cache">Usar cache do disk shader</string>
155 <string name="use_disk_shader_cache_description">Aumenta a fluidez ao guardar e carregar shaders gerados para o armazenamento.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">Volume</string>
159 <string name="audio_volume_description">Especifica o volume de saída.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">Padrão</string>
163 <string name="ini_saved">Configurações guardadas</string>
164 <string name="gameid_saved">Configurações guardadas para %1$s</string>
165 <string name="error_saving">Erro ao guardar %1$s.ini: %2$s</string>
166 <string name="loading">A carregar...</string>
167 <string name="reset_setting_confirmation">Queres reverter esta definição para os valores padrão?</string>
168 <string name="reset_to_default">Reverter para padrão</string>
169 <string name="reset_all_settings">Redefinir todas as configurações?</string>
170 <string name="reset_all_settings_description">Todas as configurações avançadas serão redefinidas para as definições padrão. Isto não pode ser revertido.</string>
171 <string name="settings_reset">Redefinir configurações </string>
172 <string name="close">Fechar</string>
173 <string name="learn_more">Saber Mais</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">Seleciona a driver para o GPU</string>
177 <string name="select_gpu_driver_title">Queres substituir o driver do GPU atual? </string>
178 <string name="select_gpu_driver_install">Instalar</string>
179 <string name="select_gpu_driver_default">Padrão</string>
180 <string name="select_gpu_driver_install_success">Instalado%s</string>
181 <string name="select_gpu_driver_use_default">Usar o driver padrão do GPU</string>
182 <string name="select_gpu_driver_error">Driver selecionado inválido, a usar o padrão do sistema!</string>
183 <string name="system_gpu_driver">Driver do GPU padrão</string>
184 <string name="installing_driver">A instalar o Driver...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Configurações avançadas</string>
188 <string name="preferences_settings">Configurações</string>
189 <string name="preferences_general">Geral</string>
190 <string name="preferences_system">Sistema</string>
191 <string name="preferences_graphics">Gráficos</string>
192 <string name="preferences_audio">Audio</string>
193 <string name="preferences_theme">Cor e tema.</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">A tua ROM está encriptada</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[Por favor segue os guias para fazer redump das tuas<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">Cartidges de Jogo</a> or <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">Jogos Instalados</a>.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[Por favor confirma que o teu ficheiro <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> está instalado para que os jogos possam ser desencriptados.]]></string>
199 <string name="loader_error_video_core">Ocorreu um erro ao iniciar o núcleo de vídeo.</string>
200 <string name="loader_error_video_core_description">Isto é normalmente causado por um driver de GPU incompatível. Instalar um driver GPU pode resolver este problema.</string>
201 <string name="loader_error_invalid_format">Impossível carregar a tua ROM</string>
202 <string name="loader_error_file_not_found">O ficheiro da ROM não existe</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">Sair da emulação</string>
206 <string name="emulation_done">Feito</string>
207 <string name="emulation_fps_counter">Contador de FPS</string>
208 <string name="emulation_toggle_controls">Alterar Controlos</string>
209 <string name="emulation_rel_stick_center">Centro do Analógico Relativo</string>
210 <string name="emulation_dpad_slide">Deslizar do DPad</string>
211 <string name="emulation_haptics">Hápticos </string>
212 <string name="emulation_show_overlay">Mostrar sobreposição </string>
213 <string name="emulation_toggle_all">Alterar todos</string>
214 <string name="emulation_control_adjust">Ajustar a sobreposição </string>
215 <string name="emulation_control_scale">Escala</string>
216 <string name="emulation_control_opacity">Opacidade</string>
217 <string name="emulation_touch_overlay_reset">Redefinir Sobreposição </string>
218 <string name="emulation_touch_overlay_edit">Editar sobreposição </string>
219 <string name="emulation_pause">Pausa emulação</string>
220 <string name="emulation_unpause">Retomar emulação</string>
221 <string name="emulation_input_overlay">Opções de sobreposição </string>
222 <string name="emulation_game_loading">Jogo a carregar...</string>
223
224 <string name="load_settings">Configurações a carregar...</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">Teclado de Software</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">Abortar</string>
231 <string name="continue_button">Continuar</string>
232 <string name="system_archive_not_found">Arquivo do Sistema Não Encontrado</string>
233 <string name="system_archive_not_found_message">%s está em falta. Por favor apaga os teus ficheiros de sistema.\nContinuar a emulação pode causar erros.</string>
234 <string name="system_archive_general">Um arquivo do sistema</string>
235 <string name="save_load_error">Erro Guardar/Carregar</string>
236 <string name="fatal_error">Erro fatal</string>
237 <string name="fatal_error_message">Ocorreu um erro fatal. Verifica o teu registro para detalhes. \nContinuar a emulação pode causar erros.</string>
238 <string name="performance_warning">Desligar esta configuração irá reduzir a performance da emulação significantemente! Para a melhor experiência é recomendado que deixes esta configuração ativada.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">Autosseleção</string>
242 <string name="region_japan">Japão</string>
243 <string name="region_usa">EUA</string>
244 <string name="region_europe">Europa</string>
245 <string name="region_australia">Austrália</string>
246 <string name="region_china">China</string>
247 <string name="region_korea">Coreia</string>
248 <string name="region_taiwan">Taiwan</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">Japonês (日本語)</string>
252 <string name="language_english">Inglês</string>
253 <string name="language_french">Francês (Français)</string>
254 <string name="langauge_german">Alemão (Deutsch)</string>
255 <string name="language_italian">Italiano (Italiano)</string>
256 <string name="language_spanish">Espanhol (Español)</string>
257 <string name="language_chinese">Chinês simplificado (简体中文)</string>
258 <string name="language_korean">Coreano (한국어)</string>
259 <string name="language_dutch">Holandês (Nederlands)</string>
260 <string name="language_portuguese">Português (Português)</string>
261 <string name="language_russian">Russo (Русский)</string>
262 <string name="language_taiwanese">Taiwanês (台湾)</string>
263 <string name="language_british_english">Inglês Britânico</string>
264 <string name="language_canadian_french">Fracês Canadiano (Français canadien)</string>
265 <string name="language_latin_american_spanish">Espanhol da América Latina (Español latino-americano)</string>
266 <string name="language_simplified_chinese">Chinês Simplificado (简体中文)</string>
267 <string name="language_traditional_chinese">Chinês Tradicional (正 體 中文)</string>
268 <string name="language_brazilian_portuguese">Português do Brasil (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulcano</string>
272 <string name="renderer_none">Nenhum</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">Normal</string>
276 <string name="renderer_accuracy_high">Alto</string>
277 <string name="renderer_accuracy_extreme">Estremo (Lento)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (Lento)</string>
284 <string name="resolution_three">3X (2160p/3240p) (Lento)</string>
285 <string name="resolution_four">4X (2880p/4320p) (Lento)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">Imediato (Desligado)</string>
289 <string name="renderer_vsync_mailbox">Caixa de entrada</string>
290 <string name="renderer_vsync_fifo">FIFO (Ligado)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO Relaxado </string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">Vizinho mais próximo</string>
295 <string name="scaling_filter_bilinear">Bilinear</string>
296 <string name="scaling_filter_bicubic">Bicúbico</string>
297 <string name="scaling_filter_gaussian">Gaussiano</string>
298 <string name="scaling_filter_scale_force">ScaleForce</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">Nenhum</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">Padrão (16:9)</string>
308 <string name="ratio_force_four_three">Forçar 4:3</string>
309 <string name="ratio_force_twenty_one_nine">Forçar 21:9</string>
310 <string name="ratio_force_sixteen_ten">Forçar 16:10</string>
311 <string name="ratio_stretch">Esticar à Janela</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Automático</string>
315 <string name="cpu_accuracy_accurate">Preciso</string>
316 <string name="cpu_accuracy_unsafe">Inseguro</string>
317 <string name="cpu_accuracy_paranoid">Paranoid (Lento)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">D-Pad</string>
321 <string name="gamepad_left_stick">Analógico Esquerdo</string>
322 <string name="gamepad_right_stick">Analógico Direito</string>
323 <string name="gamepad_home">Home</string>
324 <string name="gamepad_screenshot">Captura de ecrã</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">A preparar shaders</string>
328 <string name="building_shaders">A criar shaders</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">Muda o Tema da App</string>
332 <string name="theme_default">Padrão</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">Altera o Modo do Tema</string>
337 <string name="theme_mode_follow_system">Igual ao Sistema</string>
338 <string name="theme_mode_light">Claro</string>
339 <string name="theme_mode_dark">Escuro</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">Usa Fundos Escuros</string>
343 <string name="use_black_backgrounds_description">Quando usar tema escuro, aplicar fundos escuros</string>
344
345</resources>
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 100644
index 000000000..1401cf6a0
--- /dev/null
+++ b/src/android/app/src/main/res/values-ru/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Это программное обеспечение позволяет запускать игры для игровой консоли Nintendo Switch. Мы не предоставляем сами игры или ключи.&lt;br /&gt;&lt;br /&gt;Перед началом работы найдите файл <![CDATA[<b> prod.keys </b>]]> в хранилище устройства..&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">Узнать больше</a>]]></string>
5 <string name="emulation_notification_channel_name">Эмуляция активна</string>
6 <string name="emulation_notification_channel_description">Показывает постоянное уведомление, когда запущена эмуляция.</string>
7 <string name="emulation_notification_running">yuzu запущен</string>
8 <string name="notice_notification_channel_name">Уведомления и ошибки</string>
9 <string name="notice_notification_channel_description">Показывать уведомления, когда что-то пошло не так</string>
10 <string name="notification_permission_not_granted">Вы не предоставили разрешение уведомлений!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Добро пожаловать!</string>
14 <string name="welcome_description">Узнайте, как настроить &lt;b>yuzu&lt;/b> и перейти прямиком к эмуляции.</string>
15 <string name="get_started">Начать</string>
16 <string name="keys">Ключи</string>
17 <string name="keys_description">Выберите ваш файл &lt;b>prod.keys&lt;/b> с помощью кнопки ниже.</string>
18 <string name="select_keys">Выбрать ключи</string>
19 <string name="games">Игры</string>
20 <string name="games_description">Выберите вашу папку с &lt;b>играми&lt;/b> с помощью кнопки ниже.</string>
21 <string name="done">Готово</string>
22 <string name="done_description">Все готово.\nМожно играть!</string>
23 <string name="text_continue">Продолжить</string>
24 <string name="next">Далее</string>
25 <string name="back">Назад</string>
26 <string name="add_games">Добавить игры</string>
27 <string name="add_games_description">Выберите папку с играми</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Игры</string>
31 <string name="home_search">Поиск</string>
32 <string name="home_settings">Настройки</string>
33 <string name="empty_gamelist">Не найдены файлы или еще не выбрана папка с играми.</string>
34 <string name="search_and_filter_games">Поиск и фильтрация игр</string>
35 <string name="select_games_folder">Выберите папку с играми</string>
36 <string name="select_games_folder_description">Позволяет yuzu заполнить список игр</string>
37 <string name="add_games_warning">Пропустить выбор папки с играми?</string>
38 <string name="add_games_warning_description">Игры не будут отображаться в списке Игры, если папка не выбрана.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Найти игры</string>
41 <string name="games_dir_selected">Выбрана папка с играми</string>
42 <string name="install_prod_keys">Установить prod.keys</string>
43 <string name="install_prod_keys_description">Требуется для расшифровки розничных игр</string>
44 <string name="install_prod_keys_warning">Пропустить добавление ключей?</string>
45 <string name="install_prod_keys_warning_description">Для эмуляции розничных игр требуются действительные ключи. Если вы продолжите, будут работать только homebrew приложения.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Уведомления</string>
48 <string name="notifications_description">Предоставьте разрешение уведомлений с помощью кнопки ниже.</string>
49 <string name="give_permission">Предоставить разрешение</string>
50 <string name="notification_warning">Пропустить предоставление разрешения уведомлений?</string>
51 <string name="notification_warning_description">yuzu не сможет уведомлять вас о важной информации.</string>
52 <string name="permission_denied">Разрешение отказано</string>
53 <string name="permission_denied_description">Вы слишком часто отклоняли это разрешение, и теперь вам нужно будет вручную предоставить его в настройках системы.</string>
54 <string name="about">О нас</string>
55 <string name="about_description">Версия сборки, титры и другое</string>
56 <string name="warning_help">Помощь</string>
57 <string name="warning_skip">Пропустить</string>
58 <string name="warning_cancel">Отмена</string>
59 <string name="install_amiibo_keys">Установить ключи Amiibo</string>
60 <string name="install_amiibo_keys_description">Необходимо для использования Amiibo в играх</string>
61 <string name="invalid_keys_file">Выбран неверный файл ключей</string>
62 <string name="install_keys_success">Ключи успешно установлены</string>
63 <string name="reading_keys_failure">Ошибка при чтении ключей шифрования</string>
64 <string name="install_keys_failure_extension_description">
65 1. Убедитесь, что ваши ключи имеют расширение .keys\n\n
66 2. Ключи не должны находиться в папке Downloads.\n\n
67 Исправьте проблему(-ы) и повторите попытку.
68 </string>
69 <string name="invalid_keys_error">Неверные ключи шифрования</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Выбранный файл неверен или поврежден. Пожалуйста, пере-дампите ваши ключи.</string>
72 <string name="install_gpu_driver">Установить драйвер ГП</string>
73 <string name="install_gpu_driver_description">Установите альтернативные драйверы для потенциально лучшей производительности и/или точности</string>
74 <string name="advanced_settings">Расширенные настройки</string>
75 <string name="settings_description">Настройка параметров эмулятора</string>
76 <string name="search_recently_played">Недавно сыграно</string>
77 <string name="search_recently_added">Недавно добавлено</string>
78 <string name="search_retail">Розничные</string>
79 <string name="search_homebrew">Homebrew</string>
80 <string name="open_user_folder">Открыть папку yuzu</string>
81 <string name="open_user_folder_description">Управление внутренними файлами yuzu</string>
82 <string name="theme_and_color_description">Изменение внешнего вида приложения</string>
83 <string name="no_file_manager">Не найден файловый менеджер</string>
84 <string name="notification_no_directory_link">Не удалось открыть папку yuzu</string>
85 <string name="notification_no_directory_link_description">Пожалуйста, найдите папку пользователя с помощью боковой панели файлового менеджера вручную.</string>
86 <string name="manage_save_data">Управление данными сохранений</string>
87 <string name="manage_save_data_description">Найдено данные сохранений. Пожалуйста, выберите вариант ниже.</string>
88 <string name="import_export_saves_description">Импорт или экспорт файлов сохранения</string>
89 <string name="import_export_saves_no_profile">Данные сохранений не найдены. Пожалуйста, запустите игру и повторите попытку.</string>
90 <string name="save_file_imported_success">Успешно импортировано</string>
91 <string name="save_file_invalid_zip_structure">Недопустимая структура папки сохранения</string>
92 <string name="save_file_invalid_zip_structure_description">Название первой вложенной папки должно быть идентификатором игры.</string>
93 <string name="import_saves">Импорт</string>
94 <string name="export_saves">Экспорт</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia не существует</string>
98 <string name="copied_to_clipboard">Скопировано в буфер обмена</string>
99 <string name="about_app_description">Эмулятор Switch с открытым исходным кодом</string>
100 <string name="contributors">Контрибьюторы</string>
101 <string name="contributors_description">Сделано с \u2764 от команды yuzu</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">Сборка</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">Ранний доступ</string>
110 <string name="get_early_access">Получить ранний доступ</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">Новейшие возможности, ранний доступ к обновлениям и другое</string>
113 <string name="early_access_benefits">Преимущества раннего доступа</string>
114 <string name="cutting_edge_features">Новейшие возможности</string>
115 <string name="early_access_updates">Ранний доступ к обновлениям</string>
116 <string name="no_manual_installation">Без ручной установки</string>
117 <string name="prioritized_support">Приоритетная поддержка</string>
118 <string name="helping_game_preservation">Помощь в презервации игр</string>
119 <string name="our_eternal_gratitude">Наша бесконечная благодарность</string>
120 <string name="are_you_interested">Вы заинтересованы?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">Включить ограничение скорости</string>
124 <string name="frame_limit_enable_description">Если эта функция включена, скорость эмуляции будет ограничена указанным процентом от нормальной скорости.</string>
125 <string name="frame_limit_slider">Ограничение процента cкорости</string>
126 <string name="frame_limit_slider_description">Указывает процент для ограничения скорости эмуляции. При значении по умолчанию 100% эмуляция будет ограничена нормальной скоростью. Значения выше или ниже будут увеличивать или уменьшать ограничение скорости.</string>
127 <string name="cpu_accuracy">Точность ЦП</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">Режим док-станции</string>
131 <string name="use_docked_mode_description">Эмуляция режима док-станции, что увеличивает разрешение за счет снижения производительности.</string>
132 <string name="emulated_region">Эмулируемый регион</string>
133 <string name="emulated_language">Эмулируемый язык</string>
134 <string name="select_rtc_date">Выберите дату RTC</string>
135 <string name="select_rtc_time">Выберите время RTC</string>
136 <string name="use_custom_rtc">Включить пользовательский RTC</string>
137 <string name="use_custom_rtc_description">Этот параметр позволяет установить пользовательские часы реального времени отдельно от текущего системного времени</string>
138 <string name="set_custom_rtc">Установить пользовательский RTC</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">Уровень точности</string>
143 <string name="renderer_resolution">Разрешение</string>
144 <string name="renderer_vsync">Режим верт. синхронизации</string>
145 <string name="renderer_aspect_ratio">Соотношение сторон</string>
146 <string name="renderer_scaling_filter">Фильтр адаптации окна</string>
147 <string name="renderer_anti_aliasing">Метод сглаживания</string>
148 <string name="renderer_force_max_clock">Принудительно заставить максимальную тактовую частоту (только для Adreno)</string>
149 <string name="renderer_force_max_clock_description">Заставляет ГП работать на максимально возможных тактовых частотах (тепловые ограничения все равно будут применяться).</string>
150 <string name="renderer_asynchronous_shaders">Использовать асинхронные шейдеры</string>
151 <string name="renderer_asynchronous_shaders_description">Компилирует шейдеры асинхронно, что уменьшает зависания, но может взамен предоставить визуальные баги.</string>
152 <string name="renderer_debug">Включить отладку графики</string>
153 <string name="renderer_debug_description">Если включено, графический API переходит в более медленный режим отладки</string>
154 <string name="use_disk_shader_cache">Использовать кэш шейдеров на диске</string>
155 <string name="use_disk_shader_cache_description">Уменьшение зависаний за счет хранения и загрузки сгенерированных шейдеров на хранилище.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">Громкость</string>
159 <string name="audio_volume_description">Задает громкость аудиовыхода.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">По умолчанию</string>
163 <string name="ini_saved">Сохраненные настройки</string>
164 <string name="gameid_saved">Настройки сохранены для %1$s</string>
165 <string name="error_saving">Ошибка сохранения %1$s.ini: %2$s</string>
166 <string name="loading">Загрузка...</string>
167 <string name="reset_setting_confirmation">Хотите ли вы вернуть этот параметр к значению по умолчанию?</string>
168 <string name="reset_to_default">Сброс к настройкам по умолчанию</string>
169 <string name="reset_all_settings">Сбросить все настройки?</string>
170 <string name="reset_all_settings_description">Все дополнительные настройки будут сброшены к настройке по умолчанию. Это невозможно отменить.</string>
171 <string name="settings_reset">Настройки сброшены</string>
172 <string name="close">Закрыть</string>
173 <string name="learn_more">Узнать больше</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">Выбрать драйвер ГП</string>
177 <string name="select_gpu_driver_title">Хотите заменить текущий драйвер ГП?</string>
178 <string name="select_gpu_driver_install">Установить</string>
179 <string name="select_gpu_driver_default">По умолчанию</string>
180 <string name="select_gpu_driver_install_success">Установлено %s</string>
181 <string name="select_gpu_driver_use_default">Используется стандартный драйвер ГП </string>
182 <string name="select_gpu_driver_error">Выбран неверный драйвер, используется стандартный системный!</string>
183 <string name="system_gpu_driver">Системный драйвер ГП</string>
184 <string name="installing_driver">Установка драйвера...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Расширенные настройки</string>
188 <string name="preferences_settings">Настройки</string>
189 <string name="preferences_general">Общие</string>
190 <string name="preferences_system">Система</string>
191 <string name="preferences_graphics">Графика</string>
192 <string name="preferences_audio">Аудио</string>
193 <string name="preferences_theme">Тема и цвет</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">Ваш ROM зашифрованный</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[Пожалуйста, следуйте инструкциям, чтобы пере-дампить ваши <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">игровые картриджи</a> или <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">установленные игры</a>.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[Пожалуйста, убедитесь, что ваш файл <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> установлен, чтобы игры можно было расшифровать.]]></string>
199 <string name="loader_error_video_core">Произошла ошибка при инициализации видеоядра.</string>
200 <string name="loader_error_video_core_description">Обычно это вызвано несовместимым драйвером ГП. Установка пользовательского драйвера ГП может решить эту проблему.</string>
201 <string name="loader_error_invalid_format">Не удалось запустить ROM</string>
202 <string name="loader_error_file_not_found">Файл ROM не существует</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">Выход из эмуляции</string>
206 <string name="emulation_done">Готово</string>
207 <string name="emulation_fps_counter">Счётчик FPS</string>
208 <string name="emulation_toggle_controls">Переключение управления</string>
209 <string name="emulation_rel_stick_center">Относительный центр стика</string>
210 <string name="emulation_dpad_slide">Слайд крестовиной</string>
211 <string name="emulation_haptics">Тактильная обратная связь</string>
212 <string name="emulation_show_overlay">Показать оверлей</string>
213 <string name="emulation_toggle_all">Переключить всё</string>
214 <string name="emulation_control_adjust">Настроить оверлей</string>
215 <string name="emulation_control_scale">Масштаб</string>
216 <string name="emulation_control_opacity">Непрозрачность</string>
217 <string name="emulation_touch_overlay_reset">Сбросить оверлей</string>
218 <string name="emulation_touch_overlay_edit">Изменить оверлей</string>
219 <string name="emulation_pause">Пауза эмуляции</string>
220 <string name="emulation_unpause">Возобновление эмуляции</string>
221 <string name="emulation_input_overlay">Настройки оверлея</string>
222 <string name="emulation_game_loading">Загрузка игры...</string>
223
224 <string name="load_settings">Загрузка настроек...</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">Виртуальная клавиатура</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">Прервать</string>
231 <string name="continue_button">Продолжить</string>
232 <string name="system_archive_not_found">Системный архив не найден</string>
233 <string name="system_archive_not_found_message">%s отсутствует. Пожалуйста, сдампите ваши системные архивы.\nПродолжение эмуляции может привести к сбоям и ошибкам.</string>
234 <string name="system_archive_general">Системный архив</string>
235 <string name="save_load_error">Ошибка сохранения/загрузки</string>
236 <string name="fatal_error">Фатальная ошибка</string>
237 <string name="fatal_error_message">Произошла фатальная ошибка. Проверьте журнал для получения подробной информации.\nПродолжение эмуляции может привести к сбоям и ошибкам.</string>
238 <string name="performance_warning">Отключение этой настройки значительно снизит производительность эмуляции! Для достижения наилучших результатов рекомендуется оставить эту настройку включенной.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">Авто-выбор</string>
242 <string name="region_japan">Япония</string>
243 <string name="region_usa">США</string>
244 <string name="region_europe">Европа</string>
245 <string name="region_australia">Австралия</string>
246 <string name="region_china">Китай</string>
247 <string name="region_korea">Корея</string>
248 <string name="region_taiwan">Тайвань</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">Японский (日本語)</string>
252 <string name="language_english">Английский (English)</string>
253 <string name="language_french">Французский (Français)</string>
254 <string name="langauge_german">Немецкий (Deutsch)</string>
255 <string name="language_italian">Итальянский (Italiano)</string>
256 <string name="language_spanish">Испанский (Español)</string>
257 <string name="language_chinese">Китайский (简体中文)</string>
258 <string name="language_korean">Корейский (한국어)</string>
259 <string name="language_dutch">Голландский (Nederlands)</string>
260 <string name="language_portuguese">Португальский (Português)</string>
261 <string name="language_russian">Русский</string>
262 <string name="language_taiwanese">Тайваньский (台湾)</string>
263 <string name="language_british_english">Британский английский</string>
264 <string name="language_canadian_french">Канадский французский (Français canadien)</string>
265 <string name="language_latin_american_spanish">Латиноамериканский испанский (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">Упрощенный китайский (简体中文)</string>
267 <string name="language_traditional_chinese">Традиционный китайский (正體中文)</string>
268 <string name="language_brazilian_portuguese">Бразильский португальский (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulkan</string>
272 <string name="renderer_none">Никакой</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">Нормальная</string>
276 <string name="renderer_accuracy_high">Высокая</string>
277 <string name="renderer_accuracy_extreme">Экстрим (медленный)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (Медленно)</string>
284 <string name="resolution_three">3X (2160p/3240p) (Медленно)</string>
285 <string name="resolution_four">4X (2880p/4320p) (Медленно)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">Моментальная (выключена) </string>
289 <string name="renderer_vsync_mailbox">Mailbox</string>
290 <string name="renderer_vsync_fifo">FIFO (Включена)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO Relaxed</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">Ближайший сосед</string>
295 <string name="scaling_filter_bilinear">Билинейный</string>
296 <string name="scaling_filter_bicubic">Бикубический</string>
297 <string name="scaling_filter_gaussian">Гаусс</string>
298 <string name="scaling_filter_scale_force">ScaleForce</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™️ Super Resolution</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">Выкл.</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">Стандартное (16:9)</string>
308 <string name="ratio_force_four_three">Заставить 4:3</string>
309 <string name="ratio_force_twenty_one_nine">Заставить 21:9</string>
310 <string name="ratio_force_sixteen_ten">Заставить 16:10</string>
311 <string name="ratio_stretch">Растянуть до окна</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Авто</string>
315 <string name="cpu_accuracy_accurate">Точно</string>
316 <string name="cpu_accuracy_unsafe">Небезопасно</string>
317 <string name="cpu_accuracy_paranoid">Параноик (медленно)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">Крестовина</string>
321 <string name="gamepad_left_stick">Левый мини-джойстик</string>
322 <string name="gamepad_right_stick">Правый мини-джойстик</string>
323 <string name="gamepad_home">Home</string>
324 <string name="gamepad_screenshot">Скриншот</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">Подготовка шейдеров</string>
328 <string name="building_shaders">Постройка шейдеров</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">Изменить тему приложения</string>
332 <string name="theme_default">По умолчанию</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">Изменить режим темы</string>
337 <string name="theme_mode_follow_system">Системная</string>
338 <string name="theme_mode_light">Светлая</string>
339 <string name="theme_mode_dark">Темная</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">Использовать черный фон</string>
343 <string name="use_black_backgrounds_description">При использовании темной темы применяйте черный фон.</string>
344
345</resources>
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 100644
index 000000000..86d9c84f0
--- /dev/null
+++ b/src/android/app/src/main/res/values-uk/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">Це програмне забезпечення дозволяє запускати ігри для ігрової консолі Nintendo Switch. Ми не надаємо самі ігри або ключі.&lt;br /&gt;&lt;br /&gt;Перед початком роботи знайдіть ваш файл <![CDATA[<b> prod.keys </b>]]> у сховищі пристрою.&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">Дізнатися більше</a>]]></string>
5 <string name="emulation_notification_channel_name">Емуляція активна</string>
6 <string name="emulation_notification_channel_description">Показує постійне сповіщення, коли запущено емуляцію.</string>
7 <string name="emulation_notification_running">yuzu запущено</string>
8 <string name="notice_notification_channel_name">Сповіщення та помилки</string>
9 <string name="notice_notification_channel_description">Показувати сповіщення, коли щось пішло не так</string>
10 <string name="notification_permission_not_granted">Ви не надали дозвіл сповіщень!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">Вітаємо!</string>
14 <string name="welcome_description">Дізнайтеся, як налаштувати &lt;b>yuzu&lt;/b> та перейти до емуляції.</string>
15 <string name="get_started">Розпочати</string>
16 <string name="keys">Ключі</string>
17 <string name="keys_description">Виберіть ваш файл &lt;b>prod.keys&lt;/b> за допомогою кнопки нижче.</string>
18 <string name="select_keys">Вибрати ключі</string>
19 <string name="games">Ігри</string>
20 <string name="games_description">Виберіть вашу папку з &lt;b>іграми&lt;/b> за допомогою кнопки нижче.</string>
21 <string name="done">Готово</string>
22 <string name="done_description">Все готово.\nМожна грати!</string>
23 <string name="text_continue">Продовжити</string>
24 <string name="next">Далі</string>
25 <string name="back">Назад</string>
26 <string name="add_games">Додати ігри</string>
27 <string name="add_games_description">Виберіть папку з іграми</string>
28
29 <!-- Home strings -->
30 <string name="home_games">Ігри</string>
31 <string name="home_search">Пошук</string>
32 <string name="home_settings">Налаштування</string>
33 <string name="empty_gamelist">Не знайдено файлів або ще не вибрано папку з іграми.</string>
34 <string name="search_and_filter_games">Пошук та фільтрація ігор</string>
35 <string name="select_games_folder">Виберіть папку з іграми</string>
36 <string name="select_games_folder_description">Дозволяє yuzu заповнити список ігор</string>
37 <string name="add_games_warning">Пропустити вибір папки з іграми?</string>
38 <string name="add_games_warning_description">Ігри не відображатимуться у списку Ігри, якщо папку не вибрано.</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">Знайти ігри</string>
41 <string name="games_dir_selected">Вибрано папку з іграми</string>
42 <string name="install_prod_keys">Встановити prod.keys</string>
43 <string name="install_prod_keys_description">Потрібно для розшифровки роздрібних ігор</string>
44 <string name="install_prod_keys_warning">Пропустити додавання ключів?</string>
45 <string name="install_prod_keys_warning_description">Для емуляції роздрібних ігор потрібні дійсні ключі. Якщо ви продовжите, працюватимуть тільки homebrew додатки.</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">Сповіщення</string>
48 <string name="notifications_description">Надайте дозвіл сповіщень за допомогою кнопки нижче.</string>
49 <string name="give_permission">Надати дозвіл</string>
50 <string name="notification_warning">Пропустити надання дозволу сповіщень?</string>
51 <string name="notification_warning_description">yuzu не зможе повідомляти вас про важливу інформацію.</string>
52 <string name="permission_denied">У дозволі відмовлено</string>
53 <string name="permission_denied_description">Ви занадто часто відхиляли цей дозвіл, тож тепер вам потрібно буде вручну надати його в системних налаштуваннях.</string>
54 <string name="about">Про нас</string>
55 <string name="about_description">Версія збірки, титри та інше</string>
56 <string name="warning_help">Допомога</string>
57 <string name="warning_skip">Пропустити</string>
58 <string name="warning_cancel">Відміна</string>
59 <string name="install_amiibo_keys">Встановити ключі Amiibo</string>
60 <string name="install_amiibo_keys_description">Необхідно для використання Amiibo в іграх</string>
61 <string name="invalid_keys_file">Вибрано неправильний файл ключів</string>
62 <string name="install_keys_success">Ключі успішно встановлено</string>
63 <string name="reading_keys_failure">Помилка під час зчитування ключів шифрування</string>
64 <string name="install_keys_failure_extension_description">
65 1. Переконайтеся, що ваші ключі мають розширення .keys\n\n
66 2. Ключі не повинні знаходитися в папці Downloads.\n\n
67 Виправте проблему(-и) та спробуйте ще раз.
68 </string>
69 <string name="invalid_keys_error">Невірні ключі шифрування</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">Обраний файл невірний або пошкоджений. Будь ласка, пере-дампіть ваші ключі.</string>
72 <string name="install_gpu_driver">Встановити драйвер ГП</string>
73 <string name="install_gpu_driver_description">Встановіть альтернативні драйвери для потенційно кращої продуктивності та/або точності</string>
74 <string name="advanced_settings">Розширені налаштування</string>
75 <string name="settings_description">Налаштування параметрів емулятора</string>
76 <string name="search_recently_played">Нещодавно зіграно</string>
77 <string name="search_recently_added">Нещодавно додано</string>
78 <string name="search_retail">Роздрібні</string>
79 <string name="search_homebrew">Homebrew</string>
80 <string name="open_user_folder">Відкрити папку yuzu</string>
81 <string name="open_user_folder_description">Керування внутрішніми файлами yuzu</string>
82 <string name="theme_and_color_description">Змінити зовнішній вигляд застосунку</string>
83 <string name="no_file_manager">Не знайдено файлового менеджера</string>
84 <string name="notification_no_directory_link">Не вдалося відкрити папку yuzu</string>
85 <string name="notification_no_directory_link_description">Будь ласка, знайдіть папку користувача за допомогою бічної панелі файлового менеджера вручну.</string>
86 <string name="manage_save_data">Керування даними збережень</string>
87 <string name="manage_save_data_description">Знайдено дані збережень. Будь ласка, виберіть варіант нижче.</string>
88 <string name="import_export_saves_description">Імпорт або експорт файлів збереження</string>
89 <string name="import_export_saves_no_profile">Дані збережень не знайдено. Будь ласка, запустіть гру та повторіть спробу.</string>
90 <string name="save_file_imported_success">Успішно імпортовано</string>
91 <string name="save_file_invalid_zip_structure">Неприпустима структура папки збереження</string>
92 <string name="save_file_invalid_zip_structure_description">Назва першої вкладеної папки має бути ідентифікатором гри.</string>
93 <string name="import_saves">Імпорт</string>
94 <string name="export_saves">Експорт</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia не існує</string>
98 <string name="copied_to_clipboard">Скопійовано в буфер обміну</string>
99 <string name="about_app_description">Емулятор Switch із відкритим першокодом</string>
100 <string name="contributors">Вкладники</string>
101 <string name="contributors_description">Зроблено з \u2764 від команди yuzu</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">Збірка</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">Ранній доступ</string>
110 <string name="get_early_access">Отримати ранній доступ</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">Новітні можливості, ранній доступ до оновлень та інше</string>
113 <string name="early_access_benefits">Переваги раннього доступу</string>
114 <string name="cutting_edge_features">Новітні можливості</string>
115 <string name="early_access_updates">Ранній доступ до оновлень</string>
116 <string name="no_manual_installation">Без ручного встановлення</string>
117 <string name="prioritized_support">Пріоритетна підтримка</string>
118 <string name="helping_game_preservation">Допомога в презервації ігор</string>
119 <string name="our_eternal_gratitude">Наша нескінченна вдячність</string>
120 <string name="are_you_interested">Ви зацікавлені?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">Увімкнути обмеження швидкості</string>
124 <string name="frame_limit_enable_description">Якщо цю функцію ввімкнено, швидкість емуляції буде обмежена зазначеним відсотком від нормальної швидкості.</string>
125 <string name="frame_limit_slider">Обмеження відсотка швидкості</string>
126 <string name="frame_limit_slider_description">Вказує відсоток для обмеження швидкості емуляції. При значенні за замовчуванням 100% емуляція буде обмежена нормальною швидкістю. Значення вище або нижче збільшуватимуть або зменшуватимуть обмеження швидкості.</string>
127 <string name="cpu_accuracy">Точність ЦП</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">Режим док-станції</string>
131 <string name="use_docked_mode_description">Емуляція режиму док-станції, що збільшує роздільну здатність за рахунок зниження продуктивності.</string>
132 <string name="emulated_region">Емульований регіон</string>
133 <string name="emulated_language">Емульована мова</string>
134 <string name="select_rtc_date">Оберіть дату RTC</string>
135 <string name="select_rtc_time">Оберіть час RTC</string>
136 <string name="use_custom_rtc">Увімкнути користувацький RTC</string>
137 <string name="use_custom_rtc_description">Цей параметр дає змогу встановити користувацький годинник реального часу окремо від поточного системного часу</string>
138 <string name="set_custom_rtc">Встановити користувацький RTC</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">Рівень точності</string>
143 <string name="renderer_resolution">Роздільна здатність</string>
144 <string name="renderer_vsync">Режим верт. синхронізації</string>
145 <string name="renderer_aspect_ratio">Співвідношення сторін</string>
146 <string name="renderer_scaling_filter">Фільтр адаптації вікна</string>
147 <string name="renderer_anti_aliasing">Метод згладжування</string>
148 <string name="renderer_force_max_clock">Примусово змусити максимальну тактову частоту (тільки для Adreno)</string>
149 <string name="renderer_force_max_clock_description">Змушує ГП працювати на максимально можливих тактових частотах (теплові обмеження все одно будуть застосовуватися).</string>
150 <string name="renderer_asynchronous_shaders">Використовувати асинхронні шейдери</string>
151 <string name="renderer_asynchronous_shaders_description">Компілює шейдери асинхронно, що зменшує зависання, але може натомість надати візуальні баги.</string>
152 <string name="renderer_debug">Увімкнути налагодження графіки</string>
153 <string name="renderer_debug_description">Якщо увімкнено, графічний API переходить у повільніший режим налагодження</string>
154 <string name="use_disk_shader_cache">Використовувати кеш шейдерів на диску</string>
155 <string name="use_disk_shader_cache_description">Зменшення зависань завдяки зберіганню та завантаженню згенерованих шейдерів на сховище.</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">Гучність</string>
159 <string name="audio_volume_description">Вказує гучність аудіовиходу.</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">За замовчуванням</string>
163 <string name="ini_saved">Збережені налаштування</string>
164 <string name="gameid_saved">Налаштування збережені для %1$s</string>
165 <string name="error_saving">Помилка збереження %1$s.ini: %2$s</string>
166 <string name="loading">Завантаження...</string>
167 <string name="reset_setting_confirmation">Чи хочете ви повернути цей параметр до значення за замовчуванням?</string>
168 <string name="reset_to_default">Скидання до налаштувань за замовчуванням</string>
169 <string name="reset_all_settings">Скинути всі налаштування</string>
170 <string name="reset_all_settings_description">Усі додаткові налаштування буде скинуто до налаштування за замовчуванням. Це неможливо скасувати.</string>
171 <string name="settings_reset">Налаштування скинуто</string>
172 <string name="close">Закрити</string>
173 <string name="learn_more">Дізнатися більше</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">Вибрати драйвер ГП</string>
177 <string name="select_gpu_driver_title">Хочете замінити поточний драйвер ГП?</string>
178 <string name="select_gpu_driver_install">Встановити</string>
179 <string name="select_gpu_driver_default">За замовчуванням</string>
180 <string name="select_gpu_driver_install_success">Встановлено %s</string>
181 <string name="select_gpu_driver_use_default">Використовується стандартний драйвер ГП</string>
182 <string name="select_gpu_driver_error">Обрано неправильний драйвер, використовується стандартний системний!</string>
183 <string name="system_gpu_driver">Системний драйвер ГП</string>
184 <string name="installing_driver">Встановлення драйвера...</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">Розширені налаштування</string>
188 <string name="preferences_settings">Налаштування</string>
189 <string name="preferences_general">Загальні</string>
190 <string name="preferences_system">Система</string>
191 <string name="preferences_graphics">Графіка</string>
192 <string name="preferences_audio">Аудіо</string>
193 <string name="preferences_theme">Тема і колір</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">Ваш ROM зашифрований</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[Будь ласка, дотримуйтесь інструкцій, щоб пере-дампити ваші <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">ігрові картриджі</a> або <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">встановлені ігри</a>.]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[Будь ласка, переконайтеся, що ваш файл <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> встановлено, щоб ігри можна було розшифрувати.]]></string>
199 <string name="loader_error_video_core">Сталася помилка під час ініціалізації відеоядра.</string>
200 <string name="loader_error_video_core_description">Зазвичай це спричинено несумісним драйвером ГП. Встановлення користувацького драйвера ГП може вирішити цю проблему.</string>
201 <string name="loader_error_invalid_format">Не вдалося запустити ROM</string>
202 <string name="loader_error_file_not_found">Файл ROM не існує</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">Вихід з емуляції</string>
206 <string name="emulation_done">Готово</string>
207 <string name="emulation_fps_counter">Лічильник FPS</string>
208 <string name="emulation_toggle_controls">Перемикання керування</string>
209 <string name="emulation_rel_stick_center">Відносний центр стіка</string>
210 <string name="emulation_dpad_slide">Слайд хрестовиною</string>
211 <string name="emulation_haptics">Тактильний зворотний зв\'язок</string>
212 <string name="emulation_show_overlay">Показати оверлей</string>
213 <string name="emulation_toggle_all">Перемкнути все</string>
214 <string name="emulation_control_adjust">Налаштувати оверлей</string>
215 <string name="emulation_control_scale">Масштаб</string>
216 <string name="emulation_control_opacity">Непрозорість</string>
217 <string name="emulation_touch_overlay_reset">Скинути оверлей</string>
218 <string name="emulation_touch_overlay_edit">Змінити оверлей</string>
219 <string name="emulation_pause">Пауза емуляції</string>
220 <string name="emulation_unpause">Відновлення емуляції</string>
221 <string name="emulation_input_overlay">Налаштування оверлея</string>
222 <string name="emulation_game_loading">Завантаження гри...</string>
223
224 <string name="load_settings">Завантаження налаштувань...</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">Віртуальна клавіатура</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">Перервати</string>
231 <string name="continue_button">Продовжити</string>
232 <string name="system_archive_not_found">Системний архів не знайдено</string>
233 <string name="system_archive_not_found_message">%s відсутній. Будь ласка, здампіть ваші системні архіви.\nПродовження емуляції може призвести до збоїв і помилок.</string>
234 <string name="system_archive_general">Системний архів</string>
235 <string name="save_load_error">Помилка збереження/завантаження</string>
236 <string name="fatal_error">Фатальна помилка</string>
237 <string name="fatal_error_message">Сталася фатальна помилка. Перевірте журнал для отримання докладної інформації.\nПродовження емуляції може призвести до збоїв і помилок.</string>
238 <string name="performance_warning">Вимкнення цього налаштування значно знизить продуктивність емуляції! Для досягнення найкращих результатів рекомендується залишити це налаштування увімкненим.</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">Авто-вибір</string>
242 <string name="region_japan">Японія</string>
243 <string name="region_usa">США</string>
244 <string name="region_europe">Європа</string>
245 <string name="region_australia">Австралія</string>
246 <string name="region_china">Китай</string>
247 <string name="region_korea">Корея</string>
248 <string name="region_taiwan">Тайвань</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">Японська (日本語)</string>
252 <string name="language_english">Англійська (English)</string>
253 <string name="language_french">Французька (Français)</string>
254 <string name="langauge_german">Німецька (Deutsch)</string>
255 <string name="language_italian">Італійська (Italiano)</string>
256 <string name="language_spanish">Іспанська (Español)</string>
257 <string name="language_chinese">Китайскька (简体中文)</string>
258 <string name="language_korean">Корейська (한국어)</string>
259 <string name="language_dutch">Голландська (Nederlands)</string>
260 <string name="language_portuguese">Португальська (Português)</string>
261 <string name="language_russian">Російська (Русский)</string>
262 <string name="language_taiwanese">Тайванська (台湾)</string>
263 <string name="language_british_english">Британська англійська</string>
264 <string name="language_canadian_french">Канадська французька (Français canadien)</string>
265 <string name="language_latin_american_spanish">Латиноамериканська іспанська (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">Спрощена китайська (简体中文)</string>
267 <string name="language_traditional_chinese">Традиційна китайська (正體中文)</string>
268 <string name="language_brazilian_portuguese">Бразильська португальська (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulkan</string>
272 <string name="renderer_none">Вимкнено</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">Нормальна</string>
276 <string name="renderer_accuracy_high">Висока</string>
277 <string name="renderer_accuracy_extreme">Екстрим (повільно)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (Повільно)</string>
284 <string name="resolution_three">3X (2160p/3240p) (Повільно)</string>
285 <string name="resolution_four">4X (2880p/4320p) (Повільно)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">Моментальна (вимкнена)</string>
289 <string name="renderer_vsync_mailbox">Mailbox</string>
290 <string name="renderer_vsync_fifo">FIFO (ввімкнута)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO Relaxed</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">Найближчий сусід</string>
295 <string name="scaling_filter_bilinear">Білінійне</string>
296 <string name="scaling_filter_bicubic">Бікубічне</string>
297 <string name="scaling_filter_gaussian">Гауса</string>
298 <string name="scaling_filter_scale_force">ScaleForce</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™ Super Resolution</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">Вимкнено</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">За замовчуванням (16:9)</string>
308 <string name="ratio_force_four_three">Змусити 4:3</string>
309 <string name="ratio_force_twenty_one_nine">Змусити 21:9</string>
310 <string name="ratio_force_sixteen_ten">Змусити 16:10</string>
311 <string name="ratio_stretch">Розтягнути до вікна</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">Авто</string>
315 <string name="cpu_accuracy_accurate">Точно</string>
316 <string name="cpu_accuracy_unsafe">Небезпечно</string>
317 <string name="cpu_accuracy_paranoid">Параноїк (повільно)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">Кнопки напрямків</string>
321 <string name="gamepad_left_stick">Лівий міні-джойстик</string>
322 <string name="gamepad_right_stick">Правий міні-джойстик</string>
323 <string name="gamepad_home">Home</string>
324 <string name="gamepad_screenshot">Знімок екрану</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">Підготовка шейдерів</string>
328 <string name="building_shaders">Побудова шейдерів</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">Змінити тему застосунку</string>
332 <string name="theme_default">За замовчуванням</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">Змінити режим теми</string>
337 <string name="theme_mode_follow_system">Системна</string>
338 <string name="theme_mode_light">Світла</string>
339 <string name="theme_mode_dark">Темна</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">Використовувати чорне тло</string>
343 <string name="use_black_backgrounds_description">У разі використання темної теми застосовуйте чорне тло.</string>
344
345</resources>
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 100644
index 000000000..034421c92
--- /dev/null
+++ b/src/android/app/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">此软件可以运行 Nintendo Switch 游戏,但不包含任何游戏和密钥文件。&lt;br /&gt;&lt;br /&gt;在开始前,请找到放置于设备存储中的 <![CDATA[<b> prod.keys </b>]]> 文件。&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">了解更多</a>]]></string>
5 <string name="emulation_notification_channel_name">正在进行模拟</string>
6 <string name="emulation_notification_channel_description">在模拟运行时显示持久通知。</string>
7 <string name="emulation_notification_running">yuzu 正在运行</string>
8 <string name="notice_notification_channel_name">通知及错误提醒</string>
9 <string name="notice_notification_channel_description">当发生错误时显示通知。</string>
10 <string name="notification_permission_not_granted">未授予通知权限!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">欢迎!</string>
14 <string name="welcome_description">了解如何设置 &lt;b>yuzu&lt;/b> 并进行模拟。</string>
15 <string name="get_started">开始</string>
16 <string name="keys">密钥文件</string>
17 <string name="keys_description">使用下方的按钮来选择你的 &lt;b>prod.keys&lt;/b> 文件。</string>
18 <string name="select_keys">选择密钥文件</string>
19 <string name="games">游戏</string>
20 <string name="games_description">使用下方的按钮选择你的 &lt;b>游戏&lt;/b> 文件夹。</string>
21 <string name="done">完成</string>
22 <string name="done_description">你完成了全部设置。\n玩的开心!</string>
23 <string name="text_continue">继续</string>
24 <string name="next">下一步</string>
25 <string name="back">上一步</string>
26 <string name="add_games">添加游戏</string>
27 <string name="add_games_description">选择你的游戏文件夹</string>
28
29 <!-- Home strings -->
30 <string name="home_games">游戏</string>
31 <string name="home_search">搜索</string>
32 <string name="home_settings">设置</string>
33 <string name="empty_gamelist">找不到游戏,或者尚未选择游戏文件夹。</string>
34 <string name="search_and_filter_games">搜索游戏</string>
35 <string name="select_games_folder">选择游戏文件夹</string>
36 <string name="select_games_folder_description">允许 yuzu 填充游戏列表</string>
37 <string name="add_games_warning">跳过选择游戏文件夹?</string>
38 <string name="add_games_warning_description">如果未选择游戏文件夹,游戏将不会显示在游戏列表中。</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">搜索游戏</string>
41 <string name="games_dir_selected">已选择游戏文件夹</string>
42 <string name="install_prod_keys">安装 prod.keys 文件</string>
43 <string name="install_prod_keys_description">需要密钥文件来解密游戏</string>
44 <string name="install_prod_keys_warning">跳过添加密钥文件?</string>
45 <string name="install_prod_keys_warning_description">对于商业游戏,需要有效的密钥文件才能运行。如果没有密钥文件,将只能运行自制软件。</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">通知</string>
48 <string name="notifications_description">使用下方的按钮授予通知权限。</string>
49 <string name="give_permission">授予权限</string>
50 <string name="notification_warning">跳过授予通知权限?</string>
51 <string name="notification_warning_description">yuzu 将无法通知您重要信息。</string>
52 <string name="permission_denied">授权遭拒</string>
53 <string name="permission_denied_description">您曾多次拒绝权限请求,现在您需要在系统设置中手动授予权限。</string>
54 <string name="about">关于</string>
55 <string name="about_description">开发版本、贡献者、以及更多</string>
56 <string name="warning_help">帮助</string>
57 <string name="warning_skip">跳过</string>
58 <string name="warning_cancel">取消</string>
59 <string name="install_amiibo_keys">安装 Amiibo 密钥文件</string>
60 <string name="install_amiibo_keys_description">在遊戏中使用 Amiibo 时必需</string>
61 <string name="invalid_keys_file">选择的密钥文件无效</string>
62 <string name="install_keys_success">密钥文件已成功安装</string>
63 <string name="reading_keys_failure">读取加密密钥时出错</string>
64 <string name="install_keys_failure_extension_description">
65 1. 验证您的密钥文件是否具有 .keys 扩展名。\n\n
66 2. 密钥文件不能放置于 Downloads 文件夹。\n\n
67 解决问题并再试一次。
68 </string>
69 <string name="invalid_keys_error">无效的加密密钥</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">选择的密钥文件不正确或已损坏。请重新转储密钥文件。</string>
72 <string name="install_gpu_driver">安装 GPU 驱动</string>
73 <string name="install_gpu_driver_description">安装替代的驱动程序以获得更好的性能和精度</string>
74 <string name="advanced_settings">高级选项</string>
75 <string name="settings_description">更改模拟器设置</string>
76 <string name="search_recently_played">最近游玩</string>
77 <string name="search_recently_added">最近添加</string>
78 <string name="search_retail">商业游戏</string>
79 <string name="search_homebrew">自制游戏</string>
80 <string name="open_user_folder">打开 yuzu 文件夹</string>
81 <string name="open_user_folder_description">管理 yuzu 内部文件</string>
82 <string name="theme_and_color_description">更改外观</string>
83 <string name="no_file_manager">找不到可用的文件管理器</string>
84 <string name="notification_no_directory_link">无法打开 yuzu 文件夹</string>
85 <string name="notification_no_directory_link_description">请使用文件管理器的侧部面板手动定位用户文件夹。</string>
86 <string name="manage_save_data">管理存档数据</string>
87 <string name="manage_save_data_description">已找到存档数据,请选择下方的选项。</string>
88 <string name="import_export_saves_description">导入或导出存档</string>
89 <string name="import_export_saves_no_profile">找不到存档数据,请启动游戏并重试。</string>
90 <string name="save_file_imported_success">已成功导入存档</string>
91 <string name="save_file_invalid_zip_structure">无效的存档目录</string>
92 <string name="save_file_invalid_zip_structure_description">第一个子文件夹名称必须为当前游戏的 ID。</string>
93 <string name="import_saves">导入</string>
94 <string name="export_saves">导出</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia 不真实</string>
98 <string name="copied_to_clipboard">已复制到剪贴板</string>
99 <string name="about_app_description">一款开放源代码的 Switch 模拟器</string>
100 <string name="contributors">贡献者</string>
101 <string name="contributors_description">使用来自 yuzu 团队的 \u2764 制作</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">构建版本</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">抢先体验</string>
110 <string name="get_early_access">取得抢先体验</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">最新的功能、抢先更新、以及更多</string>
113 <string name="early_access_benefits">抢先体验的权益</string>
114 <string name="cutting_edge_features">最新功能</string>
115 <string name="early_access_updates">抢先更新</string>
116 <string name="no_manual_installation">无需手动安装</string>
117 <string name="prioritized_support">优先支持</string>
118 <string name="helping_game_preservation">帮助保留游戏</string>
119 <string name="our_eternal_gratitude">我们真诚的感激</string>
120 <string name="are_you_interested">您对此感兴趣吗?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">启用运行速度限制</string>
124 <string name="frame_limit_enable_description">启用后,模拟速度将限制在正常运行速度的指定百分比。</string>
125 <string name="frame_limit_slider">限制速度百分比</string>
126 <string name="frame_limit_slider_description">指定限制模拟速度的百分比。预设为 100%,此时模拟速度将被限制为标准速度。更高或更低的值将增加或降低速度限制上限。</string>
127 <string name="cpu_accuracy">CPU 精度</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">主机模式</string>
131 <string name="use_docked_mode_description">以主机模式进行模拟,牺牲性能并提高画面分辨率。</string>
132 <string name="emulated_region">模拟区域</string>
133 <string name="emulated_language">模拟语言</string>
134 <string name="select_rtc_date">选择日期</string>
135 <string name="select_rtc_time">选择时间</string>
136 <string name="use_custom_rtc">启用自定义系统时钟</string>
137 <string name="use_custom_rtc_description">此选项允许您设置与目前系统时间相独立的自定义系统时钟</string>
138 <string name="set_custom_rtc">设置自定义系统时钟</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">精度等级</string>
143 <string name="renderer_resolution">分辨率</string>
144 <string name="renderer_vsync">垂直同步模式</string>
145 <string name="renderer_aspect_ratio">屏幕纵横比</string>
146 <string name="renderer_scaling_filter">窗口滤镜</string>
147 <string name="renderer_anti_aliasing">抗锯齿方式</string>
148 <string name="renderer_force_max_clock">强制最大时钟 (仅限 Adreno)</string>
149 <string name="renderer_force_max_clock_description">强制 GPU 以最大时钟运行 (仍被温控限制)。</string>
150 <string name="renderer_asynchronous_shaders">使用异步着色器</string>
151 <string name="renderer_asynchronous_shaders_description">异步编译着色器,减少卡顿,但可能引入故障。</string>
152 <string name="renderer_debug">启用图形调试</string>
153 <string name="renderer_debug_description">启用时,图形 API 将进入较慢的调试模式。</string>
154 <string name="use_disk_shader_cache">使用磁盘着色器缓存</string>
155 <string name="use_disk_shader_cache_description">将生成的着色器缓存于磁盘中并进行读取以减少卡顿。</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">音量</string>
159 <string name="audio_volume_description">指定输出的音量。</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">系统默认</string>
163 <string name="ini_saved">已保存设置</string>
164 <string name="gameid_saved">已保存 %1$s 的设置</string>
165 <string name="error_saving">保存 %1$s.ini 时出错: %2$s</string>
166 <string name="loading">加载中…</string>
167 <string name="reset_setting_confirmation">您要将此设定重设为默认值吗?</string>
168 <string name="reset_to_default">恢复默认</string>
169 <string name="reset_all_settings">重置所有设置项?</string>
170 <string name="reset_all_settings_description">所有高级选项都将被重设,此动作无法还原。</string>
171 <string name="settings_reset">重设设置项</string>
172 <string name="close">关闭</string>
173 <string name="learn_more">了解更多</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">选择 GPU 驱动程序</string>
177 <string name="select_gpu_driver_title">要取代您当前的 GPU 驱动程序吗?</string>
178 <string name="select_gpu_driver_install">安装</string>
179 <string name="select_gpu_driver_default">系统默认</string>
180 <string name="select_gpu_driver_install_success">已安装 %s</string>
181 <string name="select_gpu_driver_use_default">使用默认 GPU 驱动程序</string>
182 <string name="select_gpu_driver_error">选择的驱动程序无效,将使用系统默认的驱动程序!</string>
183 <string name="system_gpu_driver">系统 GPU 驱动程序</string>
184 <string name="installing_driver">正在安装驱动程序…</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">高级选项</string>
188 <string name="preferences_settings">设置</string>
189 <string name="preferences_general">通用</string>
190 <string name="preferences_system">系统</string>
191 <string name="preferences_graphics">图形</string>
192 <string name="preferences_audio">声音</string>
193 <string name="preferences_theme">主题和色彩</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">您的 ROM 已加密</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[请参考指南重新转储你的<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">游戏卡带</a>或<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">已安装的游戏</a>。]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[请确保 <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> 文件已安装,使得游戏可以被解密。]]></string>
199 <string name="loader_error_video_core">初始化视频核心时发生错误</string>
200 <string name="loader_error_video_core_description">这通常由不兼容的 GPU 驱动程序造成,安装自定义 GPU 驱动程序可能解决此问题。</string>
201 <string name="loader_error_invalid_format">无法载入 ROM</string>
202 <string name="loader_error_file_not_found">ROM 文件不存在</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">退出模拟</string>
206 <string name="emulation_done">完成</string>
207 <string name="emulation_fps_counter">FPS 计数器</string>
208 <string name="emulation_toggle_controls">按键切换</string>
209 <string name="emulation_rel_stick_center">相对摇杆中心</string>
210 <string name="emulation_dpad_slide">十字方向键滑动</string>
211 <string name="emulation_haptics">触觉反馈</string>
212 <string name="emulation_show_overlay">显示虚拟按键</string>
213 <string name="emulation_toggle_all">全部切换</string>
214 <string name="emulation_control_adjust">调整虚拟按键</string>
215 <string name="emulation_control_scale">缩放</string>
216 <string name="emulation_control_opacity">不透明度</string>
217 <string name="emulation_touch_overlay_reset">重设虚拟按键</string>
218 <string name="emulation_touch_overlay_edit">编辑虚拟按键</string>
219 <string name="emulation_pause">暂停模拟</string>
220 <string name="emulation_unpause">继续模拟</string>
221 <string name="emulation_input_overlay">虚拟按键选项</string>
222 <string name="emulation_game_loading">载入游戏中…</string>
223
224 <string name="load_settings">正在载入设定…</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">软件键盘</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">中止</string>
231 <string name="continue_button">继续</string>
232 <string name="system_archive_not_found">未找到系统档案</string>
233 <string name="system_archive_not_found_message">%s 丢失,请转储您的系统档案。\n继续模拟可能造成崩溃和错误。</string>
234 <string name="system_archive_general">系统档案</string>
235 <string name="save_load_error">保存/载入发生错误</string>
236 <string name="fatal_error">致命错误</string>
237 <string name="fatal_error_message">发生致命错误,请查阅日志获取详细信息。\n继续模拟可能会造成崩溃和错误。</string>
238 <string name="performance_warning">关闭此项会显著降低模拟性能!建议您将此项保持为启用状态。</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">自动选择</string>
242 <string name="region_japan">日本</string>
243 <string name="region_usa">美国</string>
244 <string name="region_europe">欧洲</string>
245 <string name="region_australia">澳大利亚</string>
246 <string name="region_china">中国</string>
247 <string name="region_korea">韩国</string>
248 <string name="region_taiwan">中国台湾</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">日语 (日本語)</string>
252 <string name="language_english">英语 (English)</string>
253 <string name="language_french">法语 (Français)</string>
254 <string name="langauge_german">德语 (Deutsch)</string>
255 <string name="language_italian">意大利语 (Italiano)</string>
256 <string name="language_spanish">西班牙语 (Español)</string>
257 <string name="language_chinese">中文 (简体中文)</string>
258 <string name="language_korean">韩语 (한국어)</string>
259 <string name="language_dutch">荷兰语 (Nederlands)</string>
260 <string name="language_portuguese">葡萄牙语 (Português)</string>
261 <string name="language_russian">俄语 (Русский)</string>
262 <string name="language_taiwanese">台湾中文 (台灣)</string>
263 <string name="language_british_english">英式英语</string>
264 <string name="language_canadian_french">加拿大法语 (Français canadien)</string>
265 <string name="language_latin_american_spanish">拉丁美洲西班牙语 (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">简体中文 (简体中文)</string>
267 <string name="language_traditional_chinese">繁体中文 (正體中文)</string>
268 <string name="language_brazilian_portuguese">巴西葡萄牙语 (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulkan</string>
272 <string name="renderer_none">无</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">正常</string>
276 <string name="renderer_accuracy_high">高</string>
277 <string name="renderer_accuracy_extreme">极高 (慢速)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (慢速)</string>
284 <string name="resolution_three">3X (2160p/3240p) (慢速)</string>
285 <string name="resolution_four">4X (2880p/4320p) (慢速)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">即时 (关闭)</string>
289 <string name="renderer_vsync_mailbox">Mailbox</string>
290 <string name="renderer_vsync_fifo">FIFO (开启)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO Relaxed</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">近邻取样</string>
295 <string name="scaling_filter_bilinear">双线性过滤</string>
296 <string name="scaling_filter_bicubic">双三线过滤</string>
297 <string name="scaling_filter_gaussian">高斯模糊</string>
298 <string name="scaling_filter_scale_force">强制缩放</string>
299 <string name="scaling_filter_fsr">AMD FidelityFX™️ 超级分辨率锐画技术</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">无</string>
303 <string name="anti_aliasing_fxaa">快速近似抗锯齿</string>
304 <string name="anti_aliasing_smaa">子像素形态学抗锯齿</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">默认 (16:9)</string>
308 <string name="ratio_force_four_three">强制 4:3</string>
309 <string name="ratio_force_twenty_one_nine">强制 21:9</string>
310 <string name="ratio_force_sixteen_ten">强制 16:10</string>
311 <string name="ratio_stretch">拉伸窗口</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">自动</string>
315 <string name="cpu_accuracy_accurate">高精度</string>
316 <string name="cpu_accuracy_unsafe">低精度</string>
317 <string name="cpu_accuracy_paranoid">偏执模式 (慢速)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">十字方向键</string>
321 <string name="gamepad_left_stick">左摇杆</string>
322 <string name="gamepad_right_stick">右摇杆</string>
323 <string name="gamepad_home">Home</string>
324 <string name="gamepad_screenshot">截图</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">正在准备着色器</string>
328 <string name="building_shaders">正在编译着色器</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">切换主题</string>
332 <string name="theme_default">系统默认</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">主题模式</string>
337 <string name="theme_mode_follow_system">跟随系统</string>
338 <string name="theme_mode_light">浅色</string>
339 <string name="theme_mode_dark">深色</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">使用黑色背景</string>
343 <string name="use_black_backgrounds_description">使用深色主题时,套用黑色背景。</string>
344
345</resources>
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 100644
index 000000000..85798cc6a
--- /dev/null
+++ b/src/android/app/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,345 @@
1<?xml version="1.0" encoding="utf-8"?>
2<resources>
3
4 <string name="app_disclaimer">此軟體可以執行 Nintendo Switch 主機遊戲,但不包含任何遊戲和金鑰。&lt;br /&gt;&lt;br /&gt;在您開始前,請找到放置於您的裝置儲存空間的 <![CDATA[<b> prod.keys </b>]]> 檔案。&lt;br /&gt;&lt;br /&gt;<![CDATA[<a href=\"https://yuzu-emu.org/help/quickstart\">深入瞭解</a>]]></string>
5 <string name="emulation_notification_channel_name">模擬進行中</string>
6 <string name="emulation_notification_channel_description">在模擬執行時顯示持續通知。</string>
7 <string name="emulation_notification_running">yuzu 正在執行</string>
8 <string name="notice_notification_channel_name">通知和錯誤</string>
9 <string name="notice_notification_channel_description">發生錯誤時顯示通知。</string>
10 <string name="notification_permission_not_granted">未授予通知權限!</string>
11
12 <!-- Setup strings -->
13 <string name="welcome">歡迎!</string>
14 <string name="welcome_description">瞭解如何設定 &lt;b>yuzu&lt;/b> 並進入模擬。</string>
15 <string name="get_started">開始使用</string>
16 <string name="keys">金鑰</string>
17 <string name="keys_description">使用下方的按鈕選取您的 &lt;b>prod.keys&lt;/b> 檔案。</string>
18 <string name="select_keys">選取金鑰</string>
19 <string name="games">遊戲</string>
20 <string name="games_description">使用下方的按鈕選取您的&lt;b>遊戲&lt;/b>資料夾。</string>
21 <string name="done">完成</string>
22 <string name="done_description">您已準備就緒。\n盡情遊玩您的遊戲!</string>
23 <string name="text_continue">繼續</string>
24 <string name="next">下一步</string>
25 <string name="back">上一步</string>
26 <string name="add_games">新增遊戲</string>
27 <string name="add_games_description">選取您的遊戲資料夾</string>
28
29 <!-- Home strings -->
30 <string name="home_games">遊戲</string>
31 <string name="home_search">搜尋</string>
32 <string name="home_settings">設定</string>
33 <string name="empty_gamelist">找不到檔案,或者尚未選取遊戲目錄。</string>
34 <string name="search_and_filter_games">搜尋並篩選遊戲</string>
35 <string name="select_games_folder">選取遊戲資料夾</string>
36 <string name="select_games_folder_description">一律允許 yuzu 填入遊戲清單</string>
37 <string name="add_games_warning">跳過選取遊戲資料夾?</string>
38 <string name="add_games_warning_description">如果資料夾未選取,遊戲將不會顯示在遊戲清單。</string>
39 <string name="add_games_warning_help">https://yuzu-emu.org/help/quickstart/#dumping-games</string>
40 <string name="home_search_games">搜尋遊戲</string>
41 <string name="games_dir_selected">遊戲目錄已選取</string>
42 <string name="install_prod_keys">安裝 prod.keys</string>
43 <string name="install_prod_keys_description">需要解密零售遊戲</string>
44 <string name="install_prod_keys_warning">跳過新增金鑰?</string>
45 <string name="install_prod_keys_warning_description">模擬零售遊戲需要有效的金鑰,若要繼續,將僅有自製遊戲應用程式可以運作。</string>
46 <string name="install_prod_keys_warning_help">https://yuzu-emu.org/help/quickstart/#guide-introduction</string>
47 <string name="notifications">通知</string>
48 <string name="notifications_description">使用下方的按鈕授予通知權限。</string>
49 <string name="give_permission">授予權限</string>
50 <string name="notification_warning">跳過授予通知權限?</string>
51 <string name="notification_warning_description">yuzu 將無法通知您重要資訊。</string>
52 <string name="permission_denied">權限遭拒</string>
53 <string name="permission_denied_description">您曾多次拒絕了權限要求,現在您需要在系統設定中手動授予權限。</string>
54 <string name="about">關於</string>
55 <string name="about_description">組建版本、製作群、以及更多</string>
56 <string name="warning_help">說明</string>
57 <string name="warning_skip">跳過</string>
58 <string name="warning_cancel">取消</string>
59 <string name="install_amiibo_keys">安裝 Amiibo 金鑰</string>
60 <string name="install_amiibo_keys_description">需要在遊戲中使用 Amiibo</string>
61 <string name="invalid_keys_file">無效的金鑰檔案已選取</string>
62 <string name="install_keys_success">金鑰已成功安裝</string>
63 <string name="reading_keys_failure">讀取加密金鑰時出現錯誤</string>
64 <string name="install_keys_failure_extension_description">
65 1. 驗證您的金鑰是否具有 .keys 副檔名。\n\n
66 2. 金鑰不能儲存於 Downloads 資料夾。\n\n
67 解決問題並再試一次。
68 </string>
69 <string name="invalid_keys_error">無效的加密金鑰</string>
70 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
71 <string name="install_keys_failure_description">選取的檔案不正確或已損毀,請重新傾印您的金鑰。</string>
72 <string name="install_gpu_driver">安裝 GPU 驅動程式</string>
73 <string name="install_gpu_driver_description">安裝替代驅動程式以取得潛在的更佳效能或準確度</string>
74 <string name="advanced_settings">進階設定</string>
75 <string name="settings_description">進行模擬器設定</string>
76 <string name="search_recently_played">最近遊玩</string>
77 <string name="search_recently_added">最近新增</string>
78 <string name="search_retail">零售</string>
79 <string name="search_homebrew">自製遊戲</string>
80 <string name="open_user_folder">開啟 yuzu 資料夾</string>
81 <string name="open_user_folder_description">管理 yuzu 的內部檔案</string>
82 <string name="theme_and_color_description">修改應用程式外觀</string>
83 <string name="no_file_manager">找不到檔案管理員</string>
84 <string name="notification_no_directory_link">無法開啟 yuzu 目錄</string>
85 <string name="notification_no_directory_link_description">請使用檔案管理員的側邊面板手動定位到使用者資料夾。</string>
86 <string name="manage_save_data">管理儲存資料</string>
87 <string name="manage_save_data_description">已找到儲存資料,請選取下方的選項。</string>
88 <string name="import_export_saves_description">匯入或匯出儲存檔案</string>
89 <string name="import_export_saves_no_profile">找不到儲存資料,請啟動遊戲並重試。</string>
90 <string name="save_file_imported_success">已成功匯入</string>
91 <string name="save_file_invalid_zip_structure">無效的儲存目錄結構</string>
92 <string name="save_file_invalid_zip_structure_description">首個子資料夾名稱必須為遊戲標題 ID。</string>
93 <string name="import_saves">匯入</string>
94 <string name="export_saves">匯出</string>
95
96 <!-- About screen strings -->
97 <string name="gaia_is_not_real">Gaia 不真實</string>
98 <string name="copied_to_clipboard">已複製到剪貼簿</string>
99 <string name="about_app_description">一個開放原始碼的 Switch 模擬器</string>
100 <string name="contributors">參與者</string>
101 <string name="contributors_description">使用來自 yuzu 團隊的 \u2764 製作</string>
102 <string name="contributors_link">https://github.com/yuzu-emu/yuzu/graphs/contributors</string>
103 <string name="build">組建</string>
104 <string name="support_link">https://discord.gg/u77vRWY</string>
105 <string name="website_link">https://yuzu-emu.org/</string>
106 <string name="github_link">https://github.com/yuzu-emu</string>
107
108 <!-- Early access upgrade strings -->
109 <string name="early_access">搶先體驗</string>
110 <string name="get_early_access">搶先體驗新功能</string>
111 <string name="play_store_link">https://play.google.com/store/apps/details?id=org.yuzu.yuzu_emu.ea</string>
112 <string name="get_early_access_description">最新的功能、搶先版更新、以及更多</string>
113 <string name="early_access_benefits">搶先體驗權益</string>
114 <string name="cutting_edge_features">最新功能</string>
115 <string name="early_access_updates">搶先版更新</string>
116 <string name="no_manual_installation">無需手動安裝</string>
117 <string name="prioritized_support">優先支援</string>
118 <string name="helping_game_preservation">協助遊戲保留</string>
119 <string name="our_eternal_gratitude">我們永遠的感激</string>
120 <string name="are_you_interested">您仍感興趣嗎?</string>
121
122 <!-- General settings strings -->
123 <string name="frame_limit_enable">啟用限制速度</string>
124 <string name="frame_limit_enable_description">若啟用,模擬速度將會限制在標準速度的指定百分比。</string>
125 <string name="frame_limit_slider">限制速度百分比</string>
126 <string name="frame_limit_slider_description">指定限制模擬速度的百分比。預設為 100%,模擬速度將被限制為標準速度。更高或更低的值將會增加或減少速度限制。</string>
127 <string name="cpu_accuracy">CPU 準確度</string>
128
129 <!-- System settings strings -->
130 <string name="use_docked_mode">底座模式</string>
131 <string name="use_docked_mode_description">以底座模式模擬,以犧牲效能的代價提高解析度。</string>
132 <string name="emulated_region">模擬區域</string>
133 <string name="emulated_language">模擬語言</string>
134 <string name="select_rtc_date">選取 RTC 日期</string>
135 <string name="select_rtc_time">選取 RTC 時間</string>
136 <string name="use_custom_rtc">啟用自訂 RTC</string>
137 <string name="use_custom_rtc_description">此設定允許您設定與您的目前系統時間相互獨立的自訂即時時鐘</string>
138 <string name="set_custom_rtc">設定自訂 RTC</string>
139
140 <!-- Graphics settings strings -->
141 <string name="renderer_api">API</string>
142 <string name="renderer_accuracy">準確度層級</string>
143 <string name="renderer_resolution">解析度</string>
144 <string name="renderer_vsync">VSync 模式</string>
145 <string name="renderer_aspect_ratio">長寬比</string>
146 <string name="renderer_scaling_filter">視窗適應過濾器</string>
147 <string name="renderer_anti_aliasing">消除鋸齒方法</string>
148 <string name="renderer_force_max_clock">強制最大時脈 (僅 Adreno)</string>
149 <string name="renderer_force_max_clock_description">強制 GPU 以最大可能時脈執行 (熱溫限制仍被套用)。</string>
150 <string name="renderer_asynchronous_shaders">使用非同步著色器</string>
151 <string name="renderer_asynchronous_shaders_description">非同步編譯著色器,將會減少間斷,但可能會引入故障。</string>
152 <string name="renderer_debug">啟用圖形偵錯</string>
153 <string name="renderer_debug_description">核取時,圖形 API 將會進入慢速偵錯模式。</string>
154 <string name="use_disk_shader_cache">使用磁碟著色器快取</string>
155 <string name="use_disk_shader_cache_description">透過將產生的著色器儲存並載入至磁碟,減少中斷。</string>
156
157 <!-- Audio settings strings -->
158 <string name="audio_volume">音量</string>
159 <string name="audio_volume_description">指定音訊輸出音量。</string>
160
161 <!-- Miscellaneous -->
162 <string name="slider_default">預設</string>
163 <string name="ini_saved">已儲存設定</string>
164 <string name="gameid_saved">已儲存 %1$s 設定</string>
165 <string name="error_saving">儲存 %1$s 時發生錯誤 ini: %2$s</string>
166 <string name="loading">正在載入…</string>
167 <string name="reset_setting_confirmation">要將此設定重設回預設值嗎?</string>
168 <string name="reset_to_default">重設為預設值</string>
169 <string name="reset_all_settings">重設所有設定?</string>
170 <string name="reset_all_settings_description">所有進階設定將被重設為預設組態,此動作無法復原。</string>
171 <string name="settings_reset">設定已重設</string>
172 <string name="close">關閉</string>
173 <string name="learn_more">深入瞭解</string>
174
175 <!-- GPU driver installation -->
176 <string name="select_gpu_driver">選取 GPU 驅動程式</string>
177 <string name="select_gpu_driver_title">要取代您目前的 GPU 驅動程式嗎?</string>
178 <string name="select_gpu_driver_install">安裝</string>
179 <string name="select_gpu_driver_default">預設</string>
180 <string name="select_gpu_driver_install_success">已安裝 %s</string>
181 <string name="select_gpu_driver_use_default">使用預設 GPU 驅動程式</string>
182 <string name="select_gpu_driver_error">選取的驅動程式無效,將使用系統預設驅動程式!</string>
183 <string name="system_gpu_driver">系統 GPU 驅動程式</string>
184 <string name="installing_driver">正在安裝驅動程式…</string>
185
186 <!-- Preferences Screen -->
187 <string name="preferences_advanced_settings">進階設定</string>
188 <string name="preferences_settings">設定</string>
189 <string name="preferences_general">一般</string>
190 <string name="preferences_system">系統</string>
191 <string name="preferences_graphics">圖形</string>
192 <string name="preferences_audio">音訊</string>
193 <string name="preferences_theme">主題和色彩</string>
194
195 <!-- ROM loading errors -->
196 <string name="loader_error_encrypted">您的 ROM 已加密</string>
197 <string name="loader_error_encrypted_roms_description"><![CDATA[請依循指南重新傾印您的<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-cartridge-games\">遊戲卡匣</a>或<a href=\"https://yuzu-emu.org/help/quickstart/#dumping-installed-titles-eshop\">安裝標題</a>。]]></string>
198 <string name="loader_error_encrypted_keys_description"><![CDATA[請確保您的 <a href=\"https://yuzu-emu.org/help/quickstart/#dumping-prodkeys-and-titlekeys\">prod.keys</a> 檔案已安裝,讓遊戲可以解密。]]></string>
199 <string name="loader_error_video_core">初始化視訊核心時發生錯誤</string>
200 <string name="loader_error_video_core_description">這經常由不相容的 GPU 驅動程式造成,安裝自訂 GPU 驅動程式可能會解決此問題。</string>
201 <string name="loader_error_invalid_format">無法載入 ROM</string>
202 <string name="loader_error_file_not_found">ROM 檔案不存在</string>
203
204 <!-- Emulation Menu -->
205 <string name="emulation_exit">結束模擬</string>
206 <string name="emulation_done">完成</string>
207 <string name="emulation_fps_counter">FPS 計數器</string>
208 <string name="emulation_toggle_controls">切換控制</string>
209 <string name="emulation_rel_stick_center">相對搖桿中心</string>
210 <string name="emulation_dpad_slide">方向鍵滑動</string>
211 <string name="emulation_haptics">觸覺回饋技術</string>
212 <string name="emulation_show_overlay">顯示覆疊</string>
213 <string name="emulation_toggle_all">全部切換</string>
214 <string name="emulation_control_adjust">調整覆疊</string>
215 <string name="emulation_control_scale">縮放</string>
216 <string name="emulation_control_opacity">不透明度</string>
217 <string name="emulation_touch_overlay_reset">重設覆疊</string>
218 <string name="emulation_touch_overlay_edit">編輯覆疊</string>
219 <string name="emulation_pause">暫停模擬</string>
220 <string name="emulation_unpause">取消暫停模擬</string>
221 <string name="emulation_input_overlay">覆疊選項</string>
222 <string name="emulation_game_loading">遊戲正在載入…</string>
223
224 <string name="load_settings">正在載入設定…</string>
225
226 <!-- Software keyboard -->
227 <string name="software_keyboard">軟體鍵盤</string>
228
229 <!-- Errors and warnings -->
230 <string name="abort_button">中止</string>
231 <string name="continue_button">繼續</string>
232 <string name="system_archive_not_found">找不到系統檔案</string>
233 <string name="system_archive_not_found_message">%s 遺失,請傾印您的系統封存。\n繼續模擬可能會造成當機和錯誤。</string>
234 <string name="system_archive_general">系統封存</string>
235 <string name="save_load_error">儲存/載入發生錯誤</string>
236 <string name="fatal_error">嚴重錯誤</string>
237 <string name="fatal_error_message">發生嚴重錯誤,檢查記錄以取得詳細資訊。\n繼續模擬可能會造成當機和錯誤。</string>
238 <string name="performance_warning">關閉此設定會顯著降低模擬效能!如需最佳體驗,建議您將此設定保持為啟用狀態。</string>
239
240 <!-- Region Names -->
241 <string name="region_auto">自動選取</string>
242 <string name="region_japan">日本</string>
243 <string name="region_usa">美國</string>
244 <string name="region_europe">歐洲</string>
245 <string name="region_australia">澳洲</string>
246 <string name="region_china">中國</string>
247 <string name="region_korea">南韓</string>
248 <string name="region_taiwan">台灣</string>
249
250 <!-- Language Names -->
251 <string name="language_japanese">日文 (日本語)</string>
252 <string name="language_english">英文</string>
253 <string name="language_french">法文 (Français)</string>
254 <string name="langauge_german">德文 (Deutsch)</string>
255 <string name="language_italian">義大利文 (Italiano)</string>
256 <string name="language_spanish">西班牙文 (Español)</string>
257 <string name="language_chinese">中文 (简体中文)</string>
258 <string name="language_korean">韓文 (한국어)</string>
259 <string name="language_dutch">荷蘭文 (Nederlands)</string>
260 <string name="language_portuguese">葡萄牙文 (Português)</string>
261 <string name="language_russian">俄文 (Русский)</string>
262 <string name="language_taiwanese">台文 (台灣)</string>
263 <string name="language_british_english">英式英文</string>
264 <string name="language_canadian_french">加拿大法文 (Français canadien)</string>
265 <string name="language_latin_american_spanish">拉丁美洲西班牙文 (Español latinoamericano)</string>
266 <string name="language_simplified_chinese">簡體中文 (简体中文)</string>
267 <string name="language_traditional_chinese">正體中文 (正體中文)</string>
268 <string name="language_brazilian_portuguese">巴西葡萄牙文 (Português do Brasil)</string>
269
270 <!-- Renderer APIs -->
271 <string name="renderer_vulkan">Vulkan</string>
272 <string name="renderer_none">無</string>
273
274 <!-- Renderer Accuracy -->
275 <string name="renderer_accuracy_normal">標準</string>
276 <string name="renderer_accuracy_high">高</string>
277 <string name="renderer_accuracy_extreme">極高 (慢)</string>
278
279 <!-- Resolutions -->
280 <string name="resolution_half">0.5X (360p/540p)</string>
281 <string name="resolution_three_quarter">0.75X (540p/810p)</string>
282 <string name="resolution_one">1X (720p/1080p)</string>
283 <string name="resolution_two">2X (1440p/2160p) (慢)</string>
284 <string name="resolution_three">3X (2160p/3240p) (慢)</string>
285 <string name="resolution_four">4X (2880p/4320p) (慢)</string>
286
287 <!-- Renderer VSync -->
288 <string name="renderer_vsync_immediate">即時 (關閉)</string>
289 <string name="renderer_vsync_mailbox">信箱</string>
290 <string name="renderer_vsync_fifo">FIFO (開啟)</string>
291 <string name="renderer_vsync_fifo_relaxed">FIFO 寬鬆</string>
292
293 <!-- Scaling Filters -->
294 <string name="scaling_filter_nearest_neighbor">最近鄰</string>
295 <string name="scaling_filter_bilinear">雙線性</string>
296 <string name="scaling_filter_bicubic">雙立方</string>
297 <string name="scaling_filter_gaussian">高斯</string>
298 <string name="scaling_filter_scale_force">強制縮放</string>
299 <string name="scaling_filter_fsr">AMD Radeon™ 超級解析度</string>
300
301 <!-- Anti-Aliasing -->
302 <string name="anti_aliasing_none">無</string>
303 <string name="anti_aliasing_fxaa">FXAA</string>
304 <string name="anti_aliasing_smaa">SMAA</string>
305
306 <!-- Aspect Ratios -->
307 <string name="ratio_default">預設 (16:9)</string>
308 <string name="ratio_force_four_three">強制 4:3</string>
309 <string name="ratio_force_twenty_one_nine">強制 21:9</string>
310 <string name="ratio_force_sixteen_ten">強制 16:10</string>
311 <string name="ratio_stretch">延伸視窗</string>
312
313 <!-- CPU Accuracy -->
314 <string name="cpu_accuracy_auto">自動</string>
315 <string name="cpu_accuracy_accurate">高精度</string>
316 <string name="cpu_accuracy_unsafe">低精度</string>
317 <string name="cpu_accuracy_paranoid">不合理 (慢)</string>
318
319 <!-- Gamepad Buttons -->
320 <string name="gamepad_d_pad">方向鍵</string>
321 <string name="gamepad_left_stick">左搖桿</string>
322 <string name="gamepad_right_stick">右搖桿</string>
323 <string name="gamepad_home">HOME</string>
324 <string name="gamepad_screenshot">螢幕截圖</string>
325
326 <!-- Disk shader cache -->
327 <string name="preparing_shaders">正在準備著色器</string>
328 <string name="building_shaders">正在建置著色器</string>
329
330 <!-- Theme options -->
331 <string name="change_app_theme">變更應用程式主題</string>
332 <string name="theme_default">預設</string>
333 <string name="theme_material_you">Material You</string>
334
335 <!-- Theme Modes -->
336 <string name="change_theme_mode">變更主題模式</string>
337 <string name="theme_mode_follow_system">跟隨系統</string>
338 <string name="theme_mode_light">淺色</string>
339 <string name="theme_mode_dark">深色</string>
340
341 <!-- Black backgrounds theme -->
342 <string name="use_black_backgrounds">使用黑色背景</string>
343 <string name="use_black_backgrounds_description">使用深色主題時,套用黑色背景。</string>
344
345</resources>
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 0ae69afb4..7dae63dcb 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -65,11 +65,8 @@
65 <string name="invalid_keys_file">Invalid keys file selected</string> 65 <string name="invalid_keys_file">Invalid keys file selected</string>
66 <string name="install_keys_success">Keys successfully installed</string> 66 <string name="install_keys_success">Keys successfully installed</string>
67 <string name="reading_keys_failure">Error reading encryption keys</string> 67 <string name="reading_keys_failure">Error reading encryption keys</string>
68 <string name="install_keys_failure_extension_description"> 68 <string name="install_prod_keys_failure_extension_description">Verify your keys file has a .keys extension and try again.</string>
69 1. Verify your keys have the .keys extension.\n\n 69 <string name="install_amiibo_keys_failure_extension_description">Verify your keys file has a .bin extension and try again.</string>
70 2. Keys must not be stored in the Downloads folder.\n\n
71 Resolve the issue(s) and try again.
72 </string>
73 <string name="invalid_keys_error">Invalid encryption keys</string> 70 <string name="invalid_keys_error">Invalid encryption keys</string>
74 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string> 71 <string name="dumping_keys_quickstart_link">https://yuzu-emu.org/help/quickstart/#dumping-decryption-keys</string>
75 <string name="install_keys_failure_description">The selected file is incorrect or corrupt. Please redump your keys.</string> 72 <string name="install_keys_failure_description">The selected file is incorrect or corrupt. Please redump your keys.</string>
@@ -105,6 +102,15 @@
105 <string name="share_log">Share debug logs</string> 102 <string name="share_log">Share debug logs</string>
106 <string name="share_log_description">Share yuzu\'s log file to debug issues</string> 103 <string name="share_log_description">Share yuzu\'s log file to debug issues</string>
107 <string name="share_log_missing">No log file found</string> 104 <string name="share_log_missing">No log file found</string>
105 <string name="install_game_content">Install game content</string>
106 <string name="install_game_content_description">Install game updates or DLC</string>
107 <string name="install_game_content_failure">Error installing file to NAND</string>
108 <string name="install_game_content_failure_description">Game content installation failed. Please ensure content is valid and that the prod.keys file is installed.</string>
109 <string name="install_game_content_failure_base">Installation of base games isn\'t permitted in order to avoid possible conflicts. Please select an update or DLC instead.</string>
110 <string name="install_game_content_failure_file_extension">The selected file type is not supported. Only NSP and XCI content is supported for this action. Please verify the game content is valid.</string>
111 <string name="install_game_content_success">Game content installed successfully</string>
112 <string name="install_game_content_success_overwrite">Game content was overwritten successfully</string>
113 <string name="install_game_content_help_link">https://yuzu-emu.org/help/quickstart/#dumping-installed-updates</string>
108 114
109 <!-- About screen strings --> 115 <!-- About screen strings -->
110 <string name="gaia_is_not_real">Gaia isn\'t real</string> 116 <string name="gaia_is_not_real">Gaia isn\'t real</string>
diff --git a/src/audio_core/audio_core.cpp b/src/audio_core/audio_core.cpp
index 07a679c32..703ef4494 100644
--- a/src/audio_core/audio_core.cpp
+++ b/src/audio_core/audio_core.cpp
@@ -47,12 +47,4 @@ AudioRenderer::ADSP::ADSP& AudioCore::GetADSP() {
47 return *adsp; 47 return *adsp;
48} 48}
49 49
50void AudioCore::SetNVDECActive(bool active) {
51 nvdec_active = active;
52}
53
54bool AudioCore::IsNVDECActive() const {
55 return nvdec_active;
56}
57
58} // namespace AudioCore 50} // namespace AudioCore
diff --git a/src/audio_core/audio_core.h b/src/audio_core/audio_core.h
index e33e00a3e..ea047773e 100644
--- a/src/audio_core/audio_core.h
+++ b/src/audio_core/audio_core.h
@@ -57,18 +57,6 @@ public:
57 */ 57 */
58 AudioRenderer::ADSP::ADSP& GetADSP(); 58 AudioRenderer::ADSP::ADSP& GetADSP();
59 59
60 /**
61 * Toggle NVDEC state, used to avoid stall in playback.
62 *
63 * @param active - Set true if nvdec is active, otherwise false.
64 */
65 void SetNVDECActive(bool active);
66
67 /**
68 * Get NVDEC state.
69 */
70 bool IsNVDECActive() const;
71
72private: 60private:
73 /** 61 /**
74 * Create the sinks on startup. 62 * Create the sinks on startup.
@@ -83,8 +71,6 @@ private:
83 std::unique_ptr<Sink::Sink> input_sink; 71 std::unique_ptr<Sink::Sink> input_sink;
84 /// The ADSP in the sysmodule 72 /// The ADSP in the sysmodule
85 std::unique_ptr<AudioRenderer::ADSP::ADSP> adsp; 73 std::unique_ptr<AudioRenderer::ADSP::ADSP> adsp;
86 /// Is NVDec currently active?
87 bool nvdec_active{false};
88}; 74};
89 75
90} // namespace AudioCore 76} // namespace AudioCore
diff --git a/src/common/fs/fs_paths.h b/src/common/fs/fs_paths.h
index c77c112f1..61bac9eba 100644
--- a/src/common/fs/fs_paths.h
+++ b/src/common/fs/fs_paths.h
@@ -10,6 +10,7 @@
10 10
11// Sub-directories contained within a yuzu data directory 11// Sub-directories contained within a yuzu data directory
12 12
13#define AMIIBO_DIR "amiibo"
13#define CACHE_DIR "cache" 14#define CACHE_DIR "cache"
14#define CONFIG_DIR "config" 15#define CONFIG_DIR "config"
15#define DUMP_DIR "dump" 16#define DUMP_DIR "dump"
diff --git a/src/common/fs/path_util.cpp b/src/common/fs/path_util.cpp
index e026a13d9..d71cfacc6 100644
--- a/src/common/fs/path_util.cpp
+++ b/src/common/fs/path_util.cpp
@@ -114,6 +114,7 @@ public:
114#endif 114#endif
115 115
116 GenerateYuzuPath(YuzuPath::YuzuDir, yuzu_path); 116 GenerateYuzuPath(YuzuPath::YuzuDir, yuzu_path);
117 GenerateYuzuPath(YuzuPath::AmiiboDir, yuzu_path / AMIIBO_DIR);
117 GenerateYuzuPath(YuzuPath::CacheDir, yuzu_path_cache); 118 GenerateYuzuPath(YuzuPath::CacheDir, yuzu_path_cache);
118 GenerateYuzuPath(YuzuPath::ConfigDir, yuzu_path_config); 119 GenerateYuzuPath(YuzuPath::ConfigDir, yuzu_path_config);
119 GenerateYuzuPath(YuzuPath::DumpDir, yuzu_path / DUMP_DIR); 120 GenerateYuzuPath(YuzuPath::DumpDir, yuzu_path / DUMP_DIR);
diff --git a/src/common/fs/path_util.h b/src/common/fs/path_util.h
index 7cfe85b70..ba28964d0 100644
--- a/src/common/fs/path_util.h
+++ b/src/common/fs/path_util.h
@@ -12,6 +12,7 @@ namespace Common::FS {
12 12
13enum class YuzuPath { 13enum class YuzuPath {
14 YuzuDir, // Where yuzu stores its data. 14 YuzuDir, // Where yuzu stores its data.
15 AmiiboDir, // Where Amiibo backups are stored.
15 CacheDir, // Where cached filesystem data is stored. 16 CacheDir, // Where cached filesystem data is stored.
16 ConfigDir, // Where config files are stored. 17 ConfigDir, // Where config files are stored.
17 DumpDir, // Where dumped data is stored. 18 DumpDir, // Where dumped data is stored.
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index ff53e80bb..9ff3edabb 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -235,6 +235,7 @@ void RestoreGlobalState(bool is_powered_on) {
235 values.bg_green.SetGlobal(true); 235 values.bg_green.SetGlobal(true);
236 values.bg_blue.SetGlobal(true); 236 values.bg_blue.SetGlobal(true);
237 values.enable_compute_pipelines.SetGlobal(true); 237 values.enable_compute_pipelines.SetGlobal(true);
238 values.use_video_framerate.SetGlobal(true);
238 239
239 // System 240 // System
240 values.language_index.SetGlobal(true); 241 values.language_index.SetGlobal(true);
diff --git a/src/common/settings.h b/src/common/settings.h
index 7f865b2a7..9682281b0 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -482,6 +482,7 @@ struct Values {
482 SwitchableSetting<AstcRecompression, true> astc_recompression{ 482 SwitchableSetting<AstcRecompression, true> astc_recompression{
483 AstcRecompression::Uncompressed, AstcRecompression::Uncompressed, AstcRecompression::Bc3, 483 AstcRecompression::Uncompressed, AstcRecompression::Uncompressed, AstcRecompression::Bc3,
484 "astc_recompression"}; 484 "astc_recompression"};
485 SwitchableSetting<bool> use_video_framerate{false, "use_video_framerate"};
485 486
486 SwitchableSetting<u8> bg_red{0, "bg_red"}; 487 SwitchableSetting<u8> bg_red{0, "bg_red"};
487 SwitchableSetting<u8> bg_green{0, "bg_green"}; 488 SwitchableSetting<u8> bg_green{0, "bg_green"};
diff --git a/src/common/uuid.cpp b/src/common/uuid.cpp
index 89e1ed225..035df7fe0 100644
--- a/src/common/uuid.cpp
+++ b/src/common/uuid.cpp
@@ -48,7 +48,7 @@ std::array<u8, 0x10> ConstructFromRawString(std::string_view raw_string) {
48} 48}
49 49
50std::array<u8, 0x10> ConstructFromFormattedString(std::string_view formatted_string) { 50std::array<u8, 0x10> ConstructFromFormattedString(std::string_view formatted_string) {
51 std::array<u8, 0x10> uuid; 51 std::array<u8, 0x10> uuid{};
52 52
53 size_t i = 0; 53 size_t i = 0;
54 54
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 4406ae30e..7ba704f18 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -216,6 +216,14 @@ struct System::Impl {
216 } 216 }
217 } 217 }
218 218
219 void SetNVDECActive(bool is_nvdec_active) {
220 nvdec_active = is_nvdec_active;
221 }
222
223 bool GetNVDECActive() {
224 return nvdec_active;
225 }
226
219 void InitializeDebugger(System& system, u16 port) { 227 void InitializeDebugger(System& system, u16 port) {
220 debugger = std::make_unique<Debugger>(system, port); 228 debugger = std::make_unique<Debugger>(system, port);
221 } 229 }
@@ -485,6 +493,8 @@ struct System::Impl {
485 std::atomic_bool is_powered_on{}; 493 std::atomic_bool is_powered_on{};
486 bool exit_lock = false; 494 bool exit_lock = false;
487 495
496 bool nvdec_active{};
497
488 Reporter reporter; 498 Reporter reporter;
489 std::unique_ptr<Memory::CheatEngine> cheat_engine; 499 std::unique_ptr<Memory::CheatEngine> cheat_engine;
490 std::unique_ptr<Tools::Freezer> memory_freezer; 500 std::unique_ptr<Tools::Freezer> memory_freezer;
@@ -594,6 +604,14 @@ void System::UnstallApplication() {
594 impl->UnstallApplication(); 604 impl->UnstallApplication();
595} 605}
596 606
607void System::SetNVDECActive(bool is_nvdec_active) {
608 impl->SetNVDECActive(is_nvdec_active);
609}
610
611bool System::GetNVDECActive() {
612 return impl->GetNVDECActive();
613}
614
597void System::InitializeDebugger() { 615void System::InitializeDebugger() {
598 impl->InitializeDebugger(*this, Settings::values.gdbstub_port.GetValue()); 616 impl->InitializeDebugger(*this, Settings::values.gdbstub_port.GetValue());
599} 617}
diff --git a/src/core/core.h b/src/core/core.h
index 4f153154f..ff2e4bd30 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -189,6 +189,9 @@ public:
189 std::unique_lock<std::mutex> StallApplication(); 189 std::unique_lock<std::mutex> StallApplication();
190 void UnstallApplication(); 190 void UnstallApplication();
191 191
192 void SetNVDECActive(bool is_nvdec_active);
193 [[nodiscard]] bool GetNVDECActive();
194
192 /** 195 /**
193 * Initialize the debugger. 196 * Initialize the debugger.
194 */ 197 */
diff --git a/src/core/file_sys/submission_package.h b/src/core/file_sys/submission_package.h
index 3226b884a..27f97c725 100644
--- a/src/core/file_sys/submission_package.h
+++ b/src/core/file_sys/submission_package.h
@@ -8,6 +8,7 @@
8#include <set> 8#include <set>
9#include <vector> 9#include <vector>
10#include "common/common_types.h" 10#include "common/common_types.h"
11#include "core/file_sys/nca_metadata.h"
11#include "core/file_sys/vfs.h" 12#include "core/file_sys/vfs.h"
12 13
13namespace Core::Crypto { 14namespace Core::Crypto {
diff --git a/src/core/hle/service/nfc/common/device.cpp b/src/core/hle/service/nfc/common/device.cpp
index 0bd7900e1..b14f682b5 100644
--- a/src/core/hle/service/nfc/common/device.cpp
+++ b/src/core/hle/service/nfc/common/device.cpp
@@ -12,6 +12,11 @@
12#pragma warning(pop) 12#pragma warning(pop)
13#endif 13#endif
14 14
15#include <fmt/format.h>
16
17#include "common/fs/file.h"
18#include "common/fs/fs.h"
19#include "common/fs/path_util.h"
15#include "common/input.h" 20#include "common/input.h"
16#include "common/logging/log.h" 21#include "common/logging/log.h"
17#include "common/string_util.h" 22#include "common/string_util.h"
@@ -136,7 +141,7 @@ bool NfcDevice::LoadNfcTag(std::span<const u8> data) {
136 if (!NFP::AmiiboCrypto::IsKeyAvailable()) { 141 if (!NFP::AmiiboCrypto::IsKeyAvailable()) {
137 LOG_INFO(Service_NFC, "Loading amiibo without keys"); 142 LOG_INFO(Service_NFC, "Loading amiibo without keys");
138 memcpy(&encrypted_tag_data, data.data(), sizeof(NFP::EncryptedNTAG215File)); 143 memcpy(&encrypted_tag_data, data.data(), sizeof(NFP::EncryptedNTAG215File));
139 BuildAmiiboWithoutKeys(); 144 BuildAmiiboWithoutKeys(tag_data, encrypted_tag_data);
140 is_plain_amiibo = true; 145 is_plain_amiibo = true;
141 is_write_protected = true; 146 is_write_protected = true;
142 return true; 147 return true;
@@ -366,16 +371,25 @@ Result NfcDevice::Mount(NFP::ModelType model_type, NFP::MountTarget mount_target
366 371
367 // The loaded amiibo is not encrypted 372 // The loaded amiibo is not encrypted
368 if (is_plain_amiibo) { 373 if (is_plain_amiibo) {
374 std::vector<u8> data(sizeof(NFP::NTAG215File));
375 memcpy(data.data(), &tag_data, sizeof(tag_data));
376 WriteBackupData(tag_data.uid, data);
377
369 device_state = DeviceState::TagMounted; 378 device_state = DeviceState::TagMounted;
370 mount_target = mount_target_; 379 mount_target = mount_target_;
371 return ResultSuccess; 380 return ResultSuccess;
372 } 381 }
373 382
374 if (!NFP::AmiiboCrypto::DecodeAmiibo(encrypted_tag_data, tag_data)) { 383 if (!NFP::AmiiboCrypto::DecodeAmiibo(encrypted_tag_data, tag_data)) {
375 LOG_ERROR(Service_NFP, "Can't decode amiibo {}", device_state); 384 bool has_backup = HasBackup(encrypted_tag_data.uuid.uid).IsSuccess();
376 return ResultCorruptedData; 385 LOG_ERROR(Service_NFP, "Can't decode amiibo, has_backup= {}", has_backup);
386 return has_backup ? ResultCorruptedDataWithBackup : ResultCorruptedData;
377 } 387 }
378 388
389 std::vector<u8> data(sizeof(NFP::EncryptedNTAG215File));
390 memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data));
391 WriteBackupData(encrypted_tag_data.uuid.uid, data);
392
379 device_state = DeviceState::TagMounted; 393 device_state = DeviceState::TagMounted;
380 mount_target = mount_target_; 394 mount_target = mount_target_;
381 return ResultSuccess; 395 return ResultSuccess;
@@ -470,6 +484,7 @@ Result NfcDevice::FlushWithBreak(NFP::BreakType break_type) {
470 std::vector<u8> data(sizeof(NFP::EncryptedNTAG215File)); 484 std::vector<u8> data(sizeof(NFP::EncryptedNTAG215File));
471 if (is_plain_amiibo) { 485 if (is_plain_amiibo) {
472 memcpy(data.data(), &tag_data, sizeof(tag_data)); 486 memcpy(data.data(), &tag_data, sizeof(tag_data));
487 WriteBackupData(tag_data.uid, data);
473 } else { 488 } else {
474 if (!NFP::AmiiboCrypto::EncodeAmiibo(tag_data, encrypted_tag_data)) { 489 if (!NFP::AmiiboCrypto::EncodeAmiibo(tag_data, encrypted_tag_data)) {
475 LOG_ERROR(Service_NFP, "Failed to encode data"); 490 LOG_ERROR(Service_NFP, "Failed to encode data");
@@ -477,6 +492,7 @@ Result NfcDevice::FlushWithBreak(NFP::BreakType break_type) {
477 } 492 }
478 493
479 memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data)); 494 memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data));
495 WriteBackupData(encrypted_tag_data.uuid.uid, data);
480 } 496 }
481 497
482 if (!npad_device->WriteNfc(data)) { 498 if (!npad_device->WriteNfc(data)) {
@@ -488,7 +504,7 @@ Result NfcDevice::FlushWithBreak(NFP::BreakType break_type) {
488} 504}
489 505
490Result NfcDevice::Restore() { 506Result NfcDevice::Restore() {
491 if (device_state != DeviceState::TagMounted) { 507 if (device_state != DeviceState::TagFound) {
492 LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); 508 LOG_ERROR(Service_NFP, "Wrong device state {}", device_state);
493 if (device_state == DeviceState::TagRemoved) { 509 if (device_state == DeviceState::TagRemoved) {
494 return ResultTagRemoved; 510 return ResultTagRemoved;
@@ -496,13 +512,59 @@ Result NfcDevice::Restore() {
496 return ResultWrongDeviceState; 512 return ResultWrongDeviceState;
497 } 513 }
498 514
499 if (mount_target == NFP::MountTarget::None || mount_target == NFP::MountTarget::Rom) { 515 NFC::TagInfo tag_info{};
500 LOG_ERROR(Service_NFC, "Amiibo is read only", device_state); 516 std::array<u8, sizeof(NFP::EncryptedNTAG215File)> data{};
501 return ResultWrongDeviceState; 517 Result result = GetTagInfo(tag_info, false);
518
519 if (result.IsError()) {
520 return result;
502 } 521 }
503 522
504 // TODO: Load amiibo from backup on system 523 result = ReadBackupData(tag_info.uuid, data);
505 LOG_ERROR(Service_NFP, "Not Implemented"); 524
525 if (result.IsError()) {
526 return result;
527 }
528
529 NFP::NTAG215File temporary_tag_data{};
530 NFP::EncryptedNTAG215File temporary_encrypted_tag_data{};
531
532 // Fallback for encrypted amiibos without keys
533 if (is_write_protected) {
534 return ResultWriteAmiiboFailed;
535 }
536
537 // Fallback for plain amiibos
538 if (is_plain_amiibo) {
539 LOG_INFO(Service_NFP, "Restoring backup of plain amiibo");
540 memcpy(&temporary_tag_data, data.data(), sizeof(NFP::EncryptedNTAG215File));
541 temporary_encrypted_tag_data = NFP::AmiiboCrypto::EncodedDataToNfcData(temporary_tag_data);
542 }
543
544 if (!is_plain_amiibo) {
545 LOG_INFO(Service_NFP, "Restoring backup of encrypted amiibo");
546 temporary_tag_data = {};
547 memcpy(&temporary_encrypted_tag_data, data.data(), sizeof(NFP::EncryptedNTAG215File));
548 }
549
550 if (!NFP::AmiiboCrypto::IsAmiiboValid(temporary_encrypted_tag_data)) {
551 return ResultNotAnAmiibo;
552 }
553
554 if (!is_plain_amiibo) {
555 if (!NFP::AmiiboCrypto::DecodeAmiibo(temporary_encrypted_tag_data, temporary_tag_data)) {
556 LOG_ERROR(Service_NFP, "Can't decode amiibo");
557 return ResultCorruptedData;
558 }
559 }
560
561 // Overwrite tag contents with backup and mount the tag
562 tag_data = temporary_tag_data;
563 encrypted_tag_data = temporary_encrypted_tag_data;
564 device_state = DeviceState::TagMounted;
565 mount_target = NFP::MountTarget::All;
566 is_data_moddified = true;
567
506 return ResultSuccess; 568 return ResultSuccess;
507} 569}
508 570
@@ -1132,13 +1194,69 @@ Result NfcDevice::BreakTag(NFP::BreakType break_type) {
1132 return FlushWithBreak(break_type); 1194 return FlushWithBreak(break_type);
1133} 1195}
1134 1196
1135Result NfcDevice::ReadBackupData(std::span<u8> data) const { 1197Result NfcDevice::HasBackup(const NFC::UniqueSerialNumber& uid) const {
1136 // Not implemented 1198 constexpr auto backup_dir = "backup";
1199 const auto yuzu_amiibo_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::AmiiboDir);
1200 const auto file_name = fmt::format("{0:02x}.bin", fmt::join(uid, ""));
1201
1202 if (!Common::FS::Exists(yuzu_amiibo_dir / backup_dir / file_name)) {
1203 return ResultUnableToAccessBackupFile;
1204 }
1205
1137 return ResultSuccess; 1206 return ResultSuccess;
1138} 1207}
1139 1208
1140Result NfcDevice::WriteBackupData(std::span<const u8> data) { 1209Result NfcDevice::ReadBackupData(const NFC::UniqueSerialNumber& uid, std::span<u8> data) const {
1141 // Not implemented 1210 constexpr auto backup_dir = "backup";
1211 const auto yuzu_amiibo_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::AmiiboDir);
1212 const auto file_name = fmt::format("{0:02x}.bin", fmt::join(uid, ""));
1213
1214 const Common::FS::IOFile keys_file{yuzu_amiibo_dir / backup_dir / file_name,
1215 Common::FS::FileAccessMode::Read,
1216 Common::FS::FileType::BinaryFile};
1217
1218 if (!keys_file.IsOpen()) {
1219 LOG_ERROR(Service_NFP, "Failed to open amiibo backup");
1220 return ResultUnableToAccessBackupFile;
1221 }
1222
1223 if (keys_file.Read(data) != data.size()) {
1224 LOG_ERROR(Service_NFP, "Failed to read amiibo backup");
1225 return ResultUnableToAccessBackupFile;
1226 }
1227
1228 return ResultSuccess;
1229}
1230
1231Result NfcDevice::WriteBackupData(const NFC::UniqueSerialNumber& uid, std::span<const u8> data) {
1232 constexpr auto backup_dir = "backup";
1233 const auto yuzu_amiibo_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::AmiiboDir);
1234 const auto file_name = fmt::format("{0:02x}.bin", fmt::join(uid, ""));
1235
1236 if (HasBackup(uid).IsError()) {
1237 if (!Common::FS::CreateDir(yuzu_amiibo_dir / backup_dir)) {
1238 return ResultBackupPathAlreadyExist;
1239 }
1240
1241 if (!Common::FS::NewFile(yuzu_amiibo_dir / backup_dir / file_name)) {
1242 return ResultBackupPathAlreadyExist;
1243 }
1244 }
1245
1246 const Common::FS::IOFile keys_file{yuzu_amiibo_dir / backup_dir / file_name,
1247 Common::FS::FileAccessMode::ReadWrite,
1248 Common::FS::FileType::BinaryFile};
1249
1250 if (!keys_file.IsOpen()) {
1251 LOG_ERROR(Service_NFP, "Failed to open amiibo backup");
1252 return ResultUnableToAccessBackupFile;
1253 }
1254
1255 if (keys_file.Write(data) != data.size()) {
1256 LOG_ERROR(Service_NFP, "Failed to write amiibo backup");
1257 return ResultUnableToAccessBackupFile;
1258 }
1259
1142 return ResultSuccess; 1260 return ResultSuccess;
1143} 1261}
1144 1262
@@ -1177,7 +1295,8 @@ NFP::AmiiboName NfcDevice::GetAmiiboName(const NFP::AmiiboSettings& settings) co
1177 return amiibo_name; 1295 return amiibo_name;
1178} 1296}
1179 1297
1180void NfcDevice::SetAmiiboName(NFP::AmiiboSettings& settings, const NFP::AmiiboName& amiibo_name) { 1298void NfcDevice::SetAmiiboName(NFP::AmiiboSettings& settings,
1299 const NFP::AmiiboName& amiibo_name) const {
1181 std::array<char16_t, NFP::amiibo_name_length> settings_amiibo_name{}; 1300 std::array<char16_t, NFP::amiibo_name_length> settings_amiibo_name{};
1182 1301
1183 // Convert from utf8 to utf16 1302 // Convert from utf8 to utf16
@@ -1258,22 +1377,23 @@ void NfcDevice::UpdateRegisterInfoCrc() {
1258 tag_data.register_info_crc = crc.checksum(); 1377 tag_data.register_info_crc = crc.checksum();
1259} 1378}
1260 1379
1261void NfcDevice::BuildAmiiboWithoutKeys() { 1380void NfcDevice::BuildAmiiboWithoutKeys(NFP::NTAG215File& stubbed_tag_data,
1381 const NFP::EncryptedNTAG215File& encrypted_file) const {
1262 Service::Mii::MiiManager manager; 1382 Service::Mii::MiiManager manager;
1263 auto& settings = tag_data.settings; 1383 auto& settings = stubbed_tag_data.settings;
1264 1384
1265 tag_data = NFP::AmiiboCrypto::NfcDataToEncodedData(encrypted_tag_data); 1385 stubbed_tag_data = NFP::AmiiboCrypto::NfcDataToEncodedData(encrypted_file);
1266 1386
1267 // Common info 1387 // Common info
1268 tag_data.write_counter = 0; 1388 stubbed_tag_data.write_counter = 0;
1269 tag_data.amiibo_version = 0; 1389 stubbed_tag_data.amiibo_version = 0;
1270 settings.write_date = GetAmiiboDate(GetCurrentPosixTime()); 1390 settings.write_date = GetAmiiboDate(GetCurrentPosixTime());
1271 1391
1272 // Register info 1392 // Register info
1273 SetAmiiboName(settings, {'y', 'u', 'z', 'u', 'A', 'm', 'i', 'i', 'b', 'o'}); 1393 SetAmiiboName(settings, {'y', 'u', 'z', 'u', 'A', 'm', 'i', 'i', 'b', 'o'});
1274 settings.settings.font_region.Assign(0); 1394 settings.settings.font_region.Assign(0);
1275 settings.init_date = GetAmiiboDate(GetCurrentPosixTime()); 1395 settings.init_date = GetAmiiboDate(GetCurrentPosixTime());
1276 tag_data.owner_mii = manager.BuildFromStoreData(manager.BuildDefault(0)); 1396 stubbed_tag_data.owner_mii = manager.BuildFromStoreData(manager.BuildDefault(0));
1277 1397
1278 // Admin info 1398 // Admin info
1279 settings.settings.amiibo_initialized.Assign(1); 1399 settings.settings.amiibo_initialized.Assign(1);
diff --git a/src/core/hle/service/nfc/common/device.h b/src/core/hle/service/nfc/common/device.h
index 6a37e8458..6f049b687 100644
--- a/src/core/hle/service/nfc/common/device.h
+++ b/src/core/hle/service/nfc/common/device.h
@@ -86,8 +86,9 @@ public:
86 Result GetAll(NFP::NfpData& data) const; 86 Result GetAll(NFP::NfpData& data) const;
87 Result SetAll(const NFP::NfpData& data); 87 Result SetAll(const NFP::NfpData& data);
88 Result BreakTag(NFP::BreakType break_type); 88 Result BreakTag(NFP::BreakType break_type);
89 Result ReadBackupData(std::span<u8> data) const; 89 Result HasBackup(const NFC::UniqueSerialNumber& uid) const;
90 Result WriteBackupData(std::span<const u8> data); 90 Result ReadBackupData(const NFC::UniqueSerialNumber& uid, std::span<u8> data) const;
91 Result WriteBackupData(const NFC::UniqueSerialNumber& uid, std::span<const u8> data);
91 Result WriteNtf(std::span<const u8> data); 92 Result WriteNtf(std::span<const u8> data);
92 93
93 u64 GetHandle() const; 94 u64 GetHandle() const;
@@ -103,14 +104,15 @@ private:
103 void CloseNfcTag(); 104 void CloseNfcTag();
104 105
105 NFP::AmiiboName GetAmiiboName(const NFP::AmiiboSettings& settings) const; 106 NFP::AmiiboName GetAmiiboName(const NFP::AmiiboSettings& settings) const;
106 void SetAmiiboName(NFP::AmiiboSettings& settings, const NFP::AmiiboName& amiibo_name); 107 void SetAmiiboName(NFP::AmiiboSettings& settings, const NFP::AmiiboName& amiibo_name) const;
107 NFP::AmiiboDate GetAmiiboDate(s64 posix_time) const; 108 NFP::AmiiboDate GetAmiiboDate(s64 posix_time) const;
108 u64 GetCurrentPosixTime() const; 109 u64 GetCurrentPosixTime() const;
109 u64 RemoveVersionByte(u64 application_id) const; 110 u64 RemoveVersionByte(u64 application_id) const;
110 void UpdateSettingsCrc(); 111 void UpdateSettingsCrc();
111 void UpdateRegisterInfoCrc(); 112 void UpdateRegisterInfoCrc();
112 113
113 void BuildAmiiboWithoutKeys(); 114 void BuildAmiiboWithoutKeys(NFP::NTAG215File& stubbed_tag_data,
115 const NFP::EncryptedNTAG215File& encrypted_file) const;
114 116
115 bool is_controller_set{}; 117 bool is_controller_set{};
116 int callback_key; 118 int callback_key;
diff --git a/src/core/hle/service/nfc/common/device_manager.cpp b/src/core/hle/service/nfc/common/device_manager.cpp
index d5deaaf27..cffd602df 100644
--- a/src/core/hle/service/nfc/common/device_manager.cpp
+++ b/src/core/hle/service/nfc/common/device_manager.cpp
@@ -543,9 +543,14 @@ Result DeviceManager::ReadBackupData(u64 device_handle, std::span<u8> data) cons
543 543
544 std::shared_ptr<NfcDevice> device = nullptr; 544 std::shared_ptr<NfcDevice> device = nullptr;
545 auto result = GetDeviceHandle(device_handle, device); 545 auto result = GetDeviceHandle(device_handle, device);
546 NFC::TagInfo tag_info{};
546 547
547 if (result.IsSuccess()) { 548 if (result.IsSuccess()) {
548 result = device->ReadBackupData(data); 549 result = device->GetTagInfo(tag_info, false);
550 }
551
552 if (result.IsSuccess()) {
553 result = device->ReadBackupData(tag_info.uuid, data);
549 result = VerifyDeviceResult(device, result); 554 result = VerifyDeviceResult(device, result);
550 } 555 }
551 556
@@ -557,9 +562,14 @@ Result DeviceManager::WriteBackupData(u64 device_handle, std::span<const u8> dat
557 562
558 std::shared_ptr<NfcDevice> device = nullptr; 563 std::shared_ptr<NfcDevice> device = nullptr;
559 auto result = GetDeviceHandle(device_handle, device); 564 auto result = GetDeviceHandle(device_handle, device);
565 NFC::TagInfo tag_info{};
566
567 if (result.IsSuccess()) {
568 result = device->GetTagInfo(tag_info, false);
569 }
560 570
561 if (result.IsSuccess()) { 571 if (result.IsSuccess()) {
562 result = device->WriteBackupData(data); 572 result = device->WriteBackupData(tag_info.uuid, data);
563 result = VerifyDeviceResult(device, result); 573 result = VerifyDeviceResult(device, result);
564 } 574 }
565 575
diff --git a/src/core/hle/service/nfc/nfc_interface.cpp b/src/core/hle/service/nfc/nfc_interface.cpp
index 0fa29d398..198d0f2b9 100644
--- a/src/core/hle/service/nfc/nfc_interface.cpp
+++ b/src/core/hle/service/nfc/nfc_interface.cpp
@@ -302,7 +302,7 @@ Result NfcInterface::TranslateResultToServiceError(Result result) const {
302 return TranslateResultToNfp(result); 302 return TranslateResultToNfp(result);
303 } 303 }
304 default: 304 default:
305 if (result != ResultUnknown216) { 305 if (result != ResultBackupPathAlreadyExist) {
306 return result; 306 return result;
307 } 307 }
308 return ResultUnknown74; 308 return ResultUnknown74;
@@ -343,6 +343,9 @@ Result NfcInterface::TranslateResultToNfp(Result result) const {
343 if (result == ResultApplicationAreaIsNotInitialized) { 343 if (result == ResultApplicationAreaIsNotInitialized) {
344 return NFP::ResultApplicationAreaIsNotInitialized; 344 return NFP::ResultApplicationAreaIsNotInitialized;
345 } 345 }
346 if (result == ResultCorruptedDataWithBackup) {
347 return NFP::ResultCorruptedDataWithBackup;
348 }
346 if (result == ResultCorruptedData) { 349 if (result == ResultCorruptedData) {
347 return NFP::ResultCorruptedData; 350 return NFP::ResultCorruptedData;
348 } 351 }
@@ -355,6 +358,9 @@ Result NfcInterface::TranslateResultToNfp(Result result) const {
355 if (result == ResultNotAnAmiibo) { 358 if (result == ResultNotAnAmiibo) {
356 return NFP::ResultNotAnAmiibo; 359 return NFP::ResultNotAnAmiibo;
357 } 360 }
361 if (result == ResultUnableToAccessBackupFile) {
362 return NFP::ResultUnableToAccessBackupFile;
363 }
358 LOG_WARNING(Service_NFC, "Result conversion not handled"); 364 LOG_WARNING(Service_NFC, "Result conversion not handled");
359 return result; 365 return result;
360} 366}
diff --git a/src/core/hle/service/nfc/nfc_result.h b/src/core/hle/service/nfc/nfc_result.h
index 917d79ef8..59a808740 100644
--- a/src/core/hle/service/nfc/nfc_result.h
+++ b/src/core/hle/service/nfc/nfc_result.h
@@ -9,20 +9,22 @@ namespace Service::NFC {
9 9
10constexpr Result ResultDeviceNotFound(ErrorModule::NFC, 64); 10constexpr Result ResultDeviceNotFound(ErrorModule::NFC, 64);
11constexpr Result ResultInvalidArgument(ErrorModule::NFC, 65); 11constexpr Result ResultInvalidArgument(ErrorModule::NFC, 65);
12constexpr Result ResultWrongApplicationAreaSize(ErrorModule::NFP, 68); 12constexpr Result ResultWrongApplicationAreaSize(ErrorModule::NFC, 68);
13constexpr Result ResultWrongDeviceState(ErrorModule::NFC, 73); 13constexpr Result ResultWrongDeviceState(ErrorModule::NFC, 73);
14constexpr Result ResultUnknown74(ErrorModule::NFC, 74); 14constexpr Result ResultUnknown74(ErrorModule::NFC, 74);
15constexpr Result ResultUnknown76(ErrorModule::NFC, 76); 15constexpr Result ResultUnknown76(ErrorModule::NFC, 76);
16constexpr Result ResultNfcNotInitialized(ErrorModule::NFC, 77); 16constexpr Result ResultNfcNotInitialized(ErrorModule::NFC, 77);
17constexpr Result ResultNfcDisabled(ErrorModule::NFC, 80); 17constexpr Result ResultNfcDisabled(ErrorModule::NFC, 80);
18constexpr Result ResultWriteAmiiboFailed(ErrorModule::NFP, 88); 18constexpr Result ResultWriteAmiiboFailed(ErrorModule::NFC, 88);
19constexpr Result ResultTagRemoved(ErrorModule::NFC, 97); 19constexpr Result ResultTagRemoved(ErrorModule::NFC, 97);
20constexpr Result ResultRegistrationIsNotInitialized(ErrorModule::NFP, 120); 20constexpr Result ResultUnableToAccessBackupFile(ErrorModule::NFC, 113);
21constexpr Result ResultApplicationAreaIsNotInitialized(ErrorModule::NFP, 128); 21constexpr Result ResultRegistrationIsNotInitialized(ErrorModule::NFC, 120);
22constexpr Result ResultCorruptedData(ErrorModule::NFP, 144); 22constexpr Result ResultApplicationAreaIsNotInitialized(ErrorModule::NFC, 128);
23constexpr Result ResultWrongApplicationAreaId(ErrorModule::NFP, 152); 23constexpr Result ResultCorruptedDataWithBackup(ErrorModule::NFC, 136);
24constexpr Result ResultApplicationAreaExist(ErrorModule::NFP, 168); 24constexpr Result ResultCorruptedData(ErrorModule::NFC, 144);
25constexpr Result ResultNotAnAmiibo(ErrorModule::NFP, 178); 25constexpr Result ResultWrongApplicationAreaId(ErrorModule::NFC, 152);
26constexpr Result ResultUnknown216(ErrorModule::NFC, 216); 26constexpr Result ResultApplicationAreaExist(ErrorModule::NFC, 168);
27constexpr Result ResultNotAnAmiibo(ErrorModule::NFC, 178);
28constexpr Result ResultBackupPathAlreadyExist(ErrorModule::NFC, 216);
27 29
28} // namespace Service::NFC 30} // namespace Service::NFC
diff --git a/src/core/hle/service/nfp/nfp_interface.cpp b/src/core/hle/service/nfp/nfp_interface.cpp
index 21d159154..34ef9d82d 100644
--- a/src/core/hle/service/nfp/nfp_interface.cpp
+++ b/src/core/hle/service/nfp/nfp_interface.cpp
@@ -126,7 +126,7 @@ void Interface::Flush(HLERequestContext& ctx) {
126void Interface::Restore(HLERequestContext& ctx) { 126void Interface::Restore(HLERequestContext& ctx) {
127 IPC::RequestParser rp{ctx}; 127 IPC::RequestParser rp{ctx};
128 const auto device_handle{rp.Pop<u64>()}; 128 const auto device_handle{rp.Pop<u64>()};
129 LOG_WARNING(Service_NFP, "(STUBBED) called, device_handle={}", device_handle); 129 LOG_INFO(Service_NFP, "called, device_handle={}", device_handle);
130 130
131 auto result = GetManager()->Restore(device_handle); 131 auto result = GetManager()->Restore(device_handle);
132 result = TranslateResultToServiceError(result); 132 result = TranslateResultToServiceError(result);
@@ -394,7 +394,7 @@ void Interface::BreakTag(HLERequestContext& ctx) {
394void Interface::ReadBackupData(HLERequestContext& ctx) { 394void Interface::ReadBackupData(HLERequestContext& ctx) {
395 IPC::RequestParser rp{ctx}; 395 IPC::RequestParser rp{ctx};
396 const auto device_handle{rp.Pop<u64>()}; 396 const auto device_handle{rp.Pop<u64>()};
397 LOG_WARNING(Service_NFP, "(STUBBED) called, device_handle={}", device_handle); 397 LOG_INFO(Service_NFP, "called, device_handle={}", device_handle);
398 398
399 std::vector<u8> backup_data{}; 399 std::vector<u8> backup_data{};
400 auto result = GetManager()->ReadBackupData(device_handle, backup_data); 400 auto result = GetManager()->ReadBackupData(device_handle, backup_data);
@@ -412,7 +412,7 @@ void Interface::WriteBackupData(HLERequestContext& ctx) {
412 IPC::RequestParser rp{ctx}; 412 IPC::RequestParser rp{ctx};
413 const auto device_handle{rp.Pop<u64>()}; 413 const auto device_handle{rp.Pop<u64>()};
414 const auto backup_data_buffer{ctx.ReadBuffer()}; 414 const auto backup_data_buffer{ctx.ReadBuffer()};
415 LOG_WARNING(Service_NFP, "(STUBBED) called, device_handle={}", device_handle); 415 LOG_INFO(Service_NFP, "called, device_handle={}", device_handle);
416 416
417 auto result = GetManager()->WriteBackupData(device_handle, backup_data_buffer); 417 auto result = GetManager()->WriteBackupData(device_handle, backup_data_buffer);
418 result = TranslateResultToServiceError(result); 418 result = TranslateResultToServiceError(result);
diff --git a/src/core/hle/service/nfp/nfp_result.h b/src/core/hle/service/nfp/nfp_result.h
index 4c126cd81..618533843 100644
--- a/src/core/hle/service/nfp/nfp_result.h
+++ b/src/core/hle/service/nfp/nfp_result.h
@@ -17,9 +17,11 @@ constexpr Result ResultWriteAmiiboFailed(ErrorModule::NFP, 88);
17constexpr Result ResultTagRemoved(ErrorModule::NFP, 97); 17constexpr Result ResultTagRemoved(ErrorModule::NFP, 97);
18constexpr Result ResultRegistrationIsNotInitialized(ErrorModule::NFP, 120); 18constexpr Result ResultRegistrationIsNotInitialized(ErrorModule::NFP, 120);
19constexpr Result ResultApplicationAreaIsNotInitialized(ErrorModule::NFP, 128); 19constexpr Result ResultApplicationAreaIsNotInitialized(ErrorModule::NFP, 128);
20constexpr Result ResultCorruptedDataWithBackup(ErrorModule::NFP, 136);
20constexpr Result ResultCorruptedData(ErrorModule::NFP, 144); 21constexpr Result ResultCorruptedData(ErrorModule::NFP, 144);
21constexpr Result ResultWrongApplicationAreaId(ErrorModule::NFP, 152); 22constexpr Result ResultWrongApplicationAreaId(ErrorModule::NFP, 152);
22constexpr Result ResultApplicationAreaExist(ErrorModule::NFP, 168); 23constexpr Result ResultApplicationAreaExist(ErrorModule::NFP, 168);
23constexpr Result ResultNotAnAmiibo(ErrorModule::NFP, 178); 24constexpr Result ResultNotAnAmiibo(ErrorModule::NFP, 178);
25constexpr Result ResultUnableToAccessBackupFile(ErrorModule::NFP, 200);
24 26
25} // namespace Service::NFP 27} // namespace Service::NFP
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp
index 0c7aee1b8..dc45169ad 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp
@@ -69,7 +69,7 @@ NvResult nvhost_nvdec::Ioctl3(DeviceFD fd, Ioctl command, std::span<const u8> in
69 69
70void nvhost_nvdec::OnOpen(DeviceFD fd) { 70void nvhost_nvdec::OnOpen(DeviceFD fd) {
71 LOG_INFO(Service_NVDRV, "NVDEC video stream started"); 71 LOG_INFO(Service_NVDRV, "NVDEC video stream started");
72 system.AudioCore().SetNVDECActive(true); 72 system.SetNVDECActive(true);
73} 73}
74 74
75void nvhost_nvdec::OnClose(DeviceFD fd) { 75void nvhost_nvdec::OnClose(DeviceFD fd) {
@@ -79,7 +79,7 @@ void nvhost_nvdec::OnClose(DeviceFD fd) {
79 if (iter != host1x_file.fd_to_id.end()) { 79 if (iter != host1x_file.fd_to_id.end()) {
80 system.GPU().ClearCdmaInstance(iter->second); 80 system.GPU().ClearCdmaInstance(iter->second);
81 } 81 }
82 system.AudioCore().SetNVDECActive(false); 82 system.SetNVDECActive(false);
83} 83}
84 84
85} // namespace Service::Nvidia::Devices 85} // namespace Service::Nvidia::Devices
diff --git a/src/core/hle/service/nvnflinger/nvnflinger.cpp b/src/core/hle/service/nvnflinger/nvnflinger.cpp
index 4988e6e17..da2d5890f 100644
--- a/src/core/hle/service/nvnflinger/nvnflinger.cpp
+++ b/src/core/hle/service/nvnflinger/nvnflinger.cpp
@@ -324,6 +324,10 @@ s64 Nvnflinger::GetNextTicks() const {
324 speed_scale = 0.01f; 324 speed_scale = 0.01f;
325 } 325 }
326 } 326 }
327 if (system.GetNVDECActive() && settings.use_video_framerate.GetValue()) {
328 // Run at intended presentation rate during video playback.
329 speed_scale = 1.f;
330 }
327 331
328 // As an extension, treat nonpositive swap interval as framerate multiplier. 332 // As an extension, treat nonpositive swap interval as framerate multiplier.
329 const f32 effective_fps = swap_interval <= 0 ? 120.f * static_cast<f32>(1 - swap_interval) 333 const f32 effective_fps = swap_interval <= 0 ? 120.f * static_cast<f32>(1 - swap_interval)
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp
index 73d04d7ee..7be6cf5f3 100644
--- a/src/core/loader/nro.cpp
+++ b/src/core/loader/nro.cpp
@@ -33,7 +33,8 @@ static_assert(sizeof(NroSegmentHeader) == 0x8, "NroSegmentHeader has incorrect s
33struct NroHeader { 33struct NroHeader {
34 INSERT_PADDING_BYTES(0x4); 34 INSERT_PADDING_BYTES(0x4);
35 u32_le module_header_offset; 35 u32_le module_header_offset;
36 INSERT_PADDING_BYTES(0x8); 36 u32 magic_ext1;
37 u32 magic_ext2;
37 u32_le magic; 38 u32_le magic;
38 INSERT_PADDING_BYTES(0x4); 39 INSERT_PADDING_BYTES(0x4);
39 u32_le file_size; 40 u32_le file_size;
@@ -124,6 +125,16 @@ FileType AppLoader_NRO::IdentifyType(const FileSys::VirtualFile& nro_file) {
124 return FileType::Error; 125 return FileType::Error;
125} 126}
126 127
128bool AppLoader_NRO::IsHomebrew() {
129 // Read NSO header
130 NroHeader nro_header{};
131 if (sizeof(NroHeader) != file->ReadObject(&nro_header)) {
132 return false;
133 }
134 return nro_header.magic_ext1 == Common::MakeMagic('H', 'O', 'M', 'E') &&
135 nro_header.magic_ext2 == Common::MakeMagic('B', 'R', 'E', 'W');
136}
137
127static constexpr u32 PageAlignSize(u32 size) { 138static constexpr u32 PageAlignSize(u32 size) {
128 return static_cast<u32>((size + Core::Memory::YUZU_PAGEMASK) & ~Core::Memory::YUZU_PAGEMASK); 139 return static_cast<u32>((size + Core::Memory::YUZU_PAGEMASK) & ~Core::Memory::YUZU_PAGEMASK);
129} 140}
diff --git a/src/core/loader/nro.h b/src/core/loader/nro.h
index ccb77b581..8de6eebc6 100644
--- a/src/core/loader/nro.h
+++ b/src/core/loader/nro.h
@@ -38,6 +38,8 @@ public:
38 */ 38 */
39 static FileType IdentifyType(const FileSys::VirtualFile& nro_file); 39 static FileType IdentifyType(const FileSys::VirtualFile& nro_file);
40 40
41 bool IsHomebrew();
42
41 FileType GetFileType() const override { 43 FileType GetFileType() const override {
42 return IdentifyType(file); 44 return IdentifyType(file);
43 } 45 }
diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt
index 525b2363c..07e75f9d8 100644
--- a/src/shader_recompiler/CMakeLists.txt
+++ b/src/shader_recompiler/CMakeLists.txt
@@ -216,6 +216,7 @@ add_library(shader_recompiler STATIC
216 frontend/maxwell/translate_program.h 216 frontend/maxwell/translate_program.h
217 host_translate_info.h 217 host_translate_info.h
218 ir_opt/collect_shader_info_pass.cpp 218 ir_opt/collect_shader_info_pass.cpp
219 ir_opt/conditional_barrier_pass.cpp
219 ir_opt/constant_propagation_pass.cpp 220 ir_opt/constant_propagation_pass.cpp
220 ir_opt/dead_code_elimination_pass.cpp 221 ir_opt/dead_code_elimination_pass.cpp
221 ir_opt/dual_vertex_pass.cpp 222 ir_opt/dual_vertex_pass.cpp
@@ -223,6 +224,7 @@ add_library(shader_recompiler STATIC
223 ir_opt/identity_removal_pass.cpp 224 ir_opt/identity_removal_pass.cpp
224 ir_opt/layer_pass.cpp 225 ir_opt/layer_pass.cpp
225 ir_opt/lower_fp16_to_fp32.cpp 226 ir_opt/lower_fp16_to_fp32.cpp
227 ir_opt/lower_fp64_to_fp32.cpp
226 ir_opt/lower_int64_to_int32.cpp 228 ir_opt/lower_int64_to_int32.cpp
227 ir_opt/passes.h 229 ir_opt/passes.h
228 ir_opt/position_pass.cpp 230 ir_opt/position_pass.cpp
diff --git a/src/shader_recompiler/frontend/maxwell/translate_program.cpp b/src/shader_recompiler/frontend/maxwell/translate_program.cpp
index 17a6d4888..928b35561 100644
--- a/src/shader_recompiler/frontend/maxwell/translate_program.cpp
+++ b/src/shader_recompiler/frontend/maxwell/translate_program.cpp
@@ -280,12 +280,18 @@ IR::Program TranslateProgram(ObjectPool<IR::Inst>& inst_pool, ObjectPool<IR::Blo
280 RemoveUnreachableBlocks(program); 280 RemoveUnreachableBlocks(program);
281 281
282 // Replace instructions before the SSA rewrite 282 // Replace instructions before the SSA rewrite
283 if (!host_info.support_float64) {
284 Optimization::LowerFp64ToFp32(program);
285 }
283 if (!host_info.support_float16) { 286 if (!host_info.support_float16) {
284 Optimization::LowerFp16ToFp32(program); 287 Optimization::LowerFp16ToFp32(program);
285 } 288 }
286 if (!host_info.support_int64) { 289 if (!host_info.support_int64) {
287 Optimization::LowerInt64ToInt32(program); 290 Optimization::LowerInt64ToInt32(program);
288 } 291 }
292 if (!host_info.support_conditional_barrier) {
293 Optimization::ConditionalBarrierPass(program);
294 }
289 Optimization::SsaRewritePass(program); 295 Optimization::SsaRewritePass(program);
290 296
291 Optimization::ConstantPropagationPass(env, program); 297 Optimization::ConstantPropagationPass(env, program);
diff --git a/src/shader_recompiler/host_translate_info.h b/src/shader_recompiler/host_translate_info.h
index 2aaa6c5ea..7d2ded907 100644
--- a/src/shader_recompiler/host_translate_info.h
+++ b/src/shader_recompiler/host_translate_info.h
@@ -10,6 +10,7 @@ namespace Shader {
10 10
11/// Misc information about the host 11/// Misc information about the host
12struct HostTranslateInfo { 12struct HostTranslateInfo {
13 bool support_float64{}; ///< True when the device supports 64-bit floats
13 bool support_float16{}; ///< True when the device supports 16-bit floats 14 bool support_float16{}; ///< True when the device supports 16-bit floats
14 bool support_int64{}; ///< True when the device supports 64-bit integers 15 bool support_int64{}; ///< True when the device supports 64-bit integers
15 bool needs_demote_reorder{}; ///< True when the device needs DemoteToHelperInvocation reordered 16 bool needs_demote_reorder{}; ///< True when the device needs DemoteToHelperInvocation reordered
@@ -17,6 +18,8 @@ struct HostTranslateInfo {
17 bool support_viewport_index_layer{}; ///< True when the device supports gl_Layer in VS 18 bool support_viewport_index_layer{}; ///< True when the device supports gl_Layer in VS
18 bool support_geometry_shader_passthrough{}; ///< True when the device supports geometry 19 bool support_geometry_shader_passthrough{}; ///< True when the device supports geometry
19 ///< passthrough shaders 20 ///< passthrough shaders
21 bool support_conditional_barrier{}; ///< True when the device supports barriers in conditional
22 ///< control flow
20}; 23};
21 24
22} // namespace Shader 25} // namespace Shader
diff --git a/src/shader_recompiler/ir_opt/conditional_barrier_pass.cpp b/src/shader_recompiler/ir_opt/conditional_barrier_pass.cpp
new file mode 100644
index 000000000..c3ed27f4f
--- /dev/null
+++ b/src/shader_recompiler/ir_opt/conditional_barrier_pass.cpp
@@ -0,0 +1,44 @@
1// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "shader_recompiler/frontend/ir/program.h"
5#include "shader_recompiler/ir_opt/passes.h"
6
7namespace Shader::Optimization {
8
9void ConditionalBarrierPass(IR::Program& program) {
10 s32 conditional_control_flow_count{0};
11 s32 conditional_return_count{0};
12 for (IR::AbstractSyntaxNode& node : program.syntax_list) {
13 switch (node.type) {
14 case IR::AbstractSyntaxNode::Type::If:
15 case IR::AbstractSyntaxNode::Type::Loop:
16 conditional_control_flow_count++;
17 break;
18 case IR::AbstractSyntaxNode::Type::EndIf:
19 case IR::AbstractSyntaxNode::Type::Repeat:
20 conditional_control_flow_count--;
21 break;
22 case IR::AbstractSyntaxNode::Type::Unreachable:
23 case IR::AbstractSyntaxNode::Type::Return:
24 if (conditional_control_flow_count > 0) {
25 conditional_return_count++;
26 }
27 break;
28 case IR::AbstractSyntaxNode::Type::Block:
29 for (IR::Inst& inst : node.data.block->Instructions()) {
30 if ((conditional_control_flow_count > 0 || conditional_return_count > 0) &&
31 inst.GetOpcode() == IR::Opcode::Barrier) {
32 LOG_WARNING(Shader, "Barrier within conditional control flow");
33 inst.ReplaceOpcode(IR::Opcode::Identity);
34 }
35 }
36 break;
37 default:
38 break;
39 }
40 }
41 ASSERT(conditional_control_flow_count == 0);
42}
43
44} // namespace Shader::Optimization
diff --git a/src/shader_recompiler/ir_opt/lower_fp64_to_fp32.cpp b/src/shader_recompiler/ir_opt/lower_fp64_to_fp32.cpp
new file mode 100644
index 000000000..5db7a38ad
--- /dev/null
+++ b/src/shader_recompiler/ir_opt/lower_fp64_to_fp32.cpp
@@ -0,0 +1,185 @@
1// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "shader_recompiler/frontend/ir/ir_emitter.h"
5#include "shader_recompiler/frontend/ir/opcodes.h"
6#include "shader_recompiler/frontend/ir/value.h"
7#include "shader_recompiler/ir_opt/passes.h"
8
9namespace Shader::Optimization {
10namespace {
11
12constexpr s32 F64ToF32Exp = +1023 - 127;
13constexpr s32 F32ToF64Exp = +127 - 1023;
14
15IR::F32 PackedF64ToF32(IR::IREmitter& ir, const IR::Value& packed) {
16 const IR::U32 lo{ir.CompositeExtract(packed, 0)};
17 const IR::U32 hi{ir.CompositeExtract(packed, 1)};
18 const IR::U32 sign{ir.BitFieldExtract(hi, ir.Imm32(31), ir.Imm32(1))};
19 const IR::U32 exp{ir.BitFieldExtract(hi, ir.Imm32(20), ir.Imm32(11))};
20 const IR::U32 mantissa_hi{ir.BitFieldExtract(hi, ir.Imm32(0), ir.Imm32(20))};
21 const IR::U32 mantissa_lo{ir.BitFieldExtract(lo, ir.Imm32(29), ir.Imm32(3))};
22 const IR::U32 mantissa{
23 ir.BitwiseOr(ir.ShiftLeftLogical(mantissa_hi, ir.Imm32(3)), mantissa_lo)};
24 const IR::U32 exp_if_subnorm{
25 ir.Select(ir.IEqual(exp, ir.Imm32(0)), ir.Imm32(0), ir.IAdd(exp, ir.Imm32(F64ToF32Exp)))};
26 const IR::U32 exp_if_infnan{
27 ir.Select(ir.IEqual(exp, ir.Imm32(0x7ff)), ir.Imm32(0xff), exp_if_subnorm)};
28 const IR::U32 result{
29 ir.BitwiseOr(ir.ShiftLeftLogical(sign, ir.Imm32(31)),
30 ir.BitwiseOr(ir.ShiftLeftLogical(exp_if_infnan, ir.Imm32(23)), mantissa))};
31 return ir.BitCast<IR::F32>(result);
32}
33
34IR::Value F32ToPackedF64(IR::IREmitter& ir, const IR::Value& raw) {
35 const IR::U32 value{ir.BitCast<IR::U32>(IR::F32(raw))};
36 const IR::U32 sign{ir.BitFieldExtract(value, ir.Imm32(31), ir.Imm32(1))};
37 const IR::U32 exp{ir.BitFieldExtract(value, ir.Imm32(23), ir.Imm32(8))};
38 const IR::U32 mantissa{ir.BitFieldExtract(value, ir.Imm32(0), ir.Imm32(23))};
39 const IR::U32 mantissa_hi{ir.BitFieldExtract(mantissa, ir.Imm32(3), ir.Imm32(20))};
40 const IR::U32 mantissa_lo{ir.BitFieldExtract(mantissa, ir.Imm32(0), ir.Imm32(3))};
41 const IR::U32 exp_if_subnorm{
42 ir.Select(ir.IEqual(exp, ir.Imm32(0)), ir.Imm32(0), ir.IAdd(exp, ir.Imm32(F32ToF64Exp)))};
43 const IR::U32 exp_if_infnan{
44 ir.Select(ir.IEqual(exp, ir.Imm32(0xff)), ir.Imm32(0x7ff), exp_if_subnorm)};
45 const IR::U32 lo{ir.ShiftLeftLogical(mantissa_lo, ir.Imm32(29))};
46 const IR::U32 hi{
47 ir.BitwiseOr(ir.ShiftLeftLogical(sign, ir.Imm32(31)),
48 ir.BitwiseOr(ir.ShiftLeftLogical(exp_if_infnan, ir.Imm32(20)), mantissa_hi))};
49 return ir.CompositeConstruct(lo, hi);
50}
51
52IR::Opcode Replace(IR::Opcode op) {
53 switch (op) {
54 case IR::Opcode::FPAbs64:
55 return IR::Opcode::FPAbs32;
56 case IR::Opcode::FPAdd64:
57 return IR::Opcode::FPAdd32;
58 case IR::Opcode::FPCeil64:
59 return IR::Opcode::FPCeil32;
60 case IR::Opcode::FPFloor64:
61 return IR::Opcode::FPFloor32;
62 case IR::Opcode::FPFma64:
63 return IR::Opcode::FPFma32;
64 case IR::Opcode::FPMul64:
65 return IR::Opcode::FPMul32;
66 case IR::Opcode::FPNeg64:
67 return IR::Opcode::FPNeg32;
68 case IR::Opcode::FPRoundEven64:
69 return IR::Opcode::FPRoundEven32;
70 case IR::Opcode::FPSaturate64:
71 return IR::Opcode::FPSaturate32;
72 case IR::Opcode::FPClamp64:
73 return IR::Opcode::FPClamp32;
74 case IR::Opcode::FPTrunc64:
75 return IR::Opcode::FPTrunc32;
76 case IR::Opcode::CompositeConstructF64x2:
77 return IR::Opcode::CompositeConstructF32x2;
78 case IR::Opcode::CompositeConstructF64x3:
79 return IR::Opcode::CompositeConstructF32x3;
80 case IR::Opcode::CompositeConstructF64x4:
81 return IR::Opcode::CompositeConstructF32x4;
82 case IR::Opcode::CompositeExtractF64x2:
83 return IR::Opcode::CompositeExtractF32x2;
84 case IR::Opcode::CompositeExtractF64x3:
85 return IR::Opcode::CompositeExtractF32x3;
86 case IR::Opcode::CompositeExtractF64x4:
87 return IR::Opcode::CompositeExtractF32x4;
88 case IR::Opcode::CompositeInsertF64x2:
89 return IR::Opcode::CompositeInsertF32x2;
90 case IR::Opcode::CompositeInsertF64x3:
91 return IR::Opcode::CompositeInsertF32x3;
92 case IR::Opcode::CompositeInsertF64x4:
93 return IR::Opcode::CompositeInsertF32x4;
94 case IR::Opcode::FPOrdEqual64:
95 return IR::Opcode::FPOrdEqual32;
96 case IR::Opcode::FPUnordEqual64:
97 return IR::Opcode::FPUnordEqual32;
98 case IR::Opcode::FPOrdNotEqual64:
99 return IR::Opcode::FPOrdNotEqual32;
100 case IR::Opcode::FPUnordNotEqual64:
101 return IR::Opcode::FPUnordNotEqual32;
102 case IR::Opcode::FPOrdLessThan64:
103 return IR::Opcode::FPOrdLessThan32;
104 case IR::Opcode::FPUnordLessThan64:
105 return IR::Opcode::FPUnordLessThan32;
106 case IR::Opcode::FPOrdGreaterThan64:
107 return IR::Opcode::FPOrdGreaterThan32;
108 case IR::Opcode::FPUnordGreaterThan64:
109 return IR::Opcode::FPUnordGreaterThan32;
110 case IR::Opcode::FPOrdLessThanEqual64:
111 return IR::Opcode::FPOrdLessThanEqual32;
112 case IR::Opcode::FPUnordLessThanEqual64:
113 return IR::Opcode::FPUnordLessThanEqual32;
114 case IR::Opcode::FPOrdGreaterThanEqual64:
115 return IR::Opcode::FPOrdGreaterThanEqual32;
116 case IR::Opcode::FPUnordGreaterThanEqual64:
117 return IR::Opcode::FPUnordGreaterThanEqual32;
118 case IR::Opcode::FPIsNan64:
119 return IR::Opcode::FPIsNan32;
120 case IR::Opcode::ConvertS16F64:
121 return IR::Opcode::ConvertS16F32;
122 case IR::Opcode::ConvertS32F64:
123 return IR::Opcode::ConvertS32F32;
124 case IR::Opcode::ConvertS64F64:
125 return IR::Opcode::ConvertS64F32;
126 case IR::Opcode::ConvertU16F64:
127 return IR::Opcode::ConvertU16F32;
128 case IR::Opcode::ConvertU32F64:
129 return IR::Opcode::ConvertU32F32;
130 case IR::Opcode::ConvertU64F64:
131 return IR::Opcode::ConvertU64F32;
132 case IR::Opcode::ConvertF32F64:
133 return IR::Opcode::Identity;
134 case IR::Opcode::ConvertF64F32:
135 return IR::Opcode::Identity;
136 case IR::Opcode::ConvertF64S8:
137 return IR::Opcode::ConvertF32S8;
138 case IR::Opcode::ConvertF64S16:
139 return IR::Opcode::ConvertF32S16;
140 case IR::Opcode::ConvertF64S32:
141 return IR::Opcode::ConvertF32S32;
142 case IR::Opcode::ConvertF64S64:
143 return IR::Opcode::ConvertF32S64;
144 case IR::Opcode::ConvertF64U8:
145 return IR::Opcode::ConvertF32U8;
146 case IR::Opcode::ConvertF64U16:
147 return IR::Opcode::ConvertF32U16;
148 case IR::Opcode::ConvertF64U32:
149 return IR::Opcode::ConvertF32U32;
150 case IR::Opcode::ConvertF64U64:
151 return IR::Opcode::ConvertF32U64;
152 default:
153 return op;
154 }
155}
156
157void Lower(IR::Block& block, IR::Inst& inst) {
158 switch (inst.GetOpcode()) {
159 case IR::Opcode::PackDouble2x32: {
160 IR::IREmitter ir(block, IR::Block::InstructionList::s_iterator_to(inst));
161 inst.ReplaceUsesWith(PackedF64ToF32(ir, inst.Arg(0)));
162 break;
163 }
164 case IR::Opcode::UnpackDouble2x32: {
165 IR::IREmitter ir(block, IR::Block::InstructionList::s_iterator_to(inst));
166 inst.ReplaceUsesWith(F32ToPackedF64(ir, inst.Arg(0)));
167 break;
168 }
169 default:
170 inst.ReplaceOpcode(Replace(inst.GetOpcode()));
171 break;
172 }
173}
174
175} // Anonymous namespace
176
177void LowerFp64ToFp32(IR::Program& program) {
178 for (IR::Block* const block : program.blocks) {
179 for (IR::Inst& inst : block->Instructions()) {
180 Lower(*block, inst);
181 }
182 }
183}
184
185} // namespace Shader::Optimization
diff --git a/src/shader_recompiler/ir_opt/passes.h b/src/shader_recompiler/ir_opt/passes.h
index 1f8f2ba95..629d18fa1 100644
--- a/src/shader_recompiler/ir_opt/passes.h
+++ b/src/shader_recompiler/ir_opt/passes.h
@@ -13,10 +13,12 @@ struct HostTranslateInfo;
13namespace Shader::Optimization { 13namespace Shader::Optimization {
14 14
15void CollectShaderInfoPass(Environment& env, IR::Program& program); 15void CollectShaderInfoPass(Environment& env, IR::Program& program);
16void ConditionalBarrierPass(IR::Program& program);
16void ConstantPropagationPass(Environment& env, IR::Program& program); 17void ConstantPropagationPass(Environment& env, IR::Program& program);
17void DeadCodeEliminationPass(IR::Program& program); 18void DeadCodeEliminationPass(IR::Program& program);
18void GlobalMemoryToStorageBufferPass(IR::Program& program); 19void GlobalMemoryToStorageBufferPass(IR::Program& program);
19void IdentityRemovalPass(IR::Program& program); 20void IdentityRemovalPass(IR::Program& program);
21void LowerFp64ToFp32(IR::Program& program);
20void LowerFp16ToFp32(IR::Program& program); 22void LowerFp16ToFp32(IR::Program& program);
21void LowerInt64ToInt32(IR::Program& program); 23void LowerInt64ToInt32(IR::Program& program);
22void RescalingPass(IR::Program& program); 24void RescalingPass(IR::Program& program);
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index 2f281b370..251a4a880 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -715,20 +715,38 @@ void BufferCache<P>::BindHostIndexBuffer() {
715 715
716template <class P> 716template <class P>
717void BufferCache<P>::BindHostVertexBuffers() { 717void BufferCache<P>::BindHostVertexBuffers() {
718 HostBindings host_bindings;
719 bool any_valid{false};
718 auto& flags = maxwell3d->dirty.flags; 720 auto& flags = maxwell3d->dirty.flags;
719 for (u32 index = 0; index < NUM_VERTEX_BUFFERS; ++index) { 721 for (u32 index = 0; index < NUM_VERTEX_BUFFERS; ++index) {
720 const Binding& binding = channel_state->vertex_buffers[index];
721 Buffer& buffer = slot_buffers[binding.buffer_id];
722 TouchBuffer(buffer, binding.buffer_id);
723 SynchronizeBuffer(buffer, binding.cpu_addr, binding.size);
724 if (!flags[Dirty::VertexBuffer0 + index]) { 722 if (!flags[Dirty::VertexBuffer0 + index]) {
725 continue; 723 continue;
726 } 724 }
727 flags[Dirty::VertexBuffer0 + index] = false; 725 host_bindings.min_index = std::min(host_bindings.min_index, index);
726 host_bindings.max_index = std::max(host_bindings.max_index, index);
727 any_valid = true;
728 }
728 729
729 const u32 stride = maxwell3d->regs.vertex_streams[index].stride; 730 if (any_valid) {
730 const u32 offset = buffer.Offset(binding.cpu_addr); 731 host_bindings.max_index++;
731 runtime.BindVertexBuffer(index, buffer, offset, binding.size, stride); 732 for (u32 index = host_bindings.min_index; index < host_bindings.max_index; index++) {
733 flags[Dirty::VertexBuffer0 + index] = false;
734
735 const Binding& binding = channel_state->vertex_buffers[index];
736 Buffer& buffer = slot_buffers[binding.buffer_id];
737
738 TouchBuffer(buffer, binding.buffer_id);
739 SynchronizeBuffer(buffer, binding.cpu_addr, binding.size);
740
741 const u32 stride = maxwell3d->regs.vertex_streams[index].stride;
742 const u32 offset = buffer.Offset(binding.cpu_addr);
743
744 host_bindings.buffers.push_back(reinterpret_cast<void*>(&buffer));
745 host_bindings.offsets.push_back(offset);
746 host_bindings.sizes.push_back(binding.size);
747 host_bindings.strides.push_back(stride);
748 }
749 runtime.BindVertexBuffers(host_bindings);
732 } 750 }
733} 751}
734 752
@@ -882,15 +900,25 @@ void BufferCache<P>::BindHostTransformFeedbackBuffers() {
882 if (maxwell3d->regs.transform_feedback_enabled == 0) { 900 if (maxwell3d->regs.transform_feedback_enabled == 0) {
883 return; 901 return;
884 } 902 }
903 HostBindings host_bindings;
885 for (u32 index = 0; index < NUM_TRANSFORM_FEEDBACK_BUFFERS; ++index) { 904 for (u32 index = 0; index < NUM_TRANSFORM_FEEDBACK_BUFFERS; ++index) {
886 const Binding& binding = channel_state->transform_feedback_buffers[index]; 905 const Binding& binding = channel_state->transform_feedback_buffers[index];
906 if (maxwell3d->regs.transform_feedback.controls[index].varying_count == 0 &&
907 maxwell3d->regs.transform_feedback.controls[index].stride == 0) {
908 break;
909 }
887 Buffer& buffer = slot_buffers[binding.buffer_id]; 910 Buffer& buffer = slot_buffers[binding.buffer_id];
888 TouchBuffer(buffer, binding.buffer_id); 911 TouchBuffer(buffer, binding.buffer_id);
889 const u32 size = binding.size; 912 const u32 size = binding.size;
890 SynchronizeBuffer(buffer, binding.cpu_addr, size); 913 SynchronizeBuffer(buffer, binding.cpu_addr, size);
891 914
892 const u32 offset = buffer.Offset(binding.cpu_addr); 915 const u32 offset = buffer.Offset(binding.cpu_addr);
893 runtime.BindTransformFeedbackBuffer(index, buffer, offset, size); 916 host_bindings.buffers.push_back(reinterpret_cast<void*>(&buffer));
917 host_bindings.offsets.push_back(offset);
918 host_bindings.sizes.push_back(binding.size);
919 }
920 if (host_bindings.buffers.size() > 0) {
921 runtime.BindTransformFeedbackBuffers(host_bindings);
894 } 922 }
895} 923}
896 924
@@ -1616,6 +1644,8 @@ void BufferCache<P>::DownloadBufferMemory(Buffer& buffer, VAddr cpu_addr, u64 si
1616 1644
1617template <class P> 1645template <class P>
1618void BufferCache<P>::DeleteBuffer(BufferId buffer_id, bool do_not_mark) { 1646void BufferCache<P>::DeleteBuffer(BufferId buffer_id, bool do_not_mark) {
1647 bool dirty_index{false};
1648 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> dirty_vertex_buffers;
1619 const auto scalar_replace = [buffer_id](Binding& binding) { 1649 const auto scalar_replace = [buffer_id](Binding& binding) {
1620 if (binding.buffer_id == buffer_id) { 1650 if (binding.buffer_id == buffer_id) {
1621 binding.buffer_id = BufferId{}; 1651 binding.buffer_id = BufferId{};
@@ -1624,8 +1654,19 @@ void BufferCache<P>::DeleteBuffer(BufferId buffer_id, bool do_not_mark) {
1624 const auto replace = [scalar_replace](std::span<Binding> bindings) { 1654 const auto replace = [scalar_replace](std::span<Binding> bindings) {
1625 std::ranges::for_each(bindings, scalar_replace); 1655 std::ranges::for_each(bindings, scalar_replace);
1626 }; 1656 };
1627 scalar_replace(channel_state->index_buffer); 1657
1628 replace(channel_state->vertex_buffers); 1658 if (channel_state->index_buffer.buffer_id == buffer_id) {
1659 channel_state->index_buffer.buffer_id = BufferId{};
1660 dirty_index = true;
1661 }
1662
1663 for (u32 index = 0; index < channel_state->vertex_buffers.size(); index++) {
1664 auto& binding = channel_state->vertex_buffers[index];
1665 if (binding.buffer_id == buffer_id) {
1666 binding.buffer_id = BufferId{};
1667 dirty_vertex_buffers.push_back(index);
1668 }
1669 }
1629 std::ranges::for_each(channel_state->uniform_buffers, replace); 1670 std::ranges::for_each(channel_state->uniform_buffers, replace);
1630 std::ranges::for_each(channel_state->storage_buffers, replace); 1671 std::ranges::for_each(channel_state->storage_buffers, replace);
1631 replace(channel_state->transform_feedback_buffers); 1672 replace(channel_state->transform_feedback_buffers);
@@ -1642,20 +1683,21 @@ void BufferCache<P>::DeleteBuffer(BufferId buffer_id, bool do_not_mark) {
1642 delayed_destruction_ring.Push(std::move(slot_buffers[buffer_id])); 1683 delayed_destruction_ring.Push(std::move(slot_buffers[buffer_id]));
1643 slot_buffers.erase(buffer_id); 1684 slot_buffers.erase(buffer_id);
1644 1685
1645 NotifyBufferDeletion();
1646}
1647
1648template <class P>
1649void BufferCache<P>::NotifyBufferDeletion() {
1650 if constexpr (HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS) { 1686 if constexpr (HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS) {
1651 channel_state->dirty_uniform_buffers.fill(~u32{0}); 1687 channel_state->dirty_uniform_buffers.fill(~u32{0});
1652 channel_state->uniform_buffer_binding_sizes.fill({}); 1688 channel_state->uniform_buffer_binding_sizes.fill({});
1653 } 1689 }
1690
1654 auto& flags = maxwell3d->dirty.flags; 1691 auto& flags = maxwell3d->dirty.flags;
1655 flags[Dirty::IndexBuffer] = true; 1692 if (dirty_index) {
1656 flags[Dirty::VertexBuffers] = true; 1693 flags[Dirty::IndexBuffer] = true;
1657 for (u32 index = 0; index < NUM_VERTEX_BUFFERS; ++index) { 1694 }
1658 flags[Dirty::VertexBuffer0 + index] = true; 1695
1696 if (dirty_vertex_buffers.size() > 0) {
1697 flags[Dirty::VertexBuffers] = true;
1698 for (auto index : dirty_vertex_buffers) {
1699 flags[Dirty::VertexBuffer0 + index] = true;
1700 }
1659 } 1701 }
1660 channel_state->has_deleted_buffers = true; 1702 channel_state->has_deleted_buffers = true;
1661} 1703}
diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h
index 60a1f285e..cf359e241 100644
--- a/src/video_core/buffer_cache/buffer_cache_base.h
+++ b/src/video_core/buffer_cache/buffer_cache_base.h
@@ -105,6 +105,15 @@ static constexpr Binding NULL_BINDING{
105 .buffer_id = NULL_BUFFER_ID, 105 .buffer_id = NULL_BUFFER_ID,
106}; 106};
107 107
108struct HostBindings {
109 boost::container::small_vector<void*, NUM_VERTEX_BUFFERS> buffers;
110 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> offsets;
111 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> sizes;
112 boost::container::small_vector<u64, NUM_VERTEX_BUFFERS> strides;
113 u32 min_index{NUM_VERTEX_BUFFERS};
114 u32 max_index{0};
115};
116
108class BufferCacheChannelInfo : public ChannelInfo { 117class BufferCacheChannelInfo : public ChannelInfo {
109public: 118public:
110 BufferCacheChannelInfo() = delete; 119 BufferCacheChannelInfo() = delete;
@@ -519,8 +528,6 @@ private:
519 528
520 void DeleteBuffer(BufferId buffer_id, bool do_not_mark = false); 529 void DeleteBuffer(BufferId buffer_id, bool do_not_mark = false);
521 530
522 void NotifyBufferDeletion();
523
524 [[nodiscard]] Binding StorageBufferBinding(GPUVAddr ssbo_addr, u32 cbuf_index, 531 [[nodiscard]] Binding StorageBufferBinding(GPUVAddr ssbo_addr, u32 cbuf_index,
525 bool is_written) const; 532 bool is_written) const;
526 533
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index c419714d4..0cc546a3a 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -232,6 +232,15 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, Buffer& buffer, u32 offset,
232 } 232 }
233} 233}
234 234
235void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings) {
236 for (u32 index = 0; index < bindings.buffers.size(); index++) {
237 BindVertexBuffer(
238 bindings.min_index + index, *reinterpret_cast<Buffer*>(bindings.buffers[index]),
239 static_cast<u32>(bindings.offsets[index]), static_cast<u32>(bindings.sizes[index]),
240 static_cast<u32>(bindings.strides[index]));
241 }
242}
243
235void BufferCacheRuntime::BindUniformBuffer(size_t stage, u32 binding_index, Buffer& buffer, 244void BufferCacheRuntime::BindUniformBuffer(size_t stage, u32 binding_index, Buffer& buffer,
236 u32 offset, u32 size) { 245 u32 offset, u32 size) {
237 if (use_assembly_shaders) { 246 if (use_assembly_shaders) {
@@ -320,6 +329,15 @@ void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, Buffer& buffer,
320 static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size)); 329 static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size));
321} 330}
322 331
332void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings) {
333 for (u32 index = 0; index < bindings.buffers.size(); index++) {
334 glBindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, index,
335 reinterpret_cast<Buffer*>(bindings.buffers[index])->Handle(),
336 static_cast<GLintptr>(bindings.offsets[index]),
337 static_cast<GLsizeiptr>(bindings.sizes[index]));
338 }
339}
340
323void BufferCacheRuntime::BindTextureBuffer(Buffer& buffer, u32 offset, u32 size, 341void BufferCacheRuntime::BindTextureBuffer(Buffer& buffer, u32 offset, u32 size,
324 PixelFormat format) { 342 PixelFormat format) {
325 *texture_handles++ = buffer.View(offset, size, format); 343 *texture_handles++ = buffer.View(offset, size, format);
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index a24991585..e4e000284 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -7,7 +7,7 @@
7#include <span> 7#include <span>
8 8
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "video_core/buffer_cache/buffer_cache.h" 10#include "video_core/buffer_cache/buffer_cache_base.h"
11#include "video_core/buffer_cache/memory_tracker_base.h" 11#include "video_core/buffer_cache/memory_tracker_base.h"
12#include "video_core/rasterizer_interface.h" 12#include "video_core/rasterizer_interface.h"
13#include "video_core/renderer_opengl/gl_device.h" 13#include "video_core/renderer_opengl/gl_device.h"
@@ -87,6 +87,7 @@ public:
87 void BindIndexBuffer(Buffer& buffer, u32 offset, u32 size); 87 void BindIndexBuffer(Buffer& buffer, u32 offset, u32 size);
88 88
89 void BindVertexBuffer(u32 index, Buffer& buffer, u32 offset, u32 size, u32 stride); 89 void BindVertexBuffer(u32 index, Buffer& buffer, u32 offset, u32 size, u32 stride);
90 void BindVertexBuffers(VideoCommon::HostBindings& bindings);
90 91
91 void BindUniformBuffer(size_t stage, u32 binding_index, Buffer& buffer, u32 offset, u32 size); 92 void BindUniformBuffer(size_t stage, u32 binding_index, Buffer& buffer, u32 offset, u32 size);
92 93
@@ -99,6 +100,7 @@ public:
99 bool is_written); 100 bool is_written);
100 101
101 void BindTransformFeedbackBuffer(u32 index, Buffer& buffer, u32 offset, u32 size); 102 void BindTransformFeedbackBuffer(u32 index, Buffer& buffer, u32 offset, u32 size);
103 void BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings);
102 104
103 void BindTextureBuffer(Buffer& buffer, u32 offset, u32 size, 105 void BindTextureBuffer(Buffer& buffer, u32 offset, u32 size,
104 VideoCore::Surface::PixelFormat format); 106 VideoCore::Surface::PixelFormat format);
diff --git a/src/video_core/renderer_opengl/gl_device.cpp b/src/video_core/renderer_opengl/gl_device.cpp
index 400c21981..03d234f2f 100644
--- a/src/video_core/renderer_opengl/gl_device.cpp
+++ b/src/video_core/renderer_opengl/gl_device.cpp
@@ -201,6 +201,7 @@ Device::Device(Core::Frontend::EmuWindow& emu_window) {
201 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue() && 201 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue() &&
202 !(is_amd || (is_intel && !is_linux)) && !strict_context_required; 202 !(is_amd || (is_intel && !is_linux)) && !strict_context_required;
203 use_driver_cache = is_nvidia; 203 use_driver_cache = is_nvidia;
204 supports_conditional_barriers = !is_intel;
204 205
205 LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi); 206 LOG_INFO(Render_OpenGL, "Renderer_VariableAOFFI: {}", has_variable_aoffi);
206 LOG_INFO(Render_OpenGL, "Renderer_ComponentIndexingBug: {}", has_component_indexing_bug); 207 LOG_INFO(Render_OpenGL, "Renderer_ComponentIndexingBug: {}", has_component_indexing_bug);
diff --git a/src/video_core/renderer_opengl/gl_device.h b/src/video_core/renderer_opengl/gl_device.h
index cc0b95f1a..ad27264e5 100644
--- a/src/video_core/renderer_opengl/gl_device.h
+++ b/src/video_core/renderer_opengl/gl_device.h
@@ -188,6 +188,10 @@ public:
188 return strict_context_required; 188 return strict_context_required;
189 } 189 }
190 190
191 bool SupportsConditionalBarriers() const {
192 return supports_conditional_barriers;
193 }
194
191private: 195private:
192 static bool TestVariableAoffi(); 196 static bool TestVariableAoffi();
193 static bool TestPreciseBug(); 197 static bool TestPreciseBug();
@@ -233,6 +237,7 @@ private:
233 bool has_bool_ref_bug{}; 237 bool has_bool_ref_bug{};
234 bool can_report_memory{}; 238 bool can_report_memory{};
235 bool strict_context_required{}; 239 bool strict_context_required{};
240 bool supports_conditional_barriers{};
236 241
237 std::string vendor_name; 242 std::string vendor_name;
238}; 243};
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp
index 6ecda2984..3f077311e 100644
--- a/src/video_core/renderer_opengl/gl_shader_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp
@@ -232,12 +232,14 @@ ShaderCache::ShaderCache(RasterizerOpenGL& rasterizer_, Core::Frontend::EmuWindo
232 .gl_max_compute_smem_size = device.GetMaxComputeSharedMemorySize(), 232 .gl_max_compute_smem_size = device.GetMaxComputeSharedMemorySize(),
233 }, 233 },
234 host_info{ 234 host_info{
235 .support_float64 = true,
235 .support_float16 = false, 236 .support_float16 = false,
236 .support_int64 = device.HasShaderInt64(), 237 .support_int64 = device.HasShaderInt64(),
237 .needs_demote_reorder = device.IsAmd(), 238 .needs_demote_reorder = device.IsAmd(),
238 .support_snorm_render_buffer = false, 239 .support_snorm_render_buffer = false,
239 .support_viewport_index_layer = device.HasVertexViewportLayer(), 240 .support_viewport_index_layer = device.HasVertexViewportLayer(),
240 .support_geometry_shader_passthrough = device.HasGeometryShaderPassthrough(), 241 .support_geometry_shader_passthrough = device.HasGeometryShaderPassthrough(),
242 .support_conditional_barrier = device.SupportsConditionalBarriers(),
241 } { 243 } {
242 if (use_asynchronous_shaders) { 244 if (use_asynchronous_shaders) {
243 workers = CreateWorkers(); 245 workers = CreateWorkers();
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
index 7cdde992b..acb143fc7 100644
--- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp
+++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
@@ -37,10 +37,6 @@
37#include "video_core/vulkan_common/vulkan_memory_allocator.h" 37#include "video_core/vulkan_common/vulkan_memory_allocator.h"
38#include "video_core/vulkan_common/vulkan_wrapper.h" 38#include "video_core/vulkan_common/vulkan_wrapper.h"
39 39
40#ifdef ANDROID
41extern u32 GetAndroidScreenRotation();
42#endif
43
44namespace Vulkan { 40namespace Vulkan {
45 41
46namespace { 42namespace {
@@ -78,47 +74,6 @@ struct ScreenRectVertex {
78 } 74 }
79}; 75};
80 76
81#ifdef ANDROID
82
83std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) {
84 constexpr u32 ROTATION_0 = 0;
85 constexpr u32 ROTATION_90 = 1;
86 constexpr u32 ROTATION_180 = 2;
87 constexpr u32 ROTATION_270 = 3;
88
89 // clang-format off
90 switch (GetAndroidScreenRotation()) {
91 case ROTATION_0:
92 // Desktop
93 return { 2.f / width, 0.f, 0.f, 0.f,
94 0.f, 2.f / height, 0.f, 0.f,
95 0.f, 0.f, 1.f, 0.f,
96 -1.f, -1.f, 0.f, 1.f};
97 case ROTATION_180:
98 // Reverse desktop
99 return {-2.f / width, 0.f, 0.f, 0.f,
100 0.f, -2.f / height, 0.f, 0.f,
101 0.f, 0.f, 1.f, 0.f,
102 1.f, 1.f, 0.f, 1.f};
103 case ROTATION_270:
104 // Reverse landscape
105 return { 0.f, -2.f / width, 0.f, 0.f,
106 2.f / height, 0.f, 0.f, 0.f,
107 0.f, 0.f, 1.f, 0.f,
108 -1.f, 1.f, 0.f, 1.f};
109 case ROTATION_90:
110 default:
111 // Landscape
112 return { 0.f, 2.f / width, 0.f, 0.f,
113 -2.f / height, 0.f, 0.f, 0.f,
114 0.f, 0.f, 1.f, 0.f,
115 1.f, -1.f, 0.f, 1.f};
116 }
117 // clang-format on
118}
119
120#else
121
122std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) { 77std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) {
123 // clang-format off 78 // clang-format off
124 return { 2.f / width, 0.f, 0.f, 0.f, 79 return { 2.f / width, 0.f, 0.f, 0.f,
@@ -128,8 +83,6 @@ std::array<f32, 4 * 4> MakeOrthographicMatrix(f32 width, f32 height) {
128 // clang-format on 83 // clang-format on
129} 84}
130 85
131#endif
132
133u32 GetBytesPerPixel(const Tegra::FramebufferConfig& framebuffer) { 86u32 GetBytesPerPixel(const Tegra::FramebufferConfig& framebuffer) {
134 using namespace VideoCore::Surface; 87 using namespace VideoCore::Surface;
135 return BytesPerBlock(PixelFormatFromGPUPixelFormat(framebuffer.pixel_format)); 88 return BytesPerBlock(PixelFormatFromGPUPixelFormat(framebuffer.pixel_format));
@@ -1159,7 +1112,7 @@ void BlitScreen::CreateRawImages(const Tegra::FramebufferConfig& framebuffer) {
1159 .pNext = nullptr, 1112 .pNext = nullptr,
1160 .flags = 0, 1113 .flags = 0,
1161 .imageType = VK_IMAGE_TYPE_2D, 1114 .imageType = VK_IMAGE_TYPE_2D,
1162 .format = GetFormat(framebuffer), 1115 .format = used_on_framebuffer ? VK_FORMAT_R16G16B16A16_SFLOAT : GetFormat(framebuffer),
1163 .extent = 1116 .extent =
1164 { 1117 {
1165 .width = (up_scale * framebuffer.width) >> down_shift, 1118 .width = (up_scale * framebuffer.width) >> down_shift,
@@ -1180,14 +1133,14 @@ void BlitScreen::CreateRawImages(const Tegra::FramebufferConfig& framebuffer) {
1180 const auto create_commit = [&](vk::Image& image) { 1133 const auto create_commit = [&](vk::Image& image) {
1181 return memory_allocator.Commit(image, MemoryUsage::DeviceLocal); 1134 return memory_allocator.Commit(image, MemoryUsage::DeviceLocal);
1182 }; 1135 };
1183 const auto create_image_view = [&](vk::Image& image) { 1136 const auto create_image_view = [&](vk::Image& image, bool used_on_framebuffer = false) {
1184 return device.GetLogical().CreateImageView(VkImageViewCreateInfo{ 1137 return device.GetLogical().CreateImageView(VkImageViewCreateInfo{
1185 .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, 1138 .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
1186 .pNext = nullptr, 1139 .pNext = nullptr,
1187 .flags = 0, 1140 .flags = 0,
1188 .image = *image, 1141 .image = *image,
1189 .viewType = VK_IMAGE_VIEW_TYPE_2D, 1142 .viewType = VK_IMAGE_VIEW_TYPE_2D,
1190 .format = GetFormat(framebuffer), 1143 .format = used_on_framebuffer ? VK_FORMAT_R16G16B16A16_SFLOAT : GetFormat(framebuffer),
1191 .components = 1144 .components =
1192 { 1145 {
1193 .r = VK_COMPONENT_SWIZZLE_IDENTITY, 1146 .r = VK_COMPONENT_SWIZZLE_IDENTITY,
@@ -1217,7 +1170,7 @@ void BlitScreen::CreateRawImages(const Tegra::FramebufferConfig& framebuffer) {
1217 const u32 down_shift = Settings::values.resolution_info.down_shift; 1170 const u32 down_shift = Settings::values.resolution_info.down_shift;
1218 aa_image = create_image(true, up_scale, down_shift); 1171 aa_image = create_image(true, up_scale, down_shift);
1219 aa_commit = create_commit(aa_image); 1172 aa_commit = create_commit(aa_image);
1220 aa_image_view = create_image_view(aa_image); 1173 aa_image_view = create_image_view(aa_image, true);
1221 VkExtent2D size{ 1174 VkExtent2D size{
1222 .width = (up_scale * framebuffer.width) >> down_shift, 1175 .width = (up_scale * framebuffer.width) >> down_shift,
1223 .height = (up_scale * framebuffer.height) >> down_shift, 1176 .height = (up_scale * framebuffer.height) >> down_shift,
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index daa128399..d72d99899 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -7,7 +7,6 @@
7#include <span> 7#include <span>
8#include <vector> 8#include <vector>
9 9
10#include "video_core/buffer_cache/buffer_cache.h"
11#include "video_core/renderer_vulkan/maxwell_to_vk.h" 10#include "video_core/renderer_vulkan/maxwell_to_vk.h"
12#include "video_core/renderer_vulkan/vk_buffer_cache.h" 11#include "video_core/renderer_vulkan/vk_buffer_cache.h"
13#include "video_core/renderer_vulkan/vk_scheduler.h" 12#include "video_core/renderer_vulkan/vk_scheduler.h"
@@ -502,6 +501,40 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset
502 } 501 }
503} 502}
504 503
504void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings& bindings) {
505 boost::container::small_vector<VkBuffer, 32> buffer_handles;
506 for (u32 index = 0; index < bindings.buffers.size(); index++) {
507 auto& buffer = *reinterpret_cast<Buffer*>(bindings.buffers[index]);
508 auto handle = buffer.Handle();
509 if (handle == VK_NULL_HANDLE) {
510 bindings.offsets[index] = 0;
511 bindings.sizes[index] = VK_WHOLE_SIZE;
512 if (!device.HasNullDescriptor()) {
513 ReserveNullBuffer();
514 handle = *null_buffer;
515 }
516 }
517 buffer_handles.push_back(handle);
518 }
519 if (device.IsExtExtendedDynamicStateSupported()) {
520 scheduler.Record([bindings = bindings,
521 buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) {
522 cmdbuf.BindVertexBuffers2EXT(
523 bindings.min_index, bindings.max_index - bindings.min_index, buffer_handles.data(),
524 reinterpret_cast<const VkDeviceSize*>(bindings.offsets.data()),
525 reinterpret_cast<const VkDeviceSize*>(bindings.sizes.data()),
526 reinterpret_cast<const VkDeviceSize*>(bindings.strides.data()));
527 });
528 } else {
529 scheduler.Record([bindings = bindings,
530 buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) {
531 cmdbuf.BindVertexBuffers(
532 bindings.min_index, bindings.max_index - bindings.min_index, buffer_handles.data(),
533 reinterpret_cast<const VkDeviceSize*>(bindings.offsets.data()));
534 });
535 }
536}
537
505void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, 538void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset,
506 u32 size) { 539 u32 size) {
507 if (!device.IsExtTransformFeedbackSupported()) { 540 if (!device.IsExtTransformFeedbackSupported()) {
@@ -523,6 +556,25 @@ void BufferCacheRuntime::BindTransformFeedbackBuffer(u32 index, VkBuffer buffer,
523 }); 556 });
524} 557}
525 558
559void BufferCacheRuntime::BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings) {
560 if (!device.IsExtTransformFeedbackSupported()) {
561 // Already logged in the rasterizer
562 return;
563 }
564 boost::container::small_vector<VkBuffer, 4> buffer_handles;
565 for (u32 index = 0; index < bindings.buffers.size(); index++) {
566 auto& buffer = *reinterpret_cast<Buffer*>(bindings.buffers[index]);
567 buffer_handles.push_back(buffer.Handle());
568 }
569 scheduler.Record(
570 [bindings = bindings, buffer_handles = buffer_handles](vk::CommandBuffer cmdbuf) {
571 cmdbuf.BindTransformFeedbackBuffersEXT(
572 0, static_cast<u32>(buffer_handles.size()), buffer_handles.data(),
573 reinterpret_cast<const VkDeviceSize*>(bindings.offsets.data()),
574 reinterpret_cast<const VkDeviceSize*>(bindings.sizes.data()));
575 });
576}
577
526void BufferCacheRuntime::ReserveNullBuffer() { 578void BufferCacheRuntime::ReserveNullBuffer() {
527 if (null_buffer) { 579 if (null_buffer) {
528 return; 580 return;
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index 92b4f7859..92d3e9f32 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -18,6 +18,7 @@ namespace Vulkan {
18class Device; 18class Device;
19class DescriptorPool; 19class DescriptorPool;
20class Scheduler; 20class Scheduler;
21struct HostVertexBinding;
21 22
22class BufferCacheRuntime; 23class BufferCacheRuntime;
23 24
@@ -96,8 +97,10 @@ public:
96 void BindQuadIndexBuffer(PrimitiveTopology topology, u32 first, u32 count); 97 void BindQuadIndexBuffer(PrimitiveTopology topology, u32 first, u32 count);
97 98
98 void BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size, u32 stride); 99 void BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size, u32 stride);
100 void BindVertexBuffers(VideoCommon::HostBindings& bindings);
99 101
100 void BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size); 102 void BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size);
103 void BindTransformFeedbackBuffers(VideoCommon::HostBindings& bindings);
101 104
102 std::span<u8> BindMappedUniformBuffer([[maybe_unused]] size_t stage, 105 std::span<u8> BindMappedUniformBuffer([[maybe_unused]] size_t stage,
103 [[maybe_unused]] u32 binding_index, u32 size) { 106 [[maybe_unused]] u32 binding_index, u32 size) {
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index 9482e91b0..5734f51e5 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -350,6 +350,7 @@ PipelineCache::PipelineCache(RasterizerVulkan& rasterizer_, const Device& device
350 .has_broken_spirv_subgroup_mask_vector_extract_dynamic = 350 .has_broken_spirv_subgroup_mask_vector_extract_dynamic =
351 driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY}; 351 driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY};
352 host_info = Shader::HostTranslateInfo{ 352 host_info = Shader::HostTranslateInfo{
353 .support_float64 = device.IsFloat64Supported(),
353 .support_float16 = device.IsFloat16Supported(), 354 .support_float16 = device.IsFloat16Supported(),
354 .support_int64 = device.IsShaderInt64Supported(), 355 .support_int64 = device.IsShaderInt64Supported(),
355 .needs_demote_reorder = 356 .needs_demote_reorder =
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp
index afcf34fba..d3cddac69 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.cpp
+++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp
@@ -231,7 +231,12 @@ void Swapchain::CreateSwapchain(const VkSurfaceCapabilitiesKHR& capabilities, bo
231 .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE, 231 .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE,
232 .queueFamilyIndexCount = 0, 232 .queueFamilyIndexCount = 0,
233 .pQueueFamilyIndices = nullptr, 233 .pQueueFamilyIndices = nullptr,
234#ifdef ANDROID
235 // On Android, do not allow surface rotation to deviate from the frontend.
236 .preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR,
237#else
234 .preTransform = capabilities.currentTransform, 238 .preTransform = capabilities.currentTransform,
239#endif
235 .compositeAlpha = alpha_flags, 240 .compositeAlpha = alpha_flags,
236 .presentMode = present_mode, 241 .presentMode = present_mode,
237 .clipped = VK_FALSE, 242 .clipped = VK_FALSE,
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp
index 0158b6b0d..a46f9beed 100644
--- a/src/video_core/vulkan_common/vulkan_device.cpp
+++ b/src/video_core/vulkan_common/vulkan_device.cpp
@@ -386,6 +386,8 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR
386 IsFormatSupported(VK_FORMAT_D24_UNORM_S8_UINT, 386 IsFormatSupported(VK_FORMAT_D24_UNORM_S8_UINT,
387 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, FormatType::Optimal); 387 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, FormatType::Optimal);
388 388
389 supports_conditional_barriers = !(is_intel_anv || is_intel_windows);
390
389 CollectPhysicalMemoryInfo(); 391 CollectPhysicalMemoryInfo();
390 CollectToolingInfo(); 392 CollectToolingInfo();
391 393
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index d62a103a1..f314d0ffe 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -300,6 +300,11 @@ public:
300 return GetDriverID() != VK_DRIVER_ID_QUALCOMM_PROPRIETARY; 300 return GetDriverID() != VK_DRIVER_ID_QUALCOMM_PROPRIETARY;
301 } 301 }
302 302
303 /// Returns true if the device suppors float64 natively.
304 bool IsFloat64Supported() const {
305 return features.features.shaderFloat64;
306 }
307
303 /// Returns true if the device supports float16 natively. 308 /// Returns true if the device supports float16 natively.
304 bool IsFloat16Supported() const { 309 bool IsFloat16Supported() const {
305 return features.shader_float16_int8.shaderFloat16; 310 return features.shader_float16_int8.shaderFloat16;
@@ -580,6 +585,10 @@ public:
580 return properties.properties.limits.maxVertexInputBindings; 585 return properties.properties.limits.maxVertexInputBindings;
581 } 586 }
582 587
588 bool SupportsConditionalBarriers() const {
589 return supports_conditional_barriers;
590 }
591
583private: 592private:
584 /// Checks if the physical device is suitable and configures the object state 593 /// Checks if the physical device is suitable and configures the object state
585 /// with all necessary info about its properties. 594 /// with all necessary info about its properties.
@@ -683,6 +692,7 @@ private:
683 bool must_emulate_bgr565{}; ///< Emulates BGR565 by swizzling RGB565 format. 692 bool must_emulate_bgr565{}; ///< Emulates BGR565 by swizzling RGB565 format.
684 bool dynamic_state3_blending{}; ///< Has all blending features of dynamic_state3. 693 bool dynamic_state3_blending{}; ///< Has all blending features of dynamic_state3.
685 bool dynamic_state3_enables{}; ///< Has all enables features of dynamic_state3. 694 bool dynamic_state3_enables{}; ///< Has all enables features of dynamic_state3.
695 bool supports_conditional_barriers{}; ///< Allows barriers in conditional control flow.
686 u64 device_access_memory{}; ///< Total size of device local memory in bytes. 696 u64 device_access_memory{}; ///< Total size of device local memory in bytes.
687 u32 sets_per_pool{}; ///< Sets per Description Pool 697 u32 sets_per_pool{}; ///< Sets per Description Pool
688 698
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 6288fef62..bac9dff90 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -101,6 +101,12 @@ const std::map<Settings::RendererBackend, QString> Config::renderer_backend_text
101 {Settings::RendererBackend::Null, QStringLiteral(QT_TRANSLATE_NOOP("GMainWindow", "Null"))}, 101 {Settings::RendererBackend::Null, QStringLiteral(QT_TRANSLATE_NOOP("GMainWindow", "Null"))},
102}; 102};
103 103
104const std::map<Settings::ShaderBackend, QString> Config::shader_backend_texts_map = {
105 {Settings::ShaderBackend::GLSL, QStringLiteral(QT_TRANSLATE_NOOP("GMainWindow", "GLSL"))},
106 {Settings::ShaderBackend::GLASM, QStringLiteral(QT_TRANSLATE_NOOP("GMainWindow", "GLASM"))},
107 {Settings::ShaderBackend::SPIRV, QStringLiteral(QT_TRANSLATE_NOOP("GMainWindow", "SPIRV"))},
108};
109
104// This shouldn't have anything except static initializers (no functions). So 110// This shouldn't have anything except static initializers (no functions). So
105// QKeySequence(...).toString() is NOT ALLOWED HERE. 111// QKeySequence(...).toString() is NOT ALLOWED HERE.
106// This must be in alphabetical order according to action name as it must have the same order as 112// This must be in alphabetical order according to action name as it must have the same order as
@@ -754,6 +760,7 @@ void Config::ReadRendererValues() {
754 ReadGlobalSetting(Settings::values.use_fast_gpu_time); 760 ReadGlobalSetting(Settings::values.use_fast_gpu_time);
755 ReadGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache); 761 ReadGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
756 ReadGlobalSetting(Settings::values.enable_compute_pipelines); 762 ReadGlobalSetting(Settings::values.enable_compute_pipelines);
763 ReadGlobalSetting(Settings::values.use_video_framerate);
757 ReadGlobalSetting(Settings::values.bg_red); 764 ReadGlobalSetting(Settings::values.bg_red);
758 ReadGlobalSetting(Settings::values.bg_green); 765 ReadGlobalSetting(Settings::values.bg_green);
759 ReadGlobalSetting(Settings::values.bg_blue); 766 ReadGlobalSetting(Settings::values.bg_blue);
@@ -1409,6 +1416,7 @@ void Config::SaveRendererValues() {
1409 WriteGlobalSetting(Settings::values.use_fast_gpu_time); 1416 WriteGlobalSetting(Settings::values.use_fast_gpu_time);
1410 WriteGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache); 1417 WriteGlobalSetting(Settings::values.use_vulkan_driver_pipeline_cache);
1411 WriteGlobalSetting(Settings::values.enable_compute_pipelines); 1418 WriteGlobalSetting(Settings::values.enable_compute_pipelines);
1419 WriteGlobalSetting(Settings::values.use_video_framerate);
1412 WriteGlobalSetting(Settings::values.bg_red); 1420 WriteGlobalSetting(Settings::values.bg_red);
1413 WriteGlobalSetting(Settings::values.bg_green); 1421 WriteGlobalSetting(Settings::values.bg_green);
1414 WriteGlobalSetting(Settings::values.bg_blue); 1422 WriteGlobalSetting(Settings::values.bg_blue);
diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h
index ad590ea9e..0fd4baf6b 100644
--- a/src/yuzu/configuration/config.h
+++ b/src/yuzu/configuration/config.h
@@ -54,6 +54,7 @@ public:
54 static const std::map<bool, QString> use_docked_mode_texts_map; 54 static const std::map<bool, QString> use_docked_mode_texts_map;
55 static const std::map<Settings::GPUAccuracy, QString> gpu_accuracy_texts_map; 55 static const std::map<Settings::GPUAccuracy, QString> gpu_accuracy_texts_map;
56 static const std::map<Settings::RendererBackend, QString> renderer_backend_texts_map; 56 static const std::map<Settings::RendererBackend, QString> renderer_backend_texts_map;
57 static const std::map<Settings::ShaderBackend, QString> shader_backend_texts_map;
57 58
58 static constexpr UISettings::Theme default_theme{ 59 static constexpr UISettings::Theme default_theme{
59#ifdef _WIN32 60#ifdef _WIN32
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index 896863f87..0463ac8b9 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -42,6 +42,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
42 Settings::values.use_vulkan_driver_pipeline_cache.GetValue()); 42 Settings::values.use_vulkan_driver_pipeline_cache.GetValue());
43 ui->enable_compute_pipelines_checkbox->setChecked( 43 ui->enable_compute_pipelines_checkbox->setChecked(
44 Settings::values.enable_compute_pipelines.GetValue()); 44 Settings::values.enable_compute_pipelines.GetValue());
45 ui->use_video_framerate_checkbox->setChecked(Settings::values.use_video_framerate.GetValue());
45 46
46 if (Settings::IsConfiguringGlobal()) { 47 if (Settings::IsConfiguringGlobal()) {
47 ui->gpu_accuracy->setCurrentIndex( 48 ui->gpu_accuracy->setCurrentIndex(
@@ -91,6 +92,8 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
91 ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_compute_pipelines, 92 ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_compute_pipelines,
92 ui->enable_compute_pipelines_checkbox, 93 ui->enable_compute_pipelines_checkbox,
93 enable_compute_pipelines); 94 enable_compute_pipelines);
95 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_video_framerate,
96 ui->use_video_framerate_checkbox, use_video_framerate);
94} 97}
95 98
96void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) { 99void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
@@ -125,6 +128,8 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
125 Settings::values.max_anisotropy.UsingGlobal()); 128 Settings::values.max_anisotropy.UsingGlobal());
126 ui->enable_compute_pipelines_checkbox->setEnabled( 129 ui->enable_compute_pipelines_checkbox->setEnabled(
127 Settings::values.enable_compute_pipelines.UsingGlobal()); 130 Settings::values.enable_compute_pipelines.UsingGlobal());
131 ui->use_video_framerate_checkbox->setEnabled(
132 Settings::values.use_video_framerate.UsingGlobal());
128 133
129 return; 134 return;
130 } 135 }
@@ -149,6 +154,9 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
149 ConfigurationShared::SetColoredTristate(ui->enable_compute_pipelines_checkbox, 154 ConfigurationShared::SetColoredTristate(ui->enable_compute_pipelines_checkbox,
150 Settings::values.enable_compute_pipelines, 155 Settings::values.enable_compute_pipelines,
151 enable_compute_pipelines); 156 enable_compute_pipelines);
157 ConfigurationShared::SetColoredTristate(ui->use_video_framerate_checkbox,
158 Settings::values.use_video_framerate,
159 use_video_framerate);
152 ConfigurationShared::SetColoredComboBox( 160 ConfigurationShared::SetColoredComboBox(
153 ui->gpu_accuracy, ui->label_gpu_accuracy, 161 ui->gpu_accuracy, ui->label_gpu_accuracy,
154 static_cast<int>(Settings::values.gpu_accuracy.GetValue(true))); 162 static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
diff --git a/src/yuzu/configuration/configure_graphics_advanced.h b/src/yuzu/configuration/configure_graphics_advanced.h
index 1c7b636b9..a4dc8ceb0 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.h
+++ b/src/yuzu/configuration/configure_graphics_advanced.h
@@ -47,6 +47,7 @@ private:
47 ConfigurationShared::CheckState use_fast_gpu_time; 47 ConfigurationShared::CheckState use_fast_gpu_time;
48 ConfigurationShared::CheckState use_vulkan_driver_pipeline_cache; 48 ConfigurationShared::CheckState use_vulkan_driver_pipeline_cache;
49 ConfigurationShared::CheckState enable_compute_pipelines; 49 ConfigurationShared::CheckState enable_compute_pipelines;
50 ConfigurationShared::CheckState use_video_framerate;
50 51
51 const Core::System& system; 52 const Core::System& system;
52}; 53};
diff --git a/src/yuzu/configuration/configure_graphics_advanced.ui b/src/yuzu/configuration/configure_graphics_advanced.ui
index 37757a918..e7f0ef6be 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.ui
+++ b/src/yuzu/configuration/configure_graphics_advanced.ui
@@ -192,6 +192,16 @@ Compute pipelines are always enabled on all other drivers.</string>
192 </widget> 192 </widget>
193 </item> 193 </item>
194 <item> 194 <item>
195 <widget class="QCheckBox" name="use_video_framerate_checkbox">
196 <property name="toolTip">
197 <string>Run the game at normal speed during video playback, even when the framerate is unlocked.</string>
198 </property>
199 <property name="text">
200 <string>Sync to framerate of video playback</string>
201 </property>
202 </widget>
203 </item>
204 <item>
195 <widget class="QWidget" name="af_layout" native="true"> 205 <widget class="QWidget" name="af_layout" native="true">
196 <layout class="QHBoxLayout" name="horizontalLayout_1"> 206 <layout class="QHBoxLayout" name="horizontalLayout_1">
197 <property name="leftMargin"> 207 <property name="leftMargin">
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 145fea5f1..013715b44 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -3067,7 +3067,7 @@ InstallResult GMainWindow::InstallNSPXCI(const QString& filename) {
3067 return false; 3067 return false;
3068 } 3068 }
3069 3069
3070 std::array<u8, 0x1000> buffer{}; 3070 std::vector<u8> buffer(1_MiB);
3071 3071
3072 for (std::size_t i = 0; i < src->GetSize(); i += buffer.size()) { 3072 for (std::size_t i = 0; i < src->GetSize(); i += buffer.size()) {
3073 if (install_progress->wasCanceled()) { 3073 if (install_progress->wasCanceled()) {
@@ -4116,7 +4116,13 @@ void GMainWindow::UpdateDockedButton() {
4116void GMainWindow::UpdateAPIText() { 4116void GMainWindow::UpdateAPIText() {
4117 const auto api = Settings::values.renderer_backend.GetValue(); 4117 const auto api = Settings::values.renderer_backend.GetValue();
4118 const auto renderer_status_text = Config::renderer_backend_texts_map.find(api)->second; 4118 const auto renderer_status_text = Config::renderer_backend_texts_map.find(api)->second;
4119 renderer_status_button->setText(renderer_status_text.toUpper()); 4119 renderer_status_button->setText(
4120 api == Settings::RendererBackend::OpenGL
4121 ? tr("%1 %2").arg(
4122 renderer_status_text.toUpper(),
4123 Config::shader_backend_texts_map.find(Settings::values.shader_backend.GetValue())
4124 ->second)
4125 : renderer_status_text.toUpper());
4120} 4126}
4121 4127
4122void GMainWindow::UpdateFilterText() { 4128void GMainWindow::UpdateFilterText() {