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", |