diff options
252 files changed, 11469 insertions, 10110 deletions
diff --git a/.ci/scripts/linux/docker.sh b/.ci/scripts/linux/docker.sh index c8bc56c9a..7f6d2ad1b 100755 --- a/.ci/scripts/linux/docker.sh +++ b/.ci/scripts/linux/docker.sh @@ -22,6 +22,7 @@ cmake .. \ -DUSE_DISCORD_PRESENCE=ON \ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} \ -DYUZU_USE_BUNDLED_FFMPEG=ON \ + -DYUZU_ENABLE_LTO=ON \ -GNinja ninja diff --git a/CMakeLists.txt b/CMakeLists.txt index 6932b6fab..561eaafb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -210,7 +210,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) # ======================================================================= # Enforce the search mode of non-required packages for better and shorter failure messages -find_package(Boost 1.73.0 REQUIRED context) +find_package(Boost 1.79.0 REQUIRED context) find_package(enet 1.3 MODULE) find_package(fmt 9 REQUIRED) find_package(inih 52 MODULE COMPONENTS INIReader) @@ -222,7 +222,7 @@ find_package(ZLIB 1.2 REQUIRED) find_package(zstd 1.5 REQUIRED) if (NOT YUZU_USE_EXTERNAL_VULKAN_HEADERS) - find_package(Vulkan 1.3.238 REQUIRED) + find_package(Vulkan 1.3.246 REQUIRED) endif() if (ENABLE_LIBUSB) diff --git a/dist/languages/ca.ts b/dist/languages/ca.ts index 7ab6c106c..b4e77d029 100644 --- a/dist/languages/ca.ts +++ b/dist/languages/ca.ts @@ -372,36 +372,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> + <source>Output Device:</source> <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Dispositiu d'entrada</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Estèreo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Envoltant</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Utilitza el volum global</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Configurar volum:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volum:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Silenciar l'à udio quan estigui en segon plà </translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1367,26 +1392,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Silenciar l'à udio quan estigui en segon plà </translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Ocultar el cursor del ratolà en cas d'inactivitat</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Reiniciar tots els parà metres</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Això restablirà tota la configuració i eliminarà totes les configuracions dels jocs. No eliminarà ni els directoris de jocs, ni els perfils, ni els perfils dels controladors. Procedir?</translation> </message> @@ -3819,60 +3839,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Estèreo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Envoltant</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID de la consola:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Mode de sortida del so</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regenerar</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Els parà metres del sistema només estan disponibles quan el joc no s'està executant.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Això reemplaçarà la seva Switch virtual actual amb una nova. La seva Switch virtual actual no serà recuperable. Això podria tenir efectes inesperats en els jocs. Això pot fallar si fa servir una partida guardada amb una configuració desactualitzada. Continuar?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>AvÃs</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID de la consola: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4560,555 +4535,555 @@ Arrossegui els punts per a canviar la posició, o faci doble clic a les cel·les <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Es recullen dades anònimes</a> per ajudar a millorar yuzu. <br/><br/>Desitja compartir les seves dades d'ús amb nosaltres?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Carregant Web applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Desactivar el Web Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>Desactivar l'Applet Web pot provocar comportaments indefinits i només hauria d'utilitzar-se amb Super Mario 3D All-Stars. Està s segur de que vols desactivar l'Applet Web? (Això pot ser reactivat als parà metres Debug.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>La quantitat de shaders que s'estan compilant actualment</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>El multiplicador d'escala de resolució seleccionat actualment.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Velocitat d'emulació actual. Valors superiors o inferiors a 100% indiquen que l'emulació s'està executant més rà pidament o més lentament que a la Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Quants fotogrames per segon està mostrant el joc actualment. Això variarà d'un joc a un altre i d'una escena a una altra.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Temps que costa emular un fotograma de la Switch, sense tenir en compte la limitació de fotogrames o la sincronització vertical. Per a una emulació òptima, aquest valor hauria de ser com a mà xim de 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Esborrar arxius recents</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pausar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu està executant un joc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Advertència format del joc desfasat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Està utilitzant el format de directori de ROM deconstruït per a aquest joc, que és un format desactualitzat que ha sigut reemplaçat per altres, com NCA, NAX, XCI o NSP. Els directoris de ROM deconstruïts careixen d'icones, metadades i suport d'actualitzacions.<br><br>Per a obtenir una explicació dels diversos formats de Switch que suporta yuzu,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>faci una ullada a la nostra wiki</a>. Aquest missatge no es tornarà a mostrar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Error carregant la ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>El format de la ROM no està suportat.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>S'ha produït un error inicialitzant el nucli de vÃdeo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu ha trobat un error mentre executava el nucli de vÃdeo. Això sol ser causat per controladors de la GPU obsolets, inclosos els integrats. Si us plau, consulti el registre per a més detalls. Per obtenir més informació sobre com accedir al registre, consulti la següent pà gina: <a href='https://yuzu-emu.org/help/reference/log-files/'>Com carregar el fitxer de registre</a>. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Error al carregar la ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Si us plau, segueixi <a href='https://yuzu-emu.org/help/quickstart/'>la guia d'inici de yuzu</a> per a bolcar de nou els seus fitxers.<br>Pot consultar la wiki de yuzu wiki</a> o el Discord de yuzu</a> per obtenir ajuda.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>S'ha produït un error desconegut. Si us plau, consulti el registre per a més detalls.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Dades de partides guardades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Dades de mods</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Error obrint la carpeta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>La carpeta no existeix!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Error obrint la cache transferible de shaders</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>No s'ha pogut crear el directori de la cache dels shaders per aquest tÃtol.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Eliminar entrada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>S'ha eliminat correctament</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>S'ha eliminat correctament el joc base instal·lat.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>El joc base no està instal·lat a la NAND i no pot ser eliminat.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>S'ha eliminat correctament l'actualització instal·lada.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>No hi ha cap actualització instal·lada per aquest tÃtol.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>No hi ha cap DLC instal·lat per aquest tÃtol.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>S'ha eliminat correctament %1 DLC instal·lat/s.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Desitja eliminar la cache transferible de shaders d'OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Desitja eliminar la cache transferible de shaders de Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Desitja eliminar totes les caches transferibles de shaders?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Desitja eliminar la configuració personalitzada del joc?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Eliminar arxiu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Error eliminant la cache transferible de shaders</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>No existeix una cache de shaders per aquest tÃtol.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>S'ha eliminat correctament la cache transferible de shaders.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>No s'ha pogut eliminar la cache transferible de shaders.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Error al eliminar les caches de shaders transferibles</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>Caches de shaders transferibles eliminades correctament.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>No s'ha pogut eliminar el directori de caches de shaders transferibles.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Error eliminant la configuració personalitzada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>No existeix una configuració personalitzada per aquest joc.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>S'ha eliminat correctament la configuració personalitzada del joc.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>No s'ha pogut eliminar la configuració personalitzada del joc.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>La extracció de RomFS ha fallat!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>S'ha produït un error copiant els arxius RomFS o l'usuari ha cancel·lat la operació.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Completa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Esquelet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Seleccioni el mode de bolcat de RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Si us plau, seleccioni la forma en que desitja bolcar la RomFS.<br>Completa copiarà tots els arxius al nou directori mentre que<br>esquelet només crearà l'estructura de directoris.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>No hi ha suficient espai lliure a %1 per extreure el RomFS. Si us plau, alliberi espai o esculli un altre directori de bolcat a Emulació > Configuració > Sistema > Sistema d'arxius > Carpeta arrel de bolcat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Extraient RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Cancel·la</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Extracció de RomFS completada correctament!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>L'operació s'ha completat correctament.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Error obrint %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Seleccionar directori</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Propietats</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Les propietats del joc no s'han pogut carregar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Executable de Switch (%1);;Tots els Arxius (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Carregar arxiu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Obrir el directori de la ROM extreta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Directori seleccionat invà lid</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>El directori que ha seleccionat no conté un arxiu 'main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Arxiu de Switch Instal·lable (*.nca *.nsp *.xci);;Arxiu de Continguts Nintendo (*.nca);;Paquet d'enviament Nintendo (*.nsp);;Imatge de Cartutx NX (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Instal·lar arxius</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n arxiu(s) restants</numerusform><numerusform>%n arxiu(s) restants</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Instal·lant arxiu "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Resultats instal·lació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Per evitar possibles conflictes, no recomanem als usuaris que instal·lin jocs base a la NAND. Si us plau, utilitzi aquesta funció només per a instal·lar actualitzacions i DLCs.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n nou(s) arxiu(s) s'ha(n) instal·lat @@ -5116,7 +5091,7 @@ Si us plau, utilitzi aquesta funció només per a instal·lar actualitzacions i </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n arxiu(s) s'han sobreescrit @@ -5124,7 +5099,7 @@ Si us plau, utilitzi aquesta funció només per a instal·lar actualitzacions i </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n arxiu(s) no s'han instal·lat @@ -5132,388 +5107,388 @@ Si us plau, utilitzi aquesta funció només per a instal·lar actualitzacions i </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Aplicació del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Arxiu del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Actualització de l'aplicació del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Paquet de firmware (Tipus A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Paquet de firmware (Tipus B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Joc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Actualització de joc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC del joc</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>TÃtol delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Seleccioni el tipus d'instal·lació NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Seleccioni el tipus de tÃtol que desitja instal·lar aquest NCA com a: (En la majoria dels casos, el valor predeterminat 'Joc' està bé.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Ha fallat la instal·lació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>El tipus de tÃtol seleccionat per el NCA és invà lid.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Arxiu no trobat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Arxiu "%1" no trobat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>D'acord</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Falta el compte de yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Per tal d'enviar un cas de prova de compatibilitat de joc, ha de vincular el seu compte de yuzu.<br><br/>Per a vincular el seu compte de yuzu, vagi a Emulació & gt; Configuració & gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Error obrint URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>No es pot obrir la URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Gravació TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Sobreescriure l'arxiu del jugador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Configuració invà lida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>El controlador del mode portà til no es pot fer servir en el mode acoblat. Es seleccionarà el controlador Pro en el seu lloc.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>L'amiibo actual ha sigut eliminat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>El joc actual no està buscant amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Arxiu Amiibo (%1);; Tots els Arxius (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Carregar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Error al carregar les dades d'Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Captura de pantalla</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Imatge PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>Estat TAS: executant %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>Estat TAS: gravant %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>Estat TAS: inactiu %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>Estat TAS: invà lid</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Parar l'execució</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>Parar g&ravació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>G&ravar</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Construint: %n shader(s)</numerusform><numerusform>Construint: %n shader(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Escala: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Velocitat: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Velocitat: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Joc: %1 FPS (desbloquejat)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Joc: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Fotograma: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU ALTA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTREMA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>ERROR GPU</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>MÉS PROPER</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICÚBIC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIÀ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>SENSE AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Confirmi la clau de rederivació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5530,37 +5505,37 @@ i opcionalment faci còpies de seguretat. Això eliminarà els arxius de les claus generats automà ticament i tornarà a executar el mòdul de derivació de claus.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Falten fusibles</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation> - Falta BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - Falta BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - Falta PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Falten components de derivació</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Falten les claus d'encriptació. <br>Si us plau, segueixi <a href='https://yuzu-emu.org/help/quickstart/'>la guia rà pida de yuzu</a> per a obtenir totes les seves claus, firmware i jocs.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5569,39 +5544,39 @@ Això pot prendre fins a un minut depenent del rendiment del seu sistema.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Derivant claus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Seleccioni el destinatari per a bolcar el RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Si us plau, seleccioni quin RomFS desitja bolcar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Està segur de que vol tancar yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Està segur de que vol aturar l'emulació? Qualsevol progrés no guardat es perdrà .</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7600,28 +7575,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Codi d'error: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>S'ha produït un error. Si us plau, intenti-ho de nou o contacti el desenvolupador del programari.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>S'ha produït un error a %1 a les %2. Si us plau, intenti-ho de nou o contacti el desenvolupador del programari.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7645,20 +7620,81 @@ Si us plau, intenti-ho de nou o contacti el desenvolupador del programari.</tran %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Seleccioni un usuari:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Usuaris</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Selector de perfil</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Seleccioni un usuari:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7708,51 +7744,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Pila de trucades</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>esperant el mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>té receptors: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>mà nec del propietari: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>esperant tots els objectes</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>esperant un dels següents objectes</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>esperat per cap fil</translation> </message> @@ -7760,120 +7765,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>executable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>pausat</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>dormint</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>esperant per resposta IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>esperant objectes</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>esperant variable condicional</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>esperant al à rbitre d'adreça</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>esperant reanudar la suspensió</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>esperant</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>inicialitzat</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>acabat</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>desconegut</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>nucli %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processador = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>nucli ideal = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>mà scara d'afinitat = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>id fil = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioritat = %1(actual) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>últims ticks consecutius = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>no esperant per mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>esperat per fil</translation> </message> @@ -7881,7 +7876,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>Arbre d'&espera</translation> </message> diff --git a/dist/languages/cs.ts b/dist/languages/cs.ts index eb54bd162..b1b12c019 100644 --- a/dist/languages/cs.ts +++ b/dist/languages/cs.ts @@ -372,36 +372,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> + <source>Output Device:</source> <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Vstupnà zaÅ™ÃzenÃ</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>PoužÃt globálnà hlasitost</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Nastavit hlasitost:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Hlasitost:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1359,26 +1384,21 @@ Tato možnost zlepÅ¡uje rychlost dÃky závislosti na sémantice cmpxchg pro zaj </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Skrýt myÅ¡ pÅ™i neaktivitÄ›</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Resetovat vÅ¡echna nastavenÃ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Toto vyresetuje vÅ¡echna nastavenà a odstranà konfigurace pro jednotlivé hry. Složky s hrami a profily zůstanou zachovány. PÅ™ejete si pokraÄovat?</translation> </message> @@ -3811,60 +3831,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID Konzole:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Mód výstupu zvuku</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>PÅ™egenerovat</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Systémová nastavenà jsou dostupná pouze, pokud hra neběžÃ.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Toto vymÄ›nà váš virtuálnà Switch za nový. Váš aktuálnà virtuálnà Switch nebude možno navrátit. Tohle může mÃt neÄekané následky ve hrách. Tohle může selhat pokud použijete starý konfig savu. PokraÄovat?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>VarovánÃ</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID Konzole: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4552,953 +4527,953 @@ TáhnÄ›te body pro zmÄ›nu pozice nebo dvojitÄ› kliknÄ›te na buňky tabulky pro z <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymnà data jsou sbÃrána</a> pro vylepÅ¡enà yuzu. <br/><br/>Chcete s námi sdÃlet anonymnà data?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>NaÄÃtánà Web Appletu...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Zakázat Web Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>PoÄet aktuálnÄ› sestavovaných shaderů</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Aktuálnà emulaÄnà rychlost. Hodnoty vyššà než 100% indikujÃ, že emulace běžà rychleji nebo pomaleji než na Switchi.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Kolik snÃmků za sekundu aktuálnÄ› hra zobrazuje. Tohle závisà na hÅ™e od hry a scény od scény.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>ÄŒas potÅ™ebný na emulaci framu scény, nepoÄÃtá se limit nebo v-sync. Pro plnou rychlost by se tohle mÄ›lo pohybovat okolo 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Vymazat poslednà soubory</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&PokraÄovat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pauza</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Varovánà Zastaralý Formát Hry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>PoužÃváte rozbalený formát hry, který je zastaralý a byl nahrazen jinými jako NCA, NAX, XCI, nebo NSP. Rozbalená ROM nemá ikony, metadata, a podporu updatů.<br><br>Pro vysvÄ›tlenà vÅ¡ech možných podporovaných typů, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>zkoukni našà wiki</a>. Tato zpráva se nebude znova zobrazovat.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Chyba pÅ™i naÄÃtánà ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Tento formát ROM nenà podporován.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Nastala chyba pÅ™i inicializaci jádra videa.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Chyba pÅ™i naÄÃtánà ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Pro extrakci souborů postupujte podle <a href='https://yuzu-emu.org/help/quickstart/'>rychlého průvodce yuzu</a>. NápovÄ›du naleznete na <br>wiki</a> nebo na Discordu</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Nastala chyba. Koukni do logu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Uložit data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Módovat Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Chyba otevÃránà složky %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Složka neexistuje!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Chyba pÅ™i otevÃránà pÅ™enositelné mezipamÄ›ti shaderů</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Odebrat položku</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>ÚspěšnÄ› odebráno</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>ÚspěšnÄ› odebrán nainstalovaný základ hry.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Základ hry nenà nainstalovaný na NAND a nemůže být odstranÄ›n.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>ÚspěšnÄ› odebrána nainstalovaná aktualizace.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Nenà nainstalovaná žádná aktualizace pro tento titul.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Nenà nainstalované žádné DLC pro tento titul.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>ÚspěšnÄ› odstranÄ›no %1 nainstalovaných DLC.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Odstranit vlastnà konfiguraci hry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Odstranit soubor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Chyba pÅ™i odstraňovánà pÅ™enositelné mezipamÄ›ti shaderů</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Mezipaměť shaderů pro tento titul neexistuje.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>PÅ™enositelná mezipaměť shaderů úspěšnÄ› odstranÄ›na</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>NepodaÅ™ilo se odstranit pÅ™enositelnou mezipaměť shaderů</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Chyba pÅ™i odstraňovánà vlastnà konfigurace hry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Vlastnà konfigurace hry pro tento titul neexistuje.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>ÚspěšnÄ› odstranÄ›na vlastnà konfigurace hry.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>NepodaÅ™ilo se odstranit vlastnà konfiguraci hry.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Extrakce RomFS se nepovedla!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Nastala chyba pÅ™i kopÃrovánà RomFS souborů, nebo uživatel operaci zruÅ¡il.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Plný</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Kostra</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Vyber RomFS Dump Mode</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Vyber jak by si chtÄ›l RomFS vypsat.<br>Plné zkopÃruje úplnÄ› vÅ¡echno, ale<br>kostra zkopÃruje jen strukturu složky.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Extrahuji RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>ZruÅ¡it</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Extrakce RomFS se povedla!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Operace byla dokonÄena úspěšnÄ›.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Chyba pÅ™i otevÃránà %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Vybraná Složka</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Vlastnosti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Hernà vlastnosti nemohly být naÄteny.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch Executable (%1);;VÅ¡echny soubory (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>NaÄÃst soubor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>OtevÅ™Ãt složku s extrahovanou ROM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Vybraná složka je neplatná</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Složka kterou jste vybrali neobsahuje soubor "main"</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Instalovatelný soubor pro Switch (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Instalovat Soubory</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Instalovánà souboru "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Výsledek instalace</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Abychom pÅ™edeÅ¡li možným konfliktům, nedoporuÄujeme uživatelům instalovat základnà hry na paměť NAND. Tuto funkci prosÃm použÃvejte pouze k instalaci aktualizacà a DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Systémová Aplikace</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Systémový archÃv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Systémový Update Aplikace</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Firmware-ový baliÄek (Typu A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Firmware-ový baliÄek (Typu B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Hra</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Update Hry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Hernà DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta Title</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Vyberte typ instalace NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Vyberte typ title-u, který chcete nainstalovat tenhle NCA jako: (VÄ›tÅ¡inou základnà "game" staÄÃ.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Chyba v instalaci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Tento typ pro tento NCA nenà platný.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Soubor nenalezen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Soubor "%1" nenalezen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Chybà úÄet yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Pro pÅ™idánà recenze kompatibility je tÅ™eba mÃt úÄet yuzu<br><br/>Pro nalinkovánà yuzu úÄtu jdi do Emulace &gt; Konfigurace &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Chyba pÅ™i otevÃránà URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Nelze otevÅ™Ãt URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>ZjiÅ¡tÄ›no neplatné nastavenÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>RuÄnà ovladaÄ nelze použÃvat v dokovacÃm režimu. Bude vybrán ovladaÄ Pro Controller.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Soubor Amiibo (%1);; VÅ¡echny Soubory (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>NaÄÃst Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Chyba naÄÃtánà Amiiba</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>PoÅ™Ãdit SnÃmek Obrazovky</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG Image (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Rychlost: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Rychlost: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Hra: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMÃLNÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU VYSOKÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTRÉMNÃ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU ERROR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>PotvÄte Rederivaci KlÃÄů</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5515,37 +5490,37 @@ a udÄ›lejte si zálohu. Toto vymaže vÄ›echny vaÅ¡e automaticky generované klÃÄe a znova spustà modul derivace klÃÄů.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Chybà Fuses</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- Chybà BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - Chybà BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - Chybà PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Chybé odvozené komponenty</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5554,39 +5529,39 @@ Tohle může zabrat až minutu podle výkonu systému.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Derivuji KlÃÄe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Vyberte CÃl vypsanà RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Vyberte, kterou RomFS chcete vypsat.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Jste si jist, že chcete zavÅ™Ãt yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Jste si jist, že chcete ukonÄit emulaci? Jakýkolic neuložený postup bude ztracen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7584,28 +7559,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Kód chyby: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>DoÅ¡lo k chybÄ›. Zkuste to prosÃm znovu nebo kontaktujte vývojáře softwaru.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>V %1 na %2 doÅ¡lo k chybÄ›. Zkuste to prosÃm znovu nebo kontaktujte vývojáře softwaru.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7629,20 +7604,81 @@ Zkuste to prosÃm znovu nebo kontaktujte vývojáře softwaru.</translation> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Vyber Uživatele:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Uživatelé</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Profilový Manažer</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Vyber Uživatele:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7692,51 +7728,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Call stack</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>waiting for mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>has waiters: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>owner handle: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>waiting for all objects</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>waiting for one of the following objects</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>Äekánà bez pÅ™iÅ™azeného vlákna</translation> </message> @@ -7744,120 +7749,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>spustitelné</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>pauznuto</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>spÃcÃ</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>Äekánà na odpovÄ›d IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>waiting for objects</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>Äekánà na promÄ›nnou podmÃnky</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>waiting for address arbiter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>Äekánà na obnovenà pozastavenÃ</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>ÄekánÃ</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>inicializováno</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>ukonÄeno</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>neznámý</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideálnÃ</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>jádro %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>procesor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ideálnà jádro = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>affinity mask = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>id vlákna = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>priorita = %1(aktuálnÃ) / %2(normálnÃ)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>last running ticks = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>not waiting for mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>waited by thread</translation> </message> @@ -7865,7 +7860,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>Ř&etÄ›zec ÄekánÃ</translation> </message> diff --git a/dist/languages/da.ts b/dist/languages/da.ts index 537a3afe8..7c43ff7df 100644 --- a/dist/languages/da.ts +++ b/dist/languages/da.ts @@ -380,36 +380,61 @@ Dette vil bandlyse bÃ¥de vedkommendes forum-brugernavn og IP-adresse.</translati </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Udgangsenhed</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Indgangsenhed</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Benyt global lydstyrke</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Angiv lydstyrke:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Lydstyrke:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Gør lydløs, nÃ¥r i baggrunden</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1375,26 +1400,21 @@ Dette vil bandlyse bÃ¥de vedkommendes forum-brugernavn og IP-adresse.</translati </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Gør lydløs, nÃ¥r i baggrunden</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Skjul mus ved inaktivitet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Nulstil Alle Indstillinger</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>dette nulstiller alle indstillinger og fjerner alle pr-spil-konfigurationer. Dette vil ikke slette spilmapper, -profiler, eller input-profiler. Fortsæt?</translation> </message> @@ -3827,60 +3847,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Konsol-ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Lydoutput-tilstand</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regenerér</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Systemindstillinger er kun tilgængelige, nÃ¥r spil ikke kører.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Dette vil erstatte din nuværende virtuelle Switch med en ny. Din nuværende virtuelle Switch vil ikke kunne gendannes. Dette kan have uforudsete konsekvenser i spil. Dette kan fejle, hvis du bruger en forældet konfiguration fra gemte data. Fortsæt?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Advarsel</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Konsol-ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4568,951 +4543,951 @@ Træk punkter, for at skifte position, eller dobbeltklik i tabelceller, for at r <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonym data indsamles</a>, for at hjælp med, at forbedre yuzu. <br/><br/>Kunne du tænke dig, at dele dine brugsdata med os?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Indlæser Net-Applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Deaktivér Net-Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Aktuel emuleringshastighed. Værdier højere eller lavere end 100% indikerer, at emulering kører hurtigere eller langsommere end en Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Advarsel, Forældet Spilformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Fejl under indlæsning af ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>ROM-formatet understøttes ikke.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Der skete en fejl under initialisering af video-kerne.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Fejl ved Ã…bning af %1 Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Mappe eksisterer ikke!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS-Udpakning Mislykkedes!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Der skete en fejl ved kopiering af RomFS-filerne, eller brugeren afbrød opgaven.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Fuld</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Skelet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Vælg RomFS-Nedfældelsestilstand</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Udpakker RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Afbryd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS-Udpakning Lykkedes!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Fuldførelse af opgaven lykkedes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Fejl ved Ã…bning af %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Vælg Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Egenskaber</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Spil-egenskaberne kunne ikke indlæses.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch-Eksekverbar (%1);;Alle filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Indlæs Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Ã…bn Udpakket ROM-Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Ugyldig Mappe Valgt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Installér fil "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Systemapplikation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Systemarkiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Systemapplikationsopdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Firmwarepakke (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Firmwarepakke (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Spil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Spilopdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Spiludvidelse</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta-Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Vælg NCA-Installationstype...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Installation mislykkedes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Fil ikke fundet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Fil "%1" ikke fundet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Manglende yuzu-Konto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo-Fil (%1);; Alle Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Indlæs Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Fejl ved indlæsning af Amiibo-data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Optag Skærmbillede</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG-Billede (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Hastighed: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Hastighed: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Spil: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Billede: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5523,76 +5498,76 @@ This will delete your autogenerated key files and re-run the key derivation modu <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Er du sikker pÃ¥, at du vil lukke yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Er du sikker pÃ¥, at du vil stoppe emulereingen? Enhver ulagret data, vil gÃ¥ tabt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7584,26 +7559,26 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7623,20 +7598,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Vælg en bruger:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Brugere</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Profilvælger</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Vælg en bruger:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7682,51 +7718,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation type="unfinished"/> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation type="unfinished"/> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>ventet af ingen trÃ¥de</translation> </message> @@ -7734,120 +7739,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>sat pÃ¥ pause</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>slumrer</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>venter pÃ¥ IPC-svar</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>venter pÃ¥ objekter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>idéel</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>kerne %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>idéel kerne = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>trÃ¥d-id = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioritet = %1(aktuel) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation type="unfinished"/> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>ventet af trÃ¥d</translation> </message> @@ -7855,7 +7850,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/de.ts b/dist/languages/de.ts index f66024779..a455a3e78 100644 --- a/dist/languages/de.ts +++ b/dist/languages/de.ts @@ -378,36 +378,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Ausgabegerät</translation> + <source>Output Device:</source> + <translation>Ausgabegerät:</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Eingabegerät</translation> + <source>Input Device:</source> + <translation>Eingabegerät:</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Globale Lautstärke verwenden</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Lautstärke:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Lautstärke:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Audio im Hintergrund stummschalten</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1355,26 +1380,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Audio im Hintergrund stummschalten</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Mauszeiger verstecken</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Setze alle Einstellungen zurück</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Hierdurch werden alle Einstellungen zurückgesetzt und alle spielspezifischen Konfigurationen gelöscht. Spiel-Ordner, Profile oder Eingabeprofile werden nicht gelöscht. Fortfahren?</translation> </message> @@ -3339,7 +3359,7 @@ UUID: %2</source> <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="314"/> <location filename="../../src/yuzu/configuration/configure_ringcon.cpp" line="282"/> <source>Not connected</source> - <translation type="unfinished"/> + <translation>Nicht verbunden</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_ringcon.ui" line="344"/> @@ -3807,60 +3827,15 @@ UUID: %2</source> <translation>Gerätename</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Konsolen ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Soundausgabe</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Neu generieren</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Die Systemeinstellungen sind nur verfügbar, wenn kein Spiel aktiv ist.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Dieser Vorgang wird deine momentane "virtuelle Switch" mit einer Neuen ersetzen. Deine momentane "virtuelle Switch" wird nicht wiederherstellbar sein. Dies könnte einige unerwartete Effekte in manchen Spielen mit sich bringen. Zudem könnte der Prozess fehlschlagen, wenn zu alte Daten verwendet werden. Möchtest du den Vorgang fortsetzen?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Warnung</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Konsolen ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4548,554 +4523,554 @@ Ziehe die Punkte mit deiner Maus, um ihre Position zu ändern. Doppelklicke auf <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonyme Daten werden gesammelt,</a> um yuzu zu verbessern.<br/><br/>Möchstest du deine Nutzungsdaten mit uns teilen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetrie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Defekte Vulkan-Installation erkannt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Lade Web-Applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Deaktiviere die Web Applikation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Wie viele Shader im Moment kompiliert werden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Derzeitige Emulations-Geschwindigkeit. Werte höher oder niedriger als 100% zeigen, dass die Emulation scheller oder langsamer läuft als auf einer Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Wie viele Bilder pro Sekunde angezeigt werden variiert von Spiel zu Spiel und von Szene zu Szene. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Zeit, die gebraucht wurde, um einen Switch-Frame zu emulieren, ohne Framelimit oder V-Sync. Für eine Emulation bei voller Geschwindigkeit sollte dieser Wert bei höchstens 16.67ms liegen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Zuletzt geladene Dateien leeren</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Fortsetzen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pause</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu betreibt ein Speil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Warnung veraltetes Spielformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Du nutzt eine entpackte ROM-Ordnerstruktur für dieses Spiel, welches ein veraltetes Format ist und von anderen Formaten wie NCA, NAX, XCI oder NSP überholt wurde. Entpackte ROM-Ordner unterstützen keine Icons, Metadaten oder Updates.<br><br><a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>Unser Wiki</a> enthält eine Erklärung der verschiedenen Formate, die yuzu unterstützt. Diese Nachricht wird nicht noch einmal angezeigt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>ROM konnte nicht geladen werden!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>ROM-Format wird nicht unterstützt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Beim Initialisieren des Video-Kerns ist ein Fehler aufgetreten.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>ROM konnte nicht geladen werden! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Bitte folge der <a href='https://yuzu-emu.org/help/quickstart/'>yuzu-Schnellstart-Anleitung</a> um deine Dateien zu extrahieren.<br>Hilfe findest du im yuzu-Wiki</a> oder dem yuzu-Discord</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Ein unbekannter Fehler ist aufgetreten. Bitte prüfe die Log-Dateien auf mögliche Fehlermeldungen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-Bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-Bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Schließe Software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Speicherdaten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod-Daten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Konnte Verzeichnis %1 nicht öffnen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Verzeichnis existiert nicht!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Fehler beim Öffnen des transferierbaren Shader-Caches</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Fehler beim erstellen des Shader-Cache-Ordner für den ausgewählten Titel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Fehler beim Entfernen des Updates</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Fehler beim Entfernen des DLCs</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Installierten Spiele-Content entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Installierte Spiele-Updates entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Installierte Spiele-DLCs entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Eintrag entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>Erfolgreich entfernt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>Das Spiel wurde entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Das Spiel ist nicht im NAND installiert und kann somit nicht entfernt werden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Das Update wurde entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Es ist kein Update für diesen Titel installiert.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Es sind keine DLC für diesen Titel installiert.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 DLC entfernt. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Transferierbaren OpenGL Shader Cache löschen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Transferierbaren Vulkan Shader Cache löschen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Alle transferierbaren Shader Caches löschen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Spiel-Einstellungen entfernen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Datei entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Fehler beim Entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Es existiert kein Shader-Cache für diesen Titel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>Der transferierbare Shader-Cache wurde entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Konnte den transferierbaren Shader-Cache nicht entfernen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Fehler beim Entfernen des Vulkan-Pipeline-Cache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Fehler beim Entfernen des Driver-Pipeline-Cache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Fehler beim Entfernen der transferierbaren Shader Caches</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Fehler beim Entfernen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Es existieren keine Spiel-Einstellungen für dieses Spiel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>Die Spiel-Einstellungen wurden entfernt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Die Spiel-Einstellungen konnten nicht entfernt werden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS-Extraktion fehlgeschlagen!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Das RomFS konnte wegen eines Fehlers oder Abbruchs nicht kopiert werden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Komplett</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Nur Ordnerstruktur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>RomFS Extraktions-Modus auswählen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Bitte wähle, wie das RomFS gespeichert werden soll.<br>"Full" wird alle Dateien des Spiels extrahieren, während <br>"Skeleton" nur die Ordnerstruktur erstellt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>Es ist nicht genügend Speicher (%1) vorhanden um das RomFS zu entpacken. Bitte sorge für genügend Speicherplatze oder wähle ein anderes Verzeichnis aus. (Emulation > Konfiguration > System > Dateisystem > Dump Root)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>RomFS wird extrahiert...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Abbrechen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS wurde extrahiert!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Der Vorgang wurde erfolgreich abgeschlossen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Verknüpfung erstellen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Icon erstellen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Fehler beim Öffnen von %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Verzeichnis auswählen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Einstellungen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Spiel-Einstellungen konnten nicht geladen werden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch-Programme (%1);;Alle Dateien (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Datei laden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Öffne das extrahierte ROM-Verzeichnis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Ungültiges Verzeichnis ausgewählt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Das Verzeichnis, das du ausgewählt hast, enthält keine 'main'-Datei.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Installierbares Switch-Programm (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submissions Package (*.nsp);;NX Cartridge Image (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Dateien installieren</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n Datei verbleibend</numerusform><numerusform>%n Dateien verbleibend</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Datei "%1" wird installiert...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>NAND-Installation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Um Konflikte zu vermeiden, raten wir Nutzern davon ab, Spiele im NAND zu installieren. Bitte nutze diese Funktion nur zum Installieren von Updates und DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n file was newly installed @@ -5103,400 +5078,400 @@ Bitte nutze diese Funktion nur zum Installieren von Updates und DLC.</translatio </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Systemanwendung</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Systemarchiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Systemanwendungsupdate</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Firmware-Paket (Typ A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Firmware-Paket (Typ B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Spiel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Spiel-Update</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Spiel-DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta-Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Wähle den NCA-Installationstyp aus...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Bitte wähle, als was diese NCA installiert werden soll: (In den meisten Fällen sollte die Standardeinstellung 'Spiel' ausreichen.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Installation fehlgeschlagen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Der Titel-Typ, den du für diese NCA ausgewählt hast, ist ungültig.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Datei nicht gefunden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Datei "%1" nicht gefunden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Hardwareanforderungen nicht erfüllt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Fehlender yuzu-Account</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Um einen Kompatibilitätsbericht abzuschicken, musst du einen yuzu-Account mit yuzu verbinden.<br><br/>Um einen yuzu-Account zu verbinden, prüfe die Einstellungen unter Emulation &gt; Konfiguration &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Fehler beim Öffnen der URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>URL "%1" kann nicht geöffnet werden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>TAS Aufnahme</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Datei von Spieler 1 überschreiben?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Ungültige Konfiguration erkannt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Handheld-Controller können nicht im Dock verwendet werden. Der Pro-Controller wird verwendet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>Das aktuelle Amiibo wurde entfernt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>Das aktuelle Spiel sucht nicht nach Amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo-Datei (%1);; Alle Dateien (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Amiibo laden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Fehler beim Laden der Amiibo-Daten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>Die ausgewählte Datei ist keine gültige Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>Die ausgewählte Datei wird bereits verwendet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Ein unbekannter Fehler ist aufgetreten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Screenshot aufnehmen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG Bild (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>TAS Zustand: Läuft %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>TAS Zustand: Aufnahme %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>TAS Zustand: Ungültig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Skalierung: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Geschwindigkeit: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Geschwindigkeit: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Spiel: %1 FPS (Unbegrenzt)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Spiel: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU HOCH</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTREM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU FEHLER</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>DOCKED</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>HANDHELD</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>NÄCHSTER</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BIKUBISCH</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>KEIN AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>LAUTSTÄRKE: STUMM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>LAUTSTÄRKE: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Schlüsselableitung bestätigen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5509,37 +5484,37 @@ This will delete your autogenerated key files and re-run the key derivation modu Dieser Prozess wird die generierten Schlüsseldateien löschen und die Schlüsselableitung neu starten.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Fuses fehlen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation> - BOOT0 fehlt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - BCPKG2-1-Normal-Main fehlt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - PRODINFO fehlt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Derivationskomponenten fehlen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5547,39 +5522,39 @@ on your system's performance.</source> Dies könnte, je nach Leistung deines Systems, bis zu einer Minute dauern.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Schlüsselableitung</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>RomFS wählen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Wähle, welches RomFS du speichern möchtest.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Bist du sicher, dass du yuzu beenden willst?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Bist du sicher, dass du die Emulation stoppen willst? Jeder nicht gespeicherte Fortschritt geht verloren.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6213,7 +6188,7 @@ Debug Message: </source> <message> <location filename="../../src/yuzu/multiplayer/lobby.ui" line="83"/> <source>Hide Empty Rooms</source> - <translation type="unfinished"/> + <translation>Leere Räume verbergen</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/lobby.ui" line="90"/> @@ -7578,28 +7553,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Fehlercode: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Ein Fehler ist aufgetreten. Bitte versuche es noch einmal oder kontaktiere den Entwickler der Software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Ein Fehler ist in %1 bei %2 aufgetreten. Bitte versuche es noch einmal oder kontaktiere den Entwickler der Software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7623,20 +7598,81 @@ Bitte versuche es noch einmal oder kontaktiere den Entwickler der Software.</tra %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Wähle einen Benutzer aus:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Nutzer</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Profilauswahl</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Wähle einen Benutzer aus:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7686,51 +7722,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Stack aufrufen</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>Warten auf Mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>has waiters: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>owner handle: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>Warten auf alle Objekte</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>Warten auf eines der folgenden Objekte</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>von keinem Thread pausiert</translation> </message> @@ -7738,120 +7743,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>lauffähig</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>pausiert</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>schläft</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>Warten auf IPC-Antwort</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>Warten auf Objekte</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>wartet auf condition variable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>Warten auf den Adressarbiter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>warten auf Fortsetzen nach Unterbrechung</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>warten</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>initialisiert</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>beendet</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>unbekannt</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation>PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>Kern %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>Prozessor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ideal core = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>Affinitätsmaske = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>Thread-ID = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>Priorität = %1(aktuell) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>Letzte laufende Ticks = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>nicht auf Mutex warten</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>gewartet von Thread</translation> </message> @@ -7859,7 +7854,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Wait Tree</translation> </message> diff --git a/dist/languages/el.ts b/dist/languages/el.ts index ccd52f76c..023cf4825 100644 --- a/dist/languages/el.ts +++ b/dist/languages/el.ts @@ -372,36 +372,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> + <source>Output Device:</source> <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Συσκευή Εισόδου</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Μονοφωνικό</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>ΣτÎÏεοφωνικό</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>ΧÏήση καθολικής Îντασης ήχου</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Ένταση ήχου:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Ένταση:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Σίγαση ήχου όταν βÏίσκεται στο παÏασκήνιο</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1359,26 +1384,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Σίγαση ήχου όταν βÏίσκεται στο παÏασκήνιο</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>ΑπόκÏυψη δÏομÎα Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï ÏƒÏ„Î·Î½ αδÏάνεια</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>ΕπαναφοÏά Όλων των Ρυθμίσεων</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>ΕπαναφÎÏει όλες τις Ïυθμίσεις και καταÏγεί όλες τις επιλογÎÏ‚ ανά παιχνίδι. Δεν θα διαγÏάψει καταλόγους παιχνιδιών, Ï€Ïοφίλ ή Ï€Ïοφίλ εισόδου. ΣυνÎχιση;</translation> </message> @@ -3811,60 +3831,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Μονοφωνικό</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>ΣτÎÏεοφωνικό</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>ΛειτουÏγία εξόδου ήχου</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Εκ ÎÎου Αντικατάσταση</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Οι Ïυθμίσεις συστήματος είναι διαθÎσιμες μόνο όταν το παιχνίδι δεν εκτελείται.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Αυτό θα αντικαταστήσει το Ï„ÏÎχων εικονικό σας Switch με Îνα νÎο, και το παλιό δεν θα είναι πια ανακτήσιμο. Αυτό μποÏεί να Îχει απÏοσδόκητα αποτελÎσματα στα παιχνίδια. Επίσης, μποÏεί να αποτÏχει εάν χÏησιμοποιείτε Îνα ξεπεÏασμÎνο μÎσο αποθήκευσης παιχνιδιοÏ. ΣυνÎχιση;</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Î Ïοσοχή</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Console ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4551,105 +4526,105 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>ΤηλεμετÏία</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Πόσα καÏΠανά δευτεÏόλεπτο εμφανίζει το παιχνίδι αυτή τη στιγμή. Αυτό διαφÎÏει από παιχνίδι σε παιχνίδι και από σκηνή σε σκηνή.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&ΣυνÎχεια</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&ΠαÏση</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Μη μεταφÏασμÎνη συμβολοσειÏά @@ -4657,850 +4632,850 @@ Drag points to change position, or double-click table cells to edit values.</sou Για μια εξήγηση των διαφόÏων μοÏφών Switch που υποστηÏίζει το yuzu,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'> δείτε το wiki μας </a>. Αυτό το μήνυμα δεν θα εμφανιστεί ξανά.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Σφάλμα κατά τη φόÏτωση της ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Εμφανίστηκε Îνα απÏοσδιόÏιστο σφάλμα. ΑνατÏÎξτε στο αÏχείο καταγÏαφής για πεÏισσότεÏες λεπτομÎÏειες.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Αποθήκευση δεδομÎνων</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Ο φάκελος δεν υπάÏχει!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>ΑφαίÏεση ΑÏχείου</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Επιλογή λειτουÏγίας απόÏÏιψης RomFS </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Μη αποθηκευμÎνη μετάφÏαση. ΠαÏακαλοÏμε επιλÎξτε τον Ï„Ïόπο με τον οποίο θα θÎλατε να γίνει η απόÏÏιψη της RomFS.<br> Η επιλογή ΠλήÏης θα αντιγÏάψει όλα τα αÏχεία στο νÎο κατάλογο, ενώ η επιλογή <br> Σκελετός θα δημιουÏγήσει μόνο τη δομή του καταλόγου.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>ΑκÏÏωση</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Η επÎμβαση ολοκληÏώθηκε με επιτυχία.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Επιλογή καταλόγου</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Ιδιότητες</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>ΦόÏτωση αÏχείου</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>ΑποτελÎσματα εγκατάστασης</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>ΕφαÏμογή συστήματος</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Παιχνίδι</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>ΕνημÎÏωση παιχνιδιοÏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC παιχνιδιοÏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>ΕπιλÎξτε τον Ï„Ïπο εγκατάστασης NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Το αÏχείο δεν βÏÎθηκε</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Το αÏχείο "%1" δεν βÏÎθηκε</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Σφάλμα κατα το άνοιγμα του URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Αδυναμία ανοίγματος του URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Σφάλμα</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>ΦόÏτωση Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Σφάλμα φόÏτωσης δεδομÎνων Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>Το επιλεγμÎνο αÏχείο δεν αποτελεί ÎγκυÏο amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>Το επιλεγμÎνο αÏχείο χÏησιμοποιείται ήδη</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Λήψη στιγμιότυπου οθόνης</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Εικόνα PBG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&ΈναÏξη</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Κλίμακα: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>ΤαχÏτητα: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>ΤαχÏτητα: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>ΚαÏÎ: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5511,76 +5486,76 @@ This will delete your autogenerated key files and re-run the key derivation modu <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- Λείπει το BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- Λείπει το BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- Λείπει το PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Είστε σίγουÏοι ότι θÎλετε να κλείσετε το yuzu;</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7575,26 +7550,26 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7614,20 +7589,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Επιλογή ΧÏήστη </translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>ΧÏήστες</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation type="unfinished"/> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Επιλογή ΧÏήστη </translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7677,51 +7713,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Κλήση stack</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>αναμονή για όλα τα αντικείμενα</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation type="unfinished"/> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation type="unfinished"/> </message> @@ -7729,120 +7734,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>αναμονή αντικειμÎνων</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>πυÏήνας %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>επεξεÏγαστής = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>Ï€ÏοτεÏαιότητα = %1(Ï„ÏÎχον) / %2(κανονικό)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation type="unfinished"/> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation type="unfinished"/> </message> @@ -7850,7 +7845,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/es.ts b/dist/languages/es.ts index d94e2e729..fb5ade667 100644 --- a/dist/languages/es.ts +++ b/dist/languages/es.ts @@ -380,36 +380,61 @@ Esto banearÃa su nombre del foro y su dirección IP.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Dispositivo de salida</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Dispositivo de entrada</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Estéreo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Envolvente</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Usar volumen global</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Ajustar volumen:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volumen:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Silenciar audio en segundo plano</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1378,26 +1403,21 @@ Esto banearÃa su nombre del foro y su dirección IP.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Silenciar audio en segundo plano</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Ocultar el cursor en caso de inactividad.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Reiniciar todos los ajustes</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Esto reiniciará y eliminará todas las configuraciones de los juegos. No eliminará ni los directorios de juego, ni los perfiles, ni los perfiles de los mandos. ¿Continuar?</translation> </message> @@ -3831,60 +3851,15 @@ UUID: %2</translation> <translation>Nombre del dispositivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Estéreo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Envolvente</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID de la consola:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Método de salida de sonido:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regenerar</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Los ajustes del sistema sólo se encuentran disponibles cuando no se esté ejecutando ningún juego.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Aviso: "%1" no es un idioma válido para la región "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Esto reemplazará tu Switch virtual con una nueva. Tu Switch virtual actual no será recuperable. Esto podrÃa causar efectos inesperados en determinados juegos. Si usas un archivo de guardado de configuración obsoleto, esto podrÃa fallar. ¿Continuar?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Advertencia</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID de consola: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4572,555 +4547,555 @@ Arrastra los puntos para cambiar de posición, o haz doble clic en las celdas de <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Los datos de uso anónimos se recogen</a> para ayudar a mejorar yuzu. <br/><br/>¿Deseas compartir tus datos de uso con nosotros?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>TelemetrÃa </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Se ha detectado una instalación corrupta de Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>La inicialización de Vulkan ha fallado durante la ejecución. Haz clic <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>aquà para más información sobre como arreglar el problema</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Cargando Web applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Desactivar Web applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>Deshabilitar el Applet Web puede causar comportamientos imprevistos y deberÃa solo ser usado con Super Mario 3D All-Stars. ¿Estas seguro que quieres deshabilitar el Applet Web? (Puede ser reactivado en las configuraciones de Depuración.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>La cantidad de shaders que se están construyendo actualmente</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>El multiplicador de escala de resolución seleccionado actualmente.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>La velocidad de emulación actual. Los valores superiores o inferiores al 100% indican que la emulación se está ejecutando más rápido o más lento que en una Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>La cantidad de fotogramas por segundo que se está mostrando el juego actualmente. Esto variará de un juego a otro y de una escena a otra.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Tiempo que lleva emular un fotograma de la Switch, sin tener en cuenta la limitación de fotogramas o sincronización vertical. Para una emulación óptima, este valor deberÃa ser como máximo de 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Eliminar archivos recientes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pausar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu está ejecutando un juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Advertencia: formato del juego obsoleto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Está utilizando el formato de directorio de ROM deconstruido para este juego, que es un formato desactualizado que ha sido reemplazado por otros, como los NCA, NAX, XCI o NSP. Los directorios de ROM deconstruidos carecen de Ãconos, metadatos y soporte de actualizaciones.<br><br>Para ver una explicación de los diversos formatos de Switch que soporta yuzu,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>echa un vistazo a nuestra wiki</a>. Este mensaje no se volverá a mostrar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>¡Error al cargar la ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>El formato de la ROM no es compatible.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Se ha producido un error al inicializar el núcleo de video.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu ha encontrado un error al ejecutar el núcleo de video. Esto suele ocurrir al no tener los controladores de la GPU actualizados, incluyendo los integrados. Por favor, revisa el registro para más detalles. Para más información sobre cómo acceder al registro, por favor, consulta la siguiente página: <a href='https://yuzu-emu.org/help/reference/log-files/'>Como cargar el archivo de registro</a>. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>¡Error al cargar la ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Por favor, sigue <a href='https://yuzu-emu.org/help/quickstart/'>la guÃa de inicio rápido de yuzu</a> para revolcar los archivos.<br>Puedes consultar la wiki de yuzu</a> o el Discord de yuzu</a> para obtener ayuda.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Error desconocido. Por favor, consulte el archivo de registro para ver más detalles.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Cerrando software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Datos de guardado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Datos de mods</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Error al abrir la carpeta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>¡La carpeta no existe!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Error al abrir el caché transferible de shaders</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>No se pudo crear el directorio de la caché de los shaders para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Error al eliminar el contenido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Error al eliminar la actualización</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Error al eliminar el DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>¿Eliminar el contenido del juego instalado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>¿Eliminar la actualización del juego instalado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>¿Eliminar el DLC del juego instalado?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Eliminar entrada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>Se ha eliminado con éxito</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>Se ha eliminado con éxito el juego base instalado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>El juego base no está instalado en el NAND y no se puede eliminar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Se ha eliminado con éxito la actualización instalada.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>No hay ninguna actualización instalada para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>No hay ningún DLC instalado para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>Se ha eliminado con éxito %1 DLC instalado(s).</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>¿Deseas eliminar el caché transferible de shaders de OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>¿Deseas eliminar el caché transferible de shaders de Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>¿Deseas eliminar todo el caché transferible de shaders?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>¿Deseas eliminar la configuración personalizada del juego?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Eliminar archivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Error al eliminar la caché de shaders transferibles</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>No existe caché de shaders para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>El caché de shaders transferibles se ha eliminado con éxito.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>No se ha podido eliminar la caché de shaders transferibles.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Error al eliminar la caché de canalización del controlador Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>No se ha podido eliminar la caché de canalización del controlador.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Error al eliminar las cachés de shaders transferibles</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>Cachés de shaders transferibles eliminadas con éxito.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>No se ha podido eliminar el directorio de cachés de shaders transferibles.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Error al eliminar la configuración personalizada del juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>No existe una configuración personalizada para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>Se eliminó con éxito la configuración personalizada del juego.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>No se ha podido eliminar la configuración personalizada del juego.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>¡La extracción de RomFS ha fallado!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Se ha producido un error al copiar los archivos RomFS o el usuario ha cancelado la operación.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Completo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>En secciones</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Elegir método de volcado de RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Por favor, selecciona el método en que quieres volcar el RomFS.<br>Completo copiará todos los archivos al nuevo directorio <br> mientras que en secciones solo creará la estructura del directorio.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>No hay suficiente espacio en %1 para extraer el RomFS. Por favor, libera espacio o elige otro directorio de volcado en Emulación > Configuración > Sistema > Sistema de archivos > RaÃz de volcado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Extrayendo RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>¡La extracción RomFS ha tenido éxito!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>La operación se completó con éxito.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Crear acceso directo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Esto creará un acceso directo a la AppImage actual. Esto puede no funcionar bien si se actualiza. ¿Continuar?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>No se puede crear un acceso directo en el escritorio. La ruta "%1" no existe.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>No se puede crear un acceso directo en el menú de aplicaciones. La ruta "%1" no existe y no se puede crear.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Crear icono</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>No se puede crear el archivo de icono. La ruta "%1" no existe y no se puede crear.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>Iniciar %1 con el Emulador yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Error al crear un acceso directo en %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>Se ha creado un acceso directo a %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Error al intentar abrir %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Seleccionar directorio</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Propiedades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>No se pueden cargar las propiedades del juego.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Ejecutable de Switch (%1);;Todos los archivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Cargar archivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Abrir el directorio de la ROM extraÃda</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Directorio seleccionado no válido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>El directorio que ha seleccionado no contiene ningún archivo 'main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Archivo de Switch Instalable (*.nca *.nsp *.xci);;Archivo de contenidos de Nintendo (*.nca);;Paquete de envÃo de Nintendo (*.nsp);;Imagen de cartucho NX (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Instalar archivos</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n archivo(s) restantes</numerusform><numerusform>%n archivo(s) restantes</numerusform><numerusform>%n archivo(s) restantes</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Instalando el archivo "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Instalar resultados</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Para evitar posibles conflictos, no se recomienda a los usuarios que instalen juegos base en el NAND. Por favor, utiliza esta función sólo para instalar actualizaciones y DLCs.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n archivo(s) recién instalado/s @@ -5129,7 +5104,7 @@ Por favor, utiliza esta función sólo para instalar actualizaciones y DLCs.</tr </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n archivo(s) recién sobreescrito/s @@ -5138,7 +5113,7 @@ Por favor, utiliza esta función sólo para instalar actualizaciones y DLCs.</tr </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n archivo(s) no se instaló/instalaron @@ -5147,388 +5122,388 @@ Por favor, utiliza esta función sólo para instalar actualizaciones y DLCs.</tr </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Aplicación del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Archivo del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Actualización de la aplicación del sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Paquete de firmware (Tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Paquete de firmware (Tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Actualización de juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC del juego</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Titulo delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Seleccione el tipo de instalación NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Seleccione el tipo de tÃtulo en el que deseas instalar este NCA como: (En la mayorÃa de los casos, el 'Juego' predeterminado está bien).</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Fallo en la instalación</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>El tipo de tÃtulo que seleccionó para el NCA no es válido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Archivo no encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Archivo "%1" no encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>Aceptar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>No se cumplen los requisitos de hardware</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>El sistema no cumple los requisitos de hardware recomendados. Los informes de compatibilidad se han desactivado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Falta la cuenta de Yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Para enviar un caso de prueba de compatibilidad de juegos, debes vincular tu cuenta de yuzu.<br><br/> Para vincular tu cuenta de yuzu, ve a Emulación &gt; Configuración &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Error al abrir la URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>No se puede abrir la URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Grabación TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>¿Sobrescribir archivo del jugador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Configuración no válida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>El controlador del modo portátil no puede ser usado en el modo sobremesa. Se seleccionará el controlador Pro en su lugar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>El amiibo actual ha sido eliminado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>El juego actual no está buscando amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Archivo amiibo (%1);; Todos los archivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Cargar amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Error al cargar los datos Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>El archivo seleccionado no es un amiibo válido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>El archivo seleccionado ya se encuentra en uso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Ha ocurrido un error inesperado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Captura de pantalla</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Imagen PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>Estado TAS: ejecutando %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>Estado TAS: grabando %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>Estado TAS: inactivo %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>Estado TAS: nulo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Parar de ejecutar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>Pausar g&rabación</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>G&rabar</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Creando: %n shader(s)</numerusform><numerusform>Construyendo: %n shader(s)</numerusform><numerusform>Construyendo: %n shader(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Escalado: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Velocidad: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Velocidad: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Juego: %1 FPS (desbloqueado)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Juego: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Fotogramas: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU ALTA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTREMA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU ERROR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>SOBREMESA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>PORTÃTIL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>PRÓXIMO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICÚBICO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIANO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Confirmar la clave de rederivación</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5545,37 +5520,37 @@ es lo que quieres hacer si es necesario. Esto eliminará los archivos de las claves generadas automáticamente y volverá a ejecutar el módulo de derivación de claves.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Faltan fuses</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- Falta BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - Falta BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - Falta PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Faltan componentes de derivación</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Faltan las claves de encriptación. <br>Por favor, sigue <a href='https://yuzu-emu.org/help/quickstart/'>la guÃa rápida de yuzu</a> para obtener todas tus claves, firmware y juegos.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5584,39 +5559,39 @@ Esto puede llevar unos minutos dependiendo del rendimiento de su sistema.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Obtención de claves</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Selecciona el destinatario para volcar el RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Por favor, seleccione los RomFS que deseas volcar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>¿Estás seguro de que quieres cerrar yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>¿Estás seguro de que quieres detener la emulación? Cualquier progreso no guardado se perderá.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7620,28 +7595,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Código de error: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Ha ocurrido un error. Por favor, inténtalo de nuevo o contacta con el desarrollador del software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Ha ocurrido un error en %1 a las %2 Por favor, inténtalo de nuevo o contacta con el desarrollador del software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7665,20 +7640,81 @@ Por favor, inténtalo de nuevo o contacta con el desarrollador del software.</tr %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Seleccione un usuario:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Usuarios</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Selector de perfil</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Seleccione un usuario:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7728,51 +7764,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Llamadas acumuladas</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>esperando al mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>tiene receptores: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>manejo del propietario: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>esperando a todos los objetos</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>esperando a uno de los siguientes objetos</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>esperado por ningún hilo</translation> </message> @@ -7780,120 +7785,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>ejecutable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>en pausa</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>reposando</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>esperando respuesta IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>esperando objetos</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>esperando variable condicional</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>esperando al árbitro de dirección</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>esperando a reanudar</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>esperando</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>inicializado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>terminado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>desconocido</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation>PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>núcleo %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>procesador = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>núcleo ideal = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>máscara de afinidad = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>id de hilo = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioridad = %1(presente) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>últimos ticks consecutivos = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>no esperando al mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>esperado por el hilo</translation> </message> @@ -7901,7 +7896,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Ãrbol de espera</translation> </message> diff --git a/dist/languages/fr.ts b/dist/languages/fr.ts index c607faf8f..7730208b7 100644 --- a/dist/languages/fr.ts +++ b/dist/languages/fr.ts @@ -381,36 +381,61 @@ Cela bannirait à la fois son nom d'utilisateur du forum et son adresse IP. </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Périphérique de sortie</translation> + <source>Output Device:</source> + <translation>Périphérique de sortie :</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Périphérique d'entrée</translation> + <source>Input Device:</source> + <translation>Périphérique d'entrée :</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation>Mode de sortie sonore :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stéréo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Utiliser le volume global</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Régler le volume :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volume :</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Couper le son en arrière-plan</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1377,26 +1402,21 @@ Cette option améliore la vitesse en réduisant la précision des instructions f </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Couper le son en arrière-plan</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Cacher la souris en cas d'inactivité</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Réinitialiser tous les paramètres</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Ceci réinitialise tout les paramètres et supprime toutes les configurations par jeu. Cela ne va pas supprimer les répertoires de jeu, les profils, ou les profils d'entrée. Continuer ?</translation> </message> @@ -1517,7 +1537,7 @@ Cette option améliore la vitesse en réduisant la précision des instructions f <message> <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="315"/> <source>Force 16:10</source> - <translation>Forcer 16:10</translation> + <translation>Forcer le 16:10</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="320"/> @@ -1717,7 +1737,7 @@ Cette option améliore la vitesse en réduisant la précision des instructions f <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="78"/> <source>Force maximum clocks (Vulkan only)</source> - <translation>Forcer la fréquence d'horloge maximales (Vulkan uniquement)</translation> + <translation>Forcer la fréquence d'horloge maximale (Vulkan uniquement)</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="85"/> @@ -1732,12 +1752,12 @@ Cette option améliore la vitesse en réduisant la précision des instructions f <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> - <translation type="unfinished"/> + <translation>Active le décodage asynchrone de textures ASTC, qui peut réduire les saccades de chargement. Cette fonctionnalité est expérimentale.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> <source>Decode ASTC textures asynchronously (Hack)</source> - <translation type="unfinished"/> + <translation>Décoder les textures ASTC de manière asynchrone (Hack)</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> @@ -3830,60 +3850,15 @@ UUID : %2</translation> <translation>Nom de l'appareil</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stéréo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID de la Console :</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Mode de sortie Audio</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regénérer</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Les paramètres systèmes ne sont accessibles que lorsque le jeu n'est pas en cours.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Attention: "%1" n'est pas une langue valide pour la région "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Ceci remplacera la Switch virtuelle actuelle par une nouvelle. La Switch actuelle ne sera plus récupérable. cela peut entrainer des effets non désirés pendant le jeu. Ceci peut échouer si une configuration de sauvegarde périmée est utilisée. Continuer ?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Avertissement</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID de la Console : 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4571,954 +4546,954 @@ Faites glisser les points pour modifier la position ou double-cliquez sur les ce <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Des données anonymes sont collectées</a> pour aider à améliorer yuzu. <br/><br/>Voulez-vous partager vos données d'utilisations avec nous ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Télémétrie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Installation Vulkan Cassée Détectée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>L'initialisation de Vulkan a échoué lors du démarrage.<br><br>Cliquez <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>ici pour obtenir des instructions pour résoudre le problème</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Chargement du Web Applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Désactiver l'applet web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>La désactivation de l'applet Web peut entraîner un comportement indéfini et ne doit être utilisée qu'avec Super Mario 3D All-Stars. Voulez-vous vraiment désactiver l'applet Web ? (Cela peut être réactivé dans les paramètres de débogage.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>La quantité de shaders en cours de construction</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>Le multiplicateur de mise à l'échelle de résolution actuellement sélectionné.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Valeur actuelle de la vitesse de l'émulation. Des valeurs plus hautes ou plus basses que 100% indique que l'émulation fonctionne plus vite ou plus lentement qu'une véritable Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Combien d'image par seconde le jeu est en train d'afficher. Ceci vas varier de jeu en jeu et de scènes en scènes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Temps pris pour émuler une image par seconde de la switch, sans compter le limiteur d'image par seconde ou la synchronisation verticale. Pour une émulation à pleine vitesse, ceci devrait être au maximum à 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Effacer les fichiers récents</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation>La souris émulée est activée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation>La saisie réelle de la souris et le panoramique de la souris sont incompatibles. Veuillez désactiver la souris émulée dans les paramètres avancés d'entrée pour permettre le panoramique de la souris.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Continuer</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pause</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu exécute un jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Avertissement : Le Format de jeu est dépassé</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Vous utilisez un format de ROM déconstruite pour ce jeu, qui est donc un format dépassé qui à été remplacer par d'autre. Par exemple les formats NCA, NAX, XCI, ou NSP. Les destinations de ROM déconstruites manque des icônes, des métadonnée et du support de mise à jour.<br><br>Pour une explication des divers formats Switch que yuzu supporte, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>Regardez dans le wiki</a>. Ce message ne sera pas montré une autre fois.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Erreur lors du chargement de la ROM !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Le format de la ROM n'est pas supporté.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Une erreur s'est produite lors de l'initialisation du noyau dédié à la vidéo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu a rencontré une erreur en exécutant le cÅ“ur vidéo. Cela est généralement causé par des pilotes graphiques trop anciens. Veuillez consulter les logs pour plus d'informations. Pour savoir comment accéder aux logs, veuillez vous référer à la page suivante : <a href='https://yuzu-emu.org/help/reference/log-files/'>Comment partager un fichier de log </a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Erreur lors du chargement de la ROM ! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Veuillez suivre <a href='https://yuzu-emu.org/help/quickstart/'>le guide de démarrage rapide yuzu</a> pour retransférer vos fichiers.<br>Vous pouvez vous référer au wiki yuzu</a> ou le Discord yuzu</a> pour de l'assistance.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Une erreur inconnue est survenue. Veuillez consulter le journal des logs pour plus de détails.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Fermeture du logiciel...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Enregistrer les données</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Donnés du Mod</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Erreur dans l'ouverture du dossier %1.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Le dossier n'existe pas !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Erreur lors de l'ouverture des Shader Cache Transferable</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Impossible de créer le dossier de cache du shader pour ce jeu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Erreur en enlevant le contenu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Erreur en enlevant la Mise à Jour</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Erreur en enlevant le DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Enlever les données du jeu installé ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Enlever la mise à jour du jeu installé ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Enlever le DLC du jeu installé ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Supprimer l'entrée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>Supprimé avec succès</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>Suppression du jeu de base installé avec succès.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Le jeu de base n'est pas installé dans la NAND et ne peut pas être supprimé.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Suppression de la mise à jour installée avec succès.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Il n'y a pas de mise à jour installée pour ce titre.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Il n'y a pas de DLC installé pour ce titre.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>Suppression de %1 DLC installé(s) avec succès.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Supprimer la Cache OpenGL de Shader Transférable?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Supprimer la Cache Vulkan de Shader Transférable?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Supprimer Toutes les Caches de Shader Transférable?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Supprimer la configuration personnalisée du jeu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Supprimer fichier</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Erreur lors de la suppression du cache de shader transférable</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Un shader cache pour ce titre n'existe pas.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>Suppression du cache de shader transférable avec succès.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Échec de la suppression du cache de shader transférable.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Erreur lors de la suppression du cache de pipeline de pilotes Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Échec de la suppression du cache de pipeline de pilotes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Erreur durant la Suppression des Caches de Shader Transférable</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>Suppression des caches de shader transférable effectuée avec succès.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Impossible de supprimer le dossier de la cache de shader transférable.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Erreur lors de la suppression de la configuration personnalisée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Il n'existe pas de configuration personnalisée pour ce titre.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>Suppression de la configuration de jeu personnalisée avec succès.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Échec de la suppression de la configuration personnalisée du jeu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>L'extraction de la RomFS a échoué !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Une erreur s'est produite lors de la copie des fichiers RomFS ou l'utilisateur a annulé l'opération.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Plein</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Squelette</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Sélectionnez le mode d'extraction de la RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Veuillez sélectionner la manière dont vous souhaitez que le fichier RomFS soit extrait.<br>Full copiera tous les fichiers dans le nouveau répertoire, tandis que<br>skeleton créera uniquement la structure de répertoires.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>Il n'y a pas assez d'espace libre dans %1 pour extraire la RomFS. Veuillez libérer de l'espace ou sélectionner un autre dossier d'extraction dans Émulation > Configurer > Système > Système de fichiers > Extraire la racine</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Extraction de la RomFS ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Annuler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Extraction de la RomFS réussi !</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>L'opération s'est déroulée avec succès.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Créer un raccourci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Cela créera un raccourci vers l'AppImage actuelle. Cela peut ne pas fonctionner correctement si vous mettez à jour. Continuer ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>Impossible de créer un raccourci sur le bureau. Le chemin "%1" n'existe pas.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>Impossible de créer un raccourci dans le menu des applications. Le chemin "%1" n'existe pas et ne peut pas être créé.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Créer une icône</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Impossible de créer le fichier d'icône. Le chemin "%1" n'existe pas et ne peut pas être créé.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>Démarrer %1 avec l'émulateur Yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Impossible de créer un raccourci vers %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>Création réussie d'un raccourci vers %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Erreur lors de l'ouverture %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Sélectionner un répertoire</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Propriétés</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Les propriétés du jeu n'ont pas pu être chargées.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Exécutable Switch (%1);;Tous les fichiers (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Charger un fichier</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Ouvrir le dossier des ROM extraites</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Destination sélectionnée invalide</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Le répertoire que vous avez sélectionné ne contient pas de fichier "main".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Fichier Switch installable (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Installer les fichiers</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n fichier restant</numerusform><numerusform>%n fichiers restants</numerusform><numerusform>%n fichiers restants</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Installation du fichier "%1" ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Résultats d'installation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Pour éviter d'éventuels conflits, nous déconseillons aux utilisateurs d'installer des jeux de base sur la NAND. Veuillez n'utiliser cette fonctionnalité que pour installer des mises à jour et des DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n fichier a été nouvellement installé</numerusform><numerusform>%n fichiers ont été nouvellement installés</numerusform><numerusform>%n fichiers ont été nouvellement installés</numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n fichier a été écrasé</numerusform><numerusform>%n fichiers ont été écrasés</numerusform><numerusform>%n fichiers ont été écrasés</numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n fichier n'a pas pu être installé</numerusform><numerusform>%n fichiers n'ont pas pu être installés</numerusform><numerusform>%n fichiers n'ont pas pu être installés</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Application Système</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Archive Système</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Mise à jour de l'application système</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Paquet micrologiciel (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Paquet micrologiciel (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Mise à jour de jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC de jeu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Titre Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Sélectionner le type d'installation du NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Veuillez sélectionner le type de titre auquel vous voulez installer ce NCA : (Dans la plupart des cas, le titre par défaut : 'Jeu' est correct.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Échec de l'installation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Le type de titre que vous avez sélectionné pour le NCA n'est pas valide.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Fichier non trouvé</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Fichier "%1" non trouvé</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Éxigences matérielles non respectées</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Votre système ne correspond pas aux éxigences matérielles. Les rapports de comptabilité ont été désactivés.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Compte yuzu manquant</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Pour soumettre un test de compatibilité pour un jeu, vous devez lier votre compte yuzu.<br><br/>Pour lier votre compte yuzu, aller à Emulation &gt; Configuration&gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Erreur lors de l'ouverture de l'URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Impossible d'ouvrir l'URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Enregistrement TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Écraser le fichier du joueur 1 ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Configuration invalide détectée</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Contrôleur portable ne peut pas être utilisé en mode téléviseur. La manette Pro sera sélectionnée.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>L'amiibo actuel a été retiré</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Erreur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>Le jeu actuel ne cherche pas d'amiibos.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Fichier Amiibo (%1);; Tous les fichiers (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Charger un Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Erreur lors du chargement des données Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>Le fichier choisi n'est pas un amiibo valide</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>Le fichier sélectionné est déjà utilisé</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Une erreur inconnue s'est produite</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Capture d'écran</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Image PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>État du TAS : En cours d'exécution %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>État du TAS : Enregistrement %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>État du TAS : Inactif %1:%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>État du TAS : Invalide</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Stopper l'exécution</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>Stopper l'en&registrement</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>En&registrer</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Compilation: %n shader</numerusform><numerusform>Compilation : %n shaders</numerusform><numerusform>Compilation : %n shaders</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Échelle : %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Vitesse : %1% / %2% </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Vitesse : %1% </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Jeu : %1 IPS (Débloqué)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Jeu : %1 FPS </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Frame : %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU HAUT</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTRÊME</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU ERREUR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>MODE TV</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>PORTABLE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>PLUS PROCHE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINÉAIRE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICUBIQUE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIEN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>AUCUN AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>VOLUME: MUET</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Confirmer la réinstallation de la clé</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5535,37 +5510,37 @@ et éventuellement faites des sauvegardes. Cela supprimera vos fichiers de clé générés automatiquement et ré exécutera le module d'installation de clé.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Fusibles manquants</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- BOOT0 manquant</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- BCPKG2-1-Normal-Main manquant</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- PRODINFO manquant</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Composants de dérivation manquants</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Les clés de chiffrement sont manquantes. <br>Veuillez suivre <a href='https://yuzu-emu.org/help/quickstart/'>le guide de démarrage rapide yuzu</a> pour obtenir tous vos clés, firmware et jeux.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5574,39 +5549,39 @@ Cela peut prendre jusqu'à une minute en fonction des performances de votre système.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Installation des clés</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Sélectionner la cible d'extraction du RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Veuillez sélectionner quel RomFS vous voulez extraire.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Êtes vous sûr de vouloir fermer yuzu ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Êtes-vous sûr d'arrêter l'émulation ? Tout progrès non enregistré sera perdu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7610,28 +7585,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Code d'erreur : %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Une erreur s'est produite. Veuillez essayer à nouveau ou contactez le développeur du logiciel.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Une erreur s'est produite le %1 à %2. Veuillez essayer à nouveau ou contactez le développeur du logiciel.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7655,20 +7630,81 @@ Veuillez essayer à nouveau ou contactez le développeur du logiciel.</translati %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Choisir un utilisateur :</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Utilisateurs</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Sélecteur de profil</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Choisir un utilisateur :</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7718,51 +7754,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Pile d'exécution</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>en attente du "mutex" 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>En attente : %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>propriétaire de la manche : 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>en attente de tous les objets</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>en attente d'un des objets suivants</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation>[%1] %2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>attendu par aucun thread</translation> </message> @@ -7770,120 +7775,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>runnable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>en pause</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>en veille</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>en attente de réponse IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>En attente d'objets</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>en attente de la variable conditionnelle</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>En attente de l'adresse arbitre</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>waiting for suspend resume</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>en attente</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>initialisé</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>terminated</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>inconnu</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation>PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>idéal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>cÅ“ur %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>Processeur = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>CÅ“ur idéal = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>masque d'affinité = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>id du fil = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>priorité = %1(courant) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>dernier tick en cours = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>en attente du "mutex"</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>attendu par un fil</translation> </message> @@ -7891,7 +7886,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Wait Tree</translation> </message> diff --git a/dist/languages/id.ts b/dist/languages/id.ts index 3ed7f77ec..15054a333 100644 --- a/dist/languages/id.ts +++ b/dist/languages/id.ts @@ -372,36 +372,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> + <source>Output Device:</source> <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Perangkat Masukan</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Pakai volume global</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Atur volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Bisukan audio saat berada di background</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1334,26 +1359,21 @@ Memungkinkan berbagai macam optimasi IR.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Bisukan audio saat berada di background</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Sembunyikan mouse saat tidak aktif</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Atur Ulang Semua Pengaturan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation type="unfinished"/> </message> @@ -3786,60 +3806,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID Konsol:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Mode keluaran suara</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Hasilkan Ulang</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Pengaturan sistem hanya tersedia saat permainan tidak dijalankan.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Ini akan mengganti Switch virtual Anda dengan yang baru. Switch virtual Anda saat ini tidak akan bisa dipulihkan. Ini mungkin akan menyebabkan kesan tak terkira di dalam permainan. Ini juga mungkin akan gagal jika Anda menggunakan simpanan konfigurasi yang lawas. Lanjutkan?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Peringatan</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID Konsol: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4526,955 +4501,955 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Data anonim dikumpulkan</a> untuk membantu yuzu. <br/><br/>Apa Anda ingin membagi data penggunaan dengan kami?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Memuat Applet Web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Matikan Applet Web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Jumlah shader yang sedang dibuat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>Pengali skala resolusi yang terpilih.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Kecepatan emulasi saat ini. Nilai yang lebih tinggi atau rendah dari 100% menandakan pengemulasian berjalan lebih cepat atau lambat dibanding Switch aslinya.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Berapa banyak frame per second (bingkai per detik) permainan akan ditampilkan. Ini akan berubah dari berbagai permainan dan pemandangan.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Waktu yang diperlukan untuk mengemulasikan bingkai Switch, tak menghitung pembatas bingkai atau v-sync. Agar emulasi berkecepatan penuh, ini harus 16.67 mdtk.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Bersihkan Berkas Baru-baru Ini</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Lanjutkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Jeda</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu sedang menjalankan game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Peringatan Format Permainan yang Usang</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Anda menggunakan format direktori ROM yang sudah didekonstruksi untuk permainan ini, yang mana itu merupakan format lawas yang sudah tergantikan oleh yang lain seperti NCA, NAX, XCI, atau NSP. Direktori ROM yang sudah didekonstruksi kekurangan ikon, metadata, dan dukungan pembaruan.<br><br>Untuk penjelasan berbagai format Switch yang didukung yuzu, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>periksa wiki kami</a>. Pesan ini tidak akan ditampilkan lagi.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Kesalahan ketika memuat ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Format ROM tak didukung.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Terjadi kesalahan ketika menginisialisasi inti video.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu telah mengalami error saat menjalankan inti video. Ini biasanya disebabkan oleh pemicu piranti (driver) GPU yang usang, termasuk yang terintegrasi. Mohon lihat catatan untuk informasi lebih rinci. Untuk informasi cara mengakses catatan, mohon lihat halaman berikut: <a href='https://yuzu-emu.org/help/reference/log-files/'>Cara Mengupload Berkas Catatan</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Terjadi kesalahan yang tak diketahui. Mohon lihat catatan untuk informasi lebih rinci.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Simpan Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Gagal Membuka Folder %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Folder tak ada!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Gagal Ketika Membuka Tembolok Shader yang Dapat Ditransfer</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Hapus Masukan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Tidak ada DLC yang terinstall untuk judul ini.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Hapus File</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Kesalahan Menghapus Transferable Shader Cache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Cache shader bagi judul ini tidak ada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Kesalahan Menghapus Konfigurasi Buatan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Pengekstrakan RomFS Gagal!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Terjadi kesalahan ketika menyalin berkas RomFS atau dibatalkan oleh pengguna.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Penuh</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Skeleton</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Pilih Mode Dump RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Mohon pilih cara RomFS akan di-dump.<br>FPenuh akan menyalin seluruh berkas ke dalam direktori baru sementara <br>jerangkong hanya akan menciptakan struktur direktorinya saja.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Mengekstrak RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Batal</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Pengekstrakan RomFS Berhasil!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Operasi selesai dengan sukses,</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Gagal membuka %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Pilih Direktori</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Properti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Properti permainan tak dapat dimuat.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Eksekutabel Switch (%1);;Semua Berkas (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Muat Berkas</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Buka Direktori ROM Terekstrak</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Direktori Terpilih Tidak Sah</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Direktori yang Anda pilih tak memiliki berkas 'utama.'</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Install File</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Memasang berkas "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Hasil Install</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n file(s) baru diinstall </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n file(s) telah ditimpa </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n file(s) gagal di install </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Aplikasi Sistem</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Arsip Sistem</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Pembaruan Aplikasi Sistem</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Paket Perangkat Tegar (Tipe A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Paket Perangkat Tegar (Tipe B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Permainan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Pembaruan Permainan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC Permainan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Judul Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Pilih Tipe Pemasangan NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Mohon pilih jenis judul yang Anda ingin pasang sebagai NCA ini: (Dalam kebanyakan kasus, pilihan bawaan 'Permainan' tidak apa-apa`.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Gagal Memasang</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Jenis judul yang Anda pilih untuk NCA tidak sah.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Berkas tak ditemukan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Berkas "%1" tak ditemukan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Akun yuzu Hilang</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Agar dapat mengirimkan berkas uju kompatibilitas permainan, Anda harus menautkan akun yuzu Anda.<br><br/>TUntuk mennautkan akun yuzu Anda, pergi ke Emulasi &gt; Konfigurasi &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Kesalahan saat membuka URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Tidak dapat membuka URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Rekaman TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Timpa file pemain 1? </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Konfigurasi tidak sah terdeteksi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Kontroller jinjing tidak bisa digunakan dalam mode dock. Kontroller Pro akan dipilih</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Berkas Amiibo (%1);; Semua Berkas (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Muat Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Gagal memuat data Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Tangkapan Layar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Berkas PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>Status TAS: Berjalan %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>Status TAS: Merekam %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>Status TAS: Diam %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>Status TAS: Tidak Valid</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Matikan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Mulai</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>Berhenti Mer&ekam</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>R&ekam</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Membangun: %n shader(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Skala: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Kecepatan: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Kecepatan: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Permainan: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU TINGGI</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EKSTRIM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>KESALAHAN GPU</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>NEAREST</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICUBIC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>TANPA AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5485,76 +5460,76 @@ This will delete your autogenerated key files and re-run the key derivation modu <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- Kehilangan BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- Kehilangan BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- Kehilangan PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Apakah anda yakin ingin menutup yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7546,26 +7521,26 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7585,20 +7560,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Pengguna</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation type="unfinished"/> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation type="unfinished"/> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7644,51 +7680,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation type="unfinished"/> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation type="unfinished"/> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation type="unfinished"/> </message> @@ -7696,120 +7701,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation type="unfinished"/> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation type="unfinished"/> </message> @@ -7817,7 +7812,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/it.ts b/dist/languages/it.ts index c535d53ee..688a071e7 100644 --- a/dist/languages/it.ts +++ b/dist/languages/it.ts @@ -380,36 +380,61 @@ Questo bannerà sia il suo nome utente del forum che il suo indirizzo IP.</trans </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Dispositivo di output</translation> + <source>Output Device:</source> + <translation>Dispositivo di output:</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Dispositivo di input</translation> + <source>Input Device:</source> + <translation>Dispositivo di input:</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation>Modalità di output del suono:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Usa il volume globale</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Imposta il volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Silenzia l'audio quando la finestra è in background</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1363,26 +1388,21 @@ Questo bannerà sia il suo nome utente del forum che il suo indirizzo IP.</trans </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Silenzia l'audio quando la finestra è in background</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Nascondi il puntatore del mouse se inattivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Ripristina tutte le impostazioni</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Tutte le impostazioni verranno ripristinate e tutte le configurazioni dei giochi verranno rimosse. Le cartelle di gioco, i profili e i profili di input non saranno cancellati. Vuoi procedere?</translation> </message> @@ -1718,12 +1738,12 @@ Questo bannerà sia il suo nome utente del forum che il suo indirizzo IP.</trans <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> - <translation type="unfinished"/> + <translation>Abilita la decodifica asincrona delle texture ASTC, che può ridurre gli scatti durante il caricamento. Questa funzione è sperimentale.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> <source>Decode ASTC textures asynchronously (Hack)</source> - <translation type="unfinished"/> + <translation>Decodifica le texture ASTC in maniera asincrona (espediente)</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> @@ -3816,60 +3836,15 @@ UUID: %2</translation> <translation>Nome del dispositivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID Console:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Modalità di output del sonoro</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Rigenera</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Le impostazioni di sistema sono disponibili solamente quando il gioco non è in esecuzione.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Attenzione: "%1" non è una lingua valida per la regione "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Questo rimpiazzerà la tua Switch virtuale con una nuova. La tua Switch virtuale non sarà recuperabile. Questo potrebbe avere effetti indesiderati nei giochi. Questo potrebbe fallire, se usi un salvataggio non aggiornato. Desideri continuare?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Attenzione</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID Console: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4557,554 +4532,554 @@ Trascina i punti per cambiare posizione, oppure clicca due volte la cella in tab <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Vengono raccolti dati anonimi</a> per aiutarci a migliorare yuzu. <br/><br/>Desideri condividere i tuoi dati di utilizzo con noi?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Rilevata installazione di Vulkan non funzionante</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>L'inizializzazione di Vulkan è fallita durante l'avvio.<br><br>Clicca <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>qui per istruzioni su come risolvere il problema</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Caricamento dell'applet web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Disabilita l'applet web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Il numero di shaders al momento in costruzione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Velocità corrente dell'emulazione. Valori più alti o più bassi di 100% indicano che l'emulazione sta funzionando più velocemente o lentamente rispetto a una Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Il numero di fotogrammi al secondo che il gioco visualizza attualmente. Può variare in base al gioco e alla situazione.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Tempo necessario per emulare un fotogramma della Switch, senza tenere conto del limite al framerate o del V-Sync. Per un'emulazione alla massima velocità , il valore non dovrebbe essere superiore a 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Cancella i file recenti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Continua</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pausa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Formato del gioco obsoleto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Stai usando una cartella con dentro una ROM decostruita come formato per avviare questo gioco, è un formato obsoleto ed è stato sostituito da altri come NCA, NAX, XCI o NSP. Le ROM decostruite non hanno icone, metadata e non supportano gli aggiornamenti. <br><br>Per una spiegazione sui vari formati di Switch che yuzu supporta, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>controlla la nostra wiki</a>. Questo messaggio non verrà più mostrato.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Errore nel caricamento della ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Il formato della ROM non è supportato.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>È stato riscontrato un errore nell'inizializzazione del core video.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Errore nel caricamento della ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Segui <a href='https://yuzu-emu.org/help/quickstart/'>la guida introduttiva di yuzu</a> per rifare il dump dei file.<br>Puoi fare riferimento alla wiki di yuzu</a> o al server Discord di yuzu</a> per assistenza.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Si è verificato un errore sconosciuto. Visualizza il log per maggiori dettagli.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Chiusura del software in corso...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Dati di salvataggio</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Dati delle mod</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Impossibile aprire la cartella %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>La cartella non esiste!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Impossibile aprire la cache trasferibile degli shader</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Impossibile creare la cartella della cache degli shader per questo titolo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Impossibile rimuovere il contentuto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Impossibile rimuovere l'aggiornamento</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Impossibile rimuovere il DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Rimuovere il contenuto del gioco installato?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Rimuovere l'aggiornamento installato?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Rimuovere il DLC installato?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Rimuovi voce</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>Rimozione completata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>Il gioco base installato è stato rimosso con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Il gioco base non è installato su NAND e non può essere rimosso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Aggiornamento rimosso con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Non c'è alcun aggiornamento installato per questo gioco.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Non c'è alcun DLC installato per questo gioco.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 DLC rimossi con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Vuoi rimuovere la cache trasferibile degli shader OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Vuoi rimuovere la cache trasferibile degli shader Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Vuoi rimuovere tutte le cache trasferibili degli shader?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Rimuovere la configurazione personalizzata del gioco?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Rimuovi file</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Impossibile rimuovere la cache trasferibile degli shader</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Per questo titolo non esiste una cache degli shader.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>La cache trasferibile degli shader è stata rimossa con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Impossibile rimuovere la cache trasferibile degli shader.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Impossibile rimuovere la cache delle pipeline del driver Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Impossibile rimuovere la cache delle pipeline del driver.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Impossibile rimuovere le cache trasferibili degli shader</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>Le cache trasferibili degli shader sono state rimosse con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Impossibile rimuovere la cartella della cache trasferibile degli shader.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Impossibile rimuovere la configurazione personalizzata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Non esiste una configurazione personalizzata per questo gioco.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>La configurazione personalizzata del gioco è stata rimossa con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Impossibile rimuovere la configurazione personalizzata del gioco.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Estrazione RomFS fallita!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>C'è stato un errore nella copia dei file del RomFS o l'operazione è stata annullata dall'utente.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Completa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Cartelle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Seleziona la modalità di estrazione della RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Seleziona come vorresti estrarre la RomFS. <br>La modalità Completa copierà tutti i file in una nuova cartella mentre<br>la modalità Cartelle creerà solamente le cartelle e le sottocartelle.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Estrazione RomFS in corso...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Annulla</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Estrazione RomFS riuscita!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>L'operazione è stata completata con successo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Crea scorciatoia</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Verrà creata una scorciatoia all'AppImage attuale. Potrebbe non funzionare correttamente se effettui un aggiornamento. Vuoi continuare?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>Impossibile creare la scorciatoia sul desktop. Il percorso "%1" non esiste.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>Impossibile creare la scorciatoia nel menù delle applicazioni. Il percorso "%1" non esiste e non può essere creato.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Crea icona</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Impossibile creare il file dell'icona. Il percorso "%1" non esiste e non può essere creato.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>Avvia %1 con l'emulatore yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Impossibile creare la scorciatoia in %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>Scorciatoia creata con successo in %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Impossibile aprire %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Seleziona cartella</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Proprietà </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Non è stato possibile caricare le proprietà del gioco.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Eseguibile Switch (%1);;Tutti i file (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Carica file</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Apri cartella ROM estratta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Cartella selezionata non valida</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>La cartella che hai selezionato non contiene un file "main".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>File installabili Switch (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Installa file</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n file rimanente</numerusform><numerusform>%n file rimanenti</numerusform><numerusform>%n file rimanenti</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Installazione del file "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Risultati dell'installazione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Per evitare possibli conflitti, sconsigliamo di installare i giochi base su NAND. Usa questa funzione solo per installare aggiornamenti e DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n nuovo file è stato installato @@ -5113,7 +5088,7 @@ Usa questa funzione solo per installare aggiornamenti e DLC.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n file è stato sovrascritto @@ -5122,7 +5097,7 @@ Usa questa funzione solo per installare aggiornamenti e DLC.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n file non è stato installato a causa di errori @@ -5131,389 +5106,389 @@ Usa questa funzione solo per installare aggiornamenti e DLC.</translation> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Applicazione di sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Archivio di sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Aggiornamento di un'applicazione di sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Pacchetto firmware (tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Pacchetto firmware (tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Gioco</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Aggiornamento di gioco</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Titolo delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Seleziona il tipo di installazione NCA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Seleziona il tipo del file NCA da installare: (Nella maggior parte dei casi, il valore predefinito 'Gioco' va bene.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Installazione fallita</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Il tipo che hai selezionato per l'NCA non è valido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>File non trovato</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>File "%1" non trovato</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Requisiti hardware non soddisfatti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Il tuo sistema non soddisfa i requisiti hardware consigliati. La funzionalità di segnalazione della compatibilità è stata disattivata.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Account di yuzu non trovato</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Per segnalare la compatibilità di un gioco, devi collegare il tuo account yuzu. <br><br/>Per collegare il tuo account yuzu, vai su Emulazione &gt; Configurazione &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Impossibile aprire l'URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Non è stato possibile aprire l'URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Vuoi sovrascrivere il file del giocatore 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Trovata configurazione invalida</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Il controller portatile non può essere utilizzato in modalità dock. Verrà selezionato il controller Pro.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>L'Amiibo corrente è stato rimosso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Errore</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>File Amiibo (%1);; Tutti i file (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Carica Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Impossibile caricare i dati dell'Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>Il file selezionato non è un Amiibo valido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>Il file selezionato è già in uso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Si è verificato un errore sconosciuto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Cattura screenshot</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Immagine PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Interrompi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Avvia</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>Interrompi r&egistrazione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>R&egistra</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Compilazione di %n shader</numerusform><numerusform>Compilazione di %n shader</numerusform><numerusform>Compilazione di %n shader</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Velocità : %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Velocità : %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Gioco: %1 FPS (Sbloccati)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Gioco: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMALE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU ALTA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU ESTREMA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>ERRORE GPU</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>DOCK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>PORTATILE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>NEAREST</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEARE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICUBICO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIANO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>VOLUME: MUTO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Conferma ri-derivazione chiavi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5530,37 +5505,37 @@ e facoltativamente fai dei backup. Questo eliminerà i tuoi file di chiavi autogenerati e ri-avvierà il processo di derivazione delle chiavi.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Fusi mancanti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation> - BOOT0 mancante</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - BCPKG2-1-Normal-Main mancante</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- PRODINFO mancante</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Componenti di derivazione mancanti</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Chiavi di crittografia mancanti. <br>Segui <a href='https://yuzu-emu.org/help/quickstart/'>la guida introduttiva di yuzu</a> per ottenere tutte le tue chiavi, il tuo firmware e i tuoi giochi.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5569,39 +5544,39 @@ Questa operazione potrebbe durare fino a un minuto in base alle prestazioni del tuo sistema.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Derivazione chiavi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Seleziona Target dell'Estrazione del RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Seleziona quale RomFS vorresti estrarre.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Sei sicuro di voler chiudere yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Sei sicuro di voler arrestare l'emulazione? Tutti i progressi non salvati verranno perduti.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7218,7 +7193,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="136"/> <source>Extra</source> - <translation type="unfinished"/> + <translation>Extra</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="191"/> @@ -7235,7 +7210,7 @@ p, li { white-space: pre-wrap; } <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="223"/> <location filename="../../src/yuzu/configuration/configure_input_player.cpp" line="238"/> <source>%1%2%3Button %4</source> - <translation type="unfinished"/> + <translation>%1%2%3Pulsante %4</translation> </message> </context> <context> @@ -7604,28 +7579,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Codice di errore: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Si è verificato un errore. Riprova o contatta gli sviluppatori del programma.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Si è verificato un errore su %1 a %2. Riprova o contatta gli sviluppatori del programma.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7649,20 +7624,81 @@ Riprova o contatta gli sviluppatori del programma.</translation> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Seleziona un utente:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Utenti</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Selettore profili</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Seleziona un utente:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7712,51 +7748,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Stack chiamata</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>attende il mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>ha dei waiter: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>proprietario handle: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>attende tutti gli oggetti</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>attende uno dei seguenti oggetti</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation>[%1] %2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>atteso da nessun thread</translation> </message> @@ -7764,120 +7769,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>eseguibile</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>in pausa</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>dormendo</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>attende una risposta dell'IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>attende degli oggetti</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>aspettando la condition variable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>attende un indirizzo arbitro</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>in attesa di riprendere la sospensione</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>attendere</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>inizializzato</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>terminato</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>sconosciuto</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideale</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>core %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processore = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>core ideale = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>affinity mask = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>id thread = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>priorità = %1(corrente) / %2(normale)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>Ultimi ticks in esecuzione = %1.</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>Non in attesa per la sincronizzazione dei processi concorrenti aka Mutex.</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>atteso dal thread</translation> </message> @@ -7885,7 +7880,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Wait Tree</translation> </message> diff --git a/dist/languages/ja_JP.ts b/dist/languages/ja_JP.ts index 36735d864..66c09d493 100644 --- a/dist/languages/ja_JP.ts +++ b/dist/languages/ja_JP.ts @@ -380,36 +380,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>出力デãƒã‚¤ã‚¹</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>入力デãƒã‚¤ã‚¹</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>モノラル</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>ステレオ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>サラウンド</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>共通è¨å®šã‚’使用</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>カスタムè¨å®š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>音é‡ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–時ã«ã‚µã‚¦ãƒ³ãƒ‰ã‚’ミュート</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -808,12 +833,15 @@ This would ban both their forum username and their IP address.</source> <div style="white-space: nowrap">This optimization speeds up memory accesses by allowing invalid memory accesses to succeed.</div> <div style="white-space: nowrap">Enabling it reduces the overhead of all memory accesses and has no impact on programs that don't access invalid memory.</div> </source> - <translation type="unfinished"/> + <translation> + <div style="white-space: nowrap">ã“ã®æœ€é©åŒ–ã«ã‚ˆã‚Šã€ç„¡åйãªãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹ã‚’æˆåŠŸã•ã›ã‚‹ã“ã¨ã§ã€ãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹ã‚’高速化ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</div> + <div style="white-space: nowrap">有効ã«ã™ã‚‹ã¨ã€ã™ã¹ã¦ã®ãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ãŒæ¸›å°‘ã™ã‚‹ã†ãˆã€ç„¡åйãªãƒ¡ãƒ¢ãƒªã«ã‚¢ã‚¯ã‚»ã‚¹ã—ãªã„プãƒã‚°ãƒ©ãƒ ã«ã¯å½±éŸ¿ã¯ã‚りã¾ã›ã‚“。</div> + </translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="187"/> <source>Enable fallbacks for invalid memory accesses</source> - <translation type="unfinished"/> + <translation>無効ãªãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹ã«å¯¾ã™ã‚‹ãƒ•ォールãƒãƒƒã‚¯ã‚’有効ã«ã™ã‚‹</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_cpu_debug.ui" line="212"/> @@ -936,7 +964,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="211"/> <source>When checked, it disables the macro HLE functions. Enabling this makes games run slower</source> - <translation type="unfinished"/> + <translation>有効化ã™ã‚‹ã¨ã€ãƒžã‚¯ãƒHLE機能を無効ã«ã—ã¾ã™ã€‚ã“れを有効ã«ã™ã‚‹ã¨ã€ã‚²ãƒ¼ãƒ ã®å‹•作ãŒé…ããªã‚Šã¾ã™</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="214"/> @@ -1031,12 +1059,12 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="332"/> <source>Enables yuzu to check for a working Vulkan environment when the program starts up. Disable this if this is causing issues with external programs seeing yuzu.</source> - <translation type="unfinished"/> + <translation>プãƒã‚°ãƒ©ãƒ 起動時ã«yuzuãŒVulkan環境ãŒå‹•作ã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚外部プãƒã‚°ãƒ©ãƒ ãŒyuzuã‚’å‚ç…§ã™ã‚‹éš›ã«å•題ãŒã‚ã‚‹å ´åˆã¯ã€ã“れを無効ã«ã—ã¦ãã ã•ã„。</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="335"/> <source>Perform Startup Vulkan Check</source> - <translation type="unfinished"/> + <translation>スタートアップ時ã«Vulkanã®ãƒã‚§ãƒƒã‚¯ã‚’実行ã™ã‚‹</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.ui" line="350"/> @@ -1056,7 +1084,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="88"/> <source>Web applet not compiled</source> - <translation type="unfinished"/> + <translation>ウェブアプレットãŒã‚³ãƒ³ãƒ‘イルã•れã¦ã„ãªã„</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_debug.cpp" line="95"/> @@ -1375,26 +1403,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–時ã«ã‚µã‚¦ãƒ³ãƒ‰ã‚’ミュート</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>éžã‚¢ã‚¯ãƒ†ã‚£ãƒ–時ã«ãƒžã‚¦ã‚¹ã‚«ãƒ¼ã‚½ãƒ«ã‚’éš ã™</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>ã™ã¹ã¦ã®è¨å®šã‚’リセット</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>ã™ã¹ã¦ã®è¨å®šãŒãƒªã‚»ãƒƒãƒˆã•れã€ã‚²ãƒ¼ãƒ ã”ã¨ã®è¨å®šã‚‚ã™ã¹ã¦å‰Šé™¤ã•れã¾ã™ã€‚ゲームディレクトリã€ãƒ—ãƒãƒ•ァイルã€å…¥åŠ›ãƒ—ãƒãƒ•ァイルã¯å‰Šé™¤ã•れã¾ã›ã‚“。続行ã—ã¾ã™ã‹?</translation> </message> @@ -1640,12 +1663,12 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="568"/> <source>Set FSR Sharpness</source> - <translation type="unfinished"/> + <translation>FSR シャープãƒã‚¹ã‚’è¨å®š</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="582"/> <source>FSR Sharpness:</source> - <translation type="unfinished"/> + <translation>FSR シャープãƒã‚¹:</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics.ui" line="649"/> @@ -1710,7 +1733,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="75"/> <source>Runs work in the background while waiting for graphics commands to keep the GPU from lowering its clock speed.</source> - <translation type="unfinished"/> + <translation>GPUã®ã‚¯ãƒãƒƒã‚¯ã‚¹ãƒ”ードを下ã’ãªã„よã†ã«ã€ã‚°ãƒ©ãƒ•ィックコマンドを待ã£ã¦ã„ã‚‹é–“ã€ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰ã§ä½œæ¥ã‚’実行ã•ã›ã¾ã™ã€‚</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="78"/> @@ -1730,12 +1753,12 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> - <translation type="unfinished"/> + <translation>éžåŒæœŸASTCテクスãƒãƒ£ãƒ¼ãƒ‡ã‚³ãƒ¼ãƒ‰ã‚’有効ã«ã—ã€ãƒãƒ¼ãƒ‰æ™‚é–“ã®ã‚¹ã‚¿ãƒƒã‚¿ãƒ¼ã‚’減らã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯å®Ÿé¨“çš„ãªã‚‚ã®ã§ã™ã€‚</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> <source>Decode ASTC textures asynchronously (Hack)</source> - <translation type="unfinished"/> + <translation>ASTCテクスãƒãƒ£ã‚’éžåŒæœŸã§ãƒ‡ã‚³ãƒ¼ãƒ‰ã™ã‚‹ï¼ˆãƒãƒƒã‚¯ï¼‰</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> @@ -1770,7 +1793,7 @@ This would ban both their forum username and their IP address.</source> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="135"/> <source>Enables GPU vendor-specific pipeline cache. This option can improve shader loading time significantly in cases where the Vulkan driver does not store pipeline cache files internally.</source> - <translation type="unfinished"/> + <translation>GPU ベンダー固有ã®ãƒ‘イプラインã‚ャッシュを有効ã«ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€VulkanドライãƒãŒãƒ‘イプラインã‚ャッシュファイルを内部ã«ä¿å˜ã—ã¦ã„ãªã„å ´åˆã«ã€ã‚·ã‚§ãƒ¼ãƒ€ã®ãƒãƒ¼ãƒ‰æ™‚é–“ã‚’å¤§å¹…ã«æ”¹å–„ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="138"/> @@ -3828,60 +3851,15 @@ UUID: %2</translation> <translation>デãƒã‚¤ã‚¹å</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>モノラル</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>ステレオ</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>サラウンド</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>コンソールID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>サウンド出力モード</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>å†ä½œæˆ</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>システムè¨å®šã¯ã‚²ãƒ¼ãƒ 未実行時ã«ã®ã¿å¤‰æ›´ã§ãã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>仮想Switchコンソールをå†ä½œæˆã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚ç¾åœ¨ä½¿ç”¨ä¸ã®ä»®æƒ³Switchコンソールを後ã‹ã‚‰å¾©æ—§ã•ã›ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ゲームã«äºˆæœŸã›ã¬å½±éŸ¿ã‚’与ãˆã‚‹å¯èƒ½æ€§ãŒã‚りã€å¤ã„è¨å®šãªã©ã‚’使ã†ã¨å¤±æ•—ã™ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ãれã§ã‚‚続行ã—ã¾ã™ã‹ï¼Ÿ</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>è¦å‘Š</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>コンソールID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4569,957 +4547,957 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation>yuzuを改善ã™ã‚‹ãŸã‚ã®<a href='https://yuzu-emu.org/help/feature/telemetry/'>匿åデータãŒåŽé›†ã•れã¾ã—ãŸ</a>。<br/><br/>çµ±è¨ˆæƒ…å ±ãƒ‡ãƒ¼ã‚¿ã‚’å…±æœ‰ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>テレメトリ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>壊れãŸVulkanã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ãŒæ¤œå‡ºã•れã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>ブート時ã«Vulkanã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚<br><br>ã“ã®å•題を解決ã™ã‚‹ãŸã‚ã®æ‰‹é †ã¯<a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>ã“ã¡ã‚‰</a>。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Webアプレットをãƒãƒ¼ãƒ‰ä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Webアプレットã®ç„¡åŠ¹åŒ–</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>Webアプレットを無効ã«ã™ã‚‹ã¨ã€æœªå®šç¾©ã®å‹•作ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã‚¹ãƒ¼ãƒ‘ーマリオ3Dオールスターズã§ã®ã¿ä½¿ç”¨ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。本当ã«Webアプレットを無効化ã—ã¾ã™ã‹ï¼Ÿ (デãƒãƒƒã‚°è¨å®šã§å†åº¦æœ‰åйã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼‰ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>ビルドä¸ã®ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼æ•°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>ç¾åœ¨é¸æŠžã•れã¦ã„ã‚‹è§£åƒåº¦ã®å€çŽ‡ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>ç¾åœ¨ã®ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³é€Ÿåº¦ã€‚値ãŒ100%より高ã„ã‹ä½Žã„å ´åˆã€ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³é€Ÿåº¦ãŒSwitchより速ã„ã‹é…ã„ã“ã¨ã‚’示ã—ã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>ゲームãŒç¾åœ¨è¡¨ç¤ºã—ã¦ã„ã‚‹1ç§’ã‚ãŸã‚Šã®ãƒ•レーム数。ã“れã¯ã‚²ãƒ¼ãƒ ã”ã¨ã€ã‚·ãƒ¼ãƒ³ã”ã¨ã«ç•°ãªã‚Šã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Switchフレームをエミュレートã™ã‚‹ã®ã«ã‹ã‹ã‚‹æ™‚é–“ã§ã€ãƒ•レームリミットやV-Syncã¯å«ã¾ã‚Œã¾ã›ã‚“。フルスピードエミュレーションã®å ´åˆã€æœ€å¤§ã§16.67ミリ秒ã«ãªã‚Šã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>最近ã®ãƒ•ァイルをクリア(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>å†é–‹(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>䏿–(&P)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzuã¯ã‚²ãƒ¼ãƒ ã‚’èµ·å‹•ã—ã¦ã„ã¾ã™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>å¤ã„ゲームフォーマットã®è¦å‘Š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>ã“ã®ã‚²ãƒ¼ãƒ ã§ã¯ã€åˆ†è§£ã•れãŸROMディレクトリフォーマットを使用ã—ã¦ã„ã¾ã™ã€‚ã“れã¯ã€NCAã€NAXã€XCIã€ã¾ãŸã¯NSPãªã©ã«å–ã£ã¦ä»£ã‚られãŸå¤ã„フォーマットã§ã™ã€‚分解ã•れãŸROMディレクトリã«ã¯ã€ã‚¢ã‚¤ã‚³ãƒ³ã€ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã€ãŠã‚ˆã³ã‚¢ãƒƒãƒ—デートサãƒãƒ¼ãƒˆãŒã‚りã¾ã›ã‚“。<br><br>yuzuãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹Switchフォーマットã®èª¬æ˜Žã«ã¤ã„ã¦ã¯ã€<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>wikiã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„</a>。ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯äºŒåº¦ã¨è¡¨ç¤ºã•れã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>ROMãƒãƒ¼ãƒ‰ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>ã“ã®ROMフォーマットã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>ãƒ“ãƒ‡ã‚ªã‚³ã‚¢åˆæœŸåŒ–ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzuã¯ã€ãƒ“デオコアã®å®Ÿè¡Œä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã“れã¯é€šå¸¸ã€å†…蔵GPUã‚‚å«ã‚ã€å¤ã„GPUドライãƒãŒåŽŸå› ã§ã™ã€‚詳ã—ãã¯ãƒã‚°ã‚’ã”覧ãã ã•ã„。ãƒã‚°ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã®ãƒšãƒ¼ã‚¸ã‚’ã”覧ãã ã•ã„:<a href='https://yuzu-emu.org/help/reference/log-files/'>ãƒã‚°ãƒ•ァイルã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ–¹æ³•ã«ã¤ã„ã¦</a>。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>ROMã®ãƒãƒ¼ãƒ‰ä¸ã«ã‚¨ãƒ©ãƒ¼! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br><a href='https://yuzu-emu.org/help/quickstart/'>yuzuクイックスタートガイド</a>ã‚’å‚ç…§ã—ã¦ãƒ•ァイルをå†ãƒ€ãƒ³ãƒ—ã—ã¦ãã ã•ã„。<br>ã¾ãŸã¯yuzu wikiåŠã³</a>yuzu Discord</a>ã‚’å‚ç…§ã™ã‚‹ã¨ã‚ˆã„ã§ã—ょã†ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>䏿˜Žãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚詳細ã¯ãƒã‚°ã‚’確èªã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>データã®ã‚»ãƒ¼ãƒ–</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Modデータ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>â€%1â€ãƒ•ォルダを開ã‘ã¾ã›ã‚“ã§ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>フォルダãŒå˜åœ¨ã—ã¾ã›ã‚“ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>シェーダã‚ャッシュを開ã‘ã¾ã›ã‚“ã§ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ç”¨ã®ã‚·ã‚§ãƒ¼ãƒ€ã‚ャッシュディレクトリã®ä½œæˆã«å¤±æ•—ã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>コンテンツã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>アップデートã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>DLC ã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã®ã‚¢ãƒƒãƒ—デートを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã® DLC を削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>エントリ削除</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>削除ã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>インストールã•れãŸã‚²ãƒ¼ãƒ ã‚’æ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>ゲームã¯NANDã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ãŸã‚ã€å‰Šé™¤ã§ãã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>インストールã•れãŸã‚¢ãƒƒãƒ—デートをæ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã®ã‚¢ãƒƒãƒ—デートã¯ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã«ã¯DLCãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>ï¼…1ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れãŸDLCã‚’æ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>転é€å¯èƒ½ãªOpenGLシェーダã‚ャッシュを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>転é€å¯èƒ½ãªVulkanシェーダã‚ャッシュを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>転é€å¯èƒ½ãªã™ã¹ã¦ã®ã‚·ã‚§ãƒ¼ãƒ€ã‚ャッシュを削除ã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã®ã‚«ã‚¹ã‚¿ãƒ è¨å®šã‚’削除ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>ファイル削除</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>転é€å¯èƒ½ãªã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚ャッシュã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ç”¨ã®ã‚·ã‚§ãƒ¼ãƒ€ã‚ャッシュã¯å˜åœ¨ã—ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>転é€å¯èƒ½ãªã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚ãƒ£ãƒƒã‚·ãƒ¥ãŒæ£å¸¸ã«å‰Šé™¤ã•れã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>転é€å¯èƒ½ãªã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ã‚ャッシュを削除ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>転é€å¯èƒ½ãªã‚·ã‚§ãƒ¼ãƒ€ã‚ャッシュã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>転é€å¯èƒ½ãªã‚·ã‚§ãƒ¼ãƒ€ã‚ャッシュをæ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>転é€å¯èƒ½ãªã‚·ã‚§ãƒ¼ãƒ€ã‚ャッシュディレクトリã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>カスタムè¨å®šã®å‰Šé™¤ã‚¨ãƒ©ãƒ¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>ã“ã®ã‚¿ã‚¤ãƒˆãƒ«ã®ã‚«ã‚¹ã‚¿ãƒ è¨å®šã¯å˜åœ¨ã—ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>カスタムè¨å®šã‚’æ£å¸¸ã«å‰Šé™¤ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>カスタムè¨å®šã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFSã®è§£æžã«å¤±æ•—ã—ã¾ã—ãŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>RomFSファイルをコピーä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸã‹ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼æ“作ã«ã‚ˆã‚Šã‚ャンセルã•れã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>フル</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>スケルトン</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>RomFSダンプモードã®é¸æŠž</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>RomFSã®ãƒ€ãƒ³ãƒ—æ–¹æ³•ã‚’é¸æŠžã—ã¦ãã ã•ã„。<br>â€å®Œå…¨â€ã¯ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ–°ã—ã„ディレクトリã«ã‚³ãƒ”ーã•れã¾ã™ã€‚<br>â€ã‚¹ã‚±ãƒ«ãƒˆãƒ³â€ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªæ§‹é€ を作æˆã™ã‚‹ã ã‘ã§ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>%1 ã« RomFS を展開ã™ã‚‹ãŸã‚ã®å分ãªç©ºãé ˜åŸŸãŒã‚りã¾ã›ã‚“。Emulation > Configure > System > Filesystem > Dump Root ã§ã€ç©ºã容é‡ã‚’確ä¿ã™ã‚‹ã‹ã€åˆ¥ã®ãƒ€ãƒ³ãƒ—ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é¸æŠžã—ã¦ãã ã•ã„。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>RomFSã‚’è§£æžä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>ã‚ャンセル</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFSè§£æžæˆåŠŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>æ“ä½œã¯æˆåŠŸã—ã¾ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>ショートカットを作æˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>アイコンを作æˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>â€%1â€ã‚’é–‹ã‘ã¾ã›ã‚“ã§ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>ディレクトリã®é¸æŠž</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>プãƒãƒ‘ティ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>ゲームプãƒãƒ‘ティをãƒãƒ¼ãƒ‰å‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch実行ファイル (%1);;ã™ã¹ã¦ã®ãƒ•ァイル (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>ファイルã®ãƒãƒ¼ãƒ‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>展開ã•れã¦ã„ã‚‹ROMディレクトリを開ã</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>無効ãªãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãŒé¸æŠžã•れã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>é¸æŠžã•れãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«â€mainâ€ãƒ•ァイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>インストールå¯èƒ½ãªã‚¹ã‚¤ãƒƒãƒãƒ•ァイル (*.nca *.nsp *.xci);;ä»»å¤©å ‚ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚¢ãƒ¼ã‚«ã‚¤ãƒ– (*.nca);;ä»»å¤©å ‚ã‚µãƒ–ãƒŸãƒƒã‚·ãƒ§ãƒ³ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ (*.nsp);;NXカートリッジイメージ (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>ファイルã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>残り %n ファイル</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>"%1"ファイルをインストールã—ã¦ã„ã¾ã™ãƒ»ãƒ»ãƒ»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«çµæžœ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>ç«¶åˆã‚’é¿ã‘ã‚‹ãŸã‚ã€NANDã«ã‚²ãƒ¼ãƒ 本体をインストールã™ã‚‹ã“ã¨ã¯ãŠå‹§ã‚ã—ã¾ã›ã‚“。 ã“ã®æ©Ÿèƒ½ã¯ã€ã‚¢ãƒƒãƒ—デートやDLCã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«ã®ã¿ä½¿ç”¨ã—ã¦ãã ã•ã„。</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ–°ãŸã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã—㟠</numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n ファイルãŒä¸Šæ›¸ãã•れã¾ã—㟠</numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n ファイルã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«å¤±æ•—ã—ã¾ã—㟠</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>システムアプリケーション</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>システムアーカイブ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>システムアプリケーションアップデート</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>ファームウェアパッケージ(Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>ファームウェアパッケージ(Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>ゲーム</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>ゲームアップデート</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>ゲームDLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>差分タイトル</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>NCAã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ç¨®åˆ¥ã‚’é¸æŠžãƒ»ãƒ»ãƒ»</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>インストールã™ã‚‹NCAã‚¿ã‚¤ãƒˆãƒ«ç¨®åˆ¥ã‚’é¸æŠžã—ã¦ä¸‹ã•ã„: (ã»ã¨ã‚“ã©ã®å ´åˆã€ãƒ‡ãƒ•ォルトã®â€ã‚²ãƒ¼ãƒ â€ã§å•題ã‚りã¾ã›ã‚“。)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>インストール失敗</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>é¸æŠžã•れãŸNCAã®ã‚¿ã‚¤ãƒˆãƒ«ç¨®åˆ¥ãŒç„¡åйã§ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>ファイルãŒå˜åœ¨ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>ファイルâ€%1â€ãŒå˜åœ¨ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>yuzuアカウントãŒå˜åœ¨ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>ゲームã®äº’æ›æ€§ãƒ†ã‚¹ãƒˆã‚±ãƒ¼ã‚¹ã‚’é€ä¿¡ã™ã‚‹ã«ã¯ã€yuzuアカウントをリンクã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚<br><br/>yuzuアカウントをリンクã™ã‚‹ã«ã¯ã€ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ > è¨å®š > Web ã‹ã‚‰è¡Œã„ã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>URLオープンエラー</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>URL"%1"ã‚’é–‹ã‘ã¾ã›ã‚“。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation> TAS 記録ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>プレイヤー1ã®ãƒ•ァイルを上書ãã—ã¾ã™ã‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>無効ãªè¨å®šã‚’検出ã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>æºå¸¯ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã¯ãƒ‰ãƒƒã‚¯ãƒ¢ãƒ¼ãƒ‰ã§ä½¿ç”¨ã§ããªã„ãŸã‚ã€Proコントãƒãƒ¼ãƒ©ãŒé¸æŠžã•れã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>ç¾åœ¨ã® amiibo ã¯å‰Šé™¤ã•れã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>エラー</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>ç¾åœ¨ã®ã‚²ãƒ¼ãƒ ã¯amiiboã‚’è¦æ±‚ã—ã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>amiiboファイル (%1);;ã™ã¹ã¦ã®ãƒ•ァイル (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>amiiboã®ãƒãƒ¼ãƒ‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>amiiboデータèªã¿è¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>スクリーンショットã®ã‚ャプãƒãƒ£</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNGç”»åƒ (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>TAS 状態: å®Ÿè¡Œä¸ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>TAS 状態: è¨˜éŒ²ä¸ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>TAS 状態: アイドル %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>TAS 状態: 無効</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>å®Ÿè¡Œåœæ¢(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>実行(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>è¨˜éŒ²åœæ¢(&R)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>記録(&R)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>構築ä¸: %n シェーダー</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>拡大率: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>速度:%1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>速度:%1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Game: %1 FPS(制é™è§£é™¤ï¼‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>ゲーム:%1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>フレーム:%1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU HIGH</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTREME</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU ERROR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>DOCKED</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>HANDHELD</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>NEAREST</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICUBIC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>NO AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>音é‡: ミュート</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>音é‡: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>ã‚ーã®å†å–得確èª</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5536,37 +5514,37 @@ This will delete your autogenerated key files and re-run the key derivation modu 実行ã™ã‚‹ã¨ã€è‡ªå‹•生æˆã•れãŸéµãƒ•ァイルãŒå‰Šé™¤ã•れã€éµç”Ÿæˆãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒå†å®Ÿè¡Œã•れã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>ヒューズãŒã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation> - BOOT0ãŒã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - BCPKG2-1-Normal-MainãŒã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - PRODINFOãŒã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>派生コンãƒãƒ¼ãƒãƒ³ãƒˆãŒã‚りã¾ã›ã‚“</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>æš—å·åŒ–ã‚ーãŒã‚りã¾ã›ã‚“。<br>ã‚ーã€ãƒ•ァームウェアã€ã‚²ãƒ¼ãƒ ã‚’å–å¾—ã™ã‚‹ã«ã¯<a href='https://yuzu-emu.org/help/quickstart/'>yuzu クイックスタートガイド</a>ã‚’å‚ç…§ãã ã•ã„。<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5575,39 +5553,39 @@ on your system's performance.</source> 1分以上ã‹ã‹ã‚Šã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>派生ã‚ー</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>RomFSダンプターゲットã®é¸æŠž</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>ダンプã—ãŸã„RomFSã‚’é¸æŠžã—ã¦ä¸‹ã•ã„。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>yuzuを終了ã—ã¾ã™ã‹ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’åœæ¢ã—ã¾ã™ã‹ï¼Ÿã‚»ãƒ¼ãƒ–ã•れã¦ã„ãªã„進行状æ³ã¯å¤±ã‚れã¾ã™ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7610,28 +7588,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>エラーコード: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ ã‚‚ã†ä¸€åº¦è©¦ã™ã‹ã€é–‹ç™ºè€…ã«å ±å‘Šã—ã¦ãã ã•ã„。</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>%1ã®%2ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ å†è©¦è¡Œã™ã‚‹ã‹ã€ã‚½ãƒ•トウェアã®é–‹ç™ºè€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7655,20 +7633,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>ãƒ¦ãƒ¼ã‚¶ãƒ¼é¸æŠžï¼š</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>ユーザー</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>プãƒãƒ•ã‚¡ã‚¤ãƒ«é¸æŠž</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>ãƒ¦ãƒ¼ã‚¶ãƒ¼é¸æŠžï¼š</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7718,51 +7757,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Call stack</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>waiting for mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>has waiters: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>owner handle: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>waiting for all objects</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>waiting for one of the following objects</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>waited by no thread</translation> </message> @@ -7770,120 +7778,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>runnable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>paused</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>sleeping</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>waiting for IPC reply</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>waiting for objects</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>waiting for condition variable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>waiting for address arbiter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>waiting for suspend resume</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>waiting</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>initialized</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>terminated</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>unknown</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>core %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ideal core = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>affinity mask = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>thread id = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>priority = %1(current) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>last running ticks = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>not waiting for mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>waited by thread</translation> </message> @@ -7891,7 +7889,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Wait Tree</translation> </message> diff --git a/dist/languages/ko_KR.ts b/dist/languages/ko_KR.ts index cebba03aa..bd5e8fa18 100644 --- a/dist/languages/ko_KR.ts +++ b/dist/languages/ko_KR.ts @@ -380,36 +380,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>ì¶œë ¥ 장치</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>ìž…ë ¥ 장치</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>모노</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>ìŠ¤í…Œë ˆì˜¤</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>서ë¼ìš´ë“œ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>ì „ì— ë³¼ë¥¨ ì„¤ì • 사용</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>볼륨 ì„¤ì •:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>볼륨:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>백그ë¼ìš´ë“œì—서 오디오 ìŒì†Œê±°</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1379,26 +1404,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>백그ë¼ìš´ë“œì—서 오디오 ìŒì†Œê±°</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>비활성 ìƒíƒœì¼ 때 마우스 숨기기</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>ëª¨ë“ ì„¤ì • 초기화</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>ëª¨ë“ í™˜ê²½ ì„¤ì •ê³¼ 게임별 맞춤 ì„¤ì •ì´ ì´ˆê¸°í™”ë©ë‹ˆë‹¤. 게임 ë””ë ‰í† ë¦¬ë‚˜ 프로필, ë˜ëŠ” ìž…ë ¥ í”„ë¡œí•„ì€ ì‚ì œë˜ì§€ 않습니다. ì§„í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> @@ -3832,60 +3852,15 @@ UUID: %2</translation> <translation>장치 ì´ë¦„</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>모노</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>ìŠ¤í…Œë ˆì˜¤</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>서ë¼ìš´ë“œ</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>콘솔 ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>소리 ì¶œë ¥ 모드:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>재ìƒì„±</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>시스템 ì„¤ì •ì€ ê²Œìž„ì´ êº¼ì ¸ ìžˆì„ ë•Œë§Œ ìˆ˜ì • 가능합니다.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>ê²½ê³ : "%1"ì€(는) ì§€ì— "%2"ì— ìœ íš¨í•œ 언어가 아님</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>현재 사용하는 ê°€ìƒ Switch를 새로운 ê°€ìƒ Switch로 êµì²´ 합니다. ê¸°ì¡´ì˜ ê°€ìƒ Switch는 복구가 불가능해집니다. ê²Œìž„ì— ì˜ˆìƒì¹˜ 못한 ì˜í–¥ì„ ë¼ì¹ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì˜¤ëž˜ëœ ê²Œìž„ ì„¤ì •ì„ ì‚¬ìš©í• ê²½ìš° ì‹¤íŒ¨í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 계ì†í•˜ì‹œê² 습니까?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>ê²½ê³ </translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>콘솔 ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4573,957 +4548,957 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation>yuzu를 ê°œì„ í•˜ê¸° 위해 <a href='https://yuzu-emu.org/help/feature/telemetry/'>ìµëª… ë°ì´í„°ê°€ 수집ë©ë‹ˆë‹¤.</a> <br/><br/>사용 ë°ì´í„°ë¥¼ ê³µìœ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>ì›ê²© ì¸¡ì •</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>ë§ê°€ì§„ Vulkan 설치 ê°ì§€ë¨</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>부팅하는 ë™ì•ˆ Vulkan ì´ˆê¸°í™”ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.<br><br>ë¬¸ì œ í•´ê²° ì§€ì¹¨ì„ ë³´ë ¤ë©´ <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>여기</a>를 í´ë¦í•˜ì„¸ìš”.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>웹 ì• í”Œë¦¿ì„ ë¡œë“œí•˜ëŠ” 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>웹 ì• í”Œë¦¿ 비활성화</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>웹 ì• í”Œë¦¿ì„ ë¹„í™œì„±í™”í•˜ë©´ ì •ì˜ë˜ì§€ ì•Šì€ ë™ìž‘ì´ ë°œìƒí• 수 있으며 Super Mario 3D All-Starsì—서만 사용해야 합니다. 웹 ì• í”Œë¦¿ì„ ë¹„í™œì„±í™”í•˜ì‹œê² ìŠµë‹ˆê¹Œ? (디버그 ì„¤ì •ì—서 다시 í™œì„±í™”í• ìˆ˜ 있습니다.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>현재 ìƒì„±ì¤‘ì¸ ì…°ì´ë”ì˜ ì–‘</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>현재 ì„ íƒëœ í•´ìƒë„ 배율입니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>현재 ì—ë®¬ë ˆì´ì…˜ ì†ë„. 100%보다 높거나 ë‚®ì€ ê°’ì€ ì—ë®¬ë ˆì´ì…˜ì´ Switch보다 ë¹ ë¥´ê±°ë‚˜ ëŠë¦° ê²ƒì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>ê²Œìž„ì´ í˜„ìž¬ í‘œì‹œí•˜ê³ ìžˆëŠ” 초당 í”„ë ˆìž„ 수입니다. ì´ê²ƒì€ 게임마다 ë‹¤ë¥´ê³ ìž¥ë©´ë§ˆë‹¤ 다릅니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>í”„ë ˆìž„ ì œí•œì´ë‚˜ ìˆ˜ì§ ë™ê¸°í™”를 계산하지 ì•Šê³ Switch í”„ë ˆìž„ì„ ì—ë®¬ë ˆì´ì…˜ 하는 ë° ê±¸ë¦° 시간. 최대 ì†ë„로 ì—ë®¬ë ˆì´íЏ ì¤‘ì¼ ë•Œì—는 대부분 16.67 ms 근처입니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>Clear Recent Files(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>재개(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>ì¼ì‹œì¤‘ì§€(&P)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzuê°€ ê²Œìž„ì„ ì‹¤í–‰ì¤‘ìž…ë‹ˆë‹¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>ì˜¤ëž˜ëœ ê²Œìž„ í¬ë§· ê²½ê³ </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>ì´ ê²Œìž„ 파ì¼ì€ 'ë¶„í•´ëœ ROM ë””ë ‰í† ë¦¬'ë¼ëŠ” ì˜¤ëž˜ëœ í¬ë§·ì„ ì‚¬ìš©í•˜ê³ ìžˆìŠµë‹ˆë‹¤. 해당 í¬ë§·ì€ NCA, NAX, XCI ë˜ëŠ” NSP와 ê°™ì€ ë‹¤ë¥¸ í¬ë§·ìœ¼ë¡œ 대체ë˜ì—ˆìœ¼ë©° ë¶„í•´ëœ ROM ë””ë ‰í† ë¦¬ì—는 ì•„ì´ì½˜, 메타 ë°ì´í„° ë° ì—…ë°ì´íŠ¸ê°€ ì§€ì›ë˜ì§€ 않습니다.<br><br>yuzuê°€ ì§€ì›í•˜ëŠ” 다양한 Switch í¬ë§·ì— 대한 ì„¤ëª…ì€ <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>위키를 확ì¸í•˜ì„¸ìš”.</a> ì´ ë©”ì‹œì§€ëŠ” 다시 표시ë˜ì§€ 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>ROM 로드 중 오류 ë°œìƒ!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>ì§€ì›ë˜ì§€ 않는 롬 í¬ë§·ìž…니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>비디오 코어를 초기화하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>비디오 코어를 실행하는 ë™ì•ˆ yuzuì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. ì´ê²ƒì€ ì¼ë°˜ì 으로 통합 드ë¼ì´ë²„를 í¬í•¨í•˜ì—¬ ì˜¤ëž˜ëœ GPU 드ë¼ì´ë²„로 ì¸í•´ ë°œìƒí•©ë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ ë¡œê·¸ë¥¼ 참조하ì‹ì‹œì˜¤. 로그 ì•¡ì„¸ìŠ¤ì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ <a href='https://yuzu-emu.org/help/reference/log-files/'>로그 íŒŒì¼ ì—…ë¡œë“œ 방법</a> 페ì´ì§€ë¥¼ 참조하세요.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>ROM 불러오는 중 오류 ë°œìƒ! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>파ì¼ë“¤ì„ 다시 ë¤í”„하기 위해<a href='https://yuzu-emu.org/help/quickstart/'>yuzu ë¹ ë¥¸ 시작 ê°€ì´ë“œ</a> 를 ë”°ë¼ì£¼ì„¸ìš”.<br>ë„ì›€ì´ í•„ìš”í• ì‹œ yuzu 위키</a> 를 ì°¸ê³ í•˜ê±°ë‚˜ yuzu 디스코드</a> 를 ì´ìš©í•´ë³´ì„¸ìš”.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>알 수 없는 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. ìžì„¸í•œ ë‚´ìš©ì€ ë¡œê·¸ë¥¼ ì°¸ê³ í•˜ì‹ì‹œì˜¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64비트)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32비트)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>소프트웨어를 닫는 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>세ì´ë¸Œ ë°ì´í„°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>모드 ë°ì´í„°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>%1 í´ë” 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>í´ë”ê°€ 존재하지 않습니다!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>ì´ íƒ€ì´í‹€ì— 대한 ì…°ì´ë” ìºì‹œ ë””ë ‰í† ë¦¬ë¥¼ ìƒì„±í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>콘í…ì¸ ì œê±° 중 오류 ë°œìƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>ì—…ë°ì´íЏ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>DLC ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>ì„¤ì¹˜ëœ ê²Œìž„ 콘í…ì¸ ë¥¼ ì œê±°í•˜ê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>ì„¤ì¹˜ëœ ê²Œìž„ ì—…ë°ì´íŠ¸ë¥¼ ì œê±°í•˜ê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>ì„¤ì¹˜ëœ ê²Œìž„ DLC를 ì œê±°í•˜ê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>í•목 ì œê±°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>ì‚ì œ 완료</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>ì„¤ì¹˜ëœ ê¸°ë³¸ ê²Œìž„ì„ ì„±ê³µì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>기본 ê²Œìž„ì€ NANDì— ì„¤ì¹˜ë˜ì–´ 있지 않으며 ì œê±° í• ìˆ˜ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>ì„¤ì¹˜ëœ ì—…ë°ì´íŠ¸ë¥¼ 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>ì´ íƒ€ì´í‹€ì— 대해 ì„¤ì¹˜ëœ ì—…ë°ì´íŠ¸ê°€ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>ì´ íƒ€ì´í‹€ì— ì„¤ì¹˜ëœ DLCê°€ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>ì„¤ì¹˜ëœ %1 DLC를 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>OpenGL ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Vulkan ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>ëª¨ë“ ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>ì‚¬ìš©ìž ì§€ì • 게임 êµ¬ì„±ì„ ì œê±° í•˜ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>íŒŒì¼ ì œê±°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>ì´ íƒ€ì´í‹€ì— 대한 ì…°ì´ë” ìºì‹œê°€ 존재하지 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Vulkan 드ë¼ì´ë²„ 파ì´í”„ë¼ì¸ ìºì‹œ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>드ë¼ì´ë²„ 파ì´í”„ë¼ì¸ ìºì‹œë¥¼ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œë¥¼ 성공ì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>ì „ì†¡ 가능한 ì…°ì´ë” ìºì‹œ ë””ë ‰í† ë¦¬ë¥¼ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>ì‚¬ìš©ìž ì§€ì • 구성 ì œê±° 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>ì´ íƒ€ì´í‹€ì— 대한 ì‚¬ìš©ìž ì§€ì • êµ¬ì„±ì´ ì¡´ìž¬í•˜ì§€ 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>ì‚¬ìš©ìž ì§€ì • 게임 êµ¬ì„±ì„ ì„±ê³µì 으로 ì œê±°í–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>ì‚¬ìš©ìž ì§€ì • 게임 êµ¬ì„±ì„ ì œê±°í•˜ì§€ 못했습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS 추출 실패!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>RomFS 파ì¼ì„ 복사하는 ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆê±°ë‚˜ 사용ìžê°€ ìž‘ì—…ì„ ì·¨ì†Œí–ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>ì „ì²´</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>뼈대</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>RomFS ë¤í”„ 모드 ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>RomFS ë¤í”„ ë°©ë²•ì„ ì„ íƒí•˜ì‹ì‹œì˜¤.<br>ì „ì²´ëŠ” ëª¨ë“ íŒŒì¼ì„ 새 ë””ë ‰í† ë¦¬ì— ë³µì‚¬í•˜ê³ <br>뼈대는 ë””ë ‰í† ë¦¬ 구조 ë§Œ ìƒì„±í•©ë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>%1ì— RomFS를 ì¶”ì¶œí•˜ê¸°ì— ì¶©ë¶„í•œ ì—¬ìœ ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤. ê³µê°„ì„ í™•ë³´í•˜ê±°ë‚˜ ì—ë®¬ë ˆì´ê²¬ > ì„¤ì • > 시스템 > 파ì¼ì‹œìŠ¤í…œ > ë¤í”„ 경로ì—서 다른 ë¤í”„ ë””ë ‰í† ë¦¬ë¥¼ ì„ íƒí•˜ì‹ì‹œì˜¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>RomFS 추출 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>취소</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS ì¶”ì¶œì´ ì„±ê³µí–ˆìŠµë‹ˆë‹¤!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>ìž‘ì—…ì´ ì„±ê³µì 으로 완료ë˜ì—ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>바로가기 만들기</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>현재 AppImageì— ëŒ€í•œ 바로 가기가 ìƒì„±ë©ë‹ˆë‹¤. ì—…ë°ì´íŠ¸í•˜ë©´ ì œëŒ€ë¡œ ìž‘ë™í•˜ì§€ ì•Šì„ ìˆ˜ 있습니다. 계ì†í•©ë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>바탕 í™”ë©´ì— ë°”ë¡œê°€ê¸°ë¥¼ 만들 수 없습니다. 경로 "%1"ì´(ê°€) 존재하지 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>ì• í”Œë¦¬ì¼€ì´ì…˜ 메뉴ì—서 바로가기를 만들 수 없습니다. 경로 "%1"ì´(ê°€) 존재하지 않으며 ìƒì„±í• 수 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>ì•„ì´ì½˜ 만들기</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>ì•„ì´ì½˜ 파ì¼ì„ 만들 수 없습니다. 경로 "%1"ì´(ê°€) 존재하지 않으며 ìƒì„±í• 수 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>yuzu ì—ë®¬ë ˆì´í„°ë¡œ %1 시작</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>%1ì—서 바로가기를 만들기 실패</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>%1 바로가기를 성공ì 으로 만듬</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>%1 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>경로 ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>ì†ì„±</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>게임 ì†ì„±ì„ 로드 í• ìˆ˜ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch ì‹¤í–‰íŒŒì¼ (%1);;ëª¨ë“ íŒŒì¼ (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>íŒŒì¼ ë¡œë“œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>ì¶”ì¶œëœ ROM ë””ë ‰í† ë¦¬ 열기</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>ìž˜ëª»ëœ ë””ë ‰í† ë¦¬ ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>ì„ íƒí•œ ë””ë ‰í† ë¦¬ì— 'main'파ì¼ì´ 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>설치 가능한 Switch íŒŒì¼ (*.nca *.nsp *.xci);;Nintendo 컨í…ì¸ ì•„ì¹´ì´ë¸Œ (*.nca);;Nintendo 서브미션 패키지 (*.nsp);;NX 카트리지 ì´ë¯¸ì§€ (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>íŒŒì¼ ì„¤ì¹˜</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì´ 남ìŒ</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>íŒŒì¼ "%1" 설치 중...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>설치 ê²°ê³¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>ì¶©ëŒì„ 피하기 위해, ë‚¸ë“œì— ë² ì´ìФ ê²Œìž„ì„ ì„¤ì¹˜í•˜ëŠ” ê²ƒì„ ê¶Œìž¥í•˜ì§€ 않습니다. ì´ ê¸°ëŠ¥ì€ ì—…ë°ì´íŠ¸ë‚˜ DLC를 ì„¤ì¹˜í• ë•Œì—ë§Œ 사용해주세요.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì´ 새로 설치ë˜ì—ˆìŠµë‹ˆë‹¤. </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì„ ë®ì–´ì¼ìŠµë‹ˆë‹¤. </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%nê°œì˜ íŒŒì¼ì„ 설치하지 못했습니다. </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>시스템 ì• í”Œë¦¬ì¼€ì´ì…˜</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>시스템 ì•„ì¹´ì´ë¸Œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>시스템 ì• í”Œë¦¬ì¼€ì´ì…˜ ì—…ë°ì´íЏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>펌웨어 패키지 (A타입)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>펌웨어 패키지 (B타입)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>게임</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>게임 ì—…ë°ì´íЏ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>게임 DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>ë¸íƒ€ 타ì´í‹€</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>NCA 설치 ìœ í˜• ì„ íƒ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>ì´ NCA를 ì„¤ì¹˜í• íƒ€ì´í‹€ ìœ í˜•ì„ ì„ íƒí•˜ì„¸ìš”: (ëŒ€ë¶€ë¶„ì˜ ê²½ìš° ê¸°ë³¸ê°’ì¸ '게임'ì´ ê´œì°®ìŠµë‹ˆë‹¤.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>설치 실패</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>NCA 타ì´í‹€ ìœ í˜•ì´ ìœ íš¨í•˜ì§€ 않습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>íŒŒì¼ "%1"ì„ ì°¾ì„ ìˆ˜ 없습니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>하드웨어 요구 사í•ì´ ì¶©ì¡±ë˜ì§€ 않ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>ì‹œìŠ¤í…œì´ ê¶Œìž¥ 하드웨어 요구 사í•ì„ ì¶©ì¡±í•˜ì§€ 않습니다. 호환성 ë³´ê³ ê°€ 비활성화ë˜ì—ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>yuzu ê³„ì • 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>게임 호환성 테스트 결과를 ì œì¶œí•˜ë ¤ë©´ yuzu ê³„ì •ì„ ì—°ê²°í•´ì•¼í•©ë‹ˆë‹¤.<br><br/>yuzu ê³„ì •ì„ ì—°ê²°í•˜ë ¤ë©´ ì—ë®¬ë ˆì´ì…˜ &gt; ì„¤ì • &gt; 웹으로 가세요.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>URL 열기 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>URL "%1"ì„ ì—´ 수 없습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>TAS ë ˆì½”ë”©</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>í”Œë ˆì´ì–´ 1ì˜ íŒŒì¼ì„ ë®ì–´ì“°ì‹œê² 습니까?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>ìœ íš¨í•˜ì§€ ì•Šì€ ì„¤ì • ê°ì§€</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>휴대 모드용 컨트롤러는 거치 모드ì—서 ì‚¬ìš©í• ìˆ˜ 없습니다. 프로 컨트롤러로 ëŒ€ì‹ ì„ íƒë©ë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>현재 amiiboê°€ ì œê±°ë˜ì—ˆìŠµë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>현재 ê²Œìž„ì€ amiibo를 ì°¾ê³ ìžˆì§€ 않습니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo íŒŒì¼ (%1);; ëª¨ë“ íŒŒì¼ (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Amiibo 로드</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Amiibo ë°ì´í„° 로드 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>ì„ íƒí•œ 파ì¼ì€ ìœ íš¨í•œ amiiboê°€ 아닙니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>ì„ íƒí•œ 파ì¼ì€ ì´ë¯¸ 사용 중입니다</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>알수없는 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>스í¬ë¦°ìƒ· 캡처</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG ì´ë¯¸ì§€ (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>TAS ìƒíƒœ: %1/%2 실행 중</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>TAS ìƒíƒœ: ë ˆì½”ë”© %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>TAS ìƒíƒœ: ìœ íœ´ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>TAS ìƒíƒœ: ìœ íš¨í•˜ì§€ 않ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>실행 중지(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>시작(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>ë ˆì½”ë”© 중지(&e)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>ë ˆì½”ë“œ(&R)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>빌드중: %nê°œ ì…°ì´ë”</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>스케ì¼: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>ì†ë„: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>ì†ë„: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>게임: %1 FPS (ì œí•œì—†ìŒ)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>게임: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>í”„ë ˆìž„: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU 보통</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU 높ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU 굉장함</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU 오류</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>거치 모드</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>휴대 모드</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>NEAREST</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICUBIC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>AA ì—†ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>키 재ìƒì„± 확ì¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5540,37 +5515,37 @@ This will delete your autogenerated key files and re-run the key derivation modu ìžë™ ìƒì„±ë˜ì—ˆë˜ 키 파ì¼ë“¤ì´ ì‚ì œë˜ê³ 키 ìƒì„± ëª¨ë“ˆì´ ë‹¤ì‹œ 실행ë©ë‹ˆë‹¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>fuses 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation> - BOOT0 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - BCPKG2-1-Normal-Main 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - PRODINFO 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>íŒŒìƒ êµ¬ì„± 요소 누ë½</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>암호화 키가 없습니다. <br>ëª¨ë“ í‚¤, 펌웨어 ë° ê²Œìž„ì„ ì–»ìœ¼ë ¤ë©´ <a href='https://yuzu-emu.org/help/quickstart/'>yuzu ë¹ ë¥¸ 시작 ê°€ì´ë“œ</a>를 따르세요.<br><br> <small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5579,39 +5554,39 @@ on your system's performance.</source> 소요ë 수 있습니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>íŒŒìƒ í‚¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>RomFS ë¤í”„ ëŒ€ìƒ ì„ íƒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>ë¤í”„í• RomFS를 ì„ íƒí•˜ì‹ì‹œì˜¤.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>yuzu를 ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>ì—ë®¬ë ˆì´ì…˜ì„ ì¤‘ì§€í•˜ì‹œê² ìŠµë‹ˆê¹Œ? ëª¨ë“ ì €ìž¥ë˜ì§€ ì•Šì€ ì§„í–‰ ìƒí™©ì€ 사ë¼ì§‘니다.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7615,28 +7590,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>ì—러 코드: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. 다시 시ë„í•´ 보시거나 해당 소프트웨어 개발ìžì—게 ì—°ë½í•˜ì‹ì‹œì˜¤.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>%2ì—서 %1ì— ëŒ€í•œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. 다시 시ë„í•´ 보시거나 해당 소프트웨어 개발ìžì—게 ë¬¸ì˜ í•˜ì‹ì‹œì˜¤.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7660,20 +7635,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>사용ìžë¥¼ ì„ íƒí•˜ì„¸ìš”:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>사용ìž</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>프로필 ì„ íƒ</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>사용ìžë¥¼ ì„ íƒí•˜ì„¸ìš”:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7723,51 +7759,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>콜 스íƒ</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>뮤í…스 0x%1ì„ ê¸°ë‹¤ë¦½ë‹ˆë‹¤</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>대기: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>ì†Œìœ ìž í•¸ë“¤: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>ëª¨ë“ ê°œì²´ë¥¼ 기다립니다</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>ë‹¤ìŒ ê°œì²´ 중 하나를 기다리는 중입니다</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>ìŠ¤ë ˆë“œë¥¼ ê¸°ë‹¤ë¦¬ê³ ìžˆì§€ 않습니다</translation> </message> @@ -7775,120 +7780,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>실행 가능</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>ì¼ì‹œì¤‘ì§€</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>수면중</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>IPC íšŒì‹ ì„ ê¸°ë‹¤ë¦½ë‹ˆë‹¤</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>개체를 기다립니다</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>ì¡°ê±´ 변수를 기다립니다</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>주소 ê²°ì •ì¸ì„ 기다립니다</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>보류 재개를 기다리는 중</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>기다리는 중</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>초기화ë¨</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>종료ë¨</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>알 수 ì—†ìŒ</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ì´ìƒì </translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>코어 %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>프로세서 = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ì´ìƒì ì¸ ì½”ì–´ = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>ì„ í˜¸ë„ ë§ˆìŠ¤í¬ = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>ìŠ¤ë ˆë“œ ì•„ì´ë”” = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>ìš°ì„ ìˆœìœ„ = %1(현재) / %2(ì¼ë°˜)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>마지막 실행 틱 = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>뮤í…스를 기다리지 않ìŒ</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>ìŠ¤ë ˆë“œì—서 기다림</translation> </message> @@ -7896,7 +7891,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>대기 트리(&W)</translation> </message> diff --git a/dist/languages/nb.ts b/dist/languages/nb.ts index 36d8cc356..5aec4a1cc 100644 --- a/dist/languages/nb.ts +++ b/dist/languages/nb.ts @@ -372,36 +372,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> + <source>Output Device:</source> <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Inndataenhet</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Bruk globalt volum</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Sett volum:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volum:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Demp lyden nÃ¥r yuzu kjører i bakgrunnen</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1350,26 +1375,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Demp lyden nÃ¥r yuzu kjører i bakgrunnen</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Gjem mus under inaktivitet</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Tilbakestill alle innstillinger</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Dette tilbakestiller alle innstillinger og fjerner alle spillinnstillinger. Spillmapper, profiler og inndataprofiler blir ikke slettet. Fortsett?</translation> </message> @@ -3802,60 +3822,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Konsoll-ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Lydutgangsmodus</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regenerer</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Systeminnstillinger er bare tilgjengelige nÃ¥r ingen spill kjører.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Dette vil erstatte din nÃ¥værende virtuelle Switch med en ny en. Din nÃ¥værende virtuelle Switch vil ikke kunne bli gjenopprettet. Dette kan ha uventede effekter i spill. Dette kan feile om du bruker en utdatert lagret-spill konfigurasjon. Fortsette? </translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Advarsel</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Konsoll-ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4543,553 +4518,553 @@ Dra punkter for Ã¥ endre posisjon, eller dobbelttrykk pÃ¥ tabellfelter for Ã¥ re <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonym data blir samlet inn</a>for Ã¥ hjelpe til med Ã¥ forbedre yuzu.<br/><br/>Vil du dele din bruksdata med oss?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Laster web-applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>SlÃ¥ av web-applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Antall shader-e som bygges for øyeblikket</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>Den valgte oppløsningsskaleringsfaktoren.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>NÃ¥værende emuleringshastighet. Verdier høyere eller lavere en 100% indikerer at emuleringen kjører raskere eller tregere enn en Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Hvor mange bilder per sekund spiller viser. Dette vil variere fra spill til spill og scene til scene.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Tid det tar for Ã¥ emulere et Switch bilde. Teller ikke med bildebegrensing eller v-sync. For full-hastighet emulering burde dette være 16.67 ms. pÃ¥ det høyeste.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Paus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>Et spill kjører i yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Advarsel: Utdatert Spillformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Du bruker en dekonstruert ROM-mappe for dette spillet, som er et utdatert format som har blitt erstattet av andre formater som NCA, NAX, XCI, eller NSP. Dekonstruerte ROM-mapper mangler ikoner, metadata, og oppdateringsstøtte.<br><br>For en forklaring pÃ¥ diverse Switch-formater som yuzu støtter,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>sjekk vÃ¥r wiki</a>. Denne meldingen vil ikke bli vist igjen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Feil under innlasting av ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Dette ROM-formatet er ikke støttet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>En feil oppstod under initialisering av videokjernen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu har oppdaget en feil under kjøring av videokjernen. Dette er vanligvis forÃ¥rsaket av utdaterte GPU-drivere, inkludert for integrert grafikk. Vennligst sjekk loggen for flere detaljer. For mer informasjon om Ã¥ finne loggen, besøk følgende side: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Uploadd the Log File</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Feil under lasting av ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>En ukjent feil oppstod. Se loggen for flere detaljer.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Lagre Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Feil Under Ã…pning av %1 Mappen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Mappen eksisterer ikke!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Fjern oppføring</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>Fjerning lykkes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Grunnspillet er ikke installert i NAND og kan ikke bli fjernet.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Fjernet vellykket den installerte oppdateringen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Det er ingen oppdatering installert for denne tittelen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Det er ingen DLC installert for denne tittelen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>Fjernet vellykket %1 installerte DLC-er.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Fjern Tilpasset Spillkonfigurasjon?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Fjern Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Feil under fjerning av overførbar shader cache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>Lykkes i Ã¥ fjerne den overførbare shader cachen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Feil under fjerning av den overførbare shader cachen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Feil Under Fjerning Av Tilpasset Konfigurasjon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>En tilpasset konfigurasjon for denne tittelen finnes ikke.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>Fjernet vellykket den tilpassede spillkonfigurasjonen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Feil under fjerning av den tilpassede spillkonfigurasjonen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Utvinning av RomFS Feilet!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Det oppstod en feil under kopiering av RomFS filene eller sÃ¥ kansellerte brukeren operasjonen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Fullstendig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Skjelett</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Velg RomFS Dump Modus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Velg hvordan du vil dumpe RomFS.<br>Fullstendig vil kopiere alle filene til en ny mappe mens <br>skjelett vil bare skape mappestrukturen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Utvinner RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Avbryt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS Utpakking lyktes!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Operasjonen fullført vellykket.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Feil ved Ã¥pning av %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Velg Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Egenskaper</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Spillets egenskaper kunne ikke bli lastet inn.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch Kjørbar Fil (%1);;Alle Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Last inn Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Ã…pne Utpakket ROM Mappe</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Ugyldig Mappe Valgt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Mappen du valgte inneholder ikke en 'main' fil.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Installerbar Switch-Fil (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xcI)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Installer Filer</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n fil gjenstÃ¥r</numerusform><numerusform>%n filer gjenstÃ¥r</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Installerer fil "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Insallasjonsresultater</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n fil ble nylig installert @@ -5097,7 +5072,7 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n fil ble overskrevet @@ -5105,7 +5080,7 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n fil ble ikke installert @@ -5113,388 +5088,388 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Systemapplikasjon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Systemarkiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Systemapplikasjonsoppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Firmware Pakke (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Firmware-Pakke (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Spill</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Spilloppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Spill tilleggspakke</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta Tittel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Velg NCA Installasjonstype...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Vennligst velg typen tittel du vil installere denne NCA-en som: (I de fleste tilfellene, standarden 'Spill' fungerer.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Feil under Installasjon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Titteltypen du valgte for NCA-en er ugyldig.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Fil ikke funnet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Filen "%1" ikke funnet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Mangler yuzu Bruker</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>For Ã¥ sende inn et testtilfelle for spillkompatibilitet, mÃ¥ du linke yuzu-brukeren din.<br><br/>For Ã¥ linke yuzu-brukeren din, gÃ¥ til Emulasjon &gt; Konfigurasjon &gt; Nett.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Feil under Ã¥pning av URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Kunne ikke Ã¥pne URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>TAS-innspilling</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Overskriv filen til spiller 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Ugyldig konfigurasjon oppdaget</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>HÃ¥ndholdt kontroller kan ikke brukes i dokket modus. Pro-kontroller vil bli valgt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>Den valgte amiibo-en har blitt fjernet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Feil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>Det kjørende spillet sjekker ikke for amiibo-er</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo-Fil (%1);; Alle Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Last inn Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Feil ved lasting av Amiibo data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Ta Skjermbilde</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG Bilde (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>TAS-tilstand: Kjører %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>TAS-tilstand: Spiller inn %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>TAS-tilstand: Venter %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>TAS-tilstand: Ugyldig</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Stopp kjøring</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Bygger: %n shader</numerusform><numerusform>Bygger: %n shader-e</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Skala: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Hastighet: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Hastighet: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Spill: %1 FPS (ubegrenset)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Spill: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Ramme: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU HØY</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EKSTREM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU FEIL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>NÆRMESTE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEÆR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BIKUBISK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSISK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>INGEN AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Bekreft Nøkkel-Redirevasjon</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5511,37 +5486,37 @@ og eventuelt lag backups. Dette vil slette dine autogenererte nøkkel-filer og kjøre nøkkel-derivasjonsmodulen pÃ¥ nytt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Mangler fuses</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- Mangler BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- Mangler BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- Mangler PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Derivasjonskomponenter Mangler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Krypteringsnøkler mangler. <br>Vennligst følg <a href='https://yuzu-emu.org/help/quickstart/'>yuzus oppstartsguide</a> for Ã¥ fÃ¥ alle nøklene, fastvaren og spillene dine.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5550,39 +5525,39 @@ Dette kan ta opp til et minutt avhengig av systemytelsen din.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Deriverer Nøkler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Velg RomFS Dump-MÃ¥l</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Vennligst velg hvilken RomFS du vil dumpe.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Er du sikker pÃ¥ at du vil lukke yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Er du sikker pÃ¥ at du vil stoppe emulasjonen? All ulagret fremgang vil bli tapt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7581,27 +7556,27 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Feilkode: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>En feil har oppstÃ¥tt. Vennligst prøv igjen eller kontakt programmets utvikler.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7625,20 +7600,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Velg en bruker:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Brukere</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Profilvelger</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Velg en bruker:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7688,51 +7724,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation type="unfinished"/> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>venter pÃ¥ alle objekter</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>venter pÃ¥ ett av de følgende objektene</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation type="unfinished"/> </message> @@ -7740,120 +7745,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>pauset</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>sover</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>venter pÃ¥ IPC-svar</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>venter pÃ¥ objekter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>venter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>ukjent</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideell</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>kjerne %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>prosessor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ideell Kjerne = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>trÃ¥d id = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioritet = %1(nÃ¥værende) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation type="unfinished"/> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation type="unfinished"/> </message> @@ -7861,7 +7856,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/nl.ts b/dist/languages/nl.ts index ae8f14661..074742e39 100644 --- a/dist/languages/nl.ts +++ b/dist/languages/nl.ts @@ -372,36 +372,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> + <source>Output Device:</source> <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Invoer Apparaat</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Gebruik globaal volume</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>stel volume in:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1348,26 +1373,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Verstop muis wanneer inactief</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Reset alle instellingen</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Hiermee worden alle instellingen gereset en alle configuraties per game verwijderd. Hiermee worden gamedirectory's, profielen of invoerprofielen niet verwijderd. Doorgaan?</translation> </message> @@ -3800,60 +3820,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Console ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Geluid uitvoer mode</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Herstel</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Systeeminstellingen zijn enkel toegankelijk wanneer er geen game draait.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Dit vervangt je huidige virtuele Switch met een nieuwe. Je huidige virtuele Switch kan dan niet meer worden hersteld. Dit kan onverwachte effecten hebben in spellen. Dit werkt niet als je een oude config savegame gebruikt. Doorgaan?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Waarschuwing</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Console ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4541,952 +4516,952 @@ Sleep punten om positie te veranderen, of dubbel klik één van de tabel cellen <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Annonieme gegevens worden verzameld</a> om yuzu te helpen verbeteren. <br/><br/> Zou je jouw gebruiksgegevens met ons willen delen?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetrie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Web Applet Laden...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Huidige emulatie snelheid. Waardes hoger of lager dan 100% betekent dat de emulatie sneller of langzamer loopt dan de Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Hoeveel frames per seconde de game op dit moment weergeeft. Dit zal veranderen van game naar game en van scène naar scène.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Tijd gebruikt om een frame van de Switch te emuleren, waarbij framelimiteren of v-sync niet wordt meegerekend. Voor emulatie op volledige snelheid zou dit maximaal 16.67 ms zijn.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pauzeren</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Waarschuwing Verouderd Spel Formaat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Je gebruikt gedeconstrueerd ROM map formaat voor dit Spel, dit is een verouderd formaat en is vervangen door formaten zoals NCA, NAX, XCI of NSP. Gedeconstrueerd ROM map heeft geen iconen, metadata en update understeuning.<br><br>Voor een uitleg over welke Switch formaten yuzu ondersteund, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>kijk op onze wiki</a>. Dit bericht word niet nog een keer weergegeven.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Fout tijdens het laden van een ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Het formaat van de ROM is niet ondersteunt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Er is een fout opgetreden tijdens het initialiseren van de videokern.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Een onbekende fout heeft plaatsgevonden. Kijk in de log voor meer details.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Save Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Fout tijdens het openen van %1 folder</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Folder bestaat niet!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Fout Bij Het Openen Van Overdraagbare Shader Cache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Er bestaat geen shader cache voor deze game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS Extractie Mislukt!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Er was een fout tijdens het kopiëren van de RomFS bestanden of de gebruiker heeft de operatie geannuleerd.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Vol</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Skelet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Selecteer RomFS Dump Mode</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Selecteer alstublieft hoe je de RomFS wilt dumpen.<br>Volledig kopieërd alle bestanden in een map terwijl <br> skelet maakt alleen het map structuur.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>RomFS uitpakken...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Annuleren</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS Extractie Geslaagd!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>De operatie is succesvol voltooid.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Fout bij openen %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Selecteer Map</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Eigenschappen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>De eigenschappen van de game kunnen niet geladen worden.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch Executable (%1);;Alle bestanden (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Laad Bestand</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Open Gedecomprimeerd ROM Map</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Ongeldige Map Geselecteerd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>De map die je hebt geselecteerd bevat geen 'main' bestand.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Bestand "%1" Installeren...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Systeem Applicatie</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Systeem Archief</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Systeem Applicatie Update</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Filmware Pakket (Type A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Filmware Pakket (Type B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Game</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Game Update</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Game DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Selecteer NCA Installatie Type...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Selecteer het type titel hoe je wilt dat deze NCA installeerd: (In de meeste gevallen is de standaard 'Game' juist.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Installatie Mislukt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Het type title dat je hebt geselecteerd voor de NCA is ongeldig.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Bestand niet gevonden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Bestand "%1" niet gevonden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Je yuzu account mist</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Om game campatibiliteit te raporteren, moet je je yuzu account koppelen.<br><br/> Om je yuzu account te koppelen, ga naar Emulatie &gt; Configuratie &gt; Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo Bestand (%1);; Alle Bestanden (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Laad Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Fout tijdens het laden van de Amiibo data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Screenshot Vastleggen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG afbeelding (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Snelheid: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Snelheid: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Game: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Frame: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Bevestig Sleutel Herafleiding</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5503,37 +5478,37 @@ en optioneel maak backups. Dit zal je automatisch gegenereerde sleutel bestanden verwijderen en de sleutel verkrijger module opnieuw starten</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5541,39 +5516,39 @@ on your system's performance.</source> op je systeem's performatie.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Sleutels afleiden</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Selecteer RomFS Dump Doel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Selecteer welke RomFS je zou willen dumpen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Weet je zeker dat je yuzu wilt sluiten?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Weet je zeker dat je de emulatie wilt stoppen? Alle onopgeslagen voortgang will verloren gaan.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7567,26 +7542,26 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7606,20 +7581,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Selecteer een gebruiker:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Gebruikers</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Profiel keuzeschakelaar</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Selecteer een gebruiker:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7665,51 +7701,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Call stack</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>wachten op mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>heeft wachtende: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>eigenaar handvat: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>wachten op alle objecten</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>wachten op een van de volgende objecten</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>wachtend door geen draad</translation> </message> @@ -7717,120 +7722,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>uitvoerbaar</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>gepauzeerd</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>slapen</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>wachten op IPC antwoord</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>wachten op objecten</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>wachten op conditie variabele</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>wachten op adres arbiter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>aan het wachten</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>geinitialiseerd</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>beëindigd</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>onbekend</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideaal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>kern %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ideale kern = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>affiniteit masker = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>draad id = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioriteit = %1(huidige) / %2(normaal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>laatste lopende ticks = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>Niet wachtend op mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>Wachtend door draad</translation> </message> @@ -7838,7 +7833,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/pl.ts b/dist/languages/pl.ts index 05d514658..36daf71d2 100644 --- a/dist/languages/pl.ts +++ b/dist/languages/pl.ts @@ -380,36 +380,61 @@ To zbanuje jego/jej nick na forum, oraz jego/jej adres IP.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>UrzÄ…dzenie WyjÅ›ciowe</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>UrzÄ…dzenie WejÅ›ciowe</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Użyj globalnej gÅ‚oÅ›noÅ›ci </translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Ustaw gÅ‚oÅ›ność:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>GÅ‚oÅ›ność:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Wyciszaj audio gdy yuzu dziaÅ‚a w tle</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1372,26 +1397,21 @@ Gdy ta opcja jest włączona, niedopasowanie jest uruchamiane tylko wtedy, gdy d </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Wyciszaj audio gdy yuzu dziaÅ‚a w tle</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Ukryj mysz przy braku aktywnoÅ›ci</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Resetuj wszystkie ustawienia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Spowoduje to zresetowanie wszystkich ustawieÅ„ i usuniÄ™cie wszystkich konfiguracji gier. Nie spowoduje to usuniÄ™cia katalogów gier, profili ani profili wejÅ›ciowych. Kontynuować?</translation> </message> @@ -3826,60 +3846,15 @@ UUID: %2</translation> <translation>Nazwa urzÄ…dzenia</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Indentyfikator konsoli:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Tryb wyjÅ›cia dźwiÄ™ku</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Wygeneruj ponownie</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Ustawienia systemu sÄ… dostÄ™pne tylko wtedy, gdy gra nie jest uruchomiona.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Uwaga: "%1" nie jest poprawnym jÄ™zykiem dla regionu "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>To zamieni twojego obecnego Switch'a z nowym. Twojego obecnego Switch'a nie bÄ™dzie można przywrócić. To może wywoÅ‚ać nieoczekiwane problemy w grach. To może nie zadziaÅ‚ać, jeÅ›li używasz nieaktualnej konfiguracji zapisu gry. Kontynuować?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Ostrzeżenie</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Identyfikator konsoli: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4567,556 +4542,556 @@ PrzeciÄ…gnij punkty, aby zmienić pozycjÄ™, lub kliknij dwukrotnie komórki tabe <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Dane anonimowe sÄ… gromadzone</a> aby ulepszyć yuzu. <br/><br/>Czy chcesz udostÄ™pnić nam swoje dane o użytkowaniu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Wykryto uszkodzonÄ… instalacjÄ™ Vulkana</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>Inicjalizacja Vulkana nie powiodÅ‚a siÄ™ podczas uruchamiania.<br><br>Kliknij<a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>tutaj aby uzyskać instrukcje dotyczÄ…ce rozwiÄ…zania tego problemu</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Åadowanie apletu internetowego...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Wyłącz Aplet internetowy</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>Wyłączanie web appletu może doprowadzić do nieokreÅ›lonych zachowaÅ„ - wyłączyć applet należy jedynie grajÄ…c w Super Mario 3D All-Stars. Na pewno chcesz wyłączyć web applet? (Można go ponownie włączyć w ustawieniach debug.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Ilość budowanych shaderów</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>Obecnie wybrany mnożnik rozdzielczoÅ›ci.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Aktualna prÄ™dkość emulacji. WartoÅ›ci wiÄ™ksze lub niższe niż 100% wskazujÄ…, że emulacja dziaÅ‚a szybciej lub wolniej niż Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Ile klatek na sekundÄ™ gra aktualnie wyÅ›wietla. To bÄ™dzie siÄ™ różnić w zależnoÅ›ci od gry, od sceny do sceny.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Czas potrzebny do emulacji klatki na sekundÄ™ Switcha, nie liczÄ…c ograniczania klatek ani v-sync. Dla emulacji peÅ‚nej szybkoÅ›ci powinno to wynosić co najwyżej 16,67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&UsuÅ„ Ostatnie pliki</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Kontynuuj</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pauza</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu jest w trakcie gry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>OSTRZEÅ»ENIE! Nieaktualny format gry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Używasz zdekonstruowanego formatu katalogu ROM dla tej gry, który jest przestarzaÅ‚ym formatem, który zostaÅ‚ zastÄ…piony przez inne, takie jak NCA, NAX, XCI lub NSP. W zdekonstruowanych katalogach ROM brakuje ikon, metadanych i obsÅ‚ugi aktualizacji.<br><br> Aby znaleźć wyjaÅ›nienie różnych formatów Switch obsÅ‚ugiwanych przez yuzu,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'> sprawdź nasze wiki</a>. Ta wiadomość nie pojawi siÄ™ ponownie.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Błąd podczas wczytywania ROMu!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Ten format ROMu nie jest wspierany.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>WystÄ…piÅ‚ błąd podczas inicjowania rdzenia wideo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu napotkaÅ‚ błąd podczas uruchamiania rdzenia wideo. Jest to zwykle spowodowane przestarzaÅ‚ymi sterownikami GPU, w tym zintegrowanymi. WiÄ™cej szczegółów znajdziesz w pliku log. WiÄ™cej informacji na temat dostÄ™pu do log-u można znaleźć na nastÄ™pujÄ…cej stronie: <a href='https://yuzu-emu.org/help/reference/log-files/'>Jak przesÅ‚ać plik log</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Błąd podczas wczytywania ROMu! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>PostÄ™puj zgodnie z<a href='https://yuzu-emu.org/help/quickstart/'>yuzu quickstart guide</a> aby zrzucić ponownie swoje pliki.<br>Możesz odwoÅ‚ać siÄ™ do wiki yuzu</a>lub discord yuzu </a> po pomoc.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>WystÄ…piÅ‚ nieznany błąd. WiÄ™cej informacji można znaleźć w pliku log.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Zamykanie aplikacji...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Zapis danych</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Dane modów</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Błąd podczas otwarcia folderu %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Folder nie istnieje!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Błąd podczas otwierania przenoÅ›nej pamiÄ™ci podrÄ™cznej Shaderów.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Nie udaÅ‚o siÄ™ stworzyć Å›cieżki shaderów dla tego tytuÅ‚u.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Błąd podczas usuwania zawartoÅ›ci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Błąd podczas usuwania aktualizacji</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Błąd podczas usuwania dodatków</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Czy usunąć zainstalowanÄ… zawartość gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Czy usunąć zainstalowanÄ… aktualizacjÄ™ gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Czy usunąć zainstalowane dodatki gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>UsuÅ„ wpis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>PomyÅ›lnie usuniÄ™to</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>PomyÅ›lnie usuniÄ™to zainstalowanÄ… grÄ™.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Gra nie jest zainstalowana w NAND i nie może zostać usuniÄ™ta.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>PomyÅ›lnie usuniÄ™to zainstalowanÄ… Å‚atkÄ™.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Brak zainstalowanych Å‚atek dla tego tytuÅ‚u.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Brak zainstalowanych DLC dla tego tytuÅ‚u.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>PomyÅ›lnie usuniÄ™to %1 zainstalowane DLC.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Usunąć Transferowalne Shadery OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Usunąć Transferowalne Shadery Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Usunąć Wszystkie Transferowalne Shadery?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Usunąć niestandardowÄ… konfiguracjÄ™ gry?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>UsuÅ„ plik</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Błąd podczas usuwania przenoÅ›nej pamiÄ™ci podrÄ™cznej Shaderów.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Pamięć podrÄ™czna Shaderów dla tego tytuÅ‚u nie istnieje.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>PomyÅ›lnie usuniÄ™to przenoÅ›nÄ… pamięć podrÄ™cznÄ… Shaderów.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Nie udaÅ‚o siÄ™ usunąć przenoÅ›nej pamiÄ™ci Shaderów.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Błąd podczas usuwania pamiÄ™ci podrÄ™cznej strumienia sterownika Vulkana</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Błąd podczas usuwania pamiÄ™ci podrÄ™cznej strumienia sterownika.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Błąd podczas usuwania Transferowalnych Shaderów</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>PomyÅ›lnie usuniÄ™to transferowalne shadery.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Nie udaÅ‚o siÄ™ usunąć Å›cieżki transferowalnych shaderów.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Błąd podczas usuwania niestandardowej konfiguracji</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Niestandardowa konfiguracja nie istnieje dla tego tytuÅ‚u.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>PomyÅ›lnie usuniÄ™to niestandardowÄ… konfiguracje gry.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Nie udaÅ‚o siÄ™ usunąć niestandardowej konfiguracji gry.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Wypakowanie RomFS nieudane!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>WystÄ…piÅ‚ błąd podczas kopiowania plików RomFS lub użytkownik anulowaÅ‚ operacjÄ™.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>PeÅ‚ny</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Szkielet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Wybierz tryb zrzutu RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>ProszÄ™ wybrać w jaki sposób chcesz, aby zrzut pliku RomFS zostaÅ‚ wykonany. <br>PeÅ‚na kopia ze wszystkimi plikami do nowego folderu, gdy <br>skielet utworzy tylko strukturÄ™ folderu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>Nie ma wystarczajÄ…co miejsca w %1 aby wyodrÄ™bnić RomFS. Zwolnij trochÄ™ miejsca, albo zmieÅ„ Å›cieżkÄ™ zrzutu RomFs w Emulacja> Konfiguruj> System> System Plików> ŹródÅ‚o Zrzutu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Wypakowywanie RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Anuluj</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Wypakowanie RomFS zakoÅ„czone pomyÅ›lnie!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Operacja zakoÅ„czona sukcesem.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Utwórz skrót</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Utworzy to skrót do obecnego AppImage. Może nie dziaÅ‚ać dobrze po aktualizacji. Kontynuować?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>Nie można utworzyć skrótu na pulpicie. Åšcieżka "%1" nie istnieje.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>Nie można utworzyć skrótu w menu aplikacji. Åšcieżka "%1" nie istnieje oraz nie może być utworzona.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Utwórz ikonÄ™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Nie można utworzyć pliku ikony. Åšcieżka "%1" nie istnieje oraz nie może być utworzona.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>Włącz %1 z emulatorem yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Nie udaÅ‚o siÄ™ utworzyć skrótu pod %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>PomyÅ›lnie utworzono skrót do %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Błąd podczas otwierania %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Wybierz folder...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>WÅ‚aÅ›ciwoÅ›ci</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>WÅ‚aÅ›ciwoÅ›ci tej gry nie mogÅ‚y zostać zaÅ‚adowane.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Plik wykonywalny Switcha (%1);;Wszystkie pliki (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>ZaÅ‚aduj plik...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Otwórz folder wypakowanego ROMu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Wybrano niewÅ‚aÅ›ciwy folder</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Folder wybrany przez ciebie nie zawiera 'gÅ‚ownego' pliku.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Instalacyjne pliki Switch'a (*.nca *.nsp *.xci);;Archiwum zawartoÅ›ci Nintendo (*.nca);;Pakiet poddany Nintendo (*.nsp);;Obraz z kartridża NX (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Zainstaluj pliki</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>1 plik zostaÅ‚</numerusform><numerusform>%n plików zostaÅ‚o</numerusform><numerusform>%n plików zostaÅ‚o</numerusform><numerusform>%n plików zostaÅ‚o</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Instalowanie pliku "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Wynik instalacji</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Aby uniknąć ewentualnych konfliktów, odradzamy użytkownikom instalowanie gier na NAND. ProszÄ™, używaj tej funkcji tylko do instalowania Å‚atek i DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>1 nowy plik zostaÅ‚ zainstalowany @@ -5126,400 +5101,400 @@ ProszÄ™, używaj tej funkcji tylko do instalowania Å‚atek i DLC.</translation> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>1 plik zostaÅ‚ nadpisany</numerusform><numerusform>%n plików zostaÅ‚o nadpisane</numerusform><numerusform>%n plików zostaÅ‚o nadpisane</numerusform><numerusform>%n plików zostaÅ‚o nadpisane</numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>1 pliku nie udaÅ‚o siÄ™ zainstalować</numerusform><numerusform>%n plików nie udaÅ‚o siÄ™ zainstalować</numerusform><numerusform>%n plików nie udaÅ‚o siÄ™ zainstalować</numerusform><numerusform>%n plików nie udaÅ‚o siÄ™ zainstalować</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Aplikacja systemowa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Archiwum systemu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Aktualizacja aplikacji systemowej</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Paczka systemowa (Typ A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Paczka systemowa (Typ B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Gra</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Aktualizacja gry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Dodatek do gry</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>TytuÅ‚ Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Wybierz typ instalacji NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Wybierz typ tytuÅ‚u, do którego chcesz zainstalować ten NCA, jako: (W wiÄ™kszoÅ›ci przypadków domyÅ›lna "gra" jest w porzÄ…dku.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Instalacja nieudana</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Typ tytuÅ‚u wybrany dla NCA jest nieprawidÅ‚owy.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Nie znaleziono pliku</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Nie znaleziono pliku "%1"</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Wymagania sprzÄ™towe nie sÄ… speÅ‚nione</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Twój system nie speÅ‚nia rekomendowanych wymagaÅ„ sprzÄ™towych. Raportowanie kompatybilnoÅ›ci zostaÅ‚o wyłączone.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Brakuje konta Yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Aby przesÅ‚ać test zgodnoÅ›ci gry, musisz połączyć swoje konto yuzu.<br><br/> Aby połączyć swoje konto yuzu, przejdź do opcji Emulacja &gt; Konfiguracja &gt; Sieć.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Błąd otwierania adresu URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Nie można otworzyć adresu URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Nagrywanie TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Nadpisać plik gracza 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Wykryto nieprawidÅ‚owÄ… konfiguracjÄ™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Nie można używać kontrolera handheld w trybie zadokowanym. Zostanie wybrany kontroler Pro.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>Amiibo zostaÅ‚o "zdjÄ™te"</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Błąd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>Ta gra nie szuka amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Plik Amiibo (%1);;Wszyskie pliki (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>ZaÅ‚aduj Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Błąd podczas Å‚adowania pliku danych Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>Wybrany plik nie jest poprawnym amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>Wybrany plik jest już w użyciu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>WystÄ…piÅ‚ nieznany błąd</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Zrób zrzut ekranu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Obrazek PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>Status TAS: DziaÅ‚a %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>Status TAS: Nagrywa %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>Status TAS: Bezczynny %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>Status TAS: Niepoprawny</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Wyłącz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>PrzestaÅ„ N&agrywać</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>N&agraj</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Budowanie shadera</numerusform><numerusform>Budowanie: %n shaderów</numerusform><numerusform>Budowanie: %n shaderów</numerusform><numerusform>Budowanie: %n shaderów</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Skala: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>PrÄ™dkość: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>PrÄ™dkość: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Gra: %1 FPS (Odblokowane)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Gra: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Klatka: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMALNE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU WYSOKIE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EKSTREMALNE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>BÅÄ„D GPU</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>TRYB ZADOKOWANY</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>TRYB PRZENOÅšNY</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>Zero</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>NAJBLIÅ»SZY</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEARNY</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BIKUBICZNY</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>BEZ AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Potwierdź ponownÄ… aktywacje klucza</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5536,37 +5511,37 @@ i opcjonalnie tworzyć kopie zapasowe. Spowoduje to usuniÄ™cie wygenerowanych automatycznie plików kluczy i ponowne uruchomienie moduÅ‚u pochodnego klucza.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>BrakujÄ…ce bezpieczniki</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation> - Brak BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - Brak BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - Brak PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Brak komponentów wyprowadzania</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Brakuje elementów, które mogÄ… uniemożliwić zakoÅ„czenie wyprowadzania kluczy. <br>PostÄ™puj zgodnie z <a href='https://yuzu-emu.org/help/quickstart/'>yuzu quickstart guide</a> aby zdobyć wszystkie swoje klucze i gry.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5575,39 +5550,39 @@ Zależnie od tego może potrwać do minuty na wydajność twojego systemu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Wyprowadzanie kluczy...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Wybierz cel zrzutu RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>ProszÄ™ wybrać RomFS, jakie chcesz zrzucić.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Czy na pewno chcesz zamknąć yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Czy na pewno chcesz zatrzymać emulacjÄ™? Wszystkie niezapisane postÄ™py zostanÄ… utracone.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7611,28 +7586,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Kod błędu: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>WystÄ…piÅ‚ błąd. Spróbuj ponownie lub skontaktuj siÄ™ z twórcÄ… oprogramowania.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>WystÄ…piÅ‚ błąd w %1 o %2. Spróbuj ponownie lub skontaktuj siÄ™ z twórcÄ… oprogramowania.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7656,20 +7631,81 @@ Spróbuj ponownie lub skontaktuj siÄ™ z twórcÄ… oprogramowania.</translation> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Wybierz użytkownika:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Użytkownicy</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Wybór profilu</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Wybierz użytkownika:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7719,51 +7755,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Stos wywoÅ‚aÅ„</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>czekam na mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>ma oczekujÄ…cych: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>uchwyt wÅ‚aÅ›ciciela: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>czekam na wszystkie objekty</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>oczekiwanie na jeden z nastÄ™pujÄ…cych obiektów</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>czekam bez żadnego wÄ…tku</translation> </message> @@ -7771,120 +7776,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>JakoÅ› dziaÅ‚a</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>Spauzowana</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>spanie</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>czekam na odpowiedź IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>oczekiwanie na obiekty</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>oczekiwanie na zmiennÄ… warunkowÄ…</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>czekam na arbitra adresu</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>czekam na zawieszenie wznowienia</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>oczekiwanie</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>zainicjowano</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>zakoÅ„czony</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>nieznany</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>Idealnie</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>rdzeÅ„ %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>procesor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>idealny rdzeÅ„ = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>maska powinowactwa = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>identyfikator wÄ…tku = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>piorytet = %1(obecny) / %2(normalny)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>ostatnie dziaÅ‚ajÄ…ce kleszcze = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>nie czekam na mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>czekanie na wÄ…tek</translation> </message> @@ -7892,7 +7887,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Drzewo Czekania</translation> </message> diff --git a/dist/languages/pt_BR.ts b/dist/languages/pt_BR.ts index 4f6b8bc54..98f1345a2 100644 --- a/dist/languages/pt_BR.ts +++ b/dist/languages/pt_BR.ts @@ -380,36 +380,61 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Dispositivo de SaÃda</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Dispositivo de Entrada</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Estéreo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Usar volume global</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Definir volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Silenciar audio quando a janela ficar em segundo plano</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1378,26 +1403,21 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Silenciar audio quando a janela ficar em segundo plano</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Esconder cursor do mouse quando em inatividade</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Redefinir todas as configurações</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Isto restaura todas as configurações e exclui as configurações individuais de todos os jogos. As pastas de jogos, perfis de jogos e perfis de controles não serão excluÃdos. Deseja prosseguir?</translation> </message> @@ -1733,12 +1753,12 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> - <translation type="unfinished"/> + <translation>Habilitar decodificação assÃncrona de texturas ASTC, isso pode reduzir interrupções no tempo de carga. Essa funcionalidade é experimental.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> <source>Decode ASTC textures asynchronously (Hack)</source> - <translation type="unfinished"/> + <translation>Decodificação assÃncrona de texturas ASTC (Hack)</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> @@ -3831,60 +3851,15 @@ UUID: %2</translation> <translation>Nome do Dispositivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Estéreo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID do console:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Modo de saÃda de som</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regerar</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>As configurações de sistema são acessÃveis apenas quando não houver nenhum jogo em execução.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Aviso: "%1" não é um idioma válido para a região "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Isto substituirá o seu Switch virtual atual por um novo. O seu Switch virtual atual não poderá ser recuperado. Isto pode causar efeitos inesperados em jogos. Isto pode falhar caso você use um jogo salvo com configurações desatualizadas registradas nele. Continuar?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Aviso</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID do console: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4572,555 +4547,555 @@ Mova os pontos para mudar a posição, ou clique duas vezes nas células da tabe <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Dados anônimos são recolhidos</a> para ajudar a melhorar o yuzu. <br/><br/>Gostaria de compartilhar os seus dados de uso conosco?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Detectada Instalação Defeituosa do Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>A inicialização do Vulkan falhou durante a carga do programa. <br><br>Clique <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>aqui para instruções de como resolver o problema</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Carregando applet web...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Desativar o applet da web</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>A desativação do applet da web pode causar comportamento inesperado e deve apenas ser usada com Super Mario 3D All-Stars. Você deseja mesmo desativar o applet da web? (Ele pode ser reativado nas configurações de depuração.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>A quantidade de shaders sendo construÃdos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>O atualmente multiplicador de escala de resolução selecionado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Velocidade atual de emulação. Valores maiores ou menores que 100% indicam que a emulação está rodando mais rápida ou lentamente que em um Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Quantos quadros por segundo o jogo está exibindo atualmente. Isto irá variar de jogo para jogo e cena para cena.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Tempo que leva para emular um quadro do Switch, sem considerar o limitador de taxa de quadros ou a sincronização vertical. Um valor menor ou igual a 16.67 ms indica que a emulação está em velocidade plena.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Limpar arquivos recentes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation>Mouse emulado está habilitado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation>Controle de mouse real e controle panorâmico do mouse são incompatÃveis. Por favor desabilite a emulação do mouse em configurações avançadas de controles para permitir o controle panorâmico do mouse.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pausar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu está rodando um jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Aviso - formato de jogo desatualizado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Você está usando neste jogo o formato de ROM desconstruÃda e extraÃda em uma pasta, que é um formato desatualizado que foi substituÃdo por outros, como NCA, NAX, XCI ou NSP. Pastas desconstruÃdas de ROMs não possuem Ãcones, metadados e suporte a atualizações.<br><br>Para saber mais sobre os vários formatos de ROMs de Switch compatÃveis com o yuzu, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>confira a nossa wiki</a>. Esta mensagem não será exibida novamente.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Erro ao carregar a ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>O formato da ROM não é suportado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Ocorreu um erro ao inicializar o núcleo de vÃdeo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu encontrou um erro enquanto rodando o núcleo de vÃdeo. Normalmente isto é causado por drivers de GPU desatualizados, incluindo integrados. Por favor veja o registro para mais detalhes. Para mais informações em acesso ao registro por favor veja a seguinte página: <a href='https://yuzu-emu.org/help/reference/log-files/'>Como fazer envio de arquivo de registro</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Erro ao carregar a ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Por favor, siga <a href='https://yuzu-emu.org/help/quickstart/'>o guia de inÃcio rápido</a> para reextrair os seus arquivos.<br>Você pode consultar a wiki do yuzu</a> ou o Discord do yuzu</a> para obter ajuda.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Ocorreu um erro desconhecido. Consulte o registro para mais detalhes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Encerrando software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Dados de jogos salvos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Dados de mods</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Erro ao abrir a pasta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>A pasta não existe!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Erro ao abrir o cache de shaders transferÃvel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Falha ao criar o diretório de cache de shaders para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Erro ao Remover Conteúdos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Erro ao Remover Atualização</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Erro ao Remover DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Remover Conteúdo Instalado do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Remover Atualização Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Remover DLC Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Remover item</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>Removido com sucesso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>O jogo base foi removido com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>O jogo base não está instalado na NAND e não pode ser removido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>A atualização instalada foi removida com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Não há nenhuma atualização instalada para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Não há nenhum DLC instalado para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 DLC(s) instalados foram removidos com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Apagar o cache de shaders transferÃvel do OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Apagar o cache de shaders transferÃvel do Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Apagar todos os caches de shaders transferÃveis?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Remover configurações customizadas do jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Remover arquivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Erro ao remover cache de shaders transferÃvel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Não existe um cache de shaders para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>O cache de shaders transferÃvel foi removido com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Falha ao remover o cache de shaders transferÃvel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Erro ao Remover Cache de Pipeline do Driver Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Falha ao remover o pipeline de cache do driver.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Erro ao remover os caches de shaders transferÃveis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>Os caches de shaders transferÃveis foram removidos com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Falha ao remover o diretório do cache de shaders transferÃvel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Erro ao remover as configurações customizadas do jogo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Não há uma configuração customizada para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>As configurações customizadas do jogo foram removidas com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Falha ao remover as configurações customizadas do jogo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Falha ao extrair RomFS!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Houve um erro ao copiar os arquivos RomFS ou o usuário cancelou a operação.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Extração completa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Apenas estrutura</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Selecione o modo de extração do RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Selecione a forma como você gostaria que o RomFS seja extraÃdo.<br>"Extração completa" copiará todos os arquivos para a nova pasta, enquanto que <br>"Apenas estrutura" criará apenas a estrutura de pastas.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>Não há espaço suficiente em %1 para extrair o RomFS. Por favor abra espaço ou selecione um diretório diferente em Emulação > Configurar > Sistema > Sistema de arquivos > Extrair raiz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Extraindo RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Extração do RomFS concluida!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>A operação foi concluÃda com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Criar Atalho</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Isso irá criar um atalho para o AppImage atual. Isso pode não funcionar corretamente se você fizer uma atualização. Continuar?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>Não foi possÃvel criar um atalho na área de trabalho. O caminho "%1" não existe.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>Não foi possÃvel criar um atalho no menu de aplicativos. O caminho "%1" não existe e não pode ser criado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Criar Ãcone</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Não foi possÃvel criar o arquivo de Ãcone. O caminho "%1" não existe e não pode ser criado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>Iniciar %1 com o Emulador yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Falha ao criar um atalho em %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>Atalho criado com sucesso em %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Erro ao abrir %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Selecionar pasta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Propriedades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>As propriedades do jogo não puderam ser carregadas.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Executável do Switch (%1);;Todos os arquivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Carregar arquivo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Abrir pasta da ROM extraÃda</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Pasta inválida selecionada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>A pasta que você selecionou não contém um arquivo 'main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Arquivo de Switch instalável (*.nca *.nsp *.xci);; Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Instalar arquivos</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n arquivo restante</numerusform><numerusform>%n arquivo(s) restante(s)</numerusform><numerusform>%n arquivo(s) restante(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Instalando arquivo "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Resultados da instalação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Para evitar possÃveis conflitos, desencorajamos que os usuários instalem os jogos base na NAND. Por favor, use esse recurso apenas para instalar atualizações e DLCs.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n arquivo(s) instalado(s) @@ -5129,7 +5104,7 @@ Por favor, use esse recurso apenas para instalar atualizações e DLCs.</transla </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n arquivo(s) sobrescrito(s) @@ -5138,7 +5113,7 @@ Por favor, use esse recurso apenas para instalar atualizações e DLCs.</transla </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n arquivo(s) não instalado(s) @@ -5147,388 +5122,388 @@ Por favor, use esse recurso apenas para instalar atualizações e DLCs.</transla </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Aplicativo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Arquivo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Atualização de aplicativo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Pacote de firmware (tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Pacote de firmware (tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Atualização de jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC de jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>TÃtulo delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Selecione o tipo de instalação do NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Selecione o tipo de tÃtulo como o qual você gostaria de instalar este NCA: (Na maioria dos casos, o padrão 'Jogo' serve bem.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Falha ao instalar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>O tipo de tÃtulo que você selecionou para o NCA é inválido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Arquivo não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Arquivo "%1" não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Requisitos de hardware não atendidos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Seu sistema não atende os requisitos de harwdare. O relatório de compatibilidade foi desabilitado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Conta do yuzu faltando</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Para enviar um caso de teste de compatibilidade de jogo, você precisa entrar com a sua conta do yuzu.<br><br/>Para isso, vá para Emulação &gt; Configurar... &gt; Rede.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Erro ao abrir URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Não foi possÃvel abrir o URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Gravando TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Sobrescrever arquivo do jogador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Configuração inválida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>O controle portátil não pode ser usado no modo encaixado na base. O Pro Controller será selecionado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>O amiibo atual foi removido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Erro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>O jogo atual não está procurando amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Arquivo Amiibo (%1);; Todos os arquivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Carregar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Erro ao carregar dados do Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>O arquivo selecionado não é um amiibo válido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>O arquivo selecionado já está em uso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Ocorreu um erro desconhecido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Capturar tela</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Imagem PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>Situação TAS: Rodando %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>Situação TAS: Gravando %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>Situação TAS: Repouso %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>Situação TAS: Inválido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Parar de rodar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Iniciar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>Parar G&ravação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>G&ravação</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Compilando: %n shader(s)</numerusform><numerusform>Compilando: %n shader(s)</numerusform><numerusform>Compilando: %n shader(s)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Escala: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Velocidade: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Velocidade: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Jogo: %1 FPS (Desbloqueado)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Jogo: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Quadro: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU ALTA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTREMA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>ERRO DE GPU</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>ANCORADO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>PORTÃTIL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>VIZINHO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICÚBICO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIANO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>Sem AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>VOLUME: MUDO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Confirmar rederivação de chave</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5545,37 +5520,37 @@ e opcionalmente faça cópias de segurança. Isto excluirá o seus arquivos de chaves geradas automaticamente, e reexecutar o módulo de derivação de chaves.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Faltando fusÃveis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation> - Faltando BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - Faltando BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - Faltando PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Faltando componentes de derivação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Chaves de encriptação faltando. <br>Por favor, siga <a href='https://yuzu-emu.org/help/quickstart/'>o guia de inÃcio rápido</a> para extrair suas chaves, firmware e jogos. <br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5584,39 +5559,39 @@ Isto pode demorar até um minuto, dependendo do desempenho do seu sistema.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Derivando chaves</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Selecionar alvo de extração do RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Selecione qual RomFS você quer extrair.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Você deseja mesmo fechar o yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Deseja mesmo parar a emulação? Qualquer progresso não salvo será perdido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6695,32 +6670,32 @@ Mensagem de Depuração:</translation> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="26"/> <source>Unable to connect to the host. Verify that the connection settings are correct. If you still cannot connect, contact the room host and verify that the host is properly configured with the external port forwarded.</source> - <translation type="unfinished"/> + <translation>Não foi possÃvel conectar no host. Verifique que as configurações de conexão estão corretas. Se você ainda não conseguir conectar, entre em contato com o anfitrião da sala e verifique que o host está configurado corretamente com a porta externa redirecionada.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="30"/> <source>Unable to connect to the room because it is already full.</source> - <translation type="unfinished"/> + <translation>Não foi possÃvel conectar na sala porque a mesma está cheia.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="32"/> <source>Creating a room failed. Please retry. Restarting yuzu might be necessary.</source> - <translation type="unfinished"/> + <translation>Erro ao criar a sala. Por favor tente novamente. Reiniciar o yuzu pode ser necessário.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="34"/> <source>The host of the room has banned you. Speak with the host to unban you or try a different room.</source> - <translation type="unfinished"/> + <translation>O anfitrião da sala baniu você. Fale com o anfitrião para que ele remova seu banimento ou tente uma sala diferente.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="37"/> <source>Version mismatch! Please update to the latest version of yuzu. If the problem persists, contact the room host and ask them to update the server.</source> - <translation type="unfinished"/> + <translation>Versão não compatÃvel! Por favor atualize o yuzu para a última versão. Se o problema persistir entre em contato com o anfitrião da sala e peça que atualize o servidor.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="39"/> <source>Incorrect password.</source> - <translation type="unfinished"/> + <translation>Senha inválda.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="40"/> @@ -6730,7 +6705,7 @@ Mensagem de Depuração:</translation> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="43"/> <source>Connection to room lost. Try to reconnect.</source> - <translation type="unfinished"/> + <translation>Conexão com a sala encerrada. Tente reconectar.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="45"/> @@ -7617,28 +7592,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Código de erro: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Ocorreu um erro. Tente novamente ou entre em contato com o desenvolvedor do software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Ocorreu um erro em %1 até %2. Tente novamente ou entre em contato com o desenvolvedor do software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7662,20 +7637,81 @@ Tente novamente ou entre em contato com o desenvolvedor do software.</translatio %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Selecione um usuário:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Usuários</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Seletor de perfil</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Selecione um usuário:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7725,51 +7761,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Pilha de chamadas</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>esperando pelo mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>possui os waiters %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>manejo de proprietário: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>esperando por todos os objetos</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>esperando por um dos seguintes objetos</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>não aguardando pelo thread</translation> </message> @@ -7777,120 +7782,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>rodável</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>pausado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>dormindo</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>esperando para resposta do IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>esperando por objetos</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>aguardando por variável da condição</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>esperando para endereção o árbitro</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>esperando pra suspender o resumo</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>aguardando</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>inicializado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>terminado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>desconhecido</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation>PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>núcleo %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processador = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>núcleo ideal = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>máscara de afinidade = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>thread id = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioridade = %1(atual) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>últimos ticks executados = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>não aguardando para mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>aguardado pelo thread</translation> </message> @@ -7898,7 +7893,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Ãrvore de espera</translation> </message> diff --git a/dist/languages/pt_PT.ts b/dist/languages/pt_PT.ts index 97ac0c661..293283ac9 100644 --- a/dist/languages/pt_PT.ts +++ b/dist/languages/pt_PT.ts @@ -4,7 +4,7 @@ <message> <location filename="../../src/yuzu/aboutdialog.ui" line="14"/> <source>About yuzu</source> - <translation>Sobre Yuzu</translation> + <translation>Sobre o yuzu</translation> </message> <message> <location filename="../../src/yuzu/aboutdialog.ui" line="72"/> @@ -380,36 +380,61 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Dispositivo de saÃda</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Dispositivo de Entrada</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Estéreo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Usar volume global</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Definir volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volume:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Silenciar audio quando a janela ficar em segundo plano</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1368,26 +1393,21 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Silenciar audio quando a janela ficar em segundo plano</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Esconder rato quando inactivo.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Restaurar todas as configurações</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Isto restaura todas as configurações e remove as configurações especÃficas de cada jogo. As pastas de jogos, perfis de jogos e perfis de controlo não serão removidos. Continuar?</translation> </message> @@ -1723,12 +1743,12 @@ Isto banirá tanto o nome de usuário do fórum como o endereço IP.</translatio <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="95"/> <source>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</source> - <translation type="unfinished"/> + <translation>Habilitar decodificação assÃncrona de texturas ASTC, isso pode reduzir interrupções no tempo de carga. Essa funcionalidade é experimental.</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="98"/> <source>Decode ASTC textures asynchronously (Hack)</source> - <translation type="unfinished"/> + <translation>Decodificação assÃncrona de texturas ASTC (Hack)</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_graphics_advanced.ui" line="105"/> @@ -3821,60 +3841,15 @@ UUID: %2</translation> <translation>Nome do Dispositivo</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Estéreo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID da consola:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Modo de saÃda de som</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regenerar</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>As configurações do sistema estão disponÃveis apenas quando o jogo não está em execução.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Aviso: "%1" não é um idioma válido para a região "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Isto substituirá o seu Switch virtual actual por um novo. Seu Switch virtual actual não será recuperável. Isso pode ter efeitos inesperados nos jogos. Isto pode falhar, se você usar uma gravação de jogo de configuração desatualizado. Continuar?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Aviso</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID da Consola: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4562,954 +4537,954 @@ Arrasta os pontos para mudar a posição, ou dá duplo-clique nas células da ta <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Dados anônimos são coletados</a>para ajudar a melhorar o yuzu.<br/><br/>Gostaria de compartilhar seus dados de uso conosco?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetria</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Detectada Instalação Defeituosa do Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>A inicialização do Vulkan falhou durante a carga do programa. <br><br>Clique <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>aqui para instruções de como resolver o problema</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>A Carregar o Web Applet ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Desativar Web Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>A desativação do applet da web pode causar comportamento inesperado e deve apenas ser usada com Super Mario 3D All-Stars. Você deseja mesmo desativar o applet da web? (Ele pode ser reativado nas configurações de depuração.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Quantidade de shaders a serem construÃdos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>O atualmente multiplicador de escala de resolução selecionado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Velocidade da emulação actual. Valores acima ou abaixo de 100% indicam que a emulação está sendo executada mais depressa ou mais devagar do que a Switch</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Quantos quadros por segundo o jogo está exibindo de momento. Isto irá variar de jogo para jogo e de cena para cena.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Tempo gasto para emular um frame da Switch, sem contar o a limitação de quadros ou o v-sync. Para emulação de velocidade máxima, esta deve ser no máximo 16.67 ms.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Limpar arquivos recentes</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation>Mouse emulado está habilitado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation>Controle de mouse real e controle panorâmico do mouse são incompatÃveis. Por favor desabilite a emulação do mouse em configurações avançadas de controles para permitir o controle panorâmico do mouse.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Continuar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Pausa</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu está rodando um jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Aviso de Formato de Jogo Desactualizado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Você está usando o formato de directório ROM desconstruÃdo para este jogo, que é um formato desactualizado que foi substituÃdo por outros, como NCA, NAX, XCI ou NSP. Os directórios de ROM não construÃdos não possuem Ãcones, metadados e suporte de actualização.<br><br>Para uma explicação dos vários formatos de Switch que o yuzu suporta,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>Verifique a nossa Wiki</a>. Esta mensagem não será mostrada novamente.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Erro ao carregar o ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>O formato do ROM não é suportado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Ocorreu um erro ao inicializar o núcleo do vÃdeo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu encontrou um erro enquanto rodando o núcleo de vÃdeo. Normalmente isto é causado por drivers de GPU desatualizados, incluindo integrados. Por favor veja o registro para mais detalhes. Para mais informações em acesso ao registro por favor veja a seguinte página: <a href='https://yuzu-emu.org/help/reference/log-files/'>Como fazer envio de arquivo de registro</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Erro ao carregar a ROM! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Por favor, siga <a href='https://yuzu-emu.org/help/quickstart/'>a guia de inÃcio rápido do yuzu</a> para fazer o redespejo dos seus arquivos.<br>Você pode consultar a wiki do yuzu</a> ou o Discord do yuzu</a> para obter ajuda.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Ocorreu um erro desconhecido. Por favor, veja o log para mais detalhes.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Encerrando software...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Save Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod Data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Erro ao abrir a pasta %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>A Pasta não existe!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Erro ao abrir os Shader Cache transferÃveis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Falha ao criar o diretório de cache de shaders para este tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Erro Removendo Conteúdos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Erro ao Remover Atualização</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Erro Removendo DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Remover Conteúdo Instalado do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Remover Atualização Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Remover DLC Instalada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Remover Entrada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>Removido com Sucesso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>Removida a instalação do jogo base com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>O jogo base não está instalado no NAND e não pode ser removido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Removida a actualização instalada com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Não há actualização instalada neste tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Não há DLC instalado neste tÃtulo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>Removido DLC instalado %1 com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Apagar o cache de shaders transferÃvel do OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Apagar o cache de shaders transferÃvel do Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Apagar todos os caches de shaders transferÃveis?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Remover Configuração Personalizada do Jogo?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Remover Ficheiro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Error ao Remover Cache de Shader TransferÃvel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>O Shader Cache para este titulo não existe.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>Removido a Cache de Shader TransferÃvel com Sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Falha ao remover a cache de shader transferÃvel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Erro ao Remover Cache de Pipeline do Driver Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Falha ao remover o pipeline de cache do driver.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Erro ao remover os caches de shaders transferÃveis</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>Os caches de shaders transferÃveis foram removidos com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Falha ao remover o diretório do cache de shaders transferÃvel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Erro ao Remover Configuração Personalizada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Não existe uma configuração personalizada para este titúlo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>Removida a configuração personalizada do jogo com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Falha ao remover a configuração personalizada do jogo.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>A Extração de RomFS falhou!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Houve um erro ao copiar os arquivos RomFS ou o usuário cancelou a operação.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Cheio</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Esqueleto</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Selecione o modo de despejo do RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Por favor, selecione a forma como você gostaria que o RomFS fosse despejado<br>Full irá copiar todos os arquivos para o novo diretório enquanto<br>skeleton criará apenas a estrutura de diretórios.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>Não há espaço suficiente em %1 para extrair o RomFS. Por favor abra espaço ou selecione um diretório diferente em Emulação > Configurar > Sistema > Sistema de arquivos > Extrair raiz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Extraindo o RomFS ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Cancelar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Extração de RomFS Bem-Sucedida!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>A operação foi completa com sucesso.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Criar Atalho</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Isso irá criar um atalho para o AppImage atual. Isso pode não funcionar corretamente se você fizer uma atualização. Continuar?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>Não foi possÃvel criar um atalho na área de trabalho. O caminho "%1" não existe.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>Não foi possÃvel criar um atalho no menu de aplicativos. O caminho "%1" não existe e não pode ser criado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Criar Ãcone</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Não foi possÃvel criar o arquivo de Ãcone. O caminho "%1" não existe e não pode ser criado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>Iniciar %1 com o Emulador Yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Falha ao criar um atalho em %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>Atalho criado com sucesso em %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Erro ao abrir %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Selecione o Diretório</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Propriedades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>As propriedades do jogo não puderam ser carregadas.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Executáveis Switch (%1);;Todos os Ficheiros (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Carregar Ficheiro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Abrir o directório ROM extraÃdo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Diretório inválido selecionado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>O diretório que você selecionou não contém um arquivo 'Main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Ficheiro Switch Instalável (*.nca *.nsp *.xci);;Arquivo de Conteúdo Nintendo (*.nca);;Pacote de Envio Nintendo (*.nsp);;Imagem de Cartucho NX (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Instalar Ficheiros</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Instalando arquivo "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Instalar Resultados</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Para evitar possÃveis conflitos, desencorajamos que os utilizadores instalem os jogos base na NAND. Por favor, use esse recurso apenas para instalar atualizações e DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Aplicação do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Arquivo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Atualização do aplicativo do sistema</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Pacote de Firmware (Tipo A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Pacote de Firmware (Tipo B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Actualização do Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC do Jogo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>TÃtulo Delta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Selecione o tipo de instalação do NCA ...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Por favor, selecione o tipo de tÃtulo que você gostaria de instalar este NCA como: (Na maioria dos casos, o padrão 'Jogo' é suficiente).</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Falha na instalação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>O tipo de tÃtulo que você selecionou para o NCA é inválido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Arquivo não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Arquivo "%1" não encontrado</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Requisitos de hardware não atendidos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Seu sistema não atende os requisitos de harwdare. O relatório de compatibilidade foi desabilitado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Conta Yuzu Ausente</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Para enviar um caso de teste de compatibilidade de jogos, você deve vincular sua conta yuzu.<br><br/>Para vincular sua conta yuzu, vá para Emulação &gt; Configuração &gt; Rede.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Erro ao abrir URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Não foi possÃvel abrir o URL "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Gravando TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Sobrescrever arquivo do jogador 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Configação inválida detectada</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>O comando portátil não pode ser usado no modo encaixado na base. O Pro controller será selecionado.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>O amiibo atual foi removido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Erro</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>O jogo atual não está procurando amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Arquivo Amiibo (%1);; Todos os Arquivos (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Carregar Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Erro ao carregar dados do Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>O arquivo selecionado não é um amiibo válido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>O arquivo selecionado já está em uso</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Ocorreu um erro desconhecido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Captura de Tela</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Imagem PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>Situação TAS: Rodando %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>Situação TAS: Gravando %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>Situação TAS: Repouso %1%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>Situação TAS: Inválido</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Parar de rodar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Começar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>Parar G&ravação</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>G&ravação</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Escala: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Velocidade: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Velocidade: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Jogo: %1 FPS (Desbloqueado)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Jogo: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Quadro: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU ALTA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTREMA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>ERRO DE GPU</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>ANCORADO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>PORTÃTIL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>VIZINHO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICÚBICO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSSIANO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>Sem AA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>VOLUME: MUDO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>VOLUME: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Confirme a rederivação da chave</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5526,37 +5501,37 @@ e opcionalmente faça backups. Isso irá excluir os seus arquivos de chave gerados automaticamente e executará novamente o módulo de derivação de chave.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>FusÃveis em Falta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- BOOT0 em Falta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- BCPKG2-1-Normal-Main em Falta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- PRODINFO em Falta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Componentes de Derivação em Falta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Chaves de encriptação faltando. <br>Por favor, siga <a href='https://yuzu-emu.org/help/quickstart/'>o guia de inÃcio rápido</a> para extrair suas chaves, firmware e jogos. <br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5565,39 +5540,39 @@ Isto pode demorar até um minuto, dependendo do desempenho do seu sistema.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Derivando Chaves</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Selecione o destino de despejo do RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Por favor, selecione qual o RomFS que você gostaria de despejar.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Tem a certeza que quer fechar o yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Tem a certeza de que quer parar a emulação? Qualquer progresso não salvo será perdido.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -6676,32 +6651,32 @@ Mensagem de Depuração:</translation> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="26"/> <source>Unable to connect to the host. Verify that the connection settings are correct. If you still cannot connect, contact the room host and verify that the host is properly configured with the external port forwarded.</source> - <translation type="unfinished"/> + <translation>Não foi possÃvel conectar no host. Verifique que as configurações de conexão estão corretas. Se você ainda não conseguir conectar, entre em contato com o anfitrião da sala e verifique que o host está configurado corretamente com a porta externa redirecionada.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="30"/> <source>Unable to connect to the room because it is already full.</source> - <translation type="unfinished"/> + <translation>Não foi possÃvel conectar na sala porque a mesma está cheia.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="32"/> <source>Creating a room failed. Please retry. Restarting yuzu might be necessary.</source> - <translation type="unfinished"/> + <translation>Erro ao criar a sala. Por favor tente novamente. Reiniciar o yuzu pode ser necessário.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="34"/> <source>The host of the room has banned you. Speak with the host to unban you or try a different room.</source> - <translation type="unfinished"/> + <translation>O anfitrião da sala baniu você. Fale com o anfitrião para que ele remova seu banimento ou tente uma sala diferente.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="37"/> <source>Version mismatch! Please update to the latest version of yuzu. If the problem persists, contact the room host and ask them to update the server.</source> - <translation type="unfinished"/> + <translation>Versão não compatÃvel! Por favor atualize o yuzu para a última versão. Se o problema persistir entre em contato com o anfitrião da sala e peça que atualize o servidor.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="39"/> <source>Incorrect password.</source> - <translation type="unfinished"/> + <translation>Senha inválda.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="40"/> @@ -6711,7 +6686,7 @@ Mensagem de Depuração:</translation> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="43"/> <source>Connection to room lost. Try to reconnect.</source> - <translation type="unfinished"/> + <translation>Conexão com a sala encerrada. Tente reconectar.</translation> </message> <message> <location filename="../../src/yuzu/multiplayer/message.cpp" line="45"/> @@ -7598,28 +7573,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Código de erro: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Ocorreu um erro. Tente novamente ou entre em contato com o desenvolvedor do software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Ocorreu um erro em %1 até %2. Tente novamente ou entre em contato com o desenvolvedor do software.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7643,20 +7618,81 @@ Tente novamente ou entre em contato com o desenvolvedor do software.</translatio %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Selecione um usuário:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Utilizadores</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Seleccionador de Perfil</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Selecione um usuário:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7706,51 +7742,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Pilha de Chamadas</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>esperando por mutex 0x% 1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>has waiters: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>owner handle: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>esperando por todos os objetos</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>esperando por todos os objectos</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>esperado por nenhuma thread</translation> </message> @@ -7758,120 +7763,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>executável</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>pausado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>dormindo</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>aguardando resposta do IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>esperando por objectos</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>A espera da variável de condição</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>esperando pelo árbitro de endereço</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>esperando pra suspender o resumo</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>aguardando</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>inicializado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>terminado</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>desconhecido</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation>PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>núcleo %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processador = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>núcleo ideal =% 1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>máscara de afinidade =% 1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>id do segmento =% 1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioridade =%1(atual) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>últimos tiques em execução =%1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>não esperar por mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>esperado por thread</translation> </message> @@ -7879,7 +7874,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Ãrvore de espera</translation> </message> diff --git a/dist/languages/ru_RU.ts b/dist/languages/ru_RU.ts index 83a99fab9..eee646732 100644 --- a/dist/languages/ru_RU.ts +++ b/dist/languages/ru_RU.ts @@ -380,36 +380,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>УÑтройÑтво вывода</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>УÑтройÑтво ввода</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Моно</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Стерео</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Объёмный звук</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>ИÑпользовать общую громкоÑть</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>УÑтановить громкоÑть:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>ГромкоÑть:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Заглушить звук в фоновом режиме</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1341,26 +1366,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Заглушить звук в фоновом режиме</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>СпрÑтать мышь при неактивноÑти</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>СброÑить вÑе наÑтройки</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Ðто ÑброÑит вÑе наÑтройки и удалит вÑе конфигурации под отдельные игры. При Ñтом не будут удалены пути Ð´Ð»Ñ Ð¸Ð³Ñ€, профили или профили ввода. Продолжить?</translation> </message> @@ -3794,60 +3814,15 @@ UUID: %2</translation> <translation>Ðазвание уÑтройÑтва</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Моно</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Стерео</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Объёмный звук</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>ID конÑоли:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Режим вывода звука</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Перегенерировать</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>ÐаÑтройки ÑиÑтемы доÑтупны только тогда, когда игра не запущена.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Внимание: Ñзык "%1" не подходит Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ð¾Ð½Ð° "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Ðто заменит ваш текущий виртуальный Switch новым. Ваш текущий виртуальный Switch будет безвозвратно потерÑн. Ðто может иметь неожиданные поÑледÑÑ‚Ð²Ð¸Ñ Ð² играх. Может не Ñработать, еÑли вы иÑпользуете уÑтаревшую конфигурацию Ñохраненных игр. Продолжить?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Внимание</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>ID конÑоли: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4535,555 +4510,555 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Ðнонимные данные ÑобираютÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾,</a> чтобы помочь улучшить работу yuzu. <br/><br/>Хотели бы вы делитьÑÑ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ об иÑпользовании Ñ Ð½Ð°Ð¼Ð¸?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>ТелеметриÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Обнаружена Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´ÐµÐ½Ð½Ð°Ñ ÑƒÑтановка Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>Ðе удалоÑÑŒ выполнить инициализацию Vulkan во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸.<br><br>Ðажмите <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>здеÑÑŒ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñтрукций по уÑтранению проблемы</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Загрузка веб-апплета...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Отключить веб-апплет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>Отключение веб-апплета может привеÑти к неожиданному поведению и должно иÑпользоватьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñ Super Mario 3D All-Stars. Ð’Ñ‹ уверены, что хотите отключить веб-апплет? (Его можно Ñнова включить в наÑтройках отладки.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>КоличеÑтво Ñоздаваемых шейдеров на данный момент</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>Текущий выбранный множитель маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Ð¢ÐµÐºÑƒÑ‰Ð°Ñ ÑкороÑть ÑмулÑции. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹ÑˆÐµ или ниже 100% указывают на то, что ÑмулÑÑ†Ð¸Ñ Ð¸Ð´ÐµÑ‚ быÑтрее или медленнее, чем на Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>КоличеÑтво кадров в Ñекунду в данный момент. Значение будет менÑтьÑÑ Ð¼ÐµÐ¶Ð´Ñƒ играми и Ñценами.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>ВремÑ, которое нужно Ð´Ð»Ñ ÑмулÑции 1 кадра Switch, не Ð¿Ñ€Ð¸Ð½Ð¸Ð¼Ð°Ñ Ð²Ð¾ внимание ограничение FPS или вертикальную Ñинхронизацию. Ð”Ð»Ñ ÑмулÑции в полной ÑкороÑти значение должно быть не больше 16,67 мÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>[&C] ОчиÑтить недавние файлы</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>[&C] Продолжить</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>[&P] Пауза</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>Ð’ yuzu запущена игра</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Предупреждение уÑтаревший формат игры</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Ð”Ð»Ñ Ñтой игры вы иÑпользуете разархивированный формат ROM'а, который ÑвлÑетÑÑ ÑƒÑтаревшим и был заменен другими, такими как NCA, NAX, XCI или NSP. Ð’ разархивированных каталогах ROM'а отÑутÑтвуют иконки, метаданные и поддержка обновлений. <br><br>Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о различных форматах Switch, поддерживаемых yuzu, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>проÑмотрите нашу вики</a>. Ðто Ñообщение больше не будет отображатьÑÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Ошибка при загрузке ROM'а!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Формат ROM'а не поддерживаетÑÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Произошла ошибка при инициализации видеоÑдра.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu ÑтолкнулÑÑ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ при запуÑке видеоÑдра. Обычно Ñто вызвано уÑтаревшими драйверами ГП, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ðµ. Проверьте журнал Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации. Дополнительную информацию о доÑтупе к журналу Ñмотрите на Ñледующей Ñтранице: <a href='https://yuzu-emu.org/help/reference/log-files/'>Как загрузить файл журнала</a>. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Ошибка при загрузке ROM'а! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>ПожалуйÑта, Ñледуйте <a href='https://yuzu-emu.org/help/quickstart/'>краткому руководÑтву Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ yuzu</a> чтобы пере-дампить ваши файлы<br>Ð’Ñ‹ можете обратитьÑÑ Ðº вики yuzu</a> или Discord yuzu</a> Ð´Ð»Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰Ð¸.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ПожалуйÑта, проверьте журнал Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-Ñ… битный)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-Ñ… битный)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Закрываем программу...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>СохранениÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Данные модов</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Ошибка при открытии папки %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Папка не ÑущеÑтвует!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Ошибка при открытии переноÑного кÑша шейдеров</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Ðе удалоÑÑŒ Ñоздать папку кÑша шейдеров Ð´Ð»Ñ Ñтой игры.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Ошибка при удалении Ñодержимого</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Ошибка при удалении обновлений</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Ошибка при удалении DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Удалить уÑтановленное Ñодержимое игр?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Удалить уÑтановленные Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð³Ñ€Ñ‹?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Удалить уÑтановленные DLC игры?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Удалить запиÑÑŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>УÑпешно удалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>УÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð¸Ð³Ñ€Ð° уÑпешно удалена.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Игра не уÑтановлена в NAND и не может быть удалена.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>УÑтановленное обновление уÑпешно удалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Ð”Ð»Ñ Ñтой игры не было уÑтановлено обновление.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Ð”Ð»Ñ Ñтой игры не были уÑтановлены DLC.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>УÑтановленное DLC %1 было уÑпешно удалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Удалить переноÑной кÑш шейдеров OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Удалить переноÑной кÑш шейдеров Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Удалить веÑÑŒ переноÑной кÑш шейдеров?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Удалить пользовательÑкую наÑтройку игры?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Удалить файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Ошибка при удалении переноÑного кÑша шейдеров</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>КÑш шейдеров Ð´Ð»Ñ Ñтой игры не ÑущеÑтвует.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>ПереноÑной кÑш шейдеров уÑпешно удалён.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Ðе удалоÑÑŒ удалить переноÑной кÑш шейдеров.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Ошибка при удалении конвейерного кÑша Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Ðе удалоÑÑŒ удалить конвейерный кÑш шейдеров.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Ошибка при удалении переноÑного кÑша шейдеров</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>ПереноÑной кÑш шейдеров уÑпешно удален.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Ошибка при удалении папки переноÑного кÑша шейдеров.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Ошибка при удалении пользовательÑкой наÑтройки</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>ПользовательÑÐºÐ°Ñ Ð½Ð°Ñтройка Ð´Ð»Ñ Ñтой игры не ÑущеÑтвует.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>ПользовательÑÐºÐ°Ñ Ð½Ð°Ñтройка игры уÑпешно удалена.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Ðе удалоÑÑŒ удалить пользовательÑкую наÑтройку игры.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Ðе удалоÑÑŒ извлечь RomFS!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Произошла ошибка при копировании файлов RomFS или пользователь отменил операцию.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Полный</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Скелет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Выберите режим дампа RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>ПожалуйÑта, выберите, как вы хотите выполнить дамп RomFS. <br>Полный Ñкопирует вÑе файлы в новую папку, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº <br>Ñкелет ÑоздаÑÑ‚ только Ñтруктуру папок.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>Ð’ %1 недоÑтаточно Ñвободного меÑта Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ RomFS. ПожалуйÑта, оÑвободите меÑто или выберите другую папку Ð´Ð»Ñ Ð´Ð°Ð¼Ð¿Ð° в ÐмулÑÑ†Ð¸Ñ > ÐаÑтройка > СиÑтема > Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема > Корень дампа</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Извлечение RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Отмена</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Извлечение RomFS прошло уÑпешно!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð°.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Создать Ñрлык</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Ðто ÑоздаÑÑ‚ Ñрлык Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ AppImage. Он может не работать поÑле обновлений. Продолжить?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>Ðе удаетÑÑ Ñоздать Ñрлык на рабочем Ñтоле. Путь "%1" не ÑущеÑтвует.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>Ðевозможно Ñоздать Ñрлык в меню приложений. Путь "%1" не ÑущеÑтвует и не может быть Ñоздан.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Создать иконку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Ðевозможно Ñоздать файл иконки. Путь "%1" не ÑущеÑтвует и не может быть Ñоздан.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>ЗапуÑтить %1 Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑмулÑтора yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Ðе удалоÑÑŒ Ñоздать Ñрлык в %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>УÑпешно Ñоздан Ñрлык в %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Выбрать папку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>СвойÑтва</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Ðе удалоÑÑŒ загрузить ÑвойÑтва игры.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>ИÑполнÑемый файл Switch (%1);;Ð’Ñе файлы (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Загрузить файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Открыть папку извлечённого ROM'а</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Выбрана недопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Папка, которую вы выбрали, не Ñодержит файла 'main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>УÑтанавливаемый файл Switch (*.nca, *.nsp, *.xci);;Ðрхив контента Nintendo (*.nca);;Пакет подачи Nintendo (*.nsp);;Образ картриджа NX (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>УÑтановить файлы</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>ОÑталÑÑ %n файл</numerusform><numerusform>ОÑталоÑÑŒ %n файл(ов)</numerusform><numerusform>ОÑталоÑÑŒ %n файл(ов)</numerusform><numerusform>ОÑталоÑÑŒ %n файл(ов)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>УÑтановка файла "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Результаты уÑтановки</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Чтобы избежать возможных конфликтов, мы не рекомендуем пользователÑм уÑтанавливать игры в NAND. ПожалуйÑта, иÑпользуйте Ñту функцию только Ð´Ð»Ñ ÑƒÑтановки обновлений и DLC.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n файл был недавно уÑтановлен @@ -5093,7 +5068,7 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n файл был перезапиÑан @@ -5103,7 +5078,7 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n файл не удалоÑÑŒ уÑтановить @@ -5113,388 +5088,388 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>СиÑтемное приложение</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>СиÑтемный архив</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Обновление ÑиÑтемного приложениÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Пакет прошивки (Тип Ð)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Пакет прошивки (Тип Б)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Игра</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Обновление игры</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC игры</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Дельта-титул</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Выберите тип уÑтановки NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>ПожалуйÑта, выберите тип приложениÑ, который вы хотите уÑтановить Ð´Ð»Ñ Ñтого NCA: (Ð’ большинÑтве Ñлучаев, подходит Ñтандартный выбор «Игра».)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Ошибка уÑтановки</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Тип приложениÑ, который вы выбрали Ð´Ð»Ñ NCA, недейÑтвителен.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Файл не найден</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Файл "%1" не найден</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>ОК</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Ðе удовлетворены ÑиÑтемные требованиÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Ваша ÑиÑтема не ÑоответÑтвует рекомендуемым ÑиÑтемным требованиÑм. Отчеты о ÑовмеÑтимоÑти были отключены.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>ОтÑутÑтвует аккаунт yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Чтобы отправить отчет о ÑовмеÑтимоÑти игры, необходимо привÑзать Ñвою учетную запиÑÑŒ yuzu.<br><br/>Чтобы привÑзать Ñвою учетную запиÑÑŒ yuzu, перейдите в раздел ÐмулÑÑ†Ð¸Ñ &gt; Параметры &gt; Сеть.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Ошибка при открытии URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Ðе удалоÑÑŒ открыть URL: "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>ЗапиÑÑŒ TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>ПерезапиÑать файл игрока 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Обнаружена недопуÑÑ‚Ð¸Ð¼Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Портативный контроллер не может быть иÑпользован в режиме док-Ñтанции. Будет выбран контроллер Pro.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>Текущий amiibo был убран</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Ошибка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¸Ð³Ñ€Ð° не ищет amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Файл Amiibo (%1);; Ð’Ñе Файлы (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Загрузить Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Ошибка загрузки данных Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>Выбранный файл не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимым amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>Выбранный файл уже иÑпользуетÑÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Сделать Ñкриншот</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Изображение PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>СоÑтоÑние TAS: ВыполнÑетÑÑ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>СоÑтоÑние TAS: ЗапиÑываетÑÑ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>СоÑтоÑние TAS: ПроÑтой %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>СоÑтоÑние TAS: Ðеверное</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>[&S] ОÑтановка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>[&S] Ðачать</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>[&E] Закончить запиÑÑŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>[&E] ЗапиÑÑŒ</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>ПоÑтройка: %n шейдер</numerusform><numerusform>ПоÑтройка: %n шейдер(ов)</numerusform><numerusform>ПоÑтройка: %n шейдер(ов)</numerusform><numerusform>ПоÑтройка: %n шейдер(ов)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>МаÑштаб: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>СкороÑть: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>СкороÑть: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Игра: %1 FPS (Ðеограниченно)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Игра: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Кадр: %1 мÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>ГП ÐОРМÐЛЬÐО</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>ГП ВЫСОКО</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>ГП ÐКСТРИМ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>ГП ОШИБКÐ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>Ð’ ДОК-СТÐÐЦИИ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>ПОРТÐТИВÐЫЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>БЛИЖÐЙШИЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>БИЛИÐЕЙÐЫЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>БИКУБИЧЕСКИЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>ГÐУСС</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>БЕЗ СГЛÐЖИВÐÐИЯ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>ГРОМКОСТЬ: ЗÐГЛУШЕÐÐ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>ГРОМКОСТЬ: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Подтвердите перераÑчет ключа</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5511,37 +5486,37 @@ This will delete your autogenerated key files and re-run the key derivation modu Ðто удалит ваши автоматичеÑки Ñгенерированные файлы ключей и повторно запуÑтит модуль раÑчета ключей.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>ОтÑутÑтвуют предохранители</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- ОтÑутÑтвует BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- ОтÑутÑтвует BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- ОтÑутÑтвует PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Компоненты раÑчета отÑутÑтвуют</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Ключи ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚ÑутÑтвуют. <br>ПожалуйÑта, Ñледуйте <a href='https://yuzu-emu.org/help/quickstart/'>краткому руководÑтву Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ yuzu</a>, чтобы получить вÑе ваши ключи, прошивку и игры.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5550,39 +5525,39 @@ on your system's performance.</source> от производительноÑти вашей ÑиÑтемы.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Получение ключей</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Выберите цель Ð´Ð»Ñ Ð´Ð°Ð¼Ð¿Ð° RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>ПожалуйÑта, выберите, какой RomFS вы хотите Ñдампить.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Ð’Ñ‹ уверены, что хотите закрыть yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Ð’Ñ‹ уверены, что хотите оÑтановить ÑмулÑцию? Любой неÑохраненный прогреÑÑ Ð±ÑƒÐ´ÐµÑ‚ потерÑн.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7586,28 +7561,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Код ошибки: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Произошла ошибка. ПожалуйÑта, попробуйте еще раз или ÑвÑжитеÑÑŒ Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¼ ПО.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Произошла ошибка на %1 в %2. ПожалуйÑта, попробуйте еще раз или ÑвÑжитеÑÑŒ Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð¼ ПО.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7631,20 +7606,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Выберите пользователÑ:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Пользователи</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Выбор профилÑ</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Выберите пользователÑ:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7694,51 +7730,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>СтÑк вызовов</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>ожидающих: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>в ожидании вÑех объектов</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>в ожидании одного из Ñледующих объектов</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>не ожидаетÑÑ Ð½Ð¸ одним потоком</translation> </message> @@ -7746,120 +7751,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>ожидание ответа IPC</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>ожидание объектов</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>неизвеÑтно</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>Ñдро %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>процеÑÑор = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>маÑка ÑходÑтва = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>идентификатор потока = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>приоритет = %1(текущий) / %2(обычный)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation type="unfinished"/> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>ожидаетÑÑ Ð¿Ð¾Ñ‚Ð¾ÐºÐ¾Ð¼</translation> </message> @@ -7867,7 +7862,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>[&W] Дерево ожиданиÑ</translation> </message> diff --git a/dist/languages/sv.ts b/dist/languages/sv.ts index 498dee04a..b81ed7fd6 100644 --- a/dist/languages/sv.ts +++ b/dist/languages/sv.ts @@ -380,36 +380,61 @@ Detta kommer bannlysa bÃ¥de dennes användarnamn pÃ¥ forum samt IP-adress.</tran </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> + <source>Output Device:</source> <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>Inmatningsenhet</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Använd global volym</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Ställ in volym:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Volym:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1355,26 +1380,21 @@ avgjord kod.</div> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Göm mus när inaktiv</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Ã…terställ Alla Inställningar</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation type="unfinished"/> </message> @@ -3806,60 +3826,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Konsol-ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>LjudutgÃ¥ngsläge</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Regenerera</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Systeminställningar är endast tillgängliga när spel inte körs.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Detta kommer att ersätta nuvarande virtuell Switch med en ny. Nuvarande virtuell Switch kommer att permanent tas bort. Detta kan ha oväntade konsekvenser i spel. Detta kan misslyckas om en utdaterad konfig sparning används. Vill du fortsätta?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Varning</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Konsol ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4547,952 +4522,952 @@ Dra punkter för att ändra position, eller dubbelklicka tabellceller för att r <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonym data skickas </a>För att förbättra yuzu. <br/><br/>Vill du dela med dig av din användarstatistik med oss?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Laddar WebApplet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Mängden shaders som just nu byggs</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Nuvarande emuleringshastighet. Värden över eller under 100% indikerar pÃ¥ att emulationen körs snabbare eller lÃ¥ngsammare än en Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Hur mÃ¥nga bilder per sekund som spelet just nu visar. Detta varierar frÃ¥n spel till spel och scen till scen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Tid det tar att emulera en Switch bild, utan att räkna med framelimiting eller v-sync. För emulering pÃ¥ full hastighet sÃ¥ ska det vara som mest 16.67 ms. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Paus</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Varning FörÃ¥ldrat Spelformat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Du använder det dekonstruerade ROM-formatet för det här spelet. Det är ett förÃ¥ldrat format som har överträffats av andra som NCA, NAX, XCI eller NSP. Dekonstruerade ROM-kataloger saknar ikoner, metadata och uppdatering.<br><br>För en förklaring av de olika format som yuzu stöder, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>kolla in vÃ¥r wiki</a>. Det här meddelandet visas inte igen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Fel vid laddning av ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>ROM-formatet stöds inte.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Ett fel inträffade vid initiering av videokärnan.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Ett okänt fel har uppstÃ¥tt. Se loggen för mer information.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Spardata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod-data</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Fel Öppnar %1 Mappen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Mappen finns inte!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Fel Under Öppning Av Överförbar Shadercache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Ta bort katalog</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>FramgÃ¥ngsrikt borttagen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>Tog bort det installerade basspelet framgÃ¥ngsrikt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Basspelet är inte installerat i NAND och kan inte tas bort.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Tog bort den installerade uppdateringen framgÃ¥ngsrikt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Det finns ingen uppdatering installerad för denna titel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Det finns inga DLC installerade för denna titel.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>Tog framgÃ¥ngsrikt bort den %1 installerade DLCn.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Ta Bort Anpassad Spelkonfiguration?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Radera fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Fel När Överförbar Shader Cache Raderades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>En shader cache för denna titel existerar inte.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>Raderade den överförbara shadercachen framgÃ¥ngsrikt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Misslyckades att ta bort den överförbara shadercache</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Fel När Anpassad Konfiguration Raderades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>En anpassad konfiguration för denna titel existerar inte.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>Tog bort den anpassade spelkonfigurationen framgÃ¥ngsrikt.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Misslyckades att ta bort den anpassade spelkonfigurationen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS Extraktion Misslyckades!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>Det uppstod ett fel vid kopiering av RomFS filer eller användaren avbröt operationen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Full</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Skelett</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Välj RomFS Dump-Läge</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Välj hur du vill att RomFS ska dumpas. <br>Full kommer att kopiera alla filer i den nya katalogen medan <br>skelett bara skapar katalogstrukturen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Extraherar RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>Avbryt</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS Extraktion Lyckades!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>Operationen var lyckad.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Fel under öppning av %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Välj Katalog</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Egenskaper</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Spelegenskaperna kunde inte laddas.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch Körbar (%1);;Alla Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Ladda Fil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Öppna Extraherad ROM-Katalog</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Ogiltig Katalog Vald</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Katalogen du har valt innehÃ¥ller inte en 'main'-fil.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Installerbar Switch-fil (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Installera filer</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Installerar Fil "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Installera resultat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Systemapplikation</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Systemarkiv</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Systemapplikationsuppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Firmwarepaket (Typ A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Firmwarepaket (Typ B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Spel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Speluppdatering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Spel DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta Titel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Välj NCA-Installationsläge...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Välj vilken typ av titel du vill installera som: (I de flesta fallen, standard 'Spel' är bra.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Misslyckades med Installationen</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Den titeltyp du valt för NCA är ogiltig.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Filen hittades inte</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Filen "%1" hittades inte</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>OK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>yuzu Konto hittades inte</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>För att skicka ett spelkompatibilitetstest, du mÃ¥ste länka ditt yuzu-konto.<br><br/>För att länka ditt yuzu-konto, gÃ¥ till Emulering &gt, Konfigurering &gt, Web.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Fel när URL öppnades</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Oförmögen att öppna URL:en "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Fel</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo Fil (%1);; Alla Filer (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Ladda Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Fel vid laddning av Amiibodata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Skärmdump</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG Bild (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&Start</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation type="unfinished"/> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Hastighet: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Hastighet: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Spel: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Ruta: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Bekräfta Nyckel Rederivering</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5509,37 +5484,37 @@ och eventuellt göra säkerhetskopior. Detta raderar dina autogenererade nyckelfiler och kör nyckelderivationsmodulen.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Saknade säkringar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- Saknar BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- Saknar BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- Saknar PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Deriveringsdelar saknas</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5548,39 +5523,39 @@ Detta kan ta upp till en minut beroende pÃ¥ systemets prestanda.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Härleda Nycklar</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Välj RomFS Dumpa MÃ¥l</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Välj vilken RomFS du vill dumpa.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Är du säker pÃ¥ att du vill stänga yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Är du säker pÃ¥ att du vill stoppa emuleringen? Du kommer att förlora osparade framsteg.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7574,28 +7549,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Felkod: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Ett fel har inträffat. Vänligen försök igen eller kontakta utvecklaren av programvaran.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>Ett fel har inträffat pÃ¥ %1 vid %2. Vänligen försök igen eller kontakta utvecklaren av programvaran.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7619,20 +7594,81 @@ Vänligen försök igen eller kontakta utvecklaren av programvaran.</translation %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Välj en användare:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Användare</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Profilväljare</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Välj en användare:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7678,51 +7714,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Samtal stack</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>väntar pÃ¥ mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>har waiters: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>ägarhandtag: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>väntar pÃ¥ alla föremÃ¥l</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>väntar pÃ¥ ett av följande föremÃ¥l</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>Ej väntad av nÃ¥gon trÃ¥d</translation> </message> @@ -7730,120 +7735,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>pausad</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>sovande</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>väntar pÃ¥ IPC svar</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>väntar pÃ¥ föremÃ¥l</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>väntar för skickvariabel</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>väntar pÃ¥ adressbryter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>väntar</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>initialiserad</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>avslutad</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>okänd</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>kärna %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>idealisk kärna = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>affinitetsmask = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>trÃ¥d-id = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>prioritet = %1(nuvarande) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>sista springande fästingar = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>väntar inte pÃ¥ mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>väntade med trÃ¥d</translation> </message> @@ -7851,7 +7846,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation type="unfinished"/> </message> diff --git a/dist/languages/tr_TR.ts b/dist/languages/tr_TR.ts index d5e5691b2..98a7f479f 100644 --- a/dist/languages/tr_TR.ts +++ b/dist/languages/tr_TR.ts @@ -380,36 +380,61 @@ Bu iÅŸlem onların hem forum kullanıcı adını hem de IP adresini banlar.</tra </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>Çıkış Cihazı</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>GiriÅŸ Cihazı</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Mono</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Stereo</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Surround</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>Global sesi kullan</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Sesi ayarla:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>Ses:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Arka plandayken sesi kapat</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1363,26 +1388,21 @@ Bu seçenek belleÄŸe yazma/okuma iÅŸlemlerindeki güvenlik kontrolünü kaldıra </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Arka plandayken sesi kapat</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>Hareketsizlik durumunda imleci gizle</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Tüm Ayarları Sıfırla</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Bu seçenek tüm genel ve oyuna özgü ayarları silecektir. Oyun dizinleri, profiller ve giriÅŸ profilleri silinmeyecektir. Devam etmek istiyor musunuz?</translation> </message> @@ -3815,60 +3835,15 @@ UUID: %2</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Mono</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Stereo</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Surround</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Konsol ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Ses çıkış modu</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Yeniden oluÅŸtur</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>Sistem ayarlarına sadece oyun çalışmıyorken eriÅŸilebilir.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Bu sanal Switchinizi yeni biriyle deÄŸiÅŸtirir. Geçerli sanal switchiniz geri getirilemez. Bu oyunlarda beklenmeyen etkilere neden olabilir. Eski bir oyun yapılandırma kayıt dosyası kullanıyorsanız bu baÅŸarısız olabilir. Devam?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Uyarı</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Konsol ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4556,554 +4531,554 @@ Noktanın konumunu deÄŸiÅŸtirmek için sürükleyin ya da sayıların üstüne à <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Yuzuyu geliÅŸtirmeye yardımcı olmak için </a> anonim veri toplandı. <br/><br/>Kullanım verinizi bizimle paylaÅŸmak ister misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>Telemetri</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>Bozuk Vulkan Kurulumu Algılandı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Web Uygulaması Yükleniyor...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Web Uygulamasını Devre Dışı Bırak</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>Åžu anda derlenen shader miktarı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>Geçerli seçili çözünürlük ölçekleme çarpanı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Geçerli emülasyon hızı. %100'den yüksek veya düşük deÄŸerler emülasyonun bir Switch'den daha hızlı veya daha yavaÅŸ çalıştığını gösterir.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>Oyunun ÅŸuanda saniye başına kaç kare gösterdiÄŸi. Bu oyundan oyuna ve sahneden sahneye deÄŸiÅŸiklik gösterir.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>Bir Switch karesini emüle etmekte geçen zaman, karelimitleme ve v-sync hariç. Tam hız emülasyon için bu en çok 16,67 ms olmalı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>&Son Dosyaları Temizle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>&Devam Et</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&Duraklat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu ÅŸu anda bir oyun çalıştırıyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>Uyarı, Eski Oyun Formatı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Bu oyun için dekonstrükte ROM formatı kullanıyorsunuz, bu fromatın yerine NCA, NAX, XCI ve NSP formatları kullanılmaktadır. Dekonstrükte ROM formatları ikon, üst veri ve güncelleme desteÄŸi içermemektedir.<br><br>Yuzu'nun desteklediÄŸi çeÅŸitli Switch formatları için<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>Wiki'yi ziyaret edin</a>. Bu mesaj yeniden gösterilmeyecektir.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>ROM yüklenirken hata oluÅŸtu!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Bu ROM biçimi desteklenmiyor.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>Video çekirdeÄŸini baÅŸlatılırken bir hata oluÅŸtu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu video çekirdeÄŸini çalıştırırken bir hatayla karşılaÅŸtı. Bu sorun genellikle eski GPU sürücüleri sebebiyle ortaya çıkar. Daha fazla detay için lütfen log dosyasına bakın. Log dosyasını incelemeye dair daha fazla bilgi için lütfen bu sayfaya ulaşın: <a href='https://yuzu-emu.org/help/reference/log-files/'>Log dosyası nasıl yüklenir</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>ROM yüklenirken hata oluÅŸtu! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Lütfen dosyalarınızı yeniden dump etmek için<a href='https://yuzu-emu.org/help/quickstart/'>yuzu hızlı baÅŸlangıç kılavuzu'nu</a> takip edin.<br> Yardım için yuzu wiki</a>veya yuzu Discord'una</a> bakabilirsiniz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>Bilinmeyen bir hata oluÅŸtu. Lütfen daha fazla detay için kütüğe göz atınız.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>Kayıt Verisi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod Verisi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>%1 klasörü açılırken hata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Klasör mevcut deÄŸil!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Transfer Edilebilir Shader Cache'ini Açarken Bir Hata OluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Bu oyun için shader cache konumu oluÅŸturulamadı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Girdiyi Kaldır</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>BaÅŸarıyla Kaldırıldı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>YüklenmiÅŸ oyun baÅŸarıyla kaldırıldı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Asıl oyun NAND'de kurulu deÄŸil ve kaldırılamaz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>YüklenmiÅŸ güncelleme baÅŸarıyla kaldırıldı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Bu oyun için yüklenmiÅŸ bir güncelleme yok.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Bu oyun için yüklenmiÅŸ bir DLC yok.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>%1 yüklenmiÅŸ DLC baÅŸarıyla kaldırıldı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>OpenGL Transfer Edilebilir Shader Cache'ini Kaldırmak İstediÄŸinize Emin Misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Vulkan Transfer Edilebilir Shader Cache'ini Kaldırmak İstediÄŸinize Emin Misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Tüm Transfer Edilebilir Shader Cache'leri Kaldırmak İstediÄŸinize Emin Misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Oyuna Özel Yapılandırmayı Kaldırmak İstediÄŸinize Emin Misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Dosyayı Sil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Transfer Edilebilir Shader Cache Kaldırılırken Bir Hata OluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Bu oyun için oluÅŸturulmuÅŸ bir shader cache yok.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>Transfer edilebilir shader cache baÅŸarıyla kaldırıldı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Transfer edilebilir shader cache kaldırılamadı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Transfer Edilebilir Shader Cache'ler Kaldırılırken Bir Hata OluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>Transfer edilebilir shader cacheler baÅŸarıyla kaldırıldı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Transfer edilebilir shader cache konumu kaldırılamadı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Oyuna Özel Yapılandırma Kaldırılırken Bir Hata OluÅŸtu.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>Bu oyun için bir özel yapılandırma yok.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>Oyuna özel yapılandırma baÅŸarıyla kaldırıldı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Oyuna özel yapılandırma kaldırılamadı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS Çıkartımı BaÅŸarısız!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>RomFS dosyaları kopyalanırken bir hata oluÅŸtu veya kullanıcı iÅŸlemi iptal etti.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Full</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Çerçeve</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>RomFS Dump Modunu Seçiniz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Lütfen RomFS'in nasıl dump edilmesini istediÄŸinizi seçin.<br>"Full" tüm dosyaları yeni bir klasöre kopyalarken <br>"skeleton" sadece klasör yapısını oluÅŸturur.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>%1 konumunda RomFS çıkarmaya yetecek alan yok. Lütfen yer açın ya da Emülasyon > Yapılandırma > Sistem > Dosya Sistemi > Dump konumu kısmından farklı bir çıktı konumu belirleyin.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>RomFS çıkartılıyor...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>İptal</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS Çıkartımı BaÅŸarılı!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>İşlem baÅŸarıyla tamamlandı.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>%1 Açılırken Bir Hata OluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Klasör Seç</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>Özellikler</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Oyun özellikleri yüklenemedi.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch Çalıştırılabilir Dosyası (%1);;Tüm Dosyalar (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Dosya Aç</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Çıkartılmış ROM klasörünü aç</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Geçersiz Klasör Seçildi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>SeçtiÄŸiniz klasör bir "main" dosyası içermiyor.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Yüklenilebilir Switch Dosyası (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submissions Package (*.nsp);;NX Cartridge Image (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Dosya Kur</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>%n dosya kaldı</numerusform><numerusform>%n dosya kaldı</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>"%1" dosyası kuruluyor...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Kurulum Sonuçları</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Olası çakışmaları önlemek için oyunları NAND'e yüklememenizi tavsiye ediyoruz. Lütfen bu özelliÄŸi sadece güncelleme ve DLC yüklemek için kullanın.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n dosya güncel olarak yüklendi @@ -5111,7 +5086,7 @@ Lütfen bu özelliÄŸi sadece güncelleme ve DLC yüklemek için kullanın.</tran </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n dosyanın üstüne yazıldı @@ -5119,7 +5094,7 @@ Lütfen bu özelliÄŸi sadece güncelleme ve DLC yüklemek için kullanın.</tran </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n dosya yüklenemedi @@ -5127,388 +5102,388 @@ Lütfen bu özelliÄŸi sadece güncelleme ve DLC yüklemek için kullanın.</tran </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>Sistem Uygulaması</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>Sistem ArÅŸivi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>Sistem Uygulama Güncellemesi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Yazılım Paketi (Tür A)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Yazılım Paketi (Tür B)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Oyun</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>Oyun Güncellemesi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>Oyun DLC'si</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta BaÅŸlık</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>NCA Kurulum Tipi Seçin...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Lütfen bu NCA dosyası için belirlemek istediÄŸiniz baÅŸlık türünü seçiniz: (ÇoÄŸu durumda, varsayılan olan 'Oyun' kullanılabilir.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Kurulum BaÅŸarısız Oldu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>NCA için seçtiÄŸiniz baÅŸlık türü geçersiz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Dosya Bulunamadı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Dosya "%1" Bulunamadı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>Tamam</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>Kayıp yuzu Hesabı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Oyun uyumluluk test çalışması göndermek için öncelikle yuzu hesabınla giriÅŸ yapmanız gerekiyor.<br><br/>Yuzu hesabınızla giriÅŸ yapmak için, Emülasyon &gt; Yapılandırma &gt; Web'e gidiniz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>URL açılırken bir hata oluÅŸtu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>URL "%1" açılamıyor.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>TAS kayıtta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>Oyuncu 1'in dosyasının üstüne yazılsın mı?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>Geçersiz yapılandırma tespit edildi</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Handheld kontrolcü dock modunda kullanılamaz. Pro kontrolcü seçilecek.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>Amiibo kaldırıldı</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Hata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>Aktif oyun amiibo beklemiyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo Dosyası (%1);; Tüm Dosyalar (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Amiibo Yükle</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Amiibo verisi yüklenirken hata</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>SeçtiÄŸiniz dosya geçerli bir amiibo deÄŸil</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>SeçtiÄŸiniz dosya hali hazırda kullanılıyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Ekran Görüntüsü Al</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG görüntüsü (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>TAS durumu: %1%2 çalışıyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>TAS durumu: %1 kaydediliyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>TAS durumu: %1%2 boÅŸta</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>TAS durumu: Geçersiz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&Çalıştırmayı durdur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>&BaÅŸlat</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>K&aydetmeyi Durdur</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>K&aydet</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>OluÅŸturuluyor: %n shader</numerusform><numerusform>OluÅŸturuluyor: %n shader</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>Ölçek: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>Hız %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>Hız: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Oyun: %1 FPS (Sınırsız)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Oyun: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Kare: %1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU YÜKSEK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EKSTREM</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU HATASI</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>EN YAKIN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>BILINEAR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>BICUBIC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>GAUSYEN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>AA YOK</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Anahtar Yeniden Türetimini Onayla</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5525,37 +5500,37 @@ ve opsiyonel olarak yedekler alın. Bu sizin otomatik oluÅŸturulmuÅŸ anahtar dosyalarınızı silecek ve anahtar türetme modülünü tekrar çalıştıracak.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>Anahtarlar Kayıp</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- BOOT0 Kayıp</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- BCPKG2-1-Normal-Main Kayıp</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- PRODINFO Kayıp</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Türeten BileÅŸenleri Kayıp</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Åžifreleme anahtarları eksik. <br>Lütfen takip edin<a href='https://yuzu-emu.org/help/quickstart/'>yuzu hızlı baÅŸlangıç kılavuzunu</a>tüm anahtarlarınızı, aygıt yazılımınızı ve oyunlarınızı almada.<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5564,39 +5539,39 @@ Bu sistem performansınıza baÄŸlı olarak bir dakika kadar zaman alabilir.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>Anahtarlar Türetiliyor</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>RomFS Dump Hedefini Seçiniz</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Lütfen dump etmek istediÄŸiniz RomFS'i seçiniz.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>yuzu'yu kapatmak istediÄŸinizden emin misiniz?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Emülasyonu durdurmak istediÄŸinizden emin misiniz? KaydedilmemiÅŸ veriler kaybolur.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7599,28 +7574,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Hata Kodu: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>Bir hata oluÅŸtu. Lütfen tekrar deneyin ya da yazılımın geliÅŸtiricisiyle iletiÅŸime geçin.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>%1 %2'de bir hata oluÅŸtu. Lütfen tekrar deneyin ya da yazılımın geliÅŸtiricisiyle iletiÅŸime geçin.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7644,20 +7619,81 @@ Lütfen tekrar deneyin ya da yazılımın geliÅŸtiricisiyle iletiÅŸime geçin.</ %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Kullanıcı Seç:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>Kullanıcılar</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Profil Seçici</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Kullanıcı Seç:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7707,51 +7743,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>ÇaÄŸrı yığını</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>mutex bekleniyor 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>bekleyenler: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>owner handle: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>tüm objeler için bekleniyor</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>bu objeler için bekleniyor</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>hiçbir thread beklemedi</translation> </message> @@ -7759,120 +7764,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>çalışabilir</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>duraklatıldı</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>uyuyor</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>IPC cevabı bekleniyor</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>objeler bekleniyor</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>koÅŸul deÄŸiÅŸkeni bekleniyor</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>adres belirleyici bekleniyor</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>askıdaki iÅŸlemin sürdürülmesi bekleniyor</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>bekleniyor</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>baÅŸlatıldı</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>sonlandırıldı </translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>bilinmeyen</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>çekirdek %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>iÅŸlemci = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ideal çekirdek = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>affinity mask = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>izlek id: %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>öncelik = %1(geçerli) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>son çalışan tickler = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>mutex için beklenmiyor</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>izlek bekledi</translation> </message> @@ -7880,7 +7875,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Wait Tree</translation> </message> diff --git a/dist/languages/uk.ts b/dist/languages/uk.ts index 91e927cf5..02bdf2233 100644 --- a/dist/languages/uk.ts +++ b/dist/languages/uk.ts @@ -380,36 +380,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>ПриÑтрій виводу</translation> + <source>Output Device:</source> + <translation type="unfinished"/> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>ПриÑтрій вводу</translation> + <source>Input Device:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>Моно</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>Стерео</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>Об'ємний звук</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>ВикориÑтовувати загальну гучніÑть</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>Ð’Ñтановити гучніÑть:</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>ГучніÑть</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>Приглушити звук у фоновому режимі</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1341,26 +1366,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>Приглушити звук у фоновому режимі</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>ÐŸÑ€Ð¸Ñ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¸ÑˆÑ– при бездіÑльноÑті</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>Скинути вÑÑ– налаштуваннÑ</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>Це Ñкине вÑÑ– Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– видалить уÑÑ– конфігурації під окремі ігри. При цьому не будуть видалені шлÑхи до ігор, профілів або профілів вводу. Продовжити?</translation> </message> @@ -3794,60 +3814,15 @@ UUID: %2</translation> <translation>Ðазва приÑтрою</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>Моно</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>Стерео</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>Об'ємний звук</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>Ідентифікатор конÑолі:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>Режим виводу звуку</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>Перегенерувати</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÑиÑтеми доÑтупні тільки тоді, коли гру не запущено.</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>Увага: мова "%1" не підходить Ð´Ð»Ñ Ñ€ÐµÐ³Ñ–Ð¾Ð½Ñƒ "%2"</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>Це замінить ваш поточний віртуальний Switch новим. Ваш поточний віртуальний Switch буде безповоротно втрачено. Це може мати неÑподівані наÑлідки в іграх. Може не Ñпрацювати, Ñкщо ви викориÑтовуєте заÑтарілу конфігурацію збережених ігор. Продовжити?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>Увага</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>Ідентифікатор конÑолі: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4535,555 +4510,555 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>Ðнонімні дані збираютьÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾,</a> щоб допомогти поліпшити роботу yuzu. <br/><br/>Хотіли б ви ділитиÑÑ Ð´Ð°Ð½Ð¸Ð¼Ð¸ про викориÑÑ‚Ð°Ð½Ð½Ñ Ð· нами?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>ТелеметріÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>ВиÑвлено пошкоджену інÑталÑцію Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ ініціалізацію Vulkan під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ.<br><br>ÐатиÑніть <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>тут Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ–Ð½Ñтрукцій щодо уÑÑƒÐ½ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸</a>.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²ÐµÐ±-аплета...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>Вимкнути веб-аплет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>Ð’Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²ÐµÐ±-апплета може призвеÑти до неÑподіваної поведінки, Ñ– його Ñлід вимикати лише заради Super Mario 3D All-Stars. Ви впевнені, що хочете вимкнути веб-апплет? (Його можна знову ввімкнути в налаштуваннÑÑ… налагодженнÑ.)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>КількіÑть Ñтворюваних шейдерів на цей момент</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>Поточний обраний множник маÑÑˆÑ‚Ð°Ð±ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÑŒÐ½Ð¾Ñ— здатноÑті.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>Поточна швидкіÑть емулÑції. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ‰Ðµ або нижче 100% вказують на те, що емулÑÑ†Ñ–Ñ Ð¹Ð´Ðµ швидше або повільніше, ніж на Switch.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>КількіÑть кадрів на Ñекунду в цей момент. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ змінюватиÑÑ Ð¼Ñ–Ð¶ іграми та Ñценами.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>ЧаÑ, Ñкий потрібен Ð´Ð»Ñ ÐµÐ¼ÑƒÐ»Ñції 1 кадру Switch, не беручи до уваги Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ FPS або вертикальну Ñинхронізацію. Ð”Ð»Ñ ÐµÐ¼ÑƒÐ»Ñції в повній швидкоÑті Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути не більше 16,67 мÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>[&C] ОчиÑтити нещодавні файли</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>[&C] Продовжити</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>[&P] Пауза</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>Ð’ yuzu запущено гру</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ñтарілий формат гри</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>Ð”Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри ви викориÑтовуєте розархівований формат ROM'а, Ñкий Ñ” заÑтарілим Ñ– був замінений іншими, такими Ñк NCA, NAX, XCI або NSP. У розархівованих каталогах ROM'а відÑутні іконки, метадані та підтримка оновлень. <br><br>Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про різні формати Switch, підтримувані yuzu, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>переглÑньте нашу вікі</a>. Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ не буде відображатиÑÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ROM!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>Формат ROM'а не підтримуєтьÑÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñ–Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ— відеоÑдра.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu зіткнувÑÑ Ð· помилкою під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку відеоÑдра. Зазвичай це Ñпричинено заÑтарілими драйверами ГП, включно з інтегрованими. Перевірте журнал Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆ детальної інформації. Додаткову інформацію про доÑтуп до журналу дивітьÑÑ Ð½Ð° наÑтупній Ñторінці: <a href='https://yuzu-emu.org/help/reference/log-files/'>Як завантажити файл журналу</a>. </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ROM'а! %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>Будь лаÑка, дотримуйтеÑÑŒ <a href='https://yuzu-emu.org/help/quickstart/'>короткого керівництва кориÑтувача yuzu</a> щоб пере-дампити ваші файли<br>Ви можете звернутиÑÑ Ð´Ð¾ вікі yuzu</a> або Discord yuzu</a> Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>СталаÑÑ Ð½ÐµÐ²Ñ–Ð´Ð¾Ð¼Ð° помилка. Будь лаÑка, перевірте журнал Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð¸Ñ†ÑŒ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-бітний)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-бітний)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>Закриваємо програму...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>ЗбереженнÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Дані модів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¿Ð°Ð¿ÐºÐ¸ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>Папка не Ñ–Ñнує!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñного кешу шейдерів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>Ðе вдалоÑÑ Ñтворити папку кешу шейдерів Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð²Ð¼Ñ–Ñту</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½ÑŒ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>Видалити вÑтановлений вміÑÑ‚ ігор?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>Видалити вÑтановлені Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>Видалити вÑтановлені DLC гри?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>Видалити запиÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>УÑпішно видалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>Ð’Ñтановлену гру уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>Гру не вÑтановлено в NAND Ñ– не може буде видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>Ð’Ñтановлене Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>Ð”Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не було вÑтановлено оновленнÑ.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>Ð”Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не було вÑтановлено DLC.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>Ð’Ñтановлений DLC %1 було уÑпішно видалено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>Видалити переноÑний кеш шейдерів OpenGL?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>Видалити переноÑний кеш шейдерів Vulkan?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>Видалити веÑÑŒ переноÑний кеш шейдерів?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>Видалити кориÑтувацьке Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð¸?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>Видалити файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñного кешу шейдерів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>Кеш шейдерів Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не Ñ–Ñнує.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>ПереноÑний кеш шейдерів уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ переноÑний кеш шейдерів.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ð²ÐµÑ”Ñ€Ð½Ð¾Ð³Ð¾ кешу Vulkan</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ конвеєрний кеш шейдерів.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½Ð¾Ñного кешу шейдерів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>ПереноÑний кеш шейдерів уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ð¿ÐºÐ¸ переноÑного кешу шейдерів.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувацького налаштуваннÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>КориÑтувацьких налаштувань Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— гри не Ñ–Ñнує.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>КориÑтувацьке Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð¸ уÑпішно видалено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувацьке Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€Ð¸.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ RomFS!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² RomFS або кориÑтувач ÑкаÑував операцію.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>Повний</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>Скелет</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>Виберіть режим дампа RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>Будь лаÑка, виберіть, Ñк ви хочете виконати дамп RomFS <br>Повний Ñкопіює вÑÑ– файли в нову папку, тоді Ñк <br>Ñкелет Ñтворить лише Ñтруктуру папок.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>Ð’ %1 недоÑтатньо вільного міÑÑ†Ñ Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ RomFS. Будь лаÑка, звільніть міÑце або виберіть іншу папку Ð´Ð»Ñ Ð´Ð°Ð¼Ð¿Ð° в ЕмулÑÑ†Ñ–Ñ > ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ > СиÑтема > Файлова ÑиÑтема > Корінь дампа</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>СкаÑувати</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ RomFS пройшло уÑпішно!</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>ÐžÐ¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ð»Ð°ÑÑ ÑƒÑпішно.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>Створити Ñрлик</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>Це Ñтворить Ñрлик Ð´Ð»Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ AppImage. Він може не працювати піÑÐ»Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½ÑŒ. Продовжити?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>Ðе вдаєтьÑÑ Ñтворити Ñрлик на робочому Ñтолі. ШлÑÑ… "%1" не Ñ–Ñнує.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>Ðеможливо Ñтворити Ñрлик у меню додатків. ШлÑÑ… "%1" не Ñ–Ñнує Ñ– не може бути Ñтворений.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>Створити іконку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>Ðеможливо Ñтворити файл іконки. ШлÑÑ… "%1" не Ñ–Ñнує Ñ– не може бути Ñтворений.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>ЗапуÑтити %1 за допомогою емулÑтора yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>Ðе вдалоÑÑ Ñтворити Ñрлик у %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>УÑпішно Ñтворено Ñрлик у %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>Обрати папку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>ВлаÑтивоÑті</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ влаÑтивоÑті гри.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Виконуваний файл Switch (%1);;УÑÑ– файли (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>Завантажити файл</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>Відкрити папку вилученого ROM'а</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>Вибрано неприпуÑтиму папку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>Папка, Ñку ви вибрали, не міÑтить файлу 'main'.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>Ð’Ñтановлюваний файл Switch (*.nca, *.nsp, *.xci);;Ðрхів контенту Nintendo (*.nca);;Пакет подачі Nintendo (*.nsp);;Образ картриджа NX (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>Ð’Ñтановити файли</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>ЗалишивÑÑ %n файл</numerusform><numerusform>ЗалишилоÑÑ %n файл(ів)</numerusform><numerusform>ЗалишилоÑÑ %n файл(ів)</numerusform><numerusform>ЗалишилоÑÑ %n файл(ів)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>Результати вÑтановленнÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>Щоб уникнути можливих конфліктів, ми не рекомендуємо кориÑтувачам вÑтановлювати ігри в NAND. Будь лаÑка, викориÑтовуйте цю функцію тільки Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½ÑŒ Ñ– завантажуваного контенту.</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>%n файл було нещодавно вÑтановлено @@ -5093,7 +5068,7 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n файл було перезапиÑано @@ -5103,7 +5078,7 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n файл не вдалоÑÑ Ð²Ñтановити @@ -5113,388 +5088,388 @@ Please, only use this feature to install updates and DLC.</source> </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>СиÑтемний додаток</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>СиÑтемний архів</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтемного додатку</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>Пакет прошивки (Тип Ð)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>Пакет прошивки (Тип Б)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>Гра</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð³Ñ€Ð¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>DLC до гри</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Дельта-титул</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>Виберіть тип уÑтановки NCA...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>Будь лаÑка, виберіть тип додатку, Ñкий ви хочете вÑтановити Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ NCA: (У більшоÑті випадків, підходить Ñтандартний вибір "Гра".)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>Помилка вÑтановленнÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>Тип додатку, Ñкий ви вибрали Ð´Ð»Ñ NCA, недійÑний.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>Файл не знайдено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>Файл "%1" не знайдено</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>ОК</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>Ðе задоволені ÑиÑтемні вимоги</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>Ваша ÑиÑтема не відповідає рекомендованим ÑиÑтемним вимогам. Звіти про ÑуміÑніÑть було вимкнено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>ВідÑутній обліковий Ð·Ð°Ð¿Ð¸Ñ yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>Щоб надіÑлати звіт про ÑуміÑніÑть гри, необхідно прив'Ñзати Ñвій обліковий Ð·Ð°Ð¿Ð¸Ñ yuzu. <br><br/>Щоб прив'Ñзати Ñвій обліковий Ð·Ð°Ð¿Ð¸Ñ yuzu, перейдіть у розділ ЕмулÑÑ†Ñ–Ñ &gt; Параметри &gt; Мережа.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>Помилка під Ñ‡Ð°Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ URL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ URL: "%1".</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>Ð—Ð°Ð¿Ð¸Ñ TAS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>ПерезапиÑати файл Ð³Ñ€Ð°Ð²Ñ†Ñ 1?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>ВиÑвлено неприпуÑтиму конфігурацію</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>Портативний контролер не може бути викориÑтаний у режимі док-Ñтанції. Буде обрано контролер Pro.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>Поточний amiibo було прибрано</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>Помилка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>Поточна гра не шукає amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Файл Amiibo (%1);; Ð’ÑÑ– Файли (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>Завантажити Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>Обраний файл не Ñ” допуÑтимим amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>Обраний файл уже викориÑтовуєтьÑÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>Виникла невідома помилка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>Зробити знімок екрану</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ PNG (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>Стан TAS: ВиконуєтьÑÑ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>Стан TAS: ЗапиÑуєтьÑÑ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>Стан TAS: ПроÑтий %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>Стан TAS: ÐеприпуÑтимий</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>[&S] Зупинка</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>[&S] Почати</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>[&E] Закінчити запиÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>[&E] ЗапиÑ</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>Побудова: %n шейдер</numerusform><numerusform>Побудова: %n шейдер(ів)</numerusform><numerusform>Побудова: %n шейдер(ів)</numerusform><numerusform>Побудова: %n шейдер(ів)</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>МаÑштаб: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>ШвидкіÑть: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>ШвидкіÑть: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>Гра: %1 FPS (Ðеобмежено)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>Гра: %1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>Кадр: %1 мÑ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>ГП ÐОРМÐЛЬÐО</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>ГП ВИСОКО</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>ГП ЕКСТРИМ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>ГП ПОМИЛКÐ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>Ð’ ДОК-СТÐÐЦІЇ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>ПОРТÐТИВÐИЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>ÐÐЙБЛИЖЧІЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>БІЛІÐІЙÐИЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>БІКУБІЧÐИЙ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>ГÐУС</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>SCALEFORCE</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>БЕЗ ЗГЛÐДЖУВÐÐÐЯ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>ГУЧÐІСТЬ: ЗÐГЛУШЕÐÐ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>ГУЧÐІСТЬ: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>Підтвердіть перерахунок ключа</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5511,37 +5486,37 @@ This will delete your autogenerated key files and re-run the key derivation modu Це видалить ваші автоматично згенеровані файли ключів Ñ– повторно запуÑтить модуль розрахунку ключів.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>ВідÑутні запобіжники</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- ВідÑутній BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation>- ВідÑутній BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation> - ВідÑутній PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>Компоненти розрахунку відÑутні</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>Ключі ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ñутні.<br>Будь лаÑка, дотримуйтеÑÑŒ <a href='https://yuzu-emu.org/help/quickstart/'>короткого керівництва кориÑтувача yuzu</a>, щоб отримати вÑÑ– ваші ключі, прошивку та ігри<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5550,39 +5525,39 @@ on your system's performance.</source> від продуктивноÑті вашої ÑиÑтеми.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð²</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>Оберіть ціль Ð´Ð»Ñ Ð´Ð°Ð¼Ð¿Ð° RomFS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>Будь лаÑка, виберіть, Ñкий RomFS ви хочете здампити.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>Ви впевнені, що хочете закрити yuzu?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>Ви впевнені, що хочете зупинити емулÑцію? Будь-Ñкий незбережений Ð¿Ñ€Ð¾Ð³Ñ€ÐµÑ Ð±ÑƒÐ´Ðµ втрачено.</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7586,28 +7561,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>Код помилки: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Будь лаÑка, Ñпробуйте ще раз або зв'ÑжітьÑÑ Ð· розробником ПЗ.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° на %1 у %2. Будь лаÑка, Ñпробуйте ще раз або зв'ÑжітьÑÑ Ð· розробником ПЗ.</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7631,20 +7606,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>Оберить кориÑтувача</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>КориÑтувачі</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>Вибір профілю</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation type="unfinished"/> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>Оберить кориÑтувача</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7694,51 +7730,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Стек викликів</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation type="unfinished"/> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation type="unfinished"/> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation type="unfinished"/> </message> @@ -7746,120 +7751,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation> PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation type="unfinished"/> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation type="unfinished"/> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation type="unfinished"/> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation type="unfinished"/> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation type="unfinished"/> </message> @@ -7867,7 +7862,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>[&W] Дерево очікуваннÑ</translation> </message> diff --git a/dist/languages/zh_CN.ts b/dist/languages/zh_CN.ts index 4a9fe2013..9da8b0b32 100644 --- a/dist/languages/zh_CN.ts +++ b/dist/languages/zh_CN.ts @@ -380,36 +380,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>输出设备</translation> + <source>Output Device:</source> + <translation>输出设备:</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>输入设备</translation> + <source>Input Device:</source> + <translation>输入设备:</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation>声音输出模å¼ï¼š</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>å•声é“</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>立体声</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>环绕声</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>使用全局音é‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>音é‡ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>音é‡ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>模拟器ä½äºŽåŽå°æ—¶é™éŸ³</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1375,26 +1400,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>模拟器ä½äºŽåŽå°æ—¶é™éŸ³</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>自动éšè—é¼ æ ‡å…‰æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>é‡ç½®æ‰€æœ‰è®¾ç½®é¡¹</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>å°†é‡ç½®æ¨¡æ‹Ÿå™¨æ‰€æœ‰è®¾ç½®å¹¶åˆ 除所有游æˆçš„å•独设置。这ä¸ä¼šåˆ 除游æˆç›®å½•ã€ä¸ªäººæ–‡ä»¶åŠè¾“å…¥é…置文件。是å¦ç»§ç»ï¼Ÿ</translation> </message> @@ -3828,60 +3848,15 @@ UUID: %2</translation> <translation>设备åç§°</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>å•声é“</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>立体声</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>环绕声</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>设备 ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>声音输出模å¼</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>é‡ç½® ID</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>åªæœ‰å½“游æˆä¸åœ¨è¿è¡Œæ—¶ï¼Œç³»ç»Ÿè®¾ç½®æ‰å¯ç”¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>è¦å‘Šï¼šâ€œ %1 â€å¹¶ä¸æ˜¯â€œ %2 â€åœ°åŒºçš„æœ‰æ•ˆè¯è¨€</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>这将使用一个新的虚拟 Switch å–ä»£ä½ å½“å‰çš„虚拟 Switch。您当å‰çš„虚拟 Switch å°†æ— æ³•æ¢å¤ã€‚在部分游æˆä¸å¯èƒ½ä¼šå‡ºçްæ„å¤–æ•ˆæžœã€‚å¦‚æžœä½ ä½¿ç”¨ä¸€ä¸ªè¿‡æ—¶çš„é…ç½®å˜æ¡£è¿™å¯èƒ½ä¼šå¤±è´¥ã€‚确定è¦ç»§ç»å—?</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>è¦å‘Š</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>设备 ID: 0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4569,957 +4544,957 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation><a href='https://yuzu-emu.org/help/feature/telemetry/'>æˆ‘ä»¬æ”¶é›†åŒ¿åæ•°æ®</a>æ¥å¸®åŠ©æ”¹è¿› yuzu 。<br/><br/>您愿æ„和我们分享您的使用数æ®å—?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>使用数æ®å…±äº«</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>检测到 Vulkan 的安装已æŸå</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>Vulkan åˆå§‹åŒ–失败。<br><br>点击<a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>这里</a>èŽ·å–æ¤é—®é¢˜çš„相关信æ¯ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>æ£åœ¨åŠ è½½ Web 应用程åº...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>ç¦ç”¨ Web 应用程åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>ç¦ç”¨ Web 应用程åºå¯èƒ½ä¼šå‘生未知的行为,且åªèƒ½åœ¨ã€Šè¶…级马里奥 3D 全明星》ä¸ä½¿ç”¨ã€‚您确定è¦ç¦ç”¨ Web 应用程åºå—? (您å¯ä»¥åœ¨è°ƒè¯•选项ä¸é‡æ–°å¯ç”¨å®ƒã€‚)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>当剿£åœ¨æž„建的ç€è‰²å™¨æ•°é‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>当å‰é€‰å®šçš„分辨率缩放比例。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>当å‰çš„æ¨¡æ‹Ÿé€Ÿåº¦ã€‚高于或低于 100% 的值表示è¿è¡Œé€Ÿåº¦æ¯”实际的 Switch 更快或更慢。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>游æˆå½“å‰è¿è¡Œçš„å¸§çŽ‡ã€‚è¿™å°†å› æ¸¸æˆå’Œåœºæ™¯çš„ä¸åŒè€Œæœ‰æ‰€å˜åŒ–。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>在ä¸è®¡ç®—速度é™åˆ¶å’Œåž‚ç›´åŒæ¥çš„æƒ…况下,模拟一个 Switch 帧的实际时间。若è¦è¿›è¡Œå…¨é€Ÿæ¨¡æ‹Ÿï¼Œè¿™ä¸ªæ•°å€¼ä¸åº”超过 16.67 毫秒。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>清除最近文件 (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation>å·²å¯ç”¨æ¨¡æ‹Ÿé¼ æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation>å®žä½“é¼ æ ‡è¾“å…¥ä¸Žé¼ æ ‡å¹³ç§»ä¸å…¼å®¹ã€‚请在高级输入设置ä¸ç¦ç”¨æ¨¡æ‹Ÿé¼ æ ‡ä»¥ä½¿ç”¨é¼ æ ‡å¹³ç§»ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>ç»§ç» (&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>æš‚åœ (&P)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu æ£åœ¨è¿è¡Œä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>è¿‡æ—¶æ¸¸æˆæ ¼å¼è¦å‘Š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>ç›®å‰ä½¿ç”¨çš„æ¸¸æˆä¸ºè§£ä½“çš„ ROM ç›®å½•æ ¼å¼ï¼Œè¿™æ˜¯ä¸€ç§è¿‡æ—¶çš„æ ¼å¼ï¼Œå·²è¢«å…¶ä»–æ ¼å¼æ›¿ä»£ï¼Œå¦‚ NCA,NAX,XCI 或 NSP。解体的 ROM ç›®å½•ç¼ºå°‘å›¾æ ‡ã€å…ƒæ•°æ®å’Œæ›´æ–°æ”¯æŒã€‚<br><br>有关 yuzu 支æŒçš„å„ç§ Switch æ ¼å¼çš„说明,<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>请查看我们的 wiki</a>ã€‚æ¤æ¶ˆæ¯å°†ä¸ä¼šå†æ¬¡å‡ºçŽ°ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>åŠ è½½ ROM 时出错ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>该 ROM æ ¼å¼ä¸å—支æŒã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>åˆå§‹åŒ–è§†é¢‘æ ¸å¿ƒæ—¶å‘生错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu 在è¿è¡Œè§†é¢‘æ ¸å¿ƒæ—¶å‘生错误。这å¯èƒ½æ˜¯ç”± GPU 驱动程åºè¿‡æ—§é€ æˆçš„。有关详细信æ¯ï¼Œè¯·å‚阅日志文件。关于日志文件的更多信æ¯ï¼Œè¯·å‚考以下页é¢ï¼š<a href='https://yuzu-emu.org/help/reference/log-files/'>å¦‚ä½•ä¸Šä¼ æ—¥å¿—æ–‡ä»¶</a>。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>åŠ è½½ ROM æ—¶å‡ºé”™ï¼ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>请å‚考<a href='https://yuzu-emu.org/help/quickstart/'>yuzu 快速导航</a>以获å–相关文件。<br>您å¯ä»¥å‚考 yuzu çš„ wiki 页é¢</a>或 Discord 社区</a>以获得帮助。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>å‘生了未知错误。请查看日志了解详情。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>æ£åœ¨å…³é—…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>ä¿å˜æ•°æ®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>Mod æ•°æ®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>打开 %1 文件夹时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>文件夹ä¸å˜åœ¨ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>打开å¯è½¬ç§»ç€è‰²å™¨ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>为该游æˆåˆ›å»ºç€è‰²å™¨ç¼“å˜ç›®å½•时失败。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>åˆ é™¤å†…å®¹æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>åˆ é™¤æ›´æ–°æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>åˆ é™¤ DLC 时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆå†…容?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆæ›´æ–°ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆ DLC 内容?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>åˆ é™¤é¡¹ç›®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>åˆ é™¤æˆåŠŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>æˆåŠŸåˆ é™¤å·²å®‰è£…çš„æ¸¸æˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>è¯¥æ¸¸æˆæœªå®‰è£…于 NAND ä¸ï¼Œæ— æ³•åˆ é™¤ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>æˆåŠŸåˆ é™¤å·²å®‰è£…çš„æ¸¸æˆæ›´æ–°ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>è¿™ä¸ªæ¸¸æˆæ²¡æœ‰ä»»ä½•已安装的更新。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>è¿™ä¸ªæ¸¸æˆæ²¡æœ‰ä»»ä½•已安装的 DLC 。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>æˆåŠŸåˆ é™¤æ¸¸æˆ %1 安装的 DLC 。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>åˆ é™¤ OpenGL 模å¼çš„ç€è‰²å™¨ç¼“å˜ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>åˆ é™¤ Vulkan 模å¼çš„ç€è‰²å™¨ç¼“å˜ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>åˆ é™¤æ‰€æœ‰çš„ç€è‰²å™¨ç¼“å˜ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>移除自定义游æˆè®¾ç½®ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>åˆ é™¤æ–‡ä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>这个游æˆçš„ç€è‰²å™¨ç¼“å˜ä¸å˜åœ¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>æˆåŠŸåˆ é™¤ç€è‰²å™¨ç¼“å˜ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜å¤±è´¥ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>åˆ é™¤ Vulkan 驱动程åºç®¡çº¿ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>åˆ é™¤é©±åŠ¨ç¨‹åºç®¡çº¿ç¼“å˜å¤±è´¥ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>ç€è‰²å™¨ç¼“å˜åˆ 除æˆåŠŸã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>åˆ é™¤ç€è‰²å™¨ç¼“å˜ç›®å½•失败。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>移除自定义游æˆè®¾ç½®æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>这个游æˆçš„自定义设置ä¸å˜åœ¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>æˆåŠŸç§»é™¤è‡ªå®šä¹‰æ¸¸æˆè®¾ç½®ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>移除自定义游æˆè®¾ç½®å¤±è´¥ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS æå–失败ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>å¤åˆ¶ RomFS æ–‡ä»¶æ—¶å‡ºé”™ï¼Œæˆ–ç”¨æˆ·å–æ¶ˆäº†æ“作。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>完整</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>框架</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>选择 RomFS 转储模å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>请选择 RomFS 转储的方å¼ã€‚<br>“完整†会将所有文件å¤åˆ¶åˆ°æ–°ç›®å½•ä¸ï¼Œè€Œ<br>“框架†åªä¼šåˆ›å»ºç›®å½•结构。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>%1 没有足够的空间用于æå– RomFSã€‚è¯·ä¿æŒè¶³å¤Ÿçš„空间或于模拟—>设置—>系统—>文件系统—>è½¬å‚¨æ ¹ç›®å½•ä¸é€‰æ‹©ä¸€ä¸ªå…¶ä»–目录。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>æ£åœ¨æå– RomFS...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS æå–æˆåŠŸï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>æ“作æˆåŠŸå®Œæˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>åˆ›å»ºå¿«æ·æ–¹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>这将为当å‰çš„æ¸¸æˆåˆ›å»ºå¿«æ·æ–¹å¼ã€‚但在其更新åŽï¼Œå¿«æ·æ–¹å¼å¯èƒ½æ— 法æ£å¸¸å·¥ä½œã€‚是å¦ç»§ç»ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>æ— æ³•åœ¨æ¡Œé¢åˆ›å»ºå¿«æ·æ–¹å¼ã€‚路径“ %1 â€ä¸å˜åœ¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>æ— æ³•åœ¨åº”ç”¨ç¨‹åºèœå•ä¸åˆ›å»ºå¿«æ·æ–¹å¼ã€‚路径“ %1 â€ä¸å˜åœ¨ä¸”æ— æ³•è¢«åˆ›å»ºã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>åˆ›å»ºå›¾æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>æ— æ³•åˆ›å»ºå›¾æ ‡æ–‡ä»¶ã€‚è·¯å¾„â€œ %1 â€ä¸å˜åœ¨ä¸”æ— æ³•è¢«åˆ›å»ºã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>使用 yuzu å¯åЍ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>在 %1 å¤„åˆ›å»ºå¿«æ·æ–¹å¼æ—¶å¤±è´¥</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>æˆåŠŸåœ°åœ¨ %1 å¤„åˆ›å»ºå¿«æ·æ–¹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>打开 %1 时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>选择目录</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>属性</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>æ— æ³•åŠ è½½è¯¥æ¸¸æˆçš„属性信æ¯ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch 坿‰§è¡Œæ–‡ä»¶ (%1);;所有文件 (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>åŠ è½½æ–‡ä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>打开æå–çš„ ROM 目录</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>é€‰æ‹©çš„ç›®å½•æ— æ•ˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>选择的目录ä¸åŒ…å« â€œmain†文件。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>å¯å®‰è£… Switch 文件 (*.nca *.nsp *.xci);;ä»»å¤©å ‚å†…å®¹æ¡£æ¡ˆ (*.nca);;ä»»å¤©å ‚åº”ç”¨åŒ… (*.nsp);;NX å¡å¸¦é•œåƒ (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>安装文件</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>剩余 %n 个文件</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>æ£åœ¨å®‰è£…文件 "%1"...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>安装结果</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>为了é¿å…å¯èƒ½å˜åœ¨çš„冲çªï¼Œæˆ‘们ä¸å»ºè®®å°†æ¸¸æˆæœ¬ä½“安装到 NAND ä¸ã€‚ æ¤åŠŸèƒ½ä»…ç”¨äºŽå®‰è£…æ¸¸æˆæ›´æ–°å’Œ DLC 。</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>最近安装了 %n 个文件 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n 个文件被覆盖 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n 个文件安装失败 </numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>系统应用</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>系统档案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>系统应用更新</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>固件包 (Aåž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>固件包 (Båž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>游æˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>æ¸¸æˆæ›´æ–°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>æ¸¸æˆ DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>å·®é‡ç¨‹åº</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>选择 NCA 安装类型...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>è¯·é€‰æ‹©æ¤ NCA 的程åºç±»åž‹ï¼š (在大多数情况下,选择默认的“游æˆâ€å³å¯ã€‚)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>安装失败</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>选择的 NCA 程åºç±»åž‹æ— 效。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>找ä¸åˆ°æ–‡ä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>文件 "%1" 未找到</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>确定</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>ç¡¬ä»¶ä¸æ»¡è¶³è¦æ±‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>æ‚¨çš„ç³»ç»Ÿä¸æ»¡è¶³è¿è¡Œ yuzu 的推èé…置。兼容性报告已被ç¦ç”¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>未设置 yuzu 账户</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>è¦æäº¤æ¸¸æˆå…¼å®¹æ€§æµ‹è¯•用例,您必须设置您的 yuzu 叿ˆ·ã€‚<br><br/>è¦è®¾ç½®æ‚¨çš„ yuzu 叿ˆ·ï¼Œè¯·è½¬åˆ°æ¨¡æ‹Ÿ &gt; 设置 &gt; 网络。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>打开 URL 时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>æ— æ³•æ‰“å¼€ URL : "%1" 。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>TAS 录制ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>覆盖玩家 1 的文件?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>æ£€æµ‹åˆ°æ— æ•ˆé…ç½®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>æŽŒæœºæ‰‹æŸ„æ— æ³•åœ¨ä¸»æœºæ¨¡å¼ä¸ä½¿ç”¨ã€‚将会选择 Pro controller。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>当å‰çš„ Amiibo 已被移除。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>当剿¸¸æˆå¹¶æ²¡æœ‰åœ¨å¯»æ‰¾ Amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo 文件 (%1);; 全部文件 (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>åŠ è½½ Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>åŠ è½½ Amiibo æ•°æ®æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>é€‰æ‹©çš„æ–‡ä»¶å¹¶ä¸æ˜¯æœ‰æ•ˆçš„ amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>选择的文件已在使用ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>å‘生了未知错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>æ•获截图</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG å›¾åƒ (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>TAS 状æ€ï¼šæ£åœ¨è¿è¡Œ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>TAS 状æ€ï¼šæ£åœ¨å½•制 %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>TAS 状æ€ï¼šç©ºé—² %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>TAS 状æ€ï¼šæ— 效</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>åœæ¢è¿è¡Œ (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>开始 (&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>åœæ¢å½•制 (&E)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>录制 (&E)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>æ£åœ¨ç¼–译 %n 个ç€è‰²å™¨æ–‡ä»¶</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>缩放比例: %1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>速度: %1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>速度: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>FPS: %1 (未é”定)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>FPS: %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>帧延迟: %1 毫秒</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU NORMAL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU HIGH</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU EXTREME</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU ERROR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>主机模å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>掌机模å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>æ— </translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>é‚»è¿‘å–æ ·</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>åŒçº¿æ€§è¿‡æ»¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>åŒä¸‰çº¿è¿‡æ»¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>高斯模糊</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>强制缩放</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>抗锯齿关</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>音é‡: é™éŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>音é‡: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>ç¡®è®¤é‡æ–°ç”Ÿæˆå¯†é’¥</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5535,37 +5510,37 @@ This will delete your autogenerated key files and re-run the key derivation modu è¿™å°†åˆ é™¤æ‚¨è‡ªåŠ¨ç”Ÿæˆçš„å¯†é’¥æ–‡ä»¶å¹¶é‡æ–°è¿è¡Œå¯†é’¥ç”Ÿæˆæ¨¡å—。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>项目丢失</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- 丢失 BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - 丢失 BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- 丢失 PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>组件丢失</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>密钥缺失。<br>请查看<a href='https://yuzu-emu.org/help/quickstart/'>yuzu 快速导航</a>ä»¥èŽ·å¾—ä½ çš„å¯†é’¥ã€å›ºä»¶å’Œæ¸¸æˆã€‚<br><br><small>(%1)</small></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5574,39 +5549,39 @@ on your system's performance.</source> 您的系统性能。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>生æˆå¯†é’¥</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>选择 RomFS è½¬å‚¨ç›®æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>请选择希望转储的 RomFS。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>您确定è¦å…³é— yuzu å—?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>您确定è¦åœæ¢æ¨¡æ‹Ÿå—?未ä¿å˜çš„进度将会丢失。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7610,28 +7585,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>错误代ç : %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>å‘生了一个错误。 请å†è¯•一次或è”系开å‘者。</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>在 %2 处的 %1 上å‘生了一个错误。 请å†è¯•一次或è”系开å‘者。</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7655,20 +7630,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>选择一个用户:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>用户</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation>创建用户</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>选择用户</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation>修改用户图åƒ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation>修改用户昵称</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation>è°å°†èŽ·å¾—é»„é‡‘ç‚¹æ•°ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation>è°æ£åœ¨ä½¿ç”¨ä»»å¤©å ‚ eShop?</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation>是è°è´ä¹°äº†è¿™ä¸ªï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation>è°åœ¨å‘帖?</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation>选择è¦é“¾æŽ¥åˆ°ä»»å¤©å ‚账户的用户。</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation>è¦æ›´æ”¹å“ªä¸ªç”¨æˆ·çš„设置?</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation>è¦ä¸ºå“ªä¸ªç”¨æˆ·æ ¼å¼åŒ–æ•°æ®ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation>哪个用户将被转移到å¦ä¸€ä¸ªæŽ§åˆ¶å°ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation>è¦ä¸ºå“ªä¸ªç”¨æˆ·å‘é€ä¿å˜æ•°æ®ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>选择一个用户:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7718,51 +7754,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>è°ƒç”¨æ ˆ</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>æ£åœ¨ç‰å¾…äº’æ–¥é” 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>ç‰å¾…ä¸: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>æ‰€æœ‰è€…å¥æŸ„: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>æ£åœ¨ç‰å¾…所有对象</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>æ£åœ¨ç‰å¾…下列对象ä¸çš„一个</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation>[%1] %2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>没有ç‰å¾…的线程</translation> </message> @@ -7770,120 +7775,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>å¯è¿è¡Œ</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>已暂åœ</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>ç¡çœ ä¸</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>ç‰å¾… IPC å“应</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>ç‰å¾…对象</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>ç‰å¾…æ¡ä»¶å˜é‡</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>ç‰å¾… address arbiter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>ç‰å¾…挂起的线程</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>ç‰å¾…ä¸</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>åˆå§‹åŒ–完毕</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>线程终æ¢</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>未知</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation>PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>æ ¸å¿ƒ %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>处ç†å™¨ = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ç†æƒ³æ ¸å¿ƒ = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>å…³è”æŽ©ç = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>线程 ID = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>优先级 = %1 (实时) / %2 (æ£å¸¸)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>最åŽè¿è¡Œé¢‘率 = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>未ç‰å¾…互斥é”</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>ç‰å¾…ä¸çš„线程</translation> </message> @@ -7891,7 +7886,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>ç‰å¾…æ ‘ (&W)</translation> </message> diff --git a/dist/languages/zh_TW.ts b/dist/languages/zh_TW.ts index 46974e448..472b00114 100644 --- a/dist/languages/zh_TW.ts +++ b/dist/languages/zh_TW.ts @@ -380,36 +380,61 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="42"/> - <source>Output Device</source> - <translation>输出设备</translation> + <source>Output Device:</source> + <translation>输出设备:</translation> </message> <message> <location filename="../../src/yuzu/configuration/configure_audio.ui" line="56"/> - <source>Input Device</source> - <translation>輸入è£ç½®ï¼š</translation> + <source>Input Device:</source> + <translation>输入设备:</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="70"/> + <source>Sound Output Mode:</source> + <translation>声音输出模å¼ï¼š</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="78"/> + <source>Mono</source> + <translation>å–®è²é“</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="83"/> + <source>Stereo</source> + <translation>ç«‹é«”è²</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="88"/> + <source>Surround</source> + <translation>環繞音效</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="84"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="114"/> <source>Use global volume</source> <translation>使用全域音é‡</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="89"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="119"/> <source>Set volume:</source> <translation>音é‡ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="97"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="127"/> <source>Volume:</source> <translation>音é‡ï¼š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.ui" line="142"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="172"/> <source>0 %</source> <translation>0 %</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="108"/> + <location filename="../../src/yuzu/configuration/configure_audio.ui" line="187"/> + <source>Mute audio when in background</source> + <translation>模拟器ä½äºŽåŽå°æ—¶é™éŸ³</translation> + </message> + <message> + <location filename="../../src/yuzu/configuration/configure_audio.cpp" line="115"/> <source>%1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>%1%</translation> @@ -1377,26 +1402,21 @@ This would ban both their forum username and their IP address.</source> </message> <message> <location filename="../../src/yuzu/configuration/configure_general.ui" line="95"/> - <source>Mute audio when in background</source> - <translation>模拟器ä½äºŽåŽå°æ—¶é™éŸ³</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="102"/> <source>Hide mouse on inactivity</source> <translation>æ»‘é¼ é–’ç½®æ™‚è‡ªå‹•éš±è—</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.ui" line="144"/> + <location filename="../../src/yuzu/configuration/configure_general.ui" line="137"/> <source>Reset All Settings</source> <translation>é‡è¨æ‰€æœ‰è¨å®š</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="67"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_general.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_general.cpp" line="68"/> <source>This reset all settings and remove all per-game configurations. This will not delete game directories, profiles, or input profiles. Proceed?</source> <translation>這將é‡è¨æ‰€æœ‰éŠæˆ²çš„é¡å¤–è¨å®šï¼Œä½†ä¸æœƒåˆªé™¤éŠæˆ²è³‡æ–™å¤¾ã€ä½¿ç”¨è€…è¨å®šæª”ã€è¼¸å…¥è¨å®šæª”,是å¦ç¹¼çºŒï¼Ÿ</translation> </message> @@ -3830,60 +3850,15 @@ UUID: %2</translation> <translation>设备åç§°</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="446"/> - <source>Mono</source> - <translation>å–®è²é“</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="451"/> - <source>Stereo</source> - <translation>ç«‹é«”è²</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="456"/> - <source>Surround</source> - <translation>環繞音效</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="464"/> - <source>Console ID:</source> - <translation>主機 ID:</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="471"/> - <source>Sound output mode</source> - <translation>è²é“</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="526"/> - <source>Regenerate</source> - <translation>釿–°ç”¢ç”Ÿ</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.ui" line="561"/> + <location filename="../../src/yuzu/configuration/configure_system.ui" line="512"/> <source>System settings are available only when game is not running.</source> <translation>åƒ…åœ¨éŠæˆ²æœªåŸ·è¡Œæ™‚æ‰èƒ½ä¿®æ”¹ä½¿ç”¨è€…è¨å®šæª”</translation> </message> <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="69"/> + <location filename="../../src/yuzu/configuration/configure_system.cpp" line="67"/> <source>Warning: "%1" is not a valid language for region "%2"</source> <translation>è¦å‘Šï¼šâ€œ %1 â€å¹¶ä¸æ˜¯â€œ %2 â€åœ°åŒºçš„æœ‰æ•ˆè¯è¨€ã€‚</translation> </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="207"/> - <source>This will replace your current virtual Switch with a new one. Your current virtual Switch will not be recoverable. This might have unexpected effects in games. This might fail, if you use an outdated config savegame. Continue?</source> - <translation>這會使用新的虛擬 Switch å–ä»£ä½ ç›®å‰çš„虛擬 Switch,且將無法還原目å‰çš„虛擬 Switchã€‚åœ¨éƒ¨åˆ†éŠæˆ²ä¸å¯èƒ½æœƒå‡ºç¾æ„外後果。æ¤å‹•作å¯èƒ½å› æ‚¨ä½¿ç”¨éŽæ™‚çš„è¨å®šå˜æª”而失敗。確定è¦ç¹¼çºŒå—Žï¼Ÿ</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="211"/> - <source>Warning</source> - <translation>è¦å‘Š</translation> - </message> - <message> - <location filename="../../src/yuzu/configuration/configure_system.cpp" line="219"/> - <source>Console ID: 0x%1</source> - <translation>主機 ID:0x%1</translation> - </message> </context> <context> <name>ConfigureTas</name> @@ -4571,956 +4546,956 @@ Drag points to change position, or double-click table cells to edit values.</sou <context> <name>GMainWindow</name> <message> - <location filename="../../src/yuzu/main.cpp" line="194"/> + <location filename="../../src/yuzu/main.cpp" line="197"/> <source><a href='https://yuzu-emu.org/help/feature/telemetry/'>Anonymous data is collected</a> to help improve yuzu. <br/><br/>Would you like to share your usage data with us?</source> <translation>我們<a href='https://yuzu-emu.org/help/feature/telemetry/'>è’集匿å的資料</a>以幫助改善 yuzu。<br/><br/>您願æ„和我們分享您的使用資料嗎?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="197"/> + <location filename="../../src/yuzu/main.cpp" line="200"/> <source>Telemetry</source> <translation>陿¸¬</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="421"/> + <location filename="../../src/yuzu/main.cpp" line="432"/> <source>Broken Vulkan Installation Detected</source> <translation>检测到 Vulkan 的安装已æŸå</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="422"/> + <location filename="../../src/yuzu/main.cpp" line="433"/> <source>Vulkan initialization failed during boot.<br><br>Click <a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>here for instructions to fix the issue</a>.</source> <translation>Vulkan åˆå§‹åŒ–失败。<br><br>点击<a href='https://yuzu-emu.org/wiki/faq/#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>这里</a>èŽ·å–æ¤é—®é¢˜çš„相关信æ¯ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="774"/> + <location filename="../../src/yuzu/main.cpp" line="824"/> <source>Loading Web Applet...</source> <translation>載入 Web Applet...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="824"/> - <location filename="../../src/yuzu/main.cpp" line="827"/> + <location filename="../../src/yuzu/main.cpp" line="874"/> + <location filename="../../src/yuzu/main.cpp" line="877"/> <source>Disable Web Applet</source> <translation>åœç”¨ Web Applet</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="828"/> + <location filename="../../src/yuzu/main.cpp" line="878"/> <source>Disabling the web applet can lead to undefined behavior and should only be used with Super Mario 3D All-Stars. Are you sure you want to disable the web applet? (This can be re-enabled in the Debug settings.)</source> <translation>ç¦ç”¨ Web 应用程åºå¯èƒ½ä¼šå¯¼è‡´æœªçŸ¥çš„行为,且åªèƒ½åœ¨ã€Šè¶…级马里奥 3D 全明星》ä¸ä½¿ç”¨ã€‚您确定è¦ç¦ç”¨ Web 应用程åºå—? (您å¯ä»¥åœ¨è°ƒè¯•选项ä¸é‡æ–°å¯ç”¨å®ƒã€‚)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="935"/> + <location filename="../../src/yuzu/main.cpp" line="994"/> <source>The amount of shaders currently being built</source> <translation>ç›®å‰æ£åœ¨å»ºæ§‹çš„著色器數é‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="937"/> + <location filename="../../src/yuzu/main.cpp" line="996"/> <source>The current selected resolution scaling multiplier.</source> <translation>ç›®å‰é¸æ“‡çš„è§£æžåº¦ç¸®æ”¾æ¯”例。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="940"/> + <location filename="../../src/yuzu/main.cpp" line="999"/> <source>Current emulation speed. Values higher or lower than 100% indicate emulation is running faster or slower than a Switch.</source> <translation>ç›®å‰çš„æ¨¡æ“¬é€Ÿåº¦ã€‚高於或低於 100% 表示比實際 Switch 執行速度更快或更慢。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="943"/> + <location filename="../../src/yuzu/main.cpp" line="1002"/> <source>How many frames per second the game is currently displaying. This will vary from game to game and scene to scene.</source> <translation>éŠæˆ²å³æ™‚ FPSã€‚æœƒå› éŠæˆ²å’Œå ´æ™¯çš„ä¸åŒè€Œæ”¹è®Šã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="947"/> + <location filename="../../src/yuzu/main.cpp" line="1006"/> <source>Time taken to emulate a Switch frame, not counting framelimiting or v-sync. For full-speed emulation this should be at most 16.67 ms.</source> <translation>在ä¸è€ƒæ…®å¹€æ•¸é™åˆ¶å’Œåž‚ç›´åŒæ¥çš„æƒ…æ³ä¸‹æ¨¡æ“¬ä¸€å€‹ Switch ç•«æ ¼çš„å¯¦éš›æ™‚é–“ï¼Œè‹¥è¦å…¨é€Ÿæ¨¡æ“¬ï¼Œæ¤æ•¸å€¼ä¸å¾—è¶…éŽ 16.67 毫秒。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1097"/> + <location filename="../../src/yuzu/main.cpp" line="1156"/> <source>&Clear Recent Files</source> <translation>清除最近的檔案(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1171"/> + <location filename="../../src/yuzu/main.cpp" line="1230"/> <source>Emulated mouse is enabled</source> <translation>å·²å¯ç”¨æ¨¡æ‹Ÿé¼ æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1172"/> + <location filename="../../src/yuzu/main.cpp" line="1231"/> <source>Real mouse input and mouse panning are incompatible. Please disable the emulated mouse in input advanced settings to allow mouse panning.</source> <translation>å®žä½“é¼ æ ‡è¾“å…¥ä¸Žé¼ æ ‡å¹³ç§»ä¸å…¼å®¹ã€‚请在高级输入设置ä¸ç¦ç”¨æ¨¡æ‹Ÿé¼ æ ‡ä»¥ä½¿ç”¨é¼ æ ‡å¹³ç§»ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1394"/> + <location filename="../../src/yuzu/main.cpp" line="1453"/> <source>&Continue</source> <translation>繼續(&C)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1396"/> + <location filename="../../src/yuzu/main.cpp" line="1455"/> <source>&Pause</source> <translation>&æš«åœ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1476"/> + <location filename="../../src/yuzu/main.cpp" line="1535"/> <source>yuzu is running a game</source> <extracomment>TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the computer from sleeping</extracomment> <translation>yuzu æ£åœ¨åŸ·è¡Œä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1609"/> + <location filename="../../src/yuzu/main.cpp" line="1668"/> <source>Warning Outdated Game Format</source> <translation>éŽæ™‚éŠæˆ²æ ¼å¼è¦å‘Š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1610"/> + <location filename="../../src/yuzu/main.cpp" line="1669"/> <source>You are using the deconstructed ROM directory format for this game, which is an outdated format that has been superseded by others such as NCA, NAX, XCI, or NSP. Deconstructed ROM directories lack icons, metadata, and update support.<br><br>For an explanation of the various Switch formats yuzu supports, <a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our wiki</a>. This message will not be shown again.</source> <translation>æ¤éŠæˆ²ç‚ºè§£æ§‹çš„ ROM è³‡æ–™å¤¾æ ¼å¼ï¼Œé€™æ˜¯ä¸€ç¨®éŽæ™‚çš„æ ¼å¼ï¼Œå·²è¢«å…¶ä»–æ ¼å¼å–代,如 NCAã€NAXã€XCIã€NSP。解構的 ROM 目錄缺少圖示ã€ä¸ç¹¼è³‡æ–™å’Œæ›´æ–°æ”¯æ´ã€‚<br><br>有關 yuzu 支æ´çš„å„種 Switch æ ¼å¼èªªæ˜Žï¼Œ<a href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>è«‹åƒé–±æˆ‘們的 wiki </a>。æ¤è¨Šæ¯å°‡ä¸å†é¡¯ç¤ºã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1622"/> - <location filename="../../src/yuzu/main.cpp" line="1656"/> + <location filename="../../src/yuzu/main.cpp" line="1681"/> + <location filename="../../src/yuzu/main.cpp" line="1715"/> <source>Error while loading ROM!</source> <translation>載入 ROM 時發生錯誤ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1623"/> + <location filename="../../src/yuzu/main.cpp" line="1682"/> <source>The ROM format is not supported.</source> <translation>æ¤ ROM æ ¼å¼ä¸æ”¯æ´</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1627"/> + <location filename="../../src/yuzu/main.cpp" line="1686"/> <source>An error occurred initializing the video core.</source> <translation>åˆå§‹åŒ–è¦–è¨Šæ ¸å¿ƒæ™‚ç™¼ç”ŸéŒ¯èª¤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1628"/> + <location filename="../../src/yuzu/main.cpp" line="1687"/> <source>yuzu has encountered an error while running the video core. This is usually caused by outdated GPU drivers, including integrated ones. Please see the log for more details. For more information on accessing the log, please see the following page: <a href='https://yuzu-emu.org/help/reference/log-files/'>How to Upload the Log File</a>. </source> <translation>yuzu åœ¨åŸ·è¡Œè¦–è¨Šæ ¸å¿ƒæ™‚ç™¼ç”ŸéŒ¯èª¤ã€‚ 這å¯èƒ½æ˜¯ GPU 驅動程åºéŽèˆŠé€ æˆçš„。 詳細資訊請查閱日誌檔案。 關於日誌檔案的更多資訊,請åƒè€ƒä»¥ä¸‹é é¢ï¼š<a href='https://yuzu-emu.org/help/reference/log-files/'>如何上傳日誌檔案</a>。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1643"/> + <location filename="../../src/yuzu/main.cpp" line="1702"/> <source>Error while loading ROM! %1</source> <comment>%1 signifies a numeric error code.</comment> <translation>載入 ROM 時發生錯誤ï¼%1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1646"/> + <location filename="../../src/yuzu/main.cpp" line="1705"/> <source>%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to redump your files.<br>You can refer to the yuzu wiki</a> or the yuzu Discord</a> for help.</source> <comment>%1 signifies an error string.</comment> <translation>%1<br>è«‹åƒé–± <a href='https://yuzu-emu.org/help/quickstart/'>yuzu 快速指引</a>以釿–°å‚¾å°æª”案。<br>您å¯ä»¥å‰å¾€ yuzu çš„ wiki</a> 或 Discord 社群</a>以ç²å¾—幫助。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1657"/> + <location filename="../../src/yuzu/main.cpp" line="1716"/> <source>An unknown error occurred. Please see the log for more details.</source> <translation>發生未知錯誤,請檢視紀錄了解細節。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(64-bit)</source> <translation>(64-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1792"/> + <location filename="../../src/yuzu/main.cpp" line="1858"/> <source>(32-bit)</source> <translation>(32-bit)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1793"/> + <location filename="../../src/yuzu/main.cpp" line="1859"/> <source>%1 %2</source> <comment>%1 is the title name. %2 indicates if the title is 64-bit or 32-bit</comment> <translation>%1 %2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="1851"/> + <location filename="../../src/yuzu/main.cpp" line="1917"/> <source>Closing software...</source> <translation>æ£åœ¨å…³é—…</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2000"/> + <location filename="../../src/yuzu/main.cpp" line="2066"/> <source>Save Data</source> <translation>儲å˜è³‡æ–™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2050"/> + <location filename="../../src/yuzu/main.cpp" line="2122"/> <source>Mod Data</source> <translation>模組資料</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2063"/> + <location filename="../../src/yuzu/main.cpp" line="2135"/> <source>Error Opening %1 Folder</source> <translation>開啟資料夾 %1 時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2064"/> - <location filename="../../src/yuzu/main.cpp" line="2646"/> + <location filename="../../src/yuzu/main.cpp" line="2136"/> + <location filename="../../src/yuzu/main.cpp" line="2718"/> <source>Folder does not exist!</source> <translation>資料夾ä¸å˜åœ¨</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2076"/> + <location filename="../../src/yuzu/main.cpp" line="2148"/> <source>Error Opening Transferable Shader Cache</source> <translation>開啟通用著色器快å–ä½ç½®æ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2077"/> + <location filename="../../src/yuzu/main.cpp" line="2149"/> <source>Failed to create the shader cache directory for this title.</source> <translation>無法新增æ¤éŠæˆ²çš„著色器快å–資料夾。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2128"/> + <location filename="../../src/yuzu/main.cpp" line="2200"/> <source>Error Removing Contents</source> <translation>åˆ é™¤å†…å®¹æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2130"/> + <location filename="../../src/yuzu/main.cpp" line="2202"/> <source>Error Removing Update</source> <translation>åˆ é™¤æ›´æ–°æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2132"/> + <location filename="../../src/yuzu/main.cpp" line="2204"/> <source>Error Removing DLC</source> <translation>åˆ é™¤ DLC 时出错</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2141"/> + <location filename="../../src/yuzu/main.cpp" line="2213"/> <source>Remove Installed Game Contents?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆå†…容?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2143"/> + <location filename="../../src/yuzu/main.cpp" line="2215"/> <source>Remove Installed Game Update?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆæ›´æ–°ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2145"/> + <location filename="../../src/yuzu/main.cpp" line="2217"/> <source>Remove Installed Game DLC?</source> <translation>åˆ é™¤å·²å®‰è£…çš„æ¸¸æˆ DLC 内容?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2151"/> + <location filename="../../src/yuzu/main.cpp" line="2223"/> <source>Remove Entry</source> <translation>ç§»é™¤é …ç›®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2182"/> - <location filename="../../src/yuzu/main.cpp" line="2198"/> - <location filename="../../src/yuzu/main.cpp" line="2229"/> - <location filename="../../src/yuzu/main.cpp" line="2292"/> - <location filename="../../src/yuzu/main.cpp" line="2326"/> - <location filename="../../src/yuzu/main.cpp" line="2349"/> + <location filename="../../src/yuzu/main.cpp" line="2254"/> + <location filename="../../src/yuzu/main.cpp" line="2270"/> + <location filename="../../src/yuzu/main.cpp" line="2301"/> + <location filename="../../src/yuzu/main.cpp" line="2364"/> + <location filename="../../src/yuzu/main.cpp" line="2398"/> + <location filename="../../src/yuzu/main.cpp" line="2421"/> <source>Successfully Removed</source> <translation>移除æˆåŠŸ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2183"/> + <location filename="../../src/yuzu/main.cpp" line="2255"/> <source>Successfully removed the installed base game.</source> <translation>æˆåŠŸç§»é™¤å·²å®‰è£çš„éŠæˆ²ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2187"/> + <location filename="../../src/yuzu/main.cpp" line="2259"/> <source>The base game is not installed in the NAND and cannot be removed.</source> <translation>æ¤éŠæˆ²ä¸¦éžå®‰è£åœ¨å…§éƒ¨å„²å˜ç©ºé–“ï¼Œå› æ¤ç„¡æ³•移除。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2199"/> + <location filename="../../src/yuzu/main.cpp" line="2271"/> <source>Successfully removed the installed update.</source> <translation>æˆåŠŸç§»é™¤å·²å®‰è£çš„éŠæˆ²æ›´æ–°ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2202"/> + <location filename="../../src/yuzu/main.cpp" line="2274"/> <source>There is no update installed for this title.</source> <translation>æ¤éŠæˆ²æ²’有已安è£çš„æ›´æ–°ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2225"/> + <location filename="../../src/yuzu/main.cpp" line="2297"/> <source>There are no DLC installed for this title.</source> <translation>æ¤éŠæˆ²æ²’有已安è£çš„ DLC。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2230"/> + <location filename="../../src/yuzu/main.cpp" line="2302"/> <source>Successfully removed %1 installed DLC.</source> <translation>æˆåŠŸç§»é™¤éŠæˆ² %1 已安è£çš„ DLC。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2238"/> + <location filename="../../src/yuzu/main.cpp" line="2310"/> <source>Delete OpenGL Transferable Shader Cache?</source> <translation>刪除 OpenGL 模å¼çš„著色器快å–?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2240"/> + <location filename="../../src/yuzu/main.cpp" line="2312"/> <source>Delete Vulkan Transferable Shader Cache?</source> <translation>刪除 Vulkan 模å¼çš„著色器快å–?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2242"/> + <location filename="../../src/yuzu/main.cpp" line="2314"/> <source>Delete All Transferable Shader Caches?</source> <translation>刪除所有的著色器快å–?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2244"/> + <location filename="../../src/yuzu/main.cpp" line="2316"/> <source>Remove Custom Game Configuration?</source> <translation>移除é¡å¤–éŠæˆ²è¨å®šï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2250"/> + <location filename="../../src/yuzu/main.cpp" line="2322"/> <source>Remove File</source> <translation>刪除檔案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2287"/> - <location filename="../../src/yuzu/main.cpp" line="2295"/> + <location filename="../../src/yuzu/main.cpp" line="2359"/> + <location filename="../../src/yuzu/main.cpp" line="2367"/> <source>Error Removing Transferable Shader Cache</source> <translation>åˆªé™¤é€šç”¨è‘—è‰²å™¨å¿«å–æ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2288"/> - <location filename="../../src/yuzu/main.cpp" line="2322"/> + <location filename="../../src/yuzu/main.cpp" line="2360"/> + <location filename="../../src/yuzu/main.cpp" line="2394"/> <source>A shader cache for this title does not exist.</source> <translation>æ¤éŠæˆ²æ²’有著色器快å–</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2293"/> + <location filename="../../src/yuzu/main.cpp" line="2365"/> <source>Successfully removed the transferable shader cache.</source> <translation>æˆåŠŸåˆªé™¤è‘—è‰²å™¨å¿«å–。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2296"/> + <location filename="../../src/yuzu/main.cpp" line="2368"/> <source>Failed to remove the transferable shader cache.</source> <translation>刪除通用著色器快å–失敗。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2311"/> + <location filename="../../src/yuzu/main.cpp" line="2383"/> <source>Error Removing Vulkan Driver Pipeline Cache</source> <translation>移除 Vulkan 驱动程åºç®¡çº¿ç¼“å˜æ—¶å‡ºé”™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2312"/> + <location filename="../../src/yuzu/main.cpp" line="2384"/> <source>Failed to remove the driver pipeline cache.</source> <translation>åˆ é™¤é©±åŠ¨ç¨‹åºç®¡çº¿ç¼“å˜å¤±è´¥ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2321"/> - <location filename="../../src/yuzu/main.cpp" line="2329"/> + <location filename="../../src/yuzu/main.cpp" line="2393"/> + <location filename="../../src/yuzu/main.cpp" line="2401"/> <source>Error Removing Transferable Shader Caches</source> <translation>åˆªé™¤é€šç”¨è‘—è‰²å™¨å¿«å–æ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2327"/> + <location filename="../../src/yuzu/main.cpp" line="2399"/> <source>Successfully removed the transferable shader caches.</source> <translation>æˆåŠŸåˆªé™¤é€šç”¨è‘—è‰²å™¨å¿«å–。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2330"/> + <location filename="../../src/yuzu/main.cpp" line="2402"/> <source>Failed to remove the transferable shader cache directory.</source> <translation>無法刪除著色器快å–資料夾。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2343"/> - <location filename="../../src/yuzu/main.cpp" line="2352"/> + <location filename="../../src/yuzu/main.cpp" line="2415"/> + <location filename="../../src/yuzu/main.cpp" line="2424"/> <source>Error Removing Custom Configuration</source> <translation>移除é¡å¤–éŠæˆ²è¨å®šæ™‚發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2344"/> + <location filename="../../src/yuzu/main.cpp" line="2416"/> <source>A custom configuration for this title does not exist.</source> <translation>æ¤éŠæˆ²æ²’有é¡å¤–è¨å®šã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2350"/> + <location filename="../../src/yuzu/main.cpp" line="2422"/> <source>Successfully removed the custom game configuration.</source> <translation>æˆåŠŸç§»é™¤é¡å¤–éŠæˆ²è¨å®šã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2353"/> + <location filename="../../src/yuzu/main.cpp" line="2425"/> <source>Failed to remove the custom game configuration.</source> <translation>移除é¡å¤–éŠæˆ²è¨å®šå¤±æ•—。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2360"/> - <location filename="../../src/yuzu/main.cpp" line="2439"/> + <location filename="../../src/yuzu/main.cpp" line="2432"/> + <location filename="../../src/yuzu/main.cpp" line="2511"/> <source>RomFS Extraction Failed!</source> <translation>RomFS 抽å–失敗ï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2361"/> + <location filename="../../src/yuzu/main.cpp" line="2433"/> <source>There was an error copying the RomFS files or the user cancelled the operation.</source> <translation>複製 RomFS æª”æ¡ˆæ™‚ç™¼ç”ŸéŒ¯èª¤æˆ–ä½¿ç”¨è€…å–æ¶ˆå‹•作。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Full</source> <translation>全部</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2419"/> + <location filename="../../src/yuzu/main.cpp" line="2491"/> <source>Skeleton</source> <translation>部分</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2421"/> + <location filename="../../src/yuzu/main.cpp" line="2493"/> <source>Select RomFS Dump Mode</source> <translation>鏿“‡RomFS傾尿¨¡å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2422"/> + <location filename="../../src/yuzu/main.cpp" line="2494"/> <source>Please select the how you would like the RomFS dumped.<br>Full will copy all of the files into the new directory while <br>skeleton will only create the directory structure.</source> <translation>è«‹é¸æ“‡å¦‚ä½•å‚¾å° RomFS。<br>ã€Œå…¨éƒ¨ã€æœƒè¤‡è£½æ‰€æœ‰æª”案到新資料夾ä¸ï¼Œè€Œ<br>「部分ã€åªæœƒå»ºç«‹è³‡æ–™å¤¾çµæ§‹ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2440"/> + <location filename="../../src/yuzu/main.cpp" line="2512"/> <source>There is not enough free space at %1 to extract the RomFS. Please free up space or select a different dump directory at Emulation > Configure > System > Filesystem > Dump Root</source> <translation>%1 æ²’æœ‰è¶³å¤ çš„ç©ºé–“ç”¨æ–¼æŠ½å– RomFSã€‚è«‹ç¢ºä¿æœ‰è¶³å¤ 的空間或於模擬 > è¨å®š >系統 >檔案系統 > 傾尿 ¹ç›®éŒ„ä¸é¸æ“‡å…¶ä»–資料夾。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> <source>Extracting RomFS...</source> <translation>æŠ½å– RomFS ä¸...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2447"/> - <location filename="../../src/yuzu/main.cpp" line="2784"/> + <location filename="../../src/yuzu/main.cpp" line="2519"/> + <location filename="../../src/yuzu/main.cpp" line="2856"/> <source>Cancel</source> <translation>å–æ¶ˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2454"/> + <location filename="../../src/yuzu/main.cpp" line="2526"/> <source>RomFS Extraction Succeeded!</source> <translation>RomFS 抽å–完æˆï¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2455"/> + <location filename="../../src/yuzu/main.cpp" line="2527"/> <source>The operation completed successfully.</source> <translation>動作已æˆåŠŸå®Œæˆ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2499"/> - <location filename="../../src/yuzu/main.cpp" line="2523"/> - <location filename="../../src/yuzu/main.cpp" line="2533"/> - <location filename="../../src/yuzu/main.cpp" line="2615"/> - <location filename="../../src/yuzu/main.cpp" line="2623"/> + <location filename="../../src/yuzu/main.cpp" line="2571"/> + <location filename="../../src/yuzu/main.cpp" line="2595"/> + <location filename="../../src/yuzu/main.cpp" line="2605"/> + <location filename="../../src/yuzu/main.cpp" line="2687"/> + <location filename="../../src/yuzu/main.cpp" line="2695"/> <source>Create Shortcut</source> <translation>åˆ›å»ºå¿«æ·æ–¹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2500"/> + <location filename="../../src/yuzu/main.cpp" line="2572"/> <source>This will create a shortcut to the current AppImage. This may not work well if you update. Continue?</source> <translation>这将为当å‰çš„软件镜åƒåˆ›å»ºå¿«æ·æ–¹å¼ã€‚但在其更新åŽï¼Œå¿«æ·æ–¹å¼å¯èƒ½æ— 法æ£å¸¸ä½¿ç”¨ã€‚是å¦ç»§ç»ï¼Ÿ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2524"/> + <location filename="../../src/yuzu/main.cpp" line="2596"/> <source>Cannot create shortcut on desktop. Path "%1" does not exist.</source> <translation>æ— æ³•åœ¨æ¡Œé¢åˆ›å»ºå¿«æ·æ–¹å¼ã€‚路径“ %1 â€ä¸å˜åœ¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2534"/> + <location filename="../../src/yuzu/main.cpp" line="2606"/> <source>Cannot create shortcut in applications menu. Path "%1" does not exist and cannot be created.</source> <translation>æ— æ³•åœ¨åº”ç”¨ç¨‹åºèœå•ä¸åˆ›å»ºå¿«æ·æ–¹å¼ã€‚路径“ %1 â€ä¸å˜åœ¨ä¸”æ— æ³•è¢«åˆ›å»ºã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2551"/> + <location filename="../../src/yuzu/main.cpp" line="2623"/> <source>Create Icon</source> <translation>åˆ›å»ºå›¾æ ‡</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2552"/> + <location filename="../../src/yuzu/main.cpp" line="2624"/> <source>Cannot create icon file. Path "%1" does not exist and cannot be created.</source> <translation>æ— æ³•åˆ›å»ºå›¾æ ‡æ–‡ä»¶ã€‚è·¯å¾„â€œ %1 â€ä¸å˜åœ¨ä¸”æ— æ³•è¢«åˆ›å»ºã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2603"/> + <location filename="../../src/yuzu/main.cpp" line="2675"/> <source>Start %1 with the yuzu Emulator</source> <translation>使用 yuzu å¯åЍ %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2616"/> + <location filename="../../src/yuzu/main.cpp" line="2688"/> <source>Failed to create a shortcut at %1</source> <translation>在 %1 å¤„åˆ›å»ºå¿«æ·æ–¹å¼æ—¶å¤±è´¥</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2624"/> + <location filename="../../src/yuzu/main.cpp" line="2696"/> <source>Successfully created a shortcut to %1</source> <translation>æˆåŠŸåœ°åœ¨ %1 å¤„åˆ›å»ºå¿«æ·æ–¹å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2645"/> + <location filename="../../src/yuzu/main.cpp" line="2717"/> <source>Error Opening %1</source> <translation>開啟 %1 時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2654"/> + <location filename="../../src/yuzu/main.cpp" line="2726"/> <source>Select Directory</source> <translation>鏿“‡è³‡æ–™å¤¾</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2683"/> + <location filename="../../src/yuzu/main.cpp" line="2755"/> <source>Properties</source> <translation>屬性</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2684"/> + <location filename="../../src/yuzu/main.cpp" line="2756"/> <source>The game properties could not be loaded.</source> <translation>ç„¡æ³•è¼‰å…¥éŠæˆ²å±¬æ€§</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2701"/> + <location filename="../../src/yuzu/main.cpp" line="2773"/> <source>Switch Executable (%1);;All Files (*.*)</source> <comment>%1 is an identifier for the Switch executable file extensions.</comment> <translation>Switch 執行檔 (%1);;所有檔案 (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2705"/> + <location filename="../../src/yuzu/main.cpp" line="2777"/> <source>Load File</source> <translation>開啟檔案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2718"/> + <location filename="../../src/yuzu/main.cpp" line="2790"/> <source>Open Extracted ROM Directory</source> <translation>開啟已抽å–çš„ ROM 資料夾</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2729"/> + <location filename="../../src/yuzu/main.cpp" line="2801"/> <source>Invalid Directory Selected</source> <translation>鏿“‡çš„資料夾無效</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2730"/> + <location filename="../../src/yuzu/main.cpp" line="2802"/> <source>The directory you have selected does not contain a 'main' file.</source> <translation>鏿“‡çš„資料夾未包å«ã€Œmainã€æª”案。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2740"/> + <location filename="../../src/yuzu/main.cpp" line="2812"/> <source>Installable Switch File (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX Cartridge Image (*.xci)</source> <translation>å¯å®‰è£…çš„ Switch 檔案 (*.nca *.nsp *.xci);;Nintendo Content Archive (*.nca);;Nintendo Submission Package (*.nsp);;NX å¡å¸¶æ˜ åƒ (*.xci)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2745"/> + <location filename="../../src/yuzu/main.cpp" line="2817"/> <source>Install Files</source> <translation>å®‰è£æª”案</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2791"/> + <location filename="../../src/yuzu/main.cpp" line="2863"/> <source>%n file(s) remaining</source> <translation><numerusform>剩餘 %n 個檔案</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2793"/> + <location filename="../../src/yuzu/main.cpp" line="2865"/> <source>Installing file "%1"...</source> <translation>æ£åœ¨å®‰è£æª”案「%1ã€...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2839"/> - <location filename="../../src/yuzu/main.cpp" line="2853"/> + <location filename="../../src/yuzu/main.cpp" line="2911"/> + <location filename="../../src/yuzu/main.cpp" line="2925"/> <source>Install Results</source> <translation>安è£çµæžœ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2840"/> + <location filename="../../src/yuzu/main.cpp" line="2912"/> <source>To avoid possible conflicts, we discourage users from installing base games to the NAND. Please, only use this feature to install updates and DLC.</source> <translation>為了é¿å…潛在的è¡çªï¼Œä¸å»ºè°å°‡éŠæˆ²æœ¬é«”安è£è‡³å…§éƒ¨å„²å˜ç©ºé–“。 æ¤åŠŸèƒ½åƒ…ç”¨æ–¼å®‰è£éŠæˆ²æ›´æ–°å’Œ DLC。</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2846"/> + <location filename="../../src/yuzu/main.cpp" line="2918"/> <source>%n file(s) were newly installed </source> <translation><numerusform>最近安è£äº† %n 個檔案 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2849"/> + <location filename="../../src/yuzu/main.cpp" line="2921"/> <source>%n file(s) were overwritten </source> <translation><numerusform>%n 個檔案被å–代 </numerusform></translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="2851"/> + <location filename="../../src/yuzu/main.cpp" line="2923"/> <source>%n file(s) failed to install </source> <translation><numerusform>%n 個檔案安è£å¤±æ•—</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2952"/> + <location filename="../../src/yuzu/main.cpp" line="3024"/> <source>System Application</source> <translation>系統應用程å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2953"/> + <location filename="../../src/yuzu/main.cpp" line="3025"/> <source>System Archive</source> <translation>系統檔案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2954"/> + <location filename="../../src/yuzu/main.cpp" line="3026"/> <source>System Application Update</source> <translation>ç³»çµ±æ‡‰ç”¨ç¨‹å¼æ›´æ–°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2955"/> + <location filename="../../src/yuzu/main.cpp" line="3027"/> <source>Firmware Package (Type A)</source> <translation>韌體包(Aåž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2956"/> + <location filename="../../src/yuzu/main.cpp" line="3028"/> <source>Firmware Package (Type B)</source> <translation>韌體包(Båž‹)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2957"/> + <location filename="../../src/yuzu/main.cpp" line="3029"/> <source>Game</source> <translation>éŠæˆ²</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2958"/> + <location filename="../../src/yuzu/main.cpp" line="3030"/> <source>Game Update</source> <translation>éŠæˆ²æ›´æ–°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2959"/> + <location filename="../../src/yuzu/main.cpp" line="3031"/> <source>Game DLC</source> <translation>éŠæˆ² DLC</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2960"/> + <location filename="../../src/yuzu/main.cpp" line="3032"/> <source>Delta Title</source> <translation>Delta Title</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2963"/> + <location filename="../../src/yuzu/main.cpp" line="3035"/> <source>Select NCA Install Type...</source> <translation>鏿“‡ NCA 安è£é¡žåž‹...</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2964"/> + <location filename="../../src/yuzu/main.cpp" line="3036"/> <source>Please select the type of title you would like to install this NCA as: (In most instances, the default 'Game' is fine.)</source> <translation>è«‹é¸æ“‡æ¤ NCA 的安è£é¡žåž‹ï¼š (在多數情æ³ä¸‹ï¼Œé¸æ“‡é è¨çš„ã€ŒéŠæˆ²ã€å³å¯ã€‚)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2970"/> + <location filename="../../src/yuzu/main.cpp" line="3042"/> <source>Failed to Install</source> <translation>安è£å¤±æ•—</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="2971"/> + <location filename="../../src/yuzu/main.cpp" line="3043"/> <source>The title type you selected for the NCA is invalid.</source> <translation>鏿“‡çš„ NCA 安è£é¡žåž‹ç„¡æ•ˆã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3006"/> + <location filename="../../src/yuzu/main.cpp" line="3078"/> <source>File not found</source> <translation>找ä¸åˆ°æª”案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3007"/> + <location filename="../../src/yuzu/main.cpp" line="3079"/> <source>File "%1" not found</source> <translation>找ä¸åˆ°ã€Œ%1ã€æª”案</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3083"/> + <location filename="../../src/yuzu/main.cpp" line="3156"/> <source>OK</source> <translation>確定</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3100"/> - <location filename="../../src/yuzu/main.cpp" line="3119"/> + <location filename="../../src/yuzu/main.cpp" line="3182"/> + <location filename="../../src/yuzu/main.cpp" line="3201"/> <source>Hardware requirements not met</source> <translation>ç¡¬ä»¶ä¸æ»¡è¶³è¦æ±‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3101"/> - <location filename="../../src/yuzu/main.cpp" line="3120"/> + <location filename="../../src/yuzu/main.cpp" line="3183"/> + <location filename="../../src/yuzu/main.cpp" line="3202"/> <source>Your system does not meet the recommended hardware requirements. Compatibility reporting has been disabled.</source> <translation>æ‚¨çš„ç³»ç»Ÿä¸æ»¡è¶³è¿è¡Œ yuzu 推è的推èé…置。兼容性报告已被ç¦ç”¨ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3112"/> + <location filename="../../src/yuzu/main.cpp" line="3194"/> <source>Missing yuzu Account</source> <translation>未è¨å®š yuzu 帳號</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3113"/> + <location filename="../../src/yuzu/main.cpp" line="3195"/> <source>In order to submit a game compatibility test case, you must link your yuzu account.<br><br/>To link your yuzu account, go to Emulation &gt; Configuration &gt; Web.</source> <translation>ç‚ºäº†ä¸Šå‚³ç›¸å®¹æ€§æ¸¬è©¦çµæžœï¼Œæ‚¨å¿…é ˆç™»å…¥ yuzu 帳號。<br><br/>欲登入 yuzu 帳號請至模擬 &gt; è¨å®š &gt; 網路。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3128"/> + <location filename="../../src/yuzu/main.cpp" line="3210"/> <source>Error opening URL</source> <translation>開啟 URL 時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3129"/> + <location filename="../../src/yuzu/main.cpp" line="3211"/> <source>Unable to open the URL "%1".</source> <translation>無法開啟 URL:「%1ã€ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3432"/> + <location filename="../../src/yuzu/main.cpp" line="3514"/> <source>TAS Recording</source> <translation>TAS 錄製</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3433"/> + <location filename="../../src/yuzu/main.cpp" line="3515"/> <source>Overwrite file of player 1?</source> <translation>覆寫玩家 1 的檔案?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3459"/> + <location filename="../../src/yuzu/main.cpp" line="3541"/> <source>Invalid config detected</source> <translation>嵿¸¬åˆ°ç„¡æ•ˆè¨å®š</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3460"/> + <location filename="../../src/yuzu/main.cpp" line="3542"/> <source>Handheld controller can't be used on docked mode. Pro controller will be selected.</source> <translation>掌機手把無法在主機模å¼ä¸ä½¿ç”¨ã€‚å°‡æœƒé¸æ“‡ Pro 手把。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>Amiibo</source> <translation>Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3630"/> - <location filename="../../src/yuzu/main.cpp" line="3658"/> + <location filename="../../src/yuzu/main.cpp" line="3712"/> + <location filename="../../src/yuzu/main.cpp" line="3740"/> <source>The current amiibo has been removed</source> <translation>当å‰çš„ Amiibo 已被移除。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> <source>Error</source> <translation>错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3635"/> - <location filename="../../src/yuzu/main.cpp" line="3670"/> + <location filename="../../src/yuzu/main.cpp" line="3717"/> + <location filename="../../src/yuzu/main.cpp" line="3752"/> <source>The current game is not looking for amiibos</source> <translation>当剿¸¸æˆå¹¶æ²¡æœ‰åœ¨å¯»æ‰¾ Amiibos</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3641"/> + <location filename="../../src/yuzu/main.cpp" line="3723"/> <source>Amiibo File (%1);; All Files (*.*)</source> <translation>Amiibo 檔案 (%1);; 所有檔案 (*.*)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3642"/> + <location filename="../../src/yuzu/main.cpp" line="3724"/> <source>Load Amiibo</source> <translation>開啟 Amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3654"/> + <location filename="../../src/yuzu/main.cpp" line="3736"/> <source>Error loading Amiibo data</source> <translation>載入 Amiibo 資料時發生錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3664"/> + <location filename="../../src/yuzu/main.cpp" line="3746"/> <source>The selected file is not a valid amiibo</source> <translation>é€‰æ‹©çš„æ–‡ä»¶å¹¶ä¸æ˜¯æœ‰æ•ˆçš„ amiibo</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3667"/> + <location filename="../../src/yuzu/main.cpp" line="3749"/> <source>The selected file is already on use</source> <translation>选择的文件已在使用ä¸</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3673"/> + <location filename="../../src/yuzu/main.cpp" line="3755"/> <source>An unknown error occurred</source> <translation>å‘生了未知错误</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3725"/> + <location filename="../../src/yuzu/main.cpp" line="3807"/> <source>Capture Screenshot</source> <translation>截圖</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3726"/> + <location filename="../../src/yuzu/main.cpp" line="3808"/> <source>PNG Image (*.png)</source> <translation>PNG 圖片 (*.png)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3809"/> + <location filename="../../src/yuzu/main.cpp" line="3891"/> <source>TAS state: Running %1/%2</source> <translation>TAS 狀態:æ£åœ¨åŸ·è¡Œ %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3813"/> + <location filename="../../src/yuzu/main.cpp" line="3895"/> <source>TAS state: Recording %1</source> <translation>TAS 狀態:æ£åœ¨éŒ„製 %1</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3815"/> + <location filename="../../src/yuzu/main.cpp" line="3897"/> <source>TAS state: Idle %1/%2</source> <translation>TAS 狀態:閒置 %1/%2</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3819"/> + <location filename="../../src/yuzu/main.cpp" line="3901"/> <source>TAS State: Invalid</source> <translation>TAS 狀態:無效</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Stop Running</source> <translation>&åœæ¢åŸ·è¡Œ</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3833"/> + <location filename="../../src/yuzu/main.cpp" line="3915"/> <source>&Start</source> <translation>é–‹å§‹(&S)</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>Stop R&ecording</source> <translation>åœæ¢éŒ„製</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3834"/> + <location filename="../../src/yuzu/main.cpp" line="3916"/> <source>R&ecord</source> <translation>錄製 (&E)</translation> </message> <message numerus="yes"> - <location filename="../../src/yuzu/main.cpp" line="3858"/> + <location filename="../../src/yuzu/main.cpp" line="3940"/> <source>Building: %n shader(s)</source> <translation><numerusform>æ£åœ¨ç·¨è¯ %n 個著色器檔案</numerusform></translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3867"/> + <location filename="../../src/yuzu/main.cpp" line="3949"/> <source>Scale: %1x</source> <comment>%1 is the resolution scaling factor</comment> <translation>縮放比例:%1x</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3870"/> + <location filename="../../src/yuzu/main.cpp" line="3952"/> <source>Speed: %1% / %2%</source> <translation>速度:%1% / %2%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3874"/> + <location filename="../../src/yuzu/main.cpp" line="3956"/> <source>Speed: %1%</source> <translation>速度:%1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3878"/> + <location filename="../../src/yuzu/main.cpp" line="3960"/> <source>Game: %1 FPS (Unlocked)</source> <translation>éŠæˆ²: %1 FPS(未é™åˆ¶ï¼‰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3881"/> + <location filename="../../src/yuzu/main.cpp" line="3963"/> <source>Game: %1 FPS</source> <translation>éŠæˆ²ï¼š%1 FPS</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3883"/> + <location filename="../../src/yuzu/main.cpp" line="3965"/> <source>Frame: %1 ms</source> <translation>ç•«æ ¼å»¶é²ï¼š%1 ms</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3894"/> + <location filename="../../src/yuzu/main.cpp" line="3976"/> <source>GPU NORMAL</source> <translation>GPU 一般效能</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3899"/> + <location filename="../../src/yuzu/main.cpp" line="3981"/> <source>GPU HIGH</source> <translation>GPU 高效能</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3904"/> + <location filename="../../src/yuzu/main.cpp" line="3986"/> <source>GPU EXTREME</source> <translation>GPU 最高效能</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3909"/> + <location filename="../../src/yuzu/main.cpp" line="3991"/> <source>GPU ERROR</source> <translation>GPU 錯誤</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>DOCKED</source> <translation>主机模å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3919"/> + <location filename="../../src/yuzu/main.cpp" line="4001"/> <source>HANDHELD</source> <translation>掌机模å¼</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3926"/> + <location filename="../../src/yuzu/main.cpp" line="4008"/> <source>OPENGL</source> <translation>OPENGL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3929"/> + <location filename="../../src/yuzu/main.cpp" line="4011"/> <source>VULKAN</source> <translation>VULKAN</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3932"/> + <location filename="../../src/yuzu/main.cpp" line="4014"/> <source>NULL</source> <translation>NULL</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3941"/> + <location filename="../../src/yuzu/main.cpp" line="4023"/> <source>NEAREST</source> <translation>最近鄰域</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3944"/> - <location filename="../../src/yuzu/main.cpp" line="3959"/> + <location filename="../../src/yuzu/main.cpp" line="4026"/> + <location filename="../../src/yuzu/main.cpp" line="4041"/> <source>BILINEAR</source> <translation>雙線性</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3947"/> + <location filename="../../src/yuzu/main.cpp" line="4029"/> <source>BICUBIC</source> <translation>雙三次</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3950"/> + <location filename="../../src/yuzu/main.cpp" line="4032"/> <source>GAUSSIAN</source> <translation>高斯</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3953"/> + <location filename="../../src/yuzu/main.cpp" line="4035"/> <source>SCALEFORCE</source> <translation>強制縮放</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3956"/> + <location filename="../../src/yuzu/main.cpp" line="4038"/> <source>FSR</source> <translation>FSR</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3968"/> - <location filename="../../src/yuzu/main.cpp" line="3977"/> + <location filename="../../src/yuzu/main.cpp" line="4050"/> + <location filename="../../src/yuzu/main.cpp" line="4059"/> <source>NO AA</source> <translation>抗鋸齒關</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3971"/> + <location filename="../../src/yuzu/main.cpp" line="4053"/> <source>FXAA</source> <translation>FXAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3974"/> + <location filename="../../src/yuzu/main.cpp" line="4056"/> <source>SMAA</source> <translation>SMAA</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3987"/> + <location filename="../../src/yuzu/main.cpp" line="4069"/> <source>VOLUME: MUTE</source> <translation>音é‡: é™éŸ³</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="3990"/> + <location filename="../../src/yuzu/main.cpp" line="4072"/> <source>VOLUME: %1%</source> <comment>Volume percentage (e.g. 50%)</comment> <translation>音é‡: %1%</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4071"/> + <location filename="../../src/yuzu/main.cpp" line="4153"/> <source>Confirm Key Rederivation</source> <translation>確èªé‡æ–°ç”¢ç”Ÿé‡‘é‘°</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4072"/> + <location filename="../../src/yuzu/main.cpp" line="4154"/> <source>You are about to force rederive all of your keys. If you do not know what this means or what you are doing, this is a potentially destructive action. @@ -5536,37 +5511,37 @@ This will delete your autogenerated key files and re-run the key derivation modu é€™å°‡åˆªé™¤æ‚¨è‡ªå‹•ç”¢ç”Ÿçš„é‡‘é‘°æª”æ¡ˆä¸¦é‡æ–°åŸ·è¡Œç”¢ç”Ÿé‡‘鑰模組。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4104"/> + <location filename="../../src/yuzu/main.cpp" line="4186"/> <source>Missing fuses</source> <translation>éºå¤±é …ç›®</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4107"/> + <location filename="../../src/yuzu/main.cpp" line="4189"/> <source> - Missing BOOT0</source> <translation>- éºå¤± BOOT0</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4110"/> + <location filename="../../src/yuzu/main.cpp" line="4192"/> <source> - Missing BCPKG2-1-Normal-Main</source> <translation> - éºå¤± BCPKG2-1-Normal-Main</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4113"/> + <location filename="../../src/yuzu/main.cpp" line="4195"/> <source> - Missing PRODINFO</source> <translation>- éºå¤± PRODINFO</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4117"/> + <location filename="../../src/yuzu/main.cpp" line="4199"/> <source>Derivation Components Missing</source> <translation>éºå¤±ç”¢ç”Ÿå…ƒä»¶</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4118"/> + <location filename="../../src/yuzu/main.cpp" line="4200"/> <source>Encryption keys are missing. <br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the yuzu quickstart guide</a> to get all your keys, firmware and games.<br><br><small>(%1)</small></source> <translation>ç¼ºå°‘åŠ å¯†é‡‘é‘°ã€‚ <br>請按照<a href='https://yuzu-emu.org/help/quickstart/'>《Yuzu快速入門指å—》來å–得所有金鑰ã€éŸŒé«”ã€éŠæˆ²<br><br><small>(%1)。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4127"/> + <location filename="../../src/yuzu/main.cpp" line="4209"/> <source>Deriving keys... This may take up to a minute depending on your system's performance.</source> @@ -5575,39 +5550,39 @@ on your system's performance.</source> 您的系統效能。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4129"/> + <location filename="../../src/yuzu/main.cpp" line="4211"/> <source>Deriving Keys</source> <translation>產生金鑰</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4174"/> + <location filename="../../src/yuzu/main.cpp" line="4256"/> <source>Select RomFS Dump Target</source> <translation>鏿“‡ RomFS 傾å°ç›®æ¨™</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4175"/> + <location filename="../../src/yuzu/main.cpp" line="4257"/> <source>Please select which RomFS you would like to dump.</source> <translation>è«‹é¸æ“‡å¸Œæœ›å‚¾å°çš„ RomFS。</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4190"/> + <location filename="../../src/yuzu/main.cpp" line="4272"/> <source>Are you sure you want to close yuzu?</source> <translation>您確定è¦é—œé–‰ yuzu å—Ž?</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4191"/> - <location filename="../../src/yuzu/main.cpp" line="4286"/> - <location filename="../../src/yuzu/main.cpp" line="4299"/> + <location filename="../../src/yuzu/main.cpp" line="4273"/> + <location filename="../../src/yuzu/main.cpp" line="4368"/> + <location filename="../../src/yuzu/main.cpp" line="4381"/> <source>yuzu</source> <translation>yuzu</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4287"/> + <location filename="../../src/yuzu/main.cpp" line="4369"/> <source>Are you sure you want to stop the emulation? Any unsaved progress will be lost.</source> <translation>您確定è¦åœæ¢æ¨¡æ“¬å—Žï¼Ÿæœªå„²å˜çš„進度將會éºå¤±ã€‚</translation> </message> <message> - <location filename="../../src/yuzu/main.cpp" line="4296"/> + <location filename="../../src/yuzu/main.cpp" line="4378"/> <source>The currently running application has requested yuzu to not exit. Would you like to bypass this and exit anyway?</source> @@ -7610,28 +7585,28 @@ p, li { white-space: pre-wrap; } <context> <name>QtErrorDisplay</name> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="20"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="33"/> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="48"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="27"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="40"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="55"/> <source>Error Code: %1-%2 (0x%3)</source> <translation>錯誤碼: %1-%2 (0x%3)</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="24"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="31"/> <source>An error has occurred. Please try again or contact the developer of the software.</source> <translation>發生錯誤。 è«‹å†è©¦ä¸€æ¬¡æˆ–è¯çµ¡é–‹ç™¼è€…。</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="37"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="44"/> <source>An error occurred on %1 at %2. Please try again or contact the developer of the software.</source> <translation>在 %2 處的 %1 上發生錯誤。 è«‹å†è©¦ä¸€æ¬¡æˆ–è¯çµ¡é–‹ç™¼è€…。</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_error.cpp" line="52"/> + <location filename="../../src/yuzu/applets/qt_error.cpp" line="59"/> <source>An error has occurred. %1 @@ -7655,20 +7630,81 @@ Please try again or contact the developer of the software.</source> %2</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="53"/> - <source>Select a user:</source> - <translation>鏿“‡ä¸€ä½ä½¿ç”¨è€…:</translation> - </message> - <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="83"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="85"/> <source>Users</source> <translation>使用者</translation> </message> <message> - <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="123"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="166"/> + <source>Profile Creator</source> + <translation>创建用户</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="169"/> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="187"/> <source>Profile Selector</source> <translation>è¨å®šæª”鏿“‡</translation> </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="172"/> + <source>Profile Icon Editor</source> + <translation>修改用户图åƒ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="175"/> + <source>Profile Nickname Editor</source> + <translation>修改用户昵称</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="197"/> + <source>Who will receive the points?</source> + <translation>è°å°†èŽ·å¾—é»„é‡‘ç‚¹æ•°ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="200"/> + <source>Who is using Nintendo eShop?</source> + <translation>è°æ£åœ¨ä½¿ç”¨ä»»å¤©å ‚ eShop?</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="203"/> + <source>Who is making this purchase?</source> + <translation>是è°è´ä¹°äº†è¿™ä¸ªï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="206"/> + <source>Who is posting?</source> + <translation>è°åœ¨å‘帖?</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="209"/> + <source>Select a user to link to a Nintendo Account.</source> + <translation>选择è¦é“¾æŽ¥åˆ°ä»»å¤©å ‚账户的用户。</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="212"/> + <source>Change settings for which user?</source> + <translation>è¦æ›´æ”¹å“ªä¸ªç”¨æˆ·çš„设置?</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="215"/> + <source>Format data for which user?</source> + <translation>è¦ä¸ºå“ªä¸ªç”¨æˆ·æ ¼å¼åŒ–æ•°æ®ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="218"/> + <source>Which user will be transferred to another console?</source> + <translation>哪个用户将被转移到å¦ä¸€ä¸ªæŽ§åˆ¶å°ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="221"/> + <source>Send save data for which user?</source> + <translation>è¦ä¸ºå“ªä¸ªç”¨æˆ·å‘é€ä¿å˜æ•°æ®ï¼Ÿ</translation> + </message> + <message> + <location filename="../../src/yuzu/applets/qt_profile_select.cpp" line="225"/> + <source>Select a user:</source> + <translation>鏿“‡ä¸€ä½ä½¿ç”¨è€…:</translation> + </message> </context> <context> <name>QtSoftwareKeyboardDialog</name> @@ -7718,51 +7754,20 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeCallstack</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="147"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="120"/> <source>Call stack</source> <translation>Call stack</translation> </message> </context> <context> - <name>WaitTreeMutexInfo</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="126"/> - <source>waiting for mutex 0x%1</source> - <translation>waiting for mutex 0x%1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="133"/> - <source>has waiters: %1</source> - <translation>has waiters: %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="135"/> - <source>owner handle: 0x%1</source> - <translation>owner handle: 0x%1</translation> - </message> -</context> -<context> - <name>WaitTreeObjectList</name> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> - <source>waiting for all objects</source> - <translation>waiting for all objects</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="229"/> - <source>waiting for one of the following objects</source> - <translation>waiting for one of the following objects</translation> - </message> -</context> -<context> <name>WaitTreeSynchronizationObject</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="185"/> - <source>[%1] %2 %3</source> - <translation>[%1] %2 %3</translation> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="158"/> + <source>[%1] %2</source> + <translation>[%1] %2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="212"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="184"/> <source>waited by no thread</source> <translation>waited by no thread</translation> </message> @@ -7770,120 +7775,110 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeThread</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="250"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="202"/> <source>runnable</source> <translation>runnable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="252"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="204"/> <source>paused</source> <translation>paused</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="258"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="210"/> <source>sleeping</source> <translation>sleeping</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="261"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="213"/> <source>waiting for IPC reply</source> <translation>waiting for IPC reply</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="264"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="216"/> <source>waiting for objects</source> <translation>waiting for objects</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="267"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="219"/> <source>waiting for condition variable</source> <translation>waiting for condition variable</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="270"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="222"/> <source>waiting for address arbiter</source> <translation>waiting for address arbiter</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="273"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="225"/> <source>waiting for suspend resume</source> <translation>waiting for suspend resume</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="276"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="228"/> <source>waiting</source> <translation>waiting</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="281"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="233"/> <source>initialized</source> <translation>initialized</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="284"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="236"/> <source>terminated</source> <translation>terminated</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="287"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="239"/> <source>unknown</source> <translation>unknown</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="292"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="244"/> <source> PC = 0x%1 LR = 0x%2</source> <translation>PC = 0x%1 LR = 0x%2</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="342"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="294"/> <source>ideal</source> <translation>ideal</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="345"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="297"/> <source>core %1</source> <translation>core %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="349"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="301"/> <source>processor = %1</source> <translation>processor = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="351"/> - <source>ideal core = %1</source> - <translation>ideal core = %1</translation> - </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="353"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="303"/> <source>affinity mask = %1</source> <translation>affinity mask = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="354"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="304"/> <source>thread id = %1</source> <translation>thread id = %1</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="355"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="305"/> <source>priority = %1(current) / %2(normal)</source> <translation>priority = %1(current) / %2(normal)</translation> </message> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="359"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="309"/> <source>last running ticks = %1</source> <translation>last running ticks = %1</translation> </message> - <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="367"/> - <source>not waiting for mutex</source> - <translation>未ç‰å¾… mutex</translation> - </message> </context> <context> <name>WaitTreeThreadList</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="391"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="325"/> <source>waited by thread</source> <translation>waited by thread</translation> </message> @@ -7891,7 +7886,7 @@ p, li { white-space: pre-wrap; } <context> <name>WaitTreeWidget</name> <message> - <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="465"/> + <location filename="../../src/yuzu/debugger/wait_tree.cpp" line="399"/> <source>&Wait Tree</source> <translation>&Wait Tree</translation> </message> diff --git a/externals/Vulkan-Headers b/externals/Vulkan-Headers -Subproject 00671c64ba5c488ade22ad572a0ef81d5e64c80 +Subproject 63af1cf1ee906ba4dcd5a324bdd0201d4f4bfd1 diff --git a/externals/dynarmic b/externals/dynarmic -Subproject 165621a872ffb802c7a26ef5900e1e62681f1a8 +Subproject c08c5a9362bb224dc343c2f616c24df027dfdf1 diff --git a/externals/vcpkg b/externals/vcpkg -Subproject 9b22b40c6c61bf0da2d46346dd44a11e90972cc +Subproject a7b6122f6b6504d16d96117336a056269357993 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0eca8e90e..312a49f42 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -126,6 +126,17 @@ else() add_compile_options("-stdlib=libc++") endif() + # GCC bugs + if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + # These diagnostics would be great if they worked, but are just completely broken + # and produce bogus errors on external libraries like fmt. + add_compile_options( + -Wno-array-bounds + -Wno-stringop-overread + -Wno-stringop-overflow + ) + endif() + # Set file offset size to 64 bits. # # On modern Unixes, this is typically already the case. The lone exception is diff --git a/src/audio_core/device/device_session.cpp b/src/audio_core/device/device_session.cpp index 5a327a606..b5c0ef0e6 100644 --- a/src/audio_core/device/device_session.cpp +++ b/src/audio_core/device/device_session.cpp @@ -93,7 +93,7 @@ void DeviceSession::AppendBuffers(std::span<const AudioBuffer> buffers) const { stream->AppendBuffer(new_buffer, samples); } else { std::vector<s16> samples(buffer.size / sizeof(s16)); - system.Memory().ReadBlockUnsafe(buffer.samples, samples.data(), buffer.size); + system.ApplicationMemory().ReadBlockUnsafe(buffer.samples, samples.data(), buffer.size); stream->AppendBuffer(new_buffer, samples); } } @@ -102,7 +102,7 @@ void DeviceSession::AppendBuffers(std::span<const AudioBuffer> buffers) const { void DeviceSession::ReleaseBuffer(const AudioBuffer& buffer) const { if (type == Sink::StreamType::In) { auto samples{stream->ReleaseBuffer(buffer.size / sizeof(s16))}; - system.Memory().WriteBlockUnsafe(buffer.samples, samples.data(), buffer.size); + system.ApplicationMemory().WriteBlockUnsafe(buffer.samples, samples.data(), buffer.size); } } @@ -121,8 +121,7 @@ u64 DeviceSession::GetPlayedSampleCount() const { } std::optional<std::chrono::nanoseconds> DeviceSession::ThreadFunc() { - // Add 5ms of samples at a 48K sample rate. - played_sample_count += 48'000 * INCREMENT_TIME / 1s; + played_sample_count = stream->GetExpectedPlayedSampleCount(); if (type == Sink::StreamType::Out) { system.AudioCore().GetAudioManager().SetEvent(Event::Type::AudioOutManager, true); } else { diff --git a/src/audio_core/renderer/adsp/adsp.cpp b/src/audio_core/renderer/adsp/adsp.cpp index a28395663..74772fc50 100644 --- a/src/audio_core/renderer/adsp/adsp.cpp +++ b/src/audio_core/renderer/adsp/adsp.cpp @@ -13,7 +13,7 @@ namespace AudioCore::AudioRenderer::ADSP { ADSP::ADSP(Core::System& system_, Sink::Sink& sink_) - : system{system_}, memory{system.Memory()}, sink{sink_} {} + : system{system_}, memory{system.ApplicationMemory()}, sink{sink_} {} ADSP::~ADSP() { ClearCommandBuffers(); diff --git a/src/audio_core/renderer/adsp/audio_renderer.cpp b/src/audio_core/renderer/adsp/audio_renderer.cpp index 42b4b167a..503f40349 100644 --- a/src/audio_core/renderer/adsp/audio_renderer.cpp +++ b/src/audio_core/renderer/adsp/audio_renderer.cpp @@ -189,6 +189,8 @@ void AudioRenderer::ThreadFunc() { max_time = std::min(command_buffer.time_limit, max_time); command_list_processor.SetProcessTimeMax(max_time); + streams[index]->WaitFreeSpace(); + // Process the command list { MICROPROFILE_SCOPE(Audio_Renderer); diff --git a/src/audio_core/renderer/adsp/audio_renderer.h b/src/audio_core/renderer/adsp/audio_renderer.h index 151f38c1b..85ce6a269 100644 --- a/src/audio_core/renderer/adsp/audio_renderer.h +++ b/src/audio_core/renderer/adsp/audio_renderer.h @@ -10,6 +10,7 @@ #include "audio_core/renderer/adsp/command_buffer.h" #include "audio_core/renderer/adsp/command_list_processor.h" #include "common/common_types.h" +#include "common/polyfill_thread.h" #include "common/reader_writer_queue.h" #include "common/thread.h" diff --git a/src/audio_core/renderer/adsp/command_list_processor.cpp b/src/audio_core/renderer/adsp/command_list_processor.cpp index e3bf2d7ec..7a300d216 100644 --- a/src/audio_core/renderer/adsp/command_list_processor.cpp +++ b/src/audio_core/renderer/adsp/command_list_processor.cpp @@ -17,7 +17,7 @@ namespace AudioCore::AudioRenderer::ADSP { void CommandListProcessor::Initialize(Core::System& system_, CpuAddr buffer, u64 size, Sink::SinkStream* stream_) { system = &system_; - memory = &system->Memory(); + memory = &system->ApplicationMemory(); stream = stream_; header = reinterpret_cast<CommandListHeader*>(buffer); commands = reinterpret_cast<u8*>(buffer + sizeof(CommandListHeader)); diff --git a/src/audio_core/renderer/system.cpp b/src/audio_core/renderer/system.cpp index 28f063641..ad869facb 100644 --- a/src/audio_core/renderer/system.cpp +++ b/src/audio_core/renderer/system.cpp @@ -127,8 +127,7 @@ Result System::Initialize(const AudioRendererParameterInternal& params, render_device = params.rendering_device; execution_mode = params.execution_mode; - core.Memory().ZeroBlock(*core.ApplicationProcess(), transfer_memory->GetSourceAddress(), - transfer_memory_size); + core.ApplicationMemory().ZeroBlock(transfer_memory->GetSourceAddress(), transfer_memory_size); // Note: We're not actually using the transfer memory because it's a pain to code for. // Allocate the memory normally instead and hope the game doesn't try to read anything back diff --git a/src/audio_core/renderer/system_manager.cpp b/src/audio_core/renderer/system_manager.cpp index ce631f810..07d8ed093 100644 --- a/src/audio_core/renderer/system_manager.cpp +++ b/src/audio_core/renderer/system_manager.cpp @@ -15,14 +15,9 @@ MICROPROFILE_DEFINE(Audio_RenderSystemManager, "Audio", "Render System Manager", MP_RGB(60, 19, 97)); namespace AudioCore::AudioRenderer { -constexpr std::chrono::nanoseconds RENDER_TIME{5'000'000UL}; SystemManager::SystemManager(Core::System& core_) - : core{core_}, adsp{core.AudioCore().GetADSP()}, mailbox{adsp.GetRenderMailbox()}, - thread_event{Core::Timing::CreateEvent( - "AudioRendererSystemManager", [this](std::uintptr_t, s64 time, std::chrono::nanoseconds) { - return ThreadFunc2(time); - })} {} + : core{core_}, adsp{core.AudioCore().GetADSP()}, mailbox{adsp.GetRenderMailbox()} {} SystemManager::~SystemManager() { Stop(); @@ -33,8 +28,6 @@ bool SystemManager::InitializeUnsafe() { if (adsp.Start()) { active = true; thread = std::jthread([this](std::stop_token stop_token) { ThreadFunc(); }); - core.CoreTiming().ScheduleLoopingEvent(std::chrono::nanoseconds(0), RENDER_TIME, - thread_event); } } @@ -45,7 +38,6 @@ void SystemManager::Stop() { if (!active) { return; } - core.CoreTiming().UnscheduleEvent(thread_event, {}); active = false; update.store(true); update.notify_all(); @@ -111,16 +103,7 @@ void SystemManager::ThreadFunc() { adsp.Signal(); adsp.Wait(); - - update.wait(false); - update.store(false); } } -std::optional<std::chrono::nanoseconds> SystemManager::ThreadFunc2(s64 time) { - update.store(true); - update.notify_all(); - return std::nullopt; -} - } // namespace AudioCore::AudioRenderer diff --git a/src/audio_core/renderer/system_manager.h b/src/audio_core/renderer/system_manager.h index 415ddb74f..1f0bbd8b4 100644 --- a/src/audio_core/renderer/system_manager.h +++ b/src/audio_core/renderer/system_manager.h @@ -68,11 +68,6 @@ private: */ void ThreadFunc(); - /** - * Signalling core timing thread to run ThreadFunc. - */ - std::optional<std::chrono::nanoseconds> ThreadFunc2(s64 time); - enum class StreamState { Filling, Steady, @@ -95,8 +90,6 @@ private: ADSP::ADSP& adsp; /// AudioRenderer mailbox for communication ADSP::AudioRenderer_Mailbox* mailbox{}; - /// Core timing event to signal main thread - std::shared_ptr<Core::Timing::EventType> thread_event; /// Atomic for main thread to wait on std::atomic<bool> update{}; }; diff --git a/src/audio_core/sink/cubeb_sink.cpp b/src/audio_core/sink/cubeb_sink.cpp index 9133f5388..9a0801888 100644 --- a/src/audio_core/sink/cubeb_sink.cpp +++ b/src/audio_core/sink/cubeb_sink.cpp @@ -101,8 +101,6 @@ public: ~CubebSinkStream() override { LOG_DEBUG(Service_Audio, "Destructing cubeb stream {}", name); - Unstall(); - if (!ctx) { return; } @@ -143,8 +141,6 @@ public: * Stop the sink stream. */ void Stop() override { - Unstall(); - if (!ctx || paused) { return; } diff --git a/src/audio_core/sink/sdl2_sink.cpp b/src/audio_core/sink/sdl2_sink.cpp index c138dc628..ee1a0652f 100644 --- a/src/audio_core/sink/sdl2_sink.cpp +++ b/src/audio_core/sink/sdl2_sink.cpp @@ -88,7 +88,6 @@ public: * Finalize the sink stream. */ void Finalize() override { - Unstall(); if (device == 0) { return; } @@ -116,7 +115,6 @@ public: * Stop the sink stream. */ void Stop() override { - Unstall(); if (device == 0 || paused) { return; } diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp index 39a21b0f0..13ba26e74 100644 --- a/src/audio_core/sink/sink_stream.cpp +++ b/src/audio_core/sink/sink_stream.cpp @@ -14,6 +14,8 @@ #include "common/fixed_point.h" #include "common/settings.h" #include "core/core.h" +#include "core/core_timing.h" +#include "core/core_timing_util.h" namespace AudioCore::Sink { @@ -149,10 +151,6 @@ void SinkStream::ProcessAudioIn(std::span<const s16> input_buffer, std::size_t n return; } - if (queued_buffers > max_queue_size) { - Stall(); - } - while (frames_written < num_frames) { // If the playing buffer has been consumed or has no frames, we need a new one if (playing_buffer.consumed || playing_buffer.frames == 0) { @@ -187,10 +185,6 @@ void SinkStream::ProcessAudioIn(std::span<const s16> input_buffer, std::size_t n } std::memcpy(&last_frame[0], &input_buffer[(frames_written - 1) * frame_size], frame_size_bytes); - - if (queued_buffers <= max_queue_size) { - Unstall(); - } } void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::size_t num_frames) { @@ -198,10 +192,15 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz const std::size_t frame_size = num_channels; const std::size_t frame_size_bytes = frame_size * sizeof(s16); size_t frames_written{0}; + size_t actual_frames_written{0}; // If we're paused or going to shut down, we don't want to consume buffers as coretiming is // paused and we'll desync, so just play silence. if (system.IsPaused() || system.IsShuttingDown()) { + if (system.IsShuttingDown()) { + release_cv.notify_one(); + } + static constexpr std::array<s16, 6> silence{}; for (size_t i = frames_written; i < num_frames; i++) { std::memcpy(&output_buffer[i * frame_size], &silence[0], frame_size_bytes); @@ -209,20 +208,6 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz return; } - // Due to many frames being queued up with nvdec (5 frames or so?), a lot of buffers also get - // queued up (30+) but not all at once, which causes constant stalling here, so just let the - // video play out without attempting to stall. - // Can hopefully remove this later with a more complete NVDEC implementation. - const auto nvdec_active{system.AudioCore().IsNVDECActive()}; - - // Core timing cannot be paused in single-core mode, so Stall ends up being called over and over - // and never recovers to a normal state, so just skip attempting to sync things on single-core. - if (system.IsMulticore() && !nvdec_active && queued_buffers > max_queue_size) { - Stall(); - } else if (system.IsMulticore() && queued_buffers <= max_queue_size) { - Unstall(); - } - while (frames_written < num_frames) { // If the playing buffer has been consumed or has no frames, we need a new one if (playing_buffer.consumed || playing_buffer.frames == 0) { @@ -237,6 +222,10 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz } // Successfully dequeued a new buffer. queued_buffers--; + + { std::unique_lock lk{release_mutex}; } + + release_cv.notify_one(); } // Get the minimum frames available between the currently playing buffer, and the @@ -248,6 +237,7 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz frames_available * frame_size); frames_written += frames_available; + actual_frames_written += frames_available; playing_buffer.frames_played += frames_available; // If that's all the frames in the current buffer, add its samples and mark it as @@ -260,26 +250,29 @@ void SinkStream::ProcessAudioOutAndRender(std::span<s16> output_buffer, std::siz std::memcpy(&last_frame[0], &output_buffer[(frames_written - 1) * frame_size], frame_size_bytes); - if (system.IsMulticore() && queued_buffers <= max_queue_size) { - Unstall(); + { + std::scoped_lock lk{sample_count_lock}; + last_sample_count_update_time = system.CoreTiming().GetGlobalTimeNs(); + min_played_sample_count = max_played_sample_count; + max_played_sample_count += actual_frames_written; } } -void SinkStream::Stall() { - std::scoped_lock lk{stall_guard}; - if (stalled_lock) { - return; - } - stalled_lock = system.StallApplication(); +u64 SinkStream::GetExpectedPlayedSampleCount() { + std::scoped_lock lk{sample_count_lock}; + auto cur_time{system.CoreTiming().GetGlobalTimeNs()}; + auto time_delta{cur_time - last_sample_count_update_time}; + auto exp_played_sample_count{min_played_sample_count + + (TargetSampleRate * time_delta) / std::chrono::seconds{1}}; + + // Add 15ms of latency in sample reporting to allow for some leeway in scheduler timings + return std::min<u64>(exp_played_sample_count, max_played_sample_count) + TargetSampleCount * 3; } -void SinkStream::Unstall() { - std::scoped_lock lk{stall_guard}; - if (!stalled_lock) { - return; - } - system.UnstallApplication(); - stalled_lock.unlock(); +void SinkStream::WaitFreeSpace() { + std::unique_lock lk{release_mutex}; + release_cv.wait( + lk, [this]() { return queued_buffers < max_queue_size || system.IsShuttingDown(); }); } } // namespace AudioCore::Sink diff --git a/src/audio_core/sink/sink_stream.h b/src/audio_core/sink/sink_stream.h index 5fea72ab7..21b5b40a1 100644 --- a/src/audio_core/sink/sink_stream.h +++ b/src/audio_core/sink/sink_stream.h @@ -5,6 +5,7 @@ #include <array> #include <atomic> +#include <chrono> #include <memory> #include <mutex> #include <span> @@ -14,6 +15,7 @@ #include "common/common_types.h" #include "common/reader_writer_queue.h" #include "common/ring_buffer.h" +#include "common/thread.h" namespace Core { class System; @@ -53,9 +55,7 @@ struct SinkBuffer { class SinkStream { public: explicit SinkStream(Core::System& system_, StreamType type_) : system{system_}, type{type_} {} - virtual ~SinkStream() { - Unstall(); - } + virtual ~SinkStream() {} /** * Finalize the sink stream. @@ -201,14 +201,16 @@ public: void ProcessAudioOutAndRender(std::span<s16> output_buffer, std::size_t num_frames); /** - * Stall core processes if the audio thread falls too far behind. + * Get the total number of samples expected to have been played by this stream. + * + * @return The number of samples. */ - void Stall(); + u64 GetExpectedPlayedSampleCount(); /** - * Unstall core processes. + * Waits for free space in the sample ring buffer */ - void Unstall(); + void WaitFreeSpace(); protected: /// Core system @@ -237,12 +239,21 @@ private: std::atomic<u32> queued_buffers{}; /// The ring size for audio out buffers (usually 4, rarely 2 or 8) u32 max_queue_size{}; + /// Locks access to sample count tracking info + std::mutex sample_count_lock; + /// Minimum number of total samples that have been played since the last callback + u64 min_played_sample_count{}; + /// Maximum number of total samples that can be played since the last callback + u64 max_played_sample_count{}; + /// The time the two above tracking variables were last written to + std::chrono::nanoseconds last_sample_count_update_time{}; /// Set by the audio render/in/out system which uses this stream f32 system_volume{1.0f}; /// Set via IAudioDevice service calls f32 device_volume{1.0f}; - std::mutex stall_guard; - std::unique_lock<std::mutex> stalled_lock; + /// Signalled when ring buffer entries are consumed + std::condition_variable release_cv; + std::mutex release_mutex; }; using SinkStreamPtr = std::unique_ptr<SinkStream>; diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 61ab68864..13ed68b3f 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -38,6 +38,7 @@ add_library(common STATIC common_precompiled_headers.h common_types.h concepts.h + container_hash.h demangle.cpp demangle.h div_ceil.h @@ -132,6 +133,7 @@ add_library(common STATIC time_zone.h tiny_mt.h tree.h + typed_address.h uint128.h unique_function.h uuid.cpp @@ -158,6 +160,8 @@ if(ARCHITECTURE_x86_64) PRIVATE x64/cpu_detect.cpp x64/cpu_detect.h + x64/cpu_wait.cpp + x64/cpu_wait.h x64/native_clock.cpp x64/native_clock.h x64/xbyak_abi.h diff --git a/src/common/bounded_threadsafe_queue.h b/src/common/bounded_threadsafe_queue.h index 21217801e..bd87aa09b 100644 --- a/src/common/bounded_threadsafe_queue.h +++ b/src/common/bounded_threadsafe_queue.h @@ -1,158 +1,249 @@ -// SPDX-FileCopyrightText: Copyright (c) 2020 Erik Rigtorp <erik@rigtorp.se> -// SPDX-License-Identifier: MIT +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include <atomic> -#include <bit> #include <condition_variable> -#include <memory> +#include <cstddef> #include <mutex> #include <new> -#include <stop_token> -#include <type_traits> -#include <utility> + +#include "common/polyfill_thread.h" namespace Common { -#if defined(__cpp_lib_hardware_interference_size) -constexpr size_t hardware_interference_size = std::hardware_destructive_interference_size; -#else -constexpr size_t hardware_interference_size = 64; -#endif +namespace detail { +constexpr size_t DefaultCapacity = 0x1000; +} // namespace detail + +template <typename T, size_t Capacity = detail::DefaultCapacity> +class SPSCQueue { + static_assert((Capacity & (Capacity - 1)) == 0, "Capacity must be a power of two."); -template <typename T, size_t capacity = 0x400> -class MPSCQueue { public: - explicit MPSCQueue() : allocator{std::allocator<Slot<T>>()} { - // Allocate one extra slot to prevent false sharing on the last slot - slots = allocator.allocate(capacity + 1); - // Allocators are not required to honor alignment for over-aligned types - // (see http://eel.is/c++draft/allocator.requirements#10) so we verify - // alignment here - if (reinterpret_cast<uintptr_t>(slots) % alignof(Slot<T>) != 0) { - allocator.deallocate(slots, capacity + 1); - throw std::bad_alloc(); - } - for (size_t i = 0; i < capacity; ++i) { - std::construct_at(&slots[i]); - } - static_assert(std::has_single_bit(capacity), "capacity must be an integer power of 2"); - static_assert(alignof(Slot<T>) == hardware_interference_size, - "Slot must be aligned to cache line boundary to prevent false sharing"); - static_assert(sizeof(Slot<T>) % hardware_interference_size == 0, - "Slot size must be a multiple of cache line size to prevent " - "false sharing between adjacent slots"); - static_assert(sizeof(MPSCQueue) % hardware_interference_size == 0, - "Queue size must be a multiple of cache line size to " - "prevent false sharing between adjacent queues"); - } - - ~MPSCQueue() noexcept { - for (size_t i = 0; i < capacity; ++i) { - std::destroy_at(&slots[i]); - } - allocator.deallocate(slots, capacity + 1); + template <typename... Args> + bool TryEmplace(Args&&... args) { + return Emplace<PushMode::Try>(std::forward<Args>(args)...); } - // The queue must be both non-copyable and non-movable - MPSCQueue(const MPSCQueue&) = delete; - MPSCQueue& operator=(const MPSCQueue&) = delete; + template <typename... Args> + void EmplaceWait(Args&&... args) { + Emplace<PushMode::Wait>(std::forward<Args>(args)...); + } - MPSCQueue(MPSCQueue&&) = delete; - MPSCQueue& operator=(MPSCQueue&&) = delete; + bool TryPop(T& t) { + return Pop<PopMode::Try>(t); + } - void Push(const T& v) noexcept { - static_assert(std::is_nothrow_copy_constructible_v<T>, - "T must be nothrow copy constructible"); - emplace(v); + void PopWait(T& t) { + Pop<PopMode::Wait>(t); } - template <typename P, typename = std::enable_if_t<std::is_nothrow_constructible_v<T, P&&>>> - void Push(P&& v) noexcept { - emplace(std::forward<P>(v)); + void PopWait(T& t, std::stop_token stop_token) { + Pop<PopMode::WaitWithStopToken>(t, stop_token); } - void Pop(T& v, std::stop_token stop) noexcept { - auto const tail = tail_.fetch_add(1); - auto& slot = slots[idx(tail)]; - if (!slot.turn.test()) { - std::unique_lock lock{cv_mutex}; - cv.wait(lock, stop, [&slot] { return slot.turn.test(); }); - } - v = slot.move(); - slot.destroy(); - slot.turn.clear(); - slot.turn.notify_one(); + T PopWait() { + T t; + Pop<PopMode::Wait>(t); + return t; + } + + T PopWait(std::stop_token stop_token) { + T t; + Pop<PopMode::WaitWithStopToken>(t, stop_token); + return t; } private: - template <typename U = T> - struct Slot { - ~Slot() noexcept { - if (turn.test()) { - destroy(); + enum class PushMode { + Try, + Wait, + Count, + }; + + enum class PopMode { + Try, + Wait, + WaitWithStopToken, + Count, + }; + + template <PushMode Mode, typename... Args> + bool Emplace(Args&&... args) { + const size_t write_index = m_write_index.load(std::memory_order::relaxed); + + if constexpr (Mode == PushMode::Try) { + // Check if we have free slots to write to. + if ((write_index - m_read_index.load(std::memory_order::acquire)) == Capacity) { + return false; } + } else if constexpr (Mode == PushMode::Wait) { + // Wait until we have free slots to write to. + std::unique_lock lock{producer_cv_mutex}; + producer_cv.wait(lock, [this, write_index] { + return (write_index - m_read_index.load(std::memory_order::acquire)) < Capacity; + }); + } else { + static_assert(Mode < PushMode::Count, "Invalid PushMode."); } - template <typename... Args> - void construct(Args&&... args) noexcept { - static_assert(std::is_nothrow_constructible_v<U, Args&&...>, - "T must be nothrow constructible with Args&&..."); - std::construct_at(reinterpret_cast<U*>(&storage), std::forward<Args>(args)...); - } + // Determine the position to write to. + const size_t pos = write_index % Capacity; - void destroy() noexcept { - static_assert(std::is_nothrow_destructible_v<U>, "T must be nothrow destructible"); - std::destroy_at(reinterpret_cast<U*>(&storage)); - } + // Emplace into the queue. + std::construct_at(std::addressof(m_data[pos]), std::forward<Args>(args)...); + + // Increment the write index. + ++m_write_index; + + // Notify the consumer that we have pushed into the queue. + std::scoped_lock lock{consumer_cv_mutex}; + consumer_cv.notify_one(); + + return true; + } + + template <PopMode Mode> + bool Pop(T& t, [[maybe_unused]] std::stop_token stop_token = {}) { + const size_t read_index = m_read_index.load(std::memory_order::relaxed); - U&& move() noexcept { - return reinterpret_cast<U&&>(storage); + if constexpr (Mode == PopMode::Try) { + // Check if the queue is empty. + if (read_index == m_write_index.load(std::memory_order::acquire)) { + return false; + } + } else if constexpr (Mode == PopMode::Wait) { + // Wait until the queue is not empty. + std::unique_lock lock{consumer_cv_mutex}; + consumer_cv.wait(lock, [this, read_index] { + return read_index != m_write_index.load(std::memory_order::acquire); + }); + } else if constexpr (Mode == PopMode::WaitWithStopToken) { + // Wait until the queue is not empty. + std::unique_lock lock{consumer_cv_mutex}; + Common::CondvarWait(consumer_cv, lock, stop_token, [this, read_index] { + return read_index != m_write_index.load(std::memory_order::acquire); + }); + if (stop_token.stop_requested()) { + return false; + } + } else { + static_assert(Mode < PopMode::Count, "Invalid PopMode."); } - // Align to avoid false sharing between adjacent slots - alignas(hardware_interference_size) std::atomic_flag turn{}; - struct aligned_store { - struct type { - alignas(U) unsigned char data[sizeof(U)]; - }; - }; - typename aligned_store::type storage; - }; + // Determine the position to read from. + const size_t pos = read_index % Capacity; + + // Pop the data off the queue, moving it. + t = std::move(m_data[pos]); + + // Increment the read index. + ++m_read_index; + + // Notify the producer that we have popped off the queue. + std::scoped_lock lock{producer_cv_mutex}; + producer_cv.notify_one(); + + return true; + } + alignas(128) std::atomic_size_t m_read_index{0}; + alignas(128) std::atomic_size_t m_write_index{0}; + + std::array<T, Capacity> m_data; + + std::condition_variable_any producer_cv; + std::mutex producer_cv_mutex; + std::condition_variable_any consumer_cv; + std::mutex consumer_cv_mutex; +}; + +template <typename T, size_t Capacity = detail::DefaultCapacity> +class MPSCQueue { +public: template <typename... Args> - void emplace(Args&&... args) noexcept { - static_assert(std::is_nothrow_constructible_v<T, Args&&...>, - "T must be nothrow constructible with Args&&..."); - auto const head = head_.fetch_add(1); - auto& slot = slots[idx(head)]; - slot.turn.wait(true); - slot.construct(std::forward<Args>(args)...); - slot.turn.test_and_set(); - cv.notify_one(); + bool TryEmplace(Args&&... args) { + std::scoped_lock lock{write_mutex}; + return spsc_queue.TryEmplace(std::forward<Args>(args)...); } - constexpr size_t idx(size_t i) const noexcept { - return i & mask; + template <typename... Args> + void EmplaceWait(Args&&... args) { + std::scoped_lock lock{write_mutex}; + spsc_queue.EmplaceWait(std::forward<Args>(args)...); } - static constexpr size_t mask = capacity - 1; + bool TryPop(T& t) { + return spsc_queue.TryPop(t); + } - // Align to avoid false sharing between head_ and tail_ - alignas(hardware_interference_size) std::atomic<size_t> head_{0}; - alignas(hardware_interference_size) std::atomic<size_t> tail_{0}; + void PopWait(T& t) { + spsc_queue.PopWait(t); + } - std::mutex cv_mutex; - std::condition_variable_any cv; + void PopWait(T& t, std::stop_token stop_token) { + spsc_queue.PopWait(t, stop_token); + } + + T PopWait() { + return spsc_queue.PopWait(); + } - Slot<T>* slots; - [[no_unique_address]] std::allocator<Slot<T>> allocator; + T PopWait(std::stop_token stop_token) { + return spsc_queue.PopWait(stop_token); + } - static_assert(std::is_nothrow_copy_assignable_v<T> || std::is_nothrow_move_assignable_v<T>, - "T must be nothrow copy or move assignable"); +private: + SPSCQueue<T, Capacity> spsc_queue; + std::mutex write_mutex; +}; - static_assert(std::is_nothrow_destructible_v<T>, "T must be nothrow destructible"); +template <typename T, size_t Capacity = detail::DefaultCapacity> +class MPMCQueue { +public: + template <typename... Args> + bool TryEmplace(Args&&... args) { + std::scoped_lock lock{write_mutex}; + return spsc_queue.TryEmplace(std::forward<Args>(args)...); + } + + template <typename... Args> + void EmplaceWait(Args&&... args) { + std::scoped_lock lock{write_mutex}; + spsc_queue.EmplaceWait(std::forward<Args>(args)...); + } + + bool TryPop(T& t) { + std::scoped_lock lock{read_mutex}; + return spsc_queue.TryPop(t); + } + + void PopWait(T& t) { + std::scoped_lock lock{read_mutex}; + spsc_queue.PopWait(t); + } + + void PopWait(T& t, std::stop_token stop_token) { + std::scoped_lock lock{read_mutex}; + spsc_queue.PopWait(t, stop_token); + } + + T PopWait() { + std::scoped_lock lock{read_mutex}; + return spsc_queue.PopWait(); + } + + T PopWait(std::stop_token stop_token) { + std::scoped_lock lock{read_mutex}; + return spsc_queue.PopWait(stop_token); + } + +private: + SPSCQueue<T, Capacity> spsc_queue; + std::mutex write_mutex; + std::mutex read_mutex; }; } // namespace Common diff --git a/src/common/container_hash.h b/src/common/container_hash.h new file mode 100644 index 000000000..a5e357745 --- /dev/null +++ b/src/common/container_hash.h @@ -0,0 +1,92 @@ +// SPDX-FileCopyrightText: 2005-2014 Daniel James +// SPDX-FileCopyrightText: 2016 Austin Appleby +// SPDX-License-Identifier: BSL-1.0 + +#include <array> +#include <climits> +#include <cstdint> +#include <limits> +#include <type_traits> +#include <vector> + +namespace Common { + +namespace detail { + +template <typename T> + requires std::is_unsigned_v<T> +inline std::size_t HashValue(T val) { + const unsigned int size_t_bits = std::numeric_limits<std::size_t>::digits; + const unsigned int length = + (std::numeric_limits<T>::digits - 1) / static_cast<unsigned int>(size_t_bits); + + std::size_t seed = 0; + + for (unsigned int i = length * size_t_bits; i > 0; i -= size_t_bits) { + seed ^= static_cast<size_t>(val >> i) + (seed << 6) + (seed >> 2); + } + + seed ^= static_cast<size_t>(val) + (seed << 6) + (seed >> 2); + + return seed; +} + +template <size_t Bits> +struct HashCombineImpl { + template <typename T> + static inline T fn(T seed, T value) { + seed ^= value + 0x9e3779b9 + (seed << 6) + (seed >> 2); + return seed; + } +}; + +template <> +struct HashCombineImpl<64> { + static inline std::uint64_t fn(std::uint64_t h, std::uint64_t k) { + const std::uint64_t m = (std::uint64_t(0xc6a4a793) << 32) + 0x5bd1e995; + const int r = 47; + + k *= m; + k ^= k >> r; + k *= m; + + h ^= k; + h *= m; + + // Completely arbitrary number, to prevent 0's + // from hashing to 0. + h += 0xe6546b64; + + return h; + } +}; + +} // namespace detail + +template <typename T> +inline void HashCombine(std::size_t& seed, const T& v) { + seed = detail::HashCombineImpl<sizeof(std::size_t) * CHAR_BIT>::fn(seed, detail::HashValue(v)); +} + +template <typename It> +inline std::size_t HashRange(It first, It last) { + std::size_t seed = 0; + + for (; first != last; ++first) { + HashCombine<typename std::iterator_traits<It>::value_type>(seed, *first); + } + + return seed; +} + +template <typename T, size_t Size> +std::size_t HashValue(const std::array<T, Size>& v) { + return HashRange(v.cbegin(), v.cend()); +} + +template <typename T, typename Allocator> +std::size_t HashValue(const std::vector<T, Allocator>& v) { + return HashRange(v.cbegin(), v.cend()); +} + +} // namespace Common diff --git a/src/common/intrusive_red_black_tree.h b/src/common/intrusive_red_black_tree.h index 5f6b34e82..bc2940fa0 100644 --- a/src/common/intrusive_red_black_tree.h +++ b/src/common/intrusive_red_black_tree.h @@ -96,10 +96,6 @@ public: return m_node == rhs.m_node; } - constexpr bool operator!=(const Iterator& rhs) const { - return !(*this == rhs); - } - constexpr pointer operator->() const { return m_node; } @@ -324,10 +320,6 @@ public: return m_impl == rhs.m_impl; } - constexpr bool operator!=(const Iterator& rhs) const { - return !(*this == rhs); - } - constexpr pointer operator->() const { return Traits::GetParent(std::addressof(*m_impl)); } diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index 2a3bded40..f96c7c222 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp @@ -28,7 +28,7 @@ #ifdef _WIN32 #include "common/string_util.h" #endif -#include "common/threadsafe_queue.h" +#include "common/bounded_threadsafe_queue.h" namespace Common::Log { @@ -204,11 +204,11 @@ public: void PushEntry(Class log_class, Level log_level, const char* filename, unsigned int line_num, const char* function, std::string&& message) { - if (!filter.CheckMessage(log_class, log_level)) + if (!filter.CheckMessage(log_class, log_level)) { return; - const Entry& entry = - CreateEntry(log_class, log_level, filename, line_num, function, std::move(message)); - message_queue.Push(entry); + } + message_queue.EmplaceWait( + CreateEntry(log_class, log_level, filename, line_num, function, std::move(message))); } private: @@ -225,7 +225,7 @@ private: ForEachBackend([&entry](Backend& backend) { backend.Write(entry); }); }; while (!stop_token.stop_requested()) { - entry = message_queue.PopWait(stop_token); + message_queue.PopWait(entry, stop_token); if (entry.filename != nullptr) { write_logs(); } @@ -233,7 +233,7 @@ private: // Drain the logging queue. Only writes out up to MAX_LOGS_TO_WRITE to prevent a // case where a system is repeatedly spamming logs even on close. int max_logs_to_write = filter.IsDebug() ? INT_MAX : 100; - while (max_logs_to_write-- && message_queue.Pop(entry)) { + while (max_logs_to_write-- && message_queue.TryPop(entry)) { write_logs(); } }); @@ -273,7 +273,7 @@ private: ColorConsoleBackend color_console_backend{}; FileBackend file_backend; - MPSCQueue<Entry, true> message_queue{}; + MPSCQueue<Entry> message_queue{}; std::chrono::steady_clock::time_point time_origin{std::chrono::steady_clock::now()}; std::jthread backend_thread; }; diff --git a/src/common/range_map.h b/src/common/range_map.h index 79c7ef547..ab73993e3 100644 --- a/src/common/range_map.h +++ b/src/common/range_map.h @@ -38,12 +38,12 @@ public: Map(address, address_end, null_value); } - [[nodiscard]] size_t GetContinousSizeFrom(KeyTBase address) const { + [[nodiscard]] size_t GetContinuousSizeFrom(KeyTBase address) const { const KeyT new_address = static_cast<KeyT>(address); if (new_address < 0) { return 0; } - return ContinousSizeInternal(new_address); + return ContinuousSizeInternal(new_address); } [[nodiscard]] ValueT GetValueAt(KeyT address) const { @@ -59,7 +59,7 @@ private: using IteratorType = typename MapType::iterator; using ConstIteratorType = typename MapType::const_iterator; - size_t ContinousSizeInternal(KeyT address) const { + size_t ContinuousSizeInternal(KeyT address) const { const auto it = GetFirstElementBeforeOrOn(address); if (it == container.end() || it->second == null_value) { return 0; diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp index e0b6180c5..feab1653d 100644 --- a/src/common/string_util.cpp +++ b/src/common/string_util.cpp @@ -125,18 +125,18 @@ std::string ReplaceAll(std::string result, const std::string& src, const std::st return result; } -std::string UTF16ToUTF8(const std::u16string& input) { +std::string UTF16ToUTF8(std::u16string_view input) { std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; - return convert.to_bytes(input); + return convert.to_bytes(input.data(), input.data() + input.size()); } -std::u16string UTF8ToUTF16(const std::string& input) { +std::u16string UTF8ToUTF16(std::string_view input) { std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; - return convert.from_bytes(input); + return convert.from_bytes(input.data(), input.data() + input.size()); } #ifdef _WIN32 -static std::wstring CPToUTF16(u32 code_page, const std::string& input) { +static std::wstring CPToUTF16(u32 code_page, std::string_view input) { const auto size = MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), nullptr, 0); @@ -154,7 +154,7 @@ static std::wstring CPToUTF16(u32 code_page, const std::string& input) { return output; } -std::string UTF16ToUTF8(const std::wstring& input) { +std::string UTF16ToUTF8(std::wstring_view input) { const auto size = WideCharToMultiByte(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), nullptr, 0, nullptr, nullptr); if (size == 0) { @@ -172,7 +172,7 @@ std::string UTF16ToUTF8(const std::wstring& input) { return output; } -std::wstring UTF8ToUTF16W(const std::string& input) { +std::wstring UTF8ToUTF16W(std::string_view input) { return CPToUTF16(CP_UTF8, input); } diff --git a/src/common/string_util.h b/src/common/string_util.h index f8aecc875..c351f1a0c 100644 --- a/src/common/string_util.h +++ b/src/common/string_util.h @@ -36,12 +36,12 @@ bool SplitPath(const std::string& full_path, std::string* _pPath, std::string* _ [[nodiscard]] std::string ReplaceAll(std::string result, const std::string& src, const std::string& dest); -[[nodiscard]] std::string UTF16ToUTF8(const std::u16string& input); -[[nodiscard]] std::u16string UTF8ToUTF16(const std::string& input); +[[nodiscard]] std::string UTF16ToUTF8(std::u16string_view input); +[[nodiscard]] std::u16string UTF8ToUTF16(std::string_view input); #ifdef _WIN32 -[[nodiscard]] std::string UTF16ToUTF8(const std::wstring& input); -[[nodiscard]] std::wstring UTF8ToUTF16W(const std::string& str); +[[nodiscard]] std::string UTF16ToUTF8(std::wstring_view input); +[[nodiscard]] std::wstring UTF8ToUTF16W(std::string_view str); #endif diff --git a/src/common/telemetry.cpp b/src/common/telemetry.cpp index d26394359..91352912d 100644 --- a/src/common/telemetry.cpp +++ b/src/common/telemetry.cpp @@ -97,6 +97,7 @@ void AppendCPUInfo(FieldCollection& fc) { add_field("CPU_Extension_x64_PCLMULQDQ", caps.pclmulqdq); add_field("CPU_Extension_x64_POPCNT", caps.popcnt); add_field("CPU_Extension_x64_SHA", caps.sha); + add_field("CPU_Extension_x64_WAITPKG", caps.waitpkg); #else fc.AddField(FieldType::UserSystem, "CPU_Model", "Other"); #endif diff --git a/src/common/typed_address.h b/src/common/typed_address.h new file mode 100644 index 000000000..64f4a07c2 --- /dev/null +++ b/src/common/typed_address.h @@ -0,0 +1,315 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <compare> +#include <type_traits> +#include <fmt/format.h> + +#include "common/common_types.h" + +namespace Common { + +template <bool Virtual, typename T> +class TypedAddress { +public: + // Constructors. + constexpr inline TypedAddress() : m_address(0) {} + constexpr inline TypedAddress(uint64_t a) : m_address(a) {} + + template <typename U> + constexpr inline explicit TypedAddress(const U* ptr) + : m_address(reinterpret_cast<uint64_t>(ptr)) {} + + // Copy constructor. + constexpr inline TypedAddress(const TypedAddress& rhs) = default; + + // Assignment operator. + constexpr inline TypedAddress& operator=(const TypedAddress& rhs) = default; + + // Arithmetic operators. + template <typename I> + constexpr inline TypedAddress operator+(I rhs) const { + static_assert(std::is_integral_v<I>); + return m_address + rhs; + } + + constexpr inline TypedAddress operator+(TypedAddress rhs) const { + return m_address + rhs.m_address; + } + + constexpr inline TypedAddress operator++() { + return ++m_address; + } + + constexpr inline TypedAddress operator++(int) { + return m_address++; + } + + template <typename I> + constexpr inline TypedAddress operator-(I rhs) const { + static_assert(std::is_integral_v<I>); + return m_address - rhs; + } + + constexpr inline ptrdiff_t operator-(TypedAddress rhs) const { + return m_address - rhs.m_address; + } + + constexpr inline TypedAddress operator--() { + return --m_address; + } + + constexpr inline TypedAddress operator--(int) { + return m_address--; + } + + template <typename I> + constexpr inline TypedAddress operator+=(I rhs) { + static_assert(std::is_integral_v<I>); + m_address += rhs; + return *this; + } + + template <typename I> + constexpr inline TypedAddress operator-=(I rhs) { + static_assert(std::is_integral_v<I>); + m_address -= rhs; + return *this; + } + + // Logical operators. + constexpr inline uint64_t operator&(uint64_t mask) const { + return m_address & mask; + } + + constexpr inline uint64_t operator|(uint64_t mask) const { + return m_address | mask; + } + + template <typename I> + constexpr inline TypedAddress operator|=(I rhs) { + static_assert(std::is_integral_v<I>); + m_address |= rhs; + return *this; + } + + constexpr inline uint64_t operator<<(int shift) const { + return m_address << shift; + } + + constexpr inline uint64_t operator>>(int shift) const { + return m_address >> shift; + } + + template <typename U> + constexpr inline size_t operator/(U size) const { + return m_address / size; + } + + constexpr explicit operator bool() const { + return m_address != 0; + } + + // constexpr inline uint64_t operator%(U align) const { return m_address % align; } + + // Comparison operators. + constexpr bool operator==(const TypedAddress&) const = default; + constexpr auto operator<=>(const TypedAddress&) const = default; + + // For convenience, also define comparison operators versus uint64_t. + constexpr inline bool operator==(uint64_t rhs) const { + return m_address == rhs; + } + + // Allow getting the address explicitly, for use in accessors. + constexpr inline uint64_t GetValue() const { + return m_address; + } + +private: + uint64_t m_address{}; +}; + +struct PhysicalAddressTag {}; +struct VirtualAddressTag {}; +struct ProcessAddressTag {}; + +using PhysicalAddress = TypedAddress<false, PhysicalAddressTag>; +using VirtualAddress = TypedAddress<true, VirtualAddressTag>; +using ProcessAddress = TypedAddress<true, ProcessAddressTag>; + +// Define accessors. +template <typename T> +concept IsTypedAddress = std::same_as<T, PhysicalAddress> || std::same_as<T, VirtualAddress> || + std::same_as<T, ProcessAddress>; + +template <typename T> +constexpr inline T Null = [] { + if constexpr (std::is_same<T, uint64_t>::value) { + return 0; + } else { + static_assert(std::is_same<T, PhysicalAddress>::value || + std::is_same<T, VirtualAddress>::value || + std::is_same<T, ProcessAddress>::value); + return T(0); + } +}(); + +// Basic type validations. +static_assert(sizeof(PhysicalAddress) == sizeof(uint64_t)); +static_assert(sizeof(VirtualAddress) == sizeof(uint64_t)); +static_assert(sizeof(ProcessAddress) == sizeof(uint64_t)); + +static_assert(std::is_trivially_copyable_v<PhysicalAddress>); +static_assert(std::is_trivially_copyable_v<VirtualAddress>); +static_assert(std::is_trivially_copyable_v<ProcessAddress>); + +static_assert(std::is_trivially_copy_constructible_v<PhysicalAddress>); +static_assert(std::is_trivially_copy_constructible_v<VirtualAddress>); +static_assert(std::is_trivially_copy_constructible_v<ProcessAddress>); + +static_assert(std::is_trivially_move_constructible_v<PhysicalAddress>); +static_assert(std::is_trivially_move_constructible_v<VirtualAddress>); +static_assert(std::is_trivially_move_constructible_v<ProcessAddress>); + +static_assert(std::is_trivially_copy_assignable_v<PhysicalAddress>); +static_assert(std::is_trivially_copy_assignable_v<VirtualAddress>); +static_assert(std::is_trivially_copy_assignable_v<ProcessAddress>); + +static_assert(std::is_trivially_move_assignable_v<PhysicalAddress>); +static_assert(std::is_trivially_move_assignable_v<VirtualAddress>); +static_assert(std::is_trivially_move_assignable_v<ProcessAddress>); + +static_assert(std::is_trivially_destructible_v<PhysicalAddress>); +static_assert(std::is_trivially_destructible_v<VirtualAddress>); +static_assert(std::is_trivially_destructible_v<ProcessAddress>); + +static_assert(Null<uint64_t> == 0); +static_assert(Null<PhysicalAddress> == Null<uint64_t>); +static_assert(Null<VirtualAddress> == Null<uint64_t>); +static_assert(Null<ProcessAddress> == Null<uint64_t>); + +// Constructor/assignment validations. +static_assert([] { + const PhysicalAddress a(5); + PhysicalAddress b(a); + return b; +}() == PhysicalAddress(5)); +static_assert([] { + const PhysicalAddress a(5); + PhysicalAddress b(10); + b = a; + return b; +}() == PhysicalAddress(5)); + +// Arithmetic validations. +static_assert(PhysicalAddress(10) + 5 == PhysicalAddress(15)); +static_assert(PhysicalAddress(10) - 5 == PhysicalAddress(5)); +static_assert([] { + PhysicalAddress v(10); + v += 5; + return v; +}() == PhysicalAddress(15)); +static_assert([] { + PhysicalAddress v(10); + v -= 5; + return v; +}() == PhysicalAddress(5)); +static_assert(PhysicalAddress(10)++ == PhysicalAddress(10)); +static_assert(++PhysicalAddress(10) == PhysicalAddress(11)); +static_assert(PhysicalAddress(10)-- == PhysicalAddress(10)); +static_assert(--PhysicalAddress(10) == PhysicalAddress(9)); + +// Logical validations. +static_assert((PhysicalAddress(0b11111111) >> 1) == 0b01111111); +static_assert((PhysicalAddress(0b10101010) >> 1) == 0b01010101); +static_assert((PhysicalAddress(0b11111111) << 1) == 0b111111110); +static_assert((PhysicalAddress(0b01010101) << 1) == 0b10101010); +static_assert((PhysicalAddress(0b11111111) & 0b01010101) == 0b01010101); +static_assert((PhysicalAddress(0b11111111) & 0b10101010) == 0b10101010); +static_assert((PhysicalAddress(0b01010101) & 0b10101010) == 0b00000000); +static_assert((PhysicalAddress(0b00000000) | 0b01010101) == 0b01010101); +static_assert((PhysicalAddress(0b11111111) | 0b01010101) == 0b11111111); +static_assert((PhysicalAddress(0b10101010) | 0b01010101) == 0b11111111); + +// Comparisons. +static_assert(PhysicalAddress(0) == PhysicalAddress(0)); +static_assert(PhysicalAddress(0) != PhysicalAddress(1)); +static_assert(PhysicalAddress(0) < PhysicalAddress(1)); +static_assert(PhysicalAddress(0) <= PhysicalAddress(1)); +static_assert(PhysicalAddress(1) > PhysicalAddress(0)); +static_assert(PhysicalAddress(1) >= PhysicalAddress(0)); + +static_assert(!(PhysicalAddress(0) == PhysicalAddress(1))); +static_assert(!(PhysicalAddress(0) != PhysicalAddress(0))); +static_assert(!(PhysicalAddress(1) < PhysicalAddress(0))); +static_assert(!(PhysicalAddress(1) <= PhysicalAddress(0))); +static_assert(!(PhysicalAddress(0) > PhysicalAddress(1))); +static_assert(!(PhysicalAddress(0) >= PhysicalAddress(1))); + +} // namespace Common + +template <bool Virtual, typename T> +constexpr inline uint64_t GetInteger(Common::TypedAddress<Virtual, T> address) { + return address.GetValue(); +} + +template <> +struct fmt::formatter<Common::PhysicalAddress> { + constexpr auto parse(fmt::format_parse_context& ctx) { + return ctx.begin(); + } + template <typename FormatContext> + auto format(const Common::PhysicalAddress& addr, FormatContext& ctx) { + return fmt::format_to(ctx.out(), "{:#x}", static_cast<u64>(addr.GetValue())); + } +}; + +template <> +struct fmt::formatter<Common::ProcessAddress> { + constexpr auto parse(fmt::format_parse_context& ctx) { + return ctx.begin(); + } + template <typename FormatContext> + auto format(const Common::ProcessAddress& addr, FormatContext& ctx) { + return fmt::format_to(ctx.out(), "{:#x}", static_cast<u64>(addr.GetValue())); + } +}; + +template <> +struct fmt::formatter<Common::VirtualAddress> { + constexpr auto parse(fmt::format_parse_context& ctx) { + return ctx.begin(); + } + template <typename FormatContext> + auto format(const Common::VirtualAddress& addr, FormatContext& ctx) { + return fmt::format_to(ctx.out(), "{:#x}", static_cast<u64>(addr.GetValue())); + } +}; + +namespace std { + +template <> +struct hash<Common::PhysicalAddress> { + size_t operator()(const Common::PhysicalAddress& k) const noexcept { + return k.GetValue(); + } +}; + +template <> +struct hash<Common::ProcessAddress> { + size_t operator()(const Common::ProcessAddress& k) const noexcept { + return k.GetValue(); + } +}; + +template <> +struct hash<Common::VirtualAddress> { + size_t operator()(const Common::VirtualAddress& k) const noexcept { + return k.GetValue(); + } +}; + +} // namespace std diff --git a/src/common/x64/cpu_detect.cpp b/src/common/x64/cpu_detect.cpp index e54383a4a..72ed6e96c 100644 --- a/src/common/x64/cpu_detect.cpp +++ b/src/common/x64/cpu_detect.cpp @@ -144,6 +144,7 @@ static CPUCaps Detect() { caps.bmi2 = Common::Bit<8>(cpu_id[1]); caps.sha = Common::Bit<29>(cpu_id[1]); + caps.waitpkg = Common::Bit<5>(cpu_id[2]); caps.gfni = Common::Bit<8>(cpu_id[2]); __cpuidex(cpu_id, 0x00000007, 0x00000001); diff --git a/src/common/x64/cpu_detect.h b/src/common/x64/cpu_detect.h index ca8db19d6..8253944d6 100644 --- a/src/common/x64/cpu_detect.h +++ b/src/common/x64/cpu_detect.h @@ -67,6 +67,7 @@ struct CPUCaps { bool pclmulqdq : 1; bool popcnt : 1; bool sha : 1; + bool waitpkg : 1; }; /** diff --git a/src/common/x64/cpu_wait.cpp b/src/common/x64/cpu_wait.cpp new file mode 100644 index 000000000..cfeef6a3d --- /dev/null +++ b/src/common/x64/cpu_wait.cpp @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <thread> + +#ifdef _MSC_VER +#include <intrin.h> +#endif + +#include "common/x64/cpu_detect.h" +#include "common/x64/cpu_wait.h" + +namespace Common::X64 { + +#ifdef _MSC_VER +__forceinline static u64 FencedRDTSC() { + _mm_lfence(); + _ReadWriteBarrier(); + const u64 result = __rdtsc(); + _mm_lfence(); + _ReadWriteBarrier(); + return result; +} + +__forceinline static void TPAUSE() { + // 100,000 cycles is a reasonable amount of time to wait to save on CPU resources. + // For reference: + // At 1 GHz, 100K cycles is 100us + // At 2 GHz, 100K cycles is 50us + // At 4 GHz, 100K cycles is 25us + static constexpr auto PauseCycles = 100'000; + _tpause(0, FencedRDTSC() + PauseCycles); +} +#else +static u64 FencedRDTSC() { + u64 eax; + u64 edx; + asm volatile("lfence\n\t" + "rdtsc\n\t" + "lfence\n\t" + : "=a"(eax), "=d"(edx)); + return (edx << 32) | eax; +} + +static void TPAUSE() { + // 100,000 cycles is a reasonable amount of time to wait to save on CPU resources. + // For reference: + // At 1 GHz, 100K cycles is 100us + // At 2 GHz, 100K cycles is 50us + // At 4 GHz, 100K cycles is 25us + static constexpr auto PauseCycles = 100'000; + const auto tsc = FencedRDTSC() + PauseCycles; + const auto eax = static_cast<u32>(tsc & 0xFFFFFFFF); + const auto edx = static_cast<u32>(tsc >> 32); + asm volatile("tpause %0" : : "r"(0), "d"(edx), "a"(eax)); +} +#endif + +void MicroSleep() { + static const bool has_waitpkg = GetCPUCaps().waitpkg; + + if (has_waitpkg) { + TPAUSE(); + } else { + std::this_thread::yield(); + } +} + +} // namespace Common::X64 diff --git a/src/common/x64/cpu_wait.h b/src/common/x64/cpu_wait.h new file mode 100644 index 000000000..99d3757a7 --- /dev/null +++ b/src/common/x64/cpu_wait.h @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +namespace Common::X64 { + +void MicroSleep(); + +} // namespace Common::X64 diff --git a/src/common/x64/native_clock.cpp b/src/common/x64/native_clock.cpp index 76c66e7ee..277b00662 100644 --- a/src/common/x64/native_clock.cpp +++ b/src/common/x64/native_clock.cpp @@ -27,16 +27,13 @@ __forceinline static u64 FencedRDTSC() { } #else static u64 FencedRDTSC() { - u64 result; + u64 eax; + u64 edx; asm volatile("lfence\n\t" "rdtsc\n\t" - "shl $32, %%rdx\n\t" - "or %%rdx, %0\n\t" - "lfence" - : "=a"(result) - : - : "rdx", "memory", "cc"); - return result; + "lfence\n\t" + : "=a"(eax), "=d"(edx)); + return (edx << 32) | eax; } #endif diff --git a/src/common/zstd_compression.cpp b/src/common/zstd_compression.cpp index b71a41b78..cb6ec171b 100644 --- a/src/common/zstd_compression.cpp +++ b/src/common/zstd_compression.cpp @@ -33,7 +33,7 @@ std::vector<u8> CompressDataZSTDDefault(const u8* source, std::size_t source_siz std::vector<u8> DecompressDataZSTD(std::span<const u8> compressed) { const std::size_t decompressed_size = - ZSTD_getDecompressedSize(compressed.data(), compressed.size()); + ZSTD_getFrameContentSize(compressed.data(), compressed.size()); std::vector<u8> decompressed(decompressed_size); const std::size_t uncompressed_result_size = ZSTD_decompress( diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 378e6c023..4e677f287 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -278,6 +278,7 @@ add_library(core STATIC hle/kernel/k_trace.h hle/kernel/k_transfer_memory.cpp hle/kernel/k_transfer_memory.h + hle/kernel/k_typed_address.h hle/kernel/k_worker_task.h hle/kernel/k_worker_task_manager.cpp hle/kernel/k_worker_task_manager.h diff --git a/src/core/arm/arm_interface.cpp b/src/core/arm/arm_interface.cpp index 4a331d4c1..d30914b7a 100644 --- a/src/core/arm/arm_interface.cpp +++ b/src/core/arm/arm_interface.cpp @@ -44,7 +44,7 @@ void ARM_Interface::SymbolicateBacktrace(Core::System& system, std::vector<Backt std::map<std::string, Symbols::Symbols> symbols; for (const auto& module : modules) { symbols.insert_or_assign( - module.second, Symbols::GetSymbols(module.first, system.Memory(), + module.second, Symbols::GetSymbols(module.first, system.ApplicationMemory(), system.ApplicationProcess()->Is64BitProcess())); } @@ -168,21 +168,21 @@ void ARM_Interface::LoadWatchpointArray(const WatchpointArray& wp) { } const Kernel::DebugWatchpoint* ARM_Interface::MatchingWatchpoint( - VAddr addr, u64 size, Kernel::DebugWatchpointType access_type) const { + u64 addr, u64 size, Kernel::DebugWatchpointType access_type) const { if (!watchpoints) { return nullptr; } - const VAddr start_address{addr}; - const VAddr end_address{addr + size}; + const u64 start_address{addr}; + const u64 end_address{addr + size}; for (size_t i = 0; i < Core::Hardware::NUM_WATCHPOINTS; i++) { const auto& watch{(*watchpoints)[i]}; - if (end_address <= watch.start_address) { + if (end_address <= GetInteger(watch.start_address)) { continue; } - if (start_address >= watch.end_address) { + if (start_address >= GetInteger(watch.end_address)) { continue; } if ((access_type & watch.type) == Kernel::DebugWatchpointType::None) { diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index c40771c97..8e40702cc 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h @@ -78,7 +78,7 @@ public: * @param addr Start address of the cache range to clear * @param size Size of the cache range to clear, starting at addr */ - virtual void InvalidateCacheRange(VAddr addr, std::size_t size) = 0; + virtual void InvalidateCacheRange(u64 addr, std::size_t size) = 0; /** * Notifies CPU emulation that the current page table has changed. @@ -149,9 +149,9 @@ public: */ virtual void SetPSTATE(u32 pstate) = 0; - virtual VAddr GetTlsAddress() const = 0; + virtual u64 GetTlsAddress() const = 0; - virtual void SetTlsAddress(VAddr address) = 0; + virtual void SetTlsAddress(u64 address) = 0; /** * Gets the value within the TPIDR_EL0 (read/write software thread ID) register. @@ -214,7 +214,7 @@ protected: static void SymbolicateBacktrace(Core::System& system, std::vector<BacktraceEntry>& out); const Kernel::DebugWatchpoint* MatchingWatchpoint( - VAddr addr, u64 size, Kernel::DebugWatchpointType access_type) const; + u64 addr, u64 size, Kernel::DebugWatchpointType access_type) const; virtual Dynarmic::HaltReason RunJit() = 0; virtual Dynarmic::HaltReason StepJit() = 0; diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 2a7570073..dfdcbe35a 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp @@ -5,7 +5,6 @@ #include <memory> #include <dynarmic/interface/A32/a32.h> #include <dynarmic/interface/A32/config.h> -#include <dynarmic/interface/A32/context.h> #include "common/assert.h" #include "common/literals.h" #include "common/logging/log.h" @@ -28,8 +27,8 @@ using namespace Common::Literals; class DynarmicCallbacks32 : public Dynarmic::A32::UserCallbacks { public: explicit DynarmicCallbacks32(ARM_Dynarmic_32& parent_) - : parent{parent_}, - memory(parent.system.Memory()), debugger_enabled{parent.system.DebuggerEnabled()}, + : parent{parent_}, memory(parent.system.ApplicationMemory()), + debugger_enabled{parent.system.DebuggerEnabled()}, check_memory_access{debugger_enabled || !Settings::values.cpuopt_ignore_memory_aborts.GetValue()} {} @@ -155,7 +154,7 @@ public: return std::max<s64>(parent.system.CoreTiming().GetDowncount(), 0); } - bool CheckMemoryAccess(VAddr addr, u64 size, Kernel::DebugWatchpointType type) { + bool CheckMemoryAccess(u64 addr, u64 size, Kernel::DebugWatchpointType type) { if (!check_memory_access) { return true; } @@ -397,7 +396,7 @@ u64 ARM_Dynarmic_32::GetTlsAddress() const { return cp15->uro; } -void ARM_Dynarmic_32::SetTlsAddress(VAddr address) { +void ARM_Dynarmic_32::SetTlsAddress(u64 address) { cp15->uro = static_cast<u32>(address); } @@ -410,21 +409,19 @@ void ARM_Dynarmic_32::SetTPIDR_EL0(u64 value) { } void ARM_Dynarmic_32::SaveContext(ThreadContext32& ctx) { - Dynarmic::A32::Context context; - jit.load()->SaveContext(context); - ctx.cpu_registers = context.Regs(); - ctx.extension_registers = context.ExtRegs(); - ctx.cpsr = context.Cpsr(); - ctx.fpscr = context.Fpscr(); + Dynarmic::A32::Jit* j = jit.load(); + ctx.cpu_registers = j->Regs(); + ctx.extension_registers = j->ExtRegs(); + ctx.cpsr = j->Cpsr(); + ctx.fpscr = j->Fpscr(); } void ARM_Dynarmic_32::LoadContext(const ThreadContext32& ctx) { - Dynarmic::A32::Context context; - context.Regs() = ctx.cpu_registers; - context.ExtRegs() = ctx.extension_registers; - context.SetCpsr(ctx.cpsr); - context.SetFpscr(ctx.fpscr); - jit.load()->LoadContext(context); + Dynarmic::A32::Jit* j = jit.load(); + j->Regs() = ctx.cpu_registers; + j->ExtRegs() = ctx.extension_registers; + j->SetCpsr(ctx.cpsr); + j->SetFpscr(ctx.fpscr); } void ARM_Dynarmic_32::SignalInterrupt() { @@ -439,7 +436,7 @@ void ARM_Dynarmic_32::ClearInstructionCache() { jit.load()->ClearCache(); } -void ARM_Dynarmic_32::InvalidateCacheRange(VAddr addr, std::size_t size) { +void ARM_Dynarmic_32::InvalidateCacheRange(u64 addr, std::size_t size) { jit.load()->InvalidateCacheRange(static_cast<u32>(addr), size); } @@ -468,7 +465,7 @@ void ARM_Dynarmic_32::PageTableChanged(Common::PageTable& page_table, std::vector<ARM_Interface::BacktraceEntry> ARM_Dynarmic_32::GetBacktrace(Core::System& system, u64 fp, u64 lr, u64 pc) { std::vector<BacktraceEntry> out; - auto& memory = system.Memory(); + auto& memory = system.ApplicationMemory(); out.push_back({"", 0, pc, 0, ""}); diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.h b/src/core/arm/dynarmic/arm_dynarmic_32.h index d24ba2289..bce695daf 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.h +++ b/src/core/arm/dynarmic/arm_dynarmic_32.h @@ -41,8 +41,8 @@ public: void SetVectorReg(int index, u128 value) override; u32 GetPSTATE() const override; void SetPSTATE(u32 pstate) override; - VAddr GetTlsAddress() const override; - void SetTlsAddress(VAddr address) override; + u64 GetTlsAddress() const override; + void SetTlsAddress(u64 address) override; void SetTPIDR_EL0(u64 value) override; u64 GetTPIDR_EL0() const override; @@ -60,7 +60,7 @@ public: void ClearExclusiveState() override; void ClearInstructionCache() override; - void InvalidateCacheRange(VAddr addr, std::size_t size) override; + void InvalidateCacheRange(u64 addr, std::size_t size) override; void PageTableChanged(Common::PageTable& new_page_table, std::size_t new_address_space_size_in_bits) override; diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.cpp b/src/core/arm/dynarmic/arm_dynarmic_64.cpp index 7229fdc2a..bbbcb4f9d 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_64.cpp @@ -28,8 +28,8 @@ using namespace Common::Literals; class DynarmicCallbacks64 : public Dynarmic::A64::UserCallbacks { public: explicit DynarmicCallbacks64(ARM_Dynarmic_64& parent_) - : parent{parent_}, - memory(parent.system.Memory()), debugger_enabled{parent.system.DebuggerEnabled()}, + : parent{parent_}, memory(parent.system.ApplicationMemory()), + debugger_enabled{parent.system.DebuggerEnabled()}, check_memory_access{debugger_enabled || !Settings::values.cpuopt_ignore_memory_aborts.GetValue()} {} @@ -117,7 +117,7 @@ public: } void InstructionCacheOperationRaised(Dynarmic::A64::InstructionCacheOperation op, - VAddr value) override { + u64 value) override { switch (op) { case Dynarmic::A64::InstructionCacheOperation::InvalidateByVAToPoU: { static constexpr u64 ICACHE_LINE_SIZE = 64; @@ -199,7 +199,7 @@ public: return parent.system.CoreTiming().GetClockTicks(); } - bool CheckMemoryAccess(VAddr addr, u64 size, Kernel::DebugWatchpointType type) { + bool CheckMemoryAccess(u64 addr, u64 size, Kernel::DebugWatchpointType type) { if (!check_memory_access) { return true; } @@ -452,7 +452,7 @@ u64 ARM_Dynarmic_64::GetTlsAddress() const { return cb->tpidrro_el0; } -void ARM_Dynarmic_64::SetTlsAddress(VAddr address) { +void ARM_Dynarmic_64::SetTlsAddress(u64 address) { cb->tpidrro_el0 = address; } @@ -500,7 +500,7 @@ void ARM_Dynarmic_64::ClearInstructionCache() { jit.load()->ClearCache(); } -void ARM_Dynarmic_64::InvalidateCacheRange(VAddr addr, std::size_t size) { +void ARM_Dynarmic_64::InvalidateCacheRange(u64 addr, std::size_t size) { jit.load()->InvalidateCacheRange(addr, size); } @@ -529,7 +529,7 @@ void ARM_Dynarmic_64::PageTableChanged(Common::PageTable& page_table, std::vector<ARM_Interface::BacktraceEntry> ARM_Dynarmic_64::GetBacktrace(Core::System& system, u64 fp, u64 lr, u64 pc) { std::vector<BacktraceEntry> out; - auto& memory = system.Memory(); + auto& memory = system.ApplicationMemory(); out.push_back({"", 0, pc, 0, ""}); diff --git a/src/core/arm/dynarmic/arm_dynarmic_64.h b/src/core/arm/dynarmic/arm_dynarmic_64.h index ed1a5eb96..e83599e82 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_64.h +++ b/src/core/arm/dynarmic/arm_dynarmic_64.h @@ -38,8 +38,8 @@ public: void SetVectorReg(int index, u128 value) override; u32 GetPSTATE() const override; void SetPSTATE(u32 pstate) override; - VAddr GetTlsAddress() const override; - void SetTlsAddress(VAddr address) override; + u64 GetTlsAddress() const override; + void SetTlsAddress(u64 address) override; void SetTPIDR_EL0(u64 value) override; u64 GetTPIDR_EL0() const override; @@ -53,7 +53,7 @@ public: void ClearExclusiveState() override; void ClearInstructionCache() override; - void InvalidateCacheRange(VAddr addr, std::size_t size) override; + void InvalidateCacheRange(u64 addr, std::size_t size) override; void PageTableChanged(Common::PageTable& new_page_table, std::size_t new_address_space_size_in_bits) override; diff --git a/src/core/core.cpp b/src/core/core.cpp index d2b597068..caa6a77be 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -293,6 +293,7 @@ struct System::Impl { ASSERT(Kernel::KProcess::Initialize(main_process, system, "main", Kernel::KProcess::ProcessType::Userland, resource_limit) .IsSuccess()); + kernel.MakeApplicationProcess(main_process); const auto [load_result, load_parameters] = app_loader->Load(*main_process, system); if (load_result != Loader::ResultStatus::Success) { LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result); @@ -302,7 +303,6 @@ struct System::Impl { static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result)); } AddGlueRegistrationForProcess(*app_loader, *main_process); - kernel.MakeApplicationProcess(main_process); kernel.InitializeCores(); // Initialize cheat engine @@ -564,7 +564,7 @@ void System::InvalidateCpuInstructionCaches() { impl->kernel.InvalidateAllInstructionCaches(); } -void System::InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size) { +void System::InvalidateCpuInstructionCacheRange(u64 addr, std::size_t size) { impl->kernel.InvalidateCpuInstructionCacheRange(addr, size); } @@ -681,11 +681,11 @@ const ExclusiveMonitor& System::Monitor() const { return impl->kernel.GetExclusiveMonitor(); } -Memory::Memory& System::Memory() { +Memory::Memory& System::ApplicationMemory() { return impl->memory; } -const Core::Memory::Memory& System::Memory() const { +const Core::Memory::Memory& System::ApplicationMemory() const { return impl->memory; } @@ -794,7 +794,7 @@ FileSys::VirtualFilesystem System::GetFilesystem() const { } void System::RegisterCheatList(const std::vector<Memory::CheatEntry>& list, - const std::array<u8, 32>& build_id, VAddr main_region_begin, + const std::array<u8, 32>& build_id, u64 main_region_begin, u64 main_region_size) { impl->cheat_engine = std::make_unique<Memory::CheatEngine>(*this, list, build_id); impl->cheat_engine->SetMainMemoryParameters(main_region_begin, main_region_size); diff --git a/src/core/core.h b/src/core/core.h index 5843696d4..4a5aba032 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -172,7 +172,7 @@ public: */ void InvalidateCpuInstructionCaches(); - void InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size); + void InvalidateCpuInstructionCacheRange(u64 addr, std::size_t size); /// Shutdown the main emulated process. void ShutdownMainProcess(); @@ -256,10 +256,10 @@ public: [[nodiscard]] const ExclusiveMonitor& Monitor() const; /// Gets a mutable reference to the system memory instance. - [[nodiscard]] Core::Memory::Memory& Memory(); + [[nodiscard]] Core::Memory::Memory& ApplicationMemory(); /// Gets a constant reference to the system memory instance. - [[nodiscard]] const Core::Memory::Memory& Memory() const; + [[nodiscard]] const Core::Memory::Memory& ApplicationMemory() const; /// Gets a mutable reference to the GPU interface [[nodiscard]] Tegra::GPU& GPU(); @@ -353,7 +353,7 @@ public: [[nodiscard]] FileSys::VirtualFilesystem GetFilesystem() const; void RegisterCheatList(const std::vector<Memory::CheatEntry>& list, - const std::array<u8, 0x20>& build_id, VAddr main_region_begin, + const std::array<u8, 0x20>& build_id, u64 main_region_begin, u64 main_region_size); void SetAppletFrontendSet(Service::AM::Applets::AppletFrontendSet&& set); diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index cd4df4522..4f2692b05 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp @@ -10,6 +10,10 @@ #include "common/windows/timer_resolution.h" #endif +#ifdef ARCHITECTURE_x86_64 +#include "common/x64/cpu_wait.h" +#endif + #include "common/microprofile.h" #include "core/core_timing.h" #include "core/core_timing_util.h" @@ -269,7 +273,11 @@ void CoreTiming::ThreadLoop() { if (wait_time >= timer_resolution_ns) { Common::Windows::SleepForOneTick(); } else { +#ifdef ARCHITECTURE_x86_64 + Common::X64::MicroSleep(); +#else std::this_thread::yield(); +#endif } } diff --git a/src/core/debugger/gdbstub.cpp b/src/core/debugger/gdbstub.cpp index b2fe6bd7d..e2a13bbd2 100644 --- a/src/core/debugger/gdbstub.cpp +++ b/src/core/debugger/gdbstub.cpp @@ -118,14 +118,14 @@ void GDBStub::Watchpoint(Kernel::KThread* thread, const Kernel::DebugWatchpoint& switch (watch.type) { case Kernel::DebugWatchpointType::Read: - SendReply(fmt::format("{}rwatch:{:x};", status, watch.start_address)); + SendReply(fmt::format("{}rwatch:{:x};", status, GetInteger(watch.start_address))); break; case Kernel::DebugWatchpointType::Write: - SendReply(fmt::format("{}watch:{:x};", status, watch.start_address)); + SendReply(fmt::format("{}watch:{:x};", status, GetInteger(watch.start_address))); break; case Kernel::DebugWatchpointType::ReadOrWrite: default: - SendReply(fmt::format("{}awatch:{:x};", status, watch.start_address)); + SendReply(fmt::format("{}awatch:{:x};", status, GetInteger(watch.start_address))); break; } } @@ -261,9 +261,9 @@ void GDBStub::ExecuteCommand(std::string_view packet, std::vector<DebuggerAction const size_t addr{static_cast<size_t>(strtoll(command.data(), nullptr, 16))}; const size_t size{static_cast<size_t>(strtoll(command.data() + sep, nullptr, 16))}; - if (system.Memory().IsValidVirtualAddressRange(addr, size)) { + if (system.ApplicationMemory().IsValidVirtualAddressRange(addr, size)) { std::vector<u8> mem(size); - system.Memory().ReadBlock(addr, mem.data(), size); + system.ApplicationMemory().ReadBlock(addr, mem.data(), size); SendReply(Common::HexToString(mem)); } else { @@ -281,8 +281,8 @@ void GDBStub::ExecuteCommand(std::string_view packet, std::vector<DebuggerAction const auto mem_substr{std::string_view(command).substr(mem_sep)}; const auto mem{Common::HexStringToVector(mem_substr, false)}; - if (system.Memory().IsValidVirtualAddressRange(addr, size)) { - system.Memory().WriteBlock(addr, mem.data(), size); + if (system.ApplicationMemory().IsValidVirtualAddressRange(addr, size)) { + system.ApplicationMemory().WriteBlock(addr, mem.data(), size); system.InvalidateCpuInstructionCacheRange(addr, size); SendReply(GDB_STUB_REPLY_OK); } else { @@ -325,7 +325,7 @@ void GDBStub::HandleBreakpointInsert(std::string_view command) { const size_t addr{static_cast<size_t>(strtoll(command.data() + addr_sep, nullptr, 16))}; const size_t size{static_cast<size_t>(strtoll(command.data() + size_sep, nullptr, 16))}; - if (!system.Memory().IsValidVirtualAddressRange(addr, size)) { + if (!system.ApplicationMemory().IsValidVirtualAddressRange(addr, size)) { SendReply(GDB_STUB_REPLY_ERR); return; } @@ -334,22 +334,22 @@ void GDBStub::HandleBreakpointInsert(std::string_view command) { switch (type) { case BreakpointType::Software: - replaced_instructions[addr] = system.Memory().Read32(addr); - system.Memory().Write32(addr, arch->BreakpointInstruction()); + replaced_instructions[addr] = system.ApplicationMemory().Read32(addr); + system.ApplicationMemory().Write32(addr, arch->BreakpointInstruction()); system.InvalidateCpuInstructionCacheRange(addr, sizeof(u32)); success = true; break; case BreakpointType::WriteWatch: - success = system.ApplicationProcess()->InsertWatchpoint(system, addr, size, + success = system.ApplicationProcess()->InsertWatchpoint(addr, size, Kernel::DebugWatchpointType::Write); break; case BreakpointType::ReadWatch: - success = system.ApplicationProcess()->InsertWatchpoint(system, addr, size, + success = system.ApplicationProcess()->InsertWatchpoint(addr, size, Kernel::DebugWatchpointType::Read); break; case BreakpointType::AccessWatch: success = system.ApplicationProcess()->InsertWatchpoint( - system, addr, size, Kernel::DebugWatchpointType::ReadOrWrite); + addr, size, Kernel::DebugWatchpointType::ReadOrWrite); break; case BreakpointType::Hardware: default: @@ -372,7 +372,7 @@ void GDBStub::HandleBreakpointRemove(std::string_view command) { const size_t addr{static_cast<size_t>(strtoll(command.data() + addr_sep, nullptr, 16))}; const size_t size{static_cast<size_t>(strtoll(command.data() + size_sep, nullptr, 16))}; - if (!system.Memory().IsValidVirtualAddressRange(addr, size)) { + if (!system.ApplicationMemory().IsValidVirtualAddressRange(addr, size)) { SendReply(GDB_STUB_REPLY_ERR); return; } @@ -383,7 +383,7 @@ void GDBStub::HandleBreakpointRemove(std::string_view command) { case BreakpointType::Software: { const auto orig_insn{replaced_instructions.find(addr)}; if (orig_insn != replaced_instructions.end()) { - system.Memory().Write32(addr, orig_insn->second); + system.ApplicationMemory().Write32(addr, orig_insn->second); system.InvalidateCpuInstructionCacheRange(addr, sizeof(u32)); replaced_instructions.erase(addr); success = true; @@ -391,16 +391,16 @@ void GDBStub::HandleBreakpointRemove(std::string_view command) { break; } case BreakpointType::WriteWatch: - success = system.ApplicationProcess()->RemoveWatchpoint(system, addr, size, + success = system.ApplicationProcess()->RemoveWatchpoint(addr, size, Kernel::DebugWatchpointType::Write); break; case BreakpointType::ReadWatch: - success = system.ApplicationProcess()->RemoveWatchpoint(system, addr, size, + success = system.ApplicationProcess()->RemoveWatchpoint(addr, size, Kernel::DebugWatchpointType::Read); break; case BreakpointType::AccessWatch: success = system.ApplicationProcess()->RemoveWatchpoint( - system, addr, size, Kernel::DebugWatchpointType::ReadOrWrite); + addr, size, Kernel::DebugWatchpointType::ReadOrWrite); break; case BreakpointType::Hardware: default: @@ -483,9 +483,9 @@ static std::optional<std::string> GetNameFromThreadType64(Core::Memory::Memory& static std::optional<std::string> GetThreadName(Core::System& system, const Kernel::KThread* thread) { if (system.ApplicationProcess()->Is64BitProcess()) { - return GetNameFromThreadType64(system.Memory(), thread); + return GetNameFromThreadType64(system.ApplicationMemory(), thread); } else { - return GetNameFromThreadType32(system.Memory(), thread); + return GetNameFromThreadType32(system.ApplicationMemory(), thread); } } @@ -554,8 +554,9 @@ void GDBStub::HandleQuery(std::string_view command) { if (main != modules.end()) { SendReply(fmt::format("TextSeg={:x}", main->first)); } else { - SendReply(fmt::format("TextSeg={:x}", - system.ApplicationProcess()->PageTable().GetCodeRegionStart())); + SendReply(fmt::format( + "TextSeg={:x}", + GetInteger(system.ApplicationProcess()->PageTable().GetCodeRegionStart()))); } } else if (command.starts_with("Xfer:libraries:read::")) { Loader::AppLoader::Modules modules; @@ -757,17 +758,20 @@ void GDBStub::HandleRcmd(const std::vector<u8>& command) { reply = fmt::format("Process: {:#x} ({})\n" "Program Id: {:#018x}\n", process->GetProcessId(), process->GetName(), process->GetProgramId()); - reply += - fmt::format("Layout:\n" - " Alias: {:#012x} - {:#012x}\n" - " Heap: {:#012x} - {:#012x}\n" - " Aslr: {:#012x} - {:#012x}\n" - " Stack: {:#012x} - {:#012x}\n" - "Modules:\n", - page_table.GetAliasRegionStart(), page_table.GetAliasRegionEnd(), - page_table.GetHeapRegionStart(), page_table.GetHeapRegionEnd(), - page_table.GetAliasCodeRegionStart(), page_table.GetAliasCodeRegionEnd(), - page_table.GetStackRegionStart(), page_table.GetStackRegionEnd()); + reply += fmt::format("Layout:\n" + " Alias: {:#012x} - {:#012x}\n" + " Heap: {:#012x} - {:#012x}\n" + " Aslr: {:#012x} - {:#012x}\n" + " Stack: {:#012x} - {:#012x}\n" + "Modules:\n", + GetInteger(page_table.GetAliasRegionStart()), + GetInteger(page_table.GetAliasRegionEnd()), + GetInteger(page_table.GetHeapRegionStart()), + GetInteger(page_table.GetHeapRegionEnd()), + GetInteger(page_table.GetAliasCodeRegionStart()), + GetInteger(page_table.GetAliasCodeRegionEnd()), + GetInteger(page_table.GetStackRegionStart()), + GetInteger(page_table.GetStackRegionEnd())); for (const auto& [vaddr, name] : modules) { reply += fmt::format(" {:#012x} - {:#012x} {}\n", vaddr, diff --git a/src/core/device_memory.h b/src/core/device_memory.h index 90510733c..13388b73e 100644 --- a/src/core/device_memory.h +++ b/src/core/device_memory.h @@ -3,8 +3,8 @@ #pragma once -#include "common/common_types.h" #include "common/host_memory.h" +#include "common/typed_address.h" namespace Core { @@ -25,20 +25,22 @@ public: DeviceMemory(const DeviceMemory&) = delete; template <typename T> - PAddr GetPhysicalAddr(const T* ptr) const { + Common::PhysicalAddress GetPhysicalAddr(const T* ptr) const { return (reinterpret_cast<uintptr_t>(ptr) - reinterpret_cast<uintptr_t>(buffer.BackingBasePointer())) + DramMemoryMap::Base; } template <typename T> - T* GetPointer(PAddr addr) { - return reinterpret_cast<T*>(buffer.BackingBasePointer() + (addr - DramMemoryMap::Base)); + T* GetPointer(Common::PhysicalAddress addr) { + return reinterpret_cast<T*>(buffer.BackingBasePointer() + + (GetInteger(addr) - DramMemoryMap::Base)); } template <typename T> - const T* GetPointer(PAddr addr) const { - return reinterpret_cast<T*>(buffer.BackingBasePointer() + (addr - DramMemoryMap::Base)); + const T* GetPointer(Common::PhysicalAddress addr) const { + return reinterpret_cast<T*>(buffer.BackingBasePointer() + + (GetInteger(addr) - DramMemoryMap::Base)); } Common::HostMemory buffer; diff --git a/src/core/frontend/applets/applet.h b/src/core/frontend/applets/applet.h new file mode 100644 index 000000000..77fffe306 --- /dev/null +++ b/src/core/frontend/applets/applet.h @@ -0,0 +1,14 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +namespace Core::Frontend { + +class Applet { +public: + virtual ~Applet() = default; + virtual void Close() const = 0; +}; + +} // namespace Core::Frontend diff --git a/src/core/frontend/applets/cabinet.cpp b/src/core/frontend/applets/cabinet.cpp index 26c7fefe3..2d501eeae 100644 --- a/src/core/frontend/applets/cabinet.cpp +++ b/src/core/frontend/applets/cabinet.cpp @@ -10,6 +10,8 @@ namespace Core::Frontend { CabinetApplet::~CabinetApplet() = default; +void DefaultCabinetApplet::Close() const {} + void DefaultCabinetApplet::ShowCabinetApplet( const CabinetCallback& callback, const CabinetParameters& parameters, std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const { diff --git a/src/core/frontend/applets/cabinet.h b/src/core/frontend/applets/cabinet.h index c28a235c1..74dc5a4f6 100644 --- a/src/core/frontend/applets/cabinet.h +++ b/src/core/frontend/applets/cabinet.h @@ -4,6 +4,7 @@ #pragma once #include <functional> +#include "core/frontend/applets/applet.h" #include "core/hle/service/nfp/nfp_types.h" namespace Service::NFP { @@ -20,7 +21,7 @@ struct CabinetParameters { using CabinetCallback = std::function<void(bool, const std::string&)>; -class CabinetApplet { +class CabinetApplet : public Applet { public: virtual ~CabinetApplet(); virtual void ShowCabinetApplet(const CabinetCallback& callback, @@ -30,6 +31,7 @@ public: class DefaultCabinetApplet final : public CabinetApplet { public: + void Close() const override; void ShowCabinetApplet(const CabinetCallback& callback, const CabinetParameters& parameters, std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const override; }; diff --git a/src/core/frontend/applets/controller.cpp b/src/core/frontend/applets/controller.cpp index 52919484e..3300d4f79 100644 --- a/src/core/frontend/applets/controller.cpp +++ b/src/core/frontend/applets/controller.cpp @@ -16,6 +16,8 @@ DefaultControllerApplet::DefaultControllerApplet(HID::HIDCore& hid_core_) : hid_ DefaultControllerApplet::~DefaultControllerApplet() = default; +void DefaultControllerApplet::Close() const {} + void DefaultControllerApplet::ReconfigureControllers(ReconfigureCallback callback, const ControllerParameters& parameters) const { LOG_INFO(Service_HID, "called, deducing the best configuration based on the given parameters!"); @@ -69,7 +71,7 @@ void DefaultControllerApplet::ReconfigureControllers(ReconfigureCallback callbac } } - callback(); + callback(true); } } // namespace Core::Frontend diff --git a/src/core/frontend/applets/controller.h b/src/core/frontend/applets/controller.h index adb2feefd..19a2db6bf 100644 --- a/src/core/frontend/applets/controller.h +++ b/src/core/frontend/applets/controller.h @@ -7,6 +7,7 @@ #include <vector> #include "common/common_types.h" +#include "core/frontend/applets/applet.h" namespace Core::HID { class HIDCore; @@ -34,9 +35,9 @@ struct ControllerParameters { bool allow_gamecube_controller{}; }; -class ControllerApplet { +class ControllerApplet : public Applet { public: - using ReconfigureCallback = std::function<void()>; + using ReconfigureCallback = std::function<void(bool)>; virtual ~ControllerApplet(); @@ -49,6 +50,7 @@ public: explicit DefaultControllerApplet(HID::HIDCore& hid_core_); ~DefaultControllerApplet() override; + void Close() const override; void ReconfigureControllers(ReconfigureCallback callback, const ControllerParameters& parameters) const override; diff --git a/src/core/frontend/applets/error.cpp b/src/core/frontend/applets/error.cpp index 69c2b2b4d..2e6f7a3d9 100644 --- a/src/core/frontend/applets/error.cpp +++ b/src/core/frontend/applets/error.cpp @@ -8,6 +8,8 @@ namespace Core::Frontend { ErrorApplet::~ErrorApplet() = default; +void DefaultErrorApplet::Close() const {} + void DefaultErrorApplet::ShowError(Result error, FinishedCallback finished) const { LOG_CRITICAL(Service_Fatal, "Application requested error display: {:04}-{:04} (raw={:08X})", error.module.Value(), error.description.Value(), error.raw); diff --git a/src/core/frontend/applets/error.h b/src/core/frontend/applets/error.h index 884f2f653..3a12196ce 100644 --- a/src/core/frontend/applets/error.h +++ b/src/core/frontend/applets/error.h @@ -6,11 +6,12 @@ #include <chrono> #include <functional> +#include "core/frontend/applets/applet.h" #include "core/hle/result.h" namespace Core::Frontend { -class ErrorApplet { +class ErrorApplet : public Applet { public: using FinishedCallback = std::function<void()>; @@ -28,6 +29,7 @@ public: class DefaultErrorApplet final : public ErrorApplet { public: + void Close() const override; void ShowError(Result error, FinishedCallback finished) const override; void ShowErrorWithTimestamp(Result error, std::chrono::seconds time, FinishedCallback finished) const override; diff --git a/src/core/frontend/applets/general_frontend.cpp b/src/core/frontend/applets/general_frontend.cpp index 29a00fb6f..b4b213a31 100644 --- a/src/core/frontend/applets/general_frontend.cpp +++ b/src/core/frontend/applets/general_frontend.cpp @@ -10,6 +10,8 @@ ParentalControlsApplet::~ParentalControlsApplet() = default; DefaultParentalControlsApplet::~DefaultParentalControlsApplet() = default; +void DefaultParentalControlsApplet::Close() const {} + void DefaultParentalControlsApplet::VerifyPIN(std::function<void(bool)> finished, bool suspend_future_verification_temporarily) { LOG_INFO(Service_AM, @@ -39,6 +41,8 @@ PhotoViewerApplet::~PhotoViewerApplet() = default; DefaultPhotoViewerApplet::~DefaultPhotoViewerApplet() = default; +void DefaultPhotoViewerApplet::Close() const {} + void DefaultPhotoViewerApplet::ShowPhotosForApplication(u64 title_id, std::function<void()> finished) const { LOG_INFO(Service_AM, diff --git a/src/core/frontend/applets/general_frontend.h b/src/core/frontend/applets/general_frontend.h index cbec8b4ad..319838ac7 100644 --- a/src/core/frontend/applets/general_frontend.h +++ b/src/core/frontend/applets/general_frontend.h @@ -6,9 +6,11 @@ #include <functional> #include "common/common_types.h" +#include "core/frontend/applets/applet.h" + namespace Core::Frontend { -class ParentalControlsApplet { +class ParentalControlsApplet : public Applet { public: virtual ~ParentalControlsApplet(); @@ -33,6 +35,7 @@ class DefaultParentalControlsApplet final : public ParentalControlsApplet { public: ~DefaultParentalControlsApplet() override; + void Close() const override; void VerifyPIN(std::function<void(bool)> finished, bool suspend_future_verification_temporarily) override; void VerifyPINForSettings(std::function<void(bool)> finished) override; @@ -40,7 +43,7 @@ public: void ChangePIN(std::function<void()> finished) override; }; -class PhotoViewerApplet { +class PhotoViewerApplet : public Applet { public: virtual ~PhotoViewerApplet(); @@ -52,6 +55,7 @@ class DefaultPhotoViewerApplet final : public PhotoViewerApplet { public: ~DefaultPhotoViewerApplet() override; + void Close() const override; void ShowPhotosForApplication(u64 title_id, std::function<void()> finished) const override; void ShowAllPhotos(std::function<void()> finished) const override; }; diff --git a/src/core/frontend/applets/mii_edit.cpp b/src/core/frontend/applets/mii_edit.cpp index bc8c57067..2988c3e72 100644 --- a/src/core/frontend/applets/mii_edit.cpp +++ b/src/core/frontend/applets/mii_edit.cpp @@ -8,6 +8,8 @@ namespace Core::Frontend { MiiEditApplet::~MiiEditApplet() = default; +void DefaultMiiEditApplet::Close() const {} + void DefaultMiiEditApplet::ShowMiiEdit(const MiiEditCallback& callback) const { LOG_WARNING(Service_AM, "(STUBBED) called"); diff --git a/src/core/frontend/applets/mii_edit.h b/src/core/frontend/applets/mii_edit.h index d828f06ec..9d86ee658 100644 --- a/src/core/frontend/applets/mii_edit.h +++ b/src/core/frontend/applets/mii_edit.h @@ -5,9 +5,11 @@ #include <functional> +#include "core/frontend/applets/applet.h" + namespace Core::Frontend { -class MiiEditApplet { +class MiiEditApplet : public Applet { public: using MiiEditCallback = std::function<void()>; @@ -18,6 +20,7 @@ public: class DefaultMiiEditApplet final : public MiiEditApplet { public: + void Close() const override; void ShowMiiEdit(const MiiEditCallback& callback) const override; }; diff --git a/src/core/frontend/applets/profile_select.cpp b/src/core/frontend/applets/profile_select.cpp index da4cfbf87..c18f17a36 100644 --- a/src/core/frontend/applets/profile_select.cpp +++ b/src/core/frontend/applets/profile_select.cpp @@ -9,7 +9,10 @@ namespace Core::Frontend { ProfileSelectApplet::~ProfileSelectApplet() = default; -void DefaultProfileSelectApplet::SelectProfile(SelectProfileCallback callback) const { +void DefaultProfileSelectApplet::Close() const {} + +void DefaultProfileSelectApplet::SelectProfile(SelectProfileCallback callback, + const ProfileSelectParameters& parameters) const { Service::Account::ProfileManager manager; callback(manager.GetUser(Settings::values.current_user.GetValue()).value_or(Common::UUID{})); LOG_INFO(Service_ACC, "called, selecting current user instead of prompting..."); diff --git a/src/core/frontend/applets/profile_select.h b/src/core/frontend/applets/profile_select.h index 138429533..92e2737ea 100644 --- a/src/core/frontend/applets/profile_select.h +++ b/src/core/frontend/applets/profile_select.h @@ -5,22 +5,35 @@ #include <functional> #include <optional> + #include "common/uuid.h" +#include "core/frontend/applets/applet.h" +#include "core/hle/service/am/applets/applet_profile_select.h" namespace Core::Frontend { -class ProfileSelectApplet { +struct ProfileSelectParameters { + Service::AM::Applets::UiMode mode; + std::array<Common::UUID, 8> invalid_uid_list; + Service::AM::Applets::UiSettingsDisplayOptions display_options; + Service::AM::Applets::UserSelectionPurpose purpose; +}; + +class ProfileSelectApplet : public Applet { public: using SelectProfileCallback = std::function<void(std::optional<Common::UUID>)>; virtual ~ProfileSelectApplet(); - virtual void SelectProfile(SelectProfileCallback callback) const = 0; + virtual void SelectProfile(SelectProfileCallback callback, + const ProfileSelectParameters& parameters) const = 0; }; class DefaultProfileSelectApplet final : public ProfileSelectApplet { public: - void SelectProfile(SelectProfileCallback callback) const override; + void Close() const override; + void SelectProfile(SelectProfileCallback callback, + const ProfileSelectParameters& parameters) const override; }; } // namespace Core::Frontend diff --git a/src/core/frontend/applets/software_keyboard.cpp b/src/core/frontend/applets/software_keyboard.cpp index a3720f4d7..7655d215b 100644 --- a/src/core/frontend/applets/software_keyboard.cpp +++ b/src/core/frontend/applets/software_keyboard.cpp @@ -13,6 +13,8 @@ SoftwareKeyboardApplet::~SoftwareKeyboardApplet() = default; DefaultSoftwareKeyboardApplet::~DefaultSoftwareKeyboardApplet() = default; +void DefaultSoftwareKeyboardApplet::Close() const {} + void DefaultSoftwareKeyboardApplet::InitializeKeyboard( bool is_inline, KeyboardInitializeParameters initialize_parameters, SubmitNormalCallback submit_normal_callback_, SubmitInlineCallback submit_inline_callback_) { diff --git a/src/core/frontend/applets/software_keyboard.h b/src/core/frontend/applets/software_keyboard.h index 8aef103d3..8ed96da24 100644 --- a/src/core/frontend/applets/software_keyboard.h +++ b/src/core/frontend/applets/software_keyboard.h @@ -7,6 +7,7 @@ #include "common/common_types.h" +#include "core/frontend/applets/applet.h" #include "core/hle/service/am/applets/applet_software_keyboard_types.h" namespace Core::Frontend { @@ -52,7 +53,7 @@ struct InlineTextParameters { s32 cursor_position; }; -class SoftwareKeyboardApplet { +class SoftwareKeyboardApplet : public Applet { public: using SubmitInlineCallback = std::function<void(Service::AM::Applets::SwkbdReplyType, std::u16string, s32)>; @@ -84,6 +85,8 @@ class DefaultSoftwareKeyboardApplet final : public SoftwareKeyboardApplet { public: ~DefaultSoftwareKeyboardApplet() override; + void Close() const override; + void InitializeKeyboard(bool is_inline, KeyboardInitializeParameters initialize_parameters, SubmitNormalCallback submit_normal_callback_, SubmitInlineCallback submit_inline_callback_) override; diff --git a/src/core/frontend/applets/web_browser.cpp b/src/core/frontend/applets/web_browser.cpp index b09cb7102..6e703ef06 100644 --- a/src/core/frontend/applets/web_browser.cpp +++ b/src/core/frontend/applets/web_browser.cpp @@ -10,6 +10,8 @@ WebBrowserApplet::~WebBrowserApplet() = default; DefaultWebBrowserApplet::~DefaultWebBrowserApplet() = default; +void DefaultWebBrowserApplet::Close() const {} + void DefaultWebBrowserApplet::OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback, OpenWebPageCallback callback) const { diff --git a/src/core/frontend/applets/web_browser.h b/src/core/frontend/applets/web_browser.h index 4f72284ad..178bbdd3f 100644 --- a/src/core/frontend/applets/web_browser.h +++ b/src/core/frontend/applets/web_browser.h @@ -5,11 +5,12 @@ #include <functional> +#include "core/frontend/applets/applet.h" #include "core/hle/service/am/applets/applet_web_browser_types.h" namespace Core::Frontend { -class WebBrowserApplet { +class WebBrowserApplet : public Applet { public: using ExtractROMFSCallback = std::function<void()>; using OpenWebPageCallback = @@ -29,6 +30,8 @@ class DefaultWebBrowserApplet final : public WebBrowserApplet { public: ~DefaultWebBrowserApplet() override; + void Close() const override; + void OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback, OpenWebPageCallback callback) const override; diff --git a/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.cpp b/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.cpp index 098ba6eac..24eb3f886 100644 --- a/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.cpp +++ b/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.cpp @@ -76,22 +76,24 @@ void SetupDevicePhysicalMemoryRegions(KMemoryLayout& memory_layout) { void SetupDramPhysicalMemoryRegions(KMemoryLayout& memory_layout) { const size_t intended_memory_size = KSystemControl::Init::GetIntendedMemorySize(); - const PAddr physical_memory_base_address = + const KPhysicalAddress physical_memory_base_address = KSystemControl::Init::GetKernelPhysicalBaseAddress(DramPhysicalAddress); // Insert blocks into the tree. ASSERT(memory_layout.GetPhysicalMemoryRegionTree().Insert( - physical_memory_base_address, intended_memory_size, KMemoryRegionType_Dram)); + GetInteger(physical_memory_base_address), intended_memory_size, KMemoryRegionType_Dram)); ASSERT(memory_layout.GetPhysicalMemoryRegionTree().Insert( - physical_memory_base_address, ReservedEarlyDramSize, KMemoryRegionType_DramReservedEarly)); + GetInteger(physical_memory_base_address), ReservedEarlyDramSize, + KMemoryRegionType_DramReservedEarly)); // Insert the KTrace block at the end of Dram, if KTrace is enabled. static_assert(!IsKTraceEnabled || KTraceBufferSize > 0); if constexpr (IsKTraceEnabled) { - const PAddr ktrace_buffer_phys_addr = + const KPhysicalAddress ktrace_buffer_phys_addr = physical_memory_base_address + intended_memory_size - KTraceBufferSize; ASSERT(memory_layout.GetPhysicalMemoryRegionTree().Insert( - ktrace_buffer_phys_addr, KTraceBufferSize, KMemoryRegionType_KernelTraceBuffer)); + GetInteger(ktrace_buffer_phys_addr), KTraceBufferSize, + KMemoryRegionType_KernelTraceBuffer)); } } diff --git a/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.h b/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.h index d02ee61c3..f8fee4f5b 100644 --- a/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.h +++ b/src/core/hle/kernel/board/nintendo/nx/k_memory_layout.h @@ -3,10 +3,10 @@ #pragma once -#include "common/common_types.h" +#include "core/hle/kernel/k_typed_address.h" namespace Kernel { -constexpr inline PAddr MainMemoryAddress = 0x80000000; +constexpr inline KPhysicalAddress MainMemoryAddress = 0x80000000; } // namespace Kernel diff --git a/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp b/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp index 5b8a248c8..36d0d20d2 100644 --- a/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp +++ b/src/core/hle/kernel/board/nintendo/nx/k_system_control.cpp @@ -35,11 +35,11 @@ namespace { using namespace Common::Literals; u32 GetMemorySizeForInit() { - return Settings::values.use_extended_memory_layout ? Smc::MemorySize_6GB : Smc::MemorySize_4GB; + return Settings::values.use_extended_memory_layout ? Smc::MemorySize_8GB : Smc::MemorySize_4GB; } Smc::MemoryArrangement GetMemoryArrangeForInit() { - return Settings::values.use_extended_memory_layout ? Smc::MemoryArrangement_6GB + return Settings::values.use_extended_memory_layout ? Smc::MemoryArrangement_8GB : Smc::MemoryArrangement_4GB; } } // namespace @@ -61,7 +61,7 @@ size_t KSystemControl::Init::GetIntendedMemorySize() { } } -PAddr KSystemControl::Init::GetKernelPhysicalBaseAddress(u64 base_address) { +KPhysicalAddress KSystemControl::Init::GetKernelPhysicalBaseAddress(KPhysicalAddress base_address) { const size_t real_dram_size = KSystemControl::Init::GetRealMemorySize(); const size_t intended_dram_size = KSystemControl::Init::GetIntendedMemorySize(); if (intended_dram_size * 2 < real_dram_size) { @@ -91,7 +91,8 @@ std::size_t KSystemControl::Init::GetApplicationPoolSize() { case Smc::MemoryArrangement_6GBForAppletDev: return 3285_MiB; case Smc::MemoryArrangement_8GB: - return 4916_MiB; + // Real kernel sets this to 4916_MiB. We are not debugging applets. + return 6547_MiB; } }(); @@ -115,7 +116,8 @@ size_t KSystemControl::Init::GetAppletPoolSize() { case Smc::MemoryArrangement_6GBForAppletDev: return 2193_MiB; case Smc::MemoryArrangement_8GB: - return 2193_MiB; + //! Real kernel sets this to 2193_MiB. We are not debugging applets. + return 562_MiB; } }(); diff --git a/src/core/hle/kernel/board/nintendo/nx/k_system_control.h b/src/core/hle/kernel/board/nintendo/nx/k_system_control.h index 4b717d091..b477e8193 100644 --- a/src/core/hle/kernel/board/nintendo/nx/k_system_control.h +++ b/src/core/hle/kernel/board/nintendo/nx/k_system_control.h @@ -3,7 +3,7 @@ #pragma once -#include "common/common_types.h" +#include "core/hle/kernel/k_typed_address.h" namespace Kernel::Board::Nintendo::Nx { @@ -18,7 +18,7 @@ public: // Initialization. static std::size_t GetRealMemorySize(); static std::size_t GetIntendedMemorySize(); - static PAddr GetKernelPhysicalBaseAddress(u64 base_address); + static KPhysicalAddress GetKernelPhysicalBaseAddress(KPhysicalAddress base_address); static bool ShouldIncreaseThreadResourceLimit(); static std::size_t GetApplicationPoolSize(); static std::size_t GetAppletPoolSize(); diff --git a/src/core/hle/kernel/code_set.h b/src/core/hle/kernel/code_set.h index 5220dbcb6..af1af2b78 100644 --- a/src/core/hle/kernel/code_set.h +++ b/src/core/hle/kernel/code_set.h @@ -5,7 +5,7 @@ #include <cstddef> -#include "common/common_types.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/physical_memory.h" namespace Kernel { @@ -36,7 +36,7 @@ struct CodeSet final { std::size_t offset = 0; /// The address to map this segment to. - VAddr addr = 0; + KProcessAddress addr = 0; /// The size of this segment in bytes. u32 size = 0; @@ -82,7 +82,7 @@ struct CodeSet final { std::array<Segment, 3> segments; /// The entry point address for this code set. - VAddr entrypoint = 0; + KProcessAddress entrypoint = 0; }; } // namespace Kernel diff --git a/src/core/hle/kernel/init/init_slab_setup.cpp b/src/core/hle/kernel/init/init_slab_setup.cpp index 5e4090e2b..1f2db673c 100644 --- a/src/core/hle/kernel/init/init_slab_setup.cpp +++ b/src/core/hle/kernel/init/init_slab_setup.cpp @@ -4,7 +4,6 @@ #include "common/alignment.h" #include "common/assert.h" #include "common/common_funcs.h" -#include "common/common_types.h" #include "core/core.h" #include "core/device_memory.h" #include "core/hardware_properties.h" @@ -30,6 +29,7 @@ #include "core/hle/kernel/k_thread.h" #include "core/hle/kernel/k_thread_local_page.h" #include "core/hle/kernel/k_transfer_memory.h" +#include "core/hle/kernel/k_typed_address.h" namespace Kernel::Init { @@ -104,17 +104,18 @@ static_assert(KernelPageBufferAdditionalSize == /// Helper function to translate from the slab virtual address to the reserved location in physical /// memory. -static PAddr TranslateSlabAddrToPhysical(KMemoryLayout& memory_layout, VAddr slab_addr) { - slab_addr -= memory_layout.GetSlabRegionAddress(); - return slab_addr + Core::DramMemoryMap::SlabHeapBase; +static KPhysicalAddress TranslateSlabAddrToPhysical(KMemoryLayout& memory_layout, + KVirtualAddress slab_addr) { + slab_addr -= GetInteger(memory_layout.GetSlabRegionAddress()); + return GetInteger(slab_addr) + Core::DramMemoryMap::SlabHeapBase; } template <typename T> -VAddr InitializeSlabHeap(Core::System& system, KMemoryLayout& memory_layout, VAddr address, - size_t num_objects) { +KVirtualAddress InitializeSlabHeap(Core::System& system, KMemoryLayout& memory_layout, + KVirtualAddress address, size_t num_objects) { const size_t size = Common::AlignUp(sizeof(T) * num_objects, alignof(void*)); - VAddr start = Common::AlignUp(address, alignof(T)); + KVirtualAddress start = Common::AlignUp(GetInteger(address), alignof(T)); // This should use the virtual memory address passed in, but currently, we do not setup the // kernel virtual memory layout. Instead, we simply map these at a region of physical memory @@ -195,7 +196,7 @@ void InitializeSlabHeaps(Core::System& system, KMemoryLayout& memory_layout) { auto& kernel = system.Kernel(); // Get the start of the slab region, since that's where we'll be working. - VAddr address = memory_layout.GetSlabRegionAddress(); + KVirtualAddress address = memory_layout.GetSlabRegionAddress(); // Initialize slab type array to be in sorted order. std::array<KSlabType, KSlabType_Count> slab_types; @@ -228,7 +229,7 @@ void InitializeSlabHeaps(Core::System& system, KMemoryLayout& memory_layout) { } // Track the gaps, so that we can free them to the unused slab tree. - VAddr gap_start = address; + KVirtualAddress gap_start = address; size_t gap_size = 0; for (size_t i = 0; i < slab_gaps.size(); i++) { @@ -280,7 +281,7 @@ void KPageBufferSlabHeap::Initialize(Core::System& system) { // Allocate memory for the slab. constexpr auto AllocateOption = KMemoryManager::EncodeOption( KMemoryManager::Pool::System, KMemoryManager::Direction::FromFront); - const PAddr slab_address = + const KPhysicalAddress slab_address = kernel.MemoryManager().AllocateAndOpenContinuous(num_pages, 1, AllocateOption); ASSERT(slab_address != 0); diff --git a/src/core/hle/kernel/initial_process.h b/src/core/hle/kernel/initial_process.h index af0fb23b6..82195f4f7 100644 --- a/src/core/hle/kernel/initial_process.h +++ b/src/core/hle/kernel/initial_process.h @@ -14,7 +14,7 @@ using namespace Common::Literals; constexpr std::size_t InitialProcessBinarySizeMax = 12_MiB; -static inline PAddr GetInitialProcessBinaryPhysicalAddress() { +static inline KPhysicalAddress GetInitialProcessBinaryPhysicalAddress() { return Kernel::Board::Nintendo::Nx::KSystemControl::Init::GetKernelPhysicalBaseAddress( MainMemoryAddress); } diff --git a/src/core/hle/kernel/k_address_arbiter.cpp b/src/core/hle/kernel/k_address_arbiter.cpp index 30a4e6edb..78d43d729 100644 --- a/src/core/hle/kernel/k_address_arbiter.cpp +++ b/src/core/hle/kernel/k_address_arbiter.cpp @@ -8,6 +8,7 @@ #include "core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h" #include "core/hle/kernel/k_thread.h" #include "core/hle/kernel/k_thread_queue.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/kernel.h" #include "core/hle/kernel/svc_results.h" #include "core/memory.h" @@ -20,12 +21,12 @@ KAddressArbiter::~KAddressArbiter() = default; namespace { -bool ReadFromUser(Core::System& system, s32* out, VAddr address) { - *out = system.Memory().Read32(address); +bool ReadFromUser(KernelCore& kernel, s32* out, KProcessAddress address) { + *out = GetCurrentMemory(kernel).Read32(GetInteger(address)); return true; } -bool DecrementIfLessThan(Core::System& system, s32* out, VAddr address, s32 value) { +bool DecrementIfLessThan(Core::System& system, s32* out, KProcessAddress address, s32 value) { auto& monitor = system.Monitor(); const auto current_core = system.Kernel().CurrentPhysicalCoreIndex(); @@ -34,22 +35,30 @@ bool DecrementIfLessThan(Core::System& system, s32* out, VAddr address, s32 valu // TODO(bunnei): We should call CanAccessAtomic(..) here. - // Load the value from the address. - const s32 current_value = static_cast<s32>(monitor.ExclusiveRead32(current_core, address)); + s32 current_value{}; + + while (true) { + // Load the value from the address. + current_value = + static_cast<s32>(monitor.ExclusiveRead32(current_core, GetInteger(address))); - // Compare it to the desired one. - if (current_value < value) { - // If less than, we want to try to decrement. - const s32 decrement_value = current_value - 1; + // Compare it to the desired one. + if (current_value < value) { + // If less than, we want to try to decrement. + const s32 decrement_value = current_value - 1; + + // Decrement and try to store. + if (monitor.ExclusiveWrite32(current_core, GetInteger(address), + static_cast<u32>(decrement_value))) { + break; + } - // Decrement and try to store. - if (!monitor.ExclusiveWrite32(current_core, address, static_cast<u32>(decrement_value))) { // If we failed to store, try again. - DecrementIfLessThan(system, out, address, value); + } else { + // Otherwise, clear our exclusive hold and finish + monitor.ClearExclusive(current_core); + break; } - } else { - // Otherwise, clear our exclusive hold and finish - monitor.ClearExclusive(current_core); } // We're done. @@ -57,7 +66,8 @@ bool DecrementIfLessThan(Core::System& system, s32* out, VAddr address, s32 valu return true; } -bool UpdateIfEqual(Core::System& system, s32* out, VAddr address, s32 value, s32 new_value) { +bool UpdateIfEqual(Core::System& system, s32* out, KProcessAddress address, s32 value, + s32 new_value) { auto& monitor = system.Monitor(); const auto current_core = system.Kernel().CurrentPhysicalCoreIndex(); @@ -66,21 +76,29 @@ bool UpdateIfEqual(Core::System& system, s32* out, VAddr address, s32 value, s32 // TODO(bunnei): We should call CanAccessAtomic(..) here. - // Load the value from the address. - const s32 current_value = static_cast<s32>(monitor.ExclusiveRead32(current_core, address)); + s32 current_value{}; - // Compare it to the desired one. - if (current_value == value) { - // If equal, we want to try to write the new value. + // Load the value from the address. + while (true) { + current_value = + static_cast<s32>(monitor.ExclusiveRead32(current_core, GetInteger(address))); + + // Compare it to the desired one. + if (current_value == value) { + // If equal, we want to try to write the new value. + + // Try to store. + if (monitor.ExclusiveWrite32(current_core, GetInteger(address), + static_cast<u32>(new_value))) { + break; + } - // Try to store. - if (!monitor.ExclusiveWrite32(current_core, address, static_cast<u32>(new_value))) { // If we failed to store, try again. - UpdateIfEqual(system, out, address, value, new_value); + } else { + // Otherwise, clear our exclusive hold and finish. + monitor.ClearExclusive(current_core); + break; } - } else { - // Otherwise, clear our exclusive hold and finish. - monitor.ClearExclusive(current_core); } // We're done. @@ -110,7 +128,7 @@ private: } // namespace -Result KAddressArbiter::Signal(VAddr addr, s32 count) { +Result KAddressArbiter::Signal(uint64_t addr, s32 count) { // Perform signaling. s32 num_waiters{}; { @@ -133,7 +151,7 @@ Result KAddressArbiter::Signal(VAddr addr, s32 count) { R_SUCCEED(); } -Result KAddressArbiter::SignalAndIncrementIfEqual(VAddr addr, s32 value, s32 count) { +Result KAddressArbiter::SignalAndIncrementIfEqual(uint64_t addr, s32 value, s32 count) { // Perform signaling. s32 num_waiters{}; { @@ -162,7 +180,7 @@ Result KAddressArbiter::SignalAndIncrementIfEqual(VAddr addr, s32 value, s32 cou R_SUCCEED(); } -Result KAddressArbiter::SignalAndModifyByWaitingCountIfEqual(VAddr addr, s32 value, s32 count) { +Result KAddressArbiter::SignalAndModifyByWaitingCountIfEqual(uint64_t addr, s32 value, s32 count) { // Perform signaling. s32 num_waiters{}; { @@ -203,7 +221,7 @@ Result KAddressArbiter::SignalAndModifyByWaitingCountIfEqual(VAddr addr, s32 val if (value != new_value) { succeeded = UpdateIfEqual(m_system, std::addressof(user_value), addr, value, new_value); } else { - succeeded = ReadFromUser(m_system, std::addressof(user_value), addr); + succeeded = ReadFromUser(m_kernel, std::addressof(user_value), addr); } R_UNLESS(succeeded, ResultInvalidCurrentMemory); @@ -225,7 +243,7 @@ Result KAddressArbiter::SignalAndModifyByWaitingCountIfEqual(VAddr addr, s32 val R_SUCCEED(); } -Result KAddressArbiter::WaitIfLessThan(VAddr addr, s32 value, bool decrement, s64 timeout) { +Result KAddressArbiter::WaitIfLessThan(uint64_t addr, s32 value, bool decrement, s64 timeout) { // Prepare to wait. KThread* cur_thread = GetCurrentThreadPointer(m_kernel); KHardwareTimer* timer{}; @@ -246,7 +264,7 @@ Result KAddressArbiter::WaitIfLessThan(VAddr addr, s32 value, bool decrement, s6 if (decrement) { succeeded = DecrementIfLessThan(m_system, std::addressof(user_value), addr, value); } else { - succeeded = ReadFromUser(m_system, std::addressof(user_value), addr); + succeeded = ReadFromUser(m_kernel, std::addressof(user_value), addr); } if (!succeeded) { @@ -280,7 +298,7 @@ Result KAddressArbiter::WaitIfLessThan(VAddr addr, s32 value, bool decrement, s6 return cur_thread->GetWaitResult(); } -Result KAddressArbiter::WaitIfEqual(VAddr addr, s32 value, s64 timeout) { +Result KAddressArbiter::WaitIfEqual(uint64_t addr, s32 value, s64 timeout) { // Prepare to wait. KThread* cur_thread = GetCurrentThreadPointer(m_kernel); KHardwareTimer* timer{}; @@ -297,7 +315,7 @@ Result KAddressArbiter::WaitIfEqual(VAddr addr, s32 value, s64 timeout) { // Read the value from userspace. s32 user_value{}; - if (!ReadFromUser(m_system, std::addressof(user_value), addr)) { + if (!ReadFromUser(m_kernel, std::addressof(user_value), addr)) { slp.CancelSleep(); R_THROW(ResultInvalidCurrentMemory); } diff --git a/src/core/hle/kernel/k_address_arbiter.h b/src/core/hle/kernel/k_address_arbiter.h index 9a8c1ae94..3b70e1ab2 100644 --- a/src/core/hle/kernel/k_address_arbiter.h +++ b/src/core/hle/kernel/k_address_arbiter.h @@ -25,7 +25,7 @@ public: explicit KAddressArbiter(Core::System& system); ~KAddressArbiter(); - Result SignalToAddress(VAddr addr, Svc::SignalType type, s32 value, s32 count) { + Result SignalToAddress(uint64_t addr, Svc::SignalType type, s32 value, s32 count) { switch (type) { case Svc::SignalType::Signal: R_RETURN(this->Signal(addr, count)); @@ -38,7 +38,7 @@ public: } } - Result WaitForAddress(VAddr addr, Svc::ArbitrationType type, s32 value, s64 timeout) { + Result WaitForAddress(uint64_t addr, Svc::ArbitrationType type, s32 value, s64 timeout) { switch (type) { case Svc::ArbitrationType::WaitIfLessThan: R_RETURN(WaitIfLessThan(addr, value, false, timeout)); @@ -52,11 +52,11 @@ public: } private: - Result Signal(VAddr addr, s32 count); - Result SignalAndIncrementIfEqual(VAddr addr, s32 value, s32 count); - Result SignalAndModifyByWaitingCountIfEqual(VAddr addr, s32 value, s32 count); - Result WaitIfLessThan(VAddr addr, s32 value, bool decrement, s64 timeout); - Result WaitIfEqual(VAddr addr, s32 value, s64 timeout); + Result Signal(uint64_t addr, s32 count); + Result SignalAndIncrementIfEqual(uint64_t addr, s32 value, s32 count); + Result SignalAndModifyByWaitingCountIfEqual(uint64_t addr, s32 value, s32 count); + Result WaitIfLessThan(uint64_t addr, s32 value, bool decrement, s64 timeout); + Result WaitIfEqual(uint64_t addr, s32 value, s64 timeout); private: ThreadTree m_tree; diff --git a/src/core/hle/kernel/k_client_session.cpp b/src/core/hle/kernel/k_client_session.cpp index d998b2be2..72b66270d 100644 --- a/src/core/hle/kernel/k_client_session.cpp +++ b/src/core/hle/kernel/k_client_session.cpp @@ -29,7 +29,8 @@ Result KClientSession::SendSyncRequest() { SCOPE_EXIT({ request->Close(); }); // Initialize the request. - request->Initialize(nullptr, GetCurrentThread(m_kernel).GetTlsAddress(), MessageBufferSize); + request->Initialize(nullptr, GetInteger(GetCurrentThread(m_kernel).GetTlsAddress()), + MessageBufferSize); // Send the request. R_RETURN(m_parent->GetServerSession().OnRequest(request)); diff --git a/src/core/hle/kernel/k_code_memory.cpp b/src/core/hle/kernel/k_code_memory.cpp index 89df6b5d8..3583bee44 100644 --- a/src/core/hle/kernel/k_code_memory.cpp +++ b/src/core/hle/kernel/k_code_memory.cpp @@ -19,7 +19,8 @@ namespace Kernel { KCodeMemory::KCodeMemory(KernelCore& kernel) : KAutoObjectWithSlabHeapAndContainer{kernel}, m_lock(kernel) {} -Result KCodeMemory::Initialize(Core::DeviceMemory& device_memory, VAddr addr, size_t size) { +Result KCodeMemory::Initialize(Core::DeviceMemory& device_memory, KProcessAddress addr, + size_t size) { // Set members. m_owner = GetCurrentProcessPointer(m_kernel); @@ -63,7 +64,7 @@ void KCodeMemory::Finalize() { m_owner->Close(); } -Result KCodeMemory::Map(VAddr address, size_t size) { +Result KCodeMemory::Map(KProcessAddress address, size_t size) { // Validate the size. R_UNLESS(m_page_group->GetNumPages() == Common::DivideUp(size, PageSize), ResultInvalidSize); @@ -83,7 +84,7 @@ Result KCodeMemory::Map(VAddr address, size_t size) { R_SUCCEED(); } -Result KCodeMemory::Unmap(VAddr address, size_t size) { +Result KCodeMemory::Unmap(KProcessAddress address, size_t size) { // Validate the size. R_UNLESS(m_page_group->GetNumPages() == Common::DivideUp(size, PageSize), ResultInvalidSize); @@ -100,7 +101,7 @@ Result KCodeMemory::Unmap(VAddr address, size_t size) { R_SUCCEED(); } -Result KCodeMemory::MapToOwner(VAddr address, size_t size, Svc::MemoryPermission perm) { +Result KCodeMemory::MapToOwner(KProcessAddress address, size_t size, Svc::MemoryPermission perm) { // Validate the size. R_UNLESS(m_page_group->GetNumPages() == Common::DivideUp(size, PageSize), ResultInvalidSize); @@ -134,7 +135,7 @@ Result KCodeMemory::MapToOwner(VAddr address, size_t size, Svc::MemoryPermission R_SUCCEED(); } -Result KCodeMemory::UnmapFromOwner(VAddr address, size_t size) { +Result KCodeMemory::UnmapFromOwner(KProcessAddress address, size_t size) { // Validate the size. R_UNLESS(m_page_group->GetNumPages() == Common::DivideUp(size, PageSize), ResultInvalidSize); diff --git a/src/core/hle/kernel/k_code_memory.h b/src/core/hle/kernel/k_code_memory.h index 23cbb283b..26fe6b3dc 100644 --- a/src/core/hle/kernel/k_code_memory.h +++ b/src/core/hle/kernel/k_code_memory.h @@ -5,12 +5,12 @@ #include <optional> -#include "common/common_types.h" #include "core/device_memory.h" #include "core/hle/kernel/k_auto_object.h" #include "core/hle/kernel/k_light_lock.h" #include "core/hle/kernel/k_page_group.h" #include "core/hle/kernel/k_process.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/slab_helpers.h" #include "core/hle/kernel/svc_types.h" #include "core/hle/result.h" @@ -31,13 +31,13 @@ class KCodeMemory final public: explicit KCodeMemory(KernelCore& kernel); - Result Initialize(Core::DeviceMemory& device_memory, VAddr address, size_t size); + Result Initialize(Core::DeviceMemory& device_memory, KProcessAddress address, size_t size); void Finalize() override; - Result Map(VAddr address, size_t size); - Result Unmap(VAddr address, size_t size); - Result MapToOwner(VAddr address, size_t size, Svc::MemoryPermission perm); - Result UnmapFromOwner(VAddr address, size_t size); + Result Map(KProcessAddress address, size_t size); + Result Unmap(KProcessAddress address, size_t size); + Result MapToOwner(KProcessAddress address, size_t size, Svc::MemoryPermission perm); + Result UnmapFromOwner(KProcessAddress address, size_t size); bool IsInitialized() const override { return m_is_initialized; @@ -47,7 +47,7 @@ public: KProcess* GetOwner() const override { return m_owner; } - VAddr GetSourceAddress() const { + KProcessAddress GetSourceAddress() const { return m_address; } size_t GetSize() const { @@ -57,7 +57,7 @@ public: private: std::optional<KPageGroup> m_page_group{}; KProcess* m_owner{}; - VAddr m_address{}; + KProcessAddress m_address{}; KLightLock m_lock; bool m_is_initialized{}; bool m_is_owner_mapped{}; diff --git a/src/core/hle/kernel/k_condition_variable.cpp b/src/core/hle/kernel/k_condition_variable.cpp index 58b8609d8..efbac0e6a 100644 --- a/src/core/hle/kernel/k_condition_variable.cpp +++ b/src/core/hle/kernel/k_condition_variable.cpp @@ -18,36 +18,41 @@ namespace Kernel { namespace { -bool ReadFromUser(Core::System& system, u32* out, VAddr address) { - *out = system.Memory().Read32(address); +bool ReadFromUser(KernelCore& kernel, u32* out, KProcessAddress address) { + *out = GetCurrentMemory(kernel).Read32(GetInteger(address)); return true; } -bool WriteToUser(Core::System& system, VAddr address, const u32* p) { - system.Memory().Write32(address, *p); +bool WriteToUser(KernelCore& kernel, KProcessAddress address, const u32* p) { + GetCurrentMemory(kernel).Write32(GetInteger(address), *p); return true; } -bool UpdateLockAtomic(Core::System& system, u32* out, VAddr address, u32 if_zero, +bool UpdateLockAtomic(Core::System& system, u32* out, KProcessAddress address, u32 if_zero, u32 new_orr_mask) { auto& monitor = system.Monitor(); const auto current_core = system.Kernel().CurrentPhysicalCoreIndex(); - // Load the value from the address. - const auto expected = monitor.ExclusiveRead32(current_core, address); + u32 expected{}; - // Orr in the new mask. - u32 value = expected | new_orr_mask; + while (true) { + // Load the value from the address. + expected = monitor.ExclusiveRead32(current_core, GetInteger(address)); - // If the value is zero, use the if_zero value, otherwise use the newly orr'd value. - if (!expected) { - value = if_zero; - } + // Orr in the new mask. + u32 value = expected | new_orr_mask; + + // If the value is zero, use the if_zero value, otherwise use the newly orr'd value. + if (!expected) { + value = if_zero; + } + + // Try to store. + if (monitor.ExclusiveWrite32(current_core, GetInteger(address), value)) { + break; + } - // Try to store. - if (!monitor.ExclusiveWrite32(current_core, address, value)) { // If we failed to store, try again. - return UpdateLockAtomic(system, out, address, if_zero, new_orr_mask); } // We're done. @@ -102,7 +107,7 @@ KConditionVariable::KConditionVariable(Core::System& system) KConditionVariable::~KConditionVariable() = default; -Result KConditionVariable::SignalToAddress(VAddr addr) { +Result KConditionVariable::SignalToAddress(KProcessAddress addr) { KThread* owner_thread = GetCurrentThreadPointer(m_kernel); // Signal the address. @@ -128,7 +133,7 @@ Result KConditionVariable::SignalToAddress(VAddr addr) { // Write the value to userspace. Result result{ResultSuccess}; - if (WriteToUser(m_system, addr, std::addressof(next_value))) [[likely]] { + if (WriteToUser(m_kernel, addr, std::addressof(next_value))) [[likely]] { result = ResultSuccess; } else { result = ResultInvalidCurrentMemory; @@ -143,7 +148,7 @@ Result KConditionVariable::SignalToAddress(VAddr addr) { } } -Result KConditionVariable::WaitForAddress(Handle handle, VAddr addr, u32 value) { +Result KConditionVariable::WaitForAddress(Handle handle, KProcessAddress addr, u32 value) { KThread* cur_thread = GetCurrentThreadPointer(m_kernel); ThreadQueueImplForKConditionVariableWaitForAddress wait_queue(m_kernel); @@ -157,7 +162,7 @@ Result KConditionVariable::WaitForAddress(Handle handle, VAddr addr, u32 value) // Read the tag from userspace. u32 test_tag{}; - R_UNLESS(ReadFromUser(m_system, std::addressof(test_tag), addr), + R_UNLESS(ReadFromUser(m_kernel, std::addressof(test_tag), addr), ResultInvalidCurrentMemory); // If the tag isn't the handle (with wait mask), we're done. @@ -191,7 +196,7 @@ void KConditionVariable::SignalImpl(KThread* thread) { ASSERT(KScheduler::IsSchedulerLockedByCurrentThread(m_kernel)); // Update the tag. - VAddr address = thread->GetAddressKey(); + KProcessAddress address = thread->GetAddressKey(); u32 own_tag = thread->GetAddressKeyValue(); u32 prev_tag{}; @@ -257,12 +262,12 @@ void KConditionVariable::Signal(u64 cv_key, s32 count) { // If we have no waiters, clear the has waiter flag. if (it == m_tree.end() || it->GetConditionVariableKey() != cv_key) { const u32 has_waiter_flag{}; - WriteToUser(m_system, cv_key, std::addressof(has_waiter_flag)); + WriteToUser(m_kernel, cv_key, std::addressof(has_waiter_flag)); } } } -Result KConditionVariable::Wait(VAddr addr, u64 key, u32 value, s64 timeout) { +Result KConditionVariable::Wait(KProcessAddress addr, u64 key, u32 value, s64 timeout) { // Prepare to wait. KThread* cur_thread = GetCurrentThreadPointer(m_kernel); KHardwareTimer* timer{}; @@ -301,12 +306,12 @@ Result KConditionVariable::Wait(VAddr addr, u64 key, u32 value, s64 timeout) { // Write to the cv key. { const u32 has_waiter_flag = 1; - WriteToUser(m_system, key, std::addressof(has_waiter_flag)); + WriteToUser(m_kernel, key, std::addressof(has_waiter_flag)); std::atomic_thread_fence(std::memory_order_seq_cst); } // Write the value to userspace. - if (!WriteToUser(m_system, addr, std::addressof(next_value))) { + if (!WriteToUser(m_kernel, addr, std::addressof(next_value))) { slp.CancelSleep(); R_THROW(ResultInvalidCurrentMemory); } diff --git a/src/core/hle/kernel/k_condition_variable.h b/src/core/hle/kernel/k_condition_variable.h index fbd2c1fc0..8c2f3ae51 100644 --- a/src/core/hle/kernel/k_condition_variable.h +++ b/src/core/hle/kernel/k_condition_variable.h @@ -4,10 +4,10 @@ #pragma once #include "common/assert.h" -#include "common/common_types.h" #include "core/hle/kernel/k_scheduler.h" #include "core/hle/kernel/k_thread.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/kernel.h" #include "core/hle/result.h" @@ -25,12 +25,12 @@ public: ~KConditionVariable(); // Arbitration - Result SignalToAddress(VAddr addr); - Result WaitForAddress(Handle handle, VAddr addr, u32 value); + Result SignalToAddress(KProcessAddress addr); + Result WaitForAddress(Handle handle, KProcessAddress addr, u32 value); // Condition variable void Signal(u64 cv_key, s32 count); - Result Wait(VAddr addr, u64 key, u32 value, s64 timeout); + Result Wait(KProcessAddress addr, u64 key, u32 value, s64 timeout); private: void SignalImpl(KThread* thread); diff --git a/src/core/hle/kernel/k_device_address_space.cpp b/src/core/hle/kernel/k_device_address_space.cpp index a2fc4fe1f..f48896715 100644 --- a/src/core/hle/kernel/k_device_address_space.cpp +++ b/src/core/hle/kernel/k_device_address_space.cpp @@ -54,8 +54,8 @@ Result KDeviceAddressSpace::Detach(Svc::DeviceName device_name) { R_SUCCEED(); } -Result KDeviceAddressSpace::Map(KPageTable* page_table, VAddr process_address, size_t size, - u64 device_address, u32 option, bool is_aligned) { +Result KDeviceAddressSpace::Map(KPageTable* page_table, KProcessAddress process_address, + size_t size, u64 device_address, u32 option, bool is_aligned) { // Check that the address falls within the space. R_UNLESS((m_space_address <= device_address && device_address + size - 1 <= m_space_address + m_space_size - 1), @@ -113,8 +113,8 @@ Result KDeviceAddressSpace::Map(KPageTable* page_table, VAddr process_address, s R_SUCCEED(); } -Result KDeviceAddressSpace::Unmap(KPageTable* page_table, VAddr process_address, size_t size, - u64 device_address) { +Result KDeviceAddressSpace::Unmap(KPageTable* page_table, KProcessAddress process_address, + size_t size, u64 device_address) { // Check that the address falls within the space. R_UNLESS((m_space_address <= device_address && device_address + size - 1 <= m_space_address + m_space_size - 1), diff --git a/src/core/hle/kernel/k_device_address_space.h b/src/core/hle/kernel/k_device_address_space.h index b4a014c38..18556e3cc 100644 --- a/src/core/hle/kernel/k_device_address_space.h +++ b/src/core/hle/kernel/k_device_address_space.h @@ -5,8 +5,8 @@ #include <string> -#include "common/common_types.h" #include "core/hle/kernel/k_page_table.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/slab_helpers.h" #include "core/hle/result.h" @@ -31,23 +31,24 @@ public: Result Attach(Svc::DeviceName device_name); Result Detach(Svc::DeviceName device_name); - Result MapByForce(KPageTable* page_table, VAddr process_address, size_t size, + Result MapByForce(KPageTable* page_table, KProcessAddress process_address, size_t size, u64 device_address, u32 option) { R_RETURN(this->Map(page_table, process_address, size, device_address, option, false)); } - Result MapAligned(KPageTable* page_table, VAddr process_address, size_t size, + Result MapAligned(KPageTable* page_table, KProcessAddress process_address, size_t size, u64 device_address, u32 option) { R_RETURN(this->Map(page_table, process_address, size, device_address, option, true)); } - Result Unmap(KPageTable* page_table, VAddr process_address, size_t size, u64 device_address); + Result Unmap(KPageTable* page_table, KProcessAddress process_address, size_t size, + u64 device_address); static void Initialize(); private: - Result Map(KPageTable* page_table, VAddr process_address, size_t size, u64 device_address, - u32 option, bool is_aligned); + Result Map(KPageTable* page_table, KProcessAddress process_address, size_t size, + u64 device_address, u32 option, bool is_aligned); private: KLightLock m_lock; diff --git a/src/core/hle/kernel/k_dynamic_page_manager.h b/src/core/hle/kernel/k_dynamic_page_manager.h index ac80d60a1..ad11e84b7 100644 --- a/src/core/hle/kernel/k_dynamic_page_manager.h +++ b/src/core/hle/kernel/k_dynamic_page_manager.h @@ -6,9 +6,9 @@ #include <vector> #include "common/alignment.h" -#include "common/common_types.h" #include "core/hle/kernel/k_page_bitmap.h" #include "core/hle/kernel/k_spin_lock.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/memory_types.h" #include "core/hle/kernel/svc_results.h" @@ -26,23 +26,23 @@ public: KDynamicPageManager() = default; template <typename T> - T* GetPointer(VAddr addr) { + T* GetPointer(KVirtualAddress addr) { return reinterpret_cast<T*>(m_backing_memory.data() + (addr - m_address)); } template <typename T> - const T* GetPointer(VAddr addr) const { + const T* GetPointer(KVirtualAddress addr) const { return reinterpret_cast<T*>(m_backing_memory.data() + (addr - m_address)); } - Result Initialize(VAddr memory, size_t size, size_t align) { + Result Initialize(KVirtualAddress memory, size_t size, size_t align) { // We need to have positive size. R_UNLESS(size > 0, ResultOutOfMemory); m_backing_memory.resize(size); // Set addresses. m_address = memory; - m_aligned_address = Common::AlignDown(memory, align); + m_aligned_address = Common::AlignDown(GetInteger(memory), align); // Calculate extents. const size_t managed_size = m_address + size - m_aligned_address; @@ -79,7 +79,7 @@ public: R_SUCCEED(); } - VAddr GetAddress() const { + KVirtualAddress GetAddress() const { return m_address; } size_t GetSize() const { @@ -145,7 +145,8 @@ public: KScopedSpinLock lk(m_lock); // Set the bit for the free page. - size_t offset = (reinterpret_cast<uintptr_t>(pb) - m_aligned_address) / sizeof(PageBuffer); + size_t offset = + (reinterpret_cast<uint64_t>(pb) - GetInteger(m_aligned_address)) / sizeof(PageBuffer); m_page_bitmap.SetBit(offset); // Decrement our used count. @@ -158,8 +159,8 @@ private: size_t m_used{}; size_t m_peak{}; size_t m_count{}; - VAddr m_address{}; - VAddr m_aligned_address{}; + KVirtualAddress m_address{}; + KVirtualAddress m_aligned_address{}; size_t m_size{}; // TODO(bunnei): Back by host memory until we emulate kernel virtual address space. diff --git a/src/core/hle/kernel/k_dynamic_slab_heap.h b/src/core/hle/kernel/k_dynamic_slab_heap.h index 3a0ddd050..76ed4cac1 100644 --- a/src/core/hle/kernel/k_dynamic_slab_heap.h +++ b/src/core/hle/kernel/k_dynamic_slab_heap.h @@ -19,7 +19,7 @@ class KDynamicSlabHeap : protected impl::KSlabHeapImpl { public: constexpr KDynamicSlabHeap() = default; - constexpr VAddr GetAddress() const { + constexpr KVirtualAddress GetAddress() const { return m_address; } constexpr size_t GetSize() const { @@ -35,7 +35,7 @@ public: return m_count.load(); } - constexpr bool IsInRange(VAddr addr) const { + constexpr bool IsInRange(KVirtualAddress addr) const { return this->GetAddress() <= addr && addr <= this->GetAddress() + this->GetSize() - 1; } @@ -115,7 +115,7 @@ private: std::atomic<size_t> m_used{}; std::atomic<size_t> m_peak{}; std::atomic<size_t> m_count{}; - VAddr m_address{}; + KVirtualAddress m_address{}; size_t m_size{}; }; diff --git a/src/core/hle/kernel/k_memory_block.h b/src/core/hle/kernel/k_memory_block.h index e01929da6..41a29da24 100644 --- a/src/core/hle/kernel/k_memory_block.h +++ b/src/core/hle/kernel/k_memory_block.h @@ -5,8 +5,8 @@ #include "common/alignment.h" #include "common/assert.h" -#include "common/common_types.h" #include "common/intrusive_red_black_tree.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/memory_types.h" #include "core/hle/kernel/svc_types.h" @@ -282,7 +282,7 @@ class KMemoryBlock : public Common::IntrusiveRedBlackTreeBaseNode<KMemoryBlock> private: u16 m_device_disable_merge_left_count{}; u16 m_device_disable_merge_right_count{}; - VAddr m_address{}; + KProcessAddress m_address{}; size_t m_num_pages{}; KMemoryState m_memory_state{KMemoryState::None}; u16 m_ipc_lock_count{}; @@ -306,7 +306,7 @@ public: } public: - constexpr VAddr GetAddress() const { + constexpr KProcessAddress GetAddress() const { return m_address; } @@ -318,11 +318,11 @@ public: return this->GetNumPages() * PageSize; } - constexpr VAddr GetEndAddress() const { + constexpr KProcessAddress GetEndAddress() const { return this->GetAddress() + this->GetSize(); } - constexpr VAddr GetLastAddress() const { + constexpr KProcessAddress GetLastAddress() const { return this->GetEndAddress() - 1; } @@ -348,7 +348,7 @@ public: constexpr KMemoryInfo GetMemoryInfo() const { return { - .m_address = this->GetAddress(), + .m_address = GetInteger(this->GetAddress()), .m_size = this->GetSize(), .m_state = m_memory_state, .m_device_disable_merge_left_count = m_device_disable_merge_left_count, @@ -366,12 +366,12 @@ public: public: explicit KMemoryBlock() = default; - constexpr KMemoryBlock(VAddr addr, size_t np, KMemoryState ms, KMemoryPermission p, + constexpr KMemoryBlock(KProcessAddress addr, size_t np, KMemoryState ms, KMemoryPermission p, KMemoryAttribute attr) : Common::IntrusiveRedBlackTreeBaseNode<KMemoryBlock>(), m_address(addr), m_num_pages(np), m_memory_state(ms), m_permission(p), m_attribute(attr) {} - constexpr void Initialize(VAddr addr, size_t np, KMemoryState ms, KMemoryPermission p, + constexpr void Initialize(KProcessAddress addr, size_t np, KMemoryState ms, KMemoryPermission p, KMemoryAttribute attr) { m_device_disable_merge_left_count = 0; m_device_disable_merge_right_count = 0; @@ -408,7 +408,7 @@ public: KMemoryBlockDisableMergeAttribute::None; } - constexpr bool Contains(VAddr addr) const { + constexpr bool Contains(KProcessAddress addr) const { return this->GetAddress() <= addr && addr <= this->GetEndAddress(); } @@ -443,10 +443,10 @@ public: } } - constexpr void Split(KMemoryBlock* block, VAddr addr) { + constexpr void Split(KMemoryBlock* block, KProcessAddress addr) { ASSERT(this->GetAddress() < addr); ASSERT(this->Contains(addr)); - ASSERT(Common::IsAligned(addr, PageSize)); + ASSERT(Common::IsAligned(GetInteger(addr), PageSize)); block->m_address = m_address; block->m_num_pages = (addr - this->GetAddress()) / PageSize; diff --git a/src/core/hle/kernel/k_memory_block_manager.cpp b/src/core/hle/kernel/k_memory_block_manager.cpp index cf4c1e371..ab75f550e 100644 --- a/src/core/hle/kernel/k_memory_block_manager.cpp +++ b/src/core/hle/kernel/k_memory_block_manager.cpp @@ -7,7 +7,8 @@ namespace Kernel { KMemoryBlockManager::KMemoryBlockManager() = default; -Result KMemoryBlockManager::Initialize(VAddr st, VAddr nd, KMemoryBlockSlabManager* slab_manager) { +Result KMemoryBlockManager::Initialize(KProcessAddress st, KProcessAddress nd, + KMemoryBlockSlabManager* slab_manager) { // Allocate a block to encapsulate the address space, insert it into the tree. KMemoryBlock* start_block = slab_manager->Allocate(); R_UNLESS(start_block != nullptr, ResultOutOfResource); @@ -15,8 +16,8 @@ Result KMemoryBlockManager::Initialize(VAddr st, VAddr nd, KMemoryBlockSlabManag // Set our start and end. m_start_address = st; m_end_address = nd; - ASSERT(Common::IsAligned(m_start_address, PageSize)); - ASSERT(Common::IsAligned(m_end_address, PageSize)); + ASSERT(Common::IsAligned(GetInteger(m_start_address), PageSize)); + ASSERT(Common::IsAligned(GetInteger(m_end_address), PageSize)); // Initialize and insert the block. start_block->Initialize(m_start_address, (m_end_address - m_start_address) / PageSize, @@ -40,12 +41,13 @@ void KMemoryBlockManager::Finalize(KMemoryBlockSlabManager* slab_manager, ASSERT(m_memory_block_tree.empty()); } -VAddr KMemoryBlockManager::FindFreeArea(VAddr region_start, size_t region_num_pages, - size_t num_pages, size_t alignment, size_t offset, - size_t guard_pages) const { +KProcessAddress KMemoryBlockManager::FindFreeArea(KProcessAddress region_start, + size_t region_num_pages, size_t num_pages, + size_t alignment, size_t offset, + size_t guard_pages) const { if (num_pages > 0) { - const VAddr region_end = region_start + region_num_pages * PageSize; - const VAddr region_last = region_end - 1; + const KProcessAddress region_end = region_start + region_num_pages * PageSize; + const KProcessAddress region_last = region_end - 1; for (const_iterator it = this->FindIterator(region_start); it != m_memory_block_tree.cend(); it++) { const KMemoryInfo info = it->GetMemoryInfo(); @@ -56,17 +58,19 @@ VAddr KMemoryBlockManager::FindFreeArea(VAddr region_start, size_t region_num_pa continue; } - VAddr area = (info.GetAddress() <= region_start) ? region_start : info.GetAddress(); + KProcessAddress area = + (info.GetAddress() <= GetInteger(region_start)) ? region_start : info.GetAddress(); area += guard_pages * PageSize; - const VAddr offset_area = Common::AlignDown(area, alignment) + offset; + const KProcessAddress offset_area = + Common::AlignDown(GetInteger(area), alignment) + offset; area = (area <= offset_area) ? offset_area : offset_area + alignment; - const VAddr area_end = area + num_pages * PageSize + guard_pages * PageSize; - const VAddr area_last = area_end - 1; + const KProcessAddress area_end = area + num_pages * PageSize + guard_pages * PageSize; + const KProcessAddress area_last = area_end - 1; - if (info.GetAddress() <= area && area < area_last && area_last <= region_last && - area_last <= info.GetLastAddress()) { + if (info.GetAddress() <= GetInteger(area) && area < area_last && + area_last <= region_last && area_last <= info.GetLastAddress()) { return area; } } @@ -76,7 +80,7 @@ VAddr KMemoryBlockManager::FindFreeArea(VAddr region_start, size_t region_num_pa } void KMemoryBlockManager::CoalesceForUpdate(KMemoryBlockManagerUpdateAllocator* allocator, - VAddr address, size_t num_pages) { + KProcessAddress address, size_t num_pages) { // Find the iterator now that we've updated. iterator it = this->FindIterator(address); if (address != m_start_address) { @@ -104,18 +108,18 @@ void KMemoryBlockManager::CoalesceForUpdate(KMemoryBlockManagerUpdateAllocator* } } -void KMemoryBlockManager::Update(KMemoryBlockManagerUpdateAllocator* allocator, VAddr address, - size_t num_pages, KMemoryState state, KMemoryPermission perm, - KMemoryAttribute attr, +void KMemoryBlockManager::Update(KMemoryBlockManagerUpdateAllocator* allocator, + KProcessAddress address, size_t num_pages, KMemoryState state, + KMemoryPermission perm, KMemoryAttribute attr, KMemoryBlockDisableMergeAttribute set_disable_attr, KMemoryBlockDisableMergeAttribute clear_disable_attr) { // Ensure for auditing that we never end up with an invalid tree. KScopedMemoryBlockManagerAuditor auditor(this); - ASSERT(Common::IsAligned(address, PageSize)); + ASSERT(Common::IsAligned(GetInteger(address), PageSize)); ASSERT((attr & (KMemoryAttribute::IpcLocked | KMemoryAttribute::DeviceShared)) == KMemoryAttribute::None); - VAddr cur_address = address; + KProcessAddress cur_address = address; size_t remaining_pages = num_pages; iterator it = this->FindIterator(address); @@ -168,17 +172,17 @@ void KMemoryBlockManager::Update(KMemoryBlockManagerUpdateAllocator* allocator, } void KMemoryBlockManager::UpdateIfMatch(KMemoryBlockManagerUpdateAllocator* allocator, - VAddr address, size_t num_pages, KMemoryState test_state, - KMemoryPermission test_perm, KMemoryAttribute test_attr, - KMemoryState state, KMemoryPermission perm, - KMemoryAttribute attr) { + KProcessAddress address, size_t num_pages, + KMemoryState test_state, KMemoryPermission test_perm, + KMemoryAttribute test_attr, KMemoryState state, + KMemoryPermission perm, KMemoryAttribute attr) { // Ensure for auditing that we never end up with an invalid tree. KScopedMemoryBlockManagerAuditor auditor(this); - ASSERT(Common::IsAligned(address, PageSize)); + ASSERT(Common::IsAligned(GetInteger(address), PageSize)); ASSERT((attr & (KMemoryAttribute::IpcLocked | KMemoryAttribute::DeviceShared)) == KMemoryAttribute::None); - VAddr cur_address = address; + KProcessAddress cur_address = address; size_t remaining_pages = num_pages; iterator it = this->FindIterator(address); @@ -230,18 +234,18 @@ void KMemoryBlockManager::UpdateIfMatch(KMemoryBlockManagerUpdateAllocator* allo this->CoalesceForUpdate(allocator, address, num_pages); } -void KMemoryBlockManager::UpdateLock(KMemoryBlockManagerUpdateAllocator* allocator, VAddr address, - size_t num_pages, MemoryBlockLockFunction lock_func, - KMemoryPermission perm) { +void KMemoryBlockManager::UpdateLock(KMemoryBlockManagerUpdateAllocator* allocator, + KProcessAddress address, size_t num_pages, + MemoryBlockLockFunction lock_func, KMemoryPermission perm) { // Ensure for auditing that we never end up with an invalid tree. KScopedMemoryBlockManagerAuditor auditor(this); - ASSERT(Common::IsAligned(address, PageSize)); + ASSERT(Common::IsAligned(GetInteger(address), PageSize)); - VAddr cur_address = address; + KProcessAddress cur_address = address; size_t remaining_pages = num_pages; iterator it = this->FindIterator(address); - const VAddr end_address = address + (num_pages * PageSize); + const KProcessAddress end_address = address + (num_pages * PageSize); while (remaining_pages > 0) { const size_t remaining_size = remaining_pages * PageSize; diff --git a/src/core/hle/kernel/k_memory_block_manager.h b/src/core/hle/kernel/k_memory_block_manager.h index d382722a6..7c0bd16f0 100644 --- a/src/core/hle/kernel/k_memory_block_manager.h +++ b/src/core/hle/kernel/k_memory_block_manager.h @@ -7,9 +7,9 @@ #include <functional> #include "common/common_funcs.h" -#include "common/common_types.h" #include "core/hle/kernel/k_dynamic_resource_manager.h" #include "core/hle/kernel/k_memory_block.h" +#include "core/hle/kernel/k_typed_address.h" namespace Kernel { @@ -85,9 +85,10 @@ public: public: KMemoryBlockManager(); - using HostUnmapCallback = std::function<void(VAddr, u64)>; + using HostUnmapCallback = std::function<void(Common::ProcessAddress, u64)>; - Result Initialize(VAddr st, VAddr nd, KMemoryBlockSlabManager* slab_manager); + Result Initialize(KProcessAddress st, KProcessAddress nd, + KMemoryBlockSlabManager* slab_manager); void Finalize(KMemoryBlockSlabManager* slab_manager, HostUnmapCallback&& host_unmap_callback); iterator end() { @@ -100,27 +101,28 @@ public: return m_memory_block_tree.cend(); } - VAddr FindFreeArea(VAddr region_start, size_t region_num_pages, size_t num_pages, - size_t alignment, size_t offset, size_t guard_pages) const; + KProcessAddress FindFreeArea(KProcessAddress region_start, size_t region_num_pages, + size_t num_pages, size_t alignment, size_t offset, + size_t guard_pages) const; - void Update(KMemoryBlockManagerUpdateAllocator* allocator, VAddr address, size_t num_pages, - KMemoryState state, KMemoryPermission perm, KMemoryAttribute attr, + void Update(KMemoryBlockManagerUpdateAllocator* allocator, KProcessAddress address, + size_t num_pages, KMemoryState state, KMemoryPermission perm, KMemoryAttribute attr, KMemoryBlockDisableMergeAttribute set_disable_attr, KMemoryBlockDisableMergeAttribute clear_disable_attr); - void UpdateLock(KMemoryBlockManagerUpdateAllocator* allocator, VAddr address, size_t num_pages, - MemoryBlockLockFunction lock_func, KMemoryPermission perm); + void UpdateLock(KMemoryBlockManagerUpdateAllocator* allocator, KProcessAddress address, + size_t num_pages, MemoryBlockLockFunction lock_func, KMemoryPermission perm); - void UpdateIfMatch(KMemoryBlockManagerUpdateAllocator* allocator, VAddr address, + void UpdateIfMatch(KMemoryBlockManagerUpdateAllocator* allocator, KProcessAddress address, size_t num_pages, KMemoryState test_state, KMemoryPermission test_perm, KMemoryAttribute test_attr, KMemoryState state, KMemoryPermission perm, KMemoryAttribute attr); - iterator FindIterator(VAddr address) const { + iterator FindIterator(KProcessAddress address) const { return m_memory_block_tree.find(KMemoryBlock( address, 1, KMemoryState::Free, KMemoryPermission::None, KMemoryAttribute::None)); } - const KMemoryBlock* FindBlock(VAddr address) const { + const KMemoryBlock* FindBlock(KProcessAddress address) const { if (const_iterator it = this->FindIterator(address); it != m_memory_block_tree.end()) { return std::addressof(*it); } @@ -132,12 +134,12 @@ public: bool CheckState() const; private: - void CoalesceForUpdate(KMemoryBlockManagerUpdateAllocator* allocator, VAddr address, + void CoalesceForUpdate(KMemoryBlockManagerUpdateAllocator* allocator, KProcessAddress address, size_t num_pages); MemoryBlockTree m_memory_block_tree; - VAddr m_start_address{}; - VAddr m_end_address{}; + KProcessAddress m_start_address{}; + KProcessAddress m_end_address{}; }; class KScopedMemoryBlockManagerAuditor { diff --git a/src/core/hle/kernel/k_memory_layout.cpp b/src/core/hle/kernel/k_memory_layout.cpp index 9ff751119..af40092c0 100644 --- a/src/core/hle/kernel/k_memory_layout.cpp +++ b/src/core/hle/kernel/k_memory_layout.cpp @@ -85,7 +85,8 @@ bool KMemoryRegionTree::Insert(u64 address, size_t size, u32 type_id, u32 new_at return true; } -VAddr KMemoryRegionTree::GetRandomAlignedRegion(size_t size, size_t alignment, u32 type_id) { +KVirtualAddress KMemoryRegionTree::GetRandomAlignedRegion(size_t size, size_t alignment, + u32 type_id) { // We want to find the total extents of the type id. const auto extents = this->GetDerivedRegionExtents(static_cast<KMemoryRegionType>(type_id)); @@ -130,11 +131,13 @@ KMemoryLayout::KMemoryLayout() m_virtual_linear_tree{m_memory_region_allocator}, m_physical_linear_tree{ m_memory_region_allocator} {} -void KMemoryLayout::InitializeLinearMemoryRegionTrees(PAddr aligned_linear_phys_start, - VAddr linear_virtual_start) { +void KMemoryLayout::InitializeLinearMemoryRegionTrees(KPhysicalAddress aligned_linear_phys_start, + KVirtualAddress linear_virtual_start) { // Set static differences. - m_linear_phys_to_virt_diff = linear_virtual_start - aligned_linear_phys_start; - m_linear_virt_to_phys_diff = aligned_linear_phys_start - linear_virtual_start; + m_linear_phys_to_virt_diff = + GetInteger(linear_virtual_start) - GetInteger(aligned_linear_phys_start); + m_linear_virt_to_phys_diff = + GetInteger(aligned_linear_phys_start) - GetInteger(linear_virtual_start); // Initialize linear trees. for (auto& region : GetPhysicalMemoryRegionTree()) { diff --git a/src/core/hle/kernel/k_memory_layout.h b/src/core/hle/kernel/k_memory_layout.h index 551b7a0e4..54a71df56 100644 --- a/src/core/hle/kernel/k_memory_layout.h +++ b/src/core/hle/kernel/k_memory_layout.h @@ -10,6 +10,7 @@ #include "core/device_memory.h" #include "core/hle/kernel/k_memory_region.h" #include "core/hle/kernel/k_memory_region_type.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/memory_types.h" namespace Kernel { @@ -69,10 +70,11 @@ constexpr std::size_t KernelResourceSize = KernelPageTableHeapSize + KernelIniti //! NB: Use KThread::GetAddressKeyIsKernel(). //! See explanation for deviation of GetAddressKey. -bool IsKernelAddressKey(VAddr key) = delete; +bool IsKernelAddressKey(KProcessAddress key) = delete; -constexpr bool IsKernelAddress(VAddr address) { - return KernelVirtualAddressSpaceBase <= address && address < KernelVirtualAddressSpaceEnd; +constexpr bool IsKernelAddress(KProcessAddress address) { + return KernelVirtualAddressSpaceBase <= GetInteger(address) && + address < KernelVirtualAddressSpaceEnd; } class KMemoryLayout final { @@ -104,38 +106,38 @@ public: return m_physical_linear_tree; } - VAddr GetLinearVirtualAddress(PAddr address) const { - return address + m_linear_phys_to_virt_diff; + KVirtualAddress GetLinearVirtualAddress(KPhysicalAddress address) const { + return GetInteger(address) + m_linear_phys_to_virt_diff; } - PAddr GetLinearPhysicalAddress(VAddr address) const { - return address + m_linear_virt_to_phys_diff; + KPhysicalAddress GetLinearPhysicalAddress(KVirtualAddress address) const { + return GetInteger(address) + m_linear_virt_to_phys_diff; } - const KMemoryRegion* FindVirtual(VAddr address) const { + const KMemoryRegion* FindVirtual(KVirtualAddress address) const { return Find(address, GetVirtualMemoryRegionTree()); } - const KMemoryRegion* FindPhysical(PAddr address) const { + const KMemoryRegion* FindPhysical(KPhysicalAddress address) const { return Find(address, GetPhysicalMemoryRegionTree()); } - const KMemoryRegion* FindVirtualLinear(VAddr address) const { + const KMemoryRegion* FindVirtualLinear(KVirtualAddress address) const { return Find(address, GetVirtualLinearMemoryRegionTree()); } - const KMemoryRegion* FindPhysicalLinear(PAddr address) const { + const KMemoryRegion* FindPhysicalLinear(KPhysicalAddress address) const { return Find(address, GetPhysicalLinearMemoryRegionTree()); } - VAddr GetMainStackTopAddress(s32 core_id) const { + KVirtualAddress GetMainStackTopAddress(s32 core_id) const { return GetStackTopAddress(core_id, KMemoryRegionType_KernelMiscMainStack); } - VAddr GetIdleStackTopAddress(s32 core_id) const { + KVirtualAddress GetIdleStackTopAddress(s32 core_id) const { return GetStackTopAddress(core_id, KMemoryRegionType_KernelMiscIdleStack); } - VAddr GetExceptionStackTopAddress(s32 core_id) const { + KVirtualAddress GetExceptionStackTopAddress(s32 core_id) const { return GetStackTopAddress(core_id, KMemoryRegionType_KernelMiscExceptionStack); } - VAddr GetSlabRegionAddress() const { + KVirtualAddress GetSlabRegionAddress() const { return Dereference(GetVirtualMemoryRegionTree().FindByType(KMemoryRegionType_KernelSlab)) .GetAddress(); } @@ -143,10 +145,10 @@ public: const KMemoryRegion& GetDeviceRegion(KMemoryRegionType type) const { return Dereference(GetPhysicalMemoryRegionTree().FindFirstDerived(type)); } - PAddr GetDevicePhysicalAddress(KMemoryRegionType type) const { + KPhysicalAddress GetDevicePhysicalAddress(KMemoryRegionType type) const { return GetDeviceRegion(type).GetAddress(); } - VAddr GetDeviceVirtualAddress(KMemoryRegionType type) const { + KVirtualAddress GetDeviceVirtualAddress(KMemoryRegionType type) const { return GetDeviceRegion(type).GetPairAddress(); } @@ -175,11 +177,11 @@ public: KMemoryRegionType_VirtualDramKernelSecureAppletMemory)); } - const KMemoryRegion& GetVirtualLinearRegion(VAddr address) const { + const KMemoryRegion& GetVirtualLinearRegion(KVirtualAddress address) const { return Dereference(FindVirtualLinear(address)); } - const KMemoryRegion& GetPhysicalLinearRegion(PAddr address) const { + const KMemoryRegion& GetPhysicalLinearRegion(KPhysicalAddress address) const { return Dereference(FindPhysicalLinear(address)); } @@ -193,29 +195,32 @@ public: return GetPhysicalMemoryRegionTree().FindFirstDerived(KMemoryRegionType_DTB); } - bool IsHeapPhysicalAddress(const KMemoryRegion*& region, PAddr address) const { + bool IsHeapPhysicalAddress(const KMemoryRegion*& region, KPhysicalAddress address) const { return IsTypedAddress(region, address, GetPhysicalLinearMemoryRegionTree(), KMemoryRegionType_DramUserPool); } - bool IsHeapVirtualAddress(const KMemoryRegion*& region, VAddr address) const { + bool IsHeapVirtualAddress(const KMemoryRegion*& region, KVirtualAddress address) const { return IsTypedAddress(region, address, GetVirtualLinearMemoryRegionTree(), KMemoryRegionType_VirtualDramUserPool); } - bool IsHeapPhysicalAddress(const KMemoryRegion*& region, PAddr address, size_t size) const { + bool IsHeapPhysicalAddress(const KMemoryRegion*& region, KPhysicalAddress address, + size_t size) const { return IsTypedAddress(region, address, size, GetPhysicalLinearMemoryRegionTree(), KMemoryRegionType_DramUserPool); } - bool IsHeapVirtualAddress(const KMemoryRegion*& region, VAddr address, size_t size) const { + bool IsHeapVirtualAddress(const KMemoryRegion*& region, KVirtualAddress address, + size_t size) const { return IsTypedAddress(region, address, size, GetVirtualLinearMemoryRegionTree(), KMemoryRegionType_VirtualDramUserPool); } - bool IsLinearMappedPhysicalAddress(const KMemoryRegion*& region, PAddr address) const { + bool IsLinearMappedPhysicalAddress(const KMemoryRegion*& region, + KPhysicalAddress address) const { return IsTypedAddress(region, address, GetPhysicalLinearMemoryRegionTree(), static_cast<KMemoryRegionType>(KMemoryRegionAttr_LinearMapped)); } - bool IsLinearMappedPhysicalAddress(const KMemoryRegion*& region, PAddr address, + bool IsLinearMappedPhysicalAddress(const KMemoryRegion*& region, KPhysicalAddress address, size_t size) const { return IsTypedAddress(region, address, size, GetPhysicalLinearMemoryRegionTree(), static_cast<KMemoryRegionType>(KMemoryRegionAttr_LinearMapped)); @@ -234,8 +239,8 @@ public: return std::make_pair(total_size, kernel_size); } - void InitializeLinearMemoryRegionTrees(PAddr aligned_linear_phys_start, - VAddr linear_virtual_start); + void InitializeLinearMemoryRegionTrees(KPhysicalAddress aligned_linear_phys_start, + KVirtualAddress linear_virtual_start); static size_t GetResourceRegionSizeForInit(bool use_extra_resource); auto GetKernelRegionExtents() const { @@ -261,8 +266,8 @@ public: auto GetLinearRegionVirtualExtents() const { const auto physical = GetLinearRegionPhysicalExtents(); - return KMemoryRegion(GetLinearVirtualAddress(physical.GetAddress()), - GetLinearVirtualAddress(physical.GetLastAddress()), 0, + return KMemoryRegion(GetInteger(GetLinearVirtualAddress(physical.GetAddress())), + GetInteger(GetLinearVirtualAddress(physical.GetLastAddress())), 0, KMemoryRegionType_None); } @@ -334,12 +339,12 @@ private: static bool IsTypedAddress(const KMemoryRegion*& region, AddressType address, const KMemoryRegionTree& tree, KMemoryRegionType type) { // Check if the cached region already contains the address. - if (region != nullptr && region->Contains(address)) { + if (region != nullptr && region->Contains(GetInteger(address))) { return true; } // Find the containing region, and update the cache. - if (const KMemoryRegion* found = tree.Find(address); + if (const KMemoryRegion* found = tree.Find(GetInteger(address)); found != nullptr && found->IsDerivedFrom(type)) { region = found; return true; @@ -352,11 +357,12 @@ private: static bool IsTypedAddress(const KMemoryRegion*& region, AddressType address, size_t size, const KMemoryRegionTree& tree, KMemoryRegionType type) { // Get the end of the checked region. - const u64 last_address = address + size - 1; + const u64 last_address = GetInteger(address) + size - 1; // Walk the tree to verify the region is correct. - const KMemoryRegion* cur = - (region != nullptr && region->Contains(address)) ? region : tree.Find(address); + const KMemoryRegion* cur = (region != nullptr && region->Contains(GetInteger(address))) + ? region + : tree.Find(GetInteger(address)); while (cur != nullptr && cur->IsDerivedFrom(type)) { if (last_address <= cur->GetLastAddress()) { region = cur; @@ -370,7 +376,7 @@ private: template <typename AddressType> static const KMemoryRegion* Find(AddressType address, const KMemoryRegionTree& tree) { - return tree.Find(address); + return tree.Find(GetInteger(address)); } static KMemoryRegion& Dereference(KMemoryRegion* region) { @@ -383,7 +389,7 @@ private: return *region; } - VAddr GetStackTopAddress(s32 core_id, KMemoryRegionType type) const { + KVirtualAddress GetStackTopAddress(s32 core_id, KMemoryRegionType type) const { const auto& region = Dereference( GetVirtualMemoryRegionTree().FindByTypeAndAttribute(type, static_cast<u32>(core_id))); ASSERT(region.GetEndAddress() != 0); diff --git a/src/core/hle/kernel/k_memory_manager.cpp b/src/core/hle/kernel/k_memory_manager.cpp index cd6ea388e..74d8169e0 100644 --- a/src/core/hle/kernel/k_memory_manager.cpp +++ b/src/core/hle/kernel/k_memory_manager.cpp @@ -5,7 +5,6 @@ #include "common/alignment.h" #include "common/assert.h" -#include "common/common_types.h" #include "common/scope_exit.h" #include "core/core.h" #include "core/device_memory.h" @@ -44,10 +43,10 @@ KMemoryManager::KMemoryManager(Core::System& system) KLightLock{system.Kernel()}, } {} -void KMemoryManager::Initialize(VAddr management_region, size_t management_region_size) { +void KMemoryManager::Initialize(KVirtualAddress management_region, size_t management_region_size) { // Clear the management region to zero. - const VAddr management_region_end = management_region + management_region_size; + const KVirtualAddress management_region_end = management_region + management_region_size; // std::memset(GetVoidPointer(management_region), 0, management_region_size); // Reset our manager count. @@ -56,7 +55,7 @@ void KMemoryManager::Initialize(VAddr management_region, size_t management_regio // Traverse the virtual memory layout tree, initializing each manager as appropriate. while (m_num_managers != MaxManagerCount) { // Locate the region that should initialize the current manager. - PAddr region_address = 0; + KPhysicalAddress region_address = 0; size_t region_size = 0; Pool region_pool = Pool::Count; for (const auto& it : m_system.Kernel().MemoryLayout().GetPhysicalMemoryRegionTree()) { @@ -70,8 +69,8 @@ void KMemoryManager::Initialize(VAddr management_region, size_t management_regio continue; } - const PAddr cur_start = it.GetAddress(); - const PAddr cur_end = it.GetEndAddress(); + const KPhysicalAddress cur_start = it.GetAddress(); + const KPhysicalAddress cur_end = it.GetEndAddress(); // Validate the region. ASSERT(cur_end != 0); @@ -119,17 +118,17 @@ void KMemoryManager::Initialize(VAddr management_region, size_t management_regio // Free each region to its corresponding heap. size_t reserved_sizes[MaxManagerCount] = {}; - const PAddr ini_start = GetInitialProcessBinaryPhysicalAddress(); - const PAddr ini_end = ini_start + InitialProcessBinarySizeMax; - const PAddr ini_last = ini_end - 1; + const KPhysicalAddress ini_start = GetInitialProcessBinaryPhysicalAddress(); + const KPhysicalAddress ini_end = ini_start + InitialProcessBinarySizeMax; + const KPhysicalAddress ini_last = ini_end - 1; for (const auto& it : m_system.Kernel().MemoryLayout().GetPhysicalMemoryRegionTree()) { if (it.IsDerivedFrom(KMemoryRegionType_DramUserPool)) { // Get the manager for the region. auto& manager = m_managers[it.GetAttributes()]; - const PAddr cur_start = it.GetAddress(); - const PAddr cur_last = it.GetLastAddress(); - const PAddr cur_end = it.GetEndAddress(); + const KPhysicalAddress cur_start = it.GetAddress(); + const KPhysicalAddress cur_last = it.GetLastAddress(); + const KPhysicalAddress cur_end = it.GetEndAddress(); if (cur_start <= ini_start && ini_last <= cur_last) { // Free memory before the ini to the heap. @@ -175,7 +174,8 @@ void KMemoryManager::FinalizeOptimizedMemory(u64 process_id, Pool pool) { UNREACHABLE(); } -PAddr KMemoryManager::AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, u32 option) { +KPhysicalAddress KMemoryManager::AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, + u32 option) { // Early return if we're allocating no pages. if (num_pages == 0) { return 0; @@ -190,7 +190,7 @@ PAddr KMemoryManager::AllocateAndOpenContinuous(size_t num_pages, size_t align_p // Loop, trying to iterate from each block. Impl* chosen_manager = nullptr; - PAddr allocated_block = 0; + KPhysicalAddress allocated_block = 0; for (chosen_manager = this->GetFirstManager(pool, dir); chosen_manager != nullptr; chosen_manager = this->GetNextManager(chosen_manager, dir)) { allocated_block = chosen_manager->AllocateAligned(heap_index, num_pages, align_pages); @@ -239,7 +239,7 @@ Result KMemoryManager::AllocatePageGroupImpl(KPageGroup* out, size_t num_pages, cur_manager = this->GetNextManager(cur_manager, dir)) { while (num_pages >= pages_per_alloc) { // Allocate a block. - PAddr allocated_block = cur_manager->AllocateBlock(index, random); + KPhysicalAddress allocated_block = cur_manager->AllocateBlock(index, random); if (allocated_block == 0) { break; } @@ -286,7 +286,7 @@ Result KMemoryManager::AllocateAndOpen(KPageGroup* out, size_t num_pages, u32 op // Open the first reference to the pages. for (const auto& block : *out) { - PAddr cur_address = block.GetAddress(); + KPhysicalAddress cur_address = block.GetAddress(); size_t remaining_pages = block.GetNumPages(); while (remaining_pages > 0) { // Get the manager for the current address. @@ -337,7 +337,7 @@ Result KMemoryManager::AllocateForProcess(KPageGroup* out, size_t num_pages, u32 // Iterate over the allocated blocks. for (const auto& block : *out) { // Get the block extents. - const PAddr block_address = block.GetAddress(); + const KPhysicalAddress block_address = block.GetAddress(); const size_t block_pages = block.GetNumPages(); // If it has no pages, we don't need to do anything. @@ -348,7 +348,7 @@ Result KMemoryManager::AllocateForProcess(KPageGroup* out, size_t num_pages, u32 // Fill all the pages that we need to fill. bool any_new = false; { - PAddr cur_address = block_address; + KPhysicalAddress cur_address = block_address; size_t remaining_pages = block_pages; while (remaining_pages > 0) { // Get the manager for the current address. @@ -369,7 +369,7 @@ Result KMemoryManager::AllocateForProcess(KPageGroup* out, size_t num_pages, u32 // If there are new pages, update tracking for the allocation. if (any_new) { // Update tracking for the allocation. - PAddr cur_address = block_address; + KPhysicalAddress cur_address = block_address; size_t remaining_pages = block_pages; while (remaining_pages > 0) { // Get the manager for the current address. @@ -400,8 +400,9 @@ Result KMemoryManager::AllocateForProcess(KPageGroup* out, size_t num_pages, u32 R_SUCCEED(); } -size_t KMemoryManager::Impl::Initialize(PAddr address, size_t size, VAddr management, - VAddr management_end, Pool p) { +size_t KMemoryManager::Impl::Initialize(KPhysicalAddress address, size_t size, + KVirtualAddress management, KVirtualAddress management_end, + Pool p) { // Calculate management sizes. const size_t ref_count_size = (size / PageSize) * sizeof(u16); const size_t optimize_map_size = CalculateOptimizedProcessOverheadSize(size); @@ -417,7 +418,7 @@ size_t KMemoryManager::Impl::Initialize(PAddr address, size_t size, VAddr manage m_management_region = management; m_page_reference_counts.resize( Kernel::Board::Nintendo::Nx::KSystemControl::Init::GetIntendedMemorySize() / PageSize); - ASSERT(Common::IsAligned(m_management_region, PageSize)); + ASSERT(Common::IsAligned(GetInteger(m_management_region), PageSize)); // Initialize the manager's KPageHeap. m_heap.Initialize(address, size, management + manager_size, page_heap_size); @@ -425,15 +426,15 @@ size_t KMemoryManager::Impl::Initialize(PAddr address, size_t size, VAddr manage return total_management_size; } -void KMemoryManager::Impl::TrackUnoptimizedAllocation(PAddr block, size_t num_pages) { +void KMemoryManager::Impl::TrackUnoptimizedAllocation(KPhysicalAddress block, size_t num_pages) { UNREACHABLE(); } -void KMemoryManager::Impl::TrackOptimizedAllocation(PAddr block, size_t num_pages) { +void KMemoryManager::Impl::TrackOptimizedAllocation(KPhysicalAddress block, size_t num_pages) { UNREACHABLE(); } -bool KMemoryManager::Impl::ProcessOptimizedAllocation(PAddr block, size_t num_pages, +bool KMemoryManager::Impl::ProcessOptimizedAllocation(KPhysicalAddress block, size_t num_pages, u8 fill_pattern) { UNREACHABLE(); } diff --git a/src/core/hle/kernel/k_memory_manager.h b/src/core/hle/kernel/k_memory_manager.h index 401d4e644..7e4b41319 100644 --- a/src/core/hle/kernel/k_memory_manager.h +++ b/src/core/hle/kernel/k_memory_manager.h @@ -7,10 +7,10 @@ #include <tuple> #include "common/common_funcs.h" -#include "common/common_types.h" #include "core/hle/kernel/k_light_lock.h" #include "core/hle/kernel/k_memory_layout.h" #include "core/hle/kernel/k_page_heap.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/result.h" namespace Core { @@ -50,21 +50,21 @@ public: explicit KMemoryManager(Core::System& system); - void Initialize(VAddr management_region, size_t management_region_size); + void Initialize(KVirtualAddress management_region, size_t management_region_size); Result InitializeOptimizedMemory(u64 process_id, Pool pool); void FinalizeOptimizedMemory(u64 process_id, Pool pool); - PAddr AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, u32 option); + KPhysicalAddress AllocateAndOpenContinuous(size_t num_pages, size_t align_pages, u32 option); Result AllocateAndOpen(KPageGroup* out, size_t num_pages, u32 option); Result AllocateForProcess(KPageGroup* out, size_t num_pages, u32 option, u64 process_id, u8 fill_pattern); - Pool GetPool(PAddr address) const { + Pool GetPool(KPhysicalAddress address) const { return this->GetManager(address).GetPool(); } - void Open(PAddr address, size_t num_pages) { + void Open(KPhysicalAddress address, size_t num_pages) { // Repeatedly open references until we've done so for all pages. while (num_pages) { auto& manager = this->GetManager(address); @@ -80,7 +80,7 @@ public: } } - void OpenFirst(PAddr address, size_t num_pages) { + void OpenFirst(KPhysicalAddress address, size_t num_pages) { // Repeatedly open references until we've done so for all pages. while (num_pages) { auto& manager = this->GetManager(address); @@ -96,7 +96,7 @@ public: } } - void Close(PAddr address, size_t num_pages) { + void Close(KPhysicalAddress address, size_t num_pages) { // Repeatedly close references until we've done so for all pages. while (num_pages) { auto& manager = this->GetManager(address); @@ -199,16 +199,16 @@ private: public: Impl() = default; - size_t Initialize(PAddr address, size_t size, VAddr management, VAddr management_end, - Pool p); + size_t Initialize(KPhysicalAddress address, size_t size, KVirtualAddress management, + KVirtualAddress management_end, Pool p); - PAddr AllocateBlock(s32 index, bool random) { + KPhysicalAddress AllocateBlock(s32 index, bool random) { return m_heap.AllocateBlock(index, random); } - PAddr AllocateAligned(s32 index, size_t num_pages, size_t align_pages) { + KPhysicalAddress AllocateAligned(s32 index, size_t num_pages, size_t align_pages) { return m_heap.AllocateAligned(index, num_pages, align_pages); } - void Free(PAddr addr, size_t num_pages) { + void Free(KPhysicalAddress addr, size_t num_pages) { m_heap.Free(addr, num_pages); } @@ -220,10 +220,10 @@ private: UNIMPLEMENTED(); } - void TrackUnoptimizedAllocation(PAddr block, size_t num_pages); - void TrackOptimizedAllocation(PAddr block, size_t num_pages); + void TrackUnoptimizedAllocation(KPhysicalAddress block, size_t num_pages); + void TrackOptimizedAllocation(KPhysicalAddress block, size_t num_pages); - bool ProcessOptimizedAllocation(PAddr block, size_t num_pages, u8 fill_pattern); + bool ProcessOptimizedAllocation(KPhysicalAddress block, size_t num_pages, u8 fill_pattern); constexpr Pool GetPool() const { return m_pool; @@ -231,7 +231,7 @@ private: constexpr size_t GetSize() const { return m_heap.GetSize(); } - constexpr PAddr GetEndAddress() const { + constexpr KPhysicalAddress GetEndAddress() const { return m_heap.GetEndAddress(); } @@ -243,10 +243,10 @@ private: UNIMPLEMENTED(); } - constexpr size_t GetPageOffset(PAddr address) const { + constexpr size_t GetPageOffset(KPhysicalAddress address) const { return m_heap.GetPageOffset(address); } - constexpr size_t GetPageOffsetToEnd(PAddr address) const { + constexpr size_t GetPageOffsetToEnd(KPhysicalAddress address) const { return m_heap.GetPageOffsetToEnd(address); } @@ -263,7 +263,7 @@ private: return m_prev; } - void OpenFirst(PAddr address, size_t num_pages) { + void OpenFirst(KPhysicalAddress address, size_t num_pages) { size_t index = this->GetPageOffset(address); const size_t end = index + num_pages; while (index < end) { @@ -274,7 +274,7 @@ private: } } - void Open(PAddr address, size_t num_pages) { + void Open(KPhysicalAddress address, size_t num_pages) { size_t index = this->GetPageOffset(address); const size_t end = index + num_pages; while (index < end) { @@ -285,7 +285,7 @@ private: } } - void Close(PAddr address, size_t num_pages) { + void Close(KPhysicalAddress address, size_t num_pages) { size_t index = this->GetPageOffset(address); const size_t end = index + num_pages; @@ -323,18 +323,18 @@ private: KPageHeap m_heap; std::vector<RefCount> m_page_reference_counts; - VAddr m_management_region{}; + KVirtualAddress m_management_region{}; Pool m_pool{}; Impl* m_next{}; Impl* m_prev{}; }; private: - Impl& GetManager(PAddr address) { + Impl& GetManager(KPhysicalAddress address) { return m_managers[m_memory_layout.GetPhysicalLinearRegion(address).GetAttributes()]; } - const Impl& GetManager(PAddr address) const { + const Impl& GetManager(KPhysicalAddress address) const { return m_managers[m_memory_layout.GetPhysicalLinearRegion(address).GetAttributes()]; } diff --git a/src/core/hle/kernel/k_memory_region.h b/src/core/hle/kernel/k_memory_region.h index cfe86fb82..e3044f022 100644 --- a/src/core/hle/kernel/k_memory_region.h +++ b/src/core/hle/kernel/k_memory_region.h @@ -5,9 +5,9 @@ #include "common/assert.h" #include "common/common_funcs.h" -#include "common/common_types.h" #include "common/intrusive_red_black_tree.h" #include "core/hle/kernel/k_memory_region_type.h" +#include "core/hle/kernel/k_typed_address.h" namespace Kernel { @@ -243,10 +243,10 @@ public: void InsertDirectly(u64 address, u64 last_address, u32 attr = 0, u32 type_id = 0); bool Insert(u64 address, size_t size, u32 type_id, u32 new_attr = 0, u32 old_attr = 0); - VAddr GetRandomAlignedRegion(size_t size, size_t alignment, u32 type_id); + KVirtualAddress GetRandomAlignedRegion(size_t size, size_t alignment, u32 type_id); - VAddr GetRandomAlignedRegionWithGuard(size_t size, size_t alignment, u32 type_id, - size_t guard_size) { + KVirtualAddress GetRandomAlignedRegionWithGuard(size_t size, size_t alignment, u32 type_id, + size_t guard_size) { return this->GetRandomAlignedRegion(size + 2 * guard_size, alignment, type_id) + guard_size; } diff --git a/src/core/hle/kernel/k_page_buffer.cpp b/src/core/hle/kernel/k_page_buffer.cpp index 0c16dded4..e9830e6d9 100644 --- a/src/core/hle/kernel/k_page_buffer.cpp +++ b/src/core/hle/kernel/k_page_buffer.cpp @@ -10,8 +10,8 @@ namespace Kernel { -KPageBuffer* KPageBuffer::FromPhysicalAddress(Core::System& system, PAddr phys_addr) { - ASSERT(Common::IsAligned(phys_addr, PageSize)); +KPageBuffer* KPageBuffer::FromPhysicalAddress(Core::System& system, KPhysicalAddress phys_addr) { + ASSERT(Common::IsAligned(GetInteger(phys_addr), PageSize)); return system.DeviceMemory().GetPointer<KPageBuffer>(phys_addr); } diff --git a/src/core/hle/kernel/k_page_buffer.h b/src/core/hle/kernel/k_page_buffer.h index b7a3ccb4a..f6a7f1e39 100644 --- a/src/core/hle/kernel/k_page_buffer.h +++ b/src/core/hle/kernel/k_page_buffer.h @@ -26,7 +26,7 @@ public: explicit KPageBuffer(KernelCore&) {} KPageBuffer() = default; - static KPageBuffer* FromPhysicalAddress(Core::System& system, PAddr phys_addr); + static KPageBuffer* FromPhysicalAddress(Core::System& system, KPhysicalAddress phys_addr); private: alignas(PageSize) std::array<u8, PageSize> m_buffer{}; diff --git a/src/core/hle/kernel/k_page_group.h b/src/core/hle/kernel/k_page_group.h index c07f17663..b32909f05 100644 --- a/src/core/hle/kernel/k_page_group.h +++ b/src/core/hle/kernel/k_page_group.h @@ -22,7 +22,7 @@ public: constexpr explicit KBlockInfo() : m_next(nullptr) {} constexpr void Initialize(KPhysicalAddress addr, size_t np) { - ASSERT(Common::IsAligned(addr, PageSize)); + ASSERT(Common::IsAligned(GetInteger(addr), PageSize)); ASSERT(static_cast<u32>(np) == np); m_page_index = static_cast<u32>(addr / PageSize); diff --git a/src/core/hle/kernel/k_page_heap.cpp b/src/core/hle/kernel/k_page_heap.cpp index 7b02c7d8b..95762b5a2 100644 --- a/src/core/hle/kernel/k_page_heap.cpp +++ b/src/core/hle/kernel/k_page_heap.cpp @@ -6,14 +6,14 @@ namespace Kernel { -void KPageHeap::Initialize(PAddr address, size_t size, VAddr management_address, - size_t management_size, const size_t* block_shifts, - size_t num_block_shifts) { +void KPageHeap::Initialize(KPhysicalAddress address, size_t size, + KVirtualAddress management_address, size_t management_size, + const size_t* block_shifts, size_t num_block_shifts) { // Check our assumptions. - ASSERT(Common::IsAligned(address, PageSize)); + ASSERT(Common::IsAligned(GetInteger(address), PageSize)); ASSERT(Common::IsAligned(size, PageSize)); ASSERT(0 < num_block_shifts && num_block_shifts <= NumMemoryBlockPageShifts); - const VAddr management_end = management_address + management_size; + const KVirtualAddress management_end = management_address + management_size; // Set our members. m_heap_address = address; @@ -31,7 +31,7 @@ void KPageHeap::Initialize(PAddr address, size_t size, VAddr management_address, } // Ensure we didn't overextend our bounds. - ASSERT(VAddr(cur_bitmap_storage) <= management_end); + ASSERT(KVirtualAddress(cur_bitmap_storage) <= management_end); } size_t KPageHeap::GetNumFreePages() const { @@ -44,11 +44,11 @@ size_t KPageHeap::GetNumFreePages() const { return num_free; } -PAddr KPageHeap::AllocateByLinearSearch(s32 index) { +KPhysicalAddress KPageHeap::AllocateByLinearSearch(s32 index) { const size_t needed_size = m_blocks[index].GetSize(); for (s32 i = index; i < static_cast<s32>(m_num_blocks); i++) { - if (const PAddr addr = m_blocks[i].PopBlock(false); addr != 0) { + if (const KPhysicalAddress addr = m_blocks[i].PopBlock(false); addr != 0) { if (const size_t allocated_size = m_blocks[i].GetSize(); allocated_size > needed_size) { this->Free(addr + needed_size, (allocated_size - needed_size) / PageSize); } @@ -59,7 +59,7 @@ PAddr KPageHeap::AllocateByLinearSearch(s32 index) { return 0; } -PAddr KPageHeap::AllocateByRandom(s32 index, size_t num_pages, size_t align_pages) { +KPhysicalAddress KPageHeap::AllocateByRandom(s32 index, size_t num_pages, size_t align_pages) { // Get the size and required alignment. const size_t needed_size = num_pages * PageSize; const size_t align_size = align_pages * PageSize; @@ -110,7 +110,7 @@ PAddr KPageHeap::AllocateByRandom(s32 index, size_t num_pages, size_t align_page } // Pop a block from the index we selected. - if (PAddr addr = m_blocks[index].PopBlock(true); addr != 0) { + if (KPhysicalAddress addr = m_blocks[index].PopBlock(true); addr != 0) { // Determine how much size we have left over. if (const size_t leftover_size = m_blocks[index].GetSize() - needed_size; leftover_size > 0) { @@ -141,13 +141,13 @@ PAddr KPageHeap::AllocateByRandom(s32 index, size_t num_pages, size_t align_page return 0; } -void KPageHeap::FreeBlock(PAddr block, s32 index) { +void KPageHeap::FreeBlock(KPhysicalAddress block, s32 index) { do { block = m_blocks[index++].PushBlock(block); } while (block != 0); } -void KPageHeap::Free(PAddr addr, size_t num_pages) { +void KPageHeap::Free(KPhysicalAddress addr, size_t num_pages) { // Freeing no pages is a no-op. if (num_pages == 0) { return; @@ -155,16 +155,16 @@ void KPageHeap::Free(PAddr addr, size_t num_pages) { // Find the largest block size that we can free, and free as many as possible. s32 big_index = static_cast<s32>(m_num_blocks) - 1; - const PAddr start = addr; - const PAddr end = addr + num_pages * PageSize; - PAddr before_start = start; - PAddr before_end = start; - PAddr after_start = end; - PAddr after_end = end; + const KPhysicalAddress start = addr; + const KPhysicalAddress end = addr + num_pages * PageSize; + KPhysicalAddress before_start = start; + KPhysicalAddress before_end = start; + KPhysicalAddress after_start = end; + KPhysicalAddress after_end = end; while (big_index >= 0) { const size_t block_size = m_blocks[big_index].GetSize(); - const PAddr big_start = Common::AlignUp(start, block_size); - const PAddr big_end = Common::AlignDown(end, block_size); + const KPhysicalAddress big_start = Common::AlignUp(GetInteger(start), block_size); + const KPhysicalAddress big_end = Common::AlignDown(GetInteger(end), block_size); if (big_start < big_end) { // Free as many big blocks as we can. for (auto block = big_start; block < big_end; block += block_size) { diff --git a/src/core/hle/kernel/k_page_heap.h b/src/core/hle/kernel/k_page_heap.h index 9021edcf7..c55225bac 100644 --- a/src/core/hle/kernel/k_page_heap.h +++ b/src/core/hle/kernel/k_page_heap.h @@ -8,8 +8,8 @@ #include "common/alignment.h" #include "common/common_funcs.h" -#include "common/common_types.h" #include "core/hle/kernel/k_page_bitmap.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/memory_types.h" namespace Kernel { @@ -18,24 +18,24 @@ class KPageHeap { public: KPageHeap() = default; - constexpr PAddr GetAddress() const { + constexpr KPhysicalAddress GetAddress() const { return m_heap_address; } constexpr size_t GetSize() const { return m_heap_size; } - constexpr PAddr GetEndAddress() const { + constexpr KPhysicalAddress GetEndAddress() const { return this->GetAddress() + this->GetSize(); } - constexpr size_t GetPageOffset(PAddr block) const { + constexpr size_t GetPageOffset(KPhysicalAddress block) const { return (block - this->GetAddress()) / PageSize; } - constexpr size_t GetPageOffsetToEnd(PAddr block) const { + constexpr size_t GetPageOffsetToEnd(KPhysicalAddress block) const { return (this->GetEndAddress() - block) / PageSize; } - void Initialize(PAddr heap_address, size_t heap_size, VAddr management_address, - size_t management_size) { + void Initialize(KPhysicalAddress heap_address, size_t heap_size, + KVirtualAddress management_address, size_t management_size) { return this->Initialize(heap_address, heap_size, management_address, management_size, MemoryBlockPageShifts.data(), NumMemoryBlockPageShifts); } @@ -53,7 +53,7 @@ public: m_initial_used_size = m_heap_size - free_size - reserved_size; } - PAddr AllocateBlock(s32 index, bool random) { + KPhysicalAddress AllocateBlock(s32 index, bool random) { if (random) { const size_t block_pages = m_blocks[index].GetNumPages(); return this->AllocateByRandom(index, block_pages, block_pages); @@ -62,12 +62,12 @@ public: } } - PAddr AllocateAligned(s32 index, size_t num_pages, size_t align_pages) { + KPhysicalAddress AllocateAligned(s32 index, size_t num_pages, size_t align_pages) { // TODO: linear search support? return this->AllocateByRandom(index, num_pages, align_pages); } - void Free(PAddr addr, size_t num_pages); + void Free(KPhysicalAddress addr, size_t num_pages); static size_t CalculateManagementOverheadSize(size_t region_size) { return CalculateManagementOverheadSize(region_size, MemoryBlockPageShifts.data(), @@ -125,24 +125,25 @@ private: return this->GetNumFreeBlocks() * this->GetNumPages(); } - u64* Initialize(PAddr addr, size_t size, size_t bs, size_t nbs, u64* bit_storage) { + u64* Initialize(KPhysicalAddress addr, size_t size, size_t bs, size_t nbs, + u64* bit_storage) { // Set shifts. m_block_shift = bs; m_next_block_shift = nbs; // Align up the address. - PAddr end = addr + size; + KPhysicalAddress end = addr + size; const size_t align = (m_next_block_shift != 0) ? (u64(1) << m_next_block_shift) : (u64(1) << m_block_shift); - addr = Common::AlignDown(addr, align); - end = Common::AlignUp(end, align); + addr = Common::AlignDown(GetInteger(addr), align); + end = Common::AlignUp(GetInteger(end), align); m_heap_address = addr; m_end_offset = (end - addr) / (u64(1) << m_block_shift); return m_bitmap.Initialize(bit_storage, m_end_offset); } - PAddr PushBlock(PAddr address) { + KPhysicalAddress PushBlock(KPhysicalAddress address) { // Set the bit for the free block. size_t offset = (address - m_heap_address) >> this->GetShift(); m_bitmap.SetBit(offset); @@ -161,7 +162,7 @@ private: return {}; } - PAddr PopBlock(bool random) { + KPhysicalAddress PopBlock(bool random) { // Find a free block. s64 soffset = m_bitmap.FindFreeBlock(random); if (soffset < 0) { @@ -187,18 +188,19 @@ private: private: KPageBitmap m_bitmap; - PAddr m_heap_address{}; + KPhysicalAddress m_heap_address{}; uintptr_t m_end_offset{}; size_t m_block_shift{}; size_t m_next_block_shift{}; }; private: - void Initialize(PAddr heap_address, size_t heap_size, VAddr management_address, - size_t management_size, const size_t* block_shifts, size_t num_block_shifts); + void Initialize(KPhysicalAddress heap_address, size_t heap_size, + KVirtualAddress management_address, size_t management_size, + const size_t* block_shifts, size_t num_block_shifts); size_t GetNumFreePages() const; - void FreeBlock(PAddr block, s32 index); + void FreeBlock(KPhysicalAddress block, s32 index); static constexpr size_t NumMemoryBlockPageShifts{7}; static constexpr std::array<size_t, NumMemoryBlockPageShifts> MemoryBlockPageShifts{ @@ -206,14 +208,14 @@ private: }; private: - PAddr AllocateByLinearSearch(s32 index); - PAddr AllocateByRandom(s32 index, size_t num_pages, size_t align_pages); + KPhysicalAddress AllocateByLinearSearch(s32 index); + KPhysicalAddress AllocateByRandom(s32 index, size_t num_pages, size_t align_pages); static size_t CalculateManagementOverheadSize(size_t region_size, const size_t* block_shifts, size_t num_block_shifts); private: - PAddr m_heap_address{}; + KPhysicalAddress m_heap_address{}; size_t m_heap_size{}; size_t m_initial_used_size{}; size_t m_num_blocks{}; diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp index 2e13d5d0d..02b5cada4 100644 --- a/src/core/hle/kernel/k_page_table.cpp +++ b/src/core/hle/kernel/k_page_table.cpp @@ -106,9 +106,10 @@ KPageTable::~KPageTable() = default; Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, bool enable_aslr, bool enable_das_merge, bool from_back, - KMemoryManager::Pool pool, VAddr code_addr, + KMemoryManager::Pool pool, KProcessAddress code_addr, size_t code_size, KSystemResource* system_resource, - KResourceLimit* resource_limit) { + KResourceLimit* resource_limit, + Core::Memory::Memory& memory) { const auto GetSpaceStart = [this](KAddressSpaceInfo::Type type) { return KAddressSpaceInfo::GetAddressSpaceStart(m_address_space_width, type); @@ -117,10 +118,13 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type return KAddressSpaceInfo::GetAddressSpaceSize(m_address_space_width, type); }; + // Set the tracking memory + m_memory = std::addressof(memory); + // Set our width and heap/alias sizes m_address_space_width = GetAddressSpaceWidthFromType(as_type); - const VAddr start = 0; - const VAddr end{1ULL << m_address_space_width}; + const KProcessAddress start = 0; + const KProcessAddress end{1ULL << m_address_space_width}; size_t alias_region_size{GetSpaceSize(KAddressSpaceInfo::Type::Alias)}; size_t heap_region_size{GetSpaceSize(KAddressSpaceInfo::Type::Heap)}; @@ -135,8 +139,8 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type // Set code regions and determine remaining constexpr size_t RegionAlignment{2_MiB}; - VAddr process_code_start{}; - VAddr process_code_end{}; + KProcessAddress process_code_start{}; + KProcessAddress process_code_end{}; size_t stack_region_size{}; size_t kernel_map_region_size{}; @@ -149,8 +153,8 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type m_code_region_end = m_code_region_start + GetSpaceSize(KAddressSpaceInfo::Type::Map39Bit); m_alias_code_region_start = m_code_region_start; m_alias_code_region_end = m_code_region_end; - process_code_start = Common::AlignDown(code_addr, RegionAlignment); - process_code_end = Common::AlignUp(code_addr + code_size, RegionAlignment); + process_code_start = Common::AlignDown(GetInteger(code_addr), RegionAlignment); + process_code_end = Common::AlignUp(GetInteger(code_addr) + code_size, RegionAlignment); } else { stack_region_size = 0; kernel_map_region_size = 0; @@ -178,7 +182,7 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type m_resource_limit = resource_limit; // Determine the region we can place our undetermineds in - VAddr alloc_start{}; + KProcessAddress alloc_start{}; size_t alloc_size{}; if ((process_code_start - m_code_region_start) >= (end - process_code_end)) { alloc_start = m_code_region_start; @@ -292,7 +296,7 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type : KMemoryManager::Direction::FromFront); // Ensure that we regions inside our address space - auto IsInAddressSpace = [&](VAddr addr) { + auto IsInAddressSpace = [&](KProcessAddress addr) { return m_address_space_start <= addr && addr <= m_address_space_end; }; ASSERT(IsInAddressSpace(m_alias_region_start)); @@ -305,14 +309,14 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type ASSERT(IsInAddressSpace(m_kernel_map_region_end)); // Ensure that we selected regions that don't overlap - const VAddr alias_start{m_alias_region_start}; - const VAddr alias_last{m_alias_region_end - 1}; - const VAddr heap_start{m_heap_region_start}; - const VAddr heap_last{m_heap_region_end - 1}; - const VAddr stack_start{m_stack_region_start}; - const VAddr stack_last{m_stack_region_end - 1}; - const VAddr kmap_start{m_kernel_map_region_start}; - const VAddr kmap_last{m_kernel_map_region_end - 1}; + const KProcessAddress alias_start{m_alias_region_start}; + const KProcessAddress alias_last{m_alias_region_end - 1}; + const KProcessAddress heap_start{m_heap_region_start}; + const KProcessAddress heap_last{m_heap_region_end - 1}; + const KProcessAddress stack_start{m_stack_region_start}; + const KProcessAddress stack_last{m_stack_region_end - 1}; + const KProcessAddress kmap_start{m_kernel_map_region_start}; + const KProcessAddress kmap_last{m_kernel_map_region_end - 1}; ASSERT(alias_last < heap_start || heap_last < alias_start); ASSERT(alias_last < stack_start || stack_last < alias_start); ASSERT(alias_last < kmap_start || kmap_last < alias_start); @@ -334,9 +338,10 @@ Result KPageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_type void KPageTable::Finalize() { // Finalize memory blocks. - m_memory_block_manager.Finalize(m_memory_block_slab_manager, [&](VAddr addr, u64 size) { - m_system.Memory().UnmapRegion(*m_page_table_impl, addr, size); - }); + m_memory_block_manager.Finalize(m_memory_block_slab_manager, + [&](KProcessAddress addr, u64 size) { + m_memory->UnmapRegion(*m_page_table_impl, addr, size); + }); // Release any insecure mapped memory. if (m_mapped_insecure_memory) { @@ -352,7 +357,7 @@ void KPageTable::Finalize() { m_page_table_impl.reset(); } -Result KPageTable::MapProcessCode(VAddr addr, size_t num_pages, KMemoryState state, +Result KPageTable::MapProcessCode(KProcessAddress addr, size_t num_pages, KMemoryState state, KMemoryPermission perm) { const u64 size{num_pages * PageSize}; @@ -388,7 +393,8 @@ Result KPageTable::MapProcessCode(VAddr addr, size_t num_pages, KMemoryState sta R_SUCCEED(); } -Result KPageTable::MapCodeMemory(VAddr dst_address, VAddr src_address, size_t size) { +Result KPageTable::MapCodeMemory(KProcessAddress dst_address, KProcessAddress src_address, + size_t size) { // Validate the mapping request. R_UNLESS(this->CanContain(dst_address, size, KMemoryState::AliasCode), ResultInvalidMemoryRegion); @@ -473,7 +479,8 @@ Result KPageTable::MapCodeMemory(VAddr dst_address, VAddr src_address, size_t si R_SUCCEED(); } -Result KPageTable::UnmapCodeMemory(VAddr dst_address, VAddr src_address, size_t size, +Result KPageTable::UnmapCodeMemory(KProcessAddress dst_address, KProcessAddress src_address, + size_t size, ICacheInvalidationStrategy icache_invalidation_strategy) { // Validate the mapping request. R_UNLESS(this->CanContain(dst_address, size, KMemoryState::AliasCode), @@ -525,7 +532,7 @@ Result KPageTable::UnmapCodeMemory(VAddr dst_address, VAddr src_address, size_t SCOPE_EXIT({ if (reprotected_pages && any_code_pages) { if (icache_invalidation_strategy == ICacheInvalidationStrategy::InvalidateRange) { - m_system.InvalidateCpuInstructionCacheRange(dst_address, size); + m_system.InvalidateCpuInstructionCacheRange(GetInteger(dst_address), size); } else { m_system.InvalidateCpuInstructionCaches(); } @@ -575,9 +582,10 @@ Result KPageTable::UnmapCodeMemory(VAddr dst_address, VAddr src_address, size_t R_SUCCEED(); } -VAddr KPageTable::FindFreeArea(VAddr region_start, size_t region_num_pages, size_t num_pages, - size_t alignment, size_t offset, size_t guard_pages) { - VAddr address = 0; +KProcessAddress KPageTable::FindFreeArea(KProcessAddress region_start, size_t region_num_pages, + size_t num_pages, size_t alignment, size_t offset, + size_t guard_pages) { + KProcessAddress address = 0; if (num_pages <= region_num_pages) { if (this->IsAslrEnabled()) { @@ -593,7 +601,7 @@ VAddr KPageTable::FindFreeArea(VAddr region_start, size_t region_num_pages, size return address; } -Result KPageTable::MakePageGroup(KPageGroup& pg, VAddr addr, size_t num_pages) { +Result KPageTable::MakePageGroup(KPageGroup& pg, KProcessAddress addr, size_t num_pages) { ASSERT(this->IsLockedByCurrentThread()); const size_t size = num_pages * PageSize; @@ -604,11 +612,11 @@ Result KPageTable::MakePageGroup(KPageGroup& pg, VAddr addr, size_t num_pages) { // Begin traversal. Common::PageTable::TraversalContext context; Common::PageTable::TraversalEntry next_entry; - R_UNLESS(m_page_table_impl->BeginTraversal(next_entry, context, addr), + R_UNLESS(m_page_table_impl->BeginTraversal(next_entry, context, GetInteger(addr)), ResultInvalidCurrentMemory); // Prepare tracking variables. - PAddr cur_addr = next_entry.phys_addr; + KPhysicalAddress cur_addr = next_entry.phys_addr; size_t cur_size = next_entry.block_size - (cur_addr & (next_entry.block_size - 1)); size_t tot_size = cur_size; @@ -646,7 +654,7 @@ Result KPageTable::MakePageGroup(KPageGroup& pg, VAddr addr, size_t num_pages) { R_SUCCEED(); } -bool KPageTable::IsValidPageGroup(const KPageGroup& pg, VAddr addr, size_t num_pages) { +bool KPageTable::IsValidPageGroup(const KPageGroup& pg, KProcessAddress addr, size_t num_pages) { ASSERT(this->IsLockedByCurrentThread()); const size_t size = num_pages * PageSize; @@ -659,7 +667,7 @@ bool KPageTable::IsValidPageGroup(const KPageGroup& pg, VAddr addr, size_t num_p // We're going to validate that the group we'd expect is the group we see. auto cur_it = pg.begin(); - PAddr cur_block_address = cur_it->GetAddress(); + KPhysicalAddress cur_block_address = cur_it->GetAddress(); size_t cur_block_pages = cur_it->GetNumPages(); auto UpdateCurrentIterator = [&]() { @@ -677,12 +685,12 @@ bool KPageTable::IsValidPageGroup(const KPageGroup& pg, VAddr addr, size_t num_p // Begin traversal. Common::PageTable::TraversalContext context; Common::PageTable::TraversalEntry next_entry; - if (!m_page_table_impl->BeginTraversal(next_entry, context, addr)) { + if (!m_page_table_impl->BeginTraversal(next_entry, context, GetInteger(addr))) { return false; } // Prepare tracking variables. - PAddr cur_addr = next_entry.phys_addr; + KPhysicalAddress cur_addr = next_entry.phys_addr; size_t cur_size = next_entry.block_size - (cur_addr & (next_entry.block_size - 1)); size_t tot_size = cur_size; @@ -734,8 +742,8 @@ bool KPageTable::IsValidPageGroup(const KPageGroup& pg, VAddr addr, size_t num_p return cur_block_address == cur_addr && cur_block_pages == (cur_size / PageSize); } -Result KPageTable::UnmapProcessMemory(VAddr dst_addr, size_t size, KPageTable& src_page_table, - VAddr src_addr) { +Result KPageTable::UnmapProcessMemory(KProcessAddress dst_addr, size_t size, + KPageTable& src_page_table, KProcessAddress src_addr) { // Acquire the table locks. KScopedLightLockPair lk(src_page_table.m_general_lock, m_general_lock); @@ -774,8 +782,8 @@ Result KPageTable::UnmapProcessMemory(VAddr dst_addr, size_t size, KPageTable& s } Result KPageTable::SetupForIpcClient(PageLinkedList* page_list, size_t* out_blocks_needed, - VAddr address, size_t size, KMemoryPermission test_perm, - KMemoryState dst_state) { + KProcessAddress address, size_t size, + KMemoryPermission test_perm, KMemoryState dst_state) { // Validate pre-conditions. ASSERT(this->IsLockedByCurrentThread()); ASSERT(test_perm == KMemoryPermission::UserReadWrite || @@ -790,10 +798,10 @@ Result KPageTable::SetupForIpcClient(PageLinkedList* page_list, size_t* out_bloc : KMemoryPermission::UserRead; // Get aligned extents. - const VAddr aligned_src_start = Common::AlignDown((address), PageSize); - const VAddr aligned_src_end = Common::AlignUp((address) + size, PageSize); - const VAddr mapping_src_start = Common::AlignUp((address), PageSize); - const VAddr mapping_src_end = Common::AlignDown((address) + size, PageSize); + const KProcessAddress aligned_src_start = Common::AlignDown(GetInteger(address), PageSize); + const KProcessAddress aligned_src_end = Common::AlignUp(GetInteger(address) + size, PageSize); + const KProcessAddress mapping_src_start = Common::AlignUp(GetInteger(address), PageSize); + const KProcessAddress mapping_src_end = Common::AlignDown(GetInteger(address) + size, PageSize); const auto aligned_src_last = (aligned_src_end)-1; const auto mapping_src_last = (mapping_src_end)-1; @@ -840,14 +848,15 @@ Result KPageTable::SetupForIpcClient(PageLinkedList* page_list, size_t* out_bloc test_attr_mask, KMemoryAttribute::None)); if (mapping_src_start < mapping_src_end && (mapping_src_start) < info.GetEndAddress() && - info.GetAddress() < (mapping_src_end)) { - const auto cur_start = - info.GetAddress() >= (mapping_src_start) ? info.GetAddress() : (mapping_src_start); + info.GetAddress() < GetInteger(mapping_src_end)) { + const auto cur_start = info.GetAddress() >= GetInteger(mapping_src_start) + ? info.GetAddress() + : (mapping_src_start); const auto cur_end = mapping_src_last >= info.GetLastAddress() ? info.GetEndAddress() : (mapping_src_end); const size_t cur_size = cur_end - cur_start; - if (info.GetAddress() < (mapping_src_start)) { + if (info.GetAddress() < GetInteger(mapping_src_start)) { ++blocks_needed; } if (mapping_src_last < info.GetLastAddress()) { @@ -882,30 +891,32 @@ Result KPageTable::SetupForIpcClient(PageLinkedList* page_list, size_t* out_bloc R_SUCCEED(); } -Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_addr, - KMemoryPermission test_perm, KMemoryState dst_state, - KPageTable& src_page_table, bool send) { +Result KPageTable::SetupForIpcServer(KProcessAddress* out_addr, size_t size, + KProcessAddress src_addr, KMemoryPermission test_perm, + KMemoryState dst_state, KPageTable& src_page_table, + bool send) { ASSERT(this->IsLockedByCurrentThread()); ASSERT(src_page_table.IsLockedByCurrentThread()); // Check that we can theoretically map. - const VAddr region_start = m_alias_region_start; + const KProcessAddress region_start = m_alias_region_start; const size_t region_size = m_alias_region_end - m_alias_region_start; R_UNLESS(size < region_size, ResultOutOfAddressSpace); // Get aligned source extents. - const VAddr src_start = src_addr; - const VAddr src_end = src_addr + size; - const VAddr aligned_src_start = Common::AlignDown((src_start), PageSize); - const VAddr aligned_src_end = Common::AlignUp((src_start) + size, PageSize); - const VAddr mapping_src_start = Common::AlignUp((src_start), PageSize); - const VAddr mapping_src_end = Common::AlignDown((src_start) + size, PageSize); + const KProcessAddress src_start = src_addr; + const KProcessAddress src_end = src_addr + size; + const KProcessAddress aligned_src_start = Common::AlignDown(GetInteger(src_start), PageSize); + const KProcessAddress aligned_src_end = Common::AlignUp(GetInteger(src_start) + size, PageSize); + const KProcessAddress mapping_src_start = Common::AlignUp(GetInteger(src_start), PageSize); + const KProcessAddress mapping_src_end = + Common::AlignDown(GetInteger(src_start) + size, PageSize); const size_t aligned_src_size = aligned_src_end - aligned_src_start; const size_t mapping_src_size = (mapping_src_start < mapping_src_end) ? (mapping_src_end - mapping_src_start) : 0; // Select a random address to map at. - VAddr dst_addr = + KProcessAddress dst_addr = this->FindFreeArea(region_start, region_size / PageSize, aligned_src_size / PageSize, PageSize, 0, this->GetNumGuardPages()); @@ -930,9 +941,9 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add R_UNLESS(memory_reservation.Succeeded(), ResultLimitReached); // Ensure that we manage page references correctly. - PAddr start_partial_page = 0; - PAddr end_partial_page = 0; - VAddr cur_mapped_addr = dst_addr; + KPhysicalAddress start_partial_page = 0; + KPhysicalAddress end_partial_page = 0; + KProcessAddress cur_mapped_addr = dst_addr; // If the partial pages are mapped, an extra reference will have been opened. Otherwise, they'll // free on scope exit. @@ -977,11 +988,12 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add // Begin traversal. Common::PageTable::TraversalContext context; Common::PageTable::TraversalEntry next_entry; - bool traverse_valid = src_impl.BeginTraversal(next_entry, context, aligned_src_start); + bool traverse_valid = + src_impl.BeginTraversal(next_entry, context, GetInteger(aligned_src_start)); ASSERT(traverse_valid); // Prepare tracking variables. - PAddr cur_block_addr = next_entry.phys_addr; + KPhysicalAddress cur_block_addr = next_entry.phys_addr; size_t cur_block_size = next_entry.block_size - ((cur_block_addr) & (next_entry.block_size - 1)); size_t tot_block_size = cur_block_size; @@ -989,7 +1001,7 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add // Map the start page, if we have one. if (start_partial_page != 0) { // Ensure the page holds correct data. - const VAddr start_partial_virt = + const KVirtualAddress start_partial_virt = GetHeapVirtualAddress(m_system.Kernel().MemoryLayout(), start_partial_page); if (send) { const size_t partial_offset = src_start - aligned_src_start; @@ -1002,21 +1014,22 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add clear_size = 0; } - std::memset(m_system.Memory().GetPointer<void>(start_partial_virt), fill_val, + std::memset(m_memory->GetPointer<void>(GetInteger(start_partial_virt)), fill_val, partial_offset); std::memcpy( - m_system.Memory().GetPointer<void>(start_partial_virt + partial_offset), - m_system.Memory().GetPointer<void>( - GetHeapVirtualAddress(m_system.Kernel().MemoryLayout(), cur_block_addr) + - partial_offset), + m_memory->GetPointer<void>(GetInteger(start_partial_virt) + partial_offset), + m_memory->GetPointer<void>(GetInteger(GetHeapVirtualAddress( + m_system.Kernel().MemoryLayout(), cur_block_addr)) + + partial_offset), copy_size); if (clear_size > 0) { - std::memset(m_system.Memory().GetPointer<void>(start_partial_virt + partial_offset + - copy_size), + std::memset(m_memory->GetPointer<void>(GetInteger(start_partial_virt) + + partial_offset + copy_size), fill_val, clear_size); } } else { - std::memset(m_system.Memory().GetPointer<void>(start_partial_virt), fill_val, PageSize); + std::memset(m_memory->GetPointer<void>(GetInteger(start_partial_virt)), fill_val, + PageSize); } // Map the page. @@ -1061,7 +1074,8 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add } // Handle the last direct-mapped page. - if (const VAddr mapped_block_end = aligned_src_start + tot_block_size - cur_block_size; + if (const KProcessAddress mapped_block_end = + aligned_src_start + tot_block_size - cur_block_size; mapped_block_end < mapping_src_end) { const size_t last_block_size = mapping_src_end - mapped_block_end; @@ -1084,18 +1098,19 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add // Map the end page, if we have one. if (end_partial_page != 0) { // Ensure the page holds correct data. - const VAddr end_partial_virt = + const KVirtualAddress end_partial_virt = GetHeapVirtualAddress(m_system.Kernel().MemoryLayout(), end_partial_page); if (send) { const size_t copy_size = src_end - mapping_src_end; - std::memcpy(m_system.Memory().GetPointer<void>(end_partial_virt), - m_system.Memory().GetPointer<void>(GetHeapVirtualAddress( - m_system.Kernel().MemoryLayout(), cur_block_addr)), + std::memcpy(m_memory->GetPointer<void>(GetInteger(end_partial_virt)), + m_memory->GetPointer<void>(GetInteger(GetHeapVirtualAddress( + m_system.Kernel().MemoryLayout(), cur_block_addr))), copy_size); - std::memset(m_system.Memory().GetPointer<void>(end_partial_virt + copy_size), fill_val, - PageSize - copy_size); + std::memset(m_memory->GetPointer<void>(GetInteger(end_partial_virt) + copy_size), + fill_val, PageSize - copy_size); } else { - std::memset(m_system.Memory().GetPointer<void>(end_partial_virt), fill_val, PageSize); + std::memset(m_memory->GetPointer<void>(GetInteger(end_partial_virt)), fill_val, + PageSize); } // Map the page. @@ -1116,7 +1131,7 @@ Result KPageTable::SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_add R_SUCCEED(); } -Result KPageTable::SetupForIpc(VAddr* out_dst_addr, size_t size, VAddr src_addr, +Result KPageTable::SetupForIpc(KProcessAddress* out_dst_addr, size_t size, KProcessAddress src_addr, KPageTable& src_page_table, KMemoryPermission test_perm, KMemoryState dst_state, bool send) { // For convenience, alias this. @@ -1142,8 +1157,8 @@ Result KPageTable::SetupForIpc(VAddr* out_dst_addr, size_t size, VAddr src_addr, R_TRY(allocator_result); // Get the mapped extents. - const VAddr src_map_start = Common::AlignUp((src_addr), PageSize); - const VAddr src_map_end = Common::AlignDown((src_addr) + size, PageSize); + const KProcessAddress src_map_start = Common::AlignUp(GetInteger(src_addr), PageSize); + const KProcessAddress src_map_end = Common::AlignDown(GetInteger(src_addr) + size, PageSize); const size_t src_map_size = src_map_end - src_map_start; // Ensure that we clean up appropriately if we fail after this. @@ -1172,7 +1187,8 @@ Result KPageTable::SetupForIpc(VAddr* out_dst_addr, size_t size, VAddr src_addr, R_SUCCEED(); } -Result KPageTable::CleanupForIpcServer(VAddr address, size_t size, KMemoryState dst_state) { +Result KPageTable::CleanupForIpcServer(KProcessAddress address, size_t size, + KMemoryState dst_state) { // Validate the address. R_UNLESS(this->Contains(address, size), ResultInvalidCurrentMemory); @@ -1196,8 +1212,8 @@ Result KPageTable::CleanupForIpcServer(VAddr address, size_t size, KMemoryState KScopedPageTableUpdater updater(this); // Get aligned extents. - const VAddr aligned_start = Common::AlignDown((address), PageSize); - const VAddr aligned_end = Common::AlignUp((address) + size, PageSize); + const KProcessAddress aligned_start = Common::AlignDown(GetInteger(address), PageSize); + const KProcessAddress aligned_end = Common::AlignUp(GetInteger(address) + size, PageSize); const size_t aligned_size = aligned_end - aligned_start; const size_t aligned_num_pages = aligned_size / PageSize; @@ -1211,22 +1227,23 @@ Result KPageTable::CleanupForIpcServer(VAddr address, size_t size, KMemoryState KMemoryBlockDisableMergeAttribute::Normal); // Release from the resource limit as relevant. - const VAddr mapping_start = Common::AlignUp((address), PageSize); - const VAddr mapping_end = Common::AlignDown((address) + size, PageSize); + const KProcessAddress mapping_start = Common::AlignUp(GetInteger(address), PageSize); + const KProcessAddress mapping_end = Common::AlignDown(GetInteger(address) + size, PageSize); const size_t mapping_size = (mapping_start < mapping_end) ? mapping_end - mapping_start : 0; m_resource_limit->Release(LimitableResource::PhysicalMemoryMax, aligned_size - mapping_size); R_SUCCEED(); } -Result KPageTable::CleanupForIpcClient(VAddr address, size_t size, KMemoryState dst_state) { +Result KPageTable::CleanupForIpcClient(KProcessAddress address, size_t size, + KMemoryState dst_state) { // Validate the address. R_UNLESS(this->Contains(address, size), ResultInvalidCurrentMemory); // Get aligned source extents. - const VAddr mapping_start = Common::AlignUp((address), PageSize); - const VAddr mapping_end = Common::AlignDown((address) + size, PageSize); - const VAddr mapping_last = mapping_end - 1; + const KProcessAddress mapping_start = Common::AlignUp(GetInteger(address), PageSize); + const KProcessAddress mapping_end = Common::AlignDown(GetInteger(address) + size, PageSize); + const KProcessAddress mapping_last = mapping_end - 1; const size_t mapping_size = (mapping_start < mapping_end) ? (mapping_end - mapping_start) : 0; // If nothing was mapped, we're actually done immediately. @@ -1279,7 +1296,7 @@ Result KPageTable::CleanupForIpcClient(VAddr address, size_t size, KMemoryState KMemoryInfo cur_info = start_it->GetMemoryInfo(); // Create tracking variables. - VAddr cur_address = cur_info.GetAddress(); + KProcessAddress cur_address = cur_info.GetAddress(); size_t cur_size = cur_info.GetSize(); bool cur_perm_eq = cur_info.GetPermission() == cur_info.GetOriginalPermission(); bool cur_needs_set_perm = !cur_perm_eq && cur_info.GetIpcLockCount() == 1; @@ -1352,7 +1369,7 @@ Result KPageTable::CleanupForIpcClient(VAddr address, size_t size, KMemoryState .IsSuccess()); // Create tracking variables. - VAddr cur_address = cur_info.GetAddress(); + KProcessAddress cur_address = cur_info.GetAddress(); size_t cur_size = cur_info.GetSize(); bool cur_perm_eq = cur_info.GetPermission() == cur_info.GetOriginalPermission(); bool cur_needs_set_perm = !cur_perm_eq && cur_info.GetIpcLockCount() == 1; @@ -1439,16 +1456,16 @@ Result KPageTable::CleanupForIpcClient(VAddr address, size_t size, KMemoryState } void KPageTable::CleanupForIpcClientOnServerSetupFailure([[maybe_unused]] PageLinkedList* page_list, - VAddr address, size_t size, + KProcessAddress address, size_t size, KMemoryPermission prot_perm) { ASSERT(this->IsLockedByCurrentThread()); - ASSERT(Common::IsAligned(address, PageSize)); + ASSERT(Common::IsAligned(GetInteger(address), PageSize)); ASSERT(Common::IsAligned(size, PageSize)); // Get the mapped extents. - const VAddr src_map_start = address; - const VAddr src_map_end = address + size; - const VAddr src_map_last = src_map_end - 1; + const KProcessAddress src_map_start = address; + const KProcessAddress src_map_end = address + size; + const KProcessAddress src_map_last = src_map_end - 1; // This function is only invoked when there's something to do. ASSERT(src_map_end > src_map_start); @@ -1458,8 +1475,9 @@ void KPageTable::CleanupForIpcClientOnServerSetupFailure([[maybe_unused]] PageLi while (true) { const KMemoryInfo info = it->GetMemoryInfo(); - const auto cur_start = - info.GetAddress() >= src_map_start ? info.GetAddress() : src_map_start; + const auto cur_start = info.GetAddress() >= GetInteger(src_map_start) + ? info.GetAddress() + : GetInteger(src_map_start); const auto cur_end = src_map_last <= info.GetLastAddress() ? src_map_end : info.GetEndAddress(); @@ -1469,7 +1487,7 @@ void KPageTable::CleanupForIpcClientOnServerSetupFailure([[maybe_unused]] PageLi (info.GetIpcLockCount() != 0 && (info.GetOriginalPermission() & KMemoryPermission::IpcLockChangeMask) != prot_perm)) { // Check if we actually need to fix the protections on the block. - if (cur_end == src_map_end || info.GetAddress() <= src_map_start || + if (cur_end == src_map_end || info.GetAddress() <= GetInteger(src_map_start) || (info.GetPermission() & KMemoryPermission::IpcLockChangeMask) != prot_perm) { ASSERT(Operate(cur_start, (cur_end - cur_start) / PageSize, info.GetPermission(), OperationType::ChangePermissions) @@ -1488,15 +1506,15 @@ void KPageTable::CleanupForIpcClientOnServerSetupFailure([[maybe_unused]] PageLi } } -Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { +Result KPageTable::MapPhysicalMemory(KProcessAddress address, size_t size) { // Lock the physical memory lock. KScopedLightLock phys_lk(m_map_physical_memory_lock); // Calculate the last address for convenience. - const VAddr last_address = address + size - 1; + const KProcessAddress last_address = address + size - 1; // Define iteration variables. - VAddr cur_address; + KProcessAddress cur_address; size_t mapped_size; // The entire mapping process can be retried. @@ -1528,7 +1546,7 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { // Track the memory if it's mapped. if (info.GetState() != KMemoryState::Free) { - mapped_size += VAddr(info.GetEndAddress()) - cur_address; + mapped_size += KProcessAddress(info.GetEndAddress()) - cur_address; } // Advance. @@ -1581,7 +1599,7 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { const bool is_free = info.GetState() == KMemoryState::Free; if (is_free) { - if (info.GetAddress() < address) { + if (info.GetAddress() < GetInteger(address)) { ++num_allocator_blocks; } if (last_address < info.GetLastAddress()) { @@ -1599,7 +1617,8 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { // Track the memory if it's mapped. if (!is_free) { - checked_mapped_size += VAddr(info.GetEndAddress()) - cur_address; + checked_mapped_size += + KProcessAddress(info.GetEndAddress()) - cur_address; } // Advance. @@ -1627,7 +1646,7 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { // Prepare to iterate over the memory. auto pg_it = pg.begin(); - PAddr pg_phys_addr = pg_it->GetAddress(); + KPhysicalAddress pg_phys_addr = pg_it->GetAddress(); size_t pg_pages = pg_it->GetNumPages(); // Reset the current tracking address, and make sure we clean up on failure. @@ -1635,7 +1654,7 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { cur_address = address; ON_RESULT_FAILURE { if (cur_address > address) { - const VAddr last_unmap_address = cur_address - 1; + const KProcessAddress last_unmap_address = cur_address - 1; // Iterate, unmapping the pages. cur_address = address; @@ -1652,7 +1671,7 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { if (info.GetState() == KMemoryState::Free) { // Determine the range to unmap. const size_t cur_pages = - std::min(VAddr(info.GetEndAddress()) - cur_address, + std::min(KProcessAddress(info.GetEndAddress()) - cur_address, last_unmap_address + 1 - cur_address) / PageSize; @@ -1695,9 +1714,10 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { // If it's unmapped, we need to map it. if (info.GetState() == KMemoryState::Free) { // Determine the range to map. - size_t map_pages = std::min(VAddr(info.GetEndAddress()) - cur_address, - last_address + 1 - cur_address) / - PageSize; + size_t map_pages = + std::min(KProcessAddress(info.GetEndAddress()) - cur_address, + last_address + 1 - cur_address) / + PageSize; // While we have pages to map, map them. while (map_pages > 0) { @@ -1754,7 +1774,7 @@ Result KPageTable::MapPhysicalMemory(VAddr address, size_t size) { } } -Result KPageTable::UnmapPhysicalMemory(VAddr address, size_t size) { +Result KPageTable::UnmapPhysicalMemory(KProcessAddress address, size_t size) { // Lock the physical memory lock. KScopedLightLock phys_lk(m_map_physical_memory_lock); @@ -1762,13 +1782,13 @@ Result KPageTable::UnmapPhysicalMemory(VAddr address, size_t size) { KScopedLightLock lk(m_general_lock); // Calculate the last address for convenience. - const VAddr last_address = address + size - 1; + const KProcessAddress last_address = address + size - 1; // Define iteration variables. - VAddr map_start_address = 0; - VAddr map_last_address = 0; + KProcessAddress map_start_address = 0; + KProcessAddress map_last_address = 0; - VAddr cur_address; + KProcessAddress cur_address; size_t mapped_size; size_t num_allocator_blocks = 0; @@ -1801,7 +1821,7 @@ Result KPageTable::UnmapPhysicalMemory(VAddr address, size_t size) { map_last_address = (last_address >= info.GetLastAddress()) ? info.GetLastAddress() : last_address; - if (info.GetAddress() < address) { + if (info.GetAddress() < GetInteger(address)) { ++num_allocator_blocks; } if (last_address < info.GetLastAddress()) { @@ -1854,7 +1874,7 @@ Result KPageTable::UnmapPhysicalMemory(VAddr address, size_t size) { // If the memory state is normal, we need to unmap it. if (info.GetState() == KMemoryState::Normal) { // Determine the range to unmap. - const size_t cur_pages = std::min(VAddr(info.GetEndAddress()) - cur_address, + const size_t cur_pages = std::min(KProcessAddress(info.GetEndAddress()) - cur_address, last_address + 1 - cur_address) / PageSize; @@ -2144,13 +2164,14 @@ void KPageTable::RemapPageGroup(PageLinkedList* page_list, KProcessAddress addre const KMemoryInfo info = it->GetMemoryInfo(); // Determine the range to map. - KProcessAddress map_address = std::max<VAddr>(info.GetAddress(), start_address); - const KProcessAddress map_end_address = std::min<VAddr>(info.GetEndAddress(), end_address); + KProcessAddress map_address = std::max<KProcessAddress>(info.GetAddress(), start_address); + const KProcessAddress map_end_address = + std::min<KProcessAddress>(info.GetEndAddress(), end_address); ASSERT(map_end_address != map_address); // Determine if we should disable head merge. const bool disable_head_merge = - info.GetAddress() >= start_address && + info.GetAddress() >= GetInteger(start_address) && True(info.GetDisableMergeAttribute() & KMemoryBlockDisableMergeAttribute::Normal); const KPageProperties map_properties = { info.GetPermission(), false, false, @@ -2214,7 +2235,7 @@ Result KPageTable::MapPages(KProcessAddress* out_addr, size_t num_pages, size_t KProcessAddress addr = this->FindFreeArea(region_start, region_num_pages, num_pages, alignment, 0, this->GetNumGuardPages()); R_UNLESS(addr != 0, ResultOutOfMemory); - ASSERT(Common::IsAligned(addr, alignment)); + ASSERT(Common::IsAligned(GetInteger(addr), alignment)); ASSERT(this->CanContain(addr, num_pages * PageSize, state)); ASSERT(this->CheckMemoryState(addr, num_pages * PageSize, KMemoryState::All, KMemoryState::Free, KMemoryPermission::None, KMemoryPermission::None, @@ -2455,7 +2476,7 @@ Result KPageTable::UnmapPageGroup(KProcessAddress address, const KPageGroup& pg, R_SUCCEED(); } -Result KPageTable::MakeAndOpenPageGroup(KPageGroup* out, VAddr address, size_t num_pages, +Result KPageTable::MakeAndOpenPageGroup(KPageGroup* out, KProcessAddress address, size_t num_pages, KMemoryState state_mask, KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr) { @@ -2480,7 +2501,7 @@ Result KPageTable::MakeAndOpenPageGroup(KPageGroup* out, VAddr address, size_t n R_SUCCEED(); } -Result KPageTable::SetProcessMemoryPermission(VAddr addr, size_t size, +Result KPageTable::SetProcessMemoryPermission(KProcessAddress addr, size_t size, Svc::MemoryPermission svc_perm) { const size_t num_pages = size / PageSize; @@ -2541,23 +2562,23 @@ Result KPageTable::SetProcessMemoryPermission(VAddr addr, size_t size, // Ensure cache coherency, if we're setting pages as executable. if (is_x) { - m_system.InvalidateCpuInstructionCacheRange(addr, size); + m_system.InvalidateCpuInstructionCacheRange(GetInteger(addr), size); } R_SUCCEED(); } -KMemoryInfo KPageTable::QueryInfoImpl(VAddr addr) { +KMemoryInfo KPageTable::QueryInfoImpl(KProcessAddress addr) { KScopedLightLock lk(m_general_lock); return m_memory_block_manager.FindBlock(addr)->GetMemoryInfo(); } -KMemoryInfo KPageTable::QueryInfo(VAddr addr) { +KMemoryInfo KPageTable::QueryInfo(KProcessAddress addr) { if (!Contains(addr, 1)) { return { - .m_address = m_address_space_end, - .m_size = 0 - m_address_space_end, + .m_address = GetInteger(m_address_space_end), + .m_size = 0 - GetInteger(m_address_space_end), .m_state = static_cast<KMemoryState>(Svc::MemoryState::Inaccessible), .m_device_disable_merge_left_count = 0, .m_device_disable_merge_right_count = 0, @@ -2574,7 +2595,8 @@ KMemoryInfo KPageTable::QueryInfo(VAddr addr) { return QueryInfoImpl(addr); } -Result KPageTable::SetMemoryPermission(VAddr addr, size_t size, Svc::MemoryPermission svc_perm) { +Result KPageTable::SetMemoryPermission(KProcessAddress addr, size_t size, + Svc::MemoryPermission svc_perm) { const size_t num_pages = size / PageSize; // Lock the table. @@ -2611,7 +2633,7 @@ Result KPageTable::SetMemoryPermission(VAddr addr, size_t size, Svc::MemoryPermi R_SUCCEED(); } -Result KPageTable::SetMemoryAttribute(VAddr addr, size_t size, u32 mask, u32 attr) { +Result KPageTable::SetMemoryAttribute(KProcessAddress addr, size_t size, u32 mask, u32 attr) { const size_t num_pages = size / PageSize; ASSERT((static_cast<KMemoryAttribute>(mask) | KMemoryAttribute::SetMask) == KMemoryAttribute::SetMask); @@ -2666,12 +2688,12 @@ Result KPageTable::SetMaxHeapSize(size_t size) { R_SUCCEED(); } -Result KPageTable::SetHeapSize(VAddr* out, size_t size) { +Result KPageTable::SetHeapSize(u64* out, size_t size) { // Lock the physical memory mutex. KScopedLightLock map_phys_mem_lk(m_map_physical_memory_lock); // Try to perform a reduction in heap, instead of an extension. - VAddr cur_address{}; + KProcessAddress cur_address{}; size_t allocation_size{}; { // Lock the table. @@ -2722,11 +2744,11 @@ Result KPageTable::SetHeapSize(VAddr* out, size_t size) { m_current_heap_end = m_heap_region_start + size; // Set the output. - *out = m_heap_region_start; + *out = GetInteger(m_heap_region_start); R_SUCCEED(); } else if (size == GetHeapSize()) { // The size requested is exactly the current size. - *out = m_heap_region_start; + *out = GetInteger(m_heap_region_start); R_SUCCEED(); } else { // We have to allocate memory. Determine how much to allocate and where while the table @@ -2780,7 +2802,7 @@ Result KPageTable::SetHeapSize(VAddr* out, size_t size) { // Clear all the newly allocated pages. for (size_t cur_page = 0; cur_page < num_pages; ++cur_page) { - std::memset(m_system.Memory().GetPointer(m_current_heap_end + (cur_page * PageSize)), 0, + std::memset(m_memory->GetPointer(m_current_heap_end + (cur_page * PageSize)), 0, PageSize); } @@ -2799,14 +2821,14 @@ Result KPageTable::SetHeapSize(VAddr* out, size_t size) { m_current_heap_end = m_heap_region_start + size; // Set the output. - *out = m_heap_region_start; + *out = GetInteger(m_heap_region_start); R_SUCCEED(); } } -Result KPageTable::LockForMapDeviceAddressSpace(bool* out_is_io, VAddr address, size_t size, - KMemoryPermission perm, bool is_aligned, - bool check_heap) { +Result KPageTable::LockForMapDeviceAddressSpace(bool* out_is_io, KProcessAddress address, + size_t size, KMemoryPermission perm, + bool is_aligned, bool check_heap) { // Lightly validate the range before doing anything else. const size_t num_pages = size / PageSize; R_UNLESS(this->Contains(address, size), ResultInvalidCurrentMemory); @@ -2842,7 +2864,8 @@ Result KPageTable::LockForMapDeviceAddressSpace(bool* out_is_io, VAddr address, R_SUCCEED(); } -Result KPageTable::LockForUnmapDeviceAddressSpace(VAddr address, size_t size, bool check_heap) { +Result KPageTable::LockForUnmapDeviceAddressSpace(KProcessAddress address, size_t size, + bool check_heap) { // Lightly validate the range before doing anything else. const size_t num_pages = size / PageSize; R_UNLESS(this->Contains(address, size), ResultInvalidCurrentMemory); @@ -2876,7 +2899,7 @@ Result KPageTable::LockForUnmapDeviceAddressSpace(VAddr address, size_t size, bo R_SUCCEED(); } -Result KPageTable::UnlockForDeviceAddressSpace(VAddr address, size_t size) { +Result KPageTable::UnlockForDeviceAddressSpace(KProcessAddress address, size_t size) { // Lightly validate the range before doing anything else. const size_t num_pages = size / PageSize; R_UNLESS(this->Contains(address, size), ResultInvalidCurrentMemory); @@ -2904,7 +2927,8 @@ Result KPageTable::UnlockForDeviceAddressSpace(VAddr address, size_t size) { R_SUCCEED(); } -Result KPageTable::LockForIpcUserBuffer(PAddr* out, VAddr address, size_t size) { +Result KPageTable::LockForIpcUserBuffer(KPhysicalAddress* out, KProcessAddress address, + size_t size) { R_RETURN(this->LockMemoryAndOpen( nullptr, out, address, size, KMemoryState::FlagCanIpcUserBuffer, KMemoryState::FlagCanIpcUserBuffer, KMemoryPermission::All, @@ -2913,7 +2937,7 @@ Result KPageTable::LockForIpcUserBuffer(PAddr* out, VAddr address, size_t size) KMemoryAttribute::Locked)); } -Result KPageTable::UnlockForIpcUserBuffer(VAddr address, size_t size) { +Result KPageTable::UnlockForIpcUserBuffer(KProcessAddress address, size_t size) { R_RETURN(this->UnlockMemory(address, size, KMemoryState::FlagCanIpcUserBuffer, KMemoryState::FlagCanIpcUserBuffer, KMemoryPermission::None, KMemoryPermission::None, KMemoryAttribute::All, @@ -2921,7 +2945,7 @@ Result KPageTable::UnlockForIpcUserBuffer(VAddr address, size_t size) { KMemoryAttribute::Locked, nullptr)); } -Result KPageTable::LockForCodeMemory(KPageGroup* out, VAddr addr, size_t size) { +Result KPageTable::LockForCodeMemory(KPageGroup* out, KProcessAddress addr, size_t size) { R_RETURN(this->LockMemoryAndOpen( out, nullptr, addr, size, KMemoryState::FlagCanCodeMemory, KMemoryState::FlagCanCodeMemory, KMemoryPermission::All, KMemoryPermission::UserReadWrite, KMemoryAttribute::All, @@ -2929,17 +2953,17 @@ Result KPageTable::LockForCodeMemory(KPageGroup* out, VAddr addr, size_t size) { KMemoryAttribute::Locked)); } -Result KPageTable::UnlockForCodeMemory(VAddr addr, size_t size, const KPageGroup& pg) { +Result KPageTable::UnlockForCodeMemory(KProcessAddress addr, size_t size, const KPageGroup& pg) { R_RETURN(this->UnlockMemory( addr, size, KMemoryState::FlagCanCodeMemory, KMemoryState::FlagCanCodeMemory, KMemoryPermission::None, KMemoryPermission::None, KMemoryAttribute::All, KMemoryAttribute::Locked, KMemoryPermission::UserReadWrite, KMemoryAttribute::Locked, &pg)); } -bool KPageTable::IsRegionContiguous(VAddr addr, u64 size) const { - auto start_ptr = m_system.DeviceMemory().GetPointer<u8>(addr); +bool KPageTable::IsRegionContiguous(KProcessAddress addr, u64 size) const { + auto start_ptr = m_system.DeviceMemory().GetPointer<u8>(GetInteger(addr)); for (u64 offset{}; offset < size; offset += PageSize) { - if (start_ptr != m_system.DeviceMemory().GetPointer<u8>(addr + offset)) { + if (start_ptr != m_system.DeviceMemory().GetPointer<u8>(GetInteger(addr) + offset)) { return false; } start_ptr += PageSize; @@ -2947,18 +2971,19 @@ bool KPageTable::IsRegionContiguous(VAddr addr, u64 size) const { return true; } -void KPageTable::AddRegionToPages(VAddr start, size_t num_pages, KPageGroup& page_linked_list) { - VAddr addr{start}; +void KPageTable::AddRegionToPages(KProcessAddress start, size_t num_pages, + KPageGroup& page_linked_list) { + KProcessAddress addr{start}; while (addr < start + (num_pages * PageSize)) { - const PAddr paddr{GetPhysicalAddr(addr)}; + const KPhysicalAddress paddr{GetPhysicalAddr(addr)}; ASSERT(paddr != 0); page_linked_list.AddBlock(paddr, 1); addr += PageSize; } } -VAddr KPageTable::AllocateVirtualMemory(VAddr start, size_t region_num_pages, u64 needed_num_pages, - size_t align) { +KProcessAddress KPageTable::AllocateVirtualMemory(KProcessAddress start, size_t region_num_pages, + u64 needed_num_pages, size_t align) { if (m_enable_aslr) { UNIMPLEMENTED(); } @@ -2966,11 +2991,11 @@ VAddr KPageTable::AllocateVirtualMemory(VAddr start, size_t region_num_pages, u6 IsKernel() ? 1 : 4); } -Result KPageTable::Operate(VAddr addr, size_t num_pages, const KPageGroup& page_group, +Result KPageTable::Operate(KProcessAddress addr, size_t num_pages, const KPageGroup& page_group, OperationType operation) { ASSERT(this->IsLockedByCurrentThread()); - ASSERT(Common::IsAligned(addr, PageSize)); + ASSERT(Common::IsAligned(GetInteger(addr), PageSize)); ASSERT(num_pages > 0); ASSERT(num_pages == page_group.GetNumPages()); @@ -2983,7 +3008,7 @@ Result KPageTable::Operate(VAddr addr, size_t num_pages, const KPageGroup& page_ const size_t size{node.GetNumPages() * PageSize}; // Map the pages. - m_system.Memory().MapMemoryRegion(*m_page_table_impl, addr, size, node.GetAddress()); + m_memory->MapMemoryRegion(*m_page_table_impl, addr, size, node.GetAddress()); addr += size; } @@ -3001,12 +3026,12 @@ Result KPageTable::Operate(VAddr addr, size_t num_pages, const KPageGroup& page_ R_SUCCEED(); } -Result KPageTable::Operate(VAddr addr, size_t num_pages, KMemoryPermission perm, - OperationType operation, PAddr map_addr) { +Result KPageTable::Operate(KProcessAddress addr, size_t num_pages, KMemoryPermission perm, + OperationType operation, KPhysicalAddress map_addr) { ASSERT(this->IsLockedByCurrentThread()); ASSERT(num_pages > 0); - ASSERT(Common::IsAligned(addr, PageSize)); + ASSERT(Common::IsAligned(GetInteger(addr), PageSize)); ASSERT(ContainsPages(addr, num_pages)); switch (operation) { @@ -3016,14 +3041,14 @@ Result KPageTable::Operate(VAddr addr, size_t num_pages, KMemoryPermission perm, SCOPE_EXIT({ pages_to_close.CloseAndReset(); }); this->AddRegionToPages(addr, num_pages, pages_to_close); - m_system.Memory().UnmapRegion(*m_page_table_impl, addr, num_pages * PageSize); + m_memory->UnmapRegion(*m_page_table_impl, addr, num_pages * PageSize); break; } case OperationType::MapFirst: case OperationType::Map: { ASSERT(map_addr); - ASSERT(Common::IsAligned(map_addr, PageSize)); - m_system.Memory().MapMemoryRegion(*m_page_table_impl, addr, num_pages * PageSize, map_addr); + ASSERT(Common::IsAligned(GetInteger(map_addr), PageSize)); + m_memory->MapMemoryRegion(*m_page_table_impl, addr, num_pages * PageSize, map_addr); // Open references to pages, if we should. if (IsHeapPhysicalAddress(m_kernel.MemoryLayout(), map_addr)) { @@ -3060,7 +3085,7 @@ void KPageTable::FinalizeUpdate(PageLinkedList* page_list) { } } -VAddr KPageTable::GetRegionAddress(KMemoryState state) const { +KProcessAddress KPageTable::GetRegionAddress(KMemoryState state) const { switch (state) { case KMemoryState::Free: case KMemoryState::Kernel: @@ -3132,11 +3157,11 @@ size_t KPageTable::GetRegionSize(KMemoryState state) const { } } -bool KPageTable::CanContain(VAddr addr, size_t size, KMemoryState state) const { - const VAddr end = addr + size; - const VAddr last = end - 1; +bool KPageTable::CanContain(KProcessAddress addr, size_t size, KMemoryState state) const { + const KProcessAddress end = addr + size; + const KProcessAddress last = end - 1; - const VAddr region_start = this->GetRegionAddress(state); + const KProcessAddress region_start = this->GetRegionAddress(state); const size_t region_size = this->GetRegionSize(state); const bool is_in_region = @@ -3191,21 +3216,21 @@ Result KPageTable::CheckMemoryState(const KMemoryInfo& info, KMemoryState state_ R_SUCCEED(); } -Result KPageTable::CheckMemoryStateContiguous(size_t* out_blocks_needed, VAddr addr, size_t size, - KMemoryState state_mask, KMemoryState state, - KMemoryPermission perm_mask, KMemoryPermission perm, - KMemoryAttribute attr_mask, +Result KPageTable::CheckMemoryStateContiguous(size_t* out_blocks_needed, KProcessAddress addr, + size_t size, KMemoryState state_mask, + KMemoryState state, KMemoryPermission perm_mask, + KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr) const { ASSERT(this->IsLockedByCurrentThread()); // Get information about the first block. - const VAddr last_addr = addr + size - 1; + const KProcessAddress last_addr = addr + size - 1; KMemoryBlockManager::const_iterator it = m_memory_block_manager.FindIterator(addr); KMemoryInfo info = it->GetMemoryInfo(); // If the start address isn't aligned, we need a block. const size_t blocks_for_start_align = - (Common::AlignDown(addr, PageSize) != info.GetAddress()) ? 1 : 0; + (Common::AlignDown(GetInteger(addr), PageSize) != info.GetAddress()) ? 1 : 0; while (true) { // Validate against the provided masks. @@ -3224,7 +3249,7 @@ Result KPageTable::CheckMemoryStateContiguous(size_t* out_blocks_needed, VAddr a // If the end address isn't aligned, we need a block. const size_t blocks_for_end_align = - (Common::AlignUp(addr + size, PageSize) != info.GetEndAddress()) ? 1 : 0; + (Common::AlignUp(GetInteger(addr) + size, PageSize) != info.GetEndAddress()) ? 1 : 0; if (out_blocks_needed != nullptr) { *out_blocks_needed = blocks_for_start_align + blocks_for_end_align; @@ -3235,20 +3260,20 @@ Result KPageTable::CheckMemoryStateContiguous(size_t* out_blocks_needed, VAddr a Result KPageTable::CheckMemoryState(KMemoryState* out_state, KMemoryPermission* out_perm, KMemoryAttribute* out_attr, size_t* out_blocks_needed, - VAddr addr, size_t size, KMemoryState state_mask, + KProcessAddress addr, size_t size, KMemoryState state_mask, KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr, KMemoryAttribute ignore_attr) const { ASSERT(this->IsLockedByCurrentThread()); // Get information about the first block. - const VAddr last_addr = addr + size - 1; + const KProcessAddress last_addr = addr + size - 1; KMemoryBlockManager::const_iterator it = m_memory_block_manager.FindIterator(addr); KMemoryInfo info = it->GetMemoryInfo(); // If the start address isn't aligned, we need a block. const size_t blocks_for_start_align = - (Common::AlignDown(addr, PageSize) != info.GetAddress()) ? 1 : 0; + (Common::AlignDown(GetInteger(addr), PageSize) != info.GetAddress()) ? 1 : 0; // Validate all blocks in the range have correct state. const KMemoryState first_state = info.m_state; @@ -3277,7 +3302,7 @@ Result KPageTable::CheckMemoryState(KMemoryState* out_state, KMemoryPermission* // If the end address isn't aligned, we need a block. const size_t blocks_for_end_align = - (Common::AlignUp(addr + size, PageSize) != info.GetEndAddress()) ? 1 : 0; + (Common::AlignUp(GetInteger(addr) + size, PageSize) != info.GetEndAddress()) ? 1 : 0; // Write output state. if (out_state != nullptr) { @@ -3295,11 +3320,12 @@ Result KPageTable::CheckMemoryState(KMemoryState* out_state, KMemoryPermission* R_SUCCEED(); } -Result KPageTable::LockMemoryAndOpen(KPageGroup* out_pg, PAddr* out_paddr, VAddr addr, size_t size, - KMemoryState state_mask, KMemoryState state, - KMemoryPermission perm_mask, KMemoryPermission perm, - KMemoryAttribute attr_mask, KMemoryAttribute attr, - KMemoryPermission new_perm, KMemoryAttribute lock_attr) { +Result KPageTable::LockMemoryAndOpen(KPageGroup* out_pg, KPhysicalAddress* out_KPhysicalAddress, + KProcessAddress addr, size_t size, KMemoryState state_mask, + KMemoryState state, KMemoryPermission perm_mask, + KMemoryPermission perm, KMemoryAttribute attr_mask, + KMemoryAttribute attr, KMemoryPermission new_perm, + KMemoryAttribute lock_attr) { // Validate basic preconditions. ASSERT((lock_attr & attr) == KMemoryAttribute::None); ASSERT((lock_attr & (KMemoryAttribute::IpcLocked | KMemoryAttribute::DeviceShared)) == @@ -3329,8 +3355,8 @@ Result KPageTable::LockMemoryAndOpen(KPageGroup* out_pg, PAddr* out_paddr, VAddr attr_mask, attr)); // Get the physical address, if we're supposed to. - if (out_paddr != nullptr) { - ASSERT(this->GetPhysicalAddressLocked(out_paddr, addr)); + if (out_KPhysicalAddress != nullptr) { + ASSERT(this->GetPhysicalAddressLocked(out_KPhysicalAddress, addr)); } // Make the page group, if we're supposed to. @@ -3361,7 +3387,7 @@ Result KPageTable::LockMemoryAndOpen(KPageGroup* out_pg, PAddr* out_paddr, VAddr R_SUCCEED(); } -Result KPageTable::UnlockMemory(VAddr addr, size_t size, KMemoryState state_mask, +Result KPageTable::UnlockMemory(KProcessAddress addr, size_t size, KMemoryState state_mask, KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr, KMemoryPermission new_perm, diff --git a/src/core/hle/kernel/k_page_table.h b/src/core/hle/kernel/k_page_table.h index 5c5356338..022d15f35 100644 --- a/src/core/hle/kernel/k_page_table.h +++ b/src/core/hle/kernel/k_page_table.h @@ -6,7 +6,6 @@ #include <memory> #include "common/common_funcs.h" -#include "common/common_types.h" #include "common/page_table.h" #include "core/file_sys/program_metadata.h" #include "core/hle/kernel/k_dynamic_resource_manager.h" @@ -15,6 +14,7 @@ #include "core/hle/kernel/k_memory_block_manager.h" #include "core/hle/kernel/k_memory_layout.h" #include "core/hle/kernel/k_memory_manager.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/result.h" #include "core/memory.h" @@ -65,45 +65,48 @@ public: Result InitializeForProcess(FileSys::ProgramAddressSpaceType as_type, bool enable_aslr, bool enable_das_merge, bool from_back, KMemoryManager::Pool pool, - VAddr code_addr, size_t code_size, KSystemResource* system_resource, - KResourceLimit* resource_limit); + KProcessAddress code_addr, size_t code_size, + KSystemResource* system_resource, KResourceLimit* resource_limit, + Core::Memory::Memory& memory); void Finalize(); - Result MapProcessCode(VAddr addr, size_t pages_count, KMemoryState state, + Result MapProcessCode(KProcessAddress addr, size_t pages_count, KMemoryState state, KMemoryPermission perm); - Result MapCodeMemory(VAddr dst_address, VAddr src_address, size_t size); - Result UnmapCodeMemory(VAddr dst_address, VAddr src_address, size_t size, + Result MapCodeMemory(KProcessAddress dst_address, KProcessAddress src_address, size_t size); + Result UnmapCodeMemory(KProcessAddress dst_address, KProcessAddress src_address, size_t size, ICacheInvalidationStrategy icache_invalidation_strategy); - Result UnmapProcessMemory(VAddr dst_addr, size_t size, KPageTable& src_page_table, - VAddr src_addr); - Result MapPhysicalMemory(VAddr addr, size_t size); - Result UnmapPhysicalMemory(VAddr addr, size_t size); - Result MapMemory(VAddr dst_addr, VAddr src_addr, size_t size); - Result UnmapMemory(VAddr dst_addr, VAddr src_addr, size_t size); - Result SetProcessMemoryPermission(VAddr addr, size_t size, Svc::MemoryPermission svc_perm); - KMemoryInfo QueryInfo(VAddr addr); - Result SetMemoryPermission(VAddr addr, size_t size, Svc::MemoryPermission perm); - Result SetMemoryAttribute(VAddr addr, size_t size, u32 mask, u32 attr); + Result UnmapProcessMemory(KProcessAddress dst_addr, size_t size, KPageTable& src_page_table, + KProcessAddress src_addr); + Result MapPhysicalMemory(KProcessAddress addr, size_t size); + Result UnmapPhysicalMemory(KProcessAddress addr, size_t size); + Result MapMemory(KProcessAddress dst_addr, KProcessAddress src_addr, size_t size); + Result UnmapMemory(KProcessAddress dst_addr, KProcessAddress src_addr, size_t size); + Result SetProcessMemoryPermission(KProcessAddress addr, size_t size, + Svc::MemoryPermission svc_perm); + KMemoryInfo QueryInfo(KProcessAddress addr); + Result SetMemoryPermission(KProcessAddress addr, size_t size, Svc::MemoryPermission perm); + Result SetMemoryAttribute(KProcessAddress addr, size_t size, u32 mask, u32 attr); Result SetMaxHeapSize(size_t size); - Result SetHeapSize(VAddr* out, size_t size); - Result LockForMapDeviceAddressSpace(bool* out_is_io, VAddr address, size_t size, + Result SetHeapSize(u64* out, size_t size); + Result LockForMapDeviceAddressSpace(bool* out_is_io, KProcessAddress address, size_t size, KMemoryPermission perm, bool is_aligned, bool check_heap); - Result LockForUnmapDeviceAddressSpace(VAddr address, size_t size, bool check_heap); + Result LockForUnmapDeviceAddressSpace(KProcessAddress address, size_t size, bool check_heap); - Result UnlockForDeviceAddressSpace(VAddr addr, size_t size); + Result UnlockForDeviceAddressSpace(KProcessAddress addr, size_t size); - Result LockForIpcUserBuffer(PAddr* out, VAddr address, size_t size); - Result UnlockForIpcUserBuffer(VAddr address, size_t size); + Result LockForIpcUserBuffer(KPhysicalAddress* out, KProcessAddress address, size_t size); + Result UnlockForIpcUserBuffer(KProcessAddress address, size_t size); - Result SetupForIpc(VAddr* out_dst_addr, size_t size, VAddr src_addr, KPageTable& src_page_table, - KMemoryPermission test_perm, KMemoryState dst_state, bool send); - Result CleanupForIpcServer(VAddr address, size_t size, KMemoryState dst_state); - Result CleanupForIpcClient(VAddr address, size_t size, KMemoryState dst_state); + Result SetupForIpc(KProcessAddress* out_dst_addr, size_t size, KProcessAddress src_addr, + KPageTable& src_page_table, KMemoryPermission test_perm, + KMemoryState dst_state, bool send); + Result CleanupForIpcServer(KProcessAddress address, size_t size, KMemoryState dst_state); + Result CleanupForIpcClient(KProcessAddress address, size_t size, KMemoryState dst_state); - Result LockForCodeMemory(KPageGroup* out, VAddr addr, size_t size); - Result UnlockForCodeMemory(VAddr addr, size_t size, const KPageGroup& pg); - Result MakeAndOpenPageGroup(KPageGroup* out, VAddr address, size_t num_pages, + Result LockForCodeMemory(KPageGroup* out, KProcessAddress addr, size_t size); + Result UnlockForCodeMemory(KProcessAddress addr, size_t size, const KPageGroup& pg); + Result MakeAndOpenPageGroup(KPageGroup* out, KProcessAddress address, size_t num_pages, KMemoryState state_mask, KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr); @@ -120,7 +123,7 @@ public: return m_block_info_manager; } - bool CanContain(VAddr addr, size_t size, KMemoryState state) const; + bool CanContain(KProcessAddress addr, size_t size, KMemoryState state) const; Result MapPages(KProcessAddress* out_addr, size_t num_pages, size_t alignment, KPhysicalAddress phys_addr, KProcessAddress region_start, @@ -173,8 +176,8 @@ protected: m_root = n; } - void Push(Core::Memory::Memory& memory, VAddr addr) { - this->Push(memory.GetPointer<Node>(addr)); + void Push(Core::Memory::Memory& memory, KVirtualAddress addr) { + this->Push(memory.GetPointer<Node>(GetInteger(addr))); } Node* Peek() const { @@ -212,27 +215,28 @@ private: Result MapPages(KProcessAddress* out_addr, size_t num_pages, size_t alignment, KPhysicalAddress phys_addr, bool is_pa_valid, KProcessAddress region_start, size_t region_num_pages, KMemoryState state, KMemoryPermission perm); - bool IsRegionContiguous(VAddr addr, u64 size) const; - void AddRegionToPages(VAddr start, size_t num_pages, KPageGroup& page_linked_list); - KMemoryInfo QueryInfoImpl(VAddr addr); - VAddr AllocateVirtualMemory(VAddr start, size_t region_num_pages, u64 needed_num_pages, - size_t align); - Result Operate(VAddr addr, size_t num_pages, const KPageGroup& page_group, + bool IsRegionContiguous(KProcessAddress addr, u64 size) const; + void AddRegionToPages(KProcessAddress start, size_t num_pages, KPageGroup& page_linked_list); + KMemoryInfo QueryInfoImpl(KProcessAddress addr); + KProcessAddress AllocateVirtualMemory(KProcessAddress start, size_t region_num_pages, + u64 needed_num_pages, size_t align); + Result Operate(KProcessAddress addr, size_t num_pages, const KPageGroup& page_group, OperationType operation); - Result Operate(VAddr addr, size_t num_pages, KMemoryPermission perm, OperationType operation, - PAddr map_addr = 0); + Result Operate(KProcessAddress addr, size_t num_pages, KMemoryPermission perm, + OperationType operation, KPhysicalAddress map_addr = 0); void FinalizeUpdate(PageLinkedList* page_list); - VAddr GetRegionAddress(KMemoryState state) const; + KProcessAddress GetRegionAddress(KMemoryState state) const; size_t GetRegionSize(KMemoryState state) const; - VAddr FindFreeArea(VAddr region_start, size_t region_num_pages, size_t num_pages, - size_t alignment, size_t offset, size_t guard_pages); + KProcessAddress FindFreeArea(KProcessAddress region_start, size_t region_num_pages, + size_t num_pages, size_t alignment, size_t offset, + size_t guard_pages); - Result CheckMemoryStateContiguous(size_t* out_blocks_needed, VAddr addr, size_t size, + Result CheckMemoryStateContiguous(size_t* out_blocks_needed, KProcessAddress addr, size_t size, KMemoryState state_mask, KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr) const; - Result CheckMemoryStateContiguous(VAddr addr, size_t size, KMemoryState state_mask, + Result CheckMemoryStateContiguous(KProcessAddress addr, size_t size, KMemoryState state_mask, KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr) const { @@ -244,12 +248,12 @@ private: KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr) const; Result CheckMemoryState(KMemoryState* out_state, KMemoryPermission* out_perm, - KMemoryAttribute* out_attr, size_t* out_blocks_needed, VAddr addr, - size_t size, KMemoryState state_mask, KMemoryState state, - KMemoryPermission perm_mask, KMemoryPermission perm, + KMemoryAttribute* out_attr, size_t* out_blocks_needed, + KProcessAddress addr, size_t size, KMemoryState state_mask, + KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr, KMemoryAttribute ignore_attr = DefaultMemoryIgnoreAttr) const; - Result CheckMemoryState(size_t* out_blocks_needed, VAddr addr, size_t size, + Result CheckMemoryState(size_t* out_blocks_needed, KProcessAddress addr, size_t size, KMemoryState state_mask, KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr, @@ -258,39 +262,40 @@ private: state_mask, state, perm_mask, perm, attr_mask, attr, ignore_attr)); } - Result CheckMemoryState(VAddr addr, size_t size, KMemoryState state_mask, KMemoryState state, - KMemoryPermission perm_mask, KMemoryPermission perm, + Result CheckMemoryState(KProcessAddress addr, size_t size, KMemoryState state_mask, + KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr, KMemoryAttribute ignore_attr = DefaultMemoryIgnoreAttr) const { R_RETURN(this->CheckMemoryState(nullptr, addr, size, state_mask, state, perm_mask, perm, attr_mask, attr, ignore_attr)); } - Result LockMemoryAndOpen(KPageGroup* out_pg, PAddr* out_paddr, VAddr addr, size_t size, - KMemoryState state_mask, KMemoryState state, - KMemoryPermission perm_mask, KMemoryPermission perm, - KMemoryAttribute attr_mask, KMemoryAttribute attr, - KMemoryPermission new_perm, KMemoryAttribute lock_attr); - Result UnlockMemory(VAddr addr, size_t size, KMemoryState state_mask, KMemoryState state, - KMemoryPermission perm_mask, KMemoryPermission perm, + Result LockMemoryAndOpen(KPageGroup* out_pg, KPhysicalAddress* out_KPhysicalAddress, + KProcessAddress addr, size_t size, KMemoryState state_mask, + KMemoryState state, KMemoryPermission perm_mask, + KMemoryPermission perm, KMemoryAttribute attr_mask, + KMemoryAttribute attr, KMemoryPermission new_perm, + KMemoryAttribute lock_attr); + Result UnlockMemory(KProcessAddress addr, size_t size, KMemoryState state_mask, + KMemoryState state, KMemoryPermission perm_mask, KMemoryPermission perm, KMemoryAttribute attr_mask, KMemoryAttribute attr, KMemoryPermission new_perm, KMemoryAttribute lock_attr, const KPageGroup* pg); - Result MakePageGroup(KPageGroup& pg, VAddr addr, size_t num_pages); - bool IsValidPageGroup(const KPageGroup& pg, VAddr addr, size_t num_pages); + Result MakePageGroup(KPageGroup& pg, KProcessAddress addr, size_t num_pages); + bool IsValidPageGroup(const KPageGroup& pg, KProcessAddress addr, size_t num_pages); bool IsLockedByCurrentThread() const { return m_general_lock.IsLockedByCurrentThread(); } - bool IsHeapPhysicalAddress(const KMemoryLayout& layout, PAddr phys_addr) { + bool IsHeapPhysicalAddress(const KMemoryLayout& layout, KPhysicalAddress phys_addr) { ASSERT(this->IsLockedByCurrentThread()); return layout.IsHeapPhysicalAddress(m_cached_physical_heap_region, phys_addr); } - bool GetPhysicalAddressLocked(PAddr* out, VAddr virt_addr) const { + bool GetPhysicalAddressLocked(KPhysicalAddress* out, KProcessAddress virt_addr) const { ASSERT(this->IsLockedByCurrentThread()); *out = GetPhysicalAddr(virt_addr); @@ -298,12 +303,13 @@ private: return *out != 0; } - Result SetupForIpcClient(PageLinkedList* page_list, size_t* out_blocks_needed, VAddr address, - size_t size, KMemoryPermission test_perm, KMemoryState dst_state); - Result SetupForIpcServer(VAddr* out_addr, size_t size, VAddr src_addr, + Result SetupForIpcClient(PageLinkedList* page_list, size_t* out_blocks_needed, + KProcessAddress address, size_t size, KMemoryPermission test_perm, + KMemoryState dst_state); + Result SetupForIpcServer(KProcessAddress* out_addr, size_t size, KProcessAddress src_addr, KMemoryPermission test_perm, KMemoryState dst_state, KPageTable& src_page_table, bool send); - void CleanupForIpcClientOnServerSetupFailure(PageLinkedList* page_list, VAddr address, + void CleanupForIpcClientOnServerSetupFailure(PageLinkedList* page_list, KProcessAddress address, size_t size, KMemoryPermission prot_perm); Result AllocateAndMapPagesImpl(PageLinkedList* page_list, KProcessAddress address, @@ -315,61 +321,61 @@ private: mutable KLightLock m_map_physical_memory_lock; public: - constexpr VAddr GetAddressSpaceStart() const { + constexpr KProcessAddress GetAddressSpaceStart() const { return m_address_space_start; } - constexpr VAddr GetAddressSpaceEnd() const { + constexpr KProcessAddress GetAddressSpaceEnd() const { return m_address_space_end; } constexpr size_t GetAddressSpaceSize() const { return m_address_space_end - m_address_space_start; } - constexpr VAddr GetHeapRegionStart() const { + constexpr KProcessAddress GetHeapRegionStart() const { return m_heap_region_start; } - constexpr VAddr GetHeapRegionEnd() const { + constexpr KProcessAddress GetHeapRegionEnd() const { return m_heap_region_end; } constexpr size_t GetHeapRegionSize() const { return m_heap_region_end - m_heap_region_start; } - constexpr VAddr GetAliasRegionStart() const { + constexpr KProcessAddress GetAliasRegionStart() const { return m_alias_region_start; } - constexpr VAddr GetAliasRegionEnd() const { + constexpr KProcessAddress GetAliasRegionEnd() const { return m_alias_region_end; } constexpr size_t GetAliasRegionSize() const { return m_alias_region_end - m_alias_region_start; } - constexpr VAddr GetStackRegionStart() const { + constexpr KProcessAddress GetStackRegionStart() const { return m_stack_region_start; } - constexpr VAddr GetStackRegionEnd() const { + constexpr KProcessAddress GetStackRegionEnd() const { return m_stack_region_end; } constexpr size_t GetStackRegionSize() const { return m_stack_region_end - m_stack_region_start; } - constexpr VAddr GetKernelMapRegionStart() const { + constexpr KProcessAddress GetKernelMapRegionStart() const { return m_kernel_map_region_start; } - constexpr VAddr GetKernelMapRegionEnd() const { + constexpr KProcessAddress GetKernelMapRegionEnd() const { return m_kernel_map_region_end; } - constexpr VAddr GetCodeRegionStart() const { + constexpr KProcessAddress GetCodeRegionStart() const { return m_code_region_start; } - constexpr VAddr GetCodeRegionEnd() const { + constexpr KProcessAddress GetCodeRegionEnd() const { return m_code_region_end; } - constexpr VAddr GetAliasCodeRegionStart() const { + constexpr KProcessAddress GetAliasCodeRegionStart() const { return m_alias_code_region_start; } - constexpr VAddr GetAliasCodeRegionEnd() const { + constexpr KProcessAddress GetAliasCodeRegionEnd() const { return m_alias_code_region_end; } - constexpr VAddr GetAliasCodeRegionSize() const { + constexpr size_t GetAliasCodeRegionSize() const { return m_alias_code_region_end - m_alias_code_region_start; } size_t GetNormalMemorySize() { @@ -382,25 +388,25 @@ public: constexpr size_t GetHeapSize() const { return m_current_heap_end - m_heap_region_start; } - constexpr bool IsInsideAddressSpace(VAddr address, size_t size) const { + constexpr bool IsInsideAddressSpace(KProcessAddress address, size_t size) const { return m_address_space_start <= address && address + size - 1 <= m_address_space_end - 1; } - constexpr bool IsOutsideAliasRegion(VAddr address, size_t size) const { + constexpr bool IsOutsideAliasRegion(KProcessAddress address, size_t size) const { return m_alias_region_start > address || address + size - 1 > m_alias_region_end - 1; } - constexpr bool IsOutsideStackRegion(VAddr address, size_t size) const { + constexpr bool IsOutsideStackRegion(KProcessAddress address, size_t size) const { return m_stack_region_start > address || address + size - 1 > m_stack_region_end - 1; } - constexpr bool IsInvalidRegion(VAddr address, size_t size) const { + constexpr bool IsInvalidRegion(KProcessAddress address, size_t size) const { return address + size - 1 > GetAliasCodeRegionStart() + GetAliasCodeRegionSize() - 1; } - constexpr bool IsInsideHeapRegion(VAddr address, size_t size) const { + constexpr bool IsInsideHeapRegion(KProcessAddress address, size_t size) const { return address + size > m_heap_region_start && m_heap_region_end > address; } - constexpr bool IsInsideAliasRegion(VAddr address, size_t size) const { + constexpr bool IsInsideAliasRegion(KProcessAddress address, size_t size) const { return address + size > m_alias_region_start && m_alias_region_end > address; } - constexpr bool IsOutsideASLRRegion(VAddr address, size_t size) const { + constexpr bool IsOutsideASLRRegion(KProcessAddress address, size_t size) const { if (IsInvalidRegion(address, size)) { return true; } @@ -412,47 +418,53 @@ public: } return {}; } - constexpr bool IsInsideASLRRegion(VAddr address, size_t size) const { + constexpr bool IsInsideASLRRegion(KProcessAddress address, size_t size) const { return !IsOutsideASLRRegion(address, size); } constexpr size_t GetNumGuardPages() const { return IsKernel() ? 1 : 4; } - PAddr GetPhysicalAddr(VAddr addr) const { + KPhysicalAddress GetPhysicalAddr(KProcessAddress addr) const { const auto backing_addr = m_page_table_impl->backing_addr[addr >> PageBits]; ASSERT(backing_addr); - return backing_addr + addr; + return backing_addr + GetInteger(addr); } - constexpr bool Contains(VAddr addr) const { + constexpr bool Contains(KProcessAddress addr) const { return m_address_space_start <= addr && addr <= m_address_space_end - 1; } - constexpr bool Contains(VAddr addr, size_t size) const { + constexpr bool Contains(KProcessAddress addr, size_t size) const { return m_address_space_start <= addr && addr < addr + size && addr + size - 1 <= m_address_space_end - 1; } public: - static VAddr GetLinearMappedVirtualAddress(const KMemoryLayout& layout, PAddr addr) { + static KVirtualAddress GetLinearMappedVirtualAddress(const KMemoryLayout& layout, + KPhysicalAddress addr) { return layout.GetLinearVirtualAddress(addr); } - static PAddr GetLinearMappedPhysicalAddress(const KMemoryLayout& layout, VAddr addr) { + static KPhysicalAddress GetLinearMappedPhysicalAddress(const KMemoryLayout& layout, + KVirtualAddress addr) { return layout.GetLinearPhysicalAddress(addr); } - static VAddr GetHeapVirtualAddress(const KMemoryLayout& layout, PAddr addr) { + static KVirtualAddress GetHeapVirtualAddress(const KMemoryLayout& layout, + KPhysicalAddress addr) { return GetLinearMappedVirtualAddress(layout, addr); } - static PAddr GetHeapPhysicalAddress(const KMemoryLayout& layout, VAddr addr) { + static KPhysicalAddress GetHeapPhysicalAddress(const KMemoryLayout& layout, + KVirtualAddress addr) { return GetLinearMappedPhysicalAddress(layout, addr); } - static VAddr GetPageTableVirtualAddress(const KMemoryLayout& layout, PAddr addr) { + static KVirtualAddress GetPageTableVirtualAddress(const KMemoryLayout& layout, + KPhysicalAddress addr) { return GetLinearMappedVirtualAddress(layout, addr); } - static PAddr GetPageTablePhysicalAddress(const KMemoryLayout& layout, VAddr addr) { + static KPhysicalAddress GetPageTablePhysicalAddress(const KMemoryLayout& layout, + KVirtualAddress addr) { return GetLinearMappedPhysicalAddress(layout, addr); } @@ -464,7 +476,7 @@ private: return m_enable_aslr; } - constexpr bool ContainsPages(VAddr addr, size_t num_pages) const { + constexpr bool ContainsPages(KProcessAddress addr, size_t num_pages) const { return (m_address_space_start <= addr) && (num_pages <= (m_address_space_end - m_address_space_start) / PageSize) && (addr + num_pages * PageSize - 1 <= m_address_space_end - 1); @@ -489,21 +501,21 @@ private: }; private: - VAddr m_address_space_start{}; - VAddr m_address_space_end{}; - VAddr m_heap_region_start{}; - VAddr m_heap_region_end{}; - VAddr m_current_heap_end{}; - VAddr m_alias_region_start{}; - VAddr m_alias_region_end{}; - VAddr m_stack_region_start{}; - VAddr m_stack_region_end{}; - VAddr m_kernel_map_region_start{}; - VAddr m_kernel_map_region_end{}; - VAddr m_code_region_start{}; - VAddr m_code_region_end{}; - VAddr m_alias_code_region_start{}; - VAddr m_alias_code_region_end{}; + KProcessAddress m_address_space_start{}; + KProcessAddress m_address_space_end{}; + KProcessAddress m_heap_region_start{}; + KProcessAddress m_heap_region_end{}; + KProcessAddress m_current_heap_end{}; + KProcessAddress m_alias_region_start{}; + KProcessAddress m_alias_region_end{}; + KProcessAddress m_stack_region_start{}; + KProcessAddress m_stack_region_end{}; + KProcessAddress m_kernel_map_region_start{}; + KProcessAddress m_kernel_map_region_end{}; + KProcessAddress m_code_region_start{}; + KProcessAddress m_code_region_end{}; + KProcessAddress m_alias_code_region_start{}; + KProcessAddress m_alias_code_region_end{}; size_t m_max_heap_size{}; size_t m_mapped_physical_memory_size{}; @@ -535,6 +547,7 @@ private: Core::System& m_system; KernelCore& m_kernel; + Core::Memory::Memory* m_memory{}; }; } // namespace Kernel diff --git a/src/core/hle/kernel/k_page_table_manager.h b/src/core/hle/kernel/k_page_table_manager.h index 91a45cde3..4b0e034d0 100644 --- a/src/core/hle/kernel/k_page_table_manager.h +++ b/src/core/hle/kernel/k_page_table_manager.h @@ -5,9 +5,9 @@ #include <atomic> -#include "common/common_types.h" #include "core/hle/kernel/k_dynamic_resource_manager.h" #include "core/hle/kernel/k_page_table_slab_heap.h" +#include "core/hle/kernel/k_typed_address.h" namespace Kernel { @@ -26,23 +26,23 @@ public: BaseHeap::Initialize(page_allocator, pt_heap); } - VAddr Allocate() { - return VAddr(BaseHeap::Allocate()); + KVirtualAddress Allocate() { + return KVirtualAddress(BaseHeap::Allocate()); } - RefCount GetRefCount(VAddr addr) const { + RefCount GetRefCount(KVirtualAddress addr) const { return m_pt_heap->GetRefCount(addr); } - void Open(VAddr addr, int count) { + void Open(KVirtualAddress addr, int count) { return m_pt_heap->Open(addr, count); } - bool Close(VAddr addr, int count) { + bool Close(KVirtualAddress addr, int count) { return m_pt_heap->Close(addr, count); } - bool IsInPageTableHeap(VAddr addr) const { + bool IsInPageTableHeap(KVirtualAddress addr) const { return m_pt_heap->IsInRange(addr); } diff --git a/src/core/hle/kernel/k_page_table_slab_heap.h b/src/core/hle/kernel/k_page_table_slab_heap.h index 9a8d77316..7da0ea669 100644 --- a/src/core/hle/kernel/k_page_table_slab_heap.h +++ b/src/core/hle/kernel/k_page_table_slab_heap.h @@ -6,8 +6,8 @@ #include <array> #include <vector> -#include "common/common_types.h" #include "core/hle/kernel/k_dynamic_slab_heap.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/slab_helpers.h" namespace Kernel { @@ -45,12 +45,12 @@ public: this->Initialize(rc); } - RefCount GetRefCount(VAddr addr) { + RefCount GetRefCount(KVirtualAddress addr) { ASSERT(this->IsInRange(addr)); return *this->GetRefCountPointer(addr); } - void Open(VAddr addr, int count) { + void Open(KVirtualAddress addr, int count) { ASSERT(this->IsInRange(addr)); *this->GetRefCountPointer(addr) += static_cast<RefCount>(count); @@ -58,7 +58,7 @@ public: ASSERT(this->GetRefCount(addr) > 0); } - bool Close(VAddr addr, int count) { + bool Close(KVirtualAddress addr, int count) { ASSERT(this->IsInRange(addr)); ASSERT(this->GetRefCount(addr) >= count); @@ -66,7 +66,7 @@ public: return this->GetRefCount(addr) == 0; } - bool IsInPageTableHeap(VAddr addr) const { + bool IsInPageTableHeap(KVirtualAddress addr) const { return this->IsInRange(addr); } @@ -81,7 +81,7 @@ private: } } - RefCount* GetRefCountPointer(VAddr addr) { + RefCount* GetRefCountPointer(KVirtualAddress addr) { return m_ref_counts.data() + ((addr - this->GetAddress()) / PageSize); } diff --git a/src/core/hle/kernel/k_process.cpp b/src/core/hle/kernel/k_process.cpp index 9d18f4049..efe86ad27 100644 --- a/src/core/hle/kernel/k_process.cpp +++ b/src/core/hle/kernel/k_process.cpp @@ -36,8 +36,9 @@ namespace { * @param owner_process The parent process for the main thread * @param priority The priority to give the main thread */ -void SetupMainThread(Core::System& system, KProcess& owner_process, u32 priority, VAddr stack_top) { - const VAddr entry_point = owner_process.PageTable().GetCodeRegionStart(); +void SetupMainThread(Core::System& system, KProcess& owner_process, u32 priority, + KProcessAddress stack_top) { + const KProcessAddress entry_point = owner_process.PageTable().GetCodeRegionStart(); ASSERT(owner_process.GetResourceLimit()->Reserve(LimitableResource::ThreadCountMax, 1)); KThread* thread = KThread::Create(system.Kernel()); @@ -219,7 +220,7 @@ void KProcess::UnpinThread(KThread* thread) { KScheduler::SetSchedulerUpdateNeeded(m_kernel); } -Result KProcess::AddSharedMemory(KSharedMemory* shmem, [[maybe_unused]] VAddr address, +Result KProcess::AddSharedMemory(KSharedMemory* shmem, [[maybe_unused]] KProcessAddress address, [[maybe_unused]] size_t size) { // Lock ourselves, to prevent concurrent access. KScopedLightLock lk(m_state_lock); @@ -248,7 +249,7 @@ Result KProcess::AddSharedMemory(KSharedMemory* shmem, [[maybe_unused]] VAddr ad R_SUCCEED(); } -void KProcess::RemoveSharedMemory(KSharedMemory* shmem, [[maybe_unused]] VAddr address, +void KProcess::RemoveSharedMemory(KSharedMemory* shmem, [[maybe_unused]] KProcessAddress address, [[maybe_unused]] size_t size) { // Lock ourselves, to prevent concurrent access. KScopedLightLock lk(m_state_lock); @@ -366,8 +367,8 @@ Result KProcess::LoadFromMetadata(const FileSys::ProgramMetadata& metadata, std: // Initialize process address space if (const Result result{m_page_table.InitializeForProcess( metadata.GetAddressSpaceType(), false, false, false, KMemoryManager::Pool::Application, - 0x8000000, code_size, std::addressof(m_kernel.GetAppSystemResource()), - m_resource_limit)}; + 0x8000000, code_size, std::addressof(m_kernel.GetAppSystemResource()), m_resource_limit, + m_kernel.System().ApplicationMemory())}; result.IsError()) { R_RETURN(result); } @@ -399,8 +400,8 @@ Result KProcess::LoadFromMetadata(const FileSys::ProgramMetadata& metadata, std: case FileSys::ProgramAddressSpaceType::Is32BitNoMap: m_memory_usage_capacity = - m_page_table.GetHeapRegionEnd() - m_page_table.GetHeapRegionStart() + - m_page_table.GetAliasRegionEnd() - m_page_table.GetAliasRegionStart(); + (m_page_table.GetHeapRegionEnd() - m_page_table.GetHeapRegionStart()) + + (m_page_table.GetAliasRegionEnd() - m_page_table.GetAliasRegionStart()); break; default: @@ -492,9 +493,9 @@ void KProcess::Finalize() { KSynchronizationObject::Finalize(); } -Result KProcess::CreateThreadLocalRegion(VAddr* out) { +Result KProcess::CreateThreadLocalRegion(KProcessAddress* out) { KThreadLocalPage* tlp = nullptr; - VAddr tlr = 0; + KProcessAddress tlr = 0; // See if we can get a region from a partially used TLP. { @@ -543,7 +544,7 @@ Result KProcess::CreateThreadLocalRegion(VAddr* out) { R_SUCCEED(); } -Result KProcess::DeleteThreadLocalRegion(VAddr addr) { +Result KProcess::DeleteThreadLocalRegion(KProcessAddress addr) { KThreadLocalPage* page_to_free = nullptr; // Release the region. @@ -551,10 +552,10 @@ Result KProcess::DeleteThreadLocalRegion(VAddr addr) { KScopedSchedulerLock sl{m_kernel}; // Try to find the page in the partially used list. - auto it = m_partially_used_tlp_tree.find_key(Common::AlignDown(addr, PageSize)); + auto it = m_partially_used_tlp_tree.find_key(Common::AlignDown(GetInteger(addr), PageSize)); if (it == m_partially_used_tlp_tree.end()) { // If we don't find it, it has to be in the fully used list. - it = m_fully_used_tlp_tree.find_key(Common::AlignDown(addr, PageSize)); + it = m_fully_used_tlp_tree.find_key(Common::AlignDown(GetInteger(addr), PageSize)); R_UNLESS(it != m_fully_used_tlp_tree.end(), ResultInvalidAddress); // Release the region. @@ -591,8 +592,7 @@ Result KProcess::DeleteThreadLocalRegion(VAddr addr) { R_SUCCEED(); } -bool KProcess::InsertWatchpoint(Core::System& system, VAddr addr, u64 size, - DebugWatchpointType type) { +bool KProcess::InsertWatchpoint(KProcessAddress addr, u64 size, DebugWatchpointType type) { const auto watch{std::find_if(m_watchpoints.begin(), m_watchpoints.end(), [&](const auto& wp) { return wp.type == DebugWatchpointType::None; })}; @@ -605,16 +605,16 @@ bool KProcess::InsertWatchpoint(Core::System& system, VAddr addr, u64 size, watch->end_address = addr + size; watch->type = type; - for (VAddr page = Common::AlignDown(addr, PageSize); page < addr + size; page += PageSize) { + for (KProcessAddress page = Common::AlignDown(GetInteger(addr), PageSize); page < addr + size; + page += PageSize) { m_debug_page_refcounts[page]++; - system.Memory().MarkRegionDebug(page, PageSize, true); + this->GetMemory().MarkRegionDebug(page, PageSize, true); } return true; } -bool KProcess::RemoveWatchpoint(Core::System& system, VAddr addr, u64 size, - DebugWatchpointType type) { +bool KProcess::RemoveWatchpoint(KProcessAddress addr, u64 size, DebugWatchpointType type) { const auto watch{std::find_if(m_watchpoints.begin(), m_watchpoints.end(), [&](const auto& wp) { return wp.start_address == addr && wp.end_address == addr + size && wp.type == type; })}; @@ -627,24 +627,24 @@ bool KProcess::RemoveWatchpoint(Core::System& system, VAddr addr, u64 size, watch->end_address = 0; watch->type = DebugWatchpointType::None; - for (VAddr page = Common::AlignDown(addr, PageSize); page < addr + size; page += PageSize) { + for (KProcessAddress page = Common::AlignDown(GetInteger(addr), PageSize); page < addr + size; + page += PageSize) { m_debug_page_refcounts[page]--; if (!m_debug_page_refcounts[page]) { - system.Memory().MarkRegionDebug(page, PageSize, false); + this->GetMemory().MarkRegionDebug(page, PageSize, false); } } return true; } -void KProcess::LoadModule(CodeSet code_set, VAddr base_addr) { +void KProcess::LoadModule(CodeSet code_set, KProcessAddress base_addr) { const auto ReprotectSegment = [&](const CodeSet::Segment& segment, Svc::MemoryPermission permission) { m_page_table.SetProcessMemoryPermission(segment.addr + base_addr, segment.size, permission); }; - m_kernel.System().Memory().WriteBlock(*this, base_addr, code_set.memory.data(), - code_set.memory.size()); + this->GetMemory().WriteBlock(base_addr, code_set.memory.data(), code_set.memory.size()); ReprotectSegment(code_set.CodeSegment(), Svc::MemoryPermission::ReadExecute); ReprotectSegment(code_set.RODataSegment(), Svc::MemoryPermission::Read); @@ -703,4 +703,9 @@ Result KProcess::AllocateMainThreadStack(std::size_t stack_size) { R_SUCCEED(); } +Core::Memory::Memory& KProcess::GetMemory() const { + // TODO: per-process memory + return m_kernel.System().ApplicationMemory(); +} + } // namespace Kernel diff --git a/src/core/hle/kernel/k_process.h b/src/core/hle/kernel/k_process.h index 7b7a971b8..925981d06 100644 --- a/src/core/hle/kernel/k_process.h +++ b/src/core/hle/kernel/k_process.h @@ -8,7 +8,6 @@ #include <list> #include <map> #include <string> -#include "common/common_types.h" #include "core/hle/kernel/k_address_arbiter.h" #include "core/hle/kernel/k_auto_object.h" #include "core/hle/kernel/k_condition_variable.h" @@ -16,14 +15,19 @@ #include "core/hle/kernel/k_page_table.h" #include "core/hle/kernel/k_synchronization_object.h" #include "core/hle/kernel/k_thread_local_page.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/k_worker_task.h" #include "core/hle/kernel/process_capability.h" #include "core/hle/kernel/slab_helpers.h" #include "core/hle/result.h" namespace Core { +namespace Memory { +class Memory; +}; + class System; -} +} // namespace Core namespace FileSys { class ProgramMetadata; @@ -59,8 +63,8 @@ enum class DebugWatchpointType : u8 { DECLARE_ENUM_FLAG_OPERATORS(DebugWatchpointType); struct DebugWatchpoint { - VAddr start_address; - VAddr end_address; + KProcessAddress start_address; + KProcessAddress end_address; DebugWatchpointType type; }; @@ -135,11 +139,14 @@ public: return m_handle_table; } - Result SignalToAddress(VAddr address) { + /// Gets a reference to process's memory. + Core::Memory::Memory& GetMemory() const; + + Result SignalToAddress(KProcessAddress address) { return m_condition_var.SignalToAddress(address); } - Result WaitForAddress(Handle handle, VAddr address, u32 tag) { + Result WaitForAddress(Handle handle, KProcessAddress address, u32 tag) { return m_condition_var.WaitForAddress(handle, address, tag); } @@ -147,20 +154,21 @@ public: return m_condition_var.Signal(cv_key, count); } - Result WaitConditionVariable(VAddr address, u64 cv_key, u32 tag, s64 ns) { + Result WaitConditionVariable(KProcessAddress address, u64 cv_key, u32 tag, s64 ns) { R_RETURN(m_condition_var.Wait(address, cv_key, tag, ns)); } - Result SignalAddressArbiter(VAddr address, Svc::SignalType signal_type, s32 value, s32 count) { + Result SignalAddressArbiter(uint64_t address, Svc::SignalType signal_type, s32 value, + s32 count) { R_RETURN(m_address_arbiter.SignalToAddress(address, signal_type, value, count)); } - Result WaitAddressArbiter(VAddr address, Svc::ArbitrationType arb_type, s32 value, + Result WaitAddressArbiter(uint64_t address, Svc::ArbitrationType arb_type, s32 value, s64 timeout) { R_RETURN(m_address_arbiter.WaitForAddress(address, arb_type, value, timeout)); } - VAddr GetProcessLocalRegionAddress() const { + KProcessAddress GetProcessLocalRegionAddress() const { return m_plr_address; } @@ -352,7 +360,7 @@ public: */ void PrepareForTermination(); - void LoadModule(CodeSet code_set, VAddr base_addr); + void LoadModule(CodeSet code_set, KProcessAddress base_addr); bool IsInitialized() const override { return m_is_initialized; @@ -380,26 +388,26 @@ public: return m_state_lock; } - Result AddSharedMemory(KSharedMemory* shmem, VAddr address, size_t size); - void RemoveSharedMemory(KSharedMemory* shmem, VAddr address, size_t size); + Result AddSharedMemory(KSharedMemory* shmem, KProcessAddress address, size_t size); + void RemoveSharedMemory(KSharedMemory* shmem, KProcessAddress address, size_t size); /////////////////////////////////////////////////////////////////////////////////////////////// // Thread-local storage management // Marks the next available region as used and returns the address of the slot. - [[nodiscard]] Result CreateThreadLocalRegion(VAddr* out); + [[nodiscard]] Result CreateThreadLocalRegion(KProcessAddress* out); // Frees a used TLS slot identified by the given address - Result DeleteThreadLocalRegion(VAddr addr); + Result DeleteThreadLocalRegion(KProcessAddress addr); /////////////////////////////////////////////////////////////////////////////////////////////// // Debug watchpoint management // Attempts to insert a watchpoint into a free slot. Returns false if none are available. - bool InsertWatchpoint(Core::System& system, VAddr addr, u64 size, DebugWatchpointType type); + bool InsertWatchpoint(KProcessAddress addr, u64 size, DebugWatchpointType type); // Attempts to remove the watchpoint specified by the given parameters. - bool RemoveWatchpoint(Core::System& system, VAddr addr, u64 size, DebugWatchpointType type); + bool RemoveWatchpoint(KProcessAddress addr, u64 size, DebugWatchpointType type); const std::array<DebugWatchpoint, Core::Hardware::NUM_WATCHPOINTS>& GetWatchpoints() const { return m_watchpoints; @@ -457,7 +465,7 @@ private: /// Resource limit descriptor for this process KResourceLimit* m_resource_limit{}; - VAddr m_system_resource_address{}; + KVirtualAddress m_system_resource_address{}; /// The ideal CPU core for this process, threads are scheduled on this core by default. u8 m_ideal_core = 0; @@ -485,7 +493,7 @@ private: KConditionVariable m_condition_var; /// Address indicating the location of the process' dedicated TLS region. - VAddr m_plr_address = 0; + KProcessAddress m_plr_address = 0; /// Random values for svcGetInfo RandomEntropy std::array<u64, RANDOM_ENTROPY_SIZE> m_random_entropy{}; @@ -497,7 +505,7 @@ private: std::list<KSharedMemoryInfo*> m_shared_memory_list; /// Address of the top of the main thread's stack - VAddr m_main_thread_stack_top{}; + KProcessAddress m_main_thread_stack_top{}; /// Size of the main thread's stack std::size_t m_main_thread_stack_size{}; @@ -527,7 +535,7 @@ private: std::array<u64, Core::Hardware::NUM_CPU_CORES> m_running_thread_idle_counts{}; std::array<KThread*, Core::Hardware::NUM_CPU_CORES> m_pinned_threads{}; std::array<DebugWatchpoint, Core::Hardware::NUM_WATCHPOINTS> m_watchpoints{}; - std::map<VAddr, u64> m_debug_page_refcounts; + std::map<KProcessAddress, u64> m_debug_page_refcounts; KThread* m_exception_thread{}; diff --git a/src/core/hle/kernel/k_scheduler.cpp b/src/core/hle/kernel/k_scheduler.cpp index ecadf2916..faa12b4f0 100644 --- a/src/core/hle/kernel/k_scheduler.cpp +++ b/src/core/hle/kernel/k_scheduler.cpp @@ -511,7 +511,7 @@ void KScheduler::Reload(KThread* thread) { auto& cpu_core = m_kernel.System().ArmInterface(m_core_id); cpu_core.LoadContext(thread->GetContext32()); cpu_core.LoadContext(thread->GetContext64()); - cpu_core.SetTlsAddress(thread->GetTlsAddress()); + cpu_core.SetTlsAddress(GetInteger(thread->GetTlsAddress())); cpu_core.SetTPIDR_EL0(thread->GetTpidrEl0()); cpu_core.LoadWatchpointArray(thread->GetOwnerProcess()->GetWatchpoints()); cpu_core.ClearExclusiveState(); diff --git a/src/core/hle/kernel/k_server_session.cpp b/src/core/hle/kernel/k_server_session.cpp index 2288ee435..c66aff501 100644 --- a/src/core/hle/kernel/k_server_session.cpp +++ b/src/core/hle/kernel/k_server_session.cpp @@ -222,7 +222,7 @@ Result KServerSession::SendReply(bool is_hle) { // HLE servers write directly to a pointer to the thread command buffer. Therefore // the reply has already been written in this case. } else { - Core::Memory::Memory& memory{m_kernel.System().Memory()}; + Core::Memory::Memory& memory{client_thread->GetOwnerProcess()->GetMemory()}; KThread* server_thread{GetCurrentThreadPointer(m_kernel)}; UNIMPLEMENTED_IF(server_thread->GetOwnerProcess() != client_thread->GetOwnerProcess()); @@ -319,7 +319,7 @@ Result KServerSession::ReceiveRequest(std::shared_ptr<Service::HLERequestContext // bool recv_list_broken = false; // Receive the message. - Core::Memory::Memory& memory{m_kernel.System().Memory()}; + Core::Memory::Memory& memory{client_thread->GetOwnerProcess()->GetMemory()}; if (out_context != nullptr) { // HLE request. u32* cmd_buf{reinterpret_cast<u32*>(memory.GetPointer(client_message))}; diff --git a/src/core/hle/kernel/k_session_request.cpp b/src/core/hle/kernel/k_session_request.cpp index a329e5690..9a69b4ffc 100644 --- a/src/core/hle/kernel/k_session_request.cpp +++ b/src/core/hle/kernel/k_session_request.cpp @@ -6,8 +6,8 @@ namespace Kernel { -Result KSessionRequest::SessionMappings::PushMap(VAddr client, VAddr server, size_t size, - KMemoryState state, size_t index) { +Result KSessionRequest::SessionMappings::PushMap(KProcessAddress client, KProcessAddress server, + size_t size, KMemoryState state, size_t index) { // At most 15 buffers of each type (4-bit descriptor counts). ASSERT(index < ((1ul << 4) - 1) * 3); @@ -33,20 +33,21 @@ Result KSessionRequest::SessionMappings::PushMap(VAddr client, VAddr server, siz R_SUCCEED(); } -Result KSessionRequest::SessionMappings::PushSend(VAddr client, VAddr server, size_t size, - KMemoryState state) { +Result KSessionRequest::SessionMappings::PushSend(KProcessAddress client, KProcessAddress server, + size_t size, KMemoryState state) { ASSERT(m_num_recv == 0); ASSERT(m_num_exch == 0); R_RETURN(this->PushMap(client, server, size, state, m_num_send++)); } -Result KSessionRequest::SessionMappings::PushReceive(VAddr client, VAddr server, size_t size, - KMemoryState state) { +Result KSessionRequest::SessionMappings::PushReceive(KProcessAddress client, KProcessAddress server, + size_t size, KMemoryState state) { ASSERT(m_num_exch == 0); R_RETURN(this->PushMap(client, server, size, state, m_num_send + m_num_recv++)); } -Result KSessionRequest::SessionMappings::PushExchange(VAddr client, VAddr server, size_t size, +Result KSessionRequest::SessionMappings::PushExchange(KProcessAddress client, + KProcessAddress server, size_t size, KMemoryState state) { R_RETURN(this->PushMap(client, server, size, state, m_num_send + m_num_recv + m_num_exch++)); } diff --git a/src/core/hle/kernel/k_session_request.h b/src/core/hle/kernel/k_session_request.h index 5685048ba..b5f04907b 100644 --- a/src/core/hle/kernel/k_session_request.h +++ b/src/core/hle/kernel/k_session_request.h @@ -26,17 +26,17 @@ public: class Mapping { public: - constexpr void Set(VAddr c, VAddr s, size_t sz, KMemoryState st) { + constexpr void Set(KProcessAddress c, KProcessAddress s, size_t sz, KMemoryState st) { m_client_address = c; m_server_address = s; m_size = sz; m_state = st; } - constexpr VAddr GetClientAddress() const { + constexpr KProcessAddress GetClientAddress() const { return m_client_address; } - constexpr VAddr GetServerAddress() const { + constexpr KProcessAddress GetServerAddress() const { return m_server_address; } constexpr size_t GetSize() const { @@ -47,8 +47,8 @@ public: } private: - VAddr m_client_address{}; - VAddr m_server_address{}; + KProcessAddress m_client_address{}; + KProcessAddress m_server_address{}; size_t m_size{}; KMemoryState m_state{}; }; @@ -69,14 +69,17 @@ public: return m_num_exch; } - Result PushSend(VAddr client, VAddr server, size_t size, KMemoryState state); - Result PushReceive(VAddr client, VAddr server, size_t size, KMemoryState state); - Result PushExchange(VAddr client, VAddr server, size_t size, KMemoryState state); + Result PushSend(KProcessAddress client, KProcessAddress server, size_t size, + KMemoryState state); + Result PushReceive(KProcessAddress client, KProcessAddress server, size_t size, + KMemoryState state); + Result PushExchange(KProcessAddress client, KProcessAddress server, size_t size, + KMemoryState state); - VAddr GetSendClientAddress(size_t i) const { + KProcessAddress GetSendClientAddress(size_t i) const { return GetSendMapping(i).GetClientAddress(); } - VAddr GetSendServerAddress(size_t i) const { + KProcessAddress GetSendServerAddress(size_t i) const { return GetSendMapping(i).GetServerAddress(); } size_t GetSendSize(size_t i) const { @@ -86,10 +89,10 @@ public: return GetSendMapping(i).GetMemoryState(); } - VAddr GetReceiveClientAddress(size_t i) const { + KProcessAddress GetReceiveClientAddress(size_t i) const { return GetReceiveMapping(i).GetClientAddress(); } - VAddr GetReceiveServerAddress(size_t i) const { + KProcessAddress GetReceiveServerAddress(size_t i) const { return GetReceiveMapping(i).GetServerAddress(); } size_t GetReceiveSize(size_t i) const { @@ -99,10 +102,10 @@ public: return GetReceiveMapping(i).GetMemoryState(); } - VAddr GetExchangeClientAddress(size_t i) const { + KProcessAddress GetExchangeClientAddress(size_t i) const { return GetExchangeMapping(i).GetClientAddress(); } - VAddr GetExchangeServerAddress(size_t i) const { + KProcessAddress GetExchangeServerAddress(size_t i) const { return GetExchangeMapping(i).GetServerAddress(); } size_t GetExchangeSize(size_t i) const { @@ -113,7 +116,8 @@ public: } private: - Result PushMap(VAddr client, VAddr server, size_t size, KMemoryState state, size_t index); + Result PushMap(KProcessAddress client, KProcessAddress server, size_t size, + KMemoryState state, size_t index); const Mapping& GetSendMapping(size_t i) const { ASSERT(i < m_num_send); @@ -227,22 +231,25 @@ public: return m_mappings.GetExchangeCount(); } - Result PushSend(VAddr client, VAddr server, size_t size, KMemoryState state) { + Result PushSend(KProcessAddress client, KProcessAddress server, size_t size, + KMemoryState state) { return m_mappings.PushSend(client, server, size, state); } - Result PushReceive(VAddr client, VAddr server, size_t size, KMemoryState state) { + Result PushReceive(KProcessAddress client, KProcessAddress server, size_t size, + KMemoryState state) { return m_mappings.PushReceive(client, server, size, state); } - Result PushExchange(VAddr client, VAddr server, size_t size, KMemoryState state) { + Result PushExchange(KProcessAddress client, KProcessAddress server, size_t size, + KMemoryState state) { return m_mappings.PushExchange(client, server, size, state); } - VAddr GetSendClientAddress(size_t i) const { + KProcessAddress GetSendClientAddress(size_t i) const { return m_mappings.GetSendClientAddress(i); } - VAddr GetSendServerAddress(size_t i) const { + KProcessAddress GetSendServerAddress(size_t i) const { return m_mappings.GetSendServerAddress(i); } size_t GetSendSize(size_t i) const { @@ -252,10 +259,10 @@ public: return m_mappings.GetSendMemoryState(i); } - VAddr GetReceiveClientAddress(size_t i) const { + KProcessAddress GetReceiveClientAddress(size_t i) const { return m_mappings.GetReceiveClientAddress(i); } - VAddr GetReceiveServerAddress(size_t i) const { + KProcessAddress GetReceiveServerAddress(size_t i) const { return m_mappings.GetReceiveServerAddress(i); } size_t GetReceiveSize(size_t i) const { @@ -265,10 +272,10 @@ public: return m_mappings.GetReceiveMemoryState(i); } - VAddr GetExchangeClientAddress(size_t i) const { + KProcessAddress GetExchangeClientAddress(size_t i) const { return m_mappings.GetExchangeClientAddress(i); } - VAddr GetExchangeServerAddress(size_t i) const { + KProcessAddress GetExchangeServerAddress(size_t i) const { return m_mappings.GetExchangeServerAddress(i); } size_t GetExchangeSize(size_t i) const { diff --git a/src/core/hle/kernel/k_shared_memory.cpp b/src/core/hle/kernel/k_shared_memory.cpp index 954e5befe..efb5699de 100644 --- a/src/core/hle/kernel/k_shared_memory.cpp +++ b/src/core/hle/kernel/k_shared_memory.cpp @@ -76,7 +76,7 @@ void KSharedMemory::Finalize() { m_resource_limit->Close(); } -Result KSharedMemory::Map(KProcess& target_process, VAddr address, std::size_t map_size, +Result KSharedMemory::Map(KProcess& target_process, KProcessAddress address, std::size_t map_size, Svc::MemoryPermission map_perm) { // Validate the size. R_UNLESS(m_size == map_size, ResultInvalidSize); @@ -94,7 +94,8 @@ Result KSharedMemory::Map(KProcess& target_process, VAddr address, std::size_t m ConvertToKMemoryPermission(map_perm))); } -Result KSharedMemory::Unmap(KProcess& target_process, VAddr address, std::size_t unmap_size) { +Result KSharedMemory::Unmap(KProcess& target_process, KProcessAddress address, + std::size_t unmap_size) { // Validate the size. R_UNLESS(m_size == unmap_size, ResultInvalidSize); diff --git a/src/core/hle/kernel/k_shared_memory.h b/src/core/hle/kernel/k_shared_memory.h index b4c4125bb..54b23d7ac 100644 --- a/src/core/hle/kernel/k_shared_memory.h +++ b/src/core/hle/kernel/k_shared_memory.h @@ -6,11 +6,11 @@ #include <optional> #include <string> -#include "common/common_types.h" #include "core/device_memory.h" #include "core/hle/kernel/k_memory_block.h" #include "core/hle/kernel/k_page_group.h" #include "core/hle/kernel/k_process.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/slab_helpers.h" #include "core/hle/result.h" @@ -37,7 +37,7 @@ public: * @param map_size Size of the shared memory block to map * @param permissions Memory block map permissions (specified by SVC field) */ - Result Map(KProcess& target_process, VAddr address, std::size_t map_size, + Result Map(KProcess& target_process, KProcessAddress address, std::size_t map_size, Svc::MemoryPermission permissions); /** @@ -46,7 +46,7 @@ public: * @param address Address in system memory to unmap shared memory block * @param unmap_size Size of the shared memory block to unmap */ - Result Unmap(KProcess& target_process, VAddr address, std::size_t unmap_size); + Result Unmap(KProcess& target_process, KProcessAddress address, std::size_t unmap_size); /** * Gets a pointer to the shared memory block @@ -79,7 +79,7 @@ private: std::optional<KPageGroup> m_page_group{}; Svc::MemoryPermission m_owner_permission{}; Svc::MemoryPermission m_user_permission{}; - PAddr m_physical_address{}; + KPhysicalAddress m_physical_address{}; std::size_t m_size{}; KResourceLimit* m_resource_limit{}; bool m_is_initialized{}; diff --git a/src/core/hle/kernel/k_system_resource.h b/src/core/hle/kernel/k_system_resource.h index d36aaa9bd..6ea482185 100644 --- a/src/core/hle/kernel/k_system_resource.h +++ b/src/core/hle/kernel/k_system_resource.h @@ -130,7 +130,7 @@ private: KBlockInfoSlabHeap m_block_info_heap; KPageTableSlabHeap m_page_table_heap; KResourceLimit* m_resource_limit{}; - VAddr m_resource_address{}; + KVirtualAddress m_resource_address{}; size_t m_resource_size{}; }; diff --git a/src/core/hle/kernel/k_thread.cpp b/src/core/hle/kernel/k_thread.cpp index c0e3ecb45..70480b725 100644 --- a/src/core/hle/kernel/k_thread.cpp +++ b/src/core/hle/kernel/k_thread.cpp @@ -48,8 +48,8 @@ static void ResetThreadContext32(Kernel::KThread::ThreadContext32& context, u32 context.fpscr = 0; } -static void ResetThreadContext64(Kernel::KThread::ThreadContext64& context, VAddr stack_top, - VAddr entry_point, u64 arg) { +static void ResetThreadContext64(Kernel::KThread::ThreadContext64& context, u64 stack_top, + u64 entry_point, u64 arg) { context = {}; context.cpu_registers[0] = arg; context.cpu_registers[18] = Kernel::KSystemControl::GenerateRandomU64() | 1; @@ -100,8 +100,8 @@ KThread::KThread(KernelCore& kernel) : KAutoObjectWithSlabHeapAndContainer{kernel}, m_activity_pause_lock{kernel} {} KThread::~KThread() = default; -Result KThread::Initialize(KThreadFunction func, uintptr_t arg, VAddr user_stack_top, s32 prio, - s32 virt_core, KProcess* owner, ThreadType type) { +Result KThread::Initialize(KThreadFunction func, uintptr_t arg, KProcessAddress user_stack_top, + s32 prio, s32 virt_core, KProcess* owner, ThreadType type) { // Assert parameters are valid. ASSERT((type == ThreadType::Main) || (type == ThreadType::Dummy) || (Svc::HighestThreadPriority <= prio && prio <= Svc::LowestThreadPriority)); @@ -221,9 +221,9 @@ Result KThread::Initialize(KThreadFunction func, uintptr_t arg, VAddr user_stack } // Initialize thread context. - ResetThreadContext64(m_thread_context_64, user_stack_top, func, arg); - ResetThreadContext32(m_thread_context_32, static_cast<u32>(user_stack_top), - static_cast<u32>(func), static_cast<u32>(arg)); + ResetThreadContext64(m_thread_context_64, GetInteger(user_stack_top), GetInteger(func), arg); + ResetThreadContext32(m_thread_context_32, static_cast<u32>(GetInteger(user_stack_top)), + static_cast<u32>(GetInteger(func)), static_cast<u32>(arg)); // Setup the stack parameters. StackParameters& sp = this->GetStackParameters(); @@ -249,8 +249,9 @@ Result KThread::Initialize(KThreadFunction func, uintptr_t arg, VAddr user_stack } Result KThread::InitializeThread(KThread* thread, KThreadFunction func, uintptr_t arg, - VAddr user_stack_top, s32 prio, s32 core, KProcess* owner, - ThreadType type, std::function<void()>&& init_func) { + KProcessAddress user_stack_top, s32 prio, s32 core, + KProcess* owner, ThreadType type, + std::function<void()>&& init_func) { // Initialize the thread. R_TRY(thread->Initialize(func, arg, user_stack_top, prio, core, owner, type)); @@ -288,8 +289,8 @@ Result KThread::InitializeHighPriorityThread(Core::System& system, KThread* thre } Result KThread::InitializeUserThread(Core::System& system, KThread* thread, KThreadFunction func, - uintptr_t arg, VAddr user_stack_top, s32 prio, s32 virt_core, - KProcess* owner) { + uintptr_t arg, KProcessAddress user_stack_top, s32 prio, + s32 virt_core, KProcess* owner) { system.Kernel().GlobalSchedulerContext().AddThread(thread); R_RETURN(InitializeThread(thread, func, arg, user_stack_top, prio, virt_core, owner, ThreadType::User, system.GetCpuManager().GetGuestThreadFunc())); @@ -545,7 +546,7 @@ u16 KThread::GetUserDisableCount() const { return {}; } - auto& memory = m_kernel.System().Memory(); + auto& memory = this->GetOwnerProcess()->GetMemory(); return memory.Read16(m_tls_address + offsetof(ThreadLocalRegion, disable_count)); } @@ -555,7 +556,7 @@ void KThread::SetInterruptFlag() { return; } - auto& memory = m_kernel.System().Memory(); + auto& memory = this->GetOwnerProcess()->GetMemory(); memory.Write16(m_tls_address + offsetof(ThreadLocalRegion, interrupt_flag), 1); } @@ -565,7 +566,7 @@ void KThread::ClearInterruptFlag() { return; } - auto& memory = m_kernel.System().Memory(); + auto& memory = this->GetOwnerProcess()->GetMemory(); memory.Write16(m_tls_address + offsetof(ThreadLocalRegion, interrupt_flag), 0); } @@ -951,7 +952,7 @@ void KThread::AddHeldLock(LockWithPriorityInheritanceInfo* lock_info) { m_held_lock_info_list.push_front(*lock_info); } -KThread::LockWithPriorityInheritanceInfo* KThread::FindHeldLock(VAddr address_key, +KThread::LockWithPriorityInheritanceInfo* KThread::FindHeldLock(KProcessAddress address_key, bool is_kernel_address_key) { ASSERT(KScheduler::IsSchedulerLockedByCurrentThread(m_kernel)); @@ -1087,7 +1088,8 @@ void KThread::RemoveWaiter(KThread* thread) { } } -KThread* KThread::RemoveWaiterByKey(bool* out_has_waiters, VAddr key, bool is_kernel_address_key_) { +KThread* KThread::RemoveWaiterByKey(bool* out_has_waiters, KProcessAddress key, + bool is_kernel_address_key_) { ASSERT(KScheduler::IsSchedulerLockedByCurrentThread(m_kernel)); // Get the relevant lock info. @@ -1420,6 +1422,11 @@ s32 GetCurrentCoreId(KernelCore& kernel) { return GetCurrentThread(kernel).GetCurrentCore(); } +Core::Memory::Memory& GetCurrentMemory(KernelCore& kernel) { + // TODO: per-process memory + return kernel.System().ApplicationMemory(); +} + KScopedDisableDispatch::~KScopedDisableDispatch() { // If we are shutting down the kernel, none of this is relevant anymore. if (m_kernel.IsShuttingDown()) { diff --git a/src/core/hle/kernel/k_thread.h b/src/core/hle/kernel/k_thread.h index 53fa64369..9c1a41128 100644 --- a/src/core/hle/kernel/k_thread.h +++ b/src/core/hle/kernel/k_thread.h @@ -14,7 +14,6 @@ #include <boost/intrusive/list.hpp> -#include "common/common_types.h" #include "common/intrusive_red_black_tree.h" #include "common/spin_lock.h" #include "core/arm/arm_interface.h" @@ -23,6 +22,7 @@ #include "core/hle/kernel/k_spin_lock.h" #include "core/hle/kernel/k_synchronization_object.h" #include "core/hle/kernel/k_timer_task.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/k_worker_task.h" #include "core/hle/kernel/slab_helpers.h" #include "core/hle/kernel/svc_common.h" @@ -34,6 +34,9 @@ class Fiber; } namespace Core { +namespace Memory { +class Memory; +} class ARM_Interface; class System; } // namespace Core @@ -46,7 +49,7 @@ class KProcess; class KScheduler; class KThreadQueue; -using KThreadFunction = VAddr; +using KThreadFunction = KProcessAddress; enum class ThreadType : u32 { Main = 0, @@ -113,6 +116,7 @@ KThread& GetCurrentThread(KernelCore& kernel); KProcess* GetCurrentProcessPointer(KernelCore& kernel); KProcess& GetCurrentProcess(KernelCore& kernel); s32 GetCurrentCoreId(KernelCore& kernel); +Core::Memory::Memory& GetCurrentMemory(KernelCore& kernel); class KThread final : public KAutoObjectWithSlabHeapAndContainer<KThread, KWorkerTask>, public boost::intrusive::list_base_hook<>, @@ -230,9 +234,9 @@ public: /* * Returns the Thread Local Storage address of the current thread - * @returns VAddr of the thread's TLS + * @returns Address of the thread's TLS */ - VAddr GetTlsAddress() const { + KProcessAddress GetTlsAddress() const { return m_tls_address; } @@ -419,8 +423,8 @@ public: KThreadFunction func, uintptr_t arg, s32 virt_core); static Result InitializeUserThread(Core::System& system, KThread* thread, KThreadFunction func, - uintptr_t arg, VAddr user_stack_top, s32 prio, s32 virt_core, - KProcess* owner); + uintptr_t arg, KProcessAddress user_stack_top, s32 prio, + s32 virt_core, KProcess* owner); static Result InitializeServiceThread(Core::System& system, KThread* thread, std::function<void()>&& thread_func, s32 prio, @@ -565,15 +569,15 @@ public: Result GetThreadContext3(std::vector<u8>& out); - KThread* RemoveUserWaiterByKey(bool* out_has_waiters, VAddr key) { + KThread* RemoveUserWaiterByKey(bool* out_has_waiters, KProcessAddress key) { return this->RemoveWaiterByKey(out_has_waiters, key, false); } - KThread* RemoveKernelWaiterByKey(bool* out_has_waiters, VAddr key) { + KThread* RemoveKernelWaiterByKey(bool* out_has_waiters, KProcessAddress key) { return this->RemoveWaiterByKey(out_has_waiters, key, true); } - VAddr GetAddressKey() const { + KProcessAddress GetAddressKey() const { return m_address_key; } @@ -591,14 +595,14 @@ public: // to cope with arbitrary host pointers making their way // into things. - void SetUserAddressKey(VAddr key, u32 val) { + void SetUserAddressKey(KProcessAddress key, u32 val) { ASSERT(m_waiting_lock_info == nullptr); m_address_key = key; m_address_key_value = val; m_is_kernel_address_key = false; } - void SetKernelAddressKey(VAddr key) { + void SetKernelAddressKey(KProcessAddress key) { ASSERT(m_waiting_lock_info == nullptr); m_address_key = key; m_is_kernel_address_key = true; @@ -637,12 +641,13 @@ public: return m_argument; } - VAddr GetUserStackTop() const { + KProcessAddress GetUserStackTop() const { return m_stack_top; } private: - KThread* RemoveWaiterByKey(bool* out_has_waiters, VAddr key, bool is_kernel_address_key); + KThread* RemoveWaiterByKey(bool* out_has_waiters, KProcessAddress key, + bool is_kernel_address_key); static constexpr size_t PriorityInheritanceCountMax = 10; union SyncObjectBuffer { @@ -695,12 +700,13 @@ private: void IncreaseBasePriority(s32 priority); - Result Initialize(KThreadFunction func, uintptr_t arg, VAddr user_stack_top, s32 prio, + Result Initialize(KThreadFunction func, uintptr_t arg, KProcessAddress user_stack_top, s32 prio, s32 virt_core, KProcess* owner, ThreadType type); static Result InitializeThread(KThread* thread, KThreadFunction func, uintptr_t arg, - VAddr user_stack_top, s32 prio, s32 core, KProcess* owner, - ThreadType type, std::function<void()>&& init_func); + KProcessAddress user_stack_top, s32 prio, s32 core, + KProcess* owner, ThreadType type, + std::function<void()>&& init_func); // For core KThread implementation ThreadContext32 m_thread_context_32{}; @@ -749,7 +755,8 @@ public: public: explicit LockWithPriorityInheritanceInfo(KernelCore&) {} - static LockWithPriorityInheritanceInfo* Create(KernelCore& kernel, VAddr address_key, + static LockWithPriorityInheritanceInfo* Create(KernelCore& kernel, + KProcessAddress address_key, bool is_kernel_address_key) { // Create a new lock info. auto* new_lock = LockWithPriorityInheritanceInfo::Allocate(kernel); @@ -797,7 +804,7 @@ public: return m_tree; } - VAddr GetAddressKey() const { + KProcessAddress GetAddressKey() const { return m_address_key; } bool GetIsKernelAddressKey() const { @@ -812,7 +819,7 @@ public: private: LockWithPriorityInheritanceThreadTree m_tree{}; - VAddr m_address_key{}; + KProcessAddress m_address_key{}; KThread* m_owner{}; u32 m_waiter_count{}; bool m_is_kernel_address_key{}; @@ -827,7 +834,8 @@ public: } void AddHeldLock(LockWithPriorityInheritanceInfo* lock_info); - LockWithPriorityInheritanceInfo* FindHeldLock(VAddr address_key, bool is_kernel_address_key); + LockWithPriorityInheritanceInfo* FindHeldLock(KProcessAddress address_key, + bool is_kernel_address_key); private: using LockWithPriorityInheritanceInfoList = @@ -839,11 +847,11 @@ private: KAffinityMask m_physical_affinity_mask{}; u64 m_thread_id{}; std::atomic<s64> m_cpu_time{}; - VAddr m_address_key{}; + KProcessAddress m_address_key{}; KProcess* m_parent{}; - VAddr m_kernel_stack_top{}; + KVirtualAddress m_kernel_stack_top{}; u32* m_light_ipc_data{}; - VAddr m_tls_address{}; + KProcessAddress m_tls_address{}; KLightLock m_activity_pause_lock; s64 m_schedule_count{}; s64 m_last_scheduled_tick{}; @@ -887,16 +895,16 @@ private: // For debugging std::vector<KSynchronizationObject*> m_wait_objects_for_debugging{}; - VAddr m_mutex_wait_address_for_debugging{}; + KProcessAddress m_mutex_wait_address_for_debugging{}; ThreadWaitReasonForDebugging m_wait_reason_for_debugging{}; uintptr_t m_argument{}; - VAddr m_stack_top{}; + KProcessAddress m_stack_top{}; public: using ConditionVariableThreadTreeType = ConditionVariableThreadTree; - void SetConditionVariable(ConditionVariableThreadTree* tree, VAddr address, u64 cv_key, - u32 value) { + void SetConditionVariable(ConditionVariableThreadTree* tree, KProcessAddress address, + u64 cv_key, u32 value) { ASSERT(m_waiting_lock_info == nullptr); m_condvar_tree = tree; m_condvar_key = cv_key; diff --git a/src/core/hle/kernel/k_thread_local_page.cpp b/src/core/hle/kernel/k_thread_local_page.cpp index c2af6898a..b4a1e3cdb 100644 --- a/src/core/hle/kernel/k_thread_local_page.cpp +++ b/src/core/hle/kernel/k_thread_local_page.cpp @@ -37,7 +37,7 @@ Result KThreadLocalPage::Initialize(KernelCore& kernel, KProcess* process) { Result KThreadLocalPage::Finalize() { // Get the physical address of the page. - const PAddr phys_addr = m_owner->PageTable().GetPhysicalAddr(m_virt_addr); + const KPhysicalAddress phys_addr = m_owner->PageTable().GetPhysicalAddr(m_virt_addr); ASSERT(phys_addr); // Unmap the page. @@ -49,7 +49,7 @@ Result KThreadLocalPage::Finalize() { return ResultSuccess; } -VAddr KThreadLocalPage::Reserve() { +KProcessAddress KThreadLocalPage::Reserve() { for (size_t i = 0; i < m_is_region_free.size(); i++) { if (m_is_region_free[i]) { m_is_region_free[i] = false; @@ -60,7 +60,7 @@ VAddr KThreadLocalPage::Reserve() { return 0; } -void KThreadLocalPage::Release(VAddr addr) { +void KThreadLocalPage::Release(KProcessAddress addr) { m_is_region_free[this->GetRegionIndex(addr)] = true; } diff --git a/src/core/hle/kernel/k_thread_local_page.h b/src/core/hle/kernel/k_thread_local_page.h index 71254eb55..813f32a7e 100644 --- a/src/core/hle/kernel/k_thread_local_page.h +++ b/src/core/hle/kernel/k_thread_local_page.h @@ -27,19 +27,20 @@ public: static_assert(RegionsPerPage > 0); public: - constexpr explicit KThreadLocalPage(KernelCore&, VAddr addr = {}) : m_virt_addr(addr) { + constexpr explicit KThreadLocalPage(KernelCore&, KProcessAddress addr = {}) + : m_virt_addr(addr) { m_is_region_free.fill(true); } - constexpr VAddr GetAddress() const { + constexpr KProcessAddress GetAddress() const { return m_virt_addr; } Result Initialize(KernelCore& kernel, KProcess* process); Result Finalize(); - VAddr Reserve(); - void Release(VAddr addr); + KProcessAddress Reserve(); + void Release(KProcessAddress addr); bool IsAllUsed() const { return std::ranges::all_of(m_is_region_free.begin(), m_is_region_free.end(), @@ -60,7 +61,7 @@ public: } public: - using RedBlackKeyType = VAddr; + using RedBlackKeyType = KProcessAddress; static constexpr RedBlackKeyType GetRedBlackKey(const RedBlackKeyType& v) { return v; @@ -72,8 +73,8 @@ public: template <typename T> requires(std::same_as<T, KThreadLocalPage> || std::same_as<T, RedBlackKeyType>) static constexpr int Compare(const T& lhs, const KThreadLocalPage& rhs) { - const VAddr lval = GetRedBlackKey(lhs); - const VAddr rval = GetRedBlackKey(rhs); + const KProcessAddress lval = GetRedBlackKey(lhs); + const KProcessAddress rval = GetRedBlackKey(rhs); if (lval < rval) { return -1; @@ -85,22 +86,22 @@ public: } private: - constexpr VAddr GetRegionAddress(size_t i) const { + constexpr KProcessAddress GetRegionAddress(size_t i) const { return this->GetAddress() + i * Svc::ThreadLocalRegionSize; } - constexpr bool Contains(VAddr addr) const { + constexpr bool Contains(KProcessAddress addr) const { return this->GetAddress() <= addr && addr < this->GetAddress() + PageSize; } - constexpr size_t GetRegionIndex(VAddr addr) const { - ASSERT(Common::IsAligned(addr, Svc::ThreadLocalRegionSize)); + constexpr size_t GetRegionIndex(KProcessAddress addr) const { + ASSERT(Common::IsAligned(GetInteger(addr), Svc::ThreadLocalRegionSize)); ASSERT(this->Contains(addr)); return (addr - this->GetAddress()) / Svc::ThreadLocalRegionSize; } private: - VAddr m_virt_addr{}; + KProcessAddress m_virt_addr{}; KProcess* m_owner{}; KernelCore* m_kernel{}; std::array<bool, RegionsPerPage> m_is_region_free{}; diff --git a/src/core/hle/kernel/k_transfer_memory.cpp b/src/core/hle/kernel/k_transfer_memory.cpp index 471349282..13d34125c 100644 --- a/src/core/hle/kernel/k_transfer_memory.cpp +++ b/src/core/hle/kernel/k_transfer_memory.cpp @@ -13,7 +13,7 @@ KTransferMemory::KTransferMemory(KernelCore& kernel) KTransferMemory::~KTransferMemory() = default; -Result KTransferMemory::Initialize(VAddr address, std::size_t size, +Result KTransferMemory::Initialize(KProcessAddress address, std::size_t size, Svc::MemoryPermission owner_perm) { // Set members. m_owner = GetCurrentProcessPointer(m_kernel); diff --git a/src/core/hle/kernel/k_transfer_memory.h b/src/core/hle/kernel/k_transfer_memory.h index 3d4d795a5..54f97ccb4 100644 --- a/src/core/hle/kernel/k_transfer_memory.h +++ b/src/core/hle/kernel/k_transfer_memory.h @@ -26,7 +26,7 @@ public: explicit KTransferMemory(KernelCore& kernel); ~KTransferMemory() override; - Result Initialize(VAddr address, std::size_t size, Svc::MemoryPermission owner_perm); + Result Initialize(KProcessAddress address, std::size_t size, Svc::MemoryPermission owner_perm); void Finalize() override; @@ -44,7 +44,7 @@ public: return m_owner; } - VAddr GetSourceAddress() const { + KProcessAddress GetSourceAddress() const { return m_address; } @@ -54,7 +54,7 @@ public: private: KProcess* m_owner{}; - VAddr m_address{}; + KProcessAddress m_address{}; Svc::MemoryPermission m_owner_perm{}; size_t m_size{}; bool m_is_initialized{}; diff --git a/src/core/hle/kernel/k_typed_address.h b/src/core/hle/kernel/k_typed_address.h new file mode 100644 index 000000000..d57535ba0 --- /dev/null +++ b/src/core/hle/kernel/k_typed_address.h @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/typed_address.h" + +namespace Kernel { + +using KPhysicalAddress = Common::PhysicalAddress; +using KVirtualAddress = Common::VirtualAddress; +using KProcessAddress = Common::ProcessAddress; + +} // namespace Kernel diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 98ecaf12f..4f3366c9d 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -102,7 +102,7 @@ struct KernelCore::Impl { void InitializeCores() { for (u32 core_id = 0; core_id < Core::Hardware::NUM_CPU_CORES; core_id++) { cores[core_id]->Initialize((*application_process).Is64BitProcess()); - system.Memory().SetCurrentPageTable(*application_process, core_id); + system.ApplicationMemory().SetCurrentPageTable(*application_process, core_id); } } @@ -206,7 +206,7 @@ struct KernelCore::Impl { void InitializePhysicalCores() { exclusive_monitor = - Core::MakeExclusiveMonitor(system.Memory(), Core::Hardware::NUM_CPU_CORES); + Core::MakeExclusiveMonitor(system.ApplicationMemory(), Core::Hardware::NUM_CPU_CORES); for (u32 i = 0; i < Core::Hardware::NUM_CPU_CORES; i++) { const s32 core{static_cast<s32>(i)}; @@ -271,9 +271,9 @@ struct KernelCore::Impl { system.CoreTiming().ScheduleLoopingEvent(time_interval, time_interval, preemption_event); } - void InitializeResourceManagers(KernelCore& kernel, VAddr address, size_t size) { + void InitializeResourceManagers(KernelCore& kernel, KVirtualAddress address, size_t size) { // Ensure that the buffer is suitable for our use. - ASSERT(Common::IsAligned(address, PageSize)); + ASSERT(Common::IsAligned(GetInteger(address), PageSize)); ASSERT(Common::IsAligned(size, PageSize)); // Ensure that we have space for our reference counts. @@ -462,29 +462,30 @@ struct KernelCore::Impl { KernelPhysicalAddressSpaceBase + KernelPhysicalAddressSpaceSize - 1); // Save start and end for ease of use. - const VAddr code_start_virt_addr = KernelVirtualAddressCodeBase; - const VAddr code_end_virt_addr = KernelVirtualAddressCodeEnd; + constexpr KVirtualAddress code_start_virt_addr = KernelVirtualAddressCodeBase; + constexpr KVirtualAddress code_end_virt_addr = KernelVirtualAddressCodeEnd; // Setup the containing kernel region. constexpr size_t KernelRegionSize = 1_GiB; constexpr size_t KernelRegionAlign = 1_GiB; - constexpr VAddr kernel_region_start = - Common::AlignDown(code_start_virt_addr, KernelRegionAlign); + constexpr KVirtualAddress kernel_region_start = + Common::AlignDown(GetInteger(code_start_virt_addr), KernelRegionAlign); size_t kernel_region_size = KernelRegionSize; if (!(kernel_region_start + KernelRegionSize - 1 <= KernelVirtualAddressSpaceLast)) { - kernel_region_size = KernelVirtualAddressSpaceEnd - kernel_region_start; + kernel_region_size = KernelVirtualAddressSpaceEnd - GetInteger(kernel_region_start); } ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - kernel_region_start, kernel_region_size, KMemoryRegionType_Kernel)); + GetInteger(kernel_region_start), kernel_region_size, KMemoryRegionType_Kernel)); // Setup the code region. constexpr size_t CodeRegionAlign = PageSize; - constexpr VAddr code_region_start = - Common::AlignDown(code_start_virt_addr, CodeRegionAlign); - constexpr VAddr code_region_end = Common::AlignUp(code_end_virt_addr, CodeRegionAlign); + constexpr KVirtualAddress code_region_start = + Common::AlignDown(GetInteger(code_start_virt_addr), CodeRegionAlign); + constexpr KVirtualAddress code_region_end = + Common::AlignUp(GetInteger(code_end_virt_addr), CodeRegionAlign); constexpr size_t code_region_size = code_region_end - code_region_start; ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - code_region_start, code_region_size, KMemoryRegionType_KernelCode)); + GetInteger(code_region_start), code_region_size, KMemoryRegionType_KernelCode)); // Setup board-specific device physical regions. Init::SetupDevicePhysicalMemoryRegions(*memory_layout); @@ -520,11 +521,11 @@ struct KernelCore::Impl { ASSERT(misc_region_size > 0); // Setup the misc region. - const VAddr misc_region_start = + const KVirtualAddress misc_region_start = memory_layout->GetVirtualMemoryRegionTree().GetRandomAlignedRegion( misc_region_size, MiscRegionAlign, KMemoryRegionType_Kernel); ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - misc_region_start, misc_region_size, KMemoryRegionType_KernelMisc)); + GetInteger(misc_region_start), misc_region_size, KMemoryRegionType_KernelMisc)); // Determine if we'll use extra thread resources. const bool use_extra_resources = KSystemControl::Init::ShouldIncreaseThreadResourceLimit(); @@ -532,11 +533,11 @@ struct KernelCore::Impl { // Setup the stack region. constexpr size_t StackRegionSize = 14_MiB; constexpr size_t StackRegionAlign = KernelAslrAlignment; - const VAddr stack_region_start = + const KVirtualAddress stack_region_start = memory_layout->GetVirtualMemoryRegionTree().GetRandomAlignedRegion( StackRegionSize, StackRegionAlign, KMemoryRegionType_Kernel); ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - stack_region_start, StackRegionSize, KMemoryRegionType_KernelStack)); + GetInteger(stack_region_start), StackRegionSize, KMemoryRegionType_KernelStack)); // Determine the size of the resource region. const size_t resource_region_size = @@ -548,29 +549,29 @@ struct KernelCore::Impl { ASSERT(slab_region_size <= resource_region_size); // Setup the slab region. - const PAddr code_start_phys_addr = KernelPhysicalAddressCodeBase; - const PAddr code_end_phys_addr = code_start_phys_addr + code_region_size; - const PAddr slab_start_phys_addr = code_end_phys_addr; - const PAddr slab_end_phys_addr = slab_start_phys_addr + slab_region_size; + const KPhysicalAddress code_start_phys_addr = KernelPhysicalAddressCodeBase; + const KPhysicalAddress code_end_phys_addr = code_start_phys_addr + code_region_size; + const KPhysicalAddress slab_start_phys_addr = code_end_phys_addr; + const KPhysicalAddress slab_end_phys_addr = slab_start_phys_addr + slab_region_size; constexpr size_t SlabRegionAlign = KernelAslrAlignment; const size_t slab_region_needed_size = - Common::AlignUp(code_end_phys_addr + slab_region_size, SlabRegionAlign) - - Common::AlignDown(code_end_phys_addr, SlabRegionAlign); - const VAddr slab_region_start = + Common::AlignUp(GetInteger(code_end_phys_addr) + slab_region_size, SlabRegionAlign) - + Common::AlignDown(GetInteger(code_end_phys_addr), SlabRegionAlign); + const KVirtualAddress slab_region_start = memory_layout->GetVirtualMemoryRegionTree().GetRandomAlignedRegion( slab_region_needed_size, SlabRegionAlign, KMemoryRegionType_Kernel) + - (code_end_phys_addr % SlabRegionAlign); + (GetInteger(code_end_phys_addr) % SlabRegionAlign); ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - slab_region_start, slab_region_size, KMemoryRegionType_KernelSlab)); + GetInteger(slab_region_start), slab_region_size, KMemoryRegionType_KernelSlab)); // Setup the temp region. constexpr size_t TempRegionSize = 128_MiB; constexpr size_t TempRegionAlign = KernelAslrAlignment; - const VAddr temp_region_start = + const KVirtualAddress temp_region_start = memory_layout->GetVirtualMemoryRegionTree().GetRandomAlignedRegion( TempRegionSize, TempRegionAlign, KMemoryRegionType_Kernel); - ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert(temp_region_start, TempRegionSize, - KMemoryRegionType_KernelTemp)); + ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( + GetInteger(temp_region_start), TempRegionSize, KMemoryRegionType_KernelTemp)); // Automatically map in devices that have auto-map attributes. for (auto& region : memory_layout->GetPhysicalMemoryRegionTree()) { @@ -596,35 +597,37 @@ struct KernelCore::Impl { region.SetTypeAttribute(KMemoryRegionAttr_DidKernelMap); // Create a virtual pair region and insert it into the tree. - const PAddr map_phys_addr = Common::AlignDown(region.GetAddress(), PageSize); + const KPhysicalAddress map_phys_addr = Common::AlignDown(region.GetAddress(), PageSize); const size_t map_size = - Common::AlignUp(region.GetEndAddress(), PageSize) - map_phys_addr; - const VAddr map_virt_addr = + Common::AlignUp(region.GetEndAddress(), PageSize) - GetInteger(map_phys_addr); + const KVirtualAddress map_virt_addr = memory_layout->GetVirtualMemoryRegionTree().GetRandomAlignedRegionWithGuard( map_size, PageSize, KMemoryRegionType_KernelMisc, PageSize); ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - map_virt_addr, map_size, KMemoryRegionType_KernelMiscMappedDevice)); - region.SetPairAddress(map_virt_addr + region.GetAddress() - map_phys_addr); + GetInteger(map_virt_addr), map_size, KMemoryRegionType_KernelMiscMappedDevice)); + region.SetPairAddress(GetInteger(map_virt_addr) + region.GetAddress() - + GetInteger(map_phys_addr)); } Init::SetupDramPhysicalMemoryRegions(*memory_layout); // Insert a physical region for the kernel code region. ASSERT(memory_layout->GetPhysicalMemoryRegionTree().Insert( - code_start_phys_addr, code_region_size, KMemoryRegionType_DramKernelCode)); + GetInteger(code_start_phys_addr), code_region_size, KMemoryRegionType_DramKernelCode)); // Insert a physical region for the kernel slab region. ASSERT(memory_layout->GetPhysicalMemoryRegionTree().Insert( - slab_start_phys_addr, slab_region_size, KMemoryRegionType_DramKernelSlab)); + GetInteger(slab_start_phys_addr), slab_region_size, KMemoryRegionType_DramKernelSlab)); // Determine size available for kernel page table heaps, requiring > 8 MB. - const PAddr resource_end_phys_addr = slab_start_phys_addr + resource_region_size; + const KPhysicalAddress resource_end_phys_addr = slab_start_phys_addr + resource_region_size; const size_t page_table_heap_size = resource_end_phys_addr - slab_end_phys_addr; ASSERT(page_table_heap_size / 4_MiB > 2); // Insert a physical region for the kernel page table heap region ASSERT(memory_layout->GetPhysicalMemoryRegionTree().Insert( - slab_end_phys_addr, page_table_heap_size, KMemoryRegionType_DramKernelPtHeap)); + GetInteger(slab_end_phys_addr), page_table_heap_size, + KMemoryRegionType_DramKernelPtHeap)); // All DRAM regions that we haven't tagged by this point will be mapped under the linear // mapping. Tag them. @@ -646,20 +649,21 @@ struct KernelCore::Impl { // Setup the linear mapping region. constexpr size_t LinearRegionAlign = 1_GiB; - const PAddr aligned_linear_phys_start = + const KPhysicalAddress aligned_linear_phys_start = Common::AlignDown(linear_extents.GetAddress(), LinearRegionAlign); const size_t linear_region_size = Common::AlignUp(linear_extents.GetEndAddress(), LinearRegionAlign) - - aligned_linear_phys_start; - const VAddr linear_region_start = + GetInteger(aligned_linear_phys_start); + const KVirtualAddress linear_region_start = memory_layout->GetVirtualMemoryRegionTree().GetRandomAlignedRegionWithGuard( linear_region_size, LinearRegionAlign, KMemoryRegionType_None, LinearRegionAlign); - const u64 linear_region_phys_to_virt_diff = linear_region_start - aligned_linear_phys_start; + const u64 linear_region_phys_to_virt_diff = + GetInteger(linear_region_start) - GetInteger(aligned_linear_phys_start); // Map and create regions for all the linearly-mapped data. { - PAddr cur_phys_addr = 0; + KPhysicalAddress cur_phys_addr = 0; u64 cur_size = 0; for (auto& region : memory_layout->GetPhysicalMemoryRegionTree()) { if (!region.HasTypeAttribute(KMemoryRegionAttr_LinearMapped)) { @@ -678,15 +682,16 @@ struct KernelCore::Impl { cur_size = region.GetSize(); } - const VAddr region_virt_addr = + const KVirtualAddress region_virt_addr = region.GetAddress() + linear_region_phys_to_virt_diff; ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - region_virt_addr, region.GetSize(), + GetInteger(region_virt_addr), region.GetSize(), GetTypeForVirtualLinearMapping(region.GetType()))); - region.SetPairAddress(region_virt_addr); + region.SetPairAddress(GetInteger(region_virt_addr)); KMemoryRegion* virt_region = - memory_layout->GetVirtualMemoryRegionTree().FindModifiable(region_virt_addr); + memory_layout->GetVirtualMemoryRegionTree().FindModifiable( + GetInteger(region_virt_addr)); ASSERT(virt_region != nullptr); virt_region->SetPairAddress(region.GetAddress()); } @@ -694,10 +699,11 @@ struct KernelCore::Impl { // Insert regions for the initial page table region. ASSERT(memory_layout->GetPhysicalMemoryRegionTree().Insert( - resource_end_phys_addr, KernelPageTableHeapSize, KMemoryRegionType_DramKernelInitPt)); + GetInteger(resource_end_phys_addr), KernelPageTableHeapSize, + KMemoryRegionType_DramKernelInitPt)); ASSERT(memory_layout->GetVirtualMemoryRegionTree().Insert( - resource_end_phys_addr + linear_region_phys_to_virt_diff, KernelPageTableHeapSize, - KMemoryRegionType_VirtualDramKernelInitPt)); + GetInteger(resource_end_phys_addr) + linear_region_phys_to_virt_diff, + KernelPageTableHeapSize, KMemoryRegionType_VirtualDramKernelInitPt)); // All linear-mapped DRAM regions that we haven't tagged by this point will be allocated to // some pool partition. Tag them. @@ -969,12 +975,12 @@ void KernelCore::InvalidateAllInstructionCaches() { } } -void KernelCore::InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size) { +void KernelCore::InvalidateCpuInstructionCacheRange(KProcessAddress addr, std::size_t size) { for (auto& physical_core : impl->cores) { if (!physical_core->IsInitialized()) { continue; } - physical_core->ArmInterface().InvalidateCacheRange(addr, size); + physical_core->ArmInterface().InvalidateCacheRange(GetInteger(addr), size); } } diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 183a4d227..d5b08eeb5 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -14,6 +14,7 @@ #include "core/hardware_properties.h" #include "core/hle/kernel/k_auto_object.h" #include "core/hle/kernel/k_slab_heap.h" +#include "core/hle/kernel/k_typed_address.h" #include "core/hle/kernel/svc_common.h" namespace Core { @@ -185,7 +186,7 @@ public: void InvalidateAllInstructionCaches(); - void InvalidateCpuInstructionCacheRange(VAddr addr, std::size_t size); + void InvalidateCpuInstructionCacheRange(KProcessAddress addr, std::size_t size); /// Registers all kernel objects with the global emulation state, this is purely for tracking /// leaks after emulation has been shutdown. diff --git a/src/core/hle/kernel/memory_types.h b/src/core/hle/kernel/memory_types.h index 92b8b37ac..18de675cc 100644 --- a/src/core/hle/kernel/memory_types.h +++ b/src/core/hle/kernel/memory_types.h @@ -6,6 +6,7 @@ #include <array> #include "common/common_types.h" +#include "core/hle/kernel/k_typed_address.h" namespace Kernel { @@ -14,7 +15,4 @@ constexpr std::size_t PageSize{1 << PageBits}; using Page = std::array<u8, PageSize>; -using KPhysicalAddress = PAddr; -using KProcessAddress = VAddr; - } // namespace Kernel diff --git a/src/core/hle/kernel/svc/svc_address_arbiter.cpp b/src/core/hle/kernel/svc/svc_address_arbiter.cpp index 22071731b..04cc5ea64 100644 --- a/src/core/hle/kernel/svc/svc_address_arbiter.cpp +++ b/src/core/hle/kernel/svc/svc_address_arbiter.cpp @@ -37,7 +37,7 @@ constexpr bool IsValidArbitrationType(Svc::ArbitrationType type) { } // namespace // Wait for an address (via Address Arbiter) -Result WaitForAddress(Core::System& system, VAddr address, ArbitrationType arb_type, s32 value, +Result WaitForAddress(Core::System& system, u64 address, ArbitrationType arb_type, s32 value, s64 timeout_ns) { LOG_TRACE(Kernel_SVC, "called, address=0x{:X}, arb_type=0x{:X}, value=0x{:X}, timeout_ns={}", address, arb_type, value, timeout_ns); @@ -68,7 +68,7 @@ Result WaitForAddress(Core::System& system, VAddr address, ArbitrationType arb_t } // Signals to an address (via Address Arbiter) -Result SignalToAddress(Core::System& system, VAddr address, SignalType signal_type, s32 value, +Result SignalToAddress(Core::System& system, u64 address, SignalType signal_type, s32 value, s32 count) { LOG_TRACE(Kernel_SVC, "called, address=0x{:X}, signal_type=0x{:X}, value=0x{:X}, count=0x{:X}", address, signal_type, value, count); @@ -82,12 +82,12 @@ Result SignalToAddress(Core::System& system, VAddr address, SignalType signal_ty .SignalAddressArbiter(address, signal_type, value, count)); } -Result WaitForAddress64(Core::System& system, VAddr address, ArbitrationType arb_type, s32 value, +Result WaitForAddress64(Core::System& system, u64 address, ArbitrationType arb_type, s32 value, s64 timeout_ns) { R_RETURN(WaitForAddress(system, address, arb_type, value, timeout_ns)); } -Result SignalToAddress64(Core::System& system, VAddr address, SignalType signal_type, s32 value, +Result SignalToAddress64(Core::System& system, u64 address, SignalType signal_type, s32 value, s32 count) { R_RETURN(SignalToAddress(system, address, signal_type, value, count)); } diff --git a/src/core/hle/kernel/svc/svc_cache.cpp b/src/core/hle/kernel/svc/svc_cache.cpp index 1779832d3..082942dab 100644 --- a/src/core/hle/kernel/svc/svc_cache.cpp +++ b/src/core/hle/kernel/svc/svc_cache.cpp @@ -46,7 +46,7 @@ Result FlushProcessDataCache(Core::System& system, Handle process_handle, u64 ad R_UNLESS(page_table.Contains(address, size), ResultInvalidCurrentMemory); // Perform the operation. - R_RETURN(system.Memory().FlushDataCache(*process, address, size)); + R_RETURN(GetCurrentMemory(system.Kernel()).FlushDataCache(address, size)); } void FlushEntireDataCache64(Core::System& system) { diff --git a/src/core/hle/kernel/svc/svc_code_memory.cpp b/src/core/hle/kernel/svc/svc_code_memory.cpp index 43feab986..687baff82 100644 --- a/src/core/hle/kernel/svc/svc_code_memory.cpp +++ b/src/core/hle/kernel/svc/svc_code_memory.cpp @@ -29,7 +29,7 @@ constexpr bool IsValidUnmapFromOwnerCodeMemoryPermission(MemoryPermission perm) } // namespace -Result CreateCodeMemory(Core::System& system, Handle* out, VAddr address, uint64_t size) { +Result CreateCodeMemory(Core::System& system, Handle* out, u64 address, uint64_t size) { LOG_TRACE(Kernel_SVC, "called, address=0x{:X}, size=0x{:X}", address, size); // Get kernel instance. @@ -64,7 +64,7 @@ Result CreateCodeMemory(Core::System& system, Handle* out, VAddr address, uint64 } Result ControlCodeMemory(Core::System& system, Handle code_memory_handle, - CodeMemoryOperation operation, VAddr address, uint64_t size, + CodeMemoryOperation operation, u64 address, uint64_t size, MemoryPermission perm) { LOG_TRACE(Kernel_SVC, diff --git a/src/core/hle/kernel/svc/svc_condition_variable.cpp b/src/core/hle/kernel/svc/svc_condition_variable.cpp index 648ed23d0..ca120d67e 100644 --- a/src/core/hle/kernel/svc/svc_condition_variable.cpp +++ b/src/core/hle/kernel/svc/svc_condition_variable.cpp @@ -11,7 +11,7 @@ namespace Kernel::Svc { /// Wait process wide key atomic -Result WaitProcessWideKeyAtomic(Core::System& system, VAddr address, VAddr cv_key, u32 tag, +Result WaitProcessWideKeyAtomic(Core::System& system, u64 address, u64 cv_key, u32 tag, s64 timeout_ns) { LOG_TRACE(Kernel_SVC, "called address={:X}, cv_key={:X}, tag=0x{:08X}, timeout_ns={}", address, cv_key, tag, timeout_ns); @@ -43,7 +43,7 @@ Result WaitProcessWideKeyAtomic(Core::System& system, VAddr address, VAddr cv_ke } /// Signal process wide key -void SignalProcessWideKey(Core::System& system, VAddr cv_key, s32 count) { +void SignalProcessWideKey(Core::System& system, u64 cv_key, s32 count) { LOG_TRACE(Kernel_SVC, "called, cv_key=0x{:X}, count=0x{:08X}", cv_key, count); // Signal the condition variable. diff --git a/src/core/hle/kernel/svc/svc_debug_string.cpp b/src/core/hle/kernel/svc/svc_debug_string.cpp index d4bf062d1..4c14ce668 100644 --- a/src/core/hle/kernel/svc/svc_debug_string.cpp +++ b/src/core/hle/kernel/svc/svc_debug_string.cpp @@ -2,17 +2,18 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "core/core.h" +#include "core/hle/kernel/k_thread.h" #include "core/hle/kernel/svc.h" #include "core/memory.h" namespace Kernel::Svc { /// Used to output a message on a debug hardware unit - does nothing on a retail unit -Result OutputDebugString(Core::System& system, VAddr address, u64 len) { +Result OutputDebugString(Core::System& system, u64 address, u64 len) { R_SUCCEED_IF(len == 0); std::string str(len, '\0'); - system.Memory().ReadBlock(address, str.data(), str.size()); + GetCurrentMemory(system.Kernel()).ReadBlock(address, str.data(), str.size()); LOG_DEBUG(Debug_Emulated, "{}", str); R_SUCCEED(); diff --git a/src/core/hle/kernel/svc/svc_exception.cpp b/src/core/hle/kernel/svc/svc_exception.cpp index c2782908d..580cf2f75 100644 --- a/src/core/hle/kernel/svc/svc_exception.cpp +++ b/src/core/hle/kernel/svc/svc_exception.cpp @@ -20,12 +20,12 @@ void Break(Core::System& system, BreakReason reason, u64 info1, u64 info2) { bool has_dumped_buffer{}; std::vector<u8> debug_buffer; - const auto handle_debug_buffer = [&](VAddr addr, u64 sz) { + const auto handle_debug_buffer = [&](u64 addr, u64 sz) { if (sz == 0 || addr == 0 || has_dumped_buffer) { return; } - auto& memory = system.Memory(); + auto& memory = GetCurrentMemory(system.Kernel()); // This typically is an error code so we're going to assume this is the case if (sz == sizeof(u32)) { diff --git a/src/core/hle/kernel/svc/svc_info.cpp b/src/core/hle/kernel/svc/svc_info.cpp index 04b6d6964..2b2c878b5 100644 --- a/src/core/hle/kernel/svc/svc_info.cpp +++ b/src/core/hle/kernel/svc/svc_info.cpp @@ -54,7 +54,7 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle R_SUCCEED(); case InfoType::AliasRegionAddress: - *result = process->PageTable().GetAliasRegionStart(); + *result = GetInteger(process->PageTable().GetAliasRegionStart()); R_SUCCEED(); case InfoType::AliasRegionSize: @@ -62,7 +62,7 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle R_SUCCEED(); case InfoType::HeapRegionAddress: - *result = process->PageTable().GetHeapRegionStart(); + *result = GetInteger(process->PageTable().GetHeapRegionStart()); R_SUCCEED(); case InfoType::HeapRegionSize: @@ -70,7 +70,7 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle R_SUCCEED(); case InfoType::AslrRegionAddress: - *result = process->PageTable().GetAliasCodeRegionStart(); + *result = GetInteger(process->PageTable().GetAliasCodeRegionStart()); R_SUCCEED(); case InfoType::AslrRegionSize: @@ -78,7 +78,7 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle R_SUCCEED(); case InfoType::StackRegionAddress: - *result = process->PageTable().GetStackRegionStart(); + *result = GetInteger(process->PageTable().GetStackRegionStart()); R_SUCCEED(); case InfoType::StackRegionSize: @@ -107,7 +107,7 @@ Result GetInfo(Core::System& system, u64* result, InfoType info_id_type, Handle R_SUCCEED(); case InfoType::UserExceptionContextAddress: - *result = process->GetProcessLocalRegionAddress(); + *result = GetInteger(process->GetProcessLocalRegionAddress()); R_SUCCEED(); case InfoType::TotalNonSystemMemorySize: diff --git a/src/core/hle/kernel/svc/svc_ipc.cpp b/src/core/hle/kernel/svc/svc_ipc.cpp index 46fd0f2ea..ea03068aa 100644 --- a/src/core/hle/kernel/svc/svc_ipc.cpp +++ b/src/core/hle/kernel/svc/svc_ipc.cpp @@ -17,7 +17,7 @@ Result SendSyncRequest(Core::System& system, Handle handle) { GetCurrentProcess(system.Kernel()).GetHandleTable().GetObject<KClientSession>(handle); R_UNLESS(session.IsNotNull(), ResultInvalidHandle); - LOG_TRACE(Kernel_SVC, "called handle=0x{:08X}({})", handle, session->GetName()); + LOG_TRACE(Kernel_SVC, "called handle=0x{:08X}", handle); R_RETURN(session->SendSyncRequest()); } @@ -41,12 +41,12 @@ Result ReplyAndReceive(Core::System& system, s32* out_index, uint64_t handles_ad auto& handle_table = GetCurrentProcess(kernel).GetHandleTable(); R_UNLESS(0 <= num_handles && num_handles <= ArgumentHandleCountMax, ResultOutOfRange); - R_UNLESS(system.Memory().IsValidVirtualAddressRange( + R_UNLESS(GetCurrentMemory(kernel).IsValidVirtualAddressRange( handles_addr, static_cast<u64>(sizeof(Handle) * num_handles)), ResultInvalidPointer); std::vector<Handle> handles(num_handles); - system.Memory().ReadBlock(handles_addr, handles.data(), sizeof(Handle) * num_handles); + GetCurrentMemory(kernel).ReadBlock(handles_addr, handles.data(), sizeof(Handle) * num_handles); // Convert handle list to object table. std::vector<KSynchronizationObject*> objs(num_handles); diff --git a/src/core/hle/kernel/svc/svc_lock.cpp b/src/core/hle/kernel/svc/svc_lock.cpp index 3681279d6..1d7bc4246 100644 --- a/src/core/hle/kernel/svc/svc_lock.cpp +++ b/src/core/hle/kernel/svc/svc_lock.cpp @@ -9,7 +9,7 @@ namespace Kernel::Svc { /// Attempts to locks a mutex -Result ArbitrateLock(Core::System& system, Handle thread_handle, VAddr address, u32 tag) { +Result ArbitrateLock(Core::System& system, Handle thread_handle, u64 address, u32 tag) { LOG_TRACE(Kernel_SVC, "called thread_handle=0x{:08X}, address=0x{:X}, tag=0x{:08X}", thread_handle, address, tag); @@ -21,7 +21,7 @@ Result ArbitrateLock(Core::System& system, Handle thread_handle, VAddr address, } /// Unlock a mutex -Result ArbitrateUnlock(Core::System& system, VAddr address) { +Result ArbitrateUnlock(Core::System& system, u64 address) { LOG_TRACE(Kernel_SVC, "called address=0x{:X}", address); // Validate the input address. diff --git a/src/core/hle/kernel/svc/svc_memory.cpp b/src/core/hle/kernel/svc/svc_memory.cpp index 4db25a3b7..5dcb7f045 100644 --- a/src/core/hle/kernel/svc/svc_memory.cpp +++ b/src/core/hle/kernel/svc/svc_memory.cpp @@ -22,15 +22,14 @@ constexpr bool IsValidSetMemoryPermission(MemoryPermission perm) { // Checks if address + size is greater than the given address // This can return false if the size causes an overflow of a 64-bit type // or if the given size is zero. -constexpr bool IsValidAddressRange(VAddr address, u64 size) { +constexpr bool IsValidAddressRange(u64 address, u64 size) { return address + size > address; } // Helper function that performs the common sanity checks for svcMapMemory // and svcUnmapMemory. This is doable, as both functions perform their sanitizing // in the same order. -Result MapUnmapMemorySanityChecks(const KPageTable& manager, VAddr dst_addr, VAddr src_addr, - u64 size) { +Result MapUnmapMemorySanityChecks(const KPageTable& manager, u64 dst_addr, u64 src_addr, u64 size) { if (!Common::Is4KBAligned(dst_addr)) { LOG_ERROR(Kernel_SVC, "Destination address is not aligned to 4KB, 0x{:016X}", dst_addr); R_THROW(ResultInvalidAddress); @@ -99,7 +98,7 @@ Result MapUnmapMemorySanityChecks(const KPageTable& manager, VAddr dst_addr, VAd } // namespace -Result SetMemoryPermission(Core::System& system, VAddr address, u64 size, MemoryPermission perm) { +Result SetMemoryPermission(Core::System& system, u64 address, u64 size, MemoryPermission perm) { LOG_DEBUG(Kernel_SVC, "called, address=0x{:016X}, size=0x{:X}, perm=0x{:08X", address, size, perm); @@ -120,7 +119,7 @@ Result SetMemoryPermission(Core::System& system, VAddr address, u64 size, Memory R_RETURN(page_table.SetMemoryPermission(address, size, perm)); } -Result SetMemoryAttribute(Core::System& system, VAddr address, u64 size, u32 mask, u32 attr) { +Result SetMemoryAttribute(Core::System& system, u64 address, u64 size, u32 mask, u32 attr) { LOG_DEBUG(Kernel_SVC, "called, address=0x{:016X}, size=0x{:X}, mask=0x{:08X}, attribute=0x{:08X}", address, size, mask, attr); @@ -145,7 +144,7 @@ Result SetMemoryAttribute(Core::System& system, VAddr address, u64 size, u32 mas } /// Maps a memory range into a different range. -Result MapMemory(Core::System& system, VAddr dst_addr, VAddr src_addr, u64 size) { +Result MapMemory(Core::System& system, u64 dst_addr, u64 src_addr, u64 size) { LOG_TRACE(Kernel_SVC, "called, dst_addr=0x{:X}, src_addr=0x{:X}, size=0x{:X}", dst_addr, src_addr, size); @@ -160,7 +159,7 @@ Result MapMemory(Core::System& system, VAddr dst_addr, VAddr src_addr, u64 size) } /// Unmaps a region that was previously mapped with svcMapMemory -Result UnmapMemory(Core::System& system, VAddr dst_addr, VAddr src_addr, u64 size) { +Result UnmapMemory(Core::System& system, u64 dst_addr, u64 src_addr, u64 size) { LOG_TRACE(Kernel_SVC, "called, dst_addr=0x{:X}, src_addr=0x{:X}, size=0x{:X}", dst_addr, src_addr, size); diff --git a/src/core/hle/kernel/svc/svc_physical_memory.cpp b/src/core/hle/kernel/svc/svc_physical_memory.cpp index 63196e1ed..c2fbfb59a 100644 --- a/src/core/hle/kernel/svc/svc_physical_memory.cpp +++ b/src/core/hle/kernel/svc/svc_physical_memory.cpp @@ -8,7 +8,7 @@ namespace Kernel::Svc { /// Set the process heap to a given Size. It can both extend and shrink the heap. -Result SetHeapSize(Core::System& system, VAddr* out_address, u64 size) { +Result SetHeapSize(Core::System& system, u64* out_address, u64 size) { LOG_TRACE(Kernel_SVC, "called, heap_size=0x{:X}", size); // Validate size. @@ -20,7 +20,7 @@ Result SetHeapSize(Core::System& system, VAddr* out_address, u64 size) { } /// Maps memory at a desired address -Result MapPhysicalMemory(Core::System& system, VAddr addr, u64 size) { +Result MapPhysicalMemory(Core::System& system, u64 addr, u64 size) { LOG_DEBUG(Kernel_SVC, "called, addr=0x{:016X}, size=0x{:X}", addr, size); if (!Common::Is4KBAligned(addr)) { @@ -69,7 +69,7 @@ Result MapPhysicalMemory(Core::System& system, VAddr addr, u64 size) { } /// Unmaps memory previously mapped via MapPhysicalMemory -Result UnmapPhysicalMemory(Core::System& system, VAddr addr, u64 size) { +Result UnmapPhysicalMemory(Core::System& system, u64 addr, u64 size) { LOG_DEBUG(Kernel_SVC, "called, addr=0x{:016X}, size=0x{:X}", addr, size); if (!Common::Is4KBAligned(addr)) { diff --git a/src/core/hle/kernel/svc/svc_port.cpp b/src/core/hle/kernel/svc/svc_port.cpp index 0b5556bc4..abba757c7 100644 --- a/src/core/hle/kernel/svc/svc_port.cpp +++ b/src/core/hle/kernel/svc/svc_port.cpp @@ -12,9 +12,10 @@ namespace Kernel::Svc { -Result ConnectToNamedPort(Core::System& system, Handle* out, VAddr user_name) { +Result ConnectToNamedPort(Core::System& system, Handle* out, u64 user_name) { // Copy the provided name from user memory to kernel memory. - auto string_name = system.Memory().ReadCString(user_name, KObjectName::NameLengthMax); + auto string_name = + GetCurrentMemory(system.Kernel()).ReadCString(user_name, KObjectName::NameLengthMax); std::array<char, KObjectName::NameLengthMax> name{}; std::strncpy(name.data(), string_name.c_str(), KObjectName::NameLengthMax - 1); @@ -62,7 +63,8 @@ Result ConnectToPort(Core::System& system, Handle* out_handle, Handle port) { Result ManageNamedPort(Core::System& system, Handle* out_server_handle, uint64_t user_name, int32_t max_sessions) { // Copy the provided name from user memory to kernel memory. - auto string_name = system.Memory().ReadCString(user_name, KObjectName::NameLengthMax); + auto string_name = + GetCurrentMemory(system.Kernel()).ReadCString(user_name, KObjectName::NameLengthMax); // Copy the provided name from user memory to kernel memory. std::array<char, KObjectName::NameLengthMax> name{}; diff --git a/src/core/hle/kernel/svc/svc_process.cpp b/src/core/hle/kernel/svc/svc_process.cpp index b538c37e7..619ed16a3 100644 --- a/src/core/hle/kernel/svc/svc_process.cpp +++ b/src/core/hle/kernel/svc/svc_process.cpp @@ -50,7 +50,7 @@ Result GetProcessId(Core::System& system, u64* out_process_id, Handle handle) { R_SUCCEED(); } -Result GetProcessList(Core::System& system, s32* out_num_processes, VAddr out_process_ids, +Result GetProcessList(Core::System& system, s32* out_num_processes, u64 out_process_ids, int32_t out_process_ids_size) { LOG_DEBUG(Kernel_SVC, "called. out_process_ids=0x{:016X}, out_process_ids_size={}", out_process_ids, out_process_ids_size); @@ -73,7 +73,7 @@ Result GetProcessList(Core::System& system, s32* out_num_processes, VAddr out_pr R_THROW(ResultInvalidCurrentMemory); } - auto& memory = system.Memory(); + auto& memory = GetCurrentMemory(kernel); const auto& process_list = kernel.GetProcessList(); const auto num_processes = process_list.size(); const auto copy_amount = diff --git a/src/core/hle/kernel/svc/svc_process_memory.cpp b/src/core/hle/kernel/svc/svc_process_memory.cpp index f9210ca1e..aee0f2f36 100644 --- a/src/core/hle/kernel/svc/svc_process_memory.cpp +++ b/src/core/hle/kernel/svc/svc_process_memory.cpp @@ -8,7 +8,7 @@ namespace Kernel::Svc { namespace { -constexpr bool IsValidAddressRange(VAddr address, u64 size) { +constexpr bool IsValidAddressRange(u64 address, u64 size) { return address + size > address; } @@ -26,7 +26,7 @@ constexpr bool IsValidProcessMemoryPermission(Svc::MemoryPermission perm) { } // namespace -Result SetProcessMemoryPermission(Core::System& system, Handle process_handle, VAddr address, +Result SetProcessMemoryPermission(Core::System& system, Handle process_handle, u64 address, u64 size, Svc::MemoryPermission perm) { LOG_TRACE(Kernel_SVC, "called, process_handle=0x{:X}, addr=0x{:X}, size=0x{:X}, permissions=0x{:08X}", @@ -56,8 +56,8 @@ Result SetProcessMemoryPermission(Core::System& system, Handle process_handle, V R_RETURN(page_table.SetProcessMemoryPermission(address, size, perm)); } -Result MapProcessMemory(Core::System& system, VAddr dst_address, Handle process_handle, - VAddr src_address, u64 size) { +Result MapProcessMemory(Core::System& system, u64 dst_address, Handle process_handle, + u64 src_address, u64 size) { LOG_TRACE(Kernel_SVC, "called, dst_address=0x{:X}, process_handle=0x{:X}, src_address=0x{:X}, size=0x{:X}", dst_address, process_handle, src_address, size); @@ -97,8 +97,8 @@ Result MapProcessMemory(Core::System& system, VAddr dst_address, Handle process_ KMemoryPermission::UserReadWrite)); } -Result UnmapProcessMemory(Core::System& system, VAddr dst_address, Handle process_handle, - VAddr src_address, u64 size) { +Result UnmapProcessMemory(Core::System& system, u64 dst_address, Handle process_handle, + u64 src_address, u64 size) { LOG_TRACE(Kernel_SVC, "called, dst_address=0x{:X}, process_handle=0x{:X}, src_address=0x{:X}, size=0x{:X}", dst_address, process_handle, src_address, size); diff --git a/src/core/hle/kernel/svc/svc_query_memory.cpp b/src/core/hle/kernel/svc/svc_query_memory.cpp index 457ebf950..4d9fcd25f 100644 --- a/src/core/hle/kernel/svc/svc_query_memory.cpp +++ b/src/core/hle/kernel/svc/svc_query_memory.cpp @@ -8,7 +8,7 @@ namespace Kernel::Svc { Result QueryMemory(Core::System& system, uint64_t out_memory_info, PageInfo* out_page_info, - VAddr query_address) { + u64 query_address) { LOG_TRACE(Kernel_SVC, "called, out_memory_info=0x{:016X}, " "query_address=0x{:016X}", @@ -30,10 +30,10 @@ Result QueryProcessMemory(Core::System& system, uint64_t out_memory_info, PageIn R_THROW(ResultInvalidHandle); } - auto& memory{system.Memory()}; + auto& current_memory{GetCurrentMemory(system.Kernel())}; const auto memory_info{process->PageTable().QueryInfo(address).GetSvcMemoryInfo()}; - memory.WriteBlock(out_memory_info, std::addressof(memory_info), sizeof(memory_info)); + current_memory.WriteBlock(out_memory_info, std::addressof(memory_info), sizeof(memory_info)); //! This is supposed to be part of the QueryInfo call. *out_page_info = {}; diff --git a/src/core/hle/kernel/svc/svc_shared_memory.cpp b/src/core/hle/kernel/svc/svc_shared_memory.cpp index 40d878f17..a698596aa 100644 --- a/src/core/hle/kernel/svc/svc_shared_memory.cpp +++ b/src/core/hle/kernel/svc/svc_shared_memory.cpp @@ -26,7 +26,7 @@ constexpr bool IsValidSharedMemoryPermission(MemoryPermission perm) { } // namespace -Result MapSharedMemory(Core::System& system, Handle shmem_handle, VAddr address, u64 size, +Result MapSharedMemory(Core::System& system, Handle shmem_handle, u64 address, u64 size, Svc::MemoryPermission map_perm) { LOG_TRACE(Kernel_SVC, "called, shared_memory_handle=0x{:X}, addr=0x{:X}, size=0x{:X}, permissions=0x{:08X}", @@ -64,7 +64,7 @@ Result MapSharedMemory(Core::System& system, Handle shmem_handle, VAddr address, R_RETURN(shmem->Map(process, address, size, map_perm)); } -Result UnmapSharedMemory(Core::System& system, Handle shmem_handle, VAddr address, u64 size) { +Result UnmapSharedMemory(Core::System& system, Handle shmem_handle, u64 address, u64 size) { // Validate the address/size. R_UNLESS(Common::IsAligned(address, PageSize), ResultInvalidAddress); R_UNLESS(Common::IsAligned(size, PageSize), ResultInvalidSize); diff --git a/src/core/hle/kernel/svc/svc_synchronization.cpp b/src/core/hle/kernel/svc/svc_synchronization.cpp index 660b45c23..04d65f0bd 100644 --- a/src/core/hle/kernel/svc/svc_synchronization.cpp +++ b/src/core/hle/kernel/svc/svc_synchronization.cpp @@ -80,7 +80,7 @@ static Result WaitSynchronization(Core::System& system, int32_t* out_index, cons } /// Wait for the given handles to synchronize, timeout after the specified nanoseconds -Result WaitSynchronization(Core::System& system, int32_t* out_index, VAddr user_handles, +Result WaitSynchronization(Core::System& system, int32_t* out_index, u64 user_handles, int32_t num_handles, int64_t timeout_ns) { LOG_TRACE(Kernel_SVC, "called user_handles={:#x}, num_handles={}, timeout_ns={}", user_handles, num_handles, timeout_ns); @@ -90,7 +90,8 @@ Result WaitSynchronization(Core::System& system, int32_t* out_index, VAddr user_ std::vector<Handle> handles(num_handles); if (num_handles > 0) { - system.Memory().ReadBlock(user_handles, handles.data(), num_handles * sizeof(Handle)); + GetCurrentMemory(system.Kernel()) + .ReadBlock(user_handles, handles.data(), num_handles * sizeof(Handle)); } R_RETURN(WaitSynchronization(system, out_index, handles.data(), num_handles, timeout_ns)); diff --git a/src/core/hle/kernel/svc/svc_thread.cpp b/src/core/hle/kernel/svc/svc_thread.cpp index 50991fb62..37b54079c 100644 --- a/src/core/hle/kernel/svc/svc_thread.cpp +++ b/src/core/hle/kernel/svc/svc_thread.cpp @@ -19,8 +19,8 @@ constexpr bool IsValidVirtualCoreId(int32_t core_id) { } // Anonymous namespace /// Creates a new thread -Result CreateThread(Core::System& system, Handle* out_handle, VAddr entry_point, u64 arg, - VAddr stack_bottom, s32 priority, s32 core_id) { +Result CreateThread(Core::System& system, Handle* out_handle, u64 entry_point, u64 arg, + u64 stack_bottom, s32 priority, s32 core_id) { LOG_DEBUG(Kernel_SVC, "called entry_point=0x{:08X}, arg=0x{:08X}, stack_bottom=0x{:08X}, " "priority=0x{:08X}, core_id=0x{:08X}", @@ -129,7 +129,7 @@ void SleepThread(Core::System& system, s64 nanoseconds) { } /// Gets the thread context -Result GetThreadContext3(Core::System& system, VAddr out_context, Handle thread_handle) { +Result GetThreadContext3(Core::System& system, u64 out_context, Handle thread_handle) { LOG_DEBUG(Kernel_SVC, "called, out_context=0x{:08X}, thread_handle=0x{:X}", out_context, thread_handle); @@ -178,7 +178,7 @@ Result GetThreadContext3(Core::System& system, VAddr out_context, Handle thread_ R_TRY(thread->GetThreadContext3(context)); // Copy the thread context to user space. - system.Memory().WriteBlock(out_context, context.data(), context.size()); + GetCurrentMemory(kernel).WriteBlock(out_context, context.data(), context.size()); R_SUCCEED(); } @@ -217,7 +217,7 @@ Result SetThreadPriority(Core::System& system, Handle thread_handle, s32 priorit R_SUCCEED(); } -Result GetThreadList(Core::System& system, s32* out_num_threads, VAddr out_thread_ids, +Result GetThreadList(Core::System& system, s32* out_num_threads, u64 out_thread_ids, s32 out_thread_ids_size, Handle debug_handle) { // TODO: Handle this case when debug events are supported. UNIMPLEMENTED_IF(debug_handle != InvalidHandle); @@ -242,7 +242,7 @@ Result GetThreadList(Core::System& system, s32* out_num_threads, VAddr out_threa R_THROW(ResultInvalidCurrentMemory); } - auto& memory = system.Memory(); + auto& memory = GetCurrentMemory(system.Kernel()); const auto& thread_list = current_process->GetThreadList(); const auto num_threads = thread_list.size(); const auto copy_amount = std::min(static_cast<std::size_t>(out_thread_ids_size), num_threads); diff --git a/src/core/hle/kernel/svc/svc_transfer_memory.cpp b/src/core/hle/kernel/svc/svc_transfer_memory.cpp index 394f06728..82d469a37 100644 --- a/src/core/hle/kernel/svc/svc_transfer_memory.cpp +++ b/src/core/hle/kernel/svc/svc_transfer_memory.cpp @@ -25,7 +25,7 @@ constexpr bool IsValidTransferMemoryPermission(MemoryPermission perm) { } // Anonymous namespace /// Creates a TransferMemory object -Result CreateTransferMemory(Core::System& system, Handle* out, VAddr address, u64 size, +Result CreateTransferMemory(Core::System& system, Handle* out, u64 address, u64 size, MemoryPermission map_perm) { auto& kernel = system.Kernel(); diff --git a/src/core/hle/kernel/svc_types.h b/src/core/hle/kernel/svc_types.h index 39355d9c4..7f380ca4f 100644 --- a/src/core/hle/kernel/svc_types.h +++ b/src/core/hle/kernel/svc_types.h @@ -253,7 +253,7 @@ struct LastThreadContext { }; struct PhysicalMemoryInfo { - PAddr physical_address; + u64 physical_address; u64 virtual_address; u64 size; }; @@ -359,7 +359,7 @@ struct LastThreadContext { }; struct PhysicalMemoryInfo { - PAddr physical_address; + u64 physical_address; u32 virtual_address; u32 size; }; diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index deeca925d..a17c46121 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -945,7 +945,7 @@ public: {0, &ILibraryAppletAccessor::GetAppletStateChangedEvent, "GetAppletStateChangedEvent"}, {1, &ILibraryAppletAccessor::IsCompleted, "IsCompleted"}, {10, &ILibraryAppletAccessor::Start, "Start"}, - {20, nullptr, "RequestExit"}, + {20, &ILibraryAppletAccessor::RequestExit, "RequestExit"}, {25, nullptr, "Terminate"}, {30, &ILibraryAppletAccessor::GetResult, "GetResult"}, {50, nullptr, "SetOutOfFocusApplicationSuspendingEnabled"}, @@ -1010,6 +1010,15 @@ private: rb.Push(ResultSuccess); } + void RequestExit(HLERequestContext& ctx) { + LOG_DEBUG(Service_AM, "called"); + + ASSERT(applet != nullptr); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(applet->RequestExit()); + } + void PushInData(HLERequestContext& ctx) { LOG_DEBUG(Service_AM, "called"); @@ -1265,7 +1274,8 @@ void ILibraryAppletCreator::CreateTransferMemoryStorage(HLERequestContext& ctx) } std::vector<u8> memory(transfer_mem->GetSize()); - system.Memory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), memory.size()); + system.ApplicationMemory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), + memory.size()); IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(ResultSuccess); @@ -1298,7 +1308,8 @@ void ILibraryAppletCreator::CreateHandleStorage(HLERequestContext& ctx) { } std::vector<u8> memory(transfer_mem->GetSize()); - system.Memory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), memory.size()); + system.ApplicationMemory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), + memory.size()); IPC::ResponseBuilder rb{ctx, 2, 0, 1}; rb.Push(ResultSuccess); diff --git a/src/core/hle/service/am/applets/applet_cabinet.cpp b/src/core/hle/service/am/applets/applet_cabinet.cpp index 162687b29..93c9f2a55 100644 --- a/src/core/hle/service/am/applets/applet_cabinet.cpp +++ b/src/core/hle/service/am/applets/applet_cabinet.cpp @@ -174,4 +174,9 @@ void Cabinet::Cancel() { broker.SignalStateChanged(); } +Result Cabinet::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + } // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/applet_cabinet.h b/src/core/hle/service/am/applets/applet_cabinet.h index 84197a807..edd295a27 100644 --- a/src/core/hle/service/am/applets/applet_cabinet.h +++ b/src/core/hle/service/am/applets/applet_cabinet.h @@ -89,6 +89,7 @@ public: void Execute() override; void DisplayCompleted(bool apply_changes, std::string_view amiibo_name); void Cancel(); + Result RequestExit() override; private: const Core::Frontend::CabinetApplet& frontend; diff --git a/src/core/hle/service/am/applets/applet_controller.cpp b/src/core/hle/service/am/applets/applet_controller.cpp index 58484519b..9840d2547 100644 --- a/src/core/hle/service/am/applets/applet_controller.cpp +++ b/src/core/hle/service/am/applets/applet_controller.cpp @@ -224,7 +224,8 @@ void Controller::Execute() { parameters.allow_dual_joycons, parameters.allow_left_joycon, parameters.allow_right_joycon); - frontend.ReconfigureControllers([this] { ConfigurationComplete(); }, parameters); + frontend.ReconfigureControllers( + [this](bool is_success) { ConfigurationComplete(is_success); }, parameters); break; } case ControllerSupportMode::ShowControllerStrapGuide: @@ -232,16 +233,16 @@ void Controller::Execute() { case ControllerSupportMode::ShowControllerKeyRemappingForSystem: UNIMPLEMENTED_MSG("ControllerSupportMode={} is not implemented", controller_private_arg.mode); - ConfigurationComplete(); + ConfigurationComplete(true); break; default: { - ConfigurationComplete(); + ConfigurationComplete(true); break; } } } -void Controller::ConfigurationComplete() { +void Controller::ConfigurationComplete(bool is_success) { ControllerSupportResultInfo result_info{}; // If enable_single_mode is enabled, player_count is 1 regardless of any other parameters. @@ -250,7 +251,8 @@ void Controller::ConfigurationComplete() { result_info.selected_id = static_cast<u32>(system.HIDCore().GetFirstNpadId()); - result_info.result = 0; + result_info.result = + is_success ? ControllerSupportResult::Success : ControllerSupportResult::Cancel; LOG_DEBUG(Service_HID, "Result Info: player_count={}, selected_id={}, result={}", result_info.player_count, result_info.selected_id, result_info.result); @@ -262,4 +264,9 @@ void Controller::ConfigurationComplete() { broker.SignalStateChanged(); } +Result Controller::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + } // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/applet_controller.h b/src/core/hle/service/am/applets/applet_controller.h index 1f9adec65..f6c64f633 100644 --- a/src/core/hle/service/am/applets/applet_controller.h +++ b/src/core/hle/service/am/applets/applet_controller.h @@ -48,6 +48,11 @@ enum class ControllerSupportCaller : u8 { MaxControllerSupportCaller, }; +enum class ControllerSupportResult : u32 { + Success = 0, + Cancel = 2, +}; + struct ControllerSupportArgPrivate { u32 arg_private_size{}; u32 arg_size{}; @@ -112,7 +117,7 @@ struct ControllerSupportResultInfo { s8 player_count{}; INSERT_PADDING_BYTES(3); u32 selected_id{}; - u32 result{}; + ControllerSupportResult result{}; }; static_assert(sizeof(ControllerSupportResultInfo) == 0xC, "ControllerSupportResultInfo has incorrect size."); @@ -129,8 +134,9 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; - void ConfigurationComplete(); + void ConfigurationComplete(bool is_success); private: const Core::Frontend::ControllerApplet& frontend; diff --git a/src/core/hle/service/am/applets/applet_error.cpp b/src/core/hle/service/am/applets/applet_error.cpp index b013896b4..b46ea840c 100644 --- a/src/core/hle/service/am/applets/applet_error.cpp +++ b/src/core/hle/service/am/applets/applet_error.cpp @@ -209,4 +209,9 @@ void Error::DisplayCompleted() { broker.SignalStateChanged(); } +Result Error::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + } // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/applet_error.h b/src/core/hle/service/am/applets/applet_error.h index d78d6f1d1..d822a32bb 100644 --- a/src/core/hle/service/am/applets/applet_error.h +++ b/src/core/hle/service/am/applets/applet_error.h @@ -34,6 +34,7 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; void DisplayCompleted(); diff --git a/src/core/hle/service/am/applets/applet_general_backend.cpp b/src/core/hle/service/am/applets/applet_general_backend.cpp index 1eefa85e3..8b352020e 100644 --- a/src/core/hle/service/am/applets/applet_general_backend.cpp +++ b/src/core/hle/service/am/applets/applet_general_backend.cpp @@ -150,6 +150,11 @@ void Auth::AuthFinished(bool is_successful) { broker.SignalStateChanged(); } +Result Auth::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + PhotoViewer::PhotoViewer(Core::System& system_, LibraryAppletMode applet_mode_, const Core::Frontend::PhotoViewerApplet& frontend_) : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} @@ -202,6 +207,11 @@ void PhotoViewer::ViewFinished() { broker.SignalStateChanged(); } +Result PhotoViewer::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + StubApplet::StubApplet(Core::System& system_, AppletId id_, LibraryAppletMode applet_mode_) : Applet{system_, applet_mode_}, id{id_}, system{system_} {} @@ -250,4 +260,9 @@ void StubApplet::Execute() { broker.SignalStateChanged(); } +Result StubApplet::RequestExit() { + // Nothing to do. + R_SUCCEED(); +} + } // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/applet_general_backend.h b/src/core/hle/service/am/applets/applet_general_backend.h index a9f2535a2..34ecaebb9 100644 --- a/src/core/hle/service/am/applets/applet_general_backend.h +++ b/src/core/hle/service/am/applets/applet_general_backend.h @@ -28,6 +28,7 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; void AuthFinished(bool is_successful = true); @@ -59,6 +60,7 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; void ViewFinished(); @@ -80,6 +82,7 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; private: AppletId id; diff --git a/src/core/hle/service/am/applets/applet_mii_edit.cpp b/src/core/hle/service/am/applets/applet_mii_edit.cpp index ae80ef506..d1f652c09 100644 --- a/src/core/hle/service/am/applets/applet_mii_edit.cpp +++ b/src/core/hle/service/am/applets/applet_mii_edit.cpp @@ -135,4 +135,9 @@ void MiiEdit::MiiEditOutputForCharInfoEditing(MiiEditResult result, broker.SignalStateChanged(); } +Result MiiEdit::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + } // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/applet_mii_edit.h b/src/core/hle/service/am/applets/applet_mii_edit.h index d18dd3cf5..3f46fae1b 100644 --- a/src/core/hle/service/am/applets/applet_mii_edit.h +++ b/src/core/hle/service/am/applets/applet_mii_edit.h @@ -25,6 +25,7 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; void MiiEditOutput(MiiEditResult result, s32 index); diff --git a/src/core/hle/service/am/applets/applet_profile_select.cpp b/src/core/hle/service/am/applets/applet_profile_select.cpp index 1d69f5447..89cb323e9 100644 --- a/src/core/hle/service/am/applets/applet_profile_select.cpp +++ b/src/core/hle/service/am/applets/applet_profile_select.cpp @@ -25,13 +25,29 @@ void ProfileSelect::Initialize() { final_data.clear(); Applet::Initialize(); + profile_select_version = ProfileSelectAppletVersion{common_args.library_version}; const auto user_config_storage = broker.PopNormalDataToApplet(); ASSERT(user_config_storage != nullptr); const auto& user_config = user_config_storage->GetData(); - ASSERT(user_config.size() >= sizeof(UserSelectionConfig)); - std::memcpy(&config, user_config.data(), sizeof(UserSelectionConfig)); + LOG_INFO(Service_AM, "Initializing Profile Select Applet with version={}", + profile_select_version); + + switch (profile_select_version) { + case ProfileSelectAppletVersion::Version1: + ASSERT(user_config.size() == sizeof(UiSettingsV1)); + std::memcpy(&config_old, user_config.data(), sizeof(UiSettingsV1)); + break; + case ProfileSelectAppletVersion::Version2: + case ProfileSelectAppletVersion::Version3: + ASSERT(user_config.size() == sizeof(UiSettings)); + std::memcpy(&config, user_config.data(), sizeof(UiSettings)); + break; + default: + UNIMPLEMENTED_MSG("Unknown profile_select_version = {}", profile_select_version); + break; + } } bool ProfileSelect::TransactionComplete() const { @@ -52,11 +68,37 @@ void ProfileSelect::Execute() { return; } - frontend.SelectProfile([this](std::optional<Common::UUID> uuid) { SelectionComplete(uuid); }); + Core::Frontend::ProfileSelectParameters parameters{}; + + switch (profile_select_version) { + case ProfileSelectAppletVersion::Version1: + parameters = { + .mode = config_old.mode, + .invalid_uid_list = config_old.invalid_uid_list, + .display_options = config_old.display_options, + .purpose = UserSelectionPurpose::General, + }; + break; + case ProfileSelectAppletVersion::Version2: + case ProfileSelectAppletVersion::Version3: + parameters = { + .mode = config.mode, + .invalid_uid_list = config.invalid_uid_list, + .display_options = config.display_options, + .purpose = config.purpose, + }; + break; + default: + UNIMPLEMENTED_MSG("Unknown profile_select_version = {}", profile_select_version); + break; + } + + frontend.SelectProfile([this](std::optional<Common::UUID> uuid) { SelectionComplete(uuid); }, + parameters); } void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) { - UserSelectionOutput output{}; + UiReturnArg output{}; if (uuid.has_value() && uuid->IsValid()) { output.result = 0; @@ -67,10 +109,15 @@ void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) { output.uuid_selected = Common::InvalidUUID; } - final_data = std::vector<u8>(sizeof(UserSelectionOutput)); + final_data = std::vector<u8>(sizeof(UiReturnArg)); std::memcpy(final_data.data(), &output, final_data.size()); broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(final_data))); broker.SignalStateChanged(); } +Result ProfileSelect::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + } // namespace Service::AM::Applets diff --git a/src/core/hle/service/am/applets/applet_profile_select.h b/src/core/hle/service/am/applets/applet_profile_select.h index b77f1d205..369f9250f 100644 --- a/src/core/hle/service/am/applets/applet_profile_select.h +++ b/src/core/hle/service/am/applets/applet_profile_select.h @@ -16,19 +16,100 @@ class System; namespace Service::AM::Applets { -struct UserSelectionConfig { - // TODO(DarkLordZach): RE this structure - // It seems to be flags and the like that determine the UI of the applet on the switch... from - // my research this is safe to ignore for now. - INSERT_PADDING_BYTES(0xA0); +enum class ProfileSelectAppletVersion : u32 { + Version1 = 0x1, // 1.0.0+ + Version2 = 0x10000, // 2.0.0+ + Version3 = 0x20000, // 6.0.0+ }; -static_assert(sizeof(UserSelectionConfig) == 0xA0, "UserSelectionConfig has incorrect size."); -struct UserSelectionOutput { +// This is nn::account::UiMode +enum class UiMode { + UserSelector, + UserCreator, + EnsureNetworkServiceAccountAvailable, + UserIconEditor, + UserNicknameEditor, + UserCreatorForStarter, + NintendoAccountAuthorizationRequestContext, + IntroduceExternalNetworkServiceAccount, + IntroduceExternalNetworkServiceAccountForRegistration, + NintendoAccountNnidLinker, + LicenseRequirementsForNetworkService, + LicenseRequirementsForNetworkServiceWithUserContextImpl, + UserCreatorForImmediateNaLoginTest, + UserQualificationPromoter, +}; + +// This is nn::account::UserSelectionPurpose +enum class UserSelectionPurpose { + General, + GameCardRegistration, + EShopLaunch, + EShopItemShow, + PicturePost, + NintendoAccountLinkage, + SettingsUpdate, + SaveDataDeletion, + UserMigration, + SaveDataTransfer, +}; + +// This is nn::account::NintendoAccountStartupDialogType +enum class NintendoAccountStartupDialogType { + LoginAndCreate, + Login, + Create, +}; + +// This is nn::account::UserSelectionSettingsForSystemService +struct UserSelectionSettingsForSystemService { + UserSelectionPurpose purpose; + bool enable_user_creation; + INSERT_PADDING_BYTES(0x3); +}; +static_assert(sizeof(UserSelectionSettingsForSystemService) == 0x8, + "UserSelectionSettingsForSystemService has incorrect size."); + +struct UiSettingsDisplayOptions { + bool is_network_service_account_required; + bool is_skip_enabled; + bool is_system_or_launcher; + bool is_registration_permitted; + bool show_skip_button; + bool aditional_select; + bool show_user_selector; + bool is_unqualified_user_selectable; +}; +static_assert(sizeof(UiSettingsDisplayOptions) == 0x8, + "UiSettingsDisplayOptions has incorrect size."); + +struct UiSettingsV1 { + UiMode mode; + INSERT_PADDING_BYTES(0x4); + std::array<Common::UUID, 8> invalid_uid_list; + u64 application_id; + UiSettingsDisplayOptions display_options; +}; +static_assert(sizeof(UiSettingsV1) == 0x98, "UiSettings has incorrect size."); + +// This is nn::account::UiSettings +struct UiSettings { + UiMode mode; + INSERT_PADDING_BYTES(0x4); + std::array<Common::UUID, 8> invalid_uid_list; + u64 application_id; + UiSettingsDisplayOptions display_options; + UserSelectionPurpose purpose; + INSERT_PADDING_BYTES(0x4); +}; +static_assert(sizeof(UiSettings) == 0xA0, "UiSettings has incorrect size."); + +// This is nn::account::UiReturnArg +struct UiReturnArg { u64 result; Common::UUID uuid_selected; }; -static_assert(sizeof(UserSelectionOutput) == 0x18, "UserSelectionOutput has incorrect size."); +static_assert(sizeof(UiReturnArg) == 0x18, "UiReturnArg has incorrect size."); class ProfileSelect final : public Applet { public: @@ -42,13 +123,17 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; void SelectionComplete(std::optional<Common::UUID> uuid); private: const Core::Frontend::ProfileSelectApplet& frontend; - UserSelectionConfig config; + UiSettings config; + UiSettingsV1 config_old; + ProfileSelectAppletVersion profile_select_version; + bool complete = false; Result status = ResultSuccess; std::vector<u8> final_data; diff --git a/src/core/hle/service/am/applets/applet_software_keyboard.cpp b/src/core/hle/service/am/applets/applet_software_keyboard.cpp index c18236045..4145bb84f 100644 --- a/src/core/hle/service/am/applets/applet_software_keyboard.cpp +++ b/src/core/hle/service/am/applets/applet_software_keyboard.cpp @@ -770,6 +770,11 @@ void SoftwareKeyboard::ExitKeyboard() { broker.SignalStateChanged(); } +Result SoftwareKeyboard::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + // Inline Software Keyboard Requests void SoftwareKeyboard::RequestFinalize(const std::vector<u8>& request_data) { diff --git a/src/core/hle/service/am/applets/applet_software_keyboard.h b/src/core/hle/service/am/applets/applet_software_keyboard.h index b01b31c98..2e919811b 100644 --- a/src/core/hle/service/am/applets/applet_software_keyboard.h +++ b/src/core/hle/service/am/applets/applet_software_keyboard.h @@ -31,6 +31,7 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; /** * Submits the input text to the application. diff --git a/src/core/hle/service/am/applets/applet_web_browser.cpp b/src/core/hle/service/am/applets/applet_web_browser.cpp index f061bae80..2accf7898 100644 --- a/src/core/hle/service/am/applets/applet_web_browser.cpp +++ b/src/core/hle/service/am/applets/applet_web_browser.cpp @@ -363,6 +363,11 @@ void WebBrowser::WebBrowserExit(WebExitReason exit_reason, std::string last_url) broker.SignalStateChanged(); } +Result WebBrowser::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + bool WebBrowser::InputTLVExistsInMap(WebArgInputTLVType input_tlv_type) const { return web_arg_input_tlv_map.find(input_tlv_type) != web_arg_input_tlv_map.end(); } diff --git a/src/core/hle/service/am/applets/applet_web_browser.h b/src/core/hle/service/am/applets/applet_web_browser.h index fd727fac8..99fe18659 100644 --- a/src/core/hle/service/am/applets/applet_web_browser.h +++ b/src/core/hle/service/am/applets/applet_web_browser.h @@ -35,6 +35,7 @@ public: Result GetStatus() const override; void ExecuteInteractive() override; void Execute() override; + Result RequestExit() override; void ExtractOfflineRomFS(); diff --git a/src/core/hle/service/am/applets/applets.h b/src/core/hle/service/am/applets/applets.h index a22eb62a8..12f374199 100644 --- a/src/core/hle/service/am/applets/applets.h +++ b/src/core/hle/service/am/applets/applets.h @@ -142,6 +142,7 @@ public: virtual Result GetStatus() const = 0; virtual void ExecuteInteractive() = 0; virtual void Execute() = 0; + virtual Result RequestExit() = 0; AppletDataBroker& GetBroker() { return broker; diff --git a/src/core/hle/service/hid/controllers/console_sixaxis.cpp b/src/core/hle/service/hid/controllers/console_sixaxis.cpp index 478d38590..bcb272eaf 100644 --- a/src/core/hle/service/hid/controllers/console_sixaxis.cpp +++ b/src/core/hle/service/hid/controllers/console_sixaxis.cpp @@ -60,10 +60,11 @@ void Controller_ConsoleSixAxis::OnUpdate(const Core::Timing::CoreTiming& core_ti // Update seven six axis transfer memory seven_sixaxis_lifo.WriteNextEntry(next_seven_sixaxis_state); - system.Memory().WriteBlock(transfer_memory, &seven_sixaxis_lifo, sizeof(seven_sixaxis_lifo)); + system.ApplicationMemory().WriteBlock(transfer_memory, &seven_sixaxis_lifo, + sizeof(seven_sixaxis_lifo)); } -void Controller_ConsoleSixAxis::SetTransferMemoryAddress(VAddr t_mem) { +void Controller_ConsoleSixAxis::SetTransferMemoryAddress(Common::ProcessAddress t_mem) { transfer_memory = t_mem; } diff --git a/src/core/hle/service/hid/controllers/console_sixaxis.h b/src/core/hle/service/hid/controllers/console_sixaxis.h index 8d3e4081b..7015d924c 100644 --- a/src/core/hle/service/hid/controllers/console_sixaxis.h +++ b/src/core/hle/service/hid/controllers/console_sixaxis.h @@ -5,8 +5,8 @@ #include <array> -#include "common/common_types.h" #include "common/quaternion.h" +#include "common/typed_address.h" #include "core/hle/service/hid/controllers/controller_base.h" #include "core/hle/service/hid/ring_lifo.h" @@ -34,7 +34,7 @@ public: void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; // Called on InitializeSevenSixAxisSensor - void SetTransferMemoryAddress(VAddr t_mem); + void SetTransferMemoryAddress(Common::ProcessAddress t_mem); // Called on ResetSevenSixAxisSensorTimestamp void ResetTimestamp(); @@ -66,7 +66,7 @@ private: static_assert(sizeof(seven_sixaxis_lifo) == 0xA70, "SevenSixAxisState is an invalid size"); SevenSixAxisState next_seven_sixaxis_state{}; - VAddr transfer_memory{}; + Common::ProcessAddress transfer_memory{}; ConsoleSharedMemory* shared_memory = nullptr; Core::HID::EmulatedConsole* console = nullptr; diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index ba6f04d8d..8abf71608 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp @@ -70,7 +70,6 @@ Result Controller_NPad::VerifyValidSixAxisSensorHandle( const Core::HID::SixAxisSensorHandle& device_handle) { const auto npad_id = IsNpadIdValid(static_cast<Core::HID::NpadIdType>(device_handle.npad_id)); const bool device_index = device_handle.device_index < Core::HID::DeviceIndex::MaxDeviceIndex; - const bool npad_type = device_handle.npad_type < Core::HID::NpadStyleIndex::MaxNpadType; if (!npad_id) { return InvalidNpadId; @@ -78,10 +77,6 @@ Result Controller_NPad::VerifyValidSixAxisSensorHandle( if (!device_index) { return NpadDeviceIndexOutOfRange; } - // This doesn't get validated on nnsdk - if (!npad_type) { - return NpadInvalidHandle; - } return ResultSuccess; } @@ -819,12 +814,12 @@ Controller_NPad::NpadCommunicationMode Controller_NPad::GetNpadCommunicationMode return communication_mode; } -Result Controller_NPad::SetNpadMode(Core::HID::NpadIdType npad_id, - NpadJoyDeviceType npad_device_type, - NpadJoyAssignmentMode assignment_mode) { +bool Controller_NPad::SetNpadMode(Core::HID::NpadIdType& new_npad_id, Core::HID::NpadIdType npad_id, + NpadJoyDeviceType npad_device_type, + NpadJoyAssignmentMode assignment_mode) { if (!IsNpadIdValid(npad_id)) { LOG_ERROR(Service_HID, "Invalid NpadIdType npad_id:{}", npad_id); - return InvalidNpadId; + return false; } auto& controller = GetControllerFromNpadIdType(npad_id); @@ -833,7 +828,7 @@ Result Controller_NPad::SetNpadMode(Core::HID::NpadIdType npad_id, } if (!controller.device->IsConnected()) { - return ResultSuccess; + return false; } if (assignment_mode == NpadJoyAssignmentMode::Dual) { @@ -842,52 +837,52 @@ Result Controller_NPad::SetNpadMode(Core::HID::NpadIdType npad_id, controller.is_dual_left_connected = true; controller.is_dual_right_connected = false; UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconDual, npad_id, true); - return ResultSuccess; + return false; } if (controller.device->GetNpadStyleIndex() == Core::HID::NpadStyleIndex::JoyconRight) { DisconnectNpad(npad_id); controller.is_dual_left_connected = false; controller.is_dual_right_connected = true; UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconDual, npad_id, true); - return ResultSuccess; + return false; } - return ResultSuccess; + return false; } // This is for NpadJoyAssignmentMode::Single // Only JoyconDual get affected by this function if (controller.device->GetNpadStyleIndex() != Core::HID::NpadStyleIndex::JoyconDual) { - return ResultSuccess; + return false; } if (controller.is_dual_left_connected && !controller.is_dual_right_connected) { DisconnectNpad(npad_id); UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconLeft, npad_id, true); - return ResultSuccess; + return false; } if (!controller.is_dual_left_connected && controller.is_dual_right_connected) { DisconnectNpad(npad_id); UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconRight, npad_id, true); - return ResultSuccess; + return false; } // We have two controllers connected to the same npad_id we need to split them - const auto npad_id_2 = hid_core.GetFirstDisconnectedNpadId(); - auto& controller_2 = GetControllerFromNpadIdType(npad_id_2); + new_npad_id = hid_core.GetFirstDisconnectedNpadId(); + auto& controller_2 = GetControllerFromNpadIdType(new_npad_id); DisconnectNpad(npad_id); if (npad_device_type == NpadJoyDeviceType::Left) { UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconLeft, npad_id, true); controller_2.is_dual_left_connected = false; controller_2.is_dual_right_connected = true; - UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconDual, npad_id_2, true); + UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconDual, new_npad_id, true); } else { UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconRight, npad_id, true); controller_2.is_dual_left_connected = true; controller_2.is_dual_right_connected = false; - UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconDual, npad_id_2, true); + UpdateControllerAt(Core::HID::NpadStyleIndex::JoyconDual, new_npad_id, true); } - return ResultSuccess; + return true; } bool Controller_NPad::VibrateControllerAtIndex(Core::HID::NpadIdType npad_id, @@ -1131,6 +1126,7 @@ Result Controller_NPad::DisconnectNpad(Core::HID::NpadIdType npad_id) { WriteEmptyEntry(shared_memory); return ResultSuccess; } + Result Controller_NPad::SetGyroscopeZeroDriftMode( const Core::HID::SixAxisSensorHandle& sixaxis_handle, Core::HID::GyroscopeZeroDriftMode drift_mode) { @@ -1388,7 +1384,8 @@ Result Controller_NPad::MergeSingleJoyAsDualJoy(Core::HID::NpadIdType npad_id_1, return NpadIsDualJoycon; } - // Disconnect the joycon at the second id and connect the dual joycon at the first index. + // Disconnect the joycons and connect them as dual joycon at the first index. + DisconnectNpad(npad_id_1); DisconnectNpad(npad_id_2); controller_1.is_dual_left_connected = true; controller_1.is_dual_right_connected = true; diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index a5998c453..9cfe298f1 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h @@ -102,8 +102,8 @@ public: void SetNpadCommunicationMode(NpadCommunicationMode communication_mode_); NpadCommunicationMode GetNpadCommunicationMode() const; - Result SetNpadMode(Core::HID::NpadIdType npad_id, NpadJoyDeviceType npad_device_type, - NpadJoyAssignmentMode assignment_mode); + bool SetNpadMode(Core::HID::NpadIdType& new_npad_id, Core::HID::NpadIdType npad_id, + NpadJoyDeviceType npad_device_type, NpadJoyAssignmentMode assignment_mode); bool VibrateControllerAtIndex(Core::HID::NpadIdType npad_id, std::size_t device_index, const Core::HID::VibrationValue& vibration_value); diff --git a/src/core/hle/service/hid/controllers/palma.cpp b/src/core/hle/service/hid/controllers/palma.cpp index bce51285c..14c67e454 100644 --- a/src/core/hle/service/hid/controllers/palma.cpp +++ b/src/core/hle/service/hid/controllers/palma.cpp @@ -152,7 +152,7 @@ Result Controller_Palma::WritePalmaRgbLedPatternEntry(const PalmaConnectionHandl } Result Controller_Palma::WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWaveSet wave, - VAddr t_mem, u64 size) { + Common::ProcessAddress t_mem, u64 size) { if (handle.npad_id != active_handle.npad_id) { return InvalidPalmaHandle; } diff --git a/src/core/hle/service/hid/controllers/palma.h b/src/core/hle/service/hid/controllers/palma.h index cf62f0dbc..a0491a819 100644 --- a/src/core/hle/service/hid/controllers/palma.h +++ b/src/core/hle/service/hid/controllers/palma.h @@ -5,7 +5,7 @@ #include <array> #include "common/common_funcs.h" -#include "common/common_types.h" +#include "common/typed_address.h" #include "core/hle/service/hid/controllers/controller_base.h" #include "core/hle/service/hid/errors.h" @@ -125,8 +125,8 @@ public: Result ReadPalmaUniqueCode(const PalmaConnectionHandle& handle); Result SetPalmaUniqueCodeInvalid(const PalmaConnectionHandle& handle); Result WritePalmaRgbLedPatternEntry(const PalmaConnectionHandle& handle, u64 unknown); - Result WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWaveSet wave, VAddr t_mem, - u64 size); + Result WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWaveSet wave, + Common::ProcessAddress t_mem, u64 size); Result SetPalmaDataBaseIdentificationVersion(const PalmaConnectionHandle& handle, s32 database_id_version_); Result GetPalmaDataBaseIdentificationVersion(const PalmaConnectionHandle& handle); diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 4529ad643..87e7b864a 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -302,7 +302,7 @@ Hid::Hid(Core::System& system_) {130, &Hid::SwapNpadAssignment, "SwapNpadAssignment"}, {131, &Hid::IsUnintendedHomeButtonInputProtectionEnabled, "IsUnintendedHomeButtonInputProtectionEnabled"}, {132, &Hid::EnableUnintendedHomeButtonInputProtection, "EnableUnintendedHomeButtonInputProtection"}, - {133, nullptr, "SetNpadJoyAssignmentModeSingleWithDestination"}, + {133, &Hid::SetNpadJoyAssignmentModeSingleWithDestination, "SetNpadJoyAssignmentModeSingleWithDestination"}, {134, &Hid::SetNpadAnalogStickUseCenterClamp, "SetNpadAnalogStickUseCenterClamp"}, {135, &Hid::SetNpadCaptureButtonAssignment, "SetNpadCaptureButtonAssignment"}, {136, &Hid::ClearNpadCaptureButtonAssignment, "ClearNpadCaptureButtonAssignment"}, @@ -1180,8 +1180,10 @@ void Hid::SetNpadJoyAssignmentModeSingleByDefault(HLERequestContext& ctx) { const auto parameters{rp.PopRaw<Parameters>()}; + Core::HID::NpadIdType new_npad_id{}; auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); - controller.SetNpadMode(parameters.npad_id, Controller_NPad::NpadJoyDeviceType::Left, + controller.SetNpadMode(new_npad_id, parameters.npad_id, + Controller_NPad::NpadJoyDeviceType::Left, Controller_NPad::NpadJoyAssignmentMode::Single); LOG_INFO(Service_HID, "called, npad_id={}, applet_resource_user_id={}", parameters.npad_id, @@ -1203,8 +1205,9 @@ void Hid::SetNpadJoyAssignmentModeSingle(HLERequestContext& ctx) { const auto parameters{rp.PopRaw<Parameters>()}; + Core::HID::NpadIdType new_npad_id{}; auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); - controller.SetNpadMode(parameters.npad_id, parameters.npad_joy_device_type, + controller.SetNpadMode(new_npad_id, parameters.npad_id, parameters.npad_joy_device_type, Controller_NPad::NpadJoyAssignmentMode::Single); LOG_INFO(Service_HID, "called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}", @@ -1226,8 +1229,10 @@ void Hid::SetNpadJoyAssignmentModeDual(HLERequestContext& ctx) { const auto parameters{rp.PopRaw<Parameters>()}; + Core::HID::NpadIdType new_npad_id{}; auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); - controller.SetNpadMode(parameters.npad_id, {}, Controller_NPad::NpadJoyAssignmentMode::Dual); + controller.SetNpadMode(new_npad_id, parameters.npad_id, {}, + Controller_NPad::NpadJoyAssignmentMode::Dual); LOG_INFO(Service_HID, "called, npad_id={}, applet_resource_user_id={}", parameters.npad_id, parameters.applet_resource_user_id); @@ -1369,6 +1374,34 @@ void Hid::EnableUnintendedHomeButtonInputProtection(HLERequestContext& ctx) { rb.Push(result); } +void Hid::SetNpadJoyAssignmentModeSingleWithDestination(HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + struct Parameters { + Core::HID::NpadIdType npad_id; + INSERT_PADDING_WORDS_NOINIT(1); + u64 applet_resource_user_id; + Controller_NPad::NpadJoyDeviceType npad_joy_device_type; + }; + static_assert(sizeof(Parameters) == 0x18, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw<Parameters>()}; + + Core::HID::NpadIdType new_npad_id{}; + auto& controller = GetAppletResource()->GetController<Controller_NPad>(HidController::NPad); + const auto is_reassigned = + controller.SetNpadMode(new_npad_id, parameters.npad_id, parameters.npad_joy_device_type, + Controller_NPad::NpadJoyAssignmentMode::Single); + + LOG_INFO(Service_HID, "called, npad_id={}, applet_resource_user_id={}, npad_joy_device_type={}", + parameters.npad_id, parameters.applet_resource_user_id, + parameters.npad_joy_device_type); + + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.Push(is_reassigned); + rb.PushEnum(new_npad_id); +} + void Hid::SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; struct Parameters { diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index c69e5f3fb..f247b83c2 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h @@ -151,6 +151,7 @@ private: void SwapNpadAssignment(HLERequestContext& ctx); void IsUnintendedHomeButtonInputProtectionEnabled(HLERequestContext& ctx); void EnableUnintendedHomeButtonInputProtection(HLERequestContext& ctx); + void SetNpadJoyAssignmentModeSingleWithDestination(HLERequestContext& ctx); void SetNpadAnalogStickUseCenterClamp(HLERequestContext& ctx); void SetNpadCaptureButtonAssignment(HLERequestContext& ctx); void ClearNpadCaptureButtonAssignment(HLERequestContext& ctx); diff --git a/src/core/hle/service/hid/hidbus/hidbus_base.cpp b/src/core/hle/service/hid/hidbus/hidbus_base.cpp index dfd23ec04..ee522c36e 100644 --- a/src/core/hle/service/hid/hidbus/hidbus_base.cpp +++ b/src/core/hle/service/hid/hidbus/hidbus_base.cpp @@ -59,7 +59,7 @@ void HidbusBase::DisablePollingMode() { polling_mode_enabled = false; } -void HidbusBase::SetTransferMemoryAddress(VAddr t_mem) { +void HidbusBase::SetTransferMemoryAddress(Common::ProcessAddress t_mem) { transfer_memory = t_mem; } diff --git a/src/core/hle/service/hid/hidbus/hidbus_base.h b/src/core/hle/service/hid/hidbus/hidbus_base.h index 26313264d..ec41684e1 100644 --- a/src/core/hle/service/hid/hidbus/hidbus_base.h +++ b/src/core/hle/service/hid/hidbus/hidbus_base.h @@ -5,7 +5,7 @@ #include <array> #include <span> -#include "common/common_types.h" +#include "common/typed_address.h" #include "core/hle/result.h" namespace Core { @@ -138,7 +138,7 @@ public: void DisablePollingMode(); // Called on EnableJoyPollingReceiveMode - void SetTransferMemoryAddress(VAddr t_mem); + void SetTransferMemoryAddress(Common::ProcessAddress t_mem); Kernel::KReadableEvent& GetSendCommandAsycEvent() const; @@ -174,7 +174,7 @@ protected: JoyEnableSixAxisDataAccessor enable_sixaxis_data{}; ButtonOnlyPollingDataAccessor button_only_data{}; - VAddr transfer_memory{}; + Common::ProcessAddress transfer_memory{}; Core::System& system; Kernel::KEvent* send_command_async_event; diff --git a/src/core/hle/service/hid/hidbus/ringcon.cpp b/src/core/hle/service/hid/hidbus/ringcon.cpp index 65a2dd521..378108012 100644 --- a/src/core/hle/service/hid/hidbus/ringcon.cpp +++ b/src/core/hle/service/hid/hidbus/ringcon.cpp @@ -64,8 +64,8 @@ void RingController::OnUpdate() { curr_entry.polling_data.out_size = sizeof(ringcon_value); std::memcpy(curr_entry.polling_data.data.data(), &ringcon_value, sizeof(ringcon_value)); - system.Memory().WriteBlock(transfer_memory, &enable_sixaxis_data, - sizeof(enable_sixaxis_data)); + system.ApplicationMemory().WriteBlock(transfer_memory, &enable_sixaxis_data, + sizeof(enable_sixaxis_data)); break; } default: diff --git a/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp b/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp index a268750cd..803a6277c 100644 --- a/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp +++ b/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp @@ -58,16 +58,16 @@ void ImageTransferProcessor::OnControllerUpdate(Core::HID::ControllerTriggerType if (camera_data.format != current_config.origin_format) { LOG_WARNING(Service_IRS, "Wrong Input format {} expected {}", camera_data.format, current_config.origin_format); - system.Memory().ZeroBlock(*system.ApplicationProcess(), transfer_memory, - GetDataSize(current_config.trimming_format)); + system.ApplicationMemory().ZeroBlock(transfer_memory, + GetDataSize(current_config.trimming_format)); return; } if (current_config.origin_format > current_config.trimming_format) { LOG_WARNING(Service_IRS, "Origin format {} is smaller than trimming format {}", current_config.origin_format, current_config.trimming_format); - system.Memory().ZeroBlock(*system.ApplicationProcess(), transfer_memory, - GetDataSize(current_config.trimming_format)); + system.ApplicationMemory().ZeroBlock(transfer_memory, + GetDataSize(current_config.trimming_format)); return; } @@ -84,8 +84,8 @@ void ImageTransferProcessor::OnControllerUpdate(Core::HID::ControllerTriggerType "Trimming area ({}, {}, {}, {}) is outside of origin area ({}, {})", current_config.trimming_start_x, current_config.trimming_start_y, trimming_width, trimming_height, origin_width, origin_height); - system.Memory().ZeroBlock(*system.ApplicationProcess(), transfer_memory, - GetDataSize(current_config.trimming_format)); + system.ApplicationMemory().ZeroBlock(transfer_memory, + GetDataSize(current_config.trimming_format)); return; } @@ -99,8 +99,8 @@ void ImageTransferProcessor::OnControllerUpdate(Core::HID::ControllerTriggerType } } - system.Memory().WriteBlock(transfer_memory, window_data.data(), - GetDataSize(current_config.trimming_format)); + system.ApplicationMemory().WriteBlock(transfer_memory, window_data.data(), + GetDataSize(current_config.trimming_format)); if (!IsProcessorActive()) { StartProcessor(); @@ -140,7 +140,7 @@ void ImageTransferProcessor::SetConfig( npad_device->SetCameraFormat(current_config.origin_format); } -void ImageTransferProcessor::SetTransferMemoryAddress(VAddr t_mem) { +void ImageTransferProcessor::SetTransferMemoryAddress(Common::ProcessAddress t_mem) { transfer_memory = t_mem; } @@ -148,7 +148,7 @@ Core::IrSensor::ImageTransferProcessorState ImageTransferProcessor::GetState( std::vector<u8>& data) const { const auto size = GetDataSize(current_config.trimming_format); data.resize(size); - system.Memory().ReadBlock(transfer_memory, data.data(), size); + system.ApplicationMemory().ReadBlock(transfer_memory, data.data(), size); return processor_state; } diff --git a/src/core/hle/service/hid/irsensor/image_transfer_processor.h b/src/core/hle/service/hid/irsensor/image_transfer_processor.h index 7cfe04c8c..7f42d8453 100644 --- a/src/core/hle/service/hid/irsensor/image_transfer_processor.h +++ b/src/core/hle/service/hid/irsensor/image_transfer_processor.h @@ -3,7 +3,7 @@ #pragma once -#include "common/common_types.h" +#include "common/typed_address.h" #include "core/hid/irs_types.h" #include "core/hle/service/hid/irsensor/processor_base.h" @@ -37,7 +37,7 @@ public: void SetConfig(Core::IrSensor::PackedImageTransferProcessorExConfig config); // Transfer memory where the image data will be stored - void SetTransferMemoryAddress(VAddr t_mem); + void SetTransferMemoryAddress(Common::ProcessAddress t_mem); Core::IrSensor::ImageTransferProcessorState GetState(std::vector<u8>& data) const; @@ -72,6 +72,6 @@ private: int callback_key{}; Core::System& system; - VAddr transfer_memory{}; + Common::ProcessAddress transfer_memory{}; }; } // namespace Service::IRS diff --git a/src/core/hle/service/hle_ipc.cpp b/src/core/hle/service/hle_ipc.cpp index cca697c64..2290df705 100644 --- a/src/core/hle/service/hle_ipc.cpp +++ b/src/core/hle/service/hle_ipc.cpp @@ -303,8 +303,7 @@ Result HLERequestContext::WriteToOutgoingCommandBuffer(Kernel::KThread& requesti } // Copy the translated command buffer back into the thread's command buffer area. - memory.WriteBlock(owner_process, requesting_thread.GetTlsAddress(), cmd_buf.data(), - write_size * sizeof(u32)); + memory.WriteBlock(requesting_thread.GetTlsAddress(), cmd_buf.data(), write_size * sizeof(u32)); return ResultSuccess; } diff --git a/src/core/hle/service/jit/jit.cpp b/src/core/hle/service/jit/jit.cpp index 46bcfd695..be996870f 100644 --- a/src/core/hle/service/jit/jit.cpp +++ b/src/core/hle/service/jit/jit.cpp @@ -24,8 +24,8 @@ class IJitEnvironment final : public ServiceFramework<IJitEnvironment> { public: explicit IJitEnvironment(Core::System& system_, Kernel::KProcess& process_, CodeRange user_rx, CodeRange user_ro) - : ServiceFramework{system_, "IJitEnvironment"}, process{&process_}, context{ - system_.Memory()} { + : ServiceFramework{system_, "IJitEnvironment"}, process{&process_}, + context{system_.ApplicationMemory()} { // clang-format off static const FunctionInfo functions[] = { {0, &IJitEnvironment::GenerateCode, "GenerateCode"}, @@ -195,7 +195,7 @@ public: } // Set up the configuration with the required TransferMemory address - configuration.transfer_memory.offset = tmem->GetSourceAddress(); + configuration.transfer_memory.offset = GetInteger(tmem->GetSourceAddress()); configuration.transfer_memory.size = tmem_size; // Gather up all the callbacks from the loaded plugin @@ -383,12 +383,12 @@ public: } const CodeRange user_rx{ - .offset = rx_mem->GetSourceAddress(), + .offset = GetInteger(rx_mem->GetSourceAddress()), .size = parameters.rx_size, }; const CodeRange user_ro{ - .offset = ro_mem->GetSourceAddress(), + .offset = GetInteger(ro_mem->GetSourceAddress()), .size = parameters.ro_size, }; diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index 6de96ed5b..c42489ff9 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp @@ -225,7 +225,7 @@ public: // Read NRR data from memory std::vector<u8> nrr_data(nrr_size); - system.Memory().ReadBlock(nrr_address, nrr_data.data(), nrr_size); + system.ApplicationMemory().ReadBlock(nrr_address, nrr_data.data(), nrr_size); NRRHeader header; std::memcpy(&header, nrr_data.data(), sizeof(NRRHeader)); @@ -314,7 +314,7 @@ public: const auto is_region_available = [&](VAddr addr) { const auto end_addr = addr + size; while (addr < end_addr) { - if (system.Memory().IsValidVirtualAddress(addr)) { + if (system.ApplicationMemory().IsValidVirtualAddress(addr)) { return false; } @@ -337,7 +337,7 @@ public: bool succeeded = false; const auto map_region_end = - page_table.GetAliasCodeRegionStart() + page_table.GetAliasCodeRegionSize(); + GetInteger(page_table.GetAliasCodeRegionStart()) + page_table.GetAliasCodeRegionSize(); while (current_map_addr < map_region_end) { if (is_region_available(current_map_addr)) { succeeded = true; @@ -427,8 +427,8 @@ public: const VAddr bss_end_addr{ Common::AlignUp(bss_start + nro_header.bss_size, Kernel::PageSize)}; - const auto CopyCode = [this, process](VAddr src_addr, VAddr dst_addr, u64 size) { - system.Memory().CopyBlock(*process, dst_addr, src_addr, size); + const auto CopyCode = [this](VAddr src_addr, VAddr dst_addr, u64 size) { + system.ApplicationMemory().CopyBlock(dst_addr, src_addr, size); }; CopyCode(nro_addr + nro_header.segment_headers[TEXT_INDEX].memory_offset, text_start, nro_header.segment_headers[TEXT_INDEX].memory_size); @@ -506,7 +506,7 @@ public: // Read NRO data from memory std::vector<u8> nro_data(nro_size); - system.Memory().ReadBlock(nro_address, nro_data.data(), nro_size); + system.ApplicationMemory().ReadBlock(nro_address, nro_data.data(), nro_size); SHA256Hash hash{}; mbedtls_sha256_ret(nro_data.data(), nro_data.size(), hash.data(), 0); @@ -642,7 +642,8 @@ public: LOG_WARNING(Service_LDR, "(STUBBED) called"); initialized = true; - current_map_addr = system.ApplicationProcess()->PageTable().GetAliasCodeRegionStart(); + current_map_addr = + GetInteger(system.ApplicationProcess()->PageTable().GetAliasCodeRegionStart()); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); diff --git a/src/core/hle/service/mii/mii_manager.cpp b/src/core/hle/service/mii/mii_manager.cpp index 3a2fe938f..c920650f5 100644 --- a/src/core/hle/service/mii/mii_manager.cpp +++ b/src/core/hle/service/mii/mii_manager.cpp @@ -510,7 +510,7 @@ CharInfo MiiManager::ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const { return mii; } -Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { +Ver3StoreData MiiManager::BuildFromStoreData(const CharInfo& mii) const { Service::Mii::MiiManager manager; Ver3StoreData mii_v3{}; @@ -534,16 +534,13 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { mii_v3.region_information.character_set.Assign(mii.font_region); mii_v3.appearance_bits1.face_shape.Assign(mii.faceline_type); - mii_v3.appearance_bits1.skin_color.Assign(mii.faceline_color); mii_v3.appearance_bits2.wrinkles.Assign(mii.faceline_wrinkle); mii_v3.appearance_bits2.makeup.Assign(mii.faceline_make); mii_v3.hair_style = mii.hair_type; - mii_v3.appearance_bits3.hair_color.Assign(mii.hair_color); mii_v3.appearance_bits3.flip_hair.Assign(mii.hair_flip); mii_v3.appearance_bits4.eye_type.Assign(mii.eye_type); - mii_v3.appearance_bits4.eye_color.Assign(mii.eye_color); mii_v3.appearance_bits4.eye_scale.Assign(mii.eye_scale); mii_v3.appearance_bits4.eye_vertical_stretch.Assign(mii.eye_aspect); mii_v3.appearance_bits4.eye_rotation.Assign(mii.eye_rotate); @@ -551,7 +548,6 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { mii_v3.appearance_bits4.eye_y_position.Assign(mii.eye_y); mii_v3.appearance_bits5.eyebrow_style.Assign(mii.eyebrow_type); - mii_v3.appearance_bits5.eyebrow_color.Assign(mii.eyebrow_color); mii_v3.appearance_bits5.eyebrow_scale.Assign(mii.eyebrow_scale); mii_v3.appearance_bits5.eyebrow_yscale.Assign(mii.eyebrow_aspect); mii_v3.appearance_bits5.eyebrow_rotation.Assign(mii.eyebrow_rotate); @@ -563,7 +559,6 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { mii_v3.appearance_bits6.nose_y_position.Assign(mii.nose_y); mii_v3.appearance_bits7.mouth_type.Assign(mii.mouth_type); - mii_v3.appearance_bits7.mouth_color.Assign(mii.mouth_color); mii_v3.appearance_bits7.mouth_scale.Assign(mii.mouth_scale); mii_v3.appearance_bits7.mouth_horizontal_stretch.Assign(mii.mouth_aspect); mii_v3.appearance_bits8.mouth_y_position.Assign(mii.mouth_y); @@ -573,10 +568,7 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { mii_v3.appearance_bits9.mustache_y_position.Assign(mii.mustache_y); mii_v3.appearance_bits9.bear_type.Assign(mii.beard_type); - mii_v3.appearance_bits9.facial_hair_color.Assign(mii.beard_color); - mii_v3.appearance_bits10.glasses_type.Assign(mii.glasses_type); - mii_v3.appearance_bits10.glasses_color.Assign(mii.glasses_color); mii_v3.appearance_bits10.glasses_scale.Assign(mii.glasses_scale); mii_v3.appearance_bits10.glasses_y_position.Assign(mii.glasses_y); @@ -585,11 +577,36 @@ Ver3StoreData MiiManager::ConvertCharInfoToV3(const CharInfo& mii) const { mii_v3.appearance_bits11.mole_x_position.Assign(mii.mole_x); mii_v3.appearance_bits11.mole_y_position.Assign(mii.mole_y); + // These types are converted to V3 from a table + mii_v3.appearance_bits1.skin_color.Assign(Ver3FacelineColorTable[mii.faceline_color]); + mii_v3.appearance_bits3.hair_color.Assign(Ver3HairColorTable[mii.hair_color]); + mii_v3.appearance_bits4.eye_color.Assign(Ver3EyeColorTable[mii.eye_color]); + mii_v3.appearance_bits5.eyebrow_color.Assign(Ver3HairColorTable[mii.eyebrow_color]); + mii_v3.appearance_bits7.mouth_color.Assign(Ver3MouthlineColorTable[mii.mouth_color]); + mii_v3.appearance_bits9.facial_hair_color.Assign(Ver3HairColorTable[mii.beard_color]); + mii_v3.appearance_bits10.glasses_color.Assign(Ver3GlassColorTable[mii.glasses_color]); + mii_v3.appearance_bits10.glasses_type.Assign(Ver3GlassTypeTable[mii.glasses_type]); + + mii_v3.crc = GenerateCrc16(&mii_v3, sizeof(Ver3StoreData) - sizeof(u16)); + // TODO: Validate mii_v3 data return mii_v3; } +NfpStoreDataExtension MiiManager::SetFromStoreData(const CharInfo& mii) const { + return { + .faceline_color = static_cast<u8>(mii.faceline_color & 0xf), + .hair_color = static_cast<u8>(mii.hair_color & 0x7f), + .eye_color = static_cast<u8>(mii.eyebrow_color & 0x7f), + .eyebrow_color = static_cast<u8>(mii.eyebrow_color & 0x7f), + .mouth_color = static_cast<u8>(mii.mouth_color & 0x7f), + .beard_color = static_cast<u8>(mii.beard_color & 0x7f), + .glass_color = static_cast<u8>(mii.glasses_color & 0x7f), + .glass_type = static_cast<u8>(mii.glasses_type & 0x1f), + }; +} + bool MiiManager::ValidateV3Info(const Ver3StoreData& mii_v3) const { bool is_valid = mii_v3.version == 0 || mii_v3.version == 3; diff --git a/src/core/hle/service/mii/mii_manager.h b/src/core/hle/service/mii/mii_manager.h index 83ad3d343..5525fcd1c 100644 --- a/src/core/hle/service/mii/mii_manager.h +++ b/src/core/hle/service/mii/mii_manager.h @@ -23,11 +23,16 @@ public: CharInfo BuildRandom(Age age, Gender gender, Race race); CharInfo BuildDefault(std::size_t index); CharInfo ConvertV3ToCharInfo(const Ver3StoreData& mii_v3) const; - Ver3StoreData ConvertCharInfoToV3(const CharInfo& mii) const; bool ValidateV3Info(const Ver3StoreData& mii_v3) const; ResultVal<std::vector<MiiInfoElement>> GetDefault(SourceFlag source_flag); Result GetIndex(const CharInfo& info, u32& index); + // This is nn::mii::detail::Ver::StoreDataRaw::BuildFromStoreData + Ver3StoreData BuildFromStoreData(const CharInfo& mii) const; + + // This is nn::mii::detail::NfpStoreDataExtentionRaw::SetFromStoreData + NfpStoreDataExtension SetFromStoreData(const CharInfo& mii) const; + private: const Common::UUID user_id{}; u64 update_counter{}; diff --git a/src/core/hle/service/mii/types.h b/src/core/hle/service/mii/types.h index 9e3247397..c48d08d79 100644 --- a/src/core/hle/service/mii/types.h +++ b/src/core/hle/service/mii/types.h @@ -365,10 +365,68 @@ struct Ver3StoreData { } appearance_bits11; std::array<u16_le, 0xA> author_name; - INSERT_PADDING_BYTES(0x4); + INSERT_PADDING_BYTES(0x2); + u16_be crc; }; static_assert(sizeof(Ver3StoreData) == 0x60, "Ver3StoreData is an invalid size"); +struct NfpStoreDataExtension { + u8 faceline_color; + u8 hair_color; + u8 eye_color; + u8 eyebrow_color; + u8 mouth_color; + u8 beard_color; + u8 glass_color; + u8 glass_type; +}; +static_assert(sizeof(NfpStoreDataExtension) == 0x8, "NfpStoreDataExtension is an invalid size"); + +constexpr std::array<u8, 0x10> Ver3FacelineColorTable{ + 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x0, 0x1, 0x5, 0x5, +}; + +constexpr std::array<u8, 100> Ver3HairColorTable{ + 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x0, 0x4, 0x3, 0x5, 0x4, 0x4, 0x6, 0x2, 0x0, + 0x6, 0x4, 0x3, 0x2, 0x2, 0x7, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x5, 0x5, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x7, 0x5, 0x7, 0x7, 0x7, 0x7, 0x7, 0x6, 0x7, + 0x7, 0x7, 0x7, 0x7, 0x3, 0x7, 0x7, 0x7, 0x7, 0x7, 0x0, 0x4, 0x4, 0x4, 0x4, +}; + +constexpr std::array<u8, 100> Ver3EyeColorTable{ + 0x0, 0x2, 0x2, 0x2, 0x1, 0x3, 0x2, 0x3, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x2, 0x2, 0x4, + 0x2, 0x1, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x0, 0x0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1, 0x0, 0x4, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x0, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, + 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, + 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x2, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, +}; + +constexpr std::array<u8, 100> Ver3MouthlineColorTable{ + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x3, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x1, 0x4, + 0x4, 0x4, 0x0, 0x1, 0x2, 0x3, 0x4, 0x4, 0x2, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, 0x1, 0x4, + 0x4, 0x2, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, 0x4, 0x4, 0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x4, + 0x4, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x4, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x4, 0x0, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, 0x3, 0x3, +}; + +constexpr std::array<u8, 100> Ver3GlassColorTable{ + 0x0, 0x1, 0x1, 0x1, 0x5, 0x1, 0x1, 0x4, 0x0, 0x5, 0x1, 0x1, 0x3, 0x5, 0x1, 0x2, 0x3, + 0x4, 0x5, 0x4, 0x2, 0x2, 0x4, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x2, 0x2, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, + 0x3, 0x3, 0x3, 0x3, 0x3, 0x0, 0x0, 0x0, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x0, 0x5, 0x5, + 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x1, 0x4, + 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, +}; + +constexpr std::array<u8, 20> Ver3GlassTypeTable{ + 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x1, + 0x2, 0x1, 0x3, 0x7, 0x7, 0x6, 0x7, 0x8, 0x7, 0x7, +}; + struct MiiStoreData { using Name = std::array<char16_t, 10>; diff --git a/src/core/hle/service/nfc/nfc_device.cpp b/src/core/hle/service/nfc/nfc_device.cpp index 3f17d0c7a..c7db74d14 100644 --- a/src/core/hle/service/nfc/nfc_device.cpp +++ b/src/core/hle/service/nfc/nfc_device.cpp @@ -42,8 +42,18 @@ NfcDevice::~NfcDevice() { }; void NfcDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { - if (type == Core::HID::ControllerTriggerType::Connected || - type == Core::HID::ControllerTriggerType::Disconnected) { + if (!is_initalized) { + return; + } + + if (type == Core::HID::ControllerTriggerType::Connected) { + Initialize(); + availability_change_event->Signal(); + return; + } + + if (type == Core::HID::ControllerTriggerType::Disconnected) { + device_state = NFP::DeviceState::Unavailable; availability_change_event->Signal(); return; } @@ -113,6 +123,7 @@ void NfcDevice::Initialize() { device_state = npad_device->HasNfc() ? NFP::DeviceState::Initialized : NFP::DeviceState::Unavailable; encrypted_tag_data = {}; + is_initalized = true; } void NfcDevice::Finalize() { @@ -121,6 +132,7 @@ void NfcDevice::Finalize() { StopDetection(); } device_state = NFP::DeviceState::Unavailable; + is_initalized = false; } Result NfcDevice::StartDetection(NFP::TagProtocol allowed_protocol) { diff --git a/src/core/hle/service/nfc/nfc_device.h b/src/core/hle/service/nfc/nfc_device.h index a6e114d36..ea63f0537 100644 --- a/src/core/hle/service/nfc/nfc_device.h +++ b/src/core/hle/service/nfc/nfc_device.h @@ -67,6 +67,7 @@ private: Kernel::KEvent* deactivate_event = nullptr; Kernel::KEvent* availability_change_event = nullptr; + bool is_initalized{}; NFP::TagProtocol allowed_protocols{}; NFP::DeviceState device_state{NFP::DeviceState::Unavailable}; diff --git a/src/core/hle/service/nfp/amiibo_crypto.cpp b/src/core/hle/service/nfp/amiibo_crypto.cpp index ad73edbda..a3622e792 100644 --- a/src/core/hle/service/nfp/amiibo_crypto.cpp +++ b/src/core/hle/service/nfp/amiibo_crypto.cpp @@ -70,6 +70,10 @@ bool IsAmiiboValid(const EncryptedNTAG215File& ntag_file) { return true; } +bool IsAmiiboValid(const NTAG215File& ntag_file) { + return IsAmiiboValid(EncodedDataToNfcData(ntag_file)); +} + NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data) { NTAG215File encoded_data{}; @@ -88,8 +92,9 @@ NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data) { encoded_data.application_area_id = nfc_data.user_memory.application_area_id; encoded_data.application_id_byte = nfc_data.user_memory.application_id_byte; encoded_data.unknown = nfc_data.user_memory.unknown; + encoded_data.mii_extension = nfc_data.user_memory.mii_extension; encoded_data.unknown2 = nfc_data.user_memory.unknown2; - encoded_data.application_area_crc = nfc_data.user_memory.application_area_crc; + encoded_data.register_info_crc = nfc_data.user_memory.register_info_crc; encoded_data.application_area = nfc_data.user_memory.application_area; encoded_data.hmac_tag = nfc_data.user_memory.hmac_tag; encoded_data.lock_bytes = nfc_data.uuid.lock_bytes; @@ -122,8 +127,9 @@ EncryptedNTAG215File EncodedDataToNfcData(const NTAG215File& encoded_data) { nfc_data.user_memory.application_area_id = encoded_data.application_area_id; nfc_data.user_memory.application_id_byte = encoded_data.application_id_byte; nfc_data.user_memory.unknown = encoded_data.unknown; + nfc_data.user_memory.mii_extension = encoded_data.mii_extension; nfc_data.user_memory.unknown2 = encoded_data.unknown2; - nfc_data.user_memory.application_area_crc = encoded_data.application_area_crc; + nfc_data.user_memory.register_info_crc = encoded_data.register_info_crc; nfc_data.user_memory.application_area = encoded_data.application_area; nfc_data.user_memory.hmac_tag = encoded_data.hmac_tag; nfc_data.user_memory.model_info = encoded_data.model_info; diff --git a/src/core/hle/service/nfp/amiibo_crypto.h b/src/core/hle/service/nfp/amiibo_crypto.h index c9fd67a39..f6208ee6b 100644 --- a/src/core/hle/service/nfp/amiibo_crypto.h +++ b/src/core/hle/service/nfp/amiibo_crypto.h @@ -60,6 +60,9 @@ static_assert(sizeof(DerivedKeys) == 0x30, "DerivedKeys is an invalid size"); /// Validates that the amiibo file is not corrupted bool IsAmiiboValid(const EncryptedNTAG215File& ntag_file); +/// Validates that the amiibo file is not corrupted +bool IsAmiiboValid(const NTAG215File& ntag_file); + /// Converts from encrypted file format to encoded file format NTAG215File NfcDataToEncodedData(const EncryptedNTAG215File& nfc_data); diff --git a/src/core/hle/service/nfp/nfp_device.cpp b/src/core/hle/service/nfp/nfp_device.cpp index ddff90d6a..607e70968 100644 --- a/src/core/hle/service/nfp/nfp_device.cpp +++ b/src/core/hle/service/nfp/nfp_device.cpp @@ -3,6 +3,17 @@ #include <array> +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4701) // Potentially uninitialized local variable 'result' used +#endif + +#include <boost/crc.hpp> + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + #include "common/input.h" #include "common/logging/log.h" #include "common/string_util.h" @@ -55,8 +66,18 @@ NfpDevice::~NfpDevice() { }; void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { - if (type == Core::HID::ControllerTriggerType::Connected || - type == Core::HID::ControllerTriggerType::Disconnected) { + if (!is_initalized) { + return; + } + + if (type == Core::HID::ControllerTriggerType::Connected) { + Initialize(); + availability_change_event->Signal(); + return; + } + + if (type == Core::HID::ControllerTriggerType::Disconnected) { + device_state = DeviceState::Unavailable; availability_change_event->Signal(); return; } @@ -100,7 +121,16 @@ bool NfpDevice::LoadAmiibo(std::span<const u8> data) { // TODO: Filter by allowed_protocols here - memcpy(&encrypted_tag_data, data.data(), sizeof(EncryptedNTAG215File)); + memcpy(&tag_data, data.data(), sizeof(EncryptedNTAG215File)); + is_plain_amiibo = AmiiboCrypto::IsAmiiboValid(tag_data); + + if (is_plain_amiibo) { + encrypted_tag_data = AmiiboCrypto::EncodedDataToNfcData(tag_data); + LOG_INFO(Service_NFP, "Using plain amiibo"); + } else { + tag_data = {}; + memcpy(&encrypted_tag_data, data.data(), sizeof(EncryptedNTAG215File)); + } device_state = DeviceState::TagFound; deactivate_event->GetReadableEvent().Clear(); @@ -134,6 +164,7 @@ void NfpDevice::Initialize() { device_state = npad_device->HasNfc() ? DeviceState::Initialized : DeviceState::Unavailable; encrypted_tag_data = {}; tag_data = {}; + is_initalized = true; } void NfpDevice::Finalize() { @@ -144,6 +175,7 @@ void NfpDevice::Finalize() { StopDetection(); } device_state = DeviceState::Unavailable; + is_initalized = false; } Result NfpDevice::StartDetection(TagProtocol allowed_protocol) { @@ -209,13 +241,17 @@ Result NfpDevice::Flush() { tag_data.write_counter++; - if (!AmiiboCrypto::EncodeAmiibo(tag_data, encrypted_tag_data)) { - LOG_ERROR(Service_NFP, "Failed to encode data"); - return WriteAmiiboFailed; - } + std::vector<u8> data(sizeof(EncryptedNTAG215File)); + if (is_plain_amiibo) { + memcpy(data.data(), &tag_data, sizeof(tag_data)); + } else { + if (!AmiiboCrypto::EncodeAmiibo(tag_data, encrypted_tag_data)) { + LOG_ERROR(Service_NFP, "Failed to encode data"); + return WriteAmiiboFailed; + } - std::vector<u8> data(sizeof(encrypted_tag_data)); - memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data)); + memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data)); + } if (!npad_device->WriteNfc(data)) { LOG_ERROR(Service_NFP, "Error writing to file"); @@ -233,6 +269,13 @@ Result NfpDevice::Mount(MountTarget mount_target_) { return WrongDeviceState; } + // The loaded amiibo is not encrypted + if (is_plain_amiibo) { + device_state = DeviceState::TagMounted; + mount_target = mount_target_; + return ResultSuccess; + } + if (!AmiiboCrypto::IsAmiiboValid(encrypted_tag_data)) { LOG_ERROR(Service_NFP, "Not an amiibo"); return NotAnAmiibo; @@ -448,7 +491,7 @@ Result NfpDevice::DeleteRegisterInfo() { rng.GenerateRandomBytes(&tag_data.unknown, sizeof(u8)); rng.GenerateRandomBytes(&tag_data.unknown2[0], sizeof(u32)); rng.GenerateRandomBytes(&tag_data.unknown2[1], sizeof(u32)); - rng.GenerateRandomBytes(&tag_data.application_area_crc, sizeof(u32)); + rng.GenerateRandomBytes(&tag_data.register_info_crc, sizeof(u32)); rng.GenerateRandomBytes(&tag_data.settings.init_date, sizeof(u32)); tag_data.settings.settings.font_region.Assign(0); tag_data.settings.settings.amiibo_initialized.Assign(0); @@ -471,6 +514,7 @@ Result NfpDevice::SetRegisterInfoPrivate(const AmiiboName& amiibo_name) { } Service::Mii::MiiManager manager; + const auto mii = manager.BuildDefault(0); auto& settings = tag_data.settings; if (tag_data.settings.settings.amiibo_initialized == 0) { @@ -479,16 +523,15 @@ Result NfpDevice::SetRegisterInfoPrivate(const AmiiboName& amiibo_name) { } SetAmiiboName(settings, amiibo_name); - tag_data.owner_mii = manager.ConvertCharInfoToV3(manager.BuildDefault(0)); + tag_data.owner_mii = manager.BuildFromStoreData(mii); + tag_data.mii_extension = manager.SetFromStoreData(mii); tag_data.unknown = 0; - tag_data.unknown2[6] = 0; + tag_data.unknown2 = {}; settings.country_code_id = 0; settings.settings.font_region.Assign(0); settings.settings.amiibo_initialized.Assign(1); - // TODO: this is a mix of tag.file input - std::array<u8, 0x7e> unknown_input{}; - tag_data.application_area_crc = CalculateCrc(unknown_input); + UpdateRegisterInfoCrc(); return Flush(); } @@ -685,6 +728,11 @@ Result NfpDevice::RecreateApplicationArea(u32 access_id, std::span<const u8> dat return WrongDeviceState; } + if (is_app_area_open) { + LOG_ERROR(Service_NFP, "Application area is open"); + return WrongDeviceState; + } + if (mount_target == MountTarget::None || mount_target == MountTarget::Rom) { LOG_ERROR(Service_NFP, "Amiibo is read only", device_state); return WrongDeviceState; @@ -715,10 +763,9 @@ Result NfpDevice::RecreateApplicationArea(u32 access_id, std::span<const u8> dat tag_data.settings.settings.appdata_initialized.Assign(1); tag_data.application_area_id = access_id; tag_data.unknown = {}; + tag_data.unknown2 = {}; - // TODO: this is a mix of tag_data input - std::array<u8, 0x7e> unknown_input{}; - tag_data.application_area_crc = CalculateCrc(unknown_input); + UpdateRegisterInfoCrc(); return Flush(); } @@ -752,6 +799,10 @@ Result NfpDevice::DeleteApplicationArea() { rng.GenerateRandomBytes(&tag_data.application_id_byte, sizeof(u8)); tag_data.settings.settings.appdata_initialized.Assign(0); tag_data.unknown = {}; + tag_data.unknown2 = {}; + is_app_area_open = false; + + UpdateRegisterInfoCrc(); return Flush(); } @@ -835,32 +886,34 @@ void NfpDevice::UpdateSettingsCrc() { // TODO: this reads data from a global, find what it is std::array<u8, 8> unknown_input{}; - settings.crc = CalculateCrc(unknown_input); -} - -u32 NfpDevice::CalculateCrc(std::span<const u8> data) { - constexpr u32 magic = 0xedb88320; - u32 crc = 0xffffffff; - - if (data.size() == 0) { - return 0; - } - - for (u8 input : data) { - u32 temp = (crc ^ input) >> 1; - if (((crc ^ input) & 1) != 0) { - temp = temp ^ magic; - } - - for (std::size_t step = 0; step < 7; ++step) { - crc = temp >> 1; - if ((temp & 1) != 0) { - crc = temp >> 1 ^ magic; - } - } - } + boost::crc_32_type crc; + crc.process_bytes(&unknown_input, sizeof(unknown_input)); + settings.crc = crc.checksum(); +} + +void NfpDevice::UpdateRegisterInfoCrc() { +#pragma pack(push, 1) + struct CrcData { + Mii::Ver3StoreData mii; + u8 application_id_byte; + u8 unknown; + Mii::NfpStoreDataExtension mii_extension; + std::array<u32, 0x5> unknown2; + }; + static_assert(sizeof(CrcData) == 0x7e, "CrcData is an invalid size"); +#pragma pack(pop) + + const CrcData crc_data{ + .mii = tag_data.owner_mii, + .application_id_byte = tag_data.application_id_byte, + .unknown = tag_data.unknown, + .mii_extension = tag_data.mii_extension, + .unknown2 = tag_data.unknown2, + }; - return ~crc; + boost::crc_32_type crc; + crc.process_bytes(&crc_data, sizeof(CrcData)); + tag_data.register_info_crc = crc.checksum(); } } // namespace Service::NFP diff --git a/src/core/hle/service/nfp/nfp_device.h b/src/core/hle/service/nfp/nfp_device.h index 06386401d..7f963730d 100644 --- a/src/core/hle/service/nfp/nfp_device.h +++ b/src/core/hle/service/nfp/nfp_device.h @@ -80,7 +80,7 @@ private: AmiiboDate GetAmiiboDate(s64 posix_time) const; u64 RemoveVersionByte(u64 application_id) const; void UpdateSettingsCrc(); - u32 CalculateCrc(std::span<const u8>); + void UpdateRegisterInfoCrc(); bool is_controller_set{}; int callback_key; @@ -92,8 +92,10 @@ private: Kernel::KEvent* deactivate_event = nullptr; Kernel::KEvent* availability_change_event = nullptr; + bool is_initalized{}; bool is_data_moddified{}; bool is_app_area_open{}; + bool is_plain_amiibo{}; TagProtocol allowed_protocols{}; s64 current_posix_time{}; MountTarget mount_target{MountTarget::None}; diff --git a/src/core/hle/service/nfp/nfp_types.h b/src/core/hle/service/nfp/nfp_types.h index 142343d6e..70c878552 100644 --- a/src/core/hle/service/nfp/nfp_types.h +++ b/src/core/hle/service/nfp/nfp_types.h @@ -259,8 +259,9 @@ struct EncryptedAmiiboFile { u32_be application_area_id; // Encrypted Game id u8 application_id_byte; u8 unknown; - std::array<u32, 0x7> unknown2; - u32_be application_area_crc; + Service::Mii::NfpStoreDataExtension mii_extension; + std::array<u32, 0x5> unknown2; + u32_be register_info_crc; ApplicationArea application_area; // Encrypted Game data }; static_assert(sizeof(EncryptedAmiiboFile) == 0x1F8, "AmiiboFile is an invalid size"); @@ -280,8 +281,9 @@ struct NTAG215File { u32_be application_area_id; u8 application_id_byte; u8 unknown; - std::array<u32, 0x7> unknown2; - u32_be application_area_crc; + Service::Mii::NfpStoreDataExtension mii_extension; + std::array<u32, 0x5> unknown2; + u32_be register_info_crc; ApplicationArea application_area; // Encrypted Game data HashData hmac_tag; // Hash UniqueSerialNumber uid; // Unique serial number @@ -307,7 +309,8 @@ struct EncryptedNTAG215File { u32 CFG1; // Defines number of verification attempts NTAG215Password password; // Password data }; -static_assert(sizeof(EncryptedNTAG215File) == 0x21C, "EncryptedNTAG215File is an invalid size"); +static_assert(sizeof(EncryptedNTAG215File) == sizeof(NTAG215File), + "EncryptedNTAG215File is an invalid size"); static_assert(std::is_trivially_copyable_v<EncryptedNTAG215File>, "EncryptedNTAG215File must be trivially copyable."); diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp index d2308fffc..453a965dc 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp @@ -304,8 +304,8 @@ NvResult nvhost_gpu::SubmitGPFIFOBase(std::span<const u8> input, std::vector<u8> Tegra::CommandList entries(params.num_entries); if (kickoff) { - system.Memory().ReadBlock(params.address, entries.command_lists.data(), - params.num_entries * sizeof(Tegra::CommandListHeader)); + system.ApplicationMemory().ReadBlock(params.address, entries.command_lists.data(), + params.num_entries * sizeof(Tegra::CommandListHeader)); } else { std::memcpy(entries.command_lists.data(), &input[sizeof(IoctlSubmitGpfifo)], params.num_entries * sizeof(Tegra::CommandListHeader)); diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp index 7bcef105b..1ab51f10b 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp @@ -105,8 +105,8 @@ NvResult nvhost_nvdec_common::Submit(DeviceFD fd, std::span<const u8> input, const auto object = nvmap.GetHandle(cmd_buffer.memory_id); ASSERT_OR_EXECUTE(object, return NvResult::InvalidState;); Tegra::ChCommandHeaderList cmdlist(cmd_buffer.word_count); - system.Memory().ReadBlock(object->address + cmd_buffer.offset, cmdlist.data(), - cmdlist.size() * sizeof(u32)); + system.ApplicationMemory().ReadBlock(object->address + cmd_buffer.offset, cmdlist.data(), + cmdlist.size() * sizeof(u32)); gpu.PushCommandBuffer(core.Host1xDeviceFile().fd_to_id[fd], cmdlist); } std::memcpy(output.data(), ¶ms, sizeof(IoctlSubmit)); diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h index 9421492bc..6e991fa38 100644 --- a/src/core/internal_network/socket_proxy.h +++ b/src/core/internal_network/socket_proxy.h @@ -16,9 +16,6 @@ namespace Network { class ProxySocket : public SocketBase { public: - YUZU_NON_COPYABLE(ProxySocket); - YUZU_NON_MOVEABLE(ProxySocket); - explicit ProxySocket(RoomNetwork& room_network_) noexcept; ~ProxySocket() override; diff --git a/src/core/internal_network/sockets.h b/src/core/internal_network/sockets.h index 4c7489258..11e479e50 100644 --- a/src/core/internal_network/sockets.h +++ b/src/core/internal_network/sockets.h @@ -36,13 +36,10 @@ public: SocketBase() = default; explicit SocketBase(SOCKET fd_) : fd{fd_} {} - virtual ~SocketBase() = default; - virtual SocketBase& operator=(const SocketBase&) = delete; - - // Avoid closing sockets implicitly - virtual SocketBase& operator=(SocketBase&&) noexcept = delete; + YUZU_NON_COPYABLE(SocketBase); + YUZU_NON_MOVEABLE(SocketBase); virtual Errno Initialize(Domain domain, Type type, Protocol protocol) = 0; @@ -109,14 +106,8 @@ public: ~Socket() override; - Socket(const Socket&) = delete; - Socket& operator=(const Socket&) = delete; - Socket(Socket&& rhs) noexcept; - // Avoid closing sockets implicitly - Socket& operator=(Socket&&) noexcept = delete; - Errno Initialize(Domain domain, Type type, Protocol protocol) override; Errno Close() override; diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp index 192571d35..3be9b71cf 100644 --- a/src/core/loader/deconstructed_rom_directory.cpp +++ b/src/core/loader/deconstructed_rom_directory.cpp @@ -153,7 +153,7 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect // Load NSO modules modules.clear(); - const VAddr base_address{process.PageTable().GetCodeRegionStart()}; + const VAddr base_address{GetInteger(process.PageTable().GetCodeRegionStart())}; VAddr next_load_addr{base_address}; const FileSys::PatchManager pm{metadata.GetTitleID(), system.GetFileSystemController(), system.GetContentProvider()}; diff --git a/src/core/loader/kip.cpp b/src/core/loader/kip.cpp index d8a1bf82a..709e2564f 100644 --- a/src/core/loader/kip.cpp +++ b/src/core/loader/kip.cpp @@ -96,7 +96,7 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::KProcess& process, } codeset.memory = std::move(program_image); - const VAddr base_address = process.PageTable().GetCodeRegionStart(); + const VAddr base_address = GetInteger(process.PageTable().GetCodeRegionStart()); process.LoadModule(std::move(codeset), base_address); LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", kip->GetName(), base_address); diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp index a5c384fb5..79639f5e4 100644 --- a/src/core/loader/nso.cpp +++ b/src/core/loader/nso.cpp @@ -167,7 +167,7 @@ AppLoader_NSO::LoadResult AppLoader_NSO::Load(Kernel::KProcess& process, Core::S modules.clear(); // Load module - const VAddr base_address = process.PageTable().GetCodeRegionStart(); + const VAddr base_address = GetInteger(process.PageTable().GetCodeRegionStart()); if (!LoadModule(process, system, *file, base_address, true, true)) { return {ResultStatus::ErrorLoadingNSO, {}}; } diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 4397fcfb1..432310632 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -35,31 +35,35 @@ struct Memory::Impl { system.ArmInterface(core_id).PageTableChanged(*current_page_table, address_space_width); } - void MapMemoryRegion(Common::PageTable& page_table, VAddr base, u64 size, PAddr target) { + void MapMemoryRegion(Common::PageTable& page_table, Common::ProcessAddress base, u64 size, + Common::PhysicalAddress target) { ASSERT_MSG((size & YUZU_PAGEMASK) == 0, "non-page aligned size: {:016X}", size); - ASSERT_MSG((base & YUZU_PAGEMASK) == 0, "non-page aligned base: {:016X}", base); - ASSERT_MSG(target >= DramMemoryMap::Base, "Out of bounds target: {:016X}", target); + ASSERT_MSG((base & YUZU_PAGEMASK) == 0, "non-page aligned base: {:016X}", GetInteger(base)); + ASSERT_MSG(target >= DramMemoryMap::Base, "Out of bounds target: {:016X}", + GetInteger(target)); MapPages(page_table, base / YUZU_PAGESIZE, size / YUZU_PAGESIZE, target, Common::PageType::Memory); if (Settings::IsFastmemEnabled()) { - system.DeviceMemory().buffer.Map(base, target - DramMemoryMap::Base, size); + system.DeviceMemory().buffer.Map(GetInteger(base), + GetInteger(target) - DramMemoryMap::Base, size); } } - void UnmapRegion(Common::PageTable& page_table, VAddr base, u64 size) { + void UnmapRegion(Common::PageTable& page_table, Common::ProcessAddress base, u64 size) { ASSERT_MSG((size & YUZU_PAGEMASK) == 0, "non-page aligned size: {:016X}", size); - ASSERT_MSG((base & YUZU_PAGEMASK) == 0, "non-page aligned base: {:016X}", base); + ASSERT_MSG((base & YUZU_PAGEMASK) == 0, "non-page aligned base: {:016X}", GetInteger(base)); MapPages(page_table, base / YUZU_PAGESIZE, size / YUZU_PAGESIZE, 0, Common::PageType::Unmapped); if (Settings::IsFastmemEnabled()) { - system.DeviceMemory().buffer.Unmap(base, size); + system.DeviceMemory().buffer.Unmap(GetInteger(base), size); } } - [[nodiscard]] u8* GetPointerFromRasterizerCachedMemory(VAddr vaddr) const { - const PAddr paddr{current_page_table->backing_addr[vaddr >> YUZU_PAGEBITS]}; + [[nodiscard]] u8* GetPointerFromRasterizerCachedMemory(u64 vaddr) const { + const Common::PhysicalAddress paddr{ + current_page_table->backing_addr[vaddr >> YUZU_PAGEBITS]}; if (!paddr) { return {}; @@ -68,8 +72,9 @@ struct Memory::Impl { return system.DeviceMemory().GetPointer<u8>(paddr) + vaddr; } - [[nodiscard]] u8* GetPointerFromDebugMemory(VAddr vaddr) const { - const PAddr paddr{current_page_table->backing_addr[vaddr >> YUZU_PAGEBITS]}; + [[nodiscard]] u8* GetPointerFromDebugMemory(u64 vaddr) const { + const Common::PhysicalAddress paddr{ + current_page_table->backing_addr[vaddr >> YUZU_PAGEBITS]}; if (paddr == 0) { return {}; @@ -78,11 +83,11 @@ struct Memory::Impl { return system.DeviceMemory().GetPointer<u8>(paddr) + vaddr; } - u8 Read8(const VAddr addr) { + u8 Read8(const Common::ProcessAddress addr) { return Read<u8>(addr); } - u16 Read16(const VAddr addr) { + u16 Read16(const Common::ProcessAddress addr) { if ((addr & 1) == 0) { return Read<u16_le>(addr); } else { @@ -92,7 +97,7 @@ struct Memory::Impl { } } - u32 Read32(const VAddr addr) { + u32 Read32(const Common::ProcessAddress addr) { if ((addr & 3) == 0) { return Read<u32_le>(addr); } else { @@ -102,7 +107,7 @@ struct Memory::Impl { } } - u64 Read64(const VAddr addr) { + u64 Read64(const Common::ProcessAddress addr) { if ((addr & 7) == 0) { return Read<u64_le>(addr); } else { @@ -112,11 +117,11 @@ struct Memory::Impl { } } - void Write8(const VAddr addr, const u8 data) { + void Write8(const Common::ProcessAddress addr, const u8 data) { Write<u8>(addr, data); } - void Write16(const VAddr addr, const u16 data) { + void Write16(const Common::ProcessAddress addr, const u16 data) { if ((addr & 1) == 0) { Write<u16_le>(addr, data); } else { @@ -125,7 +130,7 @@ struct Memory::Impl { } } - void Write32(const VAddr addr, const u32 data) { + void Write32(const Common::ProcessAddress addr, const u32 data) { if ((addr & 3) == 0) { Write<u32_le>(addr, data); } else { @@ -134,7 +139,7 @@ struct Memory::Impl { } } - void Write64(const VAddr addr, const u64 data) { + void Write64(const Common::ProcessAddress addr, const u64 data) { if ((addr & 7) == 0) { Write<u64_le>(addr, data); } else { @@ -143,23 +148,23 @@ struct Memory::Impl { } } - bool WriteExclusive8(const VAddr addr, const u8 data, const u8 expected) { + bool WriteExclusive8(const Common::ProcessAddress addr, const u8 data, const u8 expected) { return WriteExclusive<u8>(addr, data, expected); } - bool WriteExclusive16(const VAddr addr, const u16 data, const u16 expected) { + bool WriteExclusive16(const Common::ProcessAddress addr, const u16 data, const u16 expected) { return WriteExclusive<u16_le>(addr, data, expected); } - bool WriteExclusive32(const VAddr addr, const u32 data, const u32 expected) { + bool WriteExclusive32(const Common::ProcessAddress addr, const u32 data, const u32 expected) { return WriteExclusive<u32_le>(addr, data, expected); } - bool WriteExclusive64(const VAddr addr, const u64 data, const u64 expected) { + bool WriteExclusive64(const Common::ProcessAddress addr, const u64 data, const u64 expected) { return WriteExclusive<u64_le>(addr, data, expected); } - std::string ReadCString(VAddr vaddr, std::size_t max_length) { + std::string ReadCString(Common::ProcessAddress vaddr, std::size_t max_length) { std::string string; string.reserve(max_length); for (std::size_t i = 0; i < max_length; ++i) { @@ -174,8 +179,9 @@ struct Memory::Impl { return string; } - void WalkBlock(const Kernel::KProcess& process, const VAddr addr, const std::size_t size, - auto on_unmapped, auto on_memory, auto on_rasterizer, auto increment) { + void WalkBlock(const Kernel::KProcess& process, const Common::ProcessAddress addr, + const std::size_t size, auto on_unmapped, auto on_memory, auto on_rasterizer, + auto increment) { const auto& page_table = process.PageTable().PageTableImpl(); std::size_t remaining_size = size; std::size_t page_index = addr >> YUZU_PAGEBITS; @@ -185,7 +191,7 @@ struct Memory::Impl { const std::size_t copy_amount = std::min(static_cast<std::size_t>(YUZU_PAGESIZE) - page_offset, remaining_size); const auto current_vaddr = - static_cast<VAddr>((page_index << YUZU_PAGEBITS) + page_offset); + static_cast<u64>((page_index << YUZU_PAGEBITS) + page_offset); const auto [pointer, type] = page_table.pointers[page_index].PointerType(); switch (type) { @@ -220,24 +226,24 @@ struct Memory::Impl { } template <bool UNSAFE> - void ReadBlockImpl(const Kernel::KProcess& process, const VAddr src_addr, void* dest_buffer, - const std::size_t size) { + void ReadBlockImpl(const Kernel::KProcess& process, const Common::ProcessAddress src_addr, + void* dest_buffer, const std::size_t size) { WalkBlock( process, src_addr, size, [src_addr, size, &dest_buffer](const std::size_t copy_amount, - const VAddr current_vaddr) { + const Common::ProcessAddress current_vaddr) { LOG_ERROR(HW_Memory, "Unmapped ReadBlock @ 0x{:016X} (start address = 0x{:016X}, size = {})", - current_vaddr, src_addr, size); + GetInteger(current_vaddr), GetInteger(src_addr), size); std::memset(dest_buffer, 0, copy_amount); }, [&](const std::size_t copy_amount, const u8* const src_ptr) { std::memcpy(dest_buffer, src_ptr, copy_amount); }, - [&](const VAddr current_vaddr, const std::size_t copy_amount, + [&](const Common::ProcessAddress current_vaddr, const std::size_t copy_amount, const u8* const host_ptr) { if constexpr (!UNSAFE) { - system.GPU().FlushRegion(current_vaddr, copy_amount); + system.GPU().FlushRegion(GetInteger(current_vaddr), copy_amount); } std::memcpy(dest_buffer, host_ptr, copy_amount); }, @@ -246,30 +252,34 @@ struct Memory::Impl { }); } - void ReadBlock(const VAddr src_addr, void* dest_buffer, const std::size_t size) { + void ReadBlock(const Common::ProcessAddress src_addr, void* dest_buffer, + const std::size_t size) { ReadBlockImpl<false>(*system.ApplicationProcess(), src_addr, dest_buffer, size); } - void ReadBlockUnsafe(const VAddr src_addr, void* dest_buffer, const std::size_t size) { + void ReadBlockUnsafe(const Common::ProcessAddress src_addr, void* dest_buffer, + const std::size_t size) { ReadBlockImpl<true>(*system.ApplicationProcess(), src_addr, dest_buffer, size); } template <bool UNSAFE> - void WriteBlockImpl(const Kernel::KProcess& process, const VAddr dest_addr, + void WriteBlockImpl(const Kernel::KProcess& process, const Common::ProcessAddress dest_addr, const void* src_buffer, const std::size_t size) { WalkBlock( process, dest_addr, size, - [dest_addr, size](const std::size_t copy_amount, const VAddr current_vaddr) { + [dest_addr, size](const std::size_t copy_amount, + const Common::ProcessAddress current_vaddr) { LOG_ERROR(HW_Memory, "Unmapped WriteBlock @ 0x{:016X} (start address = 0x{:016X}, size = {})", - current_vaddr, dest_addr, size); + GetInteger(current_vaddr), GetInteger(dest_addr), size); }, [&](const std::size_t copy_amount, u8* const dest_ptr) { std::memcpy(dest_ptr, src_buffer, copy_amount); }, - [&](const VAddr current_vaddr, const std::size_t copy_amount, u8* const host_ptr) { + [&](const Common::ProcessAddress current_vaddr, const std::size_t copy_amount, + u8* const host_ptr) { if constexpr (!UNSAFE) { - system.GPU().InvalidateRegion(current_vaddr, copy_amount); + system.GPU().InvalidateRegion(GetInteger(current_vaddr), copy_amount); } std::memcpy(host_ptr, src_buffer, copy_amount); }, @@ -278,71 +288,77 @@ struct Memory::Impl { }); } - void WriteBlock(const VAddr dest_addr, const void* src_buffer, const std::size_t size) { + void WriteBlock(const Common::ProcessAddress dest_addr, const void* src_buffer, + const std::size_t size) { WriteBlockImpl<false>(*system.ApplicationProcess(), dest_addr, src_buffer, size); } - void WriteBlockUnsafe(const VAddr dest_addr, const void* src_buffer, const std::size_t size) { + void WriteBlockUnsafe(const Common::ProcessAddress dest_addr, const void* src_buffer, + const std::size_t size) { WriteBlockImpl<true>(*system.ApplicationProcess(), dest_addr, src_buffer, size); } - void ZeroBlock(const Kernel::KProcess& process, const VAddr dest_addr, const std::size_t size) { + void ZeroBlock(const Kernel::KProcess& process, const Common::ProcessAddress dest_addr, + const std::size_t size) { WalkBlock( process, dest_addr, size, - [dest_addr, size](const std::size_t copy_amount, const VAddr current_vaddr) { + [dest_addr, size](const std::size_t copy_amount, + const Common::ProcessAddress current_vaddr) { LOG_ERROR(HW_Memory, "Unmapped ZeroBlock @ 0x{:016X} (start address = 0x{:016X}, size = {})", - current_vaddr, dest_addr, size); + GetInteger(current_vaddr), GetInteger(dest_addr), size); }, [](const std::size_t copy_amount, u8* const dest_ptr) { std::memset(dest_ptr, 0, copy_amount); }, - [&](const VAddr current_vaddr, const std::size_t copy_amount, u8* const host_ptr) { - system.GPU().InvalidateRegion(current_vaddr, copy_amount); + [&](const Common::ProcessAddress current_vaddr, const std::size_t copy_amount, + u8* const host_ptr) { + system.GPU().InvalidateRegion(GetInteger(current_vaddr), copy_amount); std::memset(host_ptr, 0, copy_amount); }, [](const std::size_t copy_amount) {}); } - void CopyBlock(const Kernel::KProcess& process, VAddr dest_addr, VAddr src_addr, - const std::size_t size) { + void CopyBlock(const Kernel::KProcess& process, Common::ProcessAddress dest_addr, + Common::ProcessAddress src_addr, const std::size_t size) { WalkBlock( process, dest_addr, size, - [&](const std::size_t copy_amount, const VAddr current_vaddr) { + [&](const std::size_t copy_amount, const Common::ProcessAddress current_vaddr) { LOG_ERROR(HW_Memory, "Unmapped CopyBlock @ 0x{:016X} (start address = 0x{:016X}, size = {})", - current_vaddr, src_addr, size); + GetInteger(current_vaddr), GetInteger(src_addr), size); ZeroBlock(process, dest_addr, copy_amount); }, [&](const std::size_t copy_amount, const u8* const src_ptr) { WriteBlockImpl<false>(process, dest_addr, src_ptr, copy_amount); }, - [&](const VAddr current_vaddr, const std::size_t copy_amount, u8* const host_ptr) { - system.GPU().FlushRegion(current_vaddr, copy_amount); + [&](const Common::ProcessAddress current_vaddr, const std::size_t copy_amount, + u8* const host_ptr) { + system.GPU().FlushRegion(GetInteger(current_vaddr), copy_amount); WriteBlockImpl<false>(process, dest_addr, host_ptr, copy_amount); }, [&](const std::size_t copy_amount) { - dest_addr += static_cast<VAddr>(copy_amount); - src_addr += static_cast<VAddr>(copy_amount); + dest_addr += copy_amount; + src_addr += copy_amount; }); } template <typename Callback> - Result PerformCacheOperation(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size, - Callback&& cb) { + Result PerformCacheOperation(const Kernel::KProcess& process, Common::ProcessAddress dest_addr, + std::size_t size, Callback&& cb) { class InvalidMemoryException : public std::exception {}; try { WalkBlock( process, dest_addr, size, - [&](const std::size_t block_size, const VAddr current_vaddr) { - LOG_ERROR(HW_Memory, "Unmapped cache maintenance @ {:#018X}", current_vaddr); + [&](const std::size_t block_size, const Common::ProcessAddress current_vaddr) { + LOG_ERROR(HW_Memory, "Unmapped cache maintenance @ {:#018X}", + GetInteger(current_vaddr)); throw InvalidMemoryException(); }, [&](const std::size_t block_size, u8* const host_ptr) {}, - [&](const VAddr current_vaddr, const std::size_t block_size, u8* const host_ptr) { - cb(current_vaddr, block_size); - }, + [&](const Common::ProcessAddress current_vaddr, const std::size_t block_size, + u8* const host_ptr) { cb(current_vaddr, block_size); }, [](const std::size_t block_size) {}); } catch (InvalidMemoryException&) { return Kernel::ResultInvalidCurrentMemory; @@ -351,34 +367,40 @@ struct Memory::Impl { return ResultSuccess; } - Result InvalidateDataCache(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size) { - auto on_rasterizer = [&](const VAddr current_vaddr, const std::size_t block_size) { + Result InvalidateDataCache(const Kernel::KProcess& process, Common::ProcessAddress dest_addr, + std::size_t size) { + auto on_rasterizer = [&](const Common::ProcessAddress current_vaddr, + const std::size_t block_size) { // dc ivac: Invalidate to point of coherency // GPU flush -> CPU invalidate - system.GPU().FlushRegion(current_vaddr, block_size); + system.GPU().FlushRegion(GetInteger(current_vaddr), block_size); }; return PerformCacheOperation(process, dest_addr, size, on_rasterizer); } - Result StoreDataCache(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size) { - auto on_rasterizer = [&](const VAddr current_vaddr, const std::size_t block_size) { + Result StoreDataCache(const Kernel::KProcess& process, Common::ProcessAddress dest_addr, + std::size_t size) { + auto on_rasterizer = [&](const Common::ProcessAddress current_vaddr, + const std::size_t block_size) { // dc cvac: Store to point of coherency // CPU flush -> GPU invalidate - system.GPU().InvalidateRegion(current_vaddr, block_size); + system.GPU().InvalidateRegion(GetInteger(current_vaddr), block_size); }; return PerformCacheOperation(process, dest_addr, size, on_rasterizer); } - Result FlushDataCache(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size) { - auto on_rasterizer = [&](const VAddr current_vaddr, const std::size_t block_size) { + Result FlushDataCache(const Kernel::KProcess& process, Common::ProcessAddress dest_addr, + std::size_t size) { + auto on_rasterizer = [&](const Common::ProcessAddress current_vaddr, + const std::size_t block_size) { // dc civac: Store to point of coherency, and invalidate from cache // CPU flush -> GPU invalidate - system.GPU().InvalidateRegion(current_vaddr, block_size); + system.GPU().InvalidateRegion(GetInteger(current_vaddr), block_size); }; return PerformCacheOperation(process, dest_addr, size, on_rasterizer); } - void MarkRegionDebug(VAddr vaddr, u64 size, bool debug) { + void MarkRegionDebug(u64 vaddr, u64 size, bool debug) { if (vaddr == 0) { return; } @@ -434,7 +456,7 @@ struct Memory::Impl { } } - void RasterizerMarkRegionCached(VAddr vaddr, u64 size, bool cached) { + void RasterizerMarkRegionCached(u64 vaddr, u64 size, bool cached) { if (vaddr == 0) { return; } @@ -514,10 +536,12 @@ struct Memory::Impl { * @param target The target address to begin mapping from. * @param type The page type to map the memory as. */ - void MapPages(Common::PageTable& page_table, VAddr base, u64 size, PAddr target, - Common::PageType type) { - LOG_DEBUG(HW_Memory, "Mapping {:016X} onto {:016X}-{:016X}", target, base * YUZU_PAGESIZE, - (base + size) * YUZU_PAGESIZE); + void MapPages(Common::PageTable& page_table, Common::ProcessAddress base_address, u64 size, + Common::PhysicalAddress target, Common::PageType type) { + auto base = GetInteger(base_address); + + LOG_DEBUG(HW_Memory, "Mapping {:016X} onto {:016X}-{:016X}", GetInteger(target), + base * YUZU_PAGESIZE, (base + size) * YUZU_PAGESIZE); // During boot, current_page_table might not be set yet, in which case we need not flush if (system.IsPoweredOn()) { @@ -530,7 +554,7 @@ struct Memory::Impl { } } - const VAddr end = base + size; + const Common::ProcessAddress end = base + size; ASSERT_MSG(end <= page_table.pointers.size(), "out of range mapping at {:016X}", base + page_table.pointers.size()); @@ -548,7 +572,7 @@ struct Memory::Impl { while (base != end) { page_table.pointers[base].Store( system.DeviceMemory().GetPointer<u8>(target) - (base << YUZU_PAGEBITS), type); - page_table.backing_addr[base] = target - (base << YUZU_PAGEBITS); + page_table.backing_addr[base] = GetInteger(target) - (base << YUZU_PAGEBITS); ASSERT_MSG(page_table.pointers[base].Pointer(), "memory mapping base yield a nullptr within the table"); @@ -559,9 +583,9 @@ struct Memory::Impl { } } - [[nodiscard]] u8* GetPointerImpl(VAddr vaddr, auto on_unmapped, auto on_rasterizer) const { + [[nodiscard]] u8* GetPointerImpl(u64 vaddr, auto on_unmapped, auto on_rasterizer) const { // AARCH64 masks the upper 16 bit of all memory accesses - vaddr &= 0xffffffffffffULL; + vaddr = vaddr & 0xffffffffffffULL; if (vaddr >= 1uLL << current_page_table->GetAddressSpaceBits()) { on_unmapped(); @@ -593,15 +617,18 @@ struct Memory::Impl { return nullptr; } - [[nodiscard]] u8* GetPointer(const VAddr vaddr) const { + [[nodiscard]] u8* GetPointer(const Common::ProcessAddress vaddr) const { return GetPointerImpl( - vaddr, [vaddr]() { LOG_ERROR(HW_Memory, "Unmapped GetPointer @ 0x{:016X}", vaddr); }, + GetInteger(vaddr), + [vaddr]() { + LOG_ERROR(HW_Memory, "Unmapped GetPointer @ 0x{:016X}", GetInteger(vaddr)); + }, []() {}); } - [[nodiscard]] u8* GetPointerSilent(const VAddr vaddr) const { + [[nodiscard]] u8* GetPointerSilent(const Common::ProcessAddress vaddr) const { return GetPointerImpl( - vaddr, []() {}, []() {}); + GetInteger(vaddr), []() {}, []() {}); } /** @@ -616,14 +643,15 @@ struct Memory::Impl { * @returns The instance of T read from the specified virtual address. */ template <typename T> - T Read(VAddr vaddr) { + T Read(Common::ProcessAddress vaddr) { T result = 0; const u8* const ptr = GetPointerImpl( - vaddr, + GetInteger(vaddr), [vaddr]() { - LOG_ERROR(HW_Memory, "Unmapped Read{} @ 0x{:016X}", sizeof(T) * 8, vaddr); + LOG_ERROR(HW_Memory, "Unmapped Read{} @ 0x{:016X}", sizeof(T) * 8, + GetInteger(vaddr)); }, - [&]() { system.GPU().FlushRegion(vaddr, sizeof(T)); }); + [&]() { system.GPU().FlushRegion(GetInteger(vaddr), sizeof(T)); }); if (ptr) { std::memcpy(&result, ptr, sizeof(T)); } @@ -640,28 +668,28 @@ struct Memory::Impl { * is undefined. */ template <typename T> - void Write(VAddr vaddr, const T data) { + void Write(Common::ProcessAddress vaddr, const T data) { u8* const ptr = GetPointerImpl( - vaddr, + GetInteger(vaddr), [vaddr, data]() { LOG_ERROR(HW_Memory, "Unmapped Write{} @ 0x{:016X} = 0x{:016X}", sizeof(T) * 8, - vaddr, static_cast<u64>(data)); + GetInteger(vaddr), static_cast<u64>(data)); }, - [&]() { system.GPU().InvalidateRegion(vaddr, sizeof(T)); }); + [&]() { system.GPU().InvalidateRegion(GetInteger(vaddr), sizeof(T)); }); if (ptr) { std::memcpy(ptr, &data, sizeof(T)); } } template <typename T> - bool WriteExclusive(VAddr vaddr, const T data, const T expected) { + bool WriteExclusive(Common::ProcessAddress vaddr, const T data, const T expected) { u8* const ptr = GetPointerImpl( - vaddr, + GetInteger(vaddr), [vaddr, data]() { LOG_ERROR(HW_Memory, "Unmapped WriteExclusive{} @ 0x{:016X} = 0x{:016X}", - sizeof(T) * 8, vaddr, static_cast<u64>(data)); + sizeof(T) * 8, GetInteger(vaddr), static_cast<u64>(data)); }, - [&]() { system.GPU().InvalidateRegion(vaddr, sizeof(T)); }); + [&]() { system.GPU().InvalidateRegion(GetInteger(vaddr), sizeof(T)); }); if (ptr) { const auto volatile_pointer = reinterpret_cast<volatile T*>(ptr); return Common::AtomicCompareAndSwap(volatile_pointer, data, expected); @@ -669,14 +697,14 @@ struct Memory::Impl { return true; } - bool WriteExclusive128(VAddr vaddr, const u128 data, const u128 expected) { + bool WriteExclusive128(Common::ProcessAddress vaddr, const u128 data, const u128 expected) { u8* const ptr = GetPointerImpl( - vaddr, + GetInteger(vaddr), [vaddr, data]() { LOG_ERROR(HW_Memory, "Unmapped WriteExclusive128 @ 0x{:016X} = 0x{:016X}{:016X}", - vaddr, static_cast<u64>(data[1]), static_cast<u64>(data[0])); + GetInteger(vaddr), static_cast<u64>(data[1]), static_cast<u64>(data[0])); }, - [&]() { system.GPU().InvalidateRegion(vaddr, sizeof(u128)); }); + [&]() { system.GPU().InvalidateRegion(GetInteger(vaddr), sizeof(u128)); }); if (ptr) { const auto volatile_pointer = reinterpret_cast<volatile u64*>(ptr); return Common::AtomicCompareAndSwap(volatile_pointer, data, expected); @@ -702,15 +730,16 @@ void Memory::SetCurrentPageTable(Kernel::KProcess& process, u32 core_id) { impl->SetCurrentPageTable(process, core_id); } -void Memory::MapMemoryRegion(Common::PageTable& page_table, VAddr base, u64 size, PAddr target) { +void Memory::MapMemoryRegion(Common::PageTable& page_table, Common::ProcessAddress base, u64 size, + Common::PhysicalAddress target) { impl->MapMemoryRegion(page_table, base, size, target); } -void Memory::UnmapRegion(Common::PageTable& page_table, VAddr base, u64 size) { +void Memory::UnmapRegion(Common::PageTable& page_table, Common::ProcessAddress base, u64 size) { impl->UnmapRegion(page_table, base, size); } -bool Memory::IsValidVirtualAddress(const VAddr vaddr) const { +bool Memory::IsValidVirtualAddress(const Common::ProcessAddress vaddr) const { const Kernel::KProcess& process = *system.ApplicationProcess(); const auto& page_table = process.PageTable().PageTableImpl(); const size_t page = vaddr >> YUZU_PAGEBITS; @@ -722,9 +751,9 @@ bool Memory::IsValidVirtualAddress(const VAddr vaddr) const { type == Common::PageType::DebugMemory; } -bool Memory::IsValidVirtualAddressRange(VAddr base, u64 size) const { - VAddr end = base + size; - VAddr page = Common::AlignDown(base, YUZU_PAGESIZE); +bool Memory::IsValidVirtualAddressRange(Common::ProcessAddress base, u64 size) const { + Common::ProcessAddress end = base + size; + Common::ProcessAddress page = Common::AlignDown(GetInteger(base), YUZU_PAGESIZE); for (; page < end; page += YUZU_PAGESIZE) { if (!IsValidVirtualAddress(page)) { @@ -735,131 +764,121 @@ bool Memory::IsValidVirtualAddressRange(VAddr base, u64 size) const { return true; } -u8* Memory::GetPointer(VAddr vaddr) { +u8* Memory::GetPointer(Common::ProcessAddress vaddr) { return impl->GetPointer(vaddr); } -u8* Memory::GetPointerSilent(VAddr vaddr) { +u8* Memory::GetPointerSilent(Common::ProcessAddress vaddr) { return impl->GetPointerSilent(vaddr); } -const u8* Memory::GetPointer(VAddr vaddr) const { +const u8* Memory::GetPointer(Common::ProcessAddress vaddr) const { return impl->GetPointer(vaddr); } -u8 Memory::Read8(const VAddr addr) { +u8 Memory::Read8(const Common::ProcessAddress addr) { return impl->Read8(addr); } -u16 Memory::Read16(const VAddr addr) { +u16 Memory::Read16(const Common::ProcessAddress addr) { return impl->Read16(addr); } -u32 Memory::Read32(const VAddr addr) { +u32 Memory::Read32(const Common::ProcessAddress addr) { return impl->Read32(addr); } -u64 Memory::Read64(const VAddr addr) { +u64 Memory::Read64(const Common::ProcessAddress addr) { return impl->Read64(addr); } -void Memory::Write8(VAddr addr, u8 data) { +void Memory::Write8(Common::ProcessAddress addr, u8 data) { impl->Write8(addr, data); } -void Memory::Write16(VAddr addr, u16 data) { +void Memory::Write16(Common::ProcessAddress addr, u16 data) { impl->Write16(addr, data); } -void Memory::Write32(VAddr addr, u32 data) { +void Memory::Write32(Common::ProcessAddress addr, u32 data) { impl->Write32(addr, data); } -void Memory::Write64(VAddr addr, u64 data) { +void Memory::Write64(Common::ProcessAddress addr, u64 data) { impl->Write64(addr, data); } -bool Memory::WriteExclusive8(VAddr addr, u8 data, u8 expected) { +bool Memory::WriteExclusive8(Common::ProcessAddress addr, u8 data, u8 expected) { return impl->WriteExclusive8(addr, data, expected); } -bool Memory::WriteExclusive16(VAddr addr, u16 data, u16 expected) { +bool Memory::WriteExclusive16(Common::ProcessAddress addr, u16 data, u16 expected) { return impl->WriteExclusive16(addr, data, expected); } -bool Memory::WriteExclusive32(VAddr addr, u32 data, u32 expected) { +bool Memory::WriteExclusive32(Common::ProcessAddress addr, u32 data, u32 expected) { return impl->WriteExclusive32(addr, data, expected); } -bool Memory::WriteExclusive64(VAddr addr, u64 data, u64 expected) { +bool Memory::WriteExclusive64(Common::ProcessAddress addr, u64 data, u64 expected) { return impl->WriteExclusive64(addr, data, expected); } -bool Memory::WriteExclusive128(VAddr addr, u128 data, u128 expected) { +bool Memory::WriteExclusive128(Common::ProcessAddress addr, u128 data, u128 expected) { return impl->WriteExclusive128(addr, data, expected); } -std::string Memory::ReadCString(VAddr vaddr, std::size_t max_length) { +std::string Memory::ReadCString(Common::ProcessAddress vaddr, std::size_t max_length) { return impl->ReadCString(vaddr, max_length); } -void Memory::ReadBlock(const Kernel::KProcess& process, const VAddr src_addr, void* dest_buffer, +void Memory::ReadBlock(const Common::ProcessAddress src_addr, void* dest_buffer, const std::size_t size) { - impl->ReadBlockImpl<false>(process, src_addr, dest_buffer, size); -} - -void Memory::ReadBlock(const VAddr src_addr, void* dest_buffer, const std::size_t size) { impl->ReadBlock(src_addr, dest_buffer, size); } -void Memory::ReadBlockUnsafe(const VAddr src_addr, void* dest_buffer, const std::size_t size) { +void Memory::ReadBlockUnsafe(const Common::ProcessAddress src_addr, void* dest_buffer, + const std::size_t size) { impl->ReadBlockUnsafe(src_addr, dest_buffer, size); } -void Memory::WriteBlock(const Kernel::KProcess& process, VAddr dest_addr, const void* src_buffer, - std::size_t size) { - impl->WriteBlockImpl<false>(process, dest_addr, src_buffer, size); -} - -void Memory::WriteBlock(const VAddr dest_addr, const void* src_buffer, const std::size_t size) { +void Memory::WriteBlock(const Common::ProcessAddress dest_addr, const void* src_buffer, + const std::size_t size) { impl->WriteBlock(dest_addr, src_buffer, size); } -void Memory::WriteBlockUnsafe(const VAddr dest_addr, const void* src_buffer, +void Memory::WriteBlockUnsafe(const Common::ProcessAddress dest_addr, const void* src_buffer, const std::size_t size) { impl->WriteBlockUnsafe(dest_addr, src_buffer, size); } -void Memory::CopyBlock(const Kernel::KProcess& process, VAddr dest_addr, VAddr src_addr, +void Memory::CopyBlock(Common::ProcessAddress dest_addr, Common::ProcessAddress src_addr, const std::size_t size) { - impl->CopyBlock(process, dest_addr, src_addr, size); + impl->CopyBlock(*system.ApplicationProcess(), dest_addr, src_addr, size); } -void Memory::ZeroBlock(const Kernel::KProcess& process, VAddr dest_addr, const std::size_t size) { - impl->ZeroBlock(process, dest_addr, size); +void Memory::ZeroBlock(Common::ProcessAddress dest_addr, const std::size_t size) { + impl->ZeroBlock(*system.ApplicationProcess(), dest_addr, size); } -Result Memory::InvalidateDataCache(const Kernel::KProcess& process, VAddr dest_addr, - const std::size_t size) { - return impl->InvalidateDataCache(process, dest_addr, size); +Result Memory::InvalidateDataCache(Common::ProcessAddress dest_addr, const std::size_t size) { + return impl->InvalidateDataCache(*system.ApplicationProcess(), dest_addr, size); } -Result Memory::StoreDataCache(const Kernel::KProcess& process, VAddr dest_addr, - const std::size_t size) { - return impl->StoreDataCache(process, dest_addr, size); +Result Memory::StoreDataCache(Common::ProcessAddress dest_addr, const std::size_t size) { + return impl->StoreDataCache(*system.ApplicationProcess(), dest_addr, size); } -Result Memory::FlushDataCache(const Kernel::KProcess& process, VAddr dest_addr, - const std::size_t size) { - return impl->FlushDataCache(process, dest_addr, size); +Result Memory::FlushDataCache(Common::ProcessAddress dest_addr, const std::size_t size) { + return impl->FlushDataCache(*system.ApplicationProcess(), dest_addr, size); } -void Memory::RasterizerMarkRegionCached(VAddr vaddr, u64 size, bool cached) { - impl->RasterizerMarkRegionCached(vaddr, size, cached); +void Memory::RasterizerMarkRegionCached(Common::ProcessAddress vaddr, u64 size, bool cached) { + impl->RasterizerMarkRegionCached(GetInteger(vaddr), size, cached); } -void Memory::MarkRegionDebug(VAddr vaddr, u64 size, bool debug) { - impl->MarkRegionDebug(vaddr, size, debug); +void Memory::MarkRegionDebug(Common::ProcessAddress vaddr, u64 size, bool debug) { + impl->MarkRegionDebug(GetInteger(vaddr), size, debug); } } // namespace Core::Memory diff --git a/src/core/memory.h b/src/core/memory.h index 31fe699d8..72a0be813 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -6,7 +6,7 @@ #include <cstddef> #include <memory> #include <string> -#include "common/common_types.h" +#include "common/typed_address.h" #include "core/hle/result.h" namespace Common { @@ -33,7 +33,7 @@ constexpr u64 YUZU_PAGESIZE = 1ULL << YUZU_PAGEBITS; constexpr u64 YUZU_PAGEMASK = YUZU_PAGESIZE - 1; /// Virtual user-space memory regions -enum : VAddr { +enum : u64 { /// TLS (Thread-Local Storage) related. TLS_ENTRY_SIZE = 0x200, @@ -74,7 +74,8 @@ public: * @param target Buffer with the memory backing the mapping. Must be of length at least * `size`. */ - void MapMemoryRegion(Common::PageTable& page_table, VAddr base, u64 size, PAddr target); + void MapMemoryRegion(Common::PageTable& page_table, Common::ProcessAddress base, u64 size, + Common::PhysicalAddress target); /** * Unmaps a region of the emulated process address space. @@ -83,7 +84,7 @@ public: * @param base The address to begin unmapping at. * @param size The amount of bytes to unmap. */ - void UnmapRegion(Common::PageTable& page_table, VAddr base, u64 size); + void UnmapRegion(Common::PageTable& page_table, Common::ProcessAddress base, u64 size); /** * Checks whether or not the supplied address is a valid virtual @@ -93,7 +94,7 @@ public: * * @returns True if the given virtual address is valid, false otherwise. */ - [[nodiscard]] bool IsValidVirtualAddress(VAddr vaddr) const; + [[nodiscard]] bool IsValidVirtualAddress(Common::ProcessAddress vaddr) const; /** * Checks whether or not the supplied range of addresses are all valid @@ -104,7 +105,7 @@ public: * * @returns True if all bytes in the given range are valid, false otherwise. */ - [[nodiscard]] bool IsValidVirtualAddressRange(VAddr base, u64 size) const; + [[nodiscard]] bool IsValidVirtualAddressRange(Common::ProcessAddress base, u64 size) const; /** * Gets a pointer to the given address. @@ -114,11 +115,11 @@ public: * @returns The pointer to the given address, if the address is valid. * If the address is not valid, nullptr will be returned. */ - u8* GetPointer(VAddr vaddr); - u8* GetPointerSilent(VAddr vaddr); + u8* GetPointer(Common::ProcessAddress vaddr); + u8* GetPointerSilent(Common::ProcessAddress vaddr); template <typename T> - T* GetPointer(VAddr vaddr) { + T* GetPointer(Common::ProcessAddress vaddr) { return reinterpret_cast<T*>(GetPointer(vaddr)); } @@ -130,10 +131,10 @@ public: * @returns The pointer to the given address, if the address is valid. * If the address is not valid, nullptr will be returned. */ - [[nodiscard]] const u8* GetPointer(VAddr vaddr) const; + [[nodiscard]] const u8* GetPointer(Common::ProcessAddress vaddr) const; template <typename T> - const T* GetPointer(VAddr vaddr) const { + const T* GetPointer(Common::ProcessAddress vaddr) const { return reinterpret_cast<T*>(GetPointer(vaddr)); } @@ -145,7 +146,7 @@ public: * * @returns the read 8-bit unsigned value. */ - u8 Read8(VAddr addr); + u8 Read8(Common::ProcessAddress addr); /** * Reads a 16-bit unsigned value from the current process' address space @@ -155,7 +156,7 @@ public: * * @returns the read 16-bit unsigned value. */ - u16 Read16(VAddr addr); + u16 Read16(Common::ProcessAddress addr); /** * Reads a 32-bit unsigned value from the current process' address space @@ -165,7 +166,7 @@ public: * * @returns the read 32-bit unsigned value. */ - u32 Read32(VAddr addr); + u32 Read32(Common::ProcessAddress addr); /** * Reads a 64-bit unsigned value from the current process' address space @@ -175,7 +176,7 @@ public: * * @returns the read 64-bit value. */ - u64 Read64(VAddr addr); + u64 Read64(Common::ProcessAddress addr); /** * Writes an 8-bit unsigned integer to the given virtual address in @@ -186,7 +187,7 @@ public: * * @post The memory at the given virtual address contains the specified data value. */ - void Write8(VAddr addr, u8 data); + void Write8(Common::ProcessAddress addr, u8 data); /** * Writes a 16-bit unsigned integer to the given virtual address in @@ -197,7 +198,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - void Write16(VAddr addr, u16 data); + void Write16(Common::ProcessAddress addr, u16 data); /** * Writes a 32-bit unsigned integer to the given virtual address in @@ -208,7 +209,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - void Write32(VAddr addr, u32 data); + void Write32(Common::ProcessAddress addr, u32 data); /** * Writes a 64-bit unsigned integer to the given virtual address in @@ -219,7 +220,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - void Write64(VAddr addr, u64 data); + void Write64(Common::ProcessAddress addr, u64 data); /** * Writes a 8-bit unsigned integer to the given virtual address in @@ -232,7 +233,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - bool WriteExclusive8(VAddr addr, u8 data, u8 expected); + bool WriteExclusive8(Common::ProcessAddress addr, u8 data, u8 expected); /** * Writes a 16-bit unsigned integer to the given virtual address in @@ -245,7 +246,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - bool WriteExclusive16(VAddr addr, u16 data, u16 expected); + bool WriteExclusive16(Common::ProcessAddress addr, u16 data, u16 expected); /** * Writes a 32-bit unsigned integer to the given virtual address in @@ -258,7 +259,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - bool WriteExclusive32(VAddr addr, u32 data, u32 expected); + bool WriteExclusive32(Common::ProcessAddress addr, u32 data, u32 expected); /** * Writes a 64-bit unsigned integer to the given virtual address in @@ -271,7 +272,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - bool WriteExclusive64(VAddr addr, u64 data, u64 expected); + bool WriteExclusive64(Common::ProcessAddress addr, u64 data, u64 expected); /** * Writes a 128-bit unsigned integer to the given virtual address in @@ -284,7 +285,7 @@ public: * * @post The memory range [addr, sizeof(data)) contains the given data value. */ - bool WriteExclusive128(VAddr addr, u128 data, u128 expected); + bool WriteExclusive128(Common::ProcessAddress addr, u128 data, u128 expected); /** * Reads a null-terminated string from the given virtual address. @@ -301,27 +302,7 @@ public: * * @returns The read string. */ - std::string ReadCString(VAddr vaddr, std::size_t max_length); - - /** - * Reads a contiguous block of bytes from a specified process' address space. - * - * @param process The process to read the data from. - * @param src_addr The virtual address to begin reading from. - * @param dest_buffer The buffer to place the read bytes into. - * @param size The amount of data to read, in bytes. - * - * @note If a size of 0 is specified, then this function reads nothing and - * no attempts to access memory are made at all. - * - * @pre dest_buffer must be at least size bytes in length, otherwise a - * buffer overrun will occur. - * - * @post The range [dest_buffer, size) contains the read bytes from the - * process' address space. - */ - void ReadBlock(const Kernel::KProcess& process, VAddr src_addr, void* dest_buffer, - std::size_t size); + std::string ReadCString(Common::ProcessAddress vaddr, std::size_t max_length); /** * Reads a contiguous block of bytes from the current process' address space. @@ -339,7 +320,7 @@ public: * @post The range [dest_buffer, size) contains the read bytes from the * current process' address space. */ - void ReadBlock(VAddr src_addr, void* dest_buffer, std::size_t size); + void ReadBlock(Common::ProcessAddress src_addr, void* dest_buffer, std::size_t size); /** * Reads a contiguous block of bytes from the current process' address space. @@ -358,30 +339,7 @@ public: * @post The range [dest_buffer, size) contains the read bytes from the * current process' address space. */ - void ReadBlockUnsafe(VAddr src_addr, void* dest_buffer, std::size_t size); - - /** - * Writes a range of bytes into a given process' address space at the specified - * virtual address. - * - * @param process The process to write data into the address space of. - * @param dest_addr The destination virtual address to begin writing the data at. - * @param src_buffer The data to write into the process' address space. - * @param size The size of the data to write, in bytes. - * - * @post The address range [dest_addr, size) in the process' address space - * contains the data that was within src_buffer. - * - * @post If an attempt is made to write into an unmapped region of memory, the writes - * will be ignored and an error will be logged. - * - * @post If a write is performed into a region of memory that is considered cached - * rasterizer memory, will cause the currently active rasterizer to be notified - * and will mark that region as invalidated to caches that the active - * graphics backend may be maintaining over the course of execution. - */ - void WriteBlock(const Kernel::KProcess& process, VAddr dest_addr, const void* src_buffer, - std::size_t size); + void ReadBlockUnsafe(Common::ProcessAddress src_addr, void* dest_buffer, std::size_t size); /** * Writes a range of bytes into the current process' address space at the specified @@ -402,7 +360,7 @@ public: * and will mark that region as invalidated to caches that the active * graphics backend may be maintaining over the course of execution. */ - void WriteBlock(VAddr dest_addr, const void* src_buffer, std::size_t size); + void WriteBlock(Common::ProcessAddress dest_addr, const void* src_buffer, std::size_t size); /** * Writes a range of bytes into the current process' address space at the specified @@ -420,13 +378,13 @@ public: * will be ignored and an error will be logged. * */ - void WriteBlockUnsafe(VAddr dest_addr, const void* src_buffer, std::size_t size); + void WriteBlockUnsafe(Common::ProcessAddress dest_addr, const void* src_buffer, + std::size_t size); /** * Copies data within a process' address space to another location within the * same address space. * - * @param process The process that will have data copied within its address space. * @param dest_addr The destination virtual address to begin copying the data into. * @param src_addr The source virtual address to begin copying the data from. * @param size The size of the data to copy, in bytes. @@ -434,54 +392,50 @@ public: * @post The range [dest_addr, size) within the process' address space contains the * same data within the range [src_addr, size). */ - void CopyBlock(const Kernel::KProcess& process, VAddr dest_addr, VAddr src_addr, + void CopyBlock(Common::ProcessAddress dest_addr, Common::ProcessAddress src_addr, std::size_t size); /** * Zeros a range of bytes within the current process' address space at the specified * virtual address. * - * @param process The process that will have data zeroed within its address space. * @param dest_addr The destination virtual address to zero the data from. * @param size The size of the range to zero out, in bytes. * * @post The range [dest_addr, size) within the process' address space contains the * value 0. */ - void ZeroBlock(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size); + void ZeroBlock(Common::ProcessAddress dest_addr, std::size_t size); /** * Invalidates a range of bytes within the current process' address space at the specified * virtual address. * - * @param process The process that will have data invalidated within its address space. * @param dest_addr The destination virtual address to invalidate the data from. * @param size The size of the range to invalidate, in bytes. * */ - Result InvalidateDataCache(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size); + Result InvalidateDataCache(Common::ProcessAddress dest_addr, std::size_t size); /** * Stores a range of bytes within the current process' address space at the specified * virtual address. * - * @param process The process that will have data stored within its address space. * @param dest_addr The destination virtual address to store the data from. * @param size The size of the range to store, in bytes. * */ - Result StoreDataCache(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size); + Result StoreDataCache(Common::ProcessAddress dest_addr, std::size_t size); /** * Flushes a range of bytes within the current process' address space at the specified * virtual address. * - * @param process The process that will have data flushed within its address space. * @param dest_addr The destination virtual address to flush the data from. * @param size The size of the range to flush, in bytes. * */ - Result FlushDataCache(const Kernel::KProcess& process, VAddr dest_addr, std::size_t size); + Result FlushDataCache(Common::ProcessAddress dest_addr, std::size_t size); /** * Marks each page within the specified address range as cached or uncached. @@ -491,7 +445,7 @@ public: * @param cached Whether or not any pages within the address range should be * marked as cached or uncached. */ - void RasterizerMarkRegionCached(VAddr vaddr, u64 size, bool cached); + void RasterizerMarkRegionCached(Common::ProcessAddress vaddr, u64 size, bool cached); /** * Marks each page within the specified address range as debug or non-debug. @@ -502,7 +456,7 @@ public: * @param debug Whether or not any pages within the address range should be * marked as debug or non-debug. */ - void MarkRegionDebug(VAddr vaddr, u64 size, bool debug); + void MarkRegionDebug(Common::ProcessAddress vaddr, u64 size, bool debug); private: Core::System& system; diff --git a/src/core/memory/cheat_engine.cpp b/src/core/memory/cheat_engine.cpp index de729955f..8742dd164 100644 --- a/src/core/memory/cheat_engine.cpp +++ b/src/core/memory/cheat_engine.cpp @@ -39,11 +39,11 @@ StandardVmCallbacks::StandardVmCallbacks(System& system_, const CheatProcessMeta StandardVmCallbacks::~StandardVmCallbacks() = default; void StandardVmCallbacks::MemoryRead(VAddr address, void* data, u64 size) { - system.Memory().ReadBlock(SanitizeAddress(address), data, size); + system.ApplicationMemory().ReadBlock(SanitizeAddress(address), data, size); } void StandardVmCallbacks::MemoryWrite(VAddr address, const void* data, u64 size) { - system.Memory().WriteBlock(SanitizeAddress(address), data, size); + system.ApplicationMemory().WriteBlock(SanitizeAddress(address), data, size); } u64 StandardVmCallbacks::HidKeysDown() { @@ -201,17 +201,17 @@ void CheatEngine::Initialize() { const auto& page_table = system.ApplicationProcess()->PageTable(); metadata.heap_extents = { - .base = page_table.GetHeapRegionStart(), + .base = GetInteger(page_table.GetHeapRegionStart()), .size = page_table.GetHeapRegionSize(), }; metadata.address_space_extents = { - .base = page_table.GetAddressSpaceStart(), + .base = GetInteger(page_table.GetAddressSpaceStart()), .size = page_table.GetAddressSpaceSize(), }; metadata.alias_extents = { - .base = page_table.GetAliasCodeRegionStart(), + .base = GetInteger(page_table.GetAliasCodeRegionStart()), .size = page_table.GetAliasCodeRegionSize(), }; diff --git a/src/core/reporter.cpp b/src/core/reporter.cpp index 004f2e57a..6c3dc7369 100644 --- a/src/core/reporter.cpp +++ b/src/core/reporter.cpp @@ -117,8 +117,8 @@ json GetProcessorStateDataAuto(Core::System& system) { arm.SaveContext(context); return GetProcessorStateData(process->Is64BitProcess() ? "AArch64" : "AArch32", - process->PageTable().GetCodeRegionStart(), context.sp, context.pc, - context.pstate, context.cpu_registers); + GetInteger(process->PageTable().GetCodeRegionStart()), context.sp, + context.pc, context.pstate, context.cpu_registers); } json GetBacktraceData(Core::System& system) { @@ -264,7 +264,7 @@ void Reporter::SaveUnimplementedFunctionReport(Service::HLERequestContext& ctx, const auto title_id = system.GetApplicationProcessProgramID(); auto out = GetFullDataAuto(timestamp, title_id, system); - auto function_out = GetHLERequestContextData(ctx, system.Memory()); + auto function_out = GetHLERequestContextData(ctx, system.ApplicationMemory()); function_out["command_id"] = command_id; function_out["function_name"] = name; function_out["service_name"] = service_name; diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index ae84408bc..39b774c98 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -4,6 +4,7 @@ add_executable(tests common/bit_field.cpp common/cityhash.cpp + common/container_hash.cpp common/fibers.cpp common/host_memory.cpp common/param_package.cpp diff --git a/src/tests/common/container_hash.cpp b/src/tests/common/container_hash.cpp new file mode 100644 index 000000000..dc45565ef --- /dev/null +++ b/src/tests/common/container_hash.cpp @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <catch2/catch_test_macros.hpp> + +#include "common/common_types.h" +#include "common/container_hash.h" + +TEST_CASE("ContainerHash", "[common]") { + constexpr std::array<u8, 32> U8Values{ + 114, 10, 238, 189, 199, 242, 86, 96, 53, 193, 195, 247, 249, 56, 253, 61, + 205, 3, 172, 4, 210, 197, 43, 72, 103, 8, 99, 89, 5, 97, 68, 196, + }; + constexpr std::array<u16, 32> U16Values{ + 61586, 49151, 3313, 11641, 31695, 54795, 46764, 20965, 23287, 14039, 19265, + 49093, 58932, 22518, 27139, 42825, 57417, 54237, 48057, 14586, 42813, 32994, + 33970, 45501, 5619, 15895, 33227, 27509, 25391, 37275, 60218, 17599, + }; + constexpr std::array<u32, 32> U32Values{ + 3838402410U, 2029146863U, 1730869921U, 985528872U, 186773874U, 2094639868U, 3324775932U, + 1795512424U, 2571165571U, 3256934519U, 2358691590U, 2752682538U, 1484336451U, 378124520U, + 3463015699U, 3395942161U, 1263211979U, 3473632889U, 3039822212U, 2068707357U, 2223837919U, + 1823232191U, 1583884041U, 1264393380U, 4087566993U, 3188607101U, 3933680362U, 1464520765U, + 1786838406U, 1311734848U, 2773642241U, 3993641692U, + }; + constexpr std::array<u64, 32> U64Values{ + 5908025796157537817ULL, 10947547850358315100ULL, 844798943576724669ULL, + 7999662937458523703ULL, 4006550374705895164ULL, 1832550525423503632ULL, + 9323088254855830976ULL, 12028890075598379412ULL, 6021511300787826236ULL, + 7864675007938747948ULL, 18099387408859708806ULL, 6438638299316820708ULL, + 9029399285648501543ULL, 18195459433089960253ULL, 17214335092761966083ULL, + 5549347964591337833ULL, 14899526073304962015ULL, 5058883181561464475ULL, + 7436311795731206973ULL, 7535129567768649864ULL, 1287169596809258072ULL, + 8237671246353565927ULL, 1715230541978016153ULL, 8443157615068813300ULL, + 6098675262328527839ULL, 704652094100376853ULL, 1303411723202926503ULL, + 7808312933946424854ULL, 6863726670433556594ULL, 9870361541383217495ULL, + 9273671094091079488ULL, 17541434976160119010ULL, + }; + + REQUIRE(Common::HashValue(U8Values) == 5867183267093890552ULL); + REQUIRE(Common::HashValue(U16Values) == 9594135570564347135ULL); + REQUIRE(Common::HashValue(U32Values) == 13123757214696618460ULL); + REQUIRE(Common::HashValue(U64Values) == 7296500016546938380ULL); +} diff --git a/src/tests/common/range_map.cpp b/src/tests/common/range_map.cpp index d301ac5f6..faaefd49f 100644 --- a/src/tests/common/range_map.cpp +++ b/src/tests/common/range_map.cpp @@ -21,9 +21,9 @@ TEST_CASE("Range Map: Setup", "[video_core]") { my_map.Map(4000, 4500, MappedEnum::Valid_2); my_map.Map(4200, 4400, MappedEnum::Valid_2); my_map.Map(4200, 4400, MappedEnum::Valid_1); - REQUIRE(my_map.GetContinousSizeFrom(4200) == 200); - REQUIRE(my_map.GetContinousSizeFrom(3000) == 200); - REQUIRE(my_map.GetContinousSizeFrom(2900) == 0); + REQUIRE(my_map.GetContinuousSizeFrom(4200) == 200); + REQUIRE(my_map.GetContinuousSizeFrom(3000) == 200); + REQUIRE(my_map.GetContinuousSizeFrom(2900) == 0); REQUIRE(my_map.GetValueAt(2900) == MappedEnum::Invalid); REQUIRE(my_map.GetValueAt(3100) == MappedEnum::Valid_1); @@ -38,20 +38,20 @@ TEST_CASE("Range Map: Setup", "[video_core]") { my_map.Unmap(0, 6000); for (u64 address = 0; address < 10000; address += 1000) { - REQUIRE(my_map.GetContinousSizeFrom(address) == 0); + REQUIRE(my_map.GetContinuousSizeFrom(address) == 0); } my_map.Map(1000, 3000, MappedEnum::Valid_1); my_map.Map(4000, 5000, MappedEnum::Valid_1); my_map.Map(2500, 4100, MappedEnum::Valid_1); - REQUIRE(my_map.GetContinousSizeFrom(1000) == 4000); + REQUIRE(my_map.GetContinuousSizeFrom(1000) == 4000); my_map.Map(1000, 3000, MappedEnum::Valid_1); my_map.Map(4000, 5000, MappedEnum::Valid_2); my_map.Map(2500, 4100, MappedEnum::Valid_3); - REQUIRE(my_map.GetContinousSizeFrom(1000) == 1500); - REQUIRE(my_map.GetContinousSizeFrom(2500) == 1600); - REQUIRE(my_map.GetContinousSizeFrom(4100) == 900); + REQUIRE(my_map.GetContinuousSizeFrom(1000) == 1500); + REQUIRE(my_map.GetContinuousSizeFrom(2500) == 1600); + REQUIRE(my_map.GetContinuousSizeFrom(4100) == 900); REQUIRE(my_map.GetValueAt(900) == MappedEnum::Invalid); REQUIRE(my_map.GetValueAt(1000) == MappedEnum::Valid_1); REQUIRE(my_map.GetValueAt(2500) == MappedEnum::Valid_3); @@ -59,8 +59,8 @@ TEST_CASE("Range Map: Setup", "[video_core]") { REQUIRE(my_map.GetValueAt(5000) == MappedEnum::Invalid); my_map.Map(2000, 6000, MappedEnum::Valid_3); - REQUIRE(my_map.GetContinousSizeFrom(1000) == 1000); - REQUIRE(my_map.GetContinousSizeFrom(3000) == 3000); + REQUIRE(my_map.GetContinuousSizeFrom(1000) == 1000); + REQUIRE(my_map.GetContinuousSizeFrom(3000) == 3000); REQUIRE(my_map.GetValueAt(1000) == MappedEnum::Valid_1); REQUIRE(my_map.GetValueAt(1999) == MappedEnum::Valid_1); REQUIRE(my_map.GetValueAt(1500) == MappedEnum::Valid_1); diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 1f656ffa8..abdc593df 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -1442,7 +1442,7 @@ void BufferCache<P>::UpdateVertexBuffer(u32 index) { } if (!gpu_memory->IsWithinGPUAddressRange(gpu_addr_end)) { address_size = - static_cast<u32>(gpu_memory->MaxContinousRange(gpu_addr_begin, address_size)); + static_cast<u32>(gpu_memory->MaxContinuousRange(gpu_addr_begin, address_size)); } const u32 size = address_size; // TODO: Analyze stride and number of vertices vertex_buffers[index] = Binding{ diff --git a/src/video_core/gpu_thread.cpp b/src/video_core/gpu_thread.cpp index 050b11874..3c5317777 100644 --- a/src/video_core/gpu_thread.cpp +++ b/src/video_core/gpu_thread.cpp @@ -31,8 +31,10 @@ static void RunThread(std::stop_token stop_token, Core::System& system, auto current_context = context.Acquire(); VideoCore::RasterizerInterface* const rasterizer = renderer.ReadRasterizer(); + CommandDataContainer next; + while (!stop_token.stop_requested()) { - CommandDataContainer next = state.queue.PopWait(stop_token); + state.queue.PopWait(next, stop_token); if (stop_token.stop_requested()) { break; } @@ -116,7 +118,7 @@ u64 ThreadManager::PushCommand(CommandData&& command_data, bool block) { std::unique_lock lk(state.write_lock); const u64 fence{++state.last_fence}; - state.queue.Push(CommandDataContainer(std::move(command_data), fence, block)); + state.queue.EmplaceWait(std::move(command_data), fence, block); if (block) { Common::CondvarWait(state.cv, lk, thread.get_stop_token(), [this, fence] { diff --git a/src/video_core/gpu_thread.h b/src/video_core/gpu_thread.h index 90bcb5958..43940bd6d 100644 --- a/src/video_core/gpu_thread.h +++ b/src/video_core/gpu_thread.h @@ -10,8 +10,8 @@ #include <thread> #include <variant> +#include "common/bounded_threadsafe_queue.h" #include "common/polyfill_thread.h" -#include "common/threadsafe_queue.h" #include "video_core/framebuffer_config.h" namespace Tegra { @@ -97,7 +97,7 @@ struct CommandDataContainer { /// Struct used to synchronize the GPU thread struct SynchState final { - using CommandQueue = Common::MPSCQueue<CommandDataContainer, true>; + using CommandQueue = Common::MPSCQueue<CommandDataContainer>; std::mutex write_lock; CommandQueue queue; u64 last_fence{}; diff --git a/src/video_core/macro/macro.cpp b/src/video_core/macro/macro.cpp index 82ad0477d..905505ca1 100644 --- a/src/video_core/macro/macro.cpp +++ b/src/video_core/macro/macro.cpp @@ -6,7 +6,7 @@ #include <optional> #include <span> -#include <boost/container_hash/hash.hpp> +#include "common/container_hash.h" #include <fstream> #include "common/assert.h" @@ -89,7 +89,7 @@ void MacroEngine::Execute(u32 method, const std::vector<u32>& parameters) { if (!mid_method.has_value()) { cache_info.lle_program = Compile(macro_code->second); - cache_info.hash = boost::hash_value(macro_code->second); + cache_info.hash = Common::HashValue(macro_code->second); if (Settings::values.dump_macros) { Dump(cache_info.hash, macro_code->second); } @@ -100,7 +100,7 @@ void MacroEngine::Execute(u32 method, const std::vector<u32>& parameters) { code.resize(macro_cached.size() - rebased_method); std::memcpy(code.data(), macro_cached.data() + rebased_method, code.size() * sizeof(u32)); - cache_info.hash = boost::hash_value(code); + cache_info.hash = Common::HashValue(code); cache_info.lle_program = Compile(code); if (Settings::values.dump_macros) { Dump(cache_info.hash, code); diff --git a/src/video_core/memory_manager.cpp b/src/video_core/memory_manager.cpp index 83924475b..01fb5b546 100644 --- a/src/video_core/memory_manager.cpp +++ b/src/video_core/memory_manager.cpp @@ -22,7 +22,7 @@ std::atomic<size_t> MemoryManager::unique_identifier_generator{}; MemoryManager::MemoryManager(Core::System& system_, u64 address_space_bits_, u64 big_page_bits_, u64 page_bits_) - : system{system_}, memory{system.Memory()}, device_memory{system.DeviceMemory()}, + : system{system_}, memory{system.ApplicationMemory()}, device_memory{system.DeviceMemory()}, address_space_bits{address_space_bits_}, page_bits{page_bits_}, big_page_bits{big_page_bits_}, entries{}, big_entries{}, page_table{address_space_bits, address_space_bits + page_bits - 38, page_bits != big_page_bits ? page_bits : 0}, @@ -43,7 +43,7 @@ MemoryManager::MemoryManager(Core::System& system_, u64 address_space_bits_, u64 big_entries.resize(big_page_table_size / 32, 0); big_page_table_cpu.resize(big_page_table_size); - big_page_continous.resize(big_page_table_size / continous_bits, 0); + big_page_continuous.resize(big_page_table_size / continuous_bits, 0); entries.resize(page_table_size / 32, 0); } @@ -85,17 +85,17 @@ PTEKind MemoryManager::GetPageKind(GPUVAddr gpu_addr) const { return kind_map.GetValueAt(gpu_addr); } -inline bool MemoryManager::IsBigPageContinous(size_t big_page_index) const { - const u64 entry_mask = big_page_continous[big_page_index / continous_bits]; - const size_t sub_index = big_page_index % continous_bits; +inline bool MemoryManager::IsBigPageContinuous(size_t big_page_index) const { + const u64 entry_mask = big_page_continuous[big_page_index / continuous_bits]; + const size_t sub_index = big_page_index % continuous_bits; return ((entry_mask >> sub_index) & 0x1ULL) != 0; } -inline void MemoryManager::SetBigPageContinous(size_t big_page_index, bool value) { - const u64 continous_mask = big_page_continous[big_page_index / continous_bits]; - const size_t sub_index = big_page_index % continous_bits; - big_page_continous[big_page_index / continous_bits] = - (~(1ULL << sub_index) & continous_mask) | (value ? 1ULL << sub_index : 0); +inline void MemoryManager::SetBigPageContinuous(size_t big_page_index, bool value) { + const u64 continuous_mask = big_page_continuous[big_page_index / continuous_bits]; + const size_t sub_index = big_page_index % continuous_bits; + big_page_continuous[big_page_index / continuous_bits] = + (~(1ULL << sub_index) & continuous_mask) | (value ? 1ULL << sub_index : 0); } template <MemoryManager::EntryType entry_type> @@ -140,7 +140,7 @@ GPUVAddr MemoryManager::BigPageTableOp(GPUVAddr gpu_addr, [[maybe_unused]] VAddr const auto index = PageEntryIndex<true>(current_gpu_addr); const u32 sub_value = static_cast<u32>(current_cpu_addr >> cpu_page_bits); big_page_table_cpu[index] = sub_value; - const bool is_continous = ([&] { + const bool is_continuous = ([&] { uintptr_t base_ptr{ reinterpret_cast<uintptr_t>(memory.GetPointerSilent(current_cpu_addr))}; if (base_ptr == 0) { @@ -156,7 +156,7 @@ GPUVAddr MemoryManager::BigPageTableOp(GPUVAddr gpu_addr, [[maybe_unused]] VAddr } return true; })(); - SetBigPageContinous(index, is_continous); + SetBigPageContinuous(index, is_continuous); } remaining_size -= big_page_size; } @@ -378,7 +378,7 @@ void MemoryManager::ReadBlockImpl(GPUVAddr gpu_src_addr, void* dest_buffer, std: if constexpr (is_safe) { rasterizer->FlushRegion(cpu_addr_base, copy_amount, which); } - if (!IsBigPageContinous(page_index)) [[unlikely]] { + if (!IsBigPageContinuous(page_index)) [[unlikely]] { memory.ReadBlockUnsafe(cpu_addr_base, dest_buffer, copy_amount); } else { u8* physical = memory.GetPointer(cpu_addr_base); @@ -427,7 +427,7 @@ void MemoryManager::WriteBlockImpl(GPUVAddr gpu_dest_addr, const void* src_buffe if constexpr (is_safe) { rasterizer->InvalidateRegion(cpu_addr_base, copy_amount, which); } - if (!IsBigPageContinous(page_index)) [[unlikely]] { + if (!IsBigPageContinuous(page_index)) [[unlikely]] { memory.WriteBlockUnsafe(cpu_addr_base, src_buffer, copy_amount); } else { u8* physical = memory.GetPointer(cpu_addr_base); @@ -512,7 +512,7 @@ bool MemoryManager::IsMemoryDirty(GPUVAddr gpu_addr, size_t size, return result; } -size_t MemoryManager::MaxContinousRange(GPUVAddr gpu_addr, size_t size) const { +size_t MemoryManager::MaxContinuousRange(GPUVAddr gpu_addr, size_t size) const { std::optional<VAddr> old_page_addr{}; size_t range_so_far = 0; bool result{false}; @@ -553,7 +553,7 @@ size_t MemoryManager::MaxContinousRange(GPUVAddr gpu_addr, size_t size) const { } size_t MemoryManager::GetMemoryLayoutSize(GPUVAddr gpu_addr, size_t max_size) const { - return kind_map.GetContinousSizeFrom(gpu_addr); + return kind_map.GetContinuousSizeFrom(gpu_addr); } void MemoryManager::InvalidateRegion(GPUVAddr gpu_addr, size_t size, @@ -594,7 +594,7 @@ void MemoryManager::CopyBlock(GPUVAddr gpu_dest_addr, GPUVAddr gpu_src_addr, std bool MemoryManager::IsGranularRange(GPUVAddr gpu_addr, std::size_t size) const { if (GetEntry<true>(gpu_addr) == EntryType::Mapped) [[likely]] { size_t page_index = gpu_addr >> big_page_bits; - if (IsBigPageContinous(page_index)) [[likely]] { + if (IsBigPageContinuous(page_index)) [[likely]] { const std::size_t page{(page_index & big_page_mask) + size}; return page <= big_page_size; } @@ -608,7 +608,7 @@ bool MemoryManager::IsGranularRange(GPUVAddr gpu_addr, std::size_t size) const { return page <= Core::Memory::YUZU_PAGESIZE; } -bool MemoryManager::IsContinousRange(GPUVAddr gpu_addr, std::size_t size) const { +bool MemoryManager::IsContinuousRange(GPUVAddr gpu_addr, std::size_t size) const { std::optional<VAddr> old_page_addr{}; bool result{true}; auto fail = [&]([[maybe_unused]] std::size_t page_index, [[maybe_unused]] std::size_t offset, diff --git a/src/video_core/memory_manager.h b/src/video_core/memory_manager.h index 51ae2de68..fbbe856c4 100644 --- a/src/video_core/memory_manager.h +++ b/src/video_core/memory_manager.h @@ -94,7 +94,7 @@ public: /** * Checks if a gpu region is mapped by a single range of cpu addresses. */ - [[nodiscard]] bool IsContinousRange(GPUVAddr gpu_addr, std::size_t size) const; + [[nodiscard]] bool IsContinuousRange(GPUVAddr gpu_addr, std::size_t size) const; /** * Checks if a gpu region is mapped entirely. @@ -123,7 +123,7 @@ public: bool IsMemoryDirty(GPUVAddr gpu_addr, size_t size, VideoCommon::CacheType which = VideoCommon::CacheType::All) const; - size_t MaxContinousRange(GPUVAddr gpu_addr, size_t size) const; + size_t MaxContinuousRange(GPUVAddr gpu_addr, size_t size) const; bool IsWithinGPUAddressRange(GPUVAddr gpu_addr) const { return gpu_addr < address_space_size; @@ -158,8 +158,8 @@ private: } } - inline bool IsBigPageContinous(size_t big_page_index) const; - inline void SetBigPageContinous(size_t big_page_index, bool value); + inline bool IsBigPageContinuous(size_t big_page_index) const; + inline void SetBigPageContinuous(size_t big_page_index, bool value); template <bool is_gpu_address> void GetSubmappedRangeImpl( @@ -213,10 +213,10 @@ private: Common::RangeMap<GPUVAddr, PTEKind> kind_map; Common::VirtualBuffer<u32> big_page_table_cpu; - std::vector<u64> big_page_continous; + std::vector<u64> big_page_continuous; std::vector<std::pair<VAddr, std::size_t>> page_stash{}; - static constexpr size_t continous_bits = 64; + static constexpr size_t continuous_bits = 64; const size_t unique_identifier; std::unique_ptr<VideoCommon::InvalidationAccumulator> accumulator; diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp index ca52e2389..5dce51be8 100644 --- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp +++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp @@ -166,7 +166,7 @@ struct FormatTuple { {VK_FORMAT_R16G16_UINT, Attachable | Storage}, // R16G16_UINT {VK_FORMAT_R16G16_SINT, Attachable | Storage}, // R16G16_SINT {VK_FORMAT_R16G16_SNORM, Attachable | Storage}, // R16G16_SNORM - {VK_FORMAT_UNDEFINED}, // R32G32B32_FLOAT + {VK_FORMAT_R32G32B32_SFLOAT}, // R32G32B32_FLOAT {VK_FORMAT_A8B8G8R8_SRGB_PACK32, Attachable}, // A8B8G8R8_SRGB {VK_FORMAT_R8G8_UNORM, Attachable | Storage}, // R8G8_UNORM {VK_FORMAT_R8G8_SNORM, Attachable | Storage}, // R8G8_SNORM @@ -234,11 +234,6 @@ FormatInfo SurfaceFormat(const Device& device, FormatType format_type, bool with PixelFormat pixel_format) { ASSERT(static_cast<size_t>(pixel_format) < std::size(tex_format_tuples)); FormatTuple tuple = tex_format_tuples[static_cast<size_t>(pixel_format)]; - if (tuple.format == VK_FORMAT_UNDEFINED) { - UNIMPLEMENTED_MSG("Unimplemented texture format with pixel format={}", pixel_format); - return FormatInfo{VK_FORMAT_A8B8G8R8_UNORM_PACK32, true, true}; - } - // Use A8B8G8R8_UNORM on hardware that doesn't support ASTC natively if (!device.IsOptimalAstcSupported() && VideoCore::Surface::IsPixelFormatASTC(pixel_format)) { const bool is_srgb = with_srgb && VideoCore::Surface::IsPixelFormatSRGB(pixel_format); diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index e03685af1..b264e6ada 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -47,14 +47,15 @@ Scheduler::Scheduler(const Device& device_, StateTracker& state_tracker_) Scheduler::~Scheduler() = default; void Scheduler::Flush(VkSemaphore signal_semaphore, VkSemaphore wait_semaphore) { + // When flushing, we only send data to the worker thread; no waiting is necessary. SubmitExecution(signal_semaphore, wait_semaphore); AllocateNewContext(); } void Scheduler::Finish(VkSemaphore signal_semaphore, VkSemaphore wait_semaphore) { + // When finishing, we need to wait for the submission to have executed on the device. const u64 presubmit_tick = CurrentTick(); SubmitExecution(signal_semaphore, wait_semaphore); - WaitWorker(); Wait(presubmit_tick); AllocateNewContext(); } @@ -63,8 +64,14 @@ void Scheduler::WaitWorker() { MICROPROFILE_SCOPE(Vulkan_WaitForWorker); DispatchWork(); - std::unique_lock lock{work_mutex}; - wait_cv.wait(lock, [this] { return work_queue.empty(); }); + // Ensure the queue is drained. + { + std::unique_lock ql{queue_mutex}; + event_cv.wait(ql, [this] { return work_queue.empty(); }); + } + + // Now wait for execution to finish. + std::scoped_lock el{execution_mutex}; } void Scheduler::DispatchWork() { @@ -72,10 +79,10 @@ void Scheduler::DispatchWork() { return; } { - std::scoped_lock lock{work_mutex}; + std::scoped_lock ql{queue_mutex}; work_queue.push(std::move(chunk)); } - work_cv.notify_one(); + event_cv.notify_all(); AcquireNewChunk(); } @@ -137,30 +144,55 @@ bool Scheduler::UpdateRescaling(bool is_rescaling) { void Scheduler::WorkerThread(std::stop_token stop_token) { Common::SetCurrentThreadName("VulkanWorker"); - do { + + const auto TryPopQueue{[this](auto& work) -> bool { + if (work_queue.empty()) { + return false; + } + + work = std::move(work_queue.front()); + work_queue.pop(); + event_cv.notify_all(); + return true; + }}; + + while (!stop_token.stop_requested()) { std::unique_ptr<CommandChunk> work; - bool has_submit{false}; + { - std::unique_lock lock{work_mutex}; - if (work_queue.empty()) { - wait_cv.notify_all(); - } - Common::CondvarWait(work_cv, lock, stop_token, [&] { return !work_queue.empty(); }); + std::unique_lock lk{queue_mutex}; + + // Wait for work. + Common::CondvarWait(event_cv, lk, stop_token, [&] { return TryPopQueue(work); }); + + // If we've been asked to stop, we're done. if (stop_token.stop_requested()) { - continue; + return; } - work = std::move(work_queue.front()); - work_queue.pop(); - has_submit = work->HasSubmit(); + // Exchange lock ownership so that we take the execution lock before + // the queue lock goes out of scope. This allows us to force execution + // to complete in the next step. + std::exchange(lk, std::unique_lock{execution_mutex}); + + // Perform the work, tracking whether the chunk was a submission + // before executing. + const bool has_submit = work->HasSubmit(); work->ExecuteAll(current_cmdbuf); + + // If the chunk was a submission, reallocate the command buffer. + if (has_submit) { + AllocateWorkerCommandBuffer(); + } } - if (has_submit) { - AllocateWorkerCommandBuffer(); + + { + std::scoped_lock rl{reserve_mutex}; + + // Recycle the chunk back to the reserve. + chunk_reserve.emplace_back(std::move(work)); } - std::scoped_lock reserve_lock{reserve_mutex}; - chunk_reserve.push_back(std::move(work)); - } while (!stop_token.stop_requested()); + } } void Scheduler::AllocateWorkerCommandBuffer() { @@ -289,13 +321,16 @@ void Scheduler::EndRenderPass() { } void Scheduler::AcquireNewChunk() { - std::scoped_lock lock{reserve_mutex}; + std::scoped_lock rl{reserve_mutex}; + if (chunk_reserve.empty()) { + // If we don't have anything reserved, we need to make a new chunk. chunk = std::make_unique<CommandChunk>(); - return; + } else { + // Otherwise, we can just take from the reserve. + chunk = std::move(chunk_reserve.back()); + chunk_reserve.pop_back(); } - chunk = std::move(chunk_reserve.back()); - chunk_reserve.pop_back(); } } // namespace Vulkan diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h index bd4cb0f7e..8d75ce987 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.h +++ b/src/video_core/renderer_vulkan/vk_scheduler.h @@ -232,10 +232,10 @@ private: std::queue<std::unique_ptr<CommandChunk>> work_queue; std::vector<std::unique_ptr<CommandChunk>> chunk_reserve; + std::mutex execution_mutex; std::mutex reserve_mutex; - std::mutex work_mutex; - std::condition_variable_any work_cv; - std::condition_variable wait_cv; + std::mutex queue_mutex; + std::condition_variable_any event_cv; std::jthread worker_thread; }; diff --git a/src/video_core/texture_cache/format_lookup_table.cpp b/src/video_core/texture_cache/format_lookup_table.cpp index 08aa8ca33..5fc2b2fec 100644 --- a/src/video_core/texture_cache/format_lookup_table.cpp +++ b/src/video_core/texture_cache/format_lookup_table.cpp @@ -42,15 +42,15 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, ComponentType blue, ComponentType alpha, bool is_srgb) noexcept { switch (Hash(format, red, green, blue, alpha, is_srgb)) { - case Hash(TextureFormat::A8R8G8B8, UNORM): + case Hash(TextureFormat::A8B8G8R8, UNORM): return PixelFormat::A8B8G8R8_UNORM; - case Hash(TextureFormat::A8R8G8B8, SNORM): + case Hash(TextureFormat::A8B8G8R8, SNORM): return PixelFormat::A8B8G8R8_SNORM; - case Hash(TextureFormat::A8R8G8B8, UINT): + case Hash(TextureFormat::A8B8G8R8, UINT): return PixelFormat::A8B8G8R8_UINT; - case Hash(TextureFormat::A8R8G8B8, SINT): + case Hash(TextureFormat::A8B8G8R8, SINT): return PixelFormat::A8B8G8R8_SINT; - case Hash(TextureFormat::A8R8G8B8, UNORM, SRGB): + case Hash(TextureFormat::A8B8G8R8, UNORM, SRGB): return PixelFormat::A8B8G8R8_SRGB; case Hash(TextureFormat::B5G6R5, UNORM): return PixelFormat::B5G6R5_UNORM; @@ -74,13 +74,13 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, return PixelFormat::R8_UINT; case Hash(TextureFormat::R8, SINT): return PixelFormat::R8_SINT; - case Hash(TextureFormat::R8G8, UNORM): + case Hash(TextureFormat::G8R8, UNORM): return PixelFormat::R8G8_UNORM; - case Hash(TextureFormat::R8G8, SNORM): + case Hash(TextureFormat::G8R8, SNORM): return PixelFormat::R8G8_SNORM; - case Hash(TextureFormat::R8G8, UINT): + case Hash(TextureFormat::G8R8, UINT): return PixelFormat::R8G8_UINT; - case Hash(TextureFormat::R8G8, SINT): + case Hash(TextureFormat::G8R8, SINT): return PixelFormat::R8G8_SINT; case Hash(TextureFormat::R16G16B16A16, FLOAT): return PixelFormat::R16G16B16A16_FLOAT; @@ -136,49 +136,49 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, return PixelFormat::R32_SINT; case Hash(TextureFormat::E5B9G9R9, FLOAT): return PixelFormat::E5B9G9R9_FLOAT; - case Hash(TextureFormat::D32, FLOAT): + case Hash(TextureFormat::Z32, FLOAT): return PixelFormat::D32_FLOAT; - case Hash(TextureFormat::D16, UNORM): + case Hash(TextureFormat::Z16, UNORM): return PixelFormat::D16_UNORM; - case Hash(TextureFormat::S8D24, UINT, UNORM, UNORM, UNORM, LINEAR): + case Hash(TextureFormat::Z24S8, UINT, UNORM, UNORM, UNORM, LINEAR): return PixelFormat::S8_UINT_D24_UNORM; - case Hash(TextureFormat::S8D24, UINT, UNORM, UINT, UINT, LINEAR): + case Hash(TextureFormat::Z24S8, UINT, UNORM, UINT, UINT, LINEAR): return PixelFormat::S8_UINT_D24_UNORM; - case Hash(TextureFormat::R8G24, UINT, UNORM, UNORM, UNORM, LINEAR): + case Hash(TextureFormat::G24R8, UINT, UNORM, UNORM, UNORM, LINEAR): return PixelFormat::S8_UINT_D24_UNORM; - case Hash(TextureFormat::D24S8, UNORM, UINT, UINT, UINT, LINEAR): + case Hash(TextureFormat::S8Z24, UNORM, UINT, UINT, UINT, LINEAR): return PixelFormat::D24_UNORM_S8_UINT; - case Hash(TextureFormat::D32S8, FLOAT, UINT, UNORM, UNORM, LINEAR): + case Hash(TextureFormat::Z32_X24S8, FLOAT, UINT, UNORM, UNORM, LINEAR): return PixelFormat::D32_FLOAT_S8_UINT; - case Hash(TextureFormat::R32_B24G8, FLOAT, UINT, UNORM, UNORM, LINEAR): + case Hash(TextureFormat::R32B24G8, FLOAT, UINT, UNORM, UNORM, LINEAR): return PixelFormat::D32_FLOAT_S8_UINT; - case Hash(TextureFormat::BC1_RGBA, UNORM, LINEAR): + case Hash(TextureFormat::DXT1, UNORM, LINEAR): return PixelFormat::BC1_RGBA_UNORM; - case Hash(TextureFormat::BC1_RGBA, UNORM, SRGB): + case Hash(TextureFormat::DXT1, UNORM, SRGB): return PixelFormat::BC1_RGBA_SRGB; - case Hash(TextureFormat::BC2, UNORM, LINEAR): + case Hash(TextureFormat::DXT23, UNORM, LINEAR): return PixelFormat::BC2_UNORM; - case Hash(TextureFormat::BC2, UNORM, SRGB): + case Hash(TextureFormat::DXT23, UNORM, SRGB): return PixelFormat::BC2_SRGB; - case Hash(TextureFormat::BC3, UNORM, LINEAR): + case Hash(TextureFormat::DXT45, UNORM, LINEAR): return PixelFormat::BC3_UNORM; - case Hash(TextureFormat::BC3, UNORM, SRGB): + case Hash(TextureFormat::DXT45, UNORM, SRGB): return PixelFormat::BC3_SRGB; - case Hash(TextureFormat::BC4, UNORM): + case Hash(TextureFormat::DXN1, UNORM): return PixelFormat::BC4_UNORM; - case Hash(TextureFormat::BC4, SNORM): + case Hash(TextureFormat::DXN1, SNORM): return PixelFormat::BC4_SNORM; - case Hash(TextureFormat::BC5, UNORM): + case Hash(TextureFormat::DXN2, UNORM): return PixelFormat::BC5_UNORM; - case Hash(TextureFormat::BC5, SNORM): + case Hash(TextureFormat::DXN2, SNORM): return PixelFormat::BC5_SNORM; - case Hash(TextureFormat::BC7, UNORM, LINEAR): + case Hash(TextureFormat::BC7U, UNORM, LINEAR): return PixelFormat::BC7_UNORM; - case Hash(TextureFormat::BC7, UNORM, SRGB): + case Hash(TextureFormat::BC7U, UNORM, SRGB): return PixelFormat::BC7_SRGB; - case Hash(TextureFormat::BC6H_SFLOAT, FLOAT): + case Hash(TextureFormat::BC6H_S16, FLOAT): return PixelFormat::BC6H_SFLOAT; - case Hash(TextureFormat::BC6H_UFLOAT, FLOAT): + case Hash(TextureFormat::BC6H_U16, FLOAT): return PixelFormat::BC6H_UFLOAT; case Hash(TextureFormat::ASTC_2D_4X4, UNORM, LINEAR): return PixelFormat::ASTC_2D_4X4_UNORM; diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index c09eecd1a..ed5c768d8 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -1176,13 +1176,13 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA const size_t size_bytes = CalculateGuestSizeInBytes(new_info); const bool broken_views = runtime.HasBrokenTextureViewFormats(); const bool native_bgr = runtime.HasNativeBgr(); - std::vector<ImageId> overlap_ids; + boost::container::small_vector<ImageId, 4> overlap_ids; std::unordered_set<ImageId> overlaps_found; - std::vector<ImageId> left_aliased_ids; - std::vector<ImageId> right_aliased_ids; + boost::container::small_vector<ImageId, 4> left_aliased_ids; + boost::container::small_vector<ImageId, 4> right_aliased_ids; std::unordered_set<ImageId> ignore_textures; - std::vector<ImageId> bad_overlap_ids; - std::vector<ImageId> all_siblings; + boost::container::small_vector<ImageId, 4> bad_overlap_ids; + boost::container::small_vector<ImageId, 4> all_siblings; const bool this_is_linear = info.type == ImageType::Linear; const auto region_check = [&](ImageId overlap_id, ImageBase& overlap) { if (True(overlap.flags & ImageFlagBits::Remapped)) { @@ -1269,7 +1269,7 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA const ImageId new_image_id = slot_images.insert(runtime, new_info, gpu_addr, cpu_addr); Image& new_image = slot_images[new_image_id]; - if (!gpu_memory->IsContinousRange(new_image.gpu_addr, new_image.guest_size_bytes)) { + if (!gpu_memory->IsContinuousRange(new_image.gpu_addr, new_image.guest_size_bytes)) { new_image.flags |= ImageFlagBits::Sparse; } @@ -1298,16 +1298,16 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA Image& overlap = slot_images[overlap_id]; if (True(overlap.flags & ImageFlagBits::GpuModified)) { new_image.flags |= ImageFlagBits::GpuModified; - } - const auto& resolution = Settings::values.resolution_info; - const SubresourceBase base = new_image.TryFindBase(overlap.gpu_addr).value(); - const u32 up_scale = can_rescale ? resolution.up_scale : 1; - const u32 down_shift = can_rescale ? resolution.down_shift : 0; - auto copies = MakeShrinkImageCopies(new_info, overlap.info, base, up_scale, down_shift); - if (overlap.info.num_samples != new_image.info.num_samples) { - runtime.CopyImageMSAA(new_image, overlap, std::move(copies)); - } else { - runtime.CopyImage(new_image, overlap, std::move(copies)); + const auto& resolution = Settings::values.resolution_info; + const SubresourceBase base = new_image.TryFindBase(overlap.gpu_addr).value(); + const u32 up_scale = can_rescale ? resolution.up_scale : 1; + const u32 down_shift = can_rescale ? resolution.down_shift : 0; + auto copies = MakeShrinkImageCopies(new_info, overlap.info, base, up_scale, down_shift); + if (overlap.info.num_samples != new_image.info.num_samples) { + runtime.CopyImageMSAA(new_image, overlap, std::move(copies)); + } else { + runtime.CopyImage(new_image, overlap, std::move(copies)); + } } if (True(overlap.flags & ImageFlagBits::Tracked)) { UntrackImage(overlap, overlap_id); @@ -1616,37 +1616,38 @@ void TextureCache<P>::ForEachImageInRegionGPU(size_t as_id, GPUVAddr gpu_addr, s return; } auto& gpu_page_table = gpu_page_table_storage[*storage_id]; - ForEachGPUPage(gpu_addr, size, [this, gpu_page_table, &images, gpu_addr, size, func](u64 page) { - const auto it = gpu_page_table.find(page); - if (it == gpu_page_table.end()) { - if constexpr (BOOL_BREAK) { - return false; - } else { - return; - } - } - for (const ImageId image_id : it->second) { - Image& image = slot_images[image_id]; - if (True(image.flags & ImageFlagBits::Picked)) { - continue; - } - if (!image.OverlapsGPU(gpu_addr, size)) { - continue; - } - image.flags |= ImageFlagBits::Picked; - images.push_back(image_id); - if constexpr (BOOL_BREAK) { - if (func(image_id, image)) { - return true; - } - } else { - func(image_id, image); - } - } - if constexpr (BOOL_BREAK) { - return false; - } - }); + ForEachGPUPage(gpu_addr, size, + [this, &gpu_page_table, &images, gpu_addr, size, func](u64 page) { + const auto it = gpu_page_table.find(page); + if (it == gpu_page_table.end()) { + if constexpr (BOOL_BREAK) { + return false; + } else { + return; + } + } + for (const ImageId image_id : it->second) { + Image& image = slot_images[image_id]; + if (True(image.flags & ImageFlagBits::Picked)) { + continue; + } + if (!image.OverlapsGPU(gpu_addr, size)) { + continue; + } + image.flags |= ImageFlagBits::Picked; + images.push_back(image_id); + if constexpr (BOOL_BREAK) { + if (func(image_id, image)) { + return true; + } + } else { + func(image_id, image); + } + } + if constexpr (BOOL_BREAK) { + return false; + } + }); for (const ImageId image_id : images) { slot_images[image_id].flags &= ~ImageFlagBits::Picked; } diff --git a/src/video_core/textures/texture.cpp b/src/video_core/textures/texture.cpp index 26649aebf..4a80a59f9 100644 --- a/src/video_core/textures/texture.cpp +++ b/src/video_core/textures/texture.cpp @@ -14,7 +14,7 @@ namespace Tegra::Texture { namespace { -constexpr std::array<float, 256> SRGB_CONVERSION_LUT = { +[[maybe_unused]] constexpr std::array<float, 256> SRGB_CONVERSION_LUT = { 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000021f, 0.000033f, 0.000046f, 0.000062f, 0.000081f, 0.000102f, 0.000125f, 0.000151f, 0.000181f, 0.000214f, 0.000251f, 0.000293f, 0.000338f, 0.000388f, 0.000443f, 0.000503f, 0.000568f, 0.000639f, 0.000715f, 0.000798f, @@ -52,11 +52,13 @@ constexpr std::array<float, 256> SRGB_CONVERSION_LUT = { } // Anonymous namespace std::array<float, 4> TSCEntry::BorderColor() const noexcept { - if (!srgb_conversion) { - return border_color; - } - return {SRGB_CONVERSION_LUT[srgb_border_color_r], SRGB_CONVERSION_LUT[srgb_border_color_g], - SRGB_CONVERSION_LUT[srgb_border_color_b], border_color[3]}; + // TODO: Handle SRGB correctly. Using this breaks shadows in some games (Xenoblade). + // if (!srgb_conversion) { + // return border_color; + //} + // return {SRGB_CONVERSION_LUT[srgb_border_color_r], SRGB_CONVERSION_LUT[srgb_border_color_g], + // SRGB_CONVERSION_LUT[srgb_border_color_b], border_color[3]}; + return border_color; } float TSCEntry::MaxAnisotropy() const noexcept { diff --git a/src/video_core/textures/texture.h b/src/video_core/textures/texture.h index 7c4553a53..7e5837b20 100644 --- a/src/video_core/textures/texture.h +++ b/src/video_core/textures/texture.h @@ -15,26 +15,26 @@ enum class TextureFormat : u32 { R32G32B32 = 0x02, R16G16B16A16 = 0x03, R32G32 = 0x04, - R32_B24G8 = 0x05, + R32B24G8 = 0x05, ETC2_RGB = 0x06, X8B8G8R8 = 0x07, - A8R8G8B8 = 0x08, + A8B8G8R8 = 0x08, A2B10G10R10 = 0x09, ETC2_RGB_PTA = 0x0a, ETC2_RGBA = 0x0b, R16G16 = 0x0c, - R24G8 = 0x0d, - R8G24 = 0x0e, + G8R24 = 0x0d, + G24R8 = 0x0e, R32 = 0x0f, - BC6H_SFLOAT = 0x10, - BC6H_UFLOAT = 0x11, + BC6H_S16 = 0x10, + BC6H_U16 = 0x11, A4B4G4R4 = 0x12, A5B5G5R1 = 0x13, A1B5G5R5 = 0x14, B5G6R5 = 0x15, B6G5R5 = 0x16, - BC7 = 0x17, - R8G8 = 0x18, + BC7U = 0x17, + G8R8 = 0x18, EAC = 0x19, EACX2 = 0x1a, R16 = 0x1b, @@ -46,33 +46,33 @@ enum class TextureFormat : u32 { B10G11R11 = 0x21, G8B8G8R8 = 0x22, B8G8R8G8 = 0x23, - BC1_RGBA = 0x24, - BC2 = 0x25, - BC3 = 0x26, - BC4 = 0x27, - BC5 = 0x28, - S8D24 = 0x29, - X8D24 = 0x2a, - D24S8 = 0x2b, - X4V4D24__COV4R4V = 0x2c, - X4V4D24__COV8R8V = 0x2d, - V8D24__COV4R12V = 0x2e, - D32 = 0x2f, - D32S8 = 0x30, - X8D24_X20V4S8__COV4R4V = 0x31, - X8D24_X20V4S8__COV8R8V = 0x32, - D32_X20V4X8__COV4R4V = 0x33, - D32_X20V4X8__COV8R8V = 0x34, - D32_X20V4S8__COV4R4V = 0x35, - D32_X20V4S8__COV8R8V = 0x36, - X8D24_X16V8S8__COV4R12V = 0x37, - D32_X16V8X8__COV4R12V = 0x38, - D32_X16V8S8__COV4R12V = 0x39, - D16 = 0x3a, - V8D24__COV8R24V = 0x3b, - X8D24_X16V8S8__COV8R24V = 0x3c, - D32_X16V8X8__COV8R24V = 0x3d, - D32_X16V8S8__COV8R24V = 0x3e, + DXT1 = 0x24, + DXT23 = 0x25, + DXT45 = 0x26, + DXN1 = 0x27, + DXN2 = 0x28, + Z24S8 = 0x29, + X8Z24 = 0x2a, + S8Z24 = 0x2b, + X4V4Z24__COV4R4V = 0x2c, + X4V4Z24__COV8R8V = 0x2d, + V8Z24__COV4R12V = 0x2e, + Z32 = 0x2f, + Z32_X24S8 = 0x30, + X8Z24_X20V4S8__COV4R4V = 0x31, + X8Z24_X20V4S8__COV8R8V = 0x32, + Z32_X20V4X8__COV4R4V = 0x33, + Z32_X20V4X8__COV8R8V = 0x34, + Z32_X20V4S8__COV4R4V = 0x35, + Z32_X20V4S8__COV8R8V = 0x36, + X8Z24_X16V8S8__COV4R12V = 0x37, + Z32_X16V8X8__COV4R12V = 0x38, + Z32_X16V8S8__COV4R12V = 0x39, + Z16 = 0x3a, + V8Z24__COV8R24V = 0x3b, + X8Z24_X16V8S8__COV8R24V = 0x3c, + Z32_X16V8X8__COV8R24V = 0x3d, + Z32_X16V8S8__COV8R24V = 0x3e, ASTC_2D_4X4 = 0x40, ASTC_2D_5X5 = 0x41, ASTC_2D_6X6 = 0x42, diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp index fedb4a7bb..b42d48416 100644 --- a/src/video_core/video_core.cpp +++ b/src/video_core/video_core.cpp @@ -18,7 +18,7 @@ std::unique_ptr<VideoCore::RendererBase> CreateRenderer( Core::System& system, Core::Frontend::EmuWindow& emu_window, Tegra::GPU& gpu, std::unique_ptr<Core::Frontend::GraphicsContext> context) { auto& telemetry_session = system.TelemetrySession(); - auto& cpu_memory = system.Memory(); + auto& cpu_memory = system.ApplicationMemory(); switch (Settings::values.renderer_backend.GetValue()) { case Settings::RendererBackend::OpenGL: diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index df348af55..6f288b3f8 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -401,6 +401,12 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR loaded_extensions.erase(VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME); } } + if (extensions.extended_dynamic_state3 && is_radv) { + LOG_WARNING(Render_Vulkan, "RADV has broken extendedDynamicState3ColorBlendEquation"); + features.extended_dynamic_state3.extendedDynamicState3ColorBlendEnable = false; + features.extended_dynamic_state3.extendedDynamicState3ColorBlendEquation = false; + dynamic_state3_blending = false; + } if (extensions.vertex_input_dynamic_state && is_radv) { // TODO(ameerj): Blacklist only offending driver versions // TODO(ameerj): Confirm if RDNA1 is affected diff --git a/src/video_core/vulkan_common/vulkan_wrapper.cpp b/src/video_core/vulkan_common/vulkan_wrapper.cpp index 486d4dfaf..336f53700 100644 --- a/src/video_core/vulkan_common/vulkan_wrapper.cpp +++ b/src/video_core/vulkan_common/vulkan_wrapper.cpp @@ -375,6 +375,8 @@ const char* ToString(VkResult result) noexcept { return "VK_RESULT_MAX_ENUM"; case VkResult::VK_ERROR_COMPRESSION_EXHAUSTED_EXT: return "VK_ERROR_COMPRESSION_EXHAUSTED_EXT"; + case VkResult::VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT: + return "VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT"; } return "Unknown"; } diff --git a/src/web_service/verify_login.cpp b/src/web_service/verify_login.cpp index 050080278..d5b7161cb 100644 --- a/src/web_service/verify_login.cpp +++ b/src/web_service/verify_login.cpp @@ -21,7 +21,7 @@ bool VerifyLogin(const std::string& host, const std::string& username, const std return username.empty(); } - return username == *iter; + return *iter == username; } } // namespace WebService diff --git a/src/yuzu/applets/qt_amiibo_settings.cpp b/src/yuzu/applets/qt_amiibo_settings.cpp index 93ad4b4f9..4559df5b1 100644 --- a/src/yuzu/applets/qt_amiibo_settings.cpp +++ b/src/yuzu/applets/qt_amiibo_settings.cpp @@ -245,12 +245,19 @@ void QtAmiiboSettingsDialog::SetSettingsDescription() { QtAmiiboSettings::QtAmiiboSettings(GMainWindow& parent) { connect(this, &QtAmiiboSettings::MainWindowShowAmiiboSettings, &parent, &GMainWindow::AmiiboSettingsShowDialog, Qt::QueuedConnection); + connect(this, &QtAmiiboSettings::MainWindowRequestExit, &parent, + &GMainWindow::AmiiboSettingsRequestExit, Qt::QueuedConnection); connect(&parent, &GMainWindow::AmiiboSettingsFinished, this, &QtAmiiboSettings::MainWindowFinished, Qt::QueuedConnection); } QtAmiiboSettings::~QtAmiiboSettings() = default; +void QtAmiiboSettings::Close() const { + callback = {}; + emit MainWindowRequestExit(); +} + void QtAmiiboSettings::ShowCabinetApplet( const Core::Frontend::CabinetCallback& callback_, const Core::Frontend::CabinetParameters& parameters, @@ -260,5 +267,7 @@ void QtAmiiboSettings::ShowCabinetApplet( } void QtAmiiboSettings::MainWindowFinished(bool is_success, const std::string& name) { - callback(is_success, name); + if (callback) { + callback(is_success, name); + } } diff --git a/src/yuzu/applets/qt_amiibo_settings.h b/src/yuzu/applets/qt_amiibo_settings.h index 930c96739..bc389a33f 100644 --- a/src/yuzu/applets/qt_amiibo_settings.h +++ b/src/yuzu/applets/qt_amiibo_settings.h @@ -68,6 +68,7 @@ public: explicit QtAmiiboSettings(GMainWindow& parent); ~QtAmiiboSettings() override; + void Close() const override; void ShowCabinetApplet(const Core::Frontend::CabinetCallback& callback_, const Core::Frontend::CabinetParameters& parameters, std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const override; @@ -75,6 +76,7 @@ public: signals: void MainWindowShowAmiiboSettings(const Core::Frontend::CabinetParameters& parameters, std::shared_ptr<Service::NFP::NfpDevice> nfp_device) const; + void MainWindowRequestExit() const; private: void MainWindowFinished(bool is_success, const std::string& name); diff --git a/src/yuzu/applets/qt_controller.cpp b/src/yuzu/applets/qt_controller.cpp index c30b54499..00aafb8f8 100644 --- a/src/yuzu/applets/qt_controller.cpp +++ b/src/yuzu/applets/qt_controller.cpp @@ -300,7 +300,7 @@ bool QtControllerSelectorDialog::CheckIfParametersMet() { if (num_connected_players < min_supported_players || num_connected_players > max_supported_players) { parameters_met = false; - ui->buttonBox->setEnabled(parameters_met); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(parameters_met); return parameters_met; } @@ -327,7 +327,7 @@ bool QtControllerSelectorDialog::CheckIfParametersMet() { }(); parameters_met = all_controllers_compatible; - ui->buttonBox->setEnabled(parameters_met); + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(parameters_met); return parameters_met; } @@ -678,18 +678,27 @@ void QtControllerSelectorDialog::DisableUnsupportedPlayers() { QtControllerSelector::QtControllerSelector(GMainWindow& parent) { connect(this, &QtControllerSelector::MainWindowReconfigureControllers, &parent, &GMainWindow::ControllerSelectorReconfigureControllers, Qt::QueuedConnection); + connect(this, &QtControllerSelector::MainWindowRequestExit, &parent, + &GMainWindow::ControllerSelectorRequestExit, Qt::QueuedConnection); connect(&parent, &GMainWindow::ControllerSelectorReconfigureFinished, this, &QtControllerSelector::MainWindowReconfigureFinished, Qt::QueuedConnection); } QtControllerSelector::~QtControllerSelector() = default; +void QtControllerSelector::Close() const { + callback = {}; + emit MainWindowRequestExit(); +} + void QtControllerSelector::ReconfigureControllers( ReconfigureCallback callback_, const Core::Frontend::ControllerParameters& parameters) const { callback = std::move(callback_); emit MainWindowReconfigureControllers(parameters); } -void QtControllerSelector::MainWindowReconfigureFinished() { - callback(); +void QtControllerSelector::MainWindowReconfigureFinished(bool is_success) { + if (callback) { + callback(is_success); + } } diff --git a/src/yuzu/applets/qt_controller.h b/src/yuzu/applets/qt_controller.h index 16e99f507..2fdc35857 100644 --- a/src/yuzu/applets/qt_controller.h +++ b/src/yuzu/applets/qt_controller.h @@ -156,6 +156,7 @@ public: explicit QtControllerSelector(GMainWindow& parent); ~QtControllerSelector() override; + void Close() const override; void ReconfigureControllers( ReconfigureCallback callback_, const Core::Frontend::ControllerParameters& parameters) const override; @@ -163,9 +164,10 @@ public: signals: void MainWindowReconfigureControllers( const Core::Frontend::ControllerParameters& parameters) const; + void MainWindowRequestExit() const; private: - void MainWindowReconfigureFinished(); + void MainWindowReconfigureFinished(bool is_success); mutable ReconfigureCallback callback; }; diff --git a/src/yuzu/applets/qt_controller.ui b/src/yuzu/applets/qt_controller.ui index f5eccba70..729e921ee 100644 --- a/src/yuzu/applets/qt_controller.ui +++ b/src/yuzu/applets/qt_controller.ui @@ -2629,7 +2629,7 @@ <bool>true</bool> </property> <property name="standardButtons"> - <set>QDialogButtonBox::Ok</set> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> </property> </widget> </item> @@ -2649,5 +2649,11 @@ <receiver>QtControllerSelectorDialog</receiver> <slot>accept()</slot> </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>QtControllerSelectorDialog</receiver> + <slot>reject()</slot> + </connection> </connections> </ui> diff --git a/src/yuzu/applets/qt_error.cpp b/src/yuzu/applets/qt_error.cpp index e0190a979..1dc4f0383 100644 --- a/src/yuzu/applets/qt_error.cpp +++ b/src/yuzu/applets/qt_error.cpp @@ -8,12 +8,19 @@ QtErrorDisplay::QtErrorDisplay(GMainWindow& parent) { connect(this, &QtErrorDisplay::MainWindowDisplayError, &parent, &GMainWindow::ErrorDisplayDisplayError, Qt::QueuedConnection); + connect(this, &QtErrorDisplay::MainWindowRequestExit, &parent, + &GMainWindow::ErrorDisplayRequestExit, Qt::QueuedConnection); connect(&parent, &GMainWindow::ErrorDisplayFinished, this, &QtErrorDisplay::MainWindowFinishedError, Qt::DirectConnection); } QtErrorDisplay::~QtErrorDisplay() = default; +void QtErrorDisplay::Close() const { + callback = {}; + emit MainWindowRequestExit(); +} + void QtErrorDisplay::ShowError(Result error, FinishedCallback finished) const { callback = std::move(finished); emit MainWindowDisplayError( @@ -55,5 +62,7 @@ void QtErrorDisplay::ShowCustomErrorText(Result error, std::string dialog_text, } void QtErrorDisplay::MainWindowFinishedError() { - callback(); + if (callback) { + callback(); + } } diff --git a/src/yuzu/applets/qt_error.h b/src/yuzu/applets/qt_error.h index e4e174721..957f170ad 100644 --- a/src/yuzu/applets/qt_error.h +++ b/src/yuzu/applets/qt_error.h @@ -16,6 +16,7 @@ public: explicit QtErrorDisplay(GMainWindow& parent); ~QtErrorDisplay() override; + void Close() const override; void ShowError(Result error, FinishedCallback finished) const override; void ShowErrorWithTimestamp(Result error, std::chrono::seconds time, FinishedCallback finished) const override; @@ -24,6 +25,7 @@ public: signals: void MainWindowDisplayError(QString error_code, QString error_text) const; + void MainWindowRequestExit() const; private: void MainWindowFinishedError(); diff --git a/src/yuzu/applets/qt_profile_select.cpp b/src/yuzu/applets/qt_profile_select.cpp index 4145c5299..2448e46b6 100644 --- a/src/yuzu/applets/qt_profile_select.cpp +++ b/src/yuzu/applets/qt_profile_select.cpp @@ -46,11 +46,13 @@ QPixmap GetIcon(Common::UUID uuid) { } } // Anonymous namespace -QtProfileSelectionDialog::QtProfileSelectionDialog(Core::HID::HIDCore& hid_core, QWidget* parent) +QtProfileSelectionDialog::QtProfileSelectionDialog( + Core::HID::HIDCore& hid_core, QWidget* parent, + const Core::Frontend::ProfileSelectParameters& parameters) : QDialog(parent), profile_manager(std::make_unique<Service::Account::ProfileManager>()) { outer_layout = new QVBoxLayout; - instruction_label = new QLabel(tr("Select a user:")); + instruction_label = new QLabel(); scroll_area = new QScrollArea; @@ -120,7 +122,8 @@ QtProfileSelectionDialog::QtProfileSelectionDialog(Core::HID::HIDCore& hid_core, item_model->appendRow(item); setLayout(outer_layout); - setWindowTitle(tr("Profile Selector")); + SetWindowTitle(parameters); + SetDialogPurpose(parameters); resize(550, 400); } @@ -154,20 +157,101 @@ void QtProfileSelectionDialog::SelectUser(const QModelIndex& index) { user_index = index.row(); } +void QtProfileSelectionDialog::SetWindowTitle( + const Core::Frontend::ProfileSelectParameters& parameters) { + using Service::AM::Applets::UiMode; + switch (parameters.mode) { + case UiMode::UserCreator: + case UiMode::UserCreatorForStarter: + setWindowTitle(tr("Profile Creator")); + return; + case UiMode::EnsureNetworkServiceAccountAvailable: + setWindowTitle(tr("Profile Selector")); + return; + case UiMode::UserIconEditor: + setWindowTitle(tr("Profile Icon Editor")); + return; + case UiMode::UserNicknameEditor: + setWindowTitle(tr("Profile Nickname Editor")); + return; + case UiMode::NintendoAccountAuthorizationRequestContext: + case UiMode::IntroduceExternalNetworkServiceAccount: + case UiMode::IntroduceExternalNetworkServiceAccountForRegistration: + case UiMode::NintendoAccountNnidLinker: + case UiMode::LicenseRequirementsForNetworkService: + case UiMode::LicenseRequirementsForNetworkServiceWithUserContextImpl: + case UiMode::UserCreatorForImmediateNaLoginTest: + case UiMode::UserQualificationPromoter: + case UiMode::UserSelector: + default: + setWindowTitle(tr("Profile Selector")); + } +} + +void QtProfileSelectionDialog::SetDialogPurpose( + const Core::Frontend::ProfileSelectParameters& parameters) { + using Service::AM::Applets::UserSelectionPurpose; + + switch (parameters.purpose) { + case UserSelectionPurpose::GameCardRegistration: + instruction_label->setText(tr("Who will receive the points?")); + return; + case UserSelectionPurpose::EShopLaunch: + instruction_label->setText(tr("Who is using Nintendo eShop?")); + return; + case UserSelectionPurpose::EShopItemShow: + instruction_label->setText(tr("Who is making this purchase?")); + return; + case UserSelectionPurpose::PicturePost: + instruction_label->setText(tr("Who is posting?")); + return; + case UserSelectionPurpose::NintendoAccountLinkage: + instruction_label->setText(tr("Select a user to link to a Nintendo Account.")); + return; + case UserSelectionPurpose::SettingsUpdate: + instruction_label->setText(tr("Change settings for which user?")); + return; + case UserSelectionPurpose::SaveDataDeletion: + instruction_label->setText(tr("Format data for which user?")); + return; + case UserSelectionPurpose::UserMigration: + instruction_label->setText(tr("Which user will be transferred to another console?")); + return; + case UserSelectionPurpose::SaveDataTransfer: + instruction_label->setText(tr("Send save data for which user?")); + return; + case UserSelectionPurpose::General: + default: + instruction_label->setText(tr("Select a user:")); + return; + } +} + QtProfileSelector::QtProfileSelector(GMainWindow& parent) { connect(this, &QtProfileSelector::MainWindowSelectProfile, &parent, &GMainWindow::ProfileSelectorSelectProfile, Qt::QueuedConnection); + connect(this, &QtProfileSelector::MainWindowRequestExit, &parent, + &GMainWindow::ProfileSelectorRequestExit, Qt::QueuedConnection); connect(&parent, &GMainWindow::ProfileSelectorFinishedSelection, this, &QtProfileSelector::MainWindowFinishedSelection, Qt::DirectConnection); } QtProfileSelector::~QtProfileSelector() = default; -void QtProfileSelector::SelectProfile(SelectProfileCallback callback_) const { +void QtProfileSelector::Close() const { + callback = {}; + emit MainWindowRequestExit(); +} + +void QtProfileSelector::SelectProfile( + SelectProfileCallback callback_, + const Core::Frontend::ProfileSelectParameters& parameters) const { callback = std::move(callback_); - emit MainWindowSelectProfile(); + emit MainWindowSelectProfile(parameters); } void QtProfileSelector::MainWindowFinishedSelection(std::optional<Common::UUID> uuid) { - callback(uuid); + if (callback) { + callback(uuid); + } } diff --git a/src/yuzu/applets/qt_profile_select.h b/src/yuzu/applets/qt_profile_select.h index 637a3bda2..99056e274 100644 --- a/src/yuzu/applets/qt_profile_select.h +++ b/src/yuzu/applets/qt_profile_select.h @@ -28,7 +28,8 @@ class QtProfileSelectionDialog final : public QDialog { Q_OBJECT public: - explicit QtProfileSelectionDialog(Core::HID::HIDCore& hid_core, QWidget* parent); + explicit QtProfileSelectionDialog(Core::HID::HIDCore& hid_core, QWidget* parent, + const Core::Frontend::ProfileSelectParameters& parameters); ~QtProfileSelectionDialog() override; int exec() override; @@ -40,6 +41,9 @@ public: private: void SelectUser(const QModelIndex& index); + void SetWindowTitle(const Core::Frontend::ProfileSelectParameters& parameters); + void SetDialogPurpose(const Core::Frontend::ProfileSelectParameters& parameters); + int user_index = 0; QVBoxLayout* layout; @@ -65,10 +69,13 @@ public: explicit QtProfileSelector(GMainWindow& parent); ~QtProfileSelector() override; - void SelectProfile(SelectProfileCallback callback_) const override; + void Close() const override; + void SelectProfile(SelectProfileCallback callback_, + const Core::Frontend::ProfileSelectParameters& parameters) const override; signals: - void MainWindowSelectProfile() const; + void MainWindowSelectProfile(const Core::Frontend::ProfileSelectParameters& parameters) const; + void MainWindowRequestExit() const; private: void MainWindowFinishedSelection(std::optional<Common::UUID> uuid); diff --git a/src/yuzu/applets/qt_software_keyboard.h b/src/yuzu/applets/qt_software_keyboard.h index 30ac8ecf6..ac23ce047 100644 --- a/src/yuzu/applets/qt_software_keyboard.h +++ b/src/yuzu/applets/qt_software_keyboard.h @@ -233,6 +233,10 @@ public: explicit QtSoftwareKeyboard(GMainWindow& parent); ~QtSoftwareKeyboard() override; + void Close() const override { + ExitKeyboard(); + } + void InitializeKeyboard(bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters, SubmitNormalCallback submit_normal_callback_, diff --git a/src/yuzu/applets/qt_web_browser.cpp b/src/yuzu/applets/qt_web_browser.cpp index 0a5912326..28acc0ff8 100644 --- a/src/yuzu/applets/qt_web_browser.cpp +++ b/src/yuzu/applets/qt_web_browser.cpp @@ -393,6 +393,8 @@ void QtNXWebEngineView::FocusFirstLinkElement() { QtWebBrowser::QtWebBrowser(GMainWindow& main_window) { connect(this, &QtWebBrowser::MainWindowOpenWebPage, &main_window, &GMainWindow::WebBrowserOpenWebPage, Qt::QueuedConnection); + connect(this, &QtWebBrowser::MainWindowRequestExit, &main_window, + &GMainWindow::WebBrowserRequestExit, Qt::QueuedConnection); connect(&main_window, &GMainWindow::WebBrowserExtractOfflineRomFS, this, &QtWebBrowser::MainWindowExtractOfflineRomFS, Qt::QueuedConnection); connect(&main_window, &GMainWindow::WebBrowserClosed, this, @@ -401,6 +403,11 @@ QtWebBrowser::QtWebBrowser(GMainWindow& main_window) { QtWebBrowser::~QtWebBrowser() = default; +void QtWebBrowser::Close() const { + callback = {}; + emit MainWindowRequestExit(); +} + void QtWebBrowser::OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback_, OpenWebPageCallback callback_) const { @@ -436,5 +443,7 @@ void QtWebBrowser::MainWindowExtractOfflineRomFS() { void QtWebBrowser::MainWindowWebBrowserClosed(Service::AM::Applets::WebExitReason exit_reason, std::string last_url) { - callback(exit_reason, last_url); + if (callback) { + callback(exit_reason, last_url); + } } diff --git a/src/yuzu/applets/qt_web_browser.h b/src/yuzu/applets/qt_web_browser.h index ceae7926e..1234108ae 100644 --- a/src/yuzu/applets/qt_web_browser.h +++ b/src/yuzu/applets/qt_web_browser.h @@ -196,6 +196,7 @@ public: explicit QtWebBrowser(GMainWindow& parent); ~QtWebBrowser() override; + void Close() const override; void OpenLocalWebPage(const std::string& local_url, ExtractROMFSCallback extract_romfs_callback_, OpenWebPageCallback callback_) const override; @@ -206,6 +207,7 @@ public: signals: void MainWindowOpenWebPage(const std::string& main_url, const std::string& additional_args, bool is_local) const; + void MainWindowRequestExit() const; private: void MainWindowExtractOfflineRomFS(); diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui index 6cd79673c..add110bb0 100644 --- a/src/yuzu/configuration/configure_general.ui +++ b/src/yuzu/configuration/configure_general.ui @@ -64,7 +64,7 @@ <item> <widget class="QCheckBox" name="use_extended_memory_layout"> <property name="text"> - <string>Extended memory layout (6GB DRAM)</string> + <string>Extended memory layout (8GB DRAM)</string> </property> </widget> </item> diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 1db374d4a..7fce85bca 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -189,6 +189,8 @@ QList<QWidget*> ConfigureInput::GetSubTabs() const { } void ConfigureInput::ApplyConfiguration() { + const bool was_global = Settings::values.players.UsingGlobal(); + Settings::values.players.SetGlobal(true); for (auto* controller : player_controllers) { controller->ApplyConfiguration(); } @@ -201,6 +203,7 @@ void ConfigureInput::ApplyConfiguration() { Settings::values.vibration_enabled.SetValue(ui->vibrationGroup->isChecked()); Settings::values.motion_enabled.SetValue(ui->motionGroup->isChecked()); + Settings::values.players.SetGlobal(was_global); } void ConfigureInput::changeEvent(QEvent* event) { diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index ae14884b5..b79409a68 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -307,6 +307,8 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan system->Initialize(); Common::Log::Initialize(); + Common::Log::Start(); + LoadTranslation(); setAcceptDrops(true); @@ -449,8 +451,6 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan SetupPrepareForSleep(); - Common::Log::Start(); - QStringList args = QApplication::arguments(); if (args.size() < 2) { @@ -576,6 +576,10 @@ void GMainWindow::RegisterMetaTypes() { // Controller Applet qRegisterMetaType<Core::Frontend::ControllerParameters>("Core::Frontend::ControllerParameters"); + // Profile Select Applet + qRegisterMetaType<Core::Frontend::ProfileSelectParameters>( + "Core::Frontend::ProfileSelectParameters"); + // Software Keyboard Applet qRegisterMetaType<Core::Frontend::KeyboardInitializeParameters>( "Core::Frontend::KeyboardInitializeParameters"); @@ -596,50 +600,81 @@ void GMainWindow::RegisterMetaTypes() { void GMainWindow::AmiiboSettingsShowDialog(const Core::Frontend::CabinetParameters& parameters, std::shared_ptr<Service::NFP::NfpDevice> nfp_device) { - QtAmiiboSettingsDialog dialog(this, parameters, input_subsystem.get(), nfp_device); + cabinet_applet = + new QtAmiiboSettingsDialog(this, parameters, input_subsystem.get(), nfp_device); + SCOPE_EXIT({ + cabinet_applet->deleteLater(); + cabinet_applet = nullptr; + }); - dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | - Qt::WindowTitleHint | Qt::WindowSystemMenuHint); - dialog.setWindowModality(Qt::WindowModal); - if (dialog.exec() == QDialog::Rejected) { + cabinet_applet->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | + Qt::WindowTitleHint | Qt::WindowSystemMenuHint); + cabinet_applet->setWindowModality(Qt::WindowModal); + + if (cabinet_applet->exec() == QDialog::Rejected) { emit AmiiboSettingsFinished(false, {}); return; } - emit AmiiboSettingsFinished(true, dialog.GetName()); + emit AmiiboSettingsFinished(true, cabinet_applet->GetName()); +} + +void GMainWindow::AmiiboSettingsRequestExit() { + if (cabinet_applet) { + cabinet_applet->reject(); + } } void GMainWindow::ControllerSelectorReconfigureControllers( const Core::Frontend::ControllerParameters& parameters) { - QtControllerSelectorDialog dialog(this, parameters, input_subsystem.get(), *system); - - dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | - Qt::WindowTitleHint | Qt::WindowSystemMenuHint); - dialog.setWindowModality(Qt::WindowModal); - dialog.exec(); + controller_applet = + new QtControllerSelectorDialog(this, parameters, input_subsystem.get(), *system); + SCOPE_EXIT({ + controller_applet->deleteLater(); + controller_applet = nullptr; + }); - emit ControllerSelectorReconfigureFinished(); + controller_applet->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | + Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | + Qt::WindowSystemMenuHint); + controller_applet->setWindowModality(Qt::WindowModal); + bool is_success = controller_applet->exec() != QDialog::Rejected; // Don't forget to apply settings. + system->HIDCore().DisableAllControllerConfiguration(); system->ApplySettings(); config->Save(); UpdateStatusButtons(); + + emit ControllerSelectorReconfigureFinished(is_success); } -void GMainWindow::ProfileSelectorSelectProfile() { - QtProfileSelectionDialog dialog(system->HIDCore(), this); - dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | - Qt::WindowTitleHint | Qt::WindowSystemMenuHint | - Qt::WindowCloseButtonHint); - dialog.setWindowModality(Qt::WindowModal); - if (dialog.exec() == QDialog::Rejected) { +void GMainWindow::ControllerSelectorRequestExit() { + if (controller_applet) { + controller_applet->reject(); + } +} + +void GMainWindow::ProfileSelectorSelectProfile( + const Core::Frontend::ProfileSelectParameters& parameters) { + profile_select_applet = new QtProfileSelectionDialog(system->HIDCore(), this, parameters); + SCOPE_EXIT({ + profile_select_applet->deleteLater(); + profile_select_applet = nullptr; + }); + + profile_select_applet->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | + Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | + Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); + profile_select_applet->setWindowModality(Qt::WindowModal); + if (profile_select_applet->exec() == QDialog::Rejected) { emit ProfileSelectorFinishedSelection(std::nullopt); return; } const Service::Account::ProfileManager manager; - const auto uuid = manager.GetUser(static_cast<std::size_t>(dialog.GetIndex())); + const auto uuid = manager.GetUser(static_cast<std::size_t>(profile_select_applet->GetIndex())); if (!uuid.has_value()) { emit ProfileSelectorFinishedSelection(std::nullopt); return; @@ -648,6 +683,12 @@ void GMainWindow::ProfileSelectorSelectProfile() { emit ProfileSelectorFinishedSelection(uuid); } +void GMainWindow::ProfileSelectorRequestExit() { + if (profile_select_applet) { + profile_select_applet->reject(); + } +} + void GMainWindow::SoftwareKeyboardInitialize( bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters) { if (software_keyboard) { @@ -772,7 +813,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, return; } - QtNXWebEngineView web_browser_view(this, *system, input_subsystem.get()); + web_applet = new QtNXWebEngineView(this, *system, input_subsystem.get()); ui->action_Pause->setEnabled(false); ui->action_Restart->setEnabled(false); @@ -799,9 +840,9 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, loading_progress.setValue(1); if (is_local) { - web_browser_view.LoadLocalWebPage(main_url, additional_args); + web_applet->LoadLocalWebPage(main_url, additional_args); } else { - web_browser_view.LoadExternalWebPage(main_url, additional_args); + web_applet->LoadExternalWebPage(main_url, additional_args); } if (render_window->IsLoadingComplete()) { @@ -810,15 +851,15 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, const auto& layout = render_window->GetFramebufferLayout(); const auto scale_ratio = devicePixelRatioF(); - web_browser_view.resize(layout.screen.GetWidth() / scale_ratio, - layout.screen.GetHeight() / scale_ratio); - web_browser_view.move(layout.screen.left / scale_ratio, - (layout.screen.top / scale_ratio) + menuBar()->height()); - web_browser_view.setZoomFactor(static_cast<qreal>(layout.screen.GetWidth() / scale_ratio) / - static_cast<qreal>(Layout::ScreenUndocked::Width)); + web_applet->resize(layout.screen.GetWidth() / scale_ratio, + layout.screen.GetHeight() / scale_ratio); + web_applet->move(layout.screen.left / scale_ratio, + (layout.screen.top / scale_ratio) + menuBar()->height()); + web_applet->setZoomFactor(static_cast<qreal>(layout.screen.GetWidth() / scale_ratio) / + static_cast<qreal>(Layout::ScreenUndocked::Width)); - web_browser_view.setFocus(); - web_browser_view.show(); + web_applet->setFocus(); + web_applet->show(); loading_progress.setValue(2); @@ -831,7 +872,7 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, // TODO (Morph): Remove this QAction* exit_action = new QAction(tr("Disable Web Applet"), this); - connect(exit_action, &QAction::triggered, this, [this, &web_browser_view] { + connect(exit_action, &QAction::triggered, this, [this] { const auto result = QMessageBox::warning( this, tr("Disable Web Applet"), tr("Disabling the web applet can lead to undefined behavior and should only be used " @@ -840,21 +881,21 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, QMessageBox::Yes | QMessageBox::No); if (result == QMessageBox::Yes) { UISettings::values.disable_web_applet = true; - web_browser_view.SetFinished(true); + web_applet->SetFinished(true); } }); ui->menubar->addAction(exit_action); - while (!web_browser_view.IsFinished()) { + while (!web_applet->IsFinished()) { QCoreApplication::processEvents(); if (!exit_check) { - web_browser_view.page()->runJavaScript( + web_applet->page()->runJavaScript( QStringLiteral("end_applet;"), [&](const QVariant& variant) { exit_check = false; if (variant.toBool()) { - web_browser_view.SetFinished(true); - web_browser_view.SetExitReason( + web_applet->SetFinished(true); + web_applet->SetExitReason( Service::AM::Applets::WebExitReason::EndButtonPressed); } }); @@ -862,22 +903,22 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, exit_check = true; } - if (web_browser_view.GetCurrentURL().contains(QStringLiteral("localhost"))) { - if (!web_browser_view.IsFinished()) { - web_browser_view.SetFinished(true); - web_browser_view.SetExitReason(Service::AM::Applets::WebExitReason::CallbackURL); + if (web_applet->GetCurrentURL().contains(QStringLiteral("localhost"))) { + if (!web_applet->IsFinished()) { + web_applet->SetFinished(true); + web_applet->SetExitReason(Service::AM::Applets::WebExitReason::CallbackURL); } - web_browser_view.SetLastURL(web_browser_view.GetCurrentURL().toStdString()); + web_applet->SetLastURL(web_applet->GetCurrentURL().toStdString()); } std::this_thread::sleep_for(std::chrono::milliseconds(1)); } - const auto exit_reason = web_browser_view.GetExitReason(); - const auto last_url = web_browser_view.GetLastURL(); + const auto exit_reason = web_applet->GetExitReason(); + const auto last_url = web_applet->GetLastURL(); - web_browser_view.hide(); + web_applet->hide(); render_window->setFocus(); @@ -903,6 +944,15 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url, #endif } +void GMainWindow::WebBrowserRequestExit() { +#ifdef YUZU_USE_QT_WEB_ENGINE + if (web_applet) { + web_applet->SetExitReason(Service::AM::Applets::WebExitReason::ExitRequested); + web_applet->SetFinished(true); + } +#endif +} + void GMainWindow::InitializeWidgets() { #ifdef YUZU_ENABLE_COMPATIBILITY_REPORTING ui->action_Report_Compatibility->setVisible(true); @@ -1675,8 +1725,9 @@ bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t p return true; } -bool GMainWindow::SelectAndSetCurrentUser() { - QtProfileSelectionDialog dialog(system->HIDCore(), this); +bool GMainWindow::SelectAndSetCurrentUser( + const Core::Frontend::ProfileSelectParameters& parameters) { + QtProfileSelectionDialog dialog(system->HIDCore(), this, parameters); dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); dialog.setWindowModality(Qt::WindowModal); @@ -1722,7 +1773,13 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t Settings::LogSettings(); if (UISettings::values.select_user_on_boot) { - if (SelectAndSetCurrentUser() == false) { + const Core::Frontend::ProfileSelectParameters parameters{ + .mode = Service::AM::Applets::UiMode::UserSelector, + .invalid_uid_list = {}, + .display_options = {}, + .purpose = Service::AM::Applets::UserSelectionPurpose::General, + }; + if (SelectAndSetCurrentUser(parameters) == false) { return; } } @@ -2014,7 +2071,13 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target if (has_user_save) { // User save data const auto select_profile = [this] { - QtProfileSelectionDialog dialog(system->HIDCore(), this); + const Core::Frontend::ProfileSelectParameters parameters{ + .mode = Service::AM::Applets::UiMode::UserSelector, + .invalid_uid_list = {}, + .display_options = {}, + .purpose = Service::AM::Applets::UserSelectionPurpose::General, + }; + QtProfileSelectionDialog dialog(system->HIDCore(), this, parameters); dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); dialog.setWindowModality(Qt::WindowModal); @@ -3089,13 +3152,23 @@ void GMainWindow::OnSaveConfig() { } void GMainWindow::ErrorDisplayDisplayError(QString error_code, QString error_text) { - OverlayDialog dialog(render_window, *system, error_code, error_text, QString{}, tr("OK"), - Qt::AlignLeft | Qt::AlignVCenter); - dialog.exec(); + error_applet = new OverlayDialog(render_window, *system, error_code, error_text, QString{}, + tr("OK"), Qt::AlignLeft | Qt::AlignVCenter); + SCOPE_EXIT({ + error_applet->deleteLater(); + error_applet = nullptr; + }); + error_applet->exec(); emit ErrorDisplayFinished(); } +void GMainWindow::ErrorDisplayRequestExit() { + if (error_applet) { + error_applet->reject(); + } +} + void GMainWindow::OnMenuReportCompatibility() { #if defined(ARCHITECTURE_x86_64) && !defined(__APPLE__) const auto& caps = Common::GetCPUCaps(); diff --git a/src/yuzu/main.h b/src/yuzu/main.h index a23b373a5..8b5c1d747 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -47,7 +47,11 @@ enum class DumpRomFSTarget; enum class InstalledEntryType; class GameListPlaceholder; +class QtAmiiboSettingsDialog; +class QtControllerSelectorDialog; +class QtProfileSelectionDialog; class QtSoftwareKeyboardDialog; +class QtNXWebEngineView; enum class StartGameType { Normal, // Can use custom configuration @@ -65,6 +69,7 @@ struct ControllerParameters; struct InlineAppearParameters; struct InlineTextParameters; struct KeyboardInitializeParameters; +struct ProfileSelectParameters; } // namespace Core::Frontend namespace DiscordRPC { @@ -161,7 +166,7 @@ signals: void AmiiboSettingsFinished(bool is_success, const std::string& name); - void ControllerSelectorReconfigureFinished(); + void ControllerSelectorReconfigureFinished(bool is_success); void ErrorDisplayFinished(); @@ -184,8 +189,10 @@ public slots: void OnSaveConfig(); void AmiiboSettingsShowDialog(const Core::Frontend::CabinetParameters& parameters, std::shared_ptr<Service::NFP::NfpDevice> nfp_device); + void AmiiboSettingsRequestExit(); void ControllerSelectorReconfigureControllers( const Core::Frontend::ControllerParameters& parameters); + void ControllerSelectorRequestExit(); void SoftwareKeyboardInitialize( bool is_inline, Core::Frontend::KeyboardInitializeParameters initialize_parameters); void SoftwareKeyboardShowNormal(); @@ -196,9 +203,12 @@ public slots: void SoftwareKeyboardInlineTextChanged(Core::Frontend::InlineTextParameters text_parameters); void SoftwareKeyboardExit(); void ErrorDisplayDisplayError(QString error_code, QString error_text); - void ProfileSelectorSelectProfile(); + void ErrorDisplayRequestExit(); + void ProfileSelectorSelectProfile(const Core::Frontend::ProfileSelectParameters& parameters); + void ProfileSelectorRequestExit(); void WebBrowserOpenWebPage(const std::string& main_url, const std::string& additional_args, bool is_local); + void WebBrowserRequestExit(); void OnAppFocusStateChanged(Qt::ApplicationState state); void OnTasStateChanged(); @@ -233,7 +243,7 @@ private: void SetDiscordEnabled(bool state); void LoadAmiibo(const QString& filename); - bool SelectAndSetCurrentUser(); + bool SelectAndSetCurrentUser(const Core::Frontend::ProfileSelectParameters& parameters); /** * Stores the filename in the recently loaded files list. @@ -466,7 +476,12 @@ private: QString last_filename_booted; // Applets + QtAmiiboSettingsDialog* cabinet_applet = nullptr; + QtControllerSelectorDialog* controller_applet = nullptr; + QtProfileSelectionDialog* profile_select_applet = nullptr; + QDialog* error_applet = nullptr; QtSoftwareKeyboardDialog* software_keyboard = nullptr; + QtNXWebEngineView* web_applet = nullptr; // True if amiibo file select is visible bool is_amiibo_file_select_active{}; diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h index 20e403400..209cfc28a 100644 --- a/src/yuzu_cmd/default_ini.h +++ b/src/yuzu_cmd/default_ini.h @@ -163,7 +163,7 @@ keyboard_enabled = # 0: Disabled, 1 (default): Enabled use_multi_core = -# Enable extended guest system memory layout (6GB DRAM) +# Enable extended guest system memory layout (8GB DRAM) # 0 (default): Disabled, 1: Enabled use_extended_memory_layout = diff --git a/vcpkg.json b/vcpkg.json index fbadca0e6..0352dab77 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", "name": "yuzu", - "builtin-baseline": "9b22b40c6c61bf0da2d46346dd44a11e90972cc9", + "builtin-baseline": "acc3bcf76b84ae5041c86ab55fe138ae7b8255c7", "version": "1.0", "dependencies": [ "boost-algorithm", |